预计耗时约 15 分钟,适合零基础 Creator 快速在以太坊测试链成功铸造 ERC-721 NFT。全文无需付费、无需理财、不涉政治,安全不伤钱包;核心关键词:NFT、ERC-721、智能合约、以太坊、Ropsten、创建 NFT、铸造指南。
第一步:准备工作与必要工具
- 以太坊钱包:安装 Chrome 插件 [MetaMask],创建或导入助记词,网络切到 Ropsten Testnet。
- 链上接口:注册 [Alchemy] 免费账号,新建 App,选 Ropsten。复制 API KEY。
- 开发环境:安装 Node.js 与 npm,命令行验证
node -v与npm -v输出无误。 - 领取测试币:打开 Ropsten Faucet,贴上你的钱包地址,将 1 枚测试 ETH 收入囊中。
第二步:量身定制智能合约
项目初始化
mkdir my-first-nft && cd my-first-nft
npm init -y
npm install --save-dev hardhat
npx hardhat
# 选 “Create an empty hardhat.config.js”新建文件夹:
mkdir contracts scripts安装依赖与安全库
npm install @openzeppelin/contracts
npm install dotenv
npm install --save-dev @nomiclabs/hardhat-ethers ethers@^5.0.0编写 MyNFT.sol
文件:contracts/MyNFT.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.3;
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/utils/Counters.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
contract MyNFT is ERC721, Ownable {
using Counters for Counters.Counter;
Counters.Counter private _tokenIds;
constructor() public ERC721("MyNFT", "NFT") {}
function mintNFT(address recipient, string memory tokenURI)
public onlyOwner returns (uint256)
{
_tokenIds.increment();
uint256 newItemId = _tokenIds.current();
_mint(recipient, newItemId);
_setTokenURI(newItemId, tokenURI);
return newItemId;
}
}关键词 ERC-721 已在代码中体现,后续无需刻意重复粘贴。
第三步:链上权限与配置 .env
根目录创建 .env,格式如下(两行即可):
API_URL = "https://eth-ropsten.alchemyapi.io/v2/你的KEY"
PRIVATE_KEY = "你的MetaMask私钥"私钥不可泄漏、不推送至 GitHub。关键词私钥安全配置.env自然出现于此。
同步 Hardhat 配置
文件:hardhat.config.js
require('dotenv').config();
require("@nomiclabs/hardhat-ethers");
const { API_URL, PRIVATE_KEY } = process.env;
module.exports = {
solidity: "0.7.3",
defaultNetwork: "ropsten",
networks: {
hardhat: {},
ropsten: {
url: API_URL,
accounts: [`0x${PRIVATE_KEY}`]
}
},
};第四步:编译 + 部署脚本
首次编译:
npx hardhat compile文件:scripts/deploy.js
async function main() {
const MyNFT = await ethers.getContractFactory("MyNFT");
const myNFT = await MyNFT.deploy();
console.log("合约已部署至地址:", myNFT.address);
}
main()
.then(() => process.exit(0))
.catch(error => { console.error(error); process.exit(1); });执行部署:
npx hardhat run scripts/deploy.js --network ropsten看到控制台打印:
合约已部署至地址:0x8c9...4cD3即宣告第一步 NFT 智能合约 上链成功!
第五步:快速验证与延伸玩法
- 打开 Ropsten Etherscan,搜索你输出的地址,确认 Status 为 Success。
- 回到 Alchemy Dashboard → Explorer,查看后台自动记录的
eth_sendRawTransactionð_getTransactionByHash记录,直观感受链上原子操作。 - 若想继续:在下一篇教程中,我们将真正“铸造”第一个 NFT,并把 JSON 元数据托管到 IPFS。
常见问题 FAQ
Q1:我只需要铸造图片 NFT,为什么还要学写合约?
A:NFT 的核心在于唯一性 + 所有权。自行编写智能合约可自定义属性、授予权益、避免他人篡改,比直接在平台上铸更自由。
Q2:测试网成功后如何迁移到主网?
A:更改 hardhat.config.js 中网络配置为 mainnet,API 换成主网 Key,准备真 ETH 即可一键部署;代码无需修改。
Q3:.env 私钥管理最佳实践?
A:只留一份在本地电脑,使用 .gitignore 忽略 .env,亦可使用硬件钱包 + 白名单地址策略,全链路加密。
Q4:Gas 过高怎么办?
A:Ropsten 测试网可免费获取测试币练手;主网部署时,观察实时 Gas 站点或设置矿工费浮动策略,避开高峰。
Q5:相同的智能合约用别人已开源的不行吗?
A:可行,但要注意安全审计、功能定制、后期升级。自己掌握代码 + OpenZeppelin 基础库,可减少黑箱风险。
关键词:NFT、智能合约、以太坊、Ropsten、创建NFT、ERC721、开发教程、MetaMask、Alchemy、IPFS