‘이더리움 댑 개발’ 세미나 4. 5장. Deploying and Interacting with Contracts

이번 세미나에서는 5장. Deploying and Interacting with Contracts을 다룹니다.

세미나 진행을 좀 더 원활히 하기 위해

  • 본문 내용의 일부 순서를 바꾸었습니다.
  • 컨트랙트와 상호작용하는 웹 페이지 부분은 truffle console을 사용하는 것으로 대체했습니다.

 

컨트랙트는 개발 중에는 로컬 네트워크에, 개발 후에는 테스트넷을 거쳐 최종적으로 메인넷에 배포됩니다. 이번 장에서는 가나쉬를 로컬 네트워크로, goerli를 테스트넷으로 사용합니다.

로컬 네트워크는 동기화가 필요하지 않기 때문에 이름 그대로 로컬에서 직접 운영하는데 부담이 없지만, 테스트넷이나 메인넷은 동기화에 많은 시간과 저장공간을 요구하기 때문에 직접 풀노드를 운영하기는 쉽지 않습니다. Infura는 이런 문제를 해결하기 위해 등장한 서비스이고, 이더리움 풀노드를 직접 운영하지 않고도 같은 효과를 낼 수 있도록 합니다. 테스트넷이나 메인넷 풀노드가 필요한데(댑 서비스를 제공하려고 하는 경우와 같은) 풀노드를 직접 운영하는 것이 부담스러울 때 사용할 수 있습니다. 이런 서비스를 사용하는 것은 편하긴 하지만 제 삼자에 의존하는 위험성이 있습니다.

이번 장에서는 Infura를 이용해서 Rinkeby 테스트넷에 연동합니다.

Deploying to Ganache

이전 장에서 우리는 truffle test 명령을 실행해서 트러플 테스트 환경에 컨트랙트를 배포했습니다. 트러플 테스트 환경은 자바 스크립트로 작성한 테스트 케이스 실행을 위한 컨트랙트 배포 환경을 제공합니다.

이번 장에서는 로컬 네트워크인 가나쉬에 컨트랙트를 배포합니다.

 

본문 내용에 따라 가나쉬 GUI 버전을 실행해 봅니다.

새로운 터미널을 열고 가나쉬 CLI 버전도 실행해 봅니다. 이번 세미나에서는 가나쉬 CLI 버전을 사용할 것입니다.

가나쉬 CLI 버전을 실행하면 기본적으로 100이더를 가진 10개의 계정이 생성됩니다.

 

트러플 배포 환경을 로컬 네트워크로 설정합니다.

  • truffle-config.js 파일을 엽니다. 네트워크 설정은 networks에 작성합니다. 여러가지 네트워크 환경이 주석으로 작성되어 있습니다.
  • 로컬 네트워크는 development에 작성되어 있습니다. 주석을 해제하고 truffle-config.js 파일을 저장합니다.

truffle migrate로 컨트랙트를 배포합니다.

 

truffle networks 명령을 실행해서 어떤 네트워크에 어떤 컨트랙트가 배포되었는지를 확인해 봅니다.

컨트랙트와 상호작용

truffle console 명령을 사용해서 배포된 컨트랙트와 상호작용합니다.

  • greeter 디렉토리에서 truffle console 명령을 실행합니다.
  • 트러플 콘솔 프롬프트에서 networks 명령을 실행합니다.
    • 네트워크에 배포된 컨트랙트를 확인할 수 있습니다.
  • 테스트 케이스에서 했던 것처럼 배포된 컨트랙트를 구할 수 있습니다.
  • contract.greet()를 실행합니다.
    • “Hello, World!”가 출력됩니다.
  • contract.setGreeting(“Hi There!”)를 실행합니다.
    • 트랜잭션 실행 결과가 출력됩니다.
  • contract.greet()를 실행합니다.
    • “Hi There!”가 출력됩니다.

Deploying to Goerli with Parity

이더리움 클라이언트로 패리티(오픈 이더리움으로 이름 변경)로 테스트넷 Goerli에 연결해서 컨트랙트를 배포합니다.

    • 테스트넷 goerli에 연결되도록 패리티를 실행합니다.
    • 트러플 환경설정에서 네트워크를 설정합니다. truffle-config.js 파일을 열고 networks에 다음을 추가합니다.
        • 메타마스크에서 키 생성 시에 사용했던 니모닉으로 환경변수 MNEMONIC을 설정합니다. 메타마스크 설정 페이지 보안 및 개인 정보 보호 탭을 클릭하면 니모닉을 보실 수 있습니다.
          • export MNEMONIC=”키 생성 시에 사용했던 니모닉”
        • 컨트랙트 배포시에 사용하기 위해 HDWalletProvider 객체를 web3 provider로 사용합니다.
          • HDWalletProvider을 설치합니다. greeter 디렉토리에서 다음을 실행합니다.
          • truffle-config.js 파일의 최상단부에 아래와 같이 작성해 줍니다. 주석으로 작성되어 있으니 해당 부분의 주석을 해제해도 됩니다.
            • const HDWalletProvider = require(‘@truffle/hdwallet-provider’);
    • 컨트랙트를 배포하려면 수수료로 사용할 goerli 이더가 있어야 합니다.
    • 컨트랙트를 배포합니다.
      • 패리티를 첫 번째 실행한 거라면 동기화에 어느 정도 시간이 걸립니다.
    • 로컬 네트워크에서 했던 것처럼 truffle console을 실행하고 컨트랙트를 실행해 봅니다.

Deploying to Rinkeby with Infura

아래 본문 내용을 읽고 Infura가 뭔지 알도록 합니다.

Infura is a service provider for managed Ethereum nodes. This saves you the time of syncing a local client, which (depending on your hardware and bandwidth) could take anywhere from hours to days to get fully synced. Infura allows deployments to the mainnet and to the Kovan, Rinkeby, Goerli, and Ropsten testnets.

  • Infura에 가입하지 않았다면 가입합니다.
    • https://infura.io/register
  • 대시보드에서 ETHEREUM을 클릭합니다.
  • Create a New Project를 클릭합니다. 프로젝트 이름을 “Greeter”로 작성합니다.
  • 네트워크를 설정합니다. networks에 다음을 추가합니다.
      • 니모닉은 goerli에서와 같은 방법으로 구해서 설정합니다.
      • Infura 프로젝트 아이디로 환경변수 INFURA_PROJECT_ID를 설정합니다.
        • export INFURA_PROJECT_ID=<PROJECT_ID>
          • PROJECT_ID를 구합니다.
            • 대시보드에서 프로젝트를 클릭합니다.
            • 프로젝트 상세 페이지에서 SETTINGS 탭을 선택합니다.
            • PROJECT ID를 복사합니다.
  • rinkeby 이더를 구합니다. 메타마스크 계정 주소를 사용합니다.
  • https://rinkeby.etherscan.io/에서 주소로 트랜잭션을 확인할 수 있습니다.
  • 컨트랙트를 배포합니다.
  • 로컬 네트워크에서 했던 것처럼 truffle console을 실행하고 컨트랙트를 실행해 봅니다.

참고자료

  1. 트러플 환경설정을 좀 더 세부적으로 하고 싶을 때
  2. 트러플로 디버깅하고 싶을 때
  3. 코드 품질을 향상 시킬 수 있는 추가적인 도구들이 필요할 때
About the Author
(주)뉴테크프라임 대표 김현남입니다. 저에 대해 좀 더 알기를 원하시는 분은 아래 링크를 참조하세요. http://www.umlcert.com/kimhn/

Leave a Reply

*