使用 Hardhat 在 Polkadot Hub 测试网上部署 ERC-721 NFT 全流程教程

原文作者:PaperMoon团队

非同质化代币(Non-Fungible Token,简称 NFT)是一种具有唯一性的数字资产形式,广泛应用于数字艺术、数字收藏品、链游资产以及去中心化身份认证等场景。

ERC-721 是以太坊生态中最主流的 NFT 标准协议之一,定义了非同质化代币的发行、转移与查询接口规范。

本文将详细介绍如何使用 Hardhat 开发框架 与 OpenZeppelin 官方合约库,在 Polkadot Hub 测试网络(TestNet) 上完成 ERC-721 NFT 合约的开发、编译与部署。

Hardhat 是一套功能完善的以太坊开发工具链,集成了编译、测试、调试和部署能力,并且生成标准 EVM 字节码,可与 Polkadot Hub 的 EVM 环境完全兼容。

环境准备(Prerequisites)

在开始实践之前,请确保已完成以下准备工作:
    1.    具备 Solidity 基础编程能力
    2.    了解 ERC-721 NFT 标准基本机制
    3.    已安装 Node.js 22.13.1 或更高版本
    4.    已获取 Polkadot 测试网 Gas 代币
    5.    拥有一个包含私钥的钱包,用于签署交易

说明:测试代币仅用于开发测试环境,不具备实际经济价值。

初始化 Hardhat 项目(Set Up Your Project)

1. 创建项目目录

打开终端,执行以下命令:

mkdir hardhat-nft-deployment
cd hardhat-nft-deployment
npx hardhat@^2.27.0 init

上述命令将创建项目目录,并初始化一个标准 Hardhat 工程结构。

2. 安装 OpenZeppelin 合约库

执行以下命令安装依赖:

npm install @openzeppelin/contracts

该库包含经过安全审计的标准智能合约实现,是目前最主流的 Solidity 合约基础库。

配置 Hardhat 网络(Configure Hardhat)

1. 修改配置文件

打开项目根目录下的:

hardhat.config.ts

将其修改为如下内容:

import type { HardhatUserConfig } from 'hardhat/config';

import hardhatToolboxViemPlugin from '@nomicfoundation/hardhat-toolbox-viem';
import { vars } from 'hardhat/config';

const config: HardhatUserConfig = {
  plugins: [hardhatToolboxViemPlugin],
  solidity: {
    version: '0.8.28',
    settings: {
      optimizer: {
        enabled: true,
        runs: 200,
      },
    },
  },
  networks: {
    polkadotTestnet: {
      url: 'https://services.polkadothub-rpc.com/testnet',
      chainId: 420420417,
      accounts: [vars.get('PRIVATE_KEY')],
    },
  },
};

export default config;

2. 配置说明

该配置主要包含以下信息:

(1)Solidity 编译器

version: '0.8.28'

指定编译器版本,确保与合约兼容。

(2)Gas 优化器

optimizer: {
  enabled: true,
  runs: 200,
}

用于减少部署与执行成本。

(3)网络配置

polkadotTestnet

用于指定 Polkadot Hub 测试网 RPC 节点和链 ID。

(4)私钥管理

accounts: [vars.get('PRIVATE_KEY')]

通过环境变量方式管理私钥,避免明文泄露。

3. 安全提示

建议参考 Hardhat 官方文档,使用 .env 或系统环境变量安全存储私钥,避免直接写入代码仓库。

创建 NFT 智能合约(Create the Contract)

1. 清理默认合约文件

进入:

contracts/

目录,删除 Hardhat 自动生成的示例合约文件。

2. 创建新合约文件

新建文件:

contracts/MyNFT.sol

3. 编写 ERC-721 合约代码

在 MyNFT.sol 中写入以下内容:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/access/Ownable.sol";

contract MyNFT is ERC721, Ownable {
    uint256 private _nextTokenId;

    constructor(
        address initialOwner
    ) ERC721("MyToken", "MTK") Ownable(initialOwner) {}

    function safeMint(address to) public onlyOwner {
        uint256 tokenId = _nextTokenId++;
        _safeMint(to, tokenId);
    }
}

4. 合约功能解析

该 NFT 合约主要实现了以下功能:

(1)继承标准模块
    •    ERC721:NFT 核心功能
    •    Ownable:权限控制机制

(2)Token ID 自动管理

uint256 private _nextTokenId;

自动递增分配 NFT 编号。

(3)构造函数初始化
设置:
    •    NFT 名称:MyToken
    •    NFT 简称:MTK
    •    初始管理员地址

(4)安全铸造函数

safeMint

仅管理员可调用,确保资产安全。

编译智能合约(Compile the Contract)

在项目根目录执行:

npx hardhat compile

编译成功示例输出

Downloading solc 0.8.28
Compiled 1 Solidity file with solc 0.8.28

表示合约已成功编译为 EVM 字节码。

使用 Ignition 部署合约(Deploy the Contract)

Hardhat Ignition 是官方提供的模块化部署工具,可管理复杂部署流程。

1. 清理默认模块

进入:

ignition/modules/

删除默认示例文件。

2. 创建部署模块

新建文件:

ignition/modules/MyNFT.ts

3. 编写部署脚本

写入以下内容:

import { buildModule } from '@nomicfoundation/hardhat-ignition/modules';

export default buildModule('MyNFTModule', (m) => {
  const initialOwner = m.getParameter('initialOwner', 'INSERT_OWNER_ADDRESS');
  const myNFT = m.contract('MyNFT', [initialOwner]);
  return { myNFT };
});

将:

INSERT_OWNER_ADDRESS

替换为你自己的钱包地址。

4. 执行部署命令

运行:

npx hardhat ignition deploy ignition/modules/MyNFT.ts --network polkadotTestnet

5. 确认网络信息

终端会提示:

Confirm deploy to network polkadotTestnet (420420417)? … yes

输入 yes 确认。

6. 部署成功示例输出

Hardhat Ignition 🚀

Deploying [ MyNFTModule ]

Batch #1
 Executed MyNFTModule#MyNFT

Batch #2
 Executed MyNFTModule#MyNFT.safeMint

Deployed Addresses

MyNFTModule#MyNFT - 0x1234...

说明合约已成功部署到测试网。

部署后的交互与验证

部署完成后,你可以通过以下方式进行验证:

1. 查看合约地址

复制终端输出的合约地址,在区块浏览器中查询。

2. 铸造 NFT

通过:
    •    Hardhat 脚本
    •    Remix
    •    前端页面

调用 safeMint 即可生成 NFT。

3. 查询资产信息

可调用标准 ERC-721 接口:
    •    ownerOf
    •    balanceOf
    •    tokenURI

总结(Conclusion)

通过本教程,你已经完整掌握了:

✅ Hardhat 项目初始化流程
✅ Polkadot Hub 网络配置方法
✅ OpenZeppelin NFT 合约开发
✅ Hardhat 编译与优化设置
✅ Ignition 模块化部署方式
✅ 测试网验证流程

该流程适用于从学习到实战的完整 NFT 开发路径。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值