본문 바로가기
etc/블록체인 뉴딜일자리사업

스마트 컨트랙트 찍먹

by vellahw 2023. 5. 17.

 

 

💭 서론

교육 11일차

오늘의 수업은 커리큘럼 상으로는 dApp 이론과 실습이었지만 오전은 여태 배운 블록체인에 관한 이론, 오후는 스마트 컨트랙트 실습 시간을 가졌다. 강사님도 오늘 하루만 오시는 분이었어서 강의할 내용에 비해 시간이 촉박해서 원데이 클래스를 들은 느낌 ㅋㅋㅋ 솔리디티가 '어떻게 생겼는지' 그리고 어떠한 코드로 블록이 생성되는건지 드디어! 알게 되었다!

 

 

✔️ 블록체인 프로젝트 기획

1. 블록체인 기획

  • 블록체인 메인 체인 설정(ETH, Klayton 등)
  • 스마트 컨트랙트 영역 설정(지분형, 단일형, 고정가, Auction 방식)
  • 온체인, 오프체인(DB: MySQL, Oracle 등..) 영역 설정
  • IPFS 데이터 솔루션 선정 및 설정

 

2. 서비스 기획

  • 고객사 요구사항 정의서 작성
  • 타켓 및 진입 시장에 맞춘 서비스 방향 설정
  • IA 및 스토리보드 기획
  • 데이터 구조 설정 및 관리자 화면 설계
  • 디자인 에셋 및 서비스 가이드

 

✔️ 각 블록체인 네트워크의 장단점

구분 이더리움 클레이톤 트론 폴리곤
장점 - 가장 유명하다.
- CEX 리스닝에 가장 유리
- 체인 안정성이 증명되어있다.
- 한국에서 가장 유명(카카오에서 만듦)
- 저렴한 가스비
- 안정적 개발환경
- EVM 호환성 뛰어남
- 이더리움과 동일한 개발환경
- 재단에서 '브릿지'를 자체 제공
단점 매우 비싼 가스비 - 이더리움에 비해 안정성 떨어짐(하루이상 블록 생성 안 되는 오류..)
- 개발툴이 이더리움에 비해 조잡함
- 탈중앙화가 보장 되었나 의문(카카오가 관리..)
오픈씨에서 현재 NFT를 지원하지 않음 -규모가 작음?
-옥션/경매 형식을 취할 수 없다.

 

 

✔️ 이더리움의 두 가지 구조

1. Contract Account:

거래소?에서 만들어진 주소

 

2. Extenally Owned Account

메타마스크! 개인 지갑 주소!

 

 

✔️ 이더리움의 세부기술 GAS '가스'

스마트 컨트랙트의 무한 반복 코드를 막기 위한 이더리움의 수수료 개념 (가스비)

트랜잭션 수행을 위해선 가스를 지불해야하는데 이용료가 비싸다.

 

 

✔️ Smart Contract 스마트 컨트랙트

기존에는 서면으로 계약서를 작성하고 서로가 그것에 동의하였으며, 이 계약서가 진실된 약속임을 날인으로 입증했다. 

스마트 컨트랙트는 이러한 계약서를 문서가 아닌 컴퓨터 프로그램의 방식으로 작성하고 저장하는 방식이다.

이전에는 신뢰상의 문제로 빛을 보지 못했지만 블록체인 기술에 의해 비로소 가치를 갖게 되었다. 이것을 처음으로 구현하고 활성화한 것이 이더리움 블록체인이다.

 

ERC-20 토큰

ERC-20 토큰은 이더리움 네트워크 안에서 구현된 스마트 컨트랙트의 한 종류이다.

오픈소스이므로 화폐로 활용하기 위한 부정한 코드(잔고가 없어도 토큰을 전송할 수 있는 기능 같은..)를 넣으면 그 토큰은 화폐로서 인정 받을 수 없다. 한 번 블록체인에 올라간 스마트 컨트랙트는 코드 변경이 불가능하고 고유한 주소를 가진다. 그 스마트 컨트랙트에 올라간 데이터는 위조할 수 없기 때문에 화폐로서 기능할 수 있다..

 

 

✔️ 스마트 컨트랙트 개발 준비물

  • 이더리움 스마트 컨트랙트는 Solidity 솔리디티 언어를 사용해 개발한다. 
  • 컴퓨터가 이해할 수 있도록 컴파일된 코드를 이더리움 네트워크로 디플로이 하기 위한 이더리움 account가 필요(EOA 즉, 메타마스크 지갑)

 

🧷 실습

1. 메타마스크에 Sepolia 테스트 네트워크 추가하기

실습에서는 Sepolia 테스트넷을 사용했다.

메타마스크를 처음 설치한 경우 Sepolia 네트워크를 추가해야하는데 바로 보이지 않는데 설정을 바꿔줘야한다.

위와 같이 내 계정-설정-고급에 들어가서 '테스트 네트워크 보기'를 켜준다.

 

네트워크가 연동된 것을 확인!

 

그리고 Sepolia 웹 사이트에 접속해 지갑을 연동하면 테스트용 0.5 sepolia ETH를 받을 수 있다.

 

 

2. Remix 솔리디티 개발 툴 써보기

솔리디티도 어김없이 HelloWorld로 찍먹의 시작을 연다.

Remix 웹 사이트에서 솔리디티를 이용해 개발할 수 있다.

찍먹이었기 때문에 그냥 디폴트 워크스페이스에서 최상위 폴더에 테스트 파일을 생성해서 코드를 작성했다.

코드는 강사님이 깃허브에 올려주신 예제 코드들을 갖다 썼는데 퍼블릭으로 올려두셨으니 공개해도 되..겠지? 

 

솔리티 확장자는 .sol

pragma solidity 옆 숫자는 사용할 솔리디티 컴파일러? 버전이다.

예제 코드는 0.4.26 버전을 사용했지만 현재 0.8.20버전까지 있더라

 

2-1. Compile 컴파일과 Deploy 디플로이

코드를 작성 했으면 좌측 세 번째 컴파일 메뉴에서 버전을 맞춰주어야 오류가 발생하지 않는다.

컴파일은 자동으로도 되는 것 같은데 사진처럼 초록색 체크 아이콘이 떠야 정상적으로 컴파일 된 것이다.

 

컴파일 했으면 디플로이를 해보자.

좌측 네 번째 메뉴에서 디플로이 할 수 있다.

맨위 ENVIRONMENT에서 Injected Provider-MetaMask를 클릭에 메타마스크와 연결 해준다. 클릭하면 메타마스크 팝업이 자동으로 열린다.

 

지갑을 연동하고 디플로이 버튼을 누르면 위와 같이 가스비가 청구되는데 이를 위해 Sepolia 회원가입을 한 것이다.

 

확인 버튼을 누르면 아래 터미널(?)에 pending ...  문구와 함께 view on etherscan이 있다. 링크로 들어가면 트랜잭션을 확인할 수 있다.

트랜잭션이 success 되었다면 사진속 초록 체크 아이콘과 옆 문구가 뜬다.

 

view on etherscan을 클릭해서 이더스캔으로 이동하면 아래와 같은 화면을 보게 된다.

 

 Status가 Success면 완료된 것. (pending이나 indexing? 이 떠있으면 아직 진행중인거라 기다리면 된다.)

To 섹션(?)에 있는 Created 되었다는 주소를 클릭하고 해당 컨트랙트로 이동해보자.

 

Contract 메뉴의 Verify and Publish를 클릭하자.

 

위와 같은 화면에서 1. 컴파일러 타입은 Solidity (Single file)로 맞춰주고 2. 컴파일러 버전은 작성한 코드와 동일하게, 3. 오픈소스 라이센스 타입은 MIT로 선택 후 컨티뉴 버튼을 누른다.

 

다음 페이지에서 작성한 소스 코드를 그대로 복사하여 붙여넣고 맨아래 Verify and Publish를 클릭하면 완료!

이렇게 작성한 코드가 한 블록으로 올라가게 되었다...

 

컨트랙트 주소로 이동하면 내가 작성한 컨트랙트 이름과 함께 소스가 그대로 올라간 것을 확인할 수 있다! (바로가기)

 

3. ERC-20 토큰 - 나만의 토큰 생성

  • ERC-20 토큰 역시 컨트랙트 하나에 불과하지만 그 규칙을 지켜 구현한 컨트랙트이다.
  • 심볼(로고)과 사이트 같은 것..을 지정하기 위해선 etherscan.io/contractus에 토큰 정보를 보내 인정 받아야한다.. 블록 올린 사람만이 정보를 올릴 수 있음

토큰을 생성하는 방법에 대한 실습도 했다! 과정이 엄청 간단해서 놀라웠다..

코드가 140줄이라 다 올릴 순 없어 토큰의 정보를 입력하는 함수 부분만 따왔다. (사용한 코드)

   function StandardToken() public {
       _name = "MisterPizza";             		  //코인 이름
       _decimals = 18;                            //소수점 자리(?)..
       _symbol = MPC";                           //ETH와 같음 == 11MPC 
       _totalSupply = 100000000000000000000000000;      // 총 공급량
      balances[msg.sender] = 100000000000000000000000000;          // 참여자(?)에게 주는 양
   }

totalSupply에서 0을 18개 뺀 만큼의 토큰이 공급된다..

 

새로운 파일을 만들어 코드를 작성하고 위 과정과 똑같이 컴파일을 해준 뒤 디플로이 할 때는 사진 속 표시한 CONTRACT를 StandardToken으로 바꿔준 뒤 디플로이 해야한다!

트랜잭션이 완료되고 컨트랙트로 이동 후 똑같이 Verify and Publish를 해준다.

 

완료! 이렇게 간단하게 토큰을 만들 수 있다!

이제 메타마스크로 생성한 토큰을 불러와보자. Verify 된 컨트랙트 주소를 복사한 후 아래처럼 토큰 가져오기를 해주면 된다.

 

주소만 붙여주면 나머지는 자동으로 불러와진다.

 

MPC 확인

토큰정보를 입력할 때 totalSupply로 100000000000000000000000000을 입력했고 decimals로는 18을 입력했다. 토큰 수를 보면 totalSupply에서 0을 18개 뺀 수 100000000 MPC가 들어온 것이다.

토큰을 생성했으니 메타마스크의 개인 지갑 주소를 통해 주고 받기도 가능해진다.

 

4. 옥션 경매 기능 (예제코드)

새 파일을 만들어 예제 코드를 붙여넣고 컴파일-디플로이-Verify&Publish 해준다.

 

생성된 컨트랙트 페이지에서 위 순서대로 버튼을 눌러 메타마스크와 연결해준다.

 

bid를 눌러 원하는 토큰 값을 입력해서 bid 한다.

 

Read Contract 버튼을 눌러 가장 높게 Bid한 Bidder와 가장 높은 Bid 가격도 확인할 수 있다.

 

 

 

💭 마치며

수업이 너무 적은 설명과 빠른 진행으로 따라가기 급했지만 직접 실습해보니 재미있었다. 직접 토큰을 발행도 해보고!  들으면 들을수록 더 알고싶어지는 블록체인.. 오늘도 너무 겉핥기 식이었던 것 같아 아쉽지만 내가 더 공부 해봐야지..

 


 

댓글