ERC721协议随着以太加密猫游戏的流行而逐渐被大家所熟知。其本质是对不可置换代币(NFT)的所有权转移和流通制定了标准的接口以及触发的事件,并在一定程度上和ERC20协议兼容,方便第三方钱包进行资产展示。ERC721协议更大的想象空间在于和现实世界中物理资产如房产、资源所有权和艺术品等的一一对应。未来有可能成为各种现实资产交易和艺术品拍卖类应用的基石,从而引爆一个新的商业应用模式。
本附录收录了ERC721协议中重要而且常见的函数定义、事件定义以及公共变量定义等作为日常工作的快速参考。如果需要关于该协议全面而细化的描述请参考官方相关文档。
1 元数据类函数
function name() external pure returns (string _name)
返回当前NFT的名称描述, 如”test None exchange token”
function symbol() external pure returns (string _symbol)
返回当前NFT的符号简写,如TNT
function tokenURI(uint256 _tokenId) external view returns (string)
返回指定NFT的外部资源URI通常是ipfs或http(s)路径,外部资源文件需要包含名字、描述、图片
2 枚举查询类函数
function balanceOf(address _owner) external view returns (uint256)
返回由用户持有的NFT数量
function totalSupply() external view returns (uint256)
返回NFT的供应总量
function tokenByIndex(uint256 _index) external view returns (uint256)
通过索引返回指定NFT的ID
function tokenOfOwnerByIndex(address _owner, uint256 _index)
external view returns (uint256)
由于一个账户可以拥有多个NFT,因此该函数可以返回目标账户指定索引的NFT
3 所有权转移相关
event Transfer(address indexed _from, address indexed _to,
uint256 indexed _tokenId)
完成NFT的所有权转移时必须触发该事件进行日志记录
function transferFrom(address _from, address _to, uint256 _tokenId)
external payable
将NFT的所有权转移到目标账户,并触发事件Transfer,目标账户和源账户都必须有效
function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes data) external payable
将NFT的所有权转移到目标账户,并触发事件Transfer,实际所有权的转移调用transferFrom来实现,如果接受目标账户to为合约,该合约需实现接口合约onERC721Received中的onERC721Received并返回正确值
function safeTransferFrom(address _from, address _to, uint256 _tokenId) external payable
将NFT的所有权转移到目标账户并触发事件Transfer,与safeTransferFrom(_from,_to,_tokenId,“”)同义
function ownerOf(uint256 _tokenId) external view returns (address)
返回指定NFT的拥有者
4 授权转移相关
event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId)
当指定NFT的所有者授权第三方账户管理该NFT的所有权转移时触发该事件,当进行NFT所有权转移时初始的第三方授权账户默认为无效
event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved)
当指定用户授权或禁止第三方账户如拍卖所合约管理其全部的NFTs资产时触发该事件
function approve(address _approved, uint256 _tokenId) external payable
授权第三方账户管理当前NFT所有权的转移,执行成功后触发事件Approval
function getApproved(uint256 _tokenId) external view returns (address)
得到指定NFT的授权第三方管理账户
function setApprovalForAll(address _operator, bool _approved) external
授权或禁止第三方账户管理当前账户拥有的所有NFTs
function isApprovedForAll(address _owner, address _operator)
external view returns (bool)
查询第三方账户是否被授权或禁止管理当前账户拥有的所有NFTs