:2026-03-12 18:03 点击:3
在区块链的世界里,NFT(非同质化代币)无疑是最炙手可热的概念之一,它赋予了数字资产独一无二的稀缺性和所有权,从艺术品、收藏品到游戏道具、房产证明,应用场景层出不穷,而ERC721,作为以太坊上首个实现NFT标准的智能合约接口,正是这一切的基石,本文将带你进入ERC721以太坊通证实战,从概念到代码,一步步铸造出你的第一个NFT。
在深入实战之前,我们首先要明白ERC721到底是什么。
ERC721标准定义了一系列接口(Interface)和事件(Event),确保了不同NFT项目之间的互操作性和兼容性,关键接口包括:
ownerOf(uint256 tokenId):查询某个ID的NFT当前所有者。balanceOf(address owner):查询某个地址拥有的NFT数量。transferFrom(address from, address to, uint256 tokenId):转移NFT所有权。approve(address to, uint256 tokenId):授权另一个地址转移你的NFT。getApproved(uint256 tokenId):获取被授权的地址。setApprovalForAll(address operator, bool approved):批量授权一个地址管理你所有的NFT。关键事件包括:
Transfer(address indexed from, address indexed to, uint256 indexed tokenId):NFT转移事件。Approval(address indexed owner, address indexed approved, uint256 indexed tokenId):NFT授权事件。要开始ERC721的通证实战,你需要准备以下环境和工具:
public, external, view, payable)等。我们将使用OpenZeppelin库,这是一个提供安全、审计过的智能合约标准的开源库,可以大大减少我们的开发风险和成本。
打开Remix IDE:访问 remix.ethereum.org。
创建新文件:在左侧文件浏览器中,点击“Create New File”,命名为MyNFT.sol。
引入OpenZeppelin ERC721合约:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/utils/Counters.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
contract MyNFT is ERC721 {
using Counters for Counters.Counter;
Counters.Counter private _tokenIdCounter;
constructor(string memory baseTokenURI) ERC721("MyNFT", "MNFT") {
_baseTokenURI = baseTokenURI;
}
// 函数:铸造一个新的NFT
function mintNFT(address to, string memory tokenURI) public onlyOwner {
uint256 tokenId = _tokenIdCounter.current();
_safeMint(to, tokenId);
_setTokenURI(tokenId, tokenURI);
_tokenIdCounter.increment();
}
// 可选:实现tokenURI函数,用于返回NF
T的元数据URI
function _baseTokenURI() internal view override returns (string memory) {
return _baseTokenURI;
}
string private _baseTokenURI;
// 可选:设置基础URI
function setBaseTokenURI(string memory baseTokenURI) public onlyOwner {
_baseTokenURI = baseTokenURI;
}
}
代码解释:
import:引入了OpenZeppelin的ERC721基础合约、计数器工具和Ownable(所有权)合约。contract MyNFT is ERC721:我们的MyNFT合约继承自ERC721。constructor:构造函数,初始化NFT的名称("MyNFT")和符号("MNFT")。baseTokenURI是NFT元数据的基础URI。mintNFT:核心铸造函数,只有合约所有者(onlyOwner)可以调用,它接收接收地址to和NFT的元数据URItokenURI,使用_safeMint安全铸造,并设置元数据。_tokenIdCounter:用于生成唯一的NFT ID。_baseTokenURI和setBaseTokenURI:用于管理和设置NFT元数据的基础路径。编译合约:
pragma solidity指定的版本兼容,如0.8.20)。MyNFT。baseTokenURI,你可以输入ipfs://YourBaseCID/(这里需要你提前将元数据文件上传到IPFS,并获取基础CID),如果是测试,可以先输入一个简单的字符串,如"https://my-nft-metadata.com/"。调用mintNFT函数:
MyNFT合约的接口。mintNFT函数。to输入框中,输入你想要接收NFT的地址(可以是你的MetaMask地址)。tokenURI输入框中,输入具体这个NFT的元数据URI,如果你有一个名为nft1.json的元数据文件,并上传到了IPFS,其URI可能是ipfs://YourBaseCID/nft1.json,或者,如果你有图片的直接链接,也可以使用(但通常推荐使用JSON元数据文件,包含图片描述、属性等信息)。mintNFT按钮。验证NFT是否铸造成功:
Transfer事件,或者直接查询你地址持有的代币。本文由用户投稿上传,若侵权请提供版权资料并联系删除!