Solidity合约标准----ERC721
ERC721
非同质化token,它依赖于ERC-165
ERC721 快速体验
参照官方提供的案例,直接部署到remix,自动下载依赖 https://docs.openzeppelin.com/contracts/4.x/erc721
// contracts/GameItem.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";
import "@openzeppelin/contracts/utils/Counters.sol";
// ERC721: 0x80ac58cd
//ERC165: 0x01ffc9a7
contract GameItem is ERC721URIStorage {
//NFT 实质: address==>tokenId
using Counters for Counters.Counter;
Counters.Counter private _tokenIds;
//NFT name,NFT简写
constructor() ERC721("ZhongYuanUniversity", "ZUT") {}
//白名单 player---》你的地址 tokenURI---》URL
function awardItem(address player, string memory tokenURI)
public
returns (uint256)
{
//获取当前的tokenID
uint256 newItemId = _tokenIds.current();
//铸造NFT (地址---》数字tokenID)
_mint(player, newItemId);
//设置token相关信息
_setTokenURI(newItemId, tokenURI);
//tokenid自增,防止重复
_tokenIds.increment();
return newItemId;
}
}
ERC721 功能体验
部署成功后拥有以下功能
ERC721 功能测试
1. 设置待测试的4个账户
2. 铸造NFT
3. 查询NFT数量
4. 依据tokenid查询NFT属主
5.部分NFT委托授权第三者
6.查询NFT是否已被授权
7.由第三者执行NFT转移
8.查询属主NFT数量,判断是否转移成功
9.将NFT全权委托第三者
10.查询是否委托成功
11.由第三者执行NFT安全转移
safeTransferFrom()实现安全转移功能,其本质是如果接收方的用户地址为合约地址,则必须实现IERC721Receiver-onERC721Received接口。
12.依据tokenid查询1号属主,判断是否转移成功
13.由第三者执行NFT安全转移,可以附加数据
14.查询原始数据所有者NFT数量
原始数据所有者已全部转移NFT