手把手教你发布第一部 NFT(15 分钟上手)

·

预计耗时约 15 分钟,适合零基础 Creator 快速在以太坊测试链成功铸造 ERC-721 NFT。全文无需付费、无需理财、不涉政治,安全不伤钱包;核心关键词:NFT、ERC-721、智能合约、以太坊、Ropsten、创建 NFT、铸造指南


第一步:准备工作与必要工具

  1. 以太坊钱包:安装 Chrome 插件 [MetaMask],创建或导入助记词,网络切到 Ropsten Testnet
  2. 链上接口:注册 [Alchemy] 免费账号,新建 App,选 Ropsten。复制 API KEY。
  3. 开发环境:安装 Node.js 与 npm,命令行验证 node -vnpm -v 输出无误。
  4. 领取测试币:打开 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 智能合约 上链成功!

👉 一键直达链上浏览器,验证部署状态并截图分享社区


第五步:快速验证与延伸玩法

  1. 打开 Ropsten Etherscan,搜索你输出的地址,确认 Status 为 Success
  2. 回到 Alchemy Dashboard → Explorer,查看后台自动记录的 eth_sendRawTransaction & eth_getTransactionByHash 记录,直观感受链上原子操作。
  3. 若想继续:在下一篇教程中,我们将真正“铸造”第一个 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