如何使用 ethers.js 铸造 NFT
作者:Alchemy Team
本教程介绍如何使用 Ethers 通过 ethers.js 库,以及我们在第一部分《如何创建 NFT》中的智能合约,在 Ethereum 区块链上铸造一个 NFT。我们还将探讨基本的测试
预计完成本指南所需时间:约 10 分钟
此外,别忘了查看我们 NFT 教程系列的其余部分:
在另一篇教程中,我们学习了如何使用 Web3 和 OpenZeppelin 合约库铸造 NFT。在本练习中,我们将带你了解一种替代实现方式,使用第 4 版 OpenZeppelin 库,以及 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 库提供的 ERC721 功能中的一小部分,目的是为你提供基础构件,以便你创建更完善的测试。
test/MyNFT.spec.ts (unit tests)
tasks.spec.ts (integration specs)
test-helpers.ts 请注意,这需要用到所导入的 NPM 库,包括 sinon、chai 和 sinon-chai。由于使用了 stubbing(桩替换),因此需要调用 sinon.restore()。
第 5 步:配置
这是我们相当简洁的 hardhat.config.ts。
注意这个条件判断,只有在不运行测试时才调用 dotenv。你可能不希望在生产环境中这样做,但请放心,如果 .env 文件不存在,dotenv 会静默忽略它。
运行我们的任务
现在这些文件都已就绪,我们可以运行 hardhat 来查看我们的任务(为简洁起见,不包括内置任务)。
忘记任务需要哪些参数了?没问题。
运行我们的测试
要运行测试,我们执行 hardhat test。
总结
在本教程中,我们基于 Solidity 为一个经过充分测试的 NFT 基础设施打下了坚实的基础。waffle.provider.getWallets() 提供的钱包链接到一个本地的模拟 Hardhat Network 账户,该账户方便地预先加载了 eth 余额,我们可以用它来为测试交易提供资金。
Alchemy 新闻通讯
第一时间获取发布信息
订阅我们的新闻通讯
获取 Alchemy 的最新产品更新和资源
填写您的电子邮箱地址即表示您同意接收我们的营销通讯和产品更新。您确认 Alchemy 按照我们的隐私声明处理我们收到的信息。您可以随时取消订阅。


