如何使用 ethers.js 鑄造 NFT
作者:Alchemy Team
本教學說明如何使用 Ethers(透過 ethers.js 函式庫)以及我們在第一篇《How to Create an NFT》中撰寫的智慧合約,在 Ethereum 區塊鏈上鑄造 NFT。我們也會探討基本的測試設定
預估完成本指南所需時間:約 10 分鐘
此外,別忘了看看我們 NFT 教學系列的其他文章:
- 🌟 How to mint an NFT using Web3.js
- 👛 How to view your NFT in your mobile wallet
- 💸 How to set a price on an NFT
- 💻 NFT minter tutorial: How to create a full stack DApp
在另一篇教學中,我們學到如何使用 Web3 以及 OpenZeppelin contracts library 來鑄造 NFT。在這個練習中,我們將帶你了解另一種實作方式,使用第 4 版的 OpenZeppelin library,並以 Ethers.js 這個 Ethereum 函式庫取代 Web3。
我們也會介紹如何使用 Hardhat 及 Waffle 為合約撰寫基本測試。本教學中我使用 Yarn,但如果你偏好使用 npm/npx 也可以。
最後,我們會使用 TypeScript。這部分已有相當完整的文件說明,因此本教學不會另外介紹。
除此之外,本教學的其他部分與 Web3 版本的做法相同,包括 Pinata 和 IPFS 等工具的使用方式。
快速提醒
提醒一下,「鑄造 NFT」是指在區塊鏈上發布你的 ERC721 代幣的一個唯一實例。本教學假設你已經在 NFT 教學系列的第一篇中成功將智慧合約部署到 Ropsten 網路,並且已完成 Ethers 的安裝。
步驟 1:建立你的 Solidity 合約
OpenZeppelin 是一套用於安全智慧合約開發的函式庫。你只需要繼承他們對常見標準(例如 ERC20 或 ERC721)的實作,再依需求擴充行為即可。我們會將這個檔案放在 contracts/MyNFT.sol。
步驟 2:建立 Hardhat 任務,用來部署合約並鑄造 NFT
建立 tasks/nft.ts 檔案,內容如下:
步驟 3:建立輔助函式
你會注意到我們的任務匯入了幾個輔助函式,內容如下。
contract.ts
env.ts
provider.ts
注意,最後的 getProvider() 函式使用的是 ropsten 網路。這個參數是選擇性的,若省略則預設為 "homestead"。我們當然是使用 Alchemy,不過也有其他支援的替代方案。
wallet.ts
步驟 4:建立測試
在你的 test 目錄下,建立以下檔案。請注意,這些測試並不全面,只測試了 OpenZeppelin library 所提供 ERC721 功能中的一小部分,目的是提供你建立更完整測試所需的基礎元件。
test/MyNFT.spec.ts (unit tests)
tasks.spec.ts (integration specs)
test-helpers.ts 請注意,這需要匯入相關的 NPM 函式庫,包括 sinon、chai 及 sinon-chai。由於使用了 stub,因此必須呼叫 sinon.restore()。
步驟 5:設定
以下是我們相當精簡的 hardhat.config.ts。
請注意其中的條件判斷,只有在非測試執行時才會呼叫 dotenv。雖然你可能不想在正式環境中這麼做,但放心,如果 .env 檔案不存在,dotenv 會直接靜默略過。
執行我們的任務
現在這些檔案都已就緒,我們可以執行 hardhat 來查看我們建立的任務(為簡潔起見,已排除內建任務)。
忘記任務需要的參數了嗎?沒問題。
執行我們的測試
要執行測試,我們執行 hardhat test。
總結
在本教學中,我們以 Solidity 為基礎,建立了一套經過良好測試的 NFT 基礎架構。waffle.provider.getWallets() 所提供的錢包,連結到一個本機的模擬 Hardhat Network 帳戶,這個帳戶方便地預先載入了 eth 餘額,可供我們的測試交易使用。
Alchemy 電子報
搶先掌握最新發布消息
訂閱我們的電子報
取得 Alchemy 最新產品更新與資源
輸入您的電子郵件地址,即表示您同意接收我們的行銷通訊與產品更新。您了解 Alchemy 會依照我們的隱私權聲明處理所收到的資訊。您可以隨時取消訂閱。


