目标:从 0 到 1 完成依赖安装、编译、部署合约,并通过脚本批量发放 NFT。
.
├─ contracts/
│ └─ MyNFT.sol # ERC721 合约(OpenZeppelin)
├─ scripts/
│ ├─ deploy.ts # 部署脚本(输出合约地址)
│ └─ mint.ts # 批量发放 NFT 的脚本(需填收件人和 tokenURI)
├─ test/ # 测试(可选)
├─ typechain-types/ # Typechain 自动生成的类型(安装/编译后出现)
├─ metadata.json # 示例元数据(可上传到 IPFS)
├─ hardhat.config.ts # Hardhat 配置(网络/编译器等)
├─ .env # 私密变量(私钥、RPC URL 等),切勿提交
├─ package.json
├─ tsconfig.json
└─ README.md# 克隆项目
git clone <你的仓库地址>
cd <你的仓库目录>
# 安装依赖(任选其一)
npm install
# 或
# pnpm install # 如果你喜欢 pnpm,需先 npm i -g pnpm在项目根目录创建 .env 文件(不要提交到 Git):
# 私钥(仅测试用的钱包私钥,切勿使用主网资产钱包)
PRIVATE_KEY=0x你的私钥npx hardhat compile编译成功后会在 artifacts/ 和 typechain-types/ 里生成对应文件。
在 .env 中填好 PRIVATE_KEY。然后:
npx hardhat run scripts/deploy.ts --network base编辑 scripts/mint.ts(填写接收者列表和 tokenURI):
import { ethers } from "hardhat";
async function main() {
const contractAddress = "0x90ccB4A90Fd5baD5389590331F2A6edD92BA1375"; // 你的合约地址
const recipients = [
// TODO:填写接收者地址,例如:
// "0x1111...","0x2222..."
];
// TODO:填写元数据链接(建议使用 IPFS 链接)
// 可先用仓库里提供的示例:ipfs://bafkreiar3k5vy66vwe3xlmaoeeyypixtcfzyuxa4qcadpwqixvv4lapm3i
const tokenURI = "";
const MyNFT = await ethers.getContractAt("MyNFT", contractAddress);
for (const recipient of recipients) {
const tx = await MyNFT.mintTo(recipient, tokenURI);
await tx.wait();
console.log(`✅ 成功发送 NFT 给 ${recipient}`);
}
console.log("🎉 所有接收者已成功获得 NFT");
}
main().catch((err) => {
console.error(err);
process.exitCode = 1;
});运行:
# 测试网
npx hardhat run scripts/mint.ts --network base注意:合约的
mintTo受onlyOwner限制,必须用 部署该合约的同一私钥 执行脚本。
-
tokenURI指向一个 JSON 文件,描述 NFT 的名字、图片、属性等(常见格式如下):{ "name": "XYZ Pass #1", "description": "Welcome to XYZ!", "image": "ipfs://<图片CID>", "attributes": [ { "trait_type": "Cohort", "value": "2025" } ] } -
仓库提供了一个
metadata.json示例,你可以将它上传到 IPFS(如web3.storage、nft.storage、Pinata等),得到形如ipfs://bafy...的链接,填到tokenURI即可。 -
批量发不同的 URI:把
recipients与tokenURIs做成一一对应(或在循环里根据地址拼接不同 URI)。
-
ERC-721:最常用的不可分割 NFT 标准。
-
tokenURI:NFT 的元数据 URL(通常放到 IPFS)。
-
Hardhat 本地链:开发用本地区块链,端口默认
8545。 -
Sepolia:以太坊测试网,非真实资产。
-
onlyOwner:OpenZeppelin 的访问控制修饰器,只有合约 owner 可调用函数。
-
npm install成功 -
npx hardhat compile成功 -
部署到 base,并在区块浏览器查看合约与交易
-
在
mint.ts填好recipients与tokenURI,成功发放
】
⚠️ 安全提示:不要把包含真实资产的钱包私钥放入.env。教学/测试建议使用全新钱包与测试网。祝你第一个 NFT 部署顺利!🚀