附录2 ERC721不可交换代币协议

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

你可能感兴趣的:(附录2 ERC721不可交换代币协议)