티스토리 뷰
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. 전체 코드
'Solidity' 카테고리의 다른 글
[Solitidy+Go] geth로 스마트 컨트랙트 배포하기 - 4. 배포된 스마트 컨트랙트와 상호작용 (0) | 2023.12.14 |
---|---|
[Solitidy+Go] geth로 스마트 컨트랙트 배포하기 - 3. 생성된 Go 코드로 스마트 컨트랙트 배포 (0) | 2023.12.14 |
[Solitidy+Go] geth로 스마트 컨트랙트 배포하기 - 1. 초기 구성 (0) | 2023.12.13 |
[Solidity] 재진입 공격 예방 기법 (0) | 2023.10.04 |
[Solidity] 재진입 공격 (Reentrancy Attack) (0) | 2023.10.03 |