:github-icon: pass:[] :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.4.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.4.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.4.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.4.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.