[Solidity+Go] geth로 스마트 컨트랙트 배포하기 - 2. 스마트 컨트랙트로 Go 코드 생성

geth로 스마트 컨트랙트 배포하기 · 2/7
  1. 1. 초기 구성
  2. 2. 스마트 컨트랙트로 Go 코드 생성
  3. 3. 생성된 Go 코드로 스마트 컨트랙트 배포
  4. 4. 배포된 스마트 컨트랙트와 상호작용
  5. 5. 이벤트 구독
  6. 6. 메타데이터를 사용한 standard json input 생성
  7. 7. standard json input을 사용해 배포한 컨트랙트 검증

1. 스마트 컨트랙트

contracts/MyToken.sol

// SPDX-License-Identifier: GPL-3.0

pragma solidity ^0.8.19;

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";

contract MyToken is ERC20 {
    constructor(uint256 initialSupply) ERC20("MyToken", "MTK") {
        _mint(msg.sender, initialSupply);
    }
}

@openzeppelin/contracts 라이브러리의 ERC20.sol 컨트랙트를 상속하여 MyToken 컨트랙트를 작성


2. solc를 사용해 abi 및 binary 파일 생성

build 디렉토리 생성

$ mkdir -p build

abi 및 binary 파일 생성

$ solc @openzeppelin/=$(pwd)/node_modules/@openzeppelin/ --optimize --abi --bin --pretty-json contracts/MyToken.sol -o build --overwrite
Compiler run successful. Artifact(s) can be found in directory "build".

@openzeppelin/=$(pwd)/node_modules/@openzeppelin/: 컨트랙트에서 사용한 라이브러리의 리매핑 정보
--optimize: 옵티마이저 활성화 (기본 실행 횟수: 200)
--abi: abi 파일 생성
--bin: binary 파일 생성
--pretty-json: abi 파일의 json 데이터 포맷을 예쁘게
contracts/MyToken.sol: 컴파일할 solidity 파일
-o build: 컴파일 결과가 저장될 디렉토리 지정
--overwrite: 이미 컴파일 결과가 존재할 경우, 덮어쓰기


3. abi 및 binary 파일을 사용해 Go 코드 생성

gen 디렉토리 생성

$ mkdir -p gen

Go 코드 생성

$ abigen --bin=build/MyToken.bin --abi=build/MyToken.abi --pkg=token --out=gen/token.go

--bin: binary 파일을 지정, 생성된 코드에 배포 기능이 필요한 경우에 사용
--abi: abi 파일을 지정
--pkg: 생성된 코드의 패키지명
--out: 생성된 코드가 저장될 디렉토리

Go 모듈 업데이트

$ go mod tidy

생성된 Go 코드에서 사용되는 go-ethereum 패키지를 가져옴


4. 전체 코드