ERC721Enumerable

Git Source

Inherits: ERC721, IERC721Enumerable

State Variables

_ownedTokens

mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

_ownedTokensIndex

mapping(uint256 => uint256) private _ownedTokensIndex;

_allTokens

uint256[] private _allTokens;

_allTokensIndex

mapping(uint256 => uint256) private _allTokensIndex;

Functions

supportsInterface

See IERC165-supportsInterface.

function supportsInterface(bytes4 interfaceId)
    public
    view
    virtual
    override(IERC165, ERC721)
    returns (bool);

tokenOfOwnerByIndex

See IERC721Enumerable-tokenOfOwnerByIndex.

function tokenOfOwnerByIndex(address owner, uint256 index)
    public
    view
    virtual
    override
    returns (uint256);

totalSupply

See IERC721Enumerable-totalSupply.

function totalSupply() public view virtual override returns (uint256);

tokenByIndex

See IERC721Enumerable-tokenByIndex.

function tokenByIndex(uint256 index) public view virtual override returns (uint256);

_beforeTokenTransfer

*Hook that is called before any token transfer. This includes minting and burning. Calling conditions:

  • When from and to are both non-zero, from's tokenId will be transferred to to.
  • When from is zero, tokenId will be minted for to.
  • When to is zero, from's tokenId will be burned.
  • from cannot be the zero address.
  • to cannot be the zero address. To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].*
function _beforeTokenTransfer(address from, address to, uint256 tokenId)
    internal
    virtual
    override;

_addTokenToOwnerEnumeration

Private function to add a token to this extension's ownership-tracking data structures.

function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private;

Parameters

NameTypeDescription
toaddressaddress representing the new owner of the given token ID
tokenIduint256uint256 ID of the token to be added to the tokens list of the given address

_addTokenToAllTokensEnumeration

Private function to add a token to this extension's token tracking data structures.

function _addTokenToAllTokensEnumeration(uint256 tokenId) private;

Parameters

NameTypeDescription
tokenIduint256uint256 ID of the token to be added to the tokens list

_removeTokenFromOwnerEnumeration

Private function to remove a token from this extension's ownership-tracking data structures. Note that while the token is not assigned a new owner, the _ownedTokensIndex mapping is not updated: this allows for gas optimizations e.g. when performing a transfer operation (avoiding double writes). This has O(1) time complexity, but alters the order of the _ownedTokens array.

function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private;

Parameters

NameTypeDescription
fromaddressaddress representing the previous owner of the given token ID
tokenIduint256uint256 ID of the token to be removed from the tokens list of the given address

_removeTokenFromAllTokensEnumeration

Private function to remove a token from this extension's token tracking data structures. This has O(1) time complexity, but alters the order of the _allTokens array.

function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private;

Parameters

NameTypeDescription
tokenIduint256uint256 ID of the token to be removed from the tokens list