본문으로 건너뛰기
0%

ethers.js로 NFT 민팅하는 방법

작성자: Alchemy Team

마지막 업데이트: 2021년 8월 30일2분 읽기

이 튜토리얼은 ethers.js 라이브러리를 사용하는 Ethers와, Part I: How to Create an NFT에서 만든 스마트 컨트랙트를 이용해 Ethereum 블록체인에 NFT를 민팅하는 방법을 설명합니다. 또한 기본적인 테스트 설

이 가이드를 완료하는 데 걸리는 예상 시간: 약 10분

또한 저희 NFT 튜토리얼 시리즈의 나머지 글들도 꼭 확인해 보세요:

다른 튜토리얼에서는 Web3와 OpenZeppelin 컨트랙트 라이브러리를 사용해 NFT를 민팅하는 방법을 배웠습니다. 이번 실습에서는 OpenZeppelin 라이브러리 버전 4와, Web3 대신 Ethers.js Ethereum 라이브러리를 사용하는 대안적인 구현 방식을 단계별로 살펴보겠습니다.

또한 Hardhat과 Waffle을 사용해 컨트랙트를 테스트하는 기본 방법도 다룹니다. 이 튜토리얼에서는 Yarn을 사용하지만, 원한다면 npm/npx를 사용해도 됩니다.

마지막으로 TypeScript를 사용합니다. 이 부분은 이미 잘 문서화되어 있으므로 여기서는 다루지 않습니다.

그 외의 모든 부분에서 이 튜토리얼은 Pinata와 IPFS 같은 도구를 포함해 Web3 버전과 동일하게 동작합니다.

간단한 참고 사항

참고로, "NFT를 민팅한다"는 것은 여러분의 ERC721 토큰의 고유한 인스턴스를 블록체인에 게시하는 행위를 말합니다. 이 튜토리얼은 NFT 튜토리얼 시리즈 Part I에서 Ropsten 네트워크에 스마트 컨트랙트를 배포했고, 그 과정에서 Ethers를 설치했다는 것을 전제로 합니다.

1단계: Solidity 컨트랙트 작성하기

OpenZeppelin은 안전한 스마트 컨트랙트 개발을 위한 라이브러리입니다. ERC20이나 ERC721 같은 널리 쓰이는 표준의 구현체를 상속받아, 필요에 맞게 동작을 확장하면 됩니다. 이 파일은 contracts/MyNFT.sol에 작성합니다.

2단계: 컨트랙트 배포와 NFT 민팅을 위한 Hardhat 태스크 만들기

다음 내용을 담은 tasks/nft.ts 파일을 만듭니다:

3단계: 헬퍼 만들기

앞서 만든 태스크에서 몇 가지 헬퍼를 가져온 것을 확인할 수 있습니다. 해당 헬퍼들은 다음과 같습니다.

contract.ts

env.ts

provider.ts

마지막의 getProvider() 함수는 ropsten 네트워크를 사용한다는 점에 유의하세요. 이 인자는 선택 사항이며, 생략하면 기본값으로 "homestead"가 사용됩니다. 저희는 물론 Alchemy를 사용하지만, 지원되는 다른 대안들도 있습니다.

wallet.ts

4단계: 테스트 작성하기

test 디렉터리 아래에 다음 파일들을 만듭니다. 이 테스트들은 포괄적이지 않다는 점에 유의하세요. OpenZeppelin 라이브러리가 제공하는 ERC721 기능 중 일부만 테스트하며, 더 견고한 테스트를 만들기 위한 기본 구성 요소를 제공하는 것이 목적입니다.

test/MyNFT.spec.ts (unit tests)

tasks.spec.ts (integration specs)

test-helpers.ts 여기에는 sinon, chai, sinon-chai를 비롯해 임포트된 NPM 라이브러리들이 필요하다는 점에 유의하세요. sinon.restore() 호출은 스터빙(stubbing)을 사용하기 때문에 필요합니다.

5단계: 설정

다음은 상당히 단순한 형태의 hardhat.config.ts입니다.

테스트를 실행 중이 아닐 때만 dotenv를 호출하는 조건문에 주목하세요. 프로덕션 환경에서는 이렇게 실행하고 싶지 않을 수 있지만, .env 파일이 없으면 dotenv가 이를 조용히 무시한다는 점은 안심해도 됩니다.

태스크 실행하기

이제 이 파일들을 모두 준비했으니, hardhat을 실행해 우리가 만든 태스크들을 확인할 수 있습니다 (간결함을 위해 내장 태스크는 제외했습니다).

태스크에 어떤 인자를 넘겨야 하는지 잊으셨나요? 걱정하지 마세요.

테스트 실행하기

테스트를 실행하려면 hardhat test를 실행합니다.

요약

이 튜토리얼에서는 Solidity를 기반으로 잘 테스트된 NFT 인프라의 탄탄한 토대를 만들었습니다. **waffle.provider.getWallets()**가 제공하는 지갑은 로컬 가짜 Hardhat Network 계정에 연결되어 있으며, 이 계정에는 편리하게도 eth 잔액이 미리 채워져 있어 테스트 트랜잭션에 필요한 자금으로 사용할 수 있습니다.

Alchemy 뉴스레터

출시 소식을 가장 먼저 받아보세요

뉴스레터 구독하기

Alchemy의 최신 제품 업데이트와 리소스 받기

A
O
D
+
구독자 80,000명 이상

이메일 주소를 입력하면 마케팅 커뮤니케이션 및 제품 업데이트 수신에 동의하게 됩니다. Alchemy는 저희 개인정보 처리방침에 따라 수집한 정보를 처리합니다. 언제든지 구독을 취소할 수 있습니다.