本文介绍了如何使用 Foundry 设置和部署 NFT 合约到 Sepolia 测试网络,并在 Etherscan 上进行验证。文章详细说明了如何安装 OpenZeppelin、使用 remappings、生成 remappings.txt 文件、设置环境变量以及部署和验证 NFT 合约的过程。
在上面的教学视频中,你使用 Remix 环境在 Opensea 上发布了一个 NFT。这很好,但 Remix 并不适合生产使用。在这一章中,我们将向你展示如何
如果你已经完成了练习,你应该已经安装了 Foundry,所以让我们开始设置。创建一个新文件夹,命名为 foundry-nft,进入该文件夹并在空文件夹中运行 “forge init”。 复制并粘贴代码 这是创建 NFT 的代码。将 “src” 目录中的 Counter.sol 文件重命名为 FoundryNFT.sol,并粘贴此代码。
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;
import "openzeppelin-contracts/contracts/token/ERC721/ERC721.sol";
contract FoundryNFT is ERC721 {
uint256 public totalSupply = 0;
constructor() ERC721("FoundryNFT", "FNFT") {}
function mint()
external
payable {
// 如果愿意,你可以在这里添加价格检查
totalSupply++;
_mint(msg.sender, totalSupply);
}
}
安装 OpenZeppelin 我们导入并继承了 OpenZeppelin 的 ERC721 合约,因此要安装它,请使用以下命令:
forge install Openzeppelin/openzeppelin-contracts --no-commit
使用重映射 来自 Remix 背景的你会注意到,这里的 OpenZeppelin 导入路径不同。Remix 并不把库存储在与 Foundry 相同的位置。然而,Foundry 提供了重映射功能,以允许文件查找时的导入重定向到不同的位置。要查看所有可用的重映射,我们运行 forge remappings。我们得到以下内容:
ds-test/=lib/forge-std/lib/ds-test/src/
forge-std/=lib/forge-std/src/
openzeppelin-contracts/=lib/openzeppelin-contracts/
我们可以看到 OpenZeppelin 的重映射,因此我们不需要指定 OpenZeppelin 合约的完整路径。我们可以使用 openzeppelin-contracts/contracts/token/ERC721/ERC721.sol 而不需要首先指定 “lib/” 目录。 不使用重映射 如果我们不使用 forge 重映射,我们需要指定文件或目录的完整路径。例如,对于 ERC721.sol 文件,我们需要这样导入它。
import "lib/openzeppelin-contracts/contracts/token/ERC721/ERC721.sol";
要确认这仍然有效,运行 forge build 并查看它是否编译。结果是成功的:
[⠰] Compiling...
[⠃] Compiling 1 files with 0.8.17
[⠊] Solc 0.8.17 finished in 1.38s
Compiler run successful
现在将更改还原回原样。
可以通过以下操作完成
forge remappings > remappings.txt
更改文件名称 我们可以通过在项目根目录创建 remappings.txt 文件并添加这一行 @openzeppelin=lib/openzeppelin-contracts/contracts 来进一步配置重映射的指向位置。完成此操作后,我们可以使用 import “@openzeppelin/token/ERC721/ERC721.sol”; 来导入 ERC721 代币,而不需要明确写出完整的文件路径。如果它指向正确的路径,则可以在 remappings.txt 文件中配置此重映射。 获取 Etherscan 密钥 当我们部署 NFT 时,我们需要一个 Etherscan API 来验证合约。这将使我们能够轻松连接到 Etherscan,以使用 forge 验证智能合约,而无需访问 Etherscan 网站并遵循流程。前往 Etherscan,登录并创建 API 密钥。我们创建了 U3D9IS6Z5E872VFS7M7AWR1SBA8786ZZ3Y 作为我们的 API 密钥。我们将稍后使用此 API 密钥。
切勿使用含有重大价值的硬件钱包或任何钱包的私钥。 要在测试网部署 NFT 合约,我们需要一个含有测试以太坊的私钥来签署交易。为简化起见,我们创建了一个临时钱包,并用一些 sepia 以太坊为其提供资金。这是该钱包的私钥; 787ea4ec95ab4f4e66c4c4c387cd0b5fbbec84a9293db485fa5f86f490c157d4.
(这不应被使用,因为它被认为已经被泄露。)
现在我们有了 API 密钥和私钥,下一步是在项目根目录中创建一个 .env 文件,并将以下内容添加到其中。
ETHERSCAN_KEY=U3D9IS6Z5E872VFS7M7AWR1SBA8786ZZ3Y #你可以用你的 API 密钥替换这个
PRIVATE_KEY=787ea4ec95ab4f4e66c4c4c387cd0b5fbbec84a9293db485fa5f86f490c157d4
确保将 .env 文件包含在 .gitignore 中,以免意外发布你的私钥!
运行此脚本
运行此脚本以在 sepolia 上部署和验证 NFT 合约。
source .env #加载环境变量
forge create --rpc-url https://rpc2.sepolia.org --private-key $PRIVATE_KEY --etherscan-api-key $ETHERSCAN_KEY --verify src/FoundryNFT.sol:FoundryNFT
在 Etherscan 上查看 我们成功地在 sepolia 测试网上部署了我们的 NFT 合约。
请查看 区块链训练营 以了解有关智能合约开发和代币标准的更多信息。
- 原文链接: rareskills.io/learn-soli...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!