에르노트
Ethereum Foundry를 이용하여 스마트 컨트랙프 배포하기 본문
이전에 Hardhat을 이용하여 스마트 컨트랙트를 배포하는 과정을 작성했었다.
2023.04.08 - [Dev/Blockchain] - Sepolia 테스트넷에 스마컨트랙트 배포하기
이번에는 Foundry라는 프레임워크를 이용하여 스마트 컨트랙트를 테스트넷에 배포하는 과정을 다뤄볼 것이다. 먼저 Foundry는 Rust 언어로 작성되어서 JS 기반의 Truffle이나 Hardhat보다 훨씬 더 빠르다. 그리고 테스팅 코드를 작성할 때 Solidity를 100% 지원해서 자바스크립트 의존성을 없애준다는 강점이 있다. uint256을 다루기 위해서 bignumber.js 등을 따로 임포트해야 하는 번거로움이 싹 사리진 것이다.
다만 아직 생소한 프레임워크이다보니 레퍼런스 자료가 거의 없다는 치명적인 단점이 있다. 특히 Foundry가 만들어진게 암호화폐 시장의 암흑기가 본격적으로 시작된 2022년도 6월경이기 때문에, 이를 활용한 신규 이더리움 프로젝트들의 움직임도 굉장히 드문 것으로 추정된다. 언젠가 다시 빛을 볼 날을 기다리면서.. 최소한의 기록이나마 남겨두고자 한다.
기본 배포
컨트랙트 배포를 위해서는 forge create 명령어를 사용한다. 여기서 사용되는 rpc_url(API 주소), private_key(메타마스크 지갑의 개인키)를 얻어내는 방법은 이 포스팅을 참고하기 바란다.
$ forge create --rpc-url <your_rpc_url> --private-key <your_private_key> \
src/MyContract.sol:MyContract
생성자에 들어갈 인자 넘기기
컨트랙트의 생성자에 인자를 넘기기 위해서는 --constructor-args 옵션을 추가한다.
다음과 같은 ERC20Mintable 컨트랙트를 배포한다면,
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.13;
import "solmate/tokens/ERC20.sol";
contract ERC20Mintable is ERC20 {
constructor(string memory name_, string memory symbol_)
ERC20(name_, symbol_, 18)
{}
function mint(uint256 amount, address to) public {
_mint(to, amount);
}
}
아래와 같이 name_, symbol_ 을 넘겨주면 된다.
forge create --rpc-url <your_rpc_url> \
--constructor-args "TokenA" "TKA" \
--private-key <your_private_key> \
src/ERC20Mintable.sol:ERC20Mintable
컨트랙트 배포(deploy) 및 이더스캔에서 검증하기(verify)
이더스캔에서 일일히 배포된 컨트랙트를 검증하는 것은 매우 귀찮고 번거롭다. 하지만 이더스캔 API를 이용하면 이 과정을 100% 자동화 할 수 있다.
API 키 발급을 위해서, 먼저 이더스캔(https://etherscan.io/) 사이트에 접속하여 회원가입 및 로그인을 한다.
그리고 마이페이지에서 API Keys 탭에 들어가면 새로운 etherscan api key를 발급받을 수 있다!
배포 명령어에 --etherscan-api-key 라는 옵션을 추가해주면 배포와 동시에 검증이 자동으로 수행된다.
forge create --rpc-url <your_rpc_url> \
--constructor-args "TokenA" "TKA" \
--private-key <your_private_key> \
--etherscan-api-key <your_etherscan_api_key> \
--verify \
src/ERC20Mintable.sol:ERC20Mintable
배포 완료
배포 및 검증이 성공적으로 완료되었고, Sepolia Etherscan에서 해당 컨트랙트의 주소 '0x8517d32f91ec7f29f342841f3eb2285d01b332a6'로 검색할 경우 정상적으로 반영된 것을 확인할 수 있다.
https://sepolia.etherscan.io/address/0x8517d32f91ec7f29f342841f3eb2285d01b332a6
'Dev > Blockchain' 카테고리의 다른 글
메타마스크 지갑 고급 가스비 설정 (0) | 2023.04.29 |
---|---|
Sepolia 테스트넷에 스마컨트랙트 배포하기 (0) | 2023.04.08 |