使用Foundry启动并验证一个NFT

本文介绍了如何使用 Foundry 设置和部署 NFT 合约到 Sepolia 测试网络,并在 Etherscan 上进行验证。文章详细说明了如何安装 OpenZeppelin、使用 remappings、生成 remappings.txt 文件、设置环境变量以及部署和验证 NFT 合约的过程。

在上面的教学视频中,你使用 Remix 环境在 Opensea 上发布了一个 NFT。这很好,但 Remix 并不适合生产使用。在这一章中,我们将向你展示如何

  1. 设置包含 NFT 的 Foundry
  2. 部署到 Sepolia 测试网并在 Etherscan 上验证

如果你已经完成了练习,你应该已经安装了 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

现在将更改还原回原样。

一步生成 remappings.txt 文件

\\\\

可以通过以下操作完成


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 密钥。https://static.wixstatic.com/media/c0c19a_067cda25e2fc45f0ab63891d4cba805a~mv2.png/v1/fill/w_939,h_485,al_c,q_95,enc_auto/FFZD9yO.pnghttps://static.wixstatic.com/media/c0c19a_82c2ee7c60194c388c184ded78721a82~mv2.png我们创建了 U3D9IS6Z5E872VFS7M7AWR1SBA8786ZZ3Y 作为我们的 API 密钥。我们将稍后使用此 API 密钥。

创建一个临时钱包

切勿使用含有重大价值的硬件钱包或任何钱包的私钥。 要在测试网部署 NFT 合约,我们需要一个含有测试以太坊的私钥来签署交易。为简化起见,我们创建了一个临时钱包,并用一些 sepia 以太坊为其提供资金。这是该钱包的私钥; 787ea4ec95ab4f4e66c4c4c387cd0b5fbbec84a9293db485fa5f86f490c157d4.


(这不应被使用,因为它被认为已经被泄露。)

在环境变量中放入 Etherscan 密钥和钱包私钥

\\\\

现在我们有了 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 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
RareSkills
RareSkills
https://www.rareskills.io/