随着区块链技术的飞速发展和数字经济的蓬勃兴起,非同质化代币(NFT)作为数字资产的重要载体,正逐渐走进大众视野,并在艺术、收藏、游戏、元宇宙等领域展现出巨大的潜力,以太坊作为目前最成熟、生态最完善的智能合约平台,成为了NFT发行和交易的首选之地,本文将带你深入了解以太坊NFT的代码开发,从基础概念到实践步骤,助你迈入NFT创作的大门。
理解NFT与以太坊智能合约
在深入代码之前,我们首先要明确几个核心概念:

开发环境准备
开始以太坊NFT代码开发,你需要准备以下工具和环境:
ERC-721 NFT智能合约开发实践
下面我们以Hardhat为例,介绍一个简单ERC-721 NFT合约的开发步骤:
初始化项目:

mkdir my-nft-project cd my-nft-project npm init -y npm install --save-dev hardhat npx hardhat # 选择 "Create a basic sample project",然后按提示操作
编写合约代码: 在 contracts/ 目录下,创建一个新的Solidity文件,MyNFT.sol。
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/utils/Counters.sol";
contract MyNFT is ERC721, Ownable {
using Counters for Counters.Counter;
Counters.Counter private _tokenIdCounter;
constructor(string memory baseURI) ERC721("MyNFT", "MNFT") {
_baseTokenURI = baseURI;
}
function safeMint(address to, string memory uri) public onlyOwner {
uint256 tokenId = _tokenIdCounter.current();
_safeMint(to, tokenId);
_setTokenURI(tokenId, uri);
_tokenIdCounter.increment();
}
// 可选:设置基础URI,用于构建完整的token URI
string private _baseTokenURI;
function setBaseURI(string memory baseURI) public onlyOwner {
_baseTokenURI = baseURI;
}
function _baseURI() internal view override returns (string memory) {
return _baseTokenURI;
}
// 可选:获取当前最大tokenId
function getCurrentTokenId() public view returns (uint256) {
return _tokenIdCounter.current();
}
} 代码解析:
import:引入了OpenZeppelin库中的ERC721基合约、Ownable(所有权管理)和Counters(计数器)合约,OpenZeppelin提供了经过审计的安全合约实现,强烈建议使用。contract MyNFT is ERC721, Ownable:我们的合约继承了ERC721和Ownable,获得了NFT基本功能和所有者管理功能。constructor:构造函数,初始化NFT名称("MyNFT")和符号("MNFT"),并接收一个baseURI作为参数。safeMint:核心的铸造函数,只有合约所有者可以调用,它接收接收者地址(to)和代币URI(uri),然后铸造一个新的NFT。_setTokenURI:设置每个NFT的元数据URI,这个URI通常指向一个JSON文件,描述了NFT的名称、描述、图片等属性。_baseURI:用于构建完整token URI的前缀。配置Hardhat: 在 hardhat.config.js 中,确保配置了Solidity编译器版本,并可以添加网络配置(如测试网络)。
编写测试脚本: 在 test/ 目录下编写测试用例,确保合约功能正确,可以使用Hardhat自带的ethers.js库进行测试。
部署合约: 编写部署脚本(例如在 scripts/ 目录下),然后运行Hardhat命令进行部署:

npx hardhat run scripts/deploy.js --network <测试网络名称>
部署成功后,你会得到合约的地址。
NFT元数据与IPFS
NFT的价值很大程度上取决于其元数据,元数据通常存储在链下,通过IPFS(InterPlanetary File System)等去中心化存储网络来保证其可访问性和抗审查性。
{
"name": "My Awesome NFT",
"description": "This is a description of my awesome NFT.",
"image": "https://ipfs.io/ipfs/<QmHash>/image.png",
"attributes": [
{
"trait_type": "Background",
"value": "Blue"
}
]
} tokenURI中。部署与交互
safeMint函数,并传入目标地址和元数据URI来铸造NFT,这需要通过MetaMask等钱包发起交易,并支付gas费用。后续发展与考虑
免责声明:本文为转载,非本网原创内容,不代表本网观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
如有疑问请发送邮件至:bangqikeconnect@gmail.com