에르노트

Ethereum Foundry를 이용하여 스마트 컨트랙프 배포하기 본문

Dev/Blockchain

Ethereum Foundry를 이용하여 스마트 컨트랙프 배포하기

두콩 2023. 10. 11. 19:03

이전에 Hardhat을 이용하여 스마트 컨트랙트를 배포하는 과정을 작성했었다.

2023.04.08 - [Dev/Blockchain] - Sepolia 테스트넷에 스마컨트랙트 배포하기

 

Sepolia 테스트넷에 스마컨트랙트 배포하기

이더리움 스마트 컨트랙트를 작성하고 로컬 네트워크(Ganache)에서 기본적인 검증을 마쳤다면 다음은 메인넷으로 가기 전에 테스트 네트워크에 배포할 차례다. 글을 쓰는 시점에서 정상적으로 동

makasti.tistory.com

이번에는 Foundry라는 프레임워크를 이용하여 스마트 컨트랙트를 테스트넷에 배포하는 과정을 다뤄볼 것이다. 먼저 Foundry는 Rust 언어로 작성되어서 JS 기반의 Truffle이나 Hardhat보다 훨씬 더 빠르다. 그리고 테스팅 코드를 작성할 때 Solidity를 100% 지원해서 자바스크립트 의존성을 없애준다는 강점이 있다. uint256을 다루기 위해서 bignumber.js 등을 따로 임포트해야 하는 번거로움이 싹 사리진 것이다.

 

Foundry 로고

다만 아직 생소한 프레임워크이다보니 레퍼런스 자료가 거의 없다는 치명적인 단점이 있다. 특히 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

 

HySwapPair | Address 0x8517d32f91ec7f29f342841f3eb2285d01b332a6 | Etherscan

The Contract Address 0x8517d32f91ec7f29f342841f3eb2285d01b332a6 page allows users to view the source code, transactions, balances, and analytics for the contract address. Users can also interact and make transactions to the contract directly on Etherscan.

sepolia.etherscan.io

Comments