티스토리 뷰

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. 전체 코드

 

GitHub - piatoss3612/go-ethereum-practice

Contribute to piatoss3612/go-ethereum-practice development by creating an account on GitHub.

github.com

최근에 올라온 글
최근에 달린 댓글
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Total
Today
Yesterday
글 보관함