Truffle로 ERC-721 개발하고 테스트넷에 배포 해보기

f475·2022년 2월 8일

blockchain

목록 보기
1/2
post-thumbnail

0. 필요한 것들

Ubuntu 20.04 LTS 에서 진행
node.js, npm, visual studio code 필요
Metamask 설치, 지갑 생성
Infura 회원가입, 인스턴스 생성
Etherscan 회원가입, API KEY 발급

전체코드

https://github.com/aka773/erc721-truffle

1. 초기설정

폴더 생성 후 이동하여 package.json 파일까지 생성

$ mkdir -p erc721-truffle
$ cd erc721-truffle
$ npm init

truffle 설치 및 project 초기화

# https://trufflesuite.com/docs/truffle/getting-started/installation 참고 #
$ npm i -g truffle
$ truffle init

truffle 명령어 결과 확인하기

$ ls -al

truffle hdwallet-provider 패키지 설치

truffle을 이용하여 스마트 컨트랙트를 테스트넷에 배포할때 필요하다.

$ npm i @truffle/hdwallet-provider

openzeppelin 패키지 설치

본 포스팅에서 사용하는 ERC-721 코드는 openzepplin에서 제공하는 솔리디티 파일들을 import 한다. 만약 이 패키지 없이 truffle 사용하여 컨트랙트 배포하면 그 과정에서 종속성 문제로 오류가 생기므로 이 패키지를 설치하여 종속성 문제를 해결한다.

$ npm i -s @openzeppelin/contracts

truffle-plugin-verify 패키지 설치 (필수 아님)

테스트넷에 배포한 컨트랙트를 verify & publish 상태로 만들 때 필요하다.

$ npm i -D truffle-plugin-verify

2.컨트랙트 작성 및 배포

⚠️ 주의사항 : 컨트랙트 이름솔리디티 파일 이름동일하게 할 것 ⚠️

MyNFT.sol

erc721-practice/contracts/MyNFT.sol를 생성하고 아래와 같이 작성한다.

소스코드 보기

2_deploy_contracts.js

erc721-practice/migrations/2_deploy_contracts.js를 생성하고 아래와 같이 작성한다. migration 파일에 관한 자세한 정보는 이곳에서 확인 할 수 있다.

소스코드 보기

truffle 옵션 설정

erc721-practice/truffle-config.js 아래와 같이 수정 한다. 연결할 네트워크(메인넷, 테스트넷, 로컬환경), Solidity 컴파일에 사용할 컴파일러 버전 등 이 파일은 여러가지 옵션을 설정 할 수 있다. 더 자세한 내용은 여기에서 확인 할 것.
소스코드 보기

truffle-config.js에서 불러오는 모듈:

GitHub 같은 곳에 공유시에 보안상 문제가 있으므로 별도 파일로 관리한다.
'./memonic.js' Ropsten Testnet에서 사용할 Metamask 지갑 시드 구문 (생성 필요)
'./infura.js' Infura 노드의 ENDPOINT 주소 (가입 필요)
'./etherscan.js' Etherscan API KEY (가입 필요)

컨트랙트 마이그레이션 및 배포

터미널을 열고 아래 truffle 명령어를 실행한다. 여기서 --network ropsten 옵션을 주고 migrate를 진행한다. 이 명령어를 통해 컨트랙트를 ropsten 테스트넷에 배포할 것이다. 이 외 flag는 여기서 확인 할 수 있다.
$ truffle migrate --network ropsten

3. 트랜잭션 확인

테스트넷에 배포된 트랜잭션은 ropsten 테스트넷 이더스캔에서 확인 할 수 있다.

migration


이더스캔 이동

deploy


이더스캔 이동

스마트 컨트랙트(MyNFT.sol)


이더스캔 이동

Tx Hash: 0xcea5deee74faea5717a84a6a2e2ad7b17ff9ad830c153d913c0589ef95232db9

4. 스마트 컨트랙트 작동 확인

작동 테스트를 위해서 ropsten 테스트넷과 연동할 ether 잔액이 있는 MetaMask 지갑이 필요하다.
테스트 하기

mintNFT

tokenURI

ownerOf

5. 회고

Remix를 이용하여 스마트 컨트랙트를 배포했을 때는 매우 쉬웠다. 그런데 막상 truffle을 이용하려다보니 막히는 부분도 있고 오류가 나서 조금 해맸다. 다행히 검색을 통해 대부분의 문제를 해결 할 수 있었고 테스트넷에 성공적으로 배포할 수 있었다. 다음에는 각 코드별로 더 자세하게 설명을 추가하고 내가 직접 ipfs에 컨텐츠를 업로드하여 metadata를 tokenURI에 넣어볼 생각이다.

6. 참고했던 자료들

https://forum.openzeppelin.com/t/how-to-flatten-and-verify-a-smart-contract-using-openzeppelin-contracts/1119
https://forum.openzeppelin.com/t/truffle-cannot-flatten-openzeppelin-contracts/5065
https://forum.openzeppelin.com/t/how-to-verify-with-hardhat-or-truffle-a-smart-contract-using-openzeppelin-contracts/4119
https://forum.openzeppelin.com/t/how-to-provide-metadata-for-erc721/4057/3
https://github.com/abcoathup/samplenft/tree/ecb7fef15e0a2f553a334d3ccbaf88f848f316fc

0개의 댓글