WEB3系列教程之新手篇--level9:NFT教程

原文地址: https://www.learnweb3.io/tracks/freshman/nft-tutorial

翻译: JulySong


喜欢视频?

如果您想从视频中学习,我们的 YouTube 上有本教程的录音。单击下面的屏幕截图观看视频,或继续阅读教程!

先决条件

  • 设置 Metamask(初学者轨道-4 级)
  • 检查您的计算机是否有 Node.js。如果不是从这里下载

建造

智能合约

为了构建智能合约,我们将使用Hardhat。Hardhat 是专为全栈开发而设计的以太坊开发环境和框架。简单来说,您可以编写智能合约、部署它们、运行测试和调试代码。

  • 要设置安全帽项目,请打开终端并执行以下命令
1
2
3
4
mkdir NFT-Tutorial
cd NFT-Tutorial
npm init --yes
npm install --save-dev hardhat
  • 在安装 Hardhat 的同一目录中运行:
1
npx hardhat
- 选择`Create a Javascript project`
- 按回车键已指定`Hardhat Project root`
- 如果您想添加一个问题,请按 Enter 键`.gitignore`
- 按回车键`Do you want to install this sample project's dependencies with npm (@nomicfoundation/hardhat-toolbox)?`

现在你有一个安全帽项目准备好了!

如果您在 Windows 上,请执行此额外步骤并安装这些库:)

1
npm install --save-dev @nomicfoundation/hardhat-toolbox

编写 NFT 合约代码

让我们安装 Open Zeppelin 合约,在终端窗口中执行这个命令

1
npm install @openzeppelin/contracts
  • 在 contracts 文件夹中,创建一个名为 NFTee.sol 的新 Solidity 文件
  • 现在我们将在 NFTee.sol 文件中编写一些代码。我们将导入Openzeppelin 的 ERC721 Contract。ERC721 是创建 NFT 的最常用标准。在新生赛道中,我们只会使用 ERC721。在二年级课程中,您将详细了解 ERC721。所以别担心,如果你不明白一切:)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

// 导入 o​​penzepplin 合约
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";

// GameItem is ERC721 表示我们正在创建的合约导入 ERC721 并遵循来自 openzeppelin 合约的 ERC721openzeppelin
contract GameItem is ERC721 {

constructor() ERC721("GameItem", "ITM") {
// mint an NFT to yourself
_mint(msg.sender, 1);
}
}
  • 编译合约,打开终端并执行这些命令
1
npx hardhat compile

如果没有错误,你很高兴:)

配置部署

让我们部署合约来rinkeby测试网络。为此,我们将编写一个部署脚本,然后配置网络。首先,创建一个新文件/替换scripts文件夹下命名的默认文件deploy.js,并在其中编写以下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// 从 Hardhat 包导入 ethers
const { ethers } = require("hardhat");

async function main() {
/*
ethers.js 中的 ContractFactory 是用于部署新智能合约的抽象,
因此这里的 nftContract 是我们的 GameItem 合约实例的工厂。
*/
const nftContract = await ethers.getContractFactory("GameItem");

// 这里我们部署合约
const deployedNFTContract = await nftContract.deploy();

// 打印部署合约的地址
console.log("NFT Contract Address:", deployedNFTContract.address);
}

// 调用main函数,如果有错误就catch
main()
.then(() => process.exit(0))
.catch((error) => {
console.error(error);
process.exit(1);
});

  • 现在在文件夹中创建一个.env文件NFT-Tutorial并添加以下行。使用评论中的说明获取您的 Alchemy API 密钥和 Rinkeby 私钥。确保您获得 rinkeby 私钥的帐户由 Rinkeby 以太币提供资金。你可以在这里得到一些:https ://www.rinkebyfaucet.com/
1
2
3
4
5
6
7
8
9
# 跳到 https://www.alchemyapi.io 注册
# 在其仪表板中创建一个新应用并选择网络为 Rinkeby,并将“add-the-alchemy-key-url-here”替换为其密钥 url
ALCHEMY_API_KEY_URL="add-the-alchemy-key-url-here"

# 将此私钥替换为您的 RINKEBY 帐户私钥
# 要从 Metamask 中导出您的私钥,请打开 Metamask 并
# 转到 Account Details > Export Private Key
# 请注意不要将真实的 Ether 放入测试帐户
RINKEBY_PRIVATE_KEY="add-the-rinkeby-private-key-here"

您可以将 Alchemy 视为区块链的 AWS EC2。它是一个节点提供者。它通过为我们提供节点来帮助我们与区块链连接,以便我们可以读取和写入区块链。Alchemy 帮助我们将合约部署到 rinkeby。

  • 现在我们将安装dotenv包以便能够导入 env 文件并在我们的配置中使用它。在您的终端中,执行这些命令。
1
npm install dotenv
  • 现在打开 hardhat.config.js 文件,我们将在rinkeby此处添加网络,以便我们可以将合约部署到 rinkeby。hardhat.config.js 用下面给出的行替换文件中的所有行
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
require("@nomicfoundation/hardhat-toolbox");
require("dotenv").config({ path: ".env" });

const ALCHEMY_API_KEY_URL = process.env.ALCHEMY_API_KEY_URL;
const RINKEBY_PRIVATE_KEY = process.env.RINKEBY_PRIVATE_KEY;

module.exports = {
solidity: "0.8.9",
networks: {
rinkeby: {
url: ALCHEMY_API_KEY_URL,
accounts: [RINKEBY_PRIVATE_KEY],
},
},
};
  • 要在您的终端类型中部署:
    1
    npx hardhat run scripts/deploy.js --network rinkeby
  • 将打印在终端上的 NFT 合约地址保存在记事本中,您将需要它。

在 Etherscan 上验证

  • 转到Rinkeby Etherscan并搜索打印的地址。
  • 如果 address在 etherscan 上打开,你已经部署了你的第一个 NFT 🎉
  • 通过单击交易哈希转到交易详细信息,检查是否有令牌转移到您的地址