Files
openzeppelin-contracts/docs/modules/api/pages/token/ERC6909.adoc
github-actions da7fd0d3e5 Update docs
2025-04-22 16:39:54 +00:00

892 lines
46 KiB
Plaintext

:github-icon: pass:[<svg class="icon"><use href="#github-icon"/></svg>]
:IERC6909: pass:normal[xref:interfaces.adoc#IERC6909[`IERC6909`]]
:IERC6909ContentURI: pass:normal[xref:interfaces.adoc#IERC6909ContentURI[`IERC6909ContentURI`]]
:IERC6909Metadata: pass:normal[xref:interfaces.adoc#IERC6909Metadata[`IERC6909Metadata`]]
:IERC6909TokenSupply: pass:normal[xref:interfaces.adoc#IERC6909TokenSupply[`IERC6909TokenSupply`]]
:xref-ERC6909-supportsInterface-bytes4-: xref:token/ERC6909.adoc#ERC6909-supportsInterface-bytes4-
:xref-ERC6909-balanceOf-address-uint256-: xref:token/ERC6909.adoc#ERC6909-balanceOf-address-uint256-
:xref-ERC6909-allowance-address-address-uint256-: xref:token/ERC6909.adoc#ERC6909-allowance-address-address-uint256-
:xref-ERC6909-isOperator-address-address-: xref:token/ERC6909.adoc#ERC6909-isOperator-address-address-
:xref-ERC6909-approve-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-approve-address-uint256-uint256-
:xref-ERC6909-setOperator-address-bool-: xref:token/ERC6909.adoc#ERC6909-setOperator-address-bool-
:xref-ERC6909-transfer-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-transfer-address-uint256-uint256-
:xref-ERC6909-transferFrom-address-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-transferFrom-address-address-uint256-uint256-
:xref-ERC6909-_mint-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-_mint-address-uint256-uint256-
:xref-ERC6909-_transfer-address-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-_transfer-address-address-uint256-uint256-
:xref-ERC6909-_burn-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-_burn-address-uint256-uint256-
:xref-ERC6909-_update-address-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-_update-address-address-uint256-uint256-
:xref-ERC6909-_approve-address-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-_approve-address-address-uint256-uint256-
:xref-ERC6909-_setOperator-address-address-bool-: xref:token/ERC6909.adoc#ERC6909-_setOperator-address-address-bool-
:xref-ERC6909-_spendAllowance-address-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-_spendAllowance-address-address-uint256-uint256-
:xref-IERC6909-Approval-address-address-uint256-uint256-: xref:interfaces.adoc#IERC6909-Approval-address-address-uint256-uint256-
:xref-IERC6909-OperatorSet-address-address-bool-: xref:interfaces.adoc#IERC6909-OperatorSet-address-address-bool-
:xref-IERC6909-Transfer-address-address-address-uint256-uint256-: xref:interfaces.adoc#IERC6909-Transfer-address-address-address-uint256-uint256-
:xref-ERC6909-ERC6909InsufficientBalance-address-uint256-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-ERC6909InsufficientBalance-address-uint256-uint256-uint256-
:xref-ERC6909-ERC6909InsufficientAllowance-address-uint256-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-ERC6909InsufficientAllowance-address-uint256-uint256-uint256-
:xref-ERC6909-ERC6909InvalidApprover-address-: xref:token/ERC6909.adoc#ERC6909-ERC6909InvalidApprover-address-
:xref-ERC6909-ERC6909InvalidReceiver-address-: xref:token/ERC6909.adoc#ERC6909-ERC6909InvalidReceiver-address-
:xref-ERC6909-ERC6909InvalidSender-address-: xref:token/ERC6909.adoc#ERC6909-ERC6909InvalidSender-address-
:xref-ERC6909-ERC6909InvalidSpender-address-: xref:token/ERC6909.adoc#ERC6909-ERC6909InvalidSpender-address-
:xref-ERC6909ContentURI-contractURI--: xref:token/ERC6909.adoc#ERC6909ContentURI-contractURI--
:xref-ERC6909ContentURI-tokenURI-uint256-: xref:token/ERC6909.adoc#ERC6909ContentURI-tokenURI-uint256-
:xref-ERC6909ContentURI-_setContractURI-string-: xref:token/ERC6909.adoc#ERC6909ContentURI-_setContractURI-string-
:xref-ERC6909ContentURI-_setTokenURI-uint256-string-: xref:token/ERC6909.adoc#ERC6909ContentURI-_setTokenURI-uint256-string-
:xref-ERC6909-supportsInterface-bytes4-: xref:token/ERC6909.adoc#ERC6909-supportsInterface-bytes4-
:xref-ERC6909-balanceOf-address-uint256-: xref:token/ERC6909.adoc#ERC6909-balanceOf-address-uint256-
:xref-ERC6909-allowance-address-address-uint256-: xref:token/ERC6909.adoc#ERC6909-allowance-address-address-uint256-
:xref-ERC6909-isOperator-address-address-: xref:token/ERC6909.adoc#ERC6909-isOperator-address-address-
:xref-ERC6909-approve-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-approve-address-uint256-uint256-
:xref-ERC6909-setOperator-address-bool-: xref:token/ERC6909.adoc#ERC6909-setOperator-address-bool-
:xref-ERC6909-transfer-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-transfer-address-uint256-uint256-
:xref-ERC6909-transferFrom-address-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-transferFrom-address-address-uint256-uint256-
:xref-ERC6909-_mint-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-_mint-address-uint256-uint256-
:xref-ERC6909-_transfer-address-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-_transfer-address-address-uint256-uint256-
:xref-ERC6909-_burn-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-_burn-address-uint256-uint256-
:xref-ERC6909-_update-address-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-_update-address-address-uint256-uint256-
:xref-ERC6909-_approve-address-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-_approve-address-address-uint256-uint256-
:xref-ERC6909-_setOperator-address-address-bool-: xref:token/ERC6909.adoc#ERC6909-_setOperator-address-address-bool-
:xref-ERC6909-_spendAllowance-address-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-_spendAllowance-address-address-uint256-uint256-
:xref-ERC6909ContentURI-ContractURIUpdated--: xref:token/ERC6909.adoc#ERC6909ContentURI-ContractURIUpdated--
:xref-ERC6909ContentURI-URI-string-uint256-: xref:token/ERC6909.adoc#ERC6909ContentURI-URI-string-uint256-
:xref-IERC6909-Approval-address-address-uint256-uint256-: xref:interfaces.adoc#IERC6909-Approval-address-address-uint256-uint256-
:xref-IERC6909-OperatorSet-address-address-bool-: xref:interfaces.adoc#IERC6909-OperatorSet-address-address-bool-
:xref-IERC6909-Transfer-address-address-address-uint256-uint256-: xref:interfaces.adoc#IERC6909-Transfer-address-address-address-uint256-uint256-
:xref-ERC6909-ERC6909InsufficientBalance-address-uint256-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-ERC6909InsufficientBalance-address-uint256-uint256-uint256-
:xref-ERC6909-ERC6909InsufficientAllowance-address-uint256-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-ERC6909InsufficientAllowance-address-uint256-uint256-uint256-
:xref-ERC6909-ERC6909InvalidApprover-address-: xref:token/ERC6909.adoc#ERC6909-ERC6909InvalidApprover-address-
:xref-ERC6909-ERC6909InvalidReceiver-address-: xref:token/ERC6909.adoc#ERC6909-ERC6909InvalidReceiver-address-
:xref-ERC6909-ERC6909InvalidSender-address-: xref:token/ERC6909.adoc#ERC6909-ERC6909InvalidSender-address-
:xref-ERC6909-ERC6909InvalidSpender-address-: xref:token/ERC6909.adoc#ERC6909-ERC6909InvalidSpender-address-
:IERC1155-URI: pass:normal[xref:token/ERC1155.adoc#IERC1155-URI-string-uint256-[`IERC1155.URI`]]
:xref-ERC6909Metadata-name-uint256-: xref:token/ERC6909.adoc#ERC6909Metadata-name-uint256-
:xref-ERC6909Metadata-symbol-uint256-: xref:token/ERC6909.adoc#ERC6909Metadata-symbol-uint256-
:xref-ERC6909Metadata-decimals-uint256-: xref:token/ERC6909.adoc#ERC6909Metadata-decimals-uint256-
:xref-ERC6909Metadata-_setName-uint256-string-: xref:token/ERC6909.adoc#ERC6909Metadata-_setName-uint256-string-
:xref-ERC6909Metadata-_setSymbol-uint256-string-: xref:token/ERC6909.adoc#ERC6909Metadata-_setSymbol-uint256-string-
:xref-ERC6909Metadata-_setDecimals-uint256-uint8-: xref:token/ERC6909.adoc#ERC6909Metadata-_setDecimals-uint256-uint8-
:xref-ERC6909-supportsInterface-bytes4-: xref:token/ERC6909.adoc#ERC6909-supportsInterface-bytes4-
:xref-ERC6909-balanceOf-address-uint256-: xref:token/ERC6909.adoc#ERC6909-balanceOf-address-uint256-
:xref-ERC6909-allowance-address-address-uint256-: xref:token/ERC6909.adoc#ERC6909-allowance-address-address-uint256-
:xref-ERC6909-isOperator-address-address-: xref:token/ERC6909.adoc#ERC6909-isOperator-address-address-
:xref-ERC6909-approve-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-approve-address-uint256-uint256-
:xref-ERC6909-setOperator-address-bool-: xref:token/ERC6909.adoc#ERC6909-setOperator-address-bool-
:xref-ERC6909-transfer-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-transfer-address-uint256-uint256-
:xref-ERC6909-transferFrom-address-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-transferFrom-address-address-uint256-uint256-
:xref-ERC6909-_mint-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-_mint-address-uint256-uint256-
:xref-ERC6909-_transfer-address-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-_transfer-address-address-uint256-uint256-
:xref-ERC6909-_burn-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-_burn-address-uint256-uint256-
:xref-ERC6909-_update-address-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-_update-address-address-uint256-uint256-
:xref-ERC6909-_approve-address-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-_approve-address-address-uint256-uint256-
:xref-ERC6909-_setOperator-address-address-bool-: xref:token/ERC6909.adoc#ERC6909-_setOperator-address-address-bool-
:xref-ERC6909-_spendAllowance-address-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-_spendAllowance-address-address-uint256-uint256-
:xref-ERC6909Metadata-ERC6909NameUpdated-uint256-string-: xref:token/ERC6909.adoc#ERC6909Metadata-ERC6909NameUpdated-uint256-string-
:xref-ERC6909Metadata-ERC6909SymbolUpdated-uint256-string-: xref:token/ERC6909.adoc#ERC6909Metadata-ERC6909SymbolUpdated-uint256-string-
:xref-ERC6909Metadata-ERC6909DecimalsUpdated-uint256-uint8-: xref:token/ERC6909.adoc#ERC6909Metadata-ERC6909DecimalsUpdated-uint256-uint8-
:xref-IERC6909-Approval-address-address-uint256-uint256-: xref:interfaces.adoc#IERC6909-Approval-address-address-uint256-uint256-
:xref-IERC6909-OperatorSet-address-address-bool-: xref:interfaces.adoc#IERC6909-OperatorSet-address-address-bool-
:xref-IERC6909-Transfer-address-address-address-uint256-uint256-: xref:interfaces.adoc#IERC6909-Transfer-address-address-address-uint256-uint256-
:xref-ERC6909-ERC6909InsufficientBalance-address-uint256-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-ERC6909InsufficientBalance-address-uint256-uint256-uint256-
:xref-ERC6909-ERC6909InsufficientAllowance-address-uint256-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-ERC6909InsufficientAllowance-address-uint256-uint256-uint256-
:xref-ERC6909-ERC6909InvalidApprover-address-: xref:token/ERC6909.adoc#ERC6909-ERC6909InvalidApprover-address-
:xref-ERC6909-ERC6909InvalidReceiver-address-: xref:token/ERC6909.adoc#ERC6909-ERC6909InvalidReceiver-address-
:xref-ERC6909-ERC6909InvalidSender-address-: xref:token/ERC6909.adoc#ERC6909-ERC6909InvalidSender-address-
:xref-ERC6909-ERC6909InvalidSpender-address-: xref:token/ERC6909.adoc#ERC6909-ERC6909InvalidSpender-address-
:xref-ERC6909TokenSupply-totalSupply-uint256-: xref:token/ERC6909.adoc#ERC6909TokenSupply-totalSupply-uint256-
:xref-ERC6909TokenSupply-_update-address-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909TokenSupply-_update-address-address-uint256-uint256-
:xref-ERC6909-supportsInterface-bytes4-: xref:token/ERC6909.adoc#ERC6909-supportsInterface-bytes4-
:xref-ERC6909-balanceOf-address-uint256-: xref:token/ERC6909.adoc#ERC6909-balanceOf-address-uint256-
:xref-ERC6909-allowance-address-address-uint256-: xref:token/ERC6909.adoc#ERC6909-allowance-address-address-uint256-
:xref-ERC6909-isOperator-address-address-: xref:token/ERC6909.adoc#ERC6909-isOperator-address-address-
:xref-ERC6909-approve-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-approve-address-uint256-uint256-
:xref-ERC6909-setOperator-address-bool-: xref:token/ERC6909.adoc#ERC6909-setOperator-address-bool-
:xref-ERC6909-transfer-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-transfer-address-uint256-uint256-
:xref-ERC6909-transferFrom-address-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-transferFrom-address-address-uint256-uint256-
:xref-ERC6909-_mint-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-_mint-address-uint256-uint256-
:xref-ERC6909-_transfer-address-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-_transfer-address-address-uint256-uint256-
:xref-ERC6909-_burn-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-_burn-address-uint256-uint256-
:xref-ERC6909-_approve-address-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-_approve-address-address-uint256-uint256-
:xref-ERC6909-_setOperator-address-address-bool-: xref:token/ERC6909.adoc#ERC6909-_setOperator-address-address-bool-
:xref-ERC6909-_spendAllowance-address-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-_spendAllowance-address-address-uint256-uint256-
:xref-IERC6909-Approval-address-address-uint256-uint256-: xref:interfaces.adoc#IERC6909-Approval-address-address-uint256-uint256-
:xref-IERC6909-OperatorSet-address-address-bool-: xref:interfaces.adoc#IERC6909-OperatorSet-address-address-bool-
:xref-IERC6909-Transfer-address-address-address-uint256-uint256-: xref:interfaces.adoc#IERC6909-Transfer-address-address-address-uint256-uint256-
:xref-ERC6909-ERC6909InsufficientBalance-address-uint256-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-ERC6909InsufficientBalance-address-uint256-uint256-uint256-
:xref-ERC6909-ERC6909InsufficientAllowance-address-uint256-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-ERC6909InsufficientAllowance-address-uint256-uint256-uint256-
:xref-ERC6909-ERC6909InvalidApprover-address-: xref:token/ERC6909.adoc#ERC6909-ERC6909InvalidApprover-address-
:xref-ERC6909-ERC6909InvalidReceiver-address-: xref:token/ERC6909.adoc#ERC6909-ERC6909InvalidReceiver-address-
:xref-ERC6909-ERC6909InvalidSender-address-: xref:token/ERC6909.adoc#ERC6909-ERC6909InvalidSender-address-
:xref-ERC6909-ERC6909InvalidSpender-address-: xref:token/ERC6909.adoc#ERC6909-ERC6909InvalidSpender-address-
= ERC-6909
[.readme-notice]
NOTE: This document is better viewed at https://docs.openzeppelin.com/contracts/api/token/erc6909
This set of interfaces and contracts are all related to the https://eips.ethereum.org/EIPS/eip-6909[ERC-6909 Minimal Multi-Token Interface].
The ERC consists of four interfaces which fulfill different roles--the interfaces are as follows:
. {IERC6909}: Base interface for a vanilla ERC6909 token.
. {IERC6909ContentURI}: Extends the base interface and adds content URI (contract and token level) functionality.
. {IERC6909Metadata}: Extends the base interface and adds metadata functionality, which exposes a name, symbol, and decimals for each token id.
. {IERC6909TokenSupply}: Extends the base interface and adds total supply functionality for each token id.
Implementations are provided for each of the 4 interfaces defined in the ERC.
== Core
:ERC6909InsufficientBalance: pass:normal[xref:#ERC6909-ERC6909InsufficientBalance-address-uint256-uint256-uint256-[`++ERC6909InsufficientBalance++`]]
:ERC6909InsufficientAllowance: pass:normal[xref:#ERC6909-ERC6909InsufficientAllowance-address-uint256-uint256-uint256-[`++ERC6909InsufficientAllowance++`]]
:ERC6909InvalidApprover: pass:normal[xref:#ERC6909-ERC6909InvalidApprover-address-[`++ERC6909InvalidApprover++`]]
:ERC6909InvalidReceiver: pass:normal[xref:#ERC6909-ERC6909InvalidReceiver-address-[`++ERC6909InvalidReceiver++`]]
:ERC6909InvalidSender: pass:normal[xref:#ERC6909-ERC6909InvalidSender-address-[`++ERC6909InvalidSender++`]]
:ERC6909InvalidSpender: pass:normal[xref:#ERC6909-ERC6909InvalidSpender-address-[`++ERC6909InvalidSpender++`]]
:supportsInterface: pass:normal[xref:#ERC6909-supportsInterface-bytes4-[`++supportsInterface++`]]
:balanceOf: pass:normal[xref:#ERC6909-balanceOf-address-uint256-[`++balanceOf++`]]
:allowance: pass:normal[xref:#ERC6909-allowance-address-address-uint256-[`++allowance++`]]
:isOperator: pass:normal[xref:#ERC6909-isOperator-address-address-[`++isOperator++`]]
:approve: pass:normal[xref:#ERC6909-approve-address-uint256-uint256-[`++approve++`]]
:setOperator: pass:normal[xref:#ERC6909-setOperator-address-bool-[`++setOperator++`]]
:transfer: pass:normal[xref:#ERC6909-transfer-address-uint256-uint256-[`++transfer++`]]
:transferFrom: pass:normal[xref:#ERC6909-transferFrom-address-address-uint256-uint256-[`++transferFrom++`]]
:_mint: pass:normal[xref:#ERC6909-_mint-address-uint256-uint256-[`++_mint++`]]
:_transfer: pass:normal[xref:#ERC6909-_transfer-address-address-uint256-uint256-[`++_transfer++`]]
:_burn: pass:normal[xref:#ERC6909-_burn-address-uint256-uint256-[`++_burn++`]]
:_update: pass:normal[xref:#ERC6909-_update-address-address-uint256-uint256-[`++_update++`]]
:_approve: pass:normal[xref:#ERC6909-_approve-address-address-uint256-uint256-[`++_approve++`]]
:_setOperator: pass:normal[xref:#ERC6909-_setOperator-address-address-bool-[`++_setOperator++`]]
:_spendAllowance: pass:normal[xref:#ERC6909-_spendAllowance-address-address-uint256-uint256-[`++_spendAllowance++`]]
:supportsInterface-bytes4: pass:normal[xref:#ERC6909-supportsInterface-bytes4-[`++supportsInterface++`]]
:balanceOf-address-uint256: pass:normal[xref:#ERC6909-balanceOf-address-uint256-[`++balanceOf++`]]
:allowance-address-address-uint256: pass:normal[xref:#ERC6909-allowance-address-address-uint256-[`++allowance++`]]
:isOperator-address-address: pass:normal[xref:#ERC6909-isOperator-address-address-[`++isOperator++`]]
:approve-address-uint256-uint256: pass:normal[xref:#ERC6909-approve-address-uint256-uint256-[`++approve++`]]
:setOperator-address-bool: pass:normal[xref:#ERC6909-setOperator-address-bool-[`++setOperator++`]]
:transfer-address-uint256-uint256: pass:normal[xref:#ERC6909-transfer-address-uint256-uint256-[`++transfer++`]]
:transferFrom-address-address-uint256-uint256: pass:normal[xref:#ERC6909-transferFrom-address-address-uint256-uint256-[`++transferFrom++`]]
:_mint-address-uint256-uint256: pass:normal[xref:#ERC6909-_mint-address-uint256-uint256-[`++_mint++`]]
:_transfer-address-address-uint256-uint256: pass:normal[xref:#ERC6909-_transfer-address-address-uint256-uint256-[`++_transfer++`]]
:_burn-address-uint256-uint256: pass:normal[xref:#ERC6909-_burn-address-uint256-uint256-[`++_burn++`]]
:_update-address-address-uint256-uint256: pass:normal[xref:#ERC6909-_update-address-address-uint256-uint256-[`++_update++`]]
:_approve-address-address-uint256-uint256: pass:normal[xref:#ERC6909-_approve-address-address-uint256-uint256-[`++_approve++`]]
:_setOperator-address-address-bool: pass:normal[xref:#ERC6909-_setOperator-address-address-bool-[`++_setOperator++`]]
:_spendAllowance-address-address-uint256-uint256: pass:normal[xref:#ERC6909-_spendAllowance-address-address-uint256-uint256-[`++_spendAllowance++`]]
[.contract]
[[ERC6909]]
=== `++ERC6909++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.3.0/contracts/token/ERC6909/draft-ERC6909.sol[{github-icon},role=heading-link]
[.hljs-theme-light.nopadding]
```solidity
import "@openzeppelin/contracts/token/ERC6909/draft-ERC6909.sol";
```
Implementation of ERC-6909.
See https://eips.ethereum.org/EIPS/eip-6909
[.contract-index]
.Functions
--
* {xref-ERC6909-supportsInterface-bytes4-}[`++supportsInterface(interfaceId)++`]
* {xref-ERC6909-balanceOf-address-uint256-}[`++balanceOf(owner, id)++`]
* {xref-ERC6909-allowance-address-address-uint256-}[`++allowance(owner, spender, id)++`]
* {xref-ERC6909-isOperator-address-address-}[`++isOperator(owner, spender)++`]
* {xref-ERC6909-approve-address-uint256-uint256-}[`++approve(spender, id, amount)++`]
* {xref-ERC6909-setOperator-address-bool-}[`++setOperator(spender, approved)++`]
* {xref-ERC6909-transfer-address-uint256-uint256-}[`++transfer(receiver, id, amount)++`]
* {xref-ERC6909-transferFrom-address-address-uint256-uint256-}[`++transferFrom(sender, receiver, id, amount)++`]
* {xref-ERC6909-_mint-address-uint256-uint256-}[`++_mint(to, id, amount)++`]
* {xref-ERC6909-_transfer-address-address-uint256-uint256-}[`++_transfer(from, to, id, amount)++`]
* {xref-ERC6909-_burn-address-uint256-uint256-}[`++_burn(from, id, amount)++`]
* {xref-ERC6909-_update-address-address-uint256-uint256-}[`++_update(from, to, id, amount)++`]
* {xref-ERC6909-_approve-address-address-uint256-uint256-}[`++_approve(owner, spender, id, amount)++`]
* {xref-ERC6909-_setOperator-address-address-bool-}[`++_setOperator(owner, spender, approved)++`]
* {xref-ERC6909-_spendAllowance-address-address-uint256-uint256-}[`++_spendAllowance(owner, spender, id, amount)++`]
[.contract-subindex-inherited]
.IERC6909
[.contract-subindex-inherited]
.ERC165
[.contract-subindex-inherited]
.IERC165
--
[.contract-index]
.Events
--
[.contract-subindex-inherited]
.IERC6909
* {xref-IERC6909-Approval-address-address-uint256-uint256-}[`++Approval(owner, spender, id, amount)++`]
* {xref-IERC6909-OperatorSet-address-address-bool-}[`++OperatorSet(owner, spender, approved)++`]
* {xref-IERC6909-Transfer-address-address-address-uint256-uint256-}[`++Transfer(caller, sender, receiver, id, amount)++`]
[.contract-subindex-inherited]
.ERC165
[.contract-subindex-inherited]
.IERC165
--
[.contract-index]
.Errors
--
* {xref-ERC6909-ERC6909InsufficientBalance-address-uint256-uint256-uint256-}[`++ERC6909InsufficientBalance(sender, balance, needed, id)++`]
* {xref-ERC6909-ERC6909InsufficientAllowance-address-uint256-uint256-uint256-}[`++ERC6909InsufficientAllowance(spender, allowance, needed, id)++`]
* {xref-ERC6909-ERC6909InvalidApprover-address-}[`++ERC6909InvalidApprover(approver)++`]
* {xref-ERC6909-ERC6909InvalidReceiver-address-}[`++ERC6909InvalidReceiver(receiver)++`]
* {xref-ERC6909-ERC6909InvalidSender-address-}[`++ERC6909InvalidSender(sender)++`]
* {xref-ERC6909-ERC6909InvalidSpender-address-}[`++ERC6909InvalidSpender(spender)++`]
[.contract-subindex-inherited]
.IERC6909
[.contract-subindex-inherited]
.ERC165
[.contract-subindex-inherited]
.IERC165
--
[.contract-item]
[[ERC6909-supportsInterface-bytes4-]]
==== `[.contract-item-name]#++supportsInterface++#++(bytes4 interfaceId) → bool++` [.item-kind]#public#
Returns true if this contract implements the interface defined by
`interfaceId`. See the corresponding
https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]
to learn more about how these ids are created.
This function call must use less than 30 000 gas.
[.contract-item]
[[ERC6909-balanceOf-address-uint256-]]
==== `[.contract-item-name]#++balanceOf++#++(address owner, uint256 id) → uint256++` [.item-kind]#public#
Returns the amount of tokens of type `id` owned by `owner`.
[.contract-item]
[[ERC6909-allowance-address-address-uint256-]]
==== `[.contract-item-name]#++allowance++#++(address owner, address spender, uint256 id) → uint256++` [.item-kind]#public#
Returns the amount of tokens of type `id` that `spender` is allowed to spend on behalf of `owner`.
NOTE: Does not include operator allowances.
[.contract-item]
[[ERC6909-isOperator-address-address-]]
==== `[.contract-item-name]#++isOperator++#++(address owner, address spender) → bool++` [.item-kind]#public#
Returns true if `spender` is set as an operator for `owner`.
[.contract-item]
[[ERC6909-approve-address-uint256-uint256-]]
==== `[.contract-item-name]#++approve++#++(address spender, uint256 id, uint256 amount) → bool++` [.item-kind]#public#
Sets an approval to `spender` for `amount` of tokens of type `id` from the caller's tokens. An `amount` of
`type(uint256).max` signifies an unlimited approval.
Must return true.
[.contract-item]
[[ERC6909-setOperator-address-bool-]]
==== `[.contract-item-name]#++setOperator++#++(address spender, bool approved) → bool++` [.item-kind]#public#
Grants or revokes unlimited transfer permission of any token id to `spender` for the caller's tokens.
Must return true.
[.contract-item]
[[ERC6909-transfer-address-uint256-uint256-]]
==== `[.contract-item-name]#++transfer++#++(address receiver, uint256 id, uint256 amount) → bool++` [.item-kind]#public#
Transfers `amount` of token type `id` from the caller's account to `receiver`.
Must return true.
[.contract-item]
[[ERC6909-transferFrom-address-address-uint256-uint256-]]
==== `[.contract-item-name]#++transferFrom++#++(address sender, address receiver, uint256 id, uint256 amount) → bool++` [.item-kind]#public#
Transfers `amount` of token type `id` from `sender` to `receiver`.
Must return true.
[.contract-item]
[[ERC6909-_mint-address-uint256-uint256-]]
==== `[.contract-item-name]#++_mint++#++(address to, uint256 id, uint256 amount)++` [.item-kind]#internal#
Creates `amount` of token `id` and assigns them to `account`, by transferring it from address(0).
Relies on the `_update` mechanism.
Emits a {Transfer} event with `from` set to the zero address.
NOTE: This function is not virtual, {_update} should be overridden instead.
[.contract-item]
[[ERC6909-_transfer-address-address-uint256-uint256-]]
==== `[.contract-item-name]#++_transfer++#++(address from, address to, uint256 id, uint256 amount)++` [.item-kind]#internal#
Moves `amount` of token `id` from `from` to `to` without checking for approvals. This function verifies
that neither the sender nor the receiver are address(0), which means it cannot mint or burn tokens.
Relies on the `_update` mechanism.
Emits a {Transfer} event.
NOTE: This function is not virtual, {_update} should be overridden instead.
[.contract-item]
[[ERC6909-_burn-address-uint256-uint256-]]
==== `[.contract-item-name]#++_burn++#++(address from, uint256 id, uint256 amount)++` [.item-kind]#internal#
Destroys a `amount` of token `id` from `account`.
Relies on the `_update` mechanism.
Emits a {Transfer} event with `to` set to the zero address.
NOTE: This function is not virtual, {_update} should be overridden instead
[.contract-item]
[[ERC6909-_update-address-address-uint256-uint256-]]
==== `[.contract-item-name]#++_update++#++(address from, address to, uint256 id, uint256 amount)++` [.item-kind]#internal#
Transfers `amount` of token `id` from `from` to `to`, or alternatively mints (or burns) if `from`
(or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding
this function.
Emits a {Transfer} event.
[.contract-item]
[[ERC6909-_approve-address-address-uint256-uint256-]]
==== `[.contract-item-name]#++_approve++#++(address owner, address spender, uint256 id, uint256 amount)++` [.item-kind]#internal#
Sets `amount` as the allowance of `spender` over the `owner`'s `id` tokens.
This internal function is equivalent to `approve`, and can be used to e.g. set automatic allowances for certain
subsystems, etc.
Emits an {Approval} event.
Requirements:
- `owner` cannot be the zero address.
- `spender` cannot be the zero address.
[.contract-item]
[[ERC6909-_setOperator-address-address-bool-]]
==== `[.contract-item-name]#++_setOperator++#++(address owner, address spender, bool approved)++` [.item-kind]#internal#
Approve `spender` to operate on all of `owner`'s tokens
This internal function is equivalent to `setOperator`, and can be used to e.g. set automatic allowances for
certain subsystems, etc.
Emits an {OperatorSet} event.
Requirements:
- `owner` cannot be the zero address.
- `spender` cannot be the zero address.
[.contract-item]
[[ERC6909-_spendAllowance-address-address-uint256-uint256-]]
==== `[.contract-item-name]#++_spendAllowance++#++(address owner, address spender, uint256 id, uint256 amount)++` [.item-kind]#internal#
Updates `owner`'s allowance for `spender` based on spent `amount`.
Does not update the allowance value in case of infinite allowance.
Revert if not enough allowance is available.
Does not emit an {Approval} event.
[.contract-item]
[[ERC6909-ERC6909InsufficientBalance-address-uint256-uint256-uint256-]]
==== `[.contract-item-name]#++ERC6909InsufficientBalance++#++(address sender, uint256 balance, uint256 needed, uint256 id)++` [.item-kind]#error#
[.contract-item]
[[ERC6909-ERC6909InsufficientAllowance-address-uint256-uint256-uint256-]]
==== `[.contract-item-name]#++ERC6909InsufficientAllowance++#++(address spender, uint256 allowance, uint256 needed, uint256 id)++` [.item-kind]#error#
[.contract-item]
[[ERC6909-ERC6909InvalidApprover-address-]]
==== `[.contract-item-name]#++ERC6909InvalidApprover++#++(address approver)++` [.item-kind]#error#
[.contract-item]
[[ERC6909-ERC6909InvalidReceiver-address-]]
==== `[.contract-item-name]#++ERC6909InvalidReceiver++#++(address receiver)++` [.item-kind]#error#
[.contract-item]
[[ERC6909-ERC6909InvalidSender-address-]]
==== `[.contract-item-name]#++ERC6909InvalidSender++#++(address sender)++` [.item-kind]#error#
[.contract-item]
[[ERC6909-ERC6909InvalidSpender-address-]]
==== `[.contract-item-name]#++ERC6909InvalidSpender++#++(address spender)++` [.item-kind]#error#
== Extensions
:ContractURIUpdated: pass:normal[xref:#ERC6909ContentURI-ContractURIUpdated--[`++ContractURIUpdated++`]]
:URI: pass:normal[xref:#ERC6909ContentURI-URI-string-uint256-[`++URI++`]]
:contractURI: pass:normal[xref:#ERC6909ContentURI-contractURI--[`++contractURI++`]]
:tokenURI: pass:normal[xref:#ERC6909ContentURI-tokenURI-uint256-[`++tokenURI++`]]
:_setContractURI: pass:normal[xref:#ERC6909ContentURI-_setContractURI-string-[`++_setContractURI++`]]
:_setTokenURI: pass:normal[xref:#ERC6909ContentURI-_setTokenURI-uint256-string-[`++_setTokenURI++`]]
:contractURI-: pass:normal[xref:#ERC6909ContentURI-contractURI--[`++contractURI++`]]
:tokenURI-uint256: pass:normal[xref:#ERC6909ContentURI-tokenURI-uint256-[`++tokenURI++`]]
:_setContractURI-string: pass:normal[xref:#ERC6909ContentURI-_setContractURI-string-[`++_setContractURI++`]]
:_setTokenURI-uint256-string: pass:normal[xref:#ERC6909ContentURI-_setTokenURI-uint256-string-[`++_setTokenURI++`]]
[.contract]
[[ERC6909ContentURI]]
=== `++ERC6909ContentURI++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.3.0/contracts/token/ERC6909/extensions/draft-ERC6909ContentURI.sol[{github-icon},role=heading-link]
[.hljs-theme-light.nopadding]
```solidity
import "@openzeppelin/contracts/token/ERC6909/extensions/draft-ERC6909ContentURI.sol";
```
Implementation of the Content URI extension defined in ERC6909.
[.contract-index]
.Functions
--
* {xref-ERC6909ContentURI-contractURI--}[`++contractURI()++`]
* {xref-ERC6909ContentURI-tokenURI-uint256-}[`++tokenURI(id)++`]
* {xref-ERC6909ContentURI-_setContractURI-string-}[`++_setContractURI(newContractURI)++`]
* {xref-ERC6909ContentURI-_setTokenURI-uint256-string-}[`++_setTokenURI(id, newTokenURI)++`]
[.contract-subindex-inherited]
.IERC6909ContentURI
[.contract-subindex-inherited]
.ERC6909
* {xref-ERC6909-supportsInterface-bytes4-}[`++supportsInterface(interfaceId)++`]
* {xref-ERC6909-balanceOf-address-uint256-}[`++balanceOf(owner, id)++`]
* {xref-ERC6909-allowance-address-address-uint256-}[`++allowance(owner, spender, id)++`]
* {xref-ERC6909-isOperator-address-address-}[`++isOperator(owner, spender)++`]
* {xref-ERC6909-approve-address-uint256-uint256-}[`++approve(spender, id, amount)++`]
* {xref-ERC6909-setOperator-address-bool-}[`++setOperator(spender, approved)++`]
* {xref-ERC6909-transfer-address-uint256-uint256-}[`++transfer(receiver, id, amount)++`]
* {xref-ERC6909-transferFrom-address-address-uint256-uint256-}[`++transferFrom(sender, receiver, id, amount)++`]
* {xref-ERC6909-_mint-address-uint256-uint256-}[`++_mint(to, id, amount)++`]
* {xref-ERC6909-_transfer-address-address-uint256-uint256-}[`++_transfer(from, to, id, amount)++`]
* {xref-ERC6909-_burn-address-uint256-uint256-}[`++_burn(from, id, amount)++`]
* {xref-ERC6909-_update-address-address-uint256-uint256-}[`++_update(from, to, id, amount)++`]
* {xref-ERC6909-_approve-address-address-uint256-uint256-}[`++_approve(owner, spender, id, amount)++`]
* {xref-ERC6909-_setOperator-address-address-bool-}[`++_setOperator(owner, spender, approved)++`]
* {xref-ERC6909-_spendAllowance-address-address-uint256-uint256-}[`++_spendAllowance(owner, spender, id, amount)++`]
[.contract-subindex-inherited]
.IERC6909
[.contract-subindex-inherited]
.ERC165
[.contract-subindex-inherited]
.IERC165
--
[.contract-index]
.Events
--
* {xref-ERC6909ContentURI-ContractURIUpdated--}[`++ContractURIUpdated()++`]
* {xref-ERC6909ContentURI-URI-string-uint256-}[`++URI(value, id)++`]
[.contract-subindex-inherited]
.IERC6909ContentURI
[.contract-subindex-inherited]
.ERC6909
[.contract-subindex-inherited]
.IERC6909
* {xref-IERC6909-Approval-address-address-uint256-uint256-}[`++Approval(owner, spender, id, amount)++`]
* {xref-IERC6909-OperatorSet-address-address-bool-}[`++OperatorSet(owner, spender, approved)++`]
* {xref-IERC6909-Transfer-address-address-address-uint256-uint256-}[`++Transfer(caller, sender, receiver, id, amount)++`]
[.contract-subindex-inherited]
.ERC165
[.contract-subindex-inherited]
.IERC165
--
[.contract-index]
.Errors
--
[.contract-subindex-inherited]
.IERC6909ContentURI
[.contract-subindex-inherited]
.ERC6909
* {xref-ERC6909-ERC6909InsufficientBalance-address-uint256-uint256-uint256-}[`++ERC6909InsufficientBalance(sender, balance, needed, id)++`]
* {xref-ERC6909-ERC6909InsufficientAllowance-address-uint256-uint256-uint256-}[`++ERC6909InsufficientAllowance(spender, allowance, needed, id)++`]
* {xref-ERC6909-ERC6909InvalidApprover-address-}[`++ERC6909InvalidApprover(approver)++`]
* {xref-ERC6909-ERC6909InvalidReceiver-address-}[`++ERC6909InvalidReceiver(receiver)++`]
* {xref-ERC6909-ERC6909InvalidSender-address-}[`++ERC6909InvalidSender(sender)++`]
* {xref-ERC6909-ERC6909InvalidSpender-address-}[`++ERC6909InvalidSpender(spender)++`]
[.contract-subindex-inherited]
.IERC6909
[.contract-subindex-inherited]
.ERC165
[.contract-subindex-inherited]
.IERC165
--
[.contract-item]
[[ERC6909ContentURI-contractURI--]]
==== `[.contract-item-name]#++contractURI++#++() → string++` [.item-kind]#public#
Returns URI for the contract.
[.contract-item]
[[ERC6909ContentURI-tokenURI-uint256-]]
==== `[.contract-item-name]#++tokenURI++#++(uint256 id) → string++` [.item-kind]#public#
Returns the URI for the token of type `id`.
[.contract-item]
[[ERC6909ContentURI-_setContractURI-string-]]
==== `[.contract-item-name]#++_setContractURI++#++(string newContractURI)++` [.item-kind]#internal#
Sets the {contractURI} for the contract.
Emits a {ContractURIUpdated} event.
[.contract-item]
[[ERC6909ContentURI-_setTokenURI-uint256-string-]]
==== `[.contract-item-name]#++_setTokenURI++#++(uint256 id, string newTokenURI)++` [.item-kind]#internal#
Sets the {tokenURI} for a given token of type `id`.
Emits a {URI} event.
[.contract-item]
[[ERC6909ContentURI-ContractURIUpdated--]]
==== `[.contract-item-name]#++ContractURIUpdated++#++()++` [.item-kind]#event#
Event emitted when the contract URI is changed. See https://eips.ethereum.org/EIPS/eip-7572[ERC-7572] for details.
[.contract-item]
[[ERC6909ContentURI-URI-string-uint256-]]
==== `[.contract-item-name]#++URI++#++(string value, uint256 indexed id)++` [.item-kind]#event#
See {IERC1155-URI}
:TokenMetadata: pass:normal[xref:#ERC6909Metadata-TokenMetadata[`++TokenMetadata++`]]
:ERC6909NameUpdated: pass:normal[xref:#ERC6909Metadata-ERC6909NameUpdated-uint256-string-[`++ERC6909NameUpdated++`]]
:ERC6909SymbolUpdated: pass:normal[xref:#ERC6909Metadata-ERC6909SymbolUpdated-uint256-string-[`++ERC6909SymbolUpdated++`]]
:ERC6909DecimalsUpdated: pass:normal[xref:#ERC6909Metadata-ERC6909DecimalsUpdated-uint256-uint8-[`++ERC6909DecimalsUpdated++`]]
:name: pass:normal[xref:#ERC6909Metadata-name-uint256-[`++name++`]]
:symbol: pass:normal[xref:#ERC6909Metadata-symbol-uint256-[`++symbol++`]]
:decimals: pass:normal[xref:#ERC6909Metadata-decimals-uint256-[`++decimals++`]]
:_setName: pass:normal[xref:#ERC6909Metadata-_setName-uint256-string-[`++_setName++`]]
:_setSymbol: pass:normal[xref:#ERC6909Metadata-_setSymbol-uint256-string-[`++_setSymbol++`]]
:_setDecimals: pass:normal[xref:#ERC6909Metadata-_setDecimals-uint256-uint8-[`++_setDecimals++`]]
:name-uint256: pass:normal[xref:#ERC6909Metadata-name-uint256-[`++name++`]]
:symbol-uint256: pass:normal[xref:#ERC6909Metadata-symbol-uint256-[`++symbol++`]]
:decimals-uint256: pass:normal[xref:#ERC6909Metadata-decimals-uint256-[`++decimals++`]]
:_setName-uint256-string: pass:normal[xref:#ERC6909Metadata-_setName-uint256-string-[`++_setName++`]]
:_setSymbol-uint256-string: pass:normal[xref:#ERC6909Metadata-_setSymbol-uint256-string-[`++_setSymbol++`]]
:_setDecimals-uint256-uint8: pass:normal[xref:#ERC6909Metadata-_setDecimals-uint256-uint8-[`++_setDecimals++`]]
[.contract]
[[ERC6909Metadata]]
=== `++ERC6909Metadata++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.3.0/contracts/token/ERC6909/extensions/draft-ERC6909Metadata.sol[{github-icon},role=heading-link]
[.hljs-theme-light.nopadding]
```solidity
import "@openzeppelin/contracts/token/ERC6909/extensions/draft-ERC6909Metadata.sol";
```
Implementation of the Metadata extension defined in ERC6909. Exposes the name, symbol, and decimals of each token id.
[.contract-index]
.Functions
--
* {xref-ERC6909Metadata-name-uint256-}[`++name(id)++`]
* {xref-ERC6909Metadata-symbol-uint256-}[`++symbol(id)++`]
* {xref-ERC6909Metadata-decimals-uint256-}[`++decimals(id)++`]
* {xref-ERC6909Metadata-_setName-uint256-string-}[`++_setName(id, newName)++`]
* {xref-ERC6909Metadata-_setSymbol-uint256-string-}[`++_setSymbol(id, newSymbol)++`]
* {xref-ERC6909Metadata-_setDecimals-uint256-uint8-}[`++_setDecimals(id, newDecimals)++`]
[.contract-subindex-inherited]
.IERC6909Metadata
[.contract-subindex-inherited]
.ERC6909
* {xref-ERC6909-supportsInterface-bytes4-}[`++supportsInterface(interfaceId)++`]
* {xref-ERC6909-balanceOf-address-uint256-}[`++balanceOf(owner, id)++`]
* {xref-ERC6909-allowance-address-address-uint256-}[`++allowance(owner, spender, id)++`]
* {xref-ERC6909-isOperator-address-address-}[`++isOperator(owner, spender)++`]
* {xref-ERC6909-approve-address-uint256-uint256-}[`++approve(spender, id, amount)++`]
* {xref-ERC6909-setOperator-address-bool-}[`++setOperator(spender, approved)++`]
* {xref-ERC6909-transfer-address-uint256-uint256-}[`++transfer(receiver, id, amount)++`]
* {xref-ERC6909-transferFrom-address-address-uint256-uint256-}[`++transferFrom(sender, receiver, id, amount)++`]
* {xref-ERC6909-_mint-address-uint256-uint256-}[`++_mint(to, id, amount)++`]
* {xref-ERC6909-_transfer-address-address-uint256-uint256-}[`++_transfer(from, to, id, amount)++`]
* {xref-ERC6909-_burn-address-uint256-uint256-}[`++_burn(from, id, amount)++`]
* {xref-ERC6909-_update-address-address-uint256-uint256-}[`++_update(from, to, id, amount)++`]
* {xref-ERC6909-_approve-address-address-uint256-uint256-}[`++_approve(owner, spender, id, amount)++`]
* {xref-ERC6909-_setOperator-address-address-bool-}[`++_setOperator(owner, spender, approved)++`]
* {xref-ERC6909-_spendAllowance-address-address-uint256-uint256-}[`++_spendAllowance(owner, spender, id, amount)++`]
[.contract-subindex-inherited]
.IERC6909
[.contract-subindex-inherited]
.ERC165
[.contract-subindex-inherited]
.IERC165
--
[.contract-index]
.Events
--
* {xref-ERC6909Metadata-ERC6909NameUpdated-uint256-string-}[`++ERC6909NameUpdated(id, newName)++`]
* {xref-ERC6909Metadata-ERC6909SymbolUpdated-uint256-string-}[`++ERC6909SymbolUpdated(id, newSymbol)++`]
* {xref-ERC6909Metadata-ERC6909DecimalsUpdated-uint256-uint8-}[`++ERC6909DecimalsUpdated(id, newDecimals)++`]
[.contract-subindex-inherited]
.IERC6909Metadata
[.contract-subindex-inherited]
.ERC6909
[.contract-subindex-inherited]
.IERC6909
* {xref-IERC6909-Approval-address-address-uint256-uint256-}[`++Approval(owner, spender, id, amount)++`]
* {xref-IERC6909-OperatorSet-address-address-bool-}[`++OperatorSet(owner, spender, approved)++`]
* {xref-IERC6909-Transfer-address-address-address-uint256-uint256-}[`++Transfer(caller, sender, receiver, id, amount)++`]
[.contract-subindex-inherited]
.ERC165
[.contract-subindex-inherited]
.IERC165
--
[.contract-index]
.Errors
--
[.contract-subindex-inherited]
.IERC6909Metadata
[.contract-subindex-inherited]
.ERC6909
* {xref-ERC6909-ERC6909InsufficientBalance-address-uint256-uint256-uint256-}[`++ERC6909InsufficientBalance(sender, balance, needed, id)++`]
* {xref-ERC6909-ERC6909InsufficientAllowance-address-uint256-uint256-uint256-}[`++ERC6909InsufficientAllowance(spender, allowance, needed, id)++`]
* {xref-ERC6909-ERC6909InvalidApprover-address-}[`++ERC6909InvalidApprover(approver)++`]
* {xref-ERC6909-ERC6909InvalidReceiver-address-}[`++ERC6909InvalidReceiver(receiver)++`]
* {xref-ERC6909-ERC6909InvalidSender-address-}[`++ERC6909InvalidSender(sender)++`]
* {xref-ERC6909-ERC6909InvalidSpender-address-}[`++ERC6909InvalidSpender(spender)++`]
[.contract-subindex-inherited]
.IERC6909
[.contract-subindex-inherited]
.ERC165
[.contract-subindex-inherited]
.IERC165
--
[.contract-item]
[[ERC6909Metadata-name-uint256-]]
==== `[.contract-item-name]#++name++#++(uint256 id) → string++` [.item-kind]#public#
Returns the name of the token of type `id`.
[.contract-item]
[[ERC6909Metadata-symbol-uint256-]]
==== `[.contract-item-name]#++symbol++#++(uint256 id) → string++` [.item-kind]#public#
Returns the ticker symbol of the token of type `id`.
[.contract-item]
[[ERC6909Metadata-decimals-uint256-]]
==== `[.contract-item-name]#++decimals++#++(uint256 id) → uint8++` [.item-kind]#public#
Returns the number of decimals for the token of type `id`.
[.contract-item]
[[ERC6909Metadata-_setName-uint256-string-]]
==== `[.contract-item-name]#++_setName++#++(uint256 id, string newName)++` [.item-kind]#internal#
Sets the `name` for a given token of type `id`.
Emits an {ERC6909NameUpdated} event.
[.contract-item]
[[ERC6909Metadata-_setSymbol-uint256-string-]]
==== `[.contract-item-name]#++_setSymbol++#++(uint256 id, string newSymbol)++` [.item-kind]#internal#
Sets the `symbol` for a given token of type `id`.
Emits an {ERC6909SymbolUpdated} event.
[.contract-item]
[[ERC6909Metadata-_setDecimals-uint256-uint8-]]
==== `[.contract-item-name]#++_setDecimals++#++(uint256 id, uint8 newDecimals)++` [.item-kind]#internal#
Sets the `decimals` for a given token of type `id`.
Emits an {ERC6909DecimalsUpdated} event.
[.contract-item]
[[ERC6909Metadata-ERC6909NameUpdated-uint256-string-]]
==== `[.contract-item-name]#++ERC6909NameUpdated++#++(uint256 indexed id, string newName)++` [.item-kind]#event#
The name of the token of type `id` was updated to `newName`.
[.contract-item]
[[ERC6909Metadata-ERC6909SymbolUpdated-uint256-string-]]
==== `[.contract-item-name]#++ERC6909SymbolUpdated++#++(uint256 indexed id, string newSymbol)++` [.item-kind]#event#
The symbol for the token of type `id` was updated to `newSymbol`.
[.contract-item]
[[ERC6909Metadata-ERC6909DecimalsUpdated-uint256-uint8-]]
==== `[.contract-item-name]#++ERC6909DecimalsUpdated++#++(uint256 indexed id, uint8 newDecimals)++` [.item-kind]#event#
The decimals value for token of type `id` was updated to `newDecimals`.
:totalSupply: pass:normal[xref:#ERC6909TokenSupply-totalSupply-uint256-[`++totalSupply++`]]
:_update: pass:normal[xref:#ERC6909TokenSupply-_update-address-address-uint256-uint256-[`++_update++`]]
:totalSupply-uint256: pass:normal[xref:#ERC6909TokenSupply-totalSupply-uint256-[`++totalSupply++`]]
:_update-address-address-uint256-uint256: pass:normal[xref:#ERC6909TokenSupply-_update-address-address-uint256-uint256-[`++_update++`]]
[.contract]
[[ERC6909TokenSupply]]
=== `++ERC6909TokenSupply++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.3.0/contracts/token/ERC6909/extensions/draft-ERC6909TokenSupply.sol[{github-icon},role=heading-link]
[.hljs-theme-light.nopadding]
```solidity
import "@openzeppelin/contracts/token/ERC6909/extensions/draft-ERC6909TokenSupply.sol";
```
Implementation of the Token Supply extension defined in ERC6909.
Tracks the total supply of each token id individually.
[.contract-index]
.Functions
--
* {xref-ERC6909TokenSupply-totalSupply-uint256-}[`++totalSupply(id)++`]
* {xref-ERC6909TokenSupply-_update-address-address-uint256-uint256-}[`++_update(from, to, id, amount)++`]
[.contract-subindex-inherited]
.IERC6909TokenSupply
[.contract-subindex-inherited]
.ERC6909
* {xref-ERC6909-supportsInterface-bytes4-}[`++supportsInterface(interfaceId)++`]
* {xref-ERC6909-balanceOf-address-uint256-}[`++balanceOf(owner, id)++`]
* {xref-ERC6909-allowance-address-address-uint256-}[`++allowance(owner, spender, id)++`]
* {xref-ERC6909-isOperator-address-address-}[`++isOperator(owner, spender)++`]
* {xref-ERC6909-approve-address-uint256-uint256-}[`++approve(spender, id, amount)++`]
* {xref-ERC6909-setOperator-address-bool-}[`++setOperator(spender, approved)++`]
* {xref-ERC6909-transfer-address-uint256-uint256-}[`++transfer(receiver, id, amount)++`]
* {xref-ERC6909-transferFrom-address-address-uint256-uint256-}[`++transferFrom(sender, receiver, id, amount)++`]
* {xref-ERC6909-_mint-address-uint256-uint256-}[`++_mint(to, id, amount)++`]
* {xref-ERC6909-_transfer-address-address-uint256-uint256-}[`++_transfer(from, to, id, amount)++`]
* {xref-ERC6909-_burn-address-uint256-uint256-}[`++_burn(from, id, amount)++`]
* {xref-ERC6909-_approve-address-address-uint256-uint256-}[`++_approve(owner, spender, id, amount)++`]
* {xref-ERC6909-_setOperator-address-address-bool-}[`++_setOperator(owner, spender, approved)++`]
* {xref-ERC6909-_spendAllowance-address-address-uint256-uint256-}[`++_spendAllowance(owner, spender, id, amount)++`]
[.contract-subindex-inherited]
.IERC6909
[.contract-subindex-inherited]
.ERC165
[.contract-subindex-inherited]
.IERC165
--
[.contract-index]
.Events
--
[.contract-subindex-inherited]
.IERC6909TokenSupply
[.contract-subindex-inherited]
.ERC6909
[.contract-subindex-inherited]
.IERC6909
* {xref-IERC6909-Approval-address-address-uint256-uint256-}[`++Approval(owner, spender, id, amount)++`]
* {xref-IERC6909-OperatorSet-address-address-bool-}[`++OperatorSet(owner, spender, approved)++`]
* {xref-IERC6909-Transfer-address-address-address-uint256-uint256-}[`++Transfer(caller, sender, receiver, id, amount)++`]
[.contract-subindex-inherited]
.ERC165
[.contract-subindex-inherited]
.IERC165
--
[.contract-index]
.Errors
--
[.contract-subindex-inherited]
.IERC6909TokenSupply
[.contract-subindex-inherited]
.ERC6909
* {xref-ERC6909-ERC6909InsufficientBalance-address-uint256-uint256-uint256-}[`++ERC6909InsufficientBalance(sender, balance, needed, id)++`]
* {xref-ERC6909-ERC6909InsufficientAllowance-address-uint256-uint256-uint256-}[`++ERC6909InsufficientAllowance(spender, allowance, needed, id)++`]
* {xref-ERC6909-ERC6909InvalidApprover-address-}[`++ERC6909InvalidApprover(approver)++`]
* {xref-ERC6909-ERC6909InvalidReceiver-address-}[`++ERC6909InvalidReceiver(receiver)++`]
* {xref-ERC6909-ERC6909InvalidSender-address-}[`++ERC6909InvalidSender(sender)++`]
* {xref-ERC6909-ERC6909InvalidSpender-address-}[`++ERC6909InvalidSpender(spender)++`]
[.contract-subindex-inherited]
.IERC6909
[.contract-subindex-inherited]
.ERC165
[.contract-subindex-inherited]
.IERC165
--
[.contract-item]
[[ERC6909TokenSupply-totalSupply-uint256-]]
==== `[.contract-item-name]#++totalSupply++#++(uint256 id) → uint256++` [.item-kind]#public#
Returns the total supply of the token of type `id`.
[.contract-item]
[[ERC6909TokenSupply-_update-address-address-uint256-uint256-]]
==== `[.contract-item-name]#++_update++#++(address from, address to, uint256 id, uint256 amount)++` [.item-kind]#internal#
Override the `_update` function to update the total supply of each token id as necessary.