在区块链的世界里,NFT(非同质化代币)已成为数字艺术、收藏品、虚拟资产等领域的核心载体,如果你也想拥有自己的NFT项目,第一步就是在以太坊上部署NFT合约,本文将以“零基础友好”为原则,从环境准备到合约部署,一步步带你完成整个过程,即使是新手也能轻松上手。
为什么选择以太坊部署NFT
以太坊作为最早的智能合约平台,拥有最成熟的NFT标准(如ERC-721、ERC-1155)、最大的用户群体和最完善的生态(如OpenSea、Rarible等NFT市场),尽管其 gas 费用较高,但对于初学者和需要稳定生态支持的项目来说,仍是首选。
前置准备:工具与环境
在部署合约前,你需要准备好以下工具,它们就像“开发工具箱”,缺一不可:
以太坊钱包
推荐使用 MetaMask(浏览器插件钱包),支持创建和管理钱包地址,存储私钥,并与以太坊网络交互。
- 安装:访问MetaMask官网(metamask.io),下载对应浏览器的插件(Chrome、Firefox等)。
- 创建钱包:按照提示设置密码、备份助记词(务必妥善保存,丢失将无法找回资产)。
测试网ETH
以太坊主网的交易需要真实ETH(用于支付gas费),而测试网(如Goerli、Sepolia)提供免费的“测试ETH”,供开发者调试。
- 获取测试ETH:前往 Faucet(水龙头)网站,如Goerli Faucet(https://goerlifaucet.com/),输入钱包地址领取(注意:部分水龙头需要完成社交任务或等待时间)。
开发环境
- Node.js:JavaScript运行环境,建议安装LTS版本(v16+)。
- npm/yarn:包管理工具,随Node.js安装(
npm install -g yarn可安装yarn)。 - Hardhat:以太坊开发框架,支持编译、测试、部署智能合约,适合初学者。
创建NFT项目与编写合约
我们用Hardhat框架创建一个符合ERC-721标准的NFT合约(ERC-721是“非同质化代币”标准,每个NFT独一无二)。
初始化Hardhat项目
打开终端,执行以下命令:
mkdir my-nft-project && cd my-nft-project npm init -y npm install --save-dev hardhat npx hardhat
在交互式界面中选择“Create a basic sample project”,然后按提示输入项目名称(默认即可)。
编写NFT合约
进入contracts目录,你会看到一个默认的Lock.sol文件,将其重命名为MyNFT.sol,并编写以下代码:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;
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 _tokenIdCounter;
constructor(string memory _name, string memory _symbol) ERC721(_name, _symbol) {}
function safeMint(address to, uint256 tokenId) public onlyOwner {
_safeMint(to, tokenId);
}
function _baseURI() internal pure override returns (string memory) {
return "https://your-metadata-base-uri.com/"; // 替换为你的NFT元数据基础URI
}
function getCurrentTokenId() public view returns (uint256) {
return _tokenIdCounter.current();
}
}
代码解析:
import:引入OpenZeppelin合约库(ERC721标准实现,避免重复造轮子)。constructor:初始化NFT名称(如“My NFT”)和符号(如“MNFT”)。safeMint:铸造NFT的核心函数,仅合约所有者可调用(onlyOwner)。_baseURI:NFT元数据的链接前缀(每个NFT的元数据通过{id}.json访问,如https://your-metadata-base-uri.com/1.json)。
安装依赖
OpenZeppelin合约库需要手动安装:
npm install @openzeppelin/contracts
编译与测试合约
