Protocol Interface
WRC-721 Standard
A standard interface allows applications to track and transfer NFTs on Tron. Simple WRC-721 smart contracts list as below to track a large number of NFTs. WRC-20 token standard is insufficient for handling NFTs due to each token in WRC-721 being unique. The standard of WRC-721 is inspiring on Tron. It plays an important role as well as WRC-20.
MUST Implemented Interfaces
Every WRC-721 compliant contract must implement the WRC721 and WRC165 interfaces
solidity
balanceOf(address _owner) Returns the number of NFTs owned by the specified account
ownerOf(uint256 _tokenId) Returns the owner of the specified NFT
safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes data) Transfer ownership of an NFT
safeTransferFrom(address _from, address _to, uint256 _tokenId) Transfer ownership of an NFT
transferFrom(address _from, address _to, uint256 _tokenId) Transfer the ownership of an NFT (the caller must confirm whether the _to address can receive the NFT normally, otherwise the NFT will be lost)
approve(address _approved, uint256 _tokenId) Grant other people control of an NFT
setApprovalForAll(address _operator, bool _approved) Grant/recover control of all NFTs by a third party (_operator)
getApproved(uint256 _tokenId) Query the authorization of a certain NFT
isApprovedForAll(address _owner, address _operator) Query whether the operator is the authorized address of the owner
supportsInterface(bytes4 interfaceID) Query whether a certain interface is supported (interfaceID)
event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId) Approval event will be triggered after Approval is successful
event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId) Successful transferFrom and safeTransferFrom will trigger the Transfer event
event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved) ApprovalForAll event will be triggered after setApprovalForAll succeeds
A wallet/broker/auction application MUST implement the wallet interface if it will accept safe transfers.
solidity
onWRC721Received(address _operator, address _from, uint256 _tokenId, bytes _data)
Works with the safeTransferFrom
method, when _to is the contract address, you need to call this method and check the return value. If the return value is not bytes4(keccak256("onWRC721Received(address,address,uint256,bytes)")) an exception will be thrown. A smart contract that can receive NFT must implement the WRC721TokenReceiver interface.
📘The hash of bytes4(keccak256("onWRC721Received(address,address,uint256,bytes))) is different from the Ethereum version bytes4(keccak256("onERC721Received(address,address,uint256,bytes))). With the return value of function
onWRC721Received
, please use 0x5175f878 instead of 0x150b7a02.
OPTIONAL Metadata Extension Interface
The metadata extension is OPTIONAL for WRC-721 smart contracts. This allows your smart contract to be interrogated for its name and for details about the assets which your NFTs represent.
solidity
name() Returns the contract name
symbol() Returns the contract symbol
tokenURI(uint256 _tokenId) Returns the URI of the external file corresponding to _tokenId. External resource files need to include names, descriptions and pictures.
OPTIONAL Enumeration Extension Interface
The enumeration extension is OPTIONAL for WRC-721 smart contracts. This allows your contract to publish its full list of NFTs and make them discoverable.
solidity
totalSupply() Returns the total amount of NFT
tokenByIndex(uint256 _index) Returns the corresponding tokenId through _index
tokenOfOwnerByIndex(address _owner, uint256 _index) Returns the tokenId corresponding to the index in the NFT list owned by the owner
Last updated