知乎專欄 | 多維度架構 | | | 微信號 netkiller-ebook | | | QQ群:128659835 請註明“讀者” |
interface ERC721 { event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId); event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId); event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved); function balanceOf(address _owner) external view returns (uint256); function ownerOf(uint256 _tokenId) external view returns (address); function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes data) external payable; function safeTransferFrom(address _from, address _to, uint256 _tokenId) external payable; function transferFrom(address _from, address _to, uint256 _tokenId) external payable; function approve(address _approved, uint256 _tokenId) external payable; function setApprovalForAll(address _operator, bool _approved) external; function getApproved(uint256 _tokenId) external view returns (address); function isApprovedForAll(address _owner, address _operator) external view returns (bool); } interface ERC165 { function supportsInterface(bytes4 interfaceID) external view returns (bool); } interface ERC721TokenReceiver { function onERC721Received(address _operator, address _from, uint256 _tokenId, bytes _data) external returns(bytes4); }
可選實現介面,ERC721Metadata 介面用於提供合約的元數據:name , symbol 及 URI(NFT所對應的資源)。
其介面定義如下: interface ERC721Metadata /* is ERC721 */ { function name() external pure returns (string _name); function symbol() external pure returns (string _symbol); function tokenURI(uint256 _tokenId) external view returns (string); } 介面說明: name(): 返回合約名字,儘管是可選,但強烈建議實現,即便是返回空字元串。 symbol(): 返回合約代幣符號,儘管是可選,但強烈建議實現,即便是返回空字元串。 tokenURI(): 返回_tokenId所對應的外部資源檔案的URI(通常是IPFS或HTTP(S)路徑)。外部資源檔案需要包含名字、描述、圖片,其格式的要求如下:
可選實現介面,ERC721Enumerable的主要目的是提高合約中NTF的可訪問性,其介面定義如下:
interface ERC721Enumerable /* is ERC721 */ { function totalSupply() external view returns (uint256); function tokenByIndex(uint256 _index) external view returns (uint256); function tokenOfOwnerByIndex(address _owner, uint256 _index) external view returns (uint256); } 介面說明: totalSupply(): 返回NFT總量 tokenByIndex(): 通過索引返回對應的tokenId。 tokenOfOwnerByIndex(): 所有者可以一次擁有多個的NFT, 此函數返回_owner擁有的NFT列表中對應索引的tokenId。