Portfolio Interface
Protocol Interface
PRC-721 Standard
A standard interface enables applications to monitor and transfer NFTs on Pollux. Basic PRC-721 smart contracts, as outlined below, facilitate the tracking of a substantial number of unique NFTs. The PRC-20 token standard proves inadequate for managing NFTs, given the uniqueness of each token within PRC-721. The significance of the PRC-721 standard on Pollux is comparable to the pivotal role played by PRC-20.
MUST Implemented Interfaces
Every PRC-721 compliant contract must implement the PRC721 and PRC165 interfaces
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.
onPRC721Received(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("onPRC721Received(address,address,uint256,bytes)")) an exception will be thrown. A smart contract that can receive NFT must implement the PRC721TokenReceiver interface.
NOTES
The hash of bytes4(keccak256("onPRC721Received(address,address,uint256,bytes))) is different from the Ethereum version bytes4(keccak256("onERC721Received(address,address,uint256,bytes))). With the return value of function onPRC721Received
, please use 0x5175f878 instead of 0x150b7a02.
OPTIONAL Metadata Extension Interface
The metadata extension is OPTIONAL for PRC-721 smart contracts. This allows your smart contract to be interrogated for its name and for details about the assets which your NFTs represent.
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 PRC-721 smart contracts. This allows your contract to publish its full list of NFTs and make them discoverable.
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