The ERC-721 standard introduces a non-fungible token (NFT) in which each issued token is unique and distinct from others. This standard defines functions and events that enable the creation, ownership, and transfer of non-fungible assets.
ERC-721 defines several key functions, including:
balanceOf
function balanceOf(address _owner) external view returns (uint256)
Returns balance of the HTS non fungible token from the account owner. The _owner
is the Hedera account ID 0.0.x
in Solidity format or the evm address of a contract that has been created via the CREATE2
operation.
ownerOf
function ownerOf(uint256 _tokenId) external view returns (address)
Returns the account ID of the specified HTS token owner. The _tokenId
is the Hedera serial number of the NFT.
approve
function approve(address _approved, uint256 _tokenId) external payable
Gives the spender permission to transfer a token (_tokenId
) to another account from the owner. The approval is cleared when the token is transferred. The _tokenId
is the Hedera serial number of the NFT.
This works by creating a synthetic CryptoApproveAllowanceTransaction
with payer - the account that called the precompile (the message sender property of the message frame in the EVM).
If the spender
address is 0, this creates a CryptoDeleteAllowanceTransaction
instead and removes any allowances previously approved on the token.
Fires an approval event with the following signature when executed:
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
setApprovalForAll
function setApprovalForAll(address _operator, bool _approved) external
Approve or remove an operator
as an operator for the caller. Operators can call transferFrom
for any token owned by the caller.
This works by creating a synthetic CryptoApproveAllowanceTransaction
with payer - the account that called the precompile (the message sender property of the message frame in the EVM).
getApproved
function getApproved(uint256 _tokenId) external view returns (address)
Returns the account approved for the specified _tokenId
. The _tokenId
is the Hedera serial number of the NFT.
This works by loading the SPENDER
property of the token from the NFTs ledger.
isApprovedForAll
function isApprovedForAll(address _owner, address _operator) external view returns (bool)
Returns if the operator
is allowed to manage all of the assets of owner
.
This works by loading the APPROVE_FOR_ALL_NFTS_ALLOWANCES
property of the owner account and verifying if the list of approved for all accounts contains the account id of the operator
.
transferFrom
function transferFrom(address _from, address _to, uint256 _tokenId) external payable
Transfers a token (_tokenId
) from a Hedera account (from
) to another Hedera account (to
) in Solidity format. The _tokenId
is the Hedera serial number of the NFT.
This works by creating a synthetic CryptoTransferTransaction
with nft token transfers with the is_approval
property set to true.
name
function name() external view returns (string _name)
Returns the name of the HTS non-fungible token.
symbol
function symbol() external view returns (string _symbol)
Returns the symbol of the HTS non-fungible token.
tokenURI
function tokenURI(uint256 _tokenId) external view returns (string)
Returns the token metadata of the HTS non-fungible token. This corresponds to the NFT metadata field when minting an NFT using HTS. The _tokenId
is the Hedera serial number of the NFT.
totalSupply
function totalSupply() external view returns (uint256)
Returns the total supply of the HTS non-fungible token.
The following ERC-721 operations are currently not supported and will return a failure if called.
- Existing Hedera token association rules will take the place of such checks.