ERC6909.adoc 46 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891
  1. :github-icon: pass:[<svg class="icon"><use href="#github-icon"/></svg>]
  2. :IERC6909: pass:normal[xref:interfaces.adoc#IERC6909[`IERC6909`]]
  3. :IERC6909ContentURI: pass:normal[xref:interfaces.adoc#IERC6909ContentURI[`IERC6909ContentURI`]]
  4. :IERC6909Metadata: pass:normal[xref:interfaces.adoc#IERC6909Metadata[`IERC6909Metadata`]]
  5. :IERC6909TokenSupply: pass:normal[xref:interfaces.adoc#IERC6909TokenSupply[`IERC6909TokenSupply`]]
  6. :xref-ERC6909-supportsInterface-bytes4-: xref:token/ERC6909.adoc#ERC6909-supportsInterface-bytes4-
  7. :xref-ERC6909-balanceOf-address-uint256-: xref:token/ERC6909.adoc#ERC6909-balanceOf-address-uint256-
  8. :xref-ERC6909-allowance-address-address-uint256-: xref:token/ERC6909.adoc#ERC6909-allowance-address-address-uint256-
  9. :xref-ERC6909-isOperator-address-address-: xref:token/ERC6909.adoc#ERC6909-isOperator-address-address-
  10. :xref-ERC6909-approve-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-approve-address-uint256-uint256-
  11. :xref-ERC6909-setOperator-address-bool-: xref:token/ERC6909.adoc#ERC6909-setOperator-address-bool-
  12. :xref-ERC6909-transfer-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-transfer-address-uint256-uint256-
  13. :xref-ERC6909-transferFrom-address-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-transferFrom-address-address-uint256-uint256-
  14. :xref-ERC6909-_mint-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-_mint-address-uint256-uint256-
  15. :xref-ERC6909-_transfer-address-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-_transfer-address-address-uint256-uint256-
  16. :xref-ERC6909-_burn-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-_burn-address-uint256-uint256-
  17. :xref-ERC6909-_update-address-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-_update-address-address-uint256-uint256-
  18. :xref-ERC6909-_approve-address-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-_approve-address-address-uint256-uint256-
  19. :xref-ERC6909-_setOperator-address-address-bool-: xref:token/ERC6909.adoc#ERC6909-_setOperator-address-address-bool-
  20. :xref-ERC6909-_spendAllowance-address-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-_spendAllowance-address-address-uint256-uint256-
  21. :xref-IERC6909-Approval-address-address-uint256-uint256-: xref:interfaces.adoc#IERC6909-Approval-address-address-uint256-uint256-
  22. :xref-IERC6909-OperatorSet-address-address-bool-: xref:interfaces.adoc#IERC6909-OperatorSet-address-address-bool-
  23. :xref-IERC6909-Transfer-address-address-address-uint256-uint256-: xref:interfaces.adoc#IERC6909-Transfer-address-address-address-uint256-uint256-
  24. :xref-ERC6909-ERC6909InsufficientBalance-address-uint256-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-ERC6909InsufficientBalance-address-uint256-uint256-uint256-
  25. :xref-ERC6909-ERC6909InsufficientAllowance-address-uint256-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-ERC6909InsufficientAllowance-address-uint256-uint256-uint256-
  26. :xref-ERC6909-ERC6909InvalidApprover-address-: xref:token/ERC6909.adoc#ERC6909-ERC6909InvalidApprover-address-
  27. :xref-ERC6909-ERC6909InvalidReceiver-address-: xref:token/ERC6909.adoc#ERC6909-ERC6909InvalidReceiver-address-
  28. :xref-ERC6909-ERC6909InvalidSender-address-: xref:token/ERC6909.adoc#ERC6909-ERC6909InvalidSender-address-
  29. :xref-ERC6909-ERC6909InvalidSpender-address-: xref:token/ERC6909.adoc#ERC6909-ERC6909InvalidSpender-address-
  30. :xref-ERC6909ContentURI-contractURI--: xref:token/ERC6909.adoc#ERC6909ContentURI-contractURI--
  31. :xref-ERC6909ContentURI-tokenURI-uint256-: xref:token/ERC6909.adoc#ERC6909ContentURI-tokenURI-uint256-
  32. :xref-ERC6909ContentURI-_setContractURI-string-: xref:token/ERC6909.adoc#ERC6909ContentURI-_setContractURI-string-
  33. :xref-ERC6909ContentURI-_setTokenURI-uint256-string-: xref:token/ERC6909.adoc#ERC6909ContentURI-_setTokenURI-uint256-string-
  34. :xref-ERC6909-supportsInterface-bytes4-: xref:token/ERC6909.adoc#ERC6909-supportsInterface-bytes4-
  35. :xref-ERC6909-balanceOf-address-uint256-: xref:token/ERC6909.adoc#ERC6909-balanceOf-address-uint256-
  36. :xref-ERC6909-allowance-address-address-uint256-: xref:token/ERC6909.adoc#ERC6909-allowance-address-address-uint256-
  37. :xref-ERC6909-isOperator-address-address-: xref:token/ERC6909.adoc#ERC6909-isOperator-address-address-
  38. :xref-ERC6909-approve-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-approve-address-uint256-uint256-
  39. :xref-ERC6909-setOperator-address-bool-: xref:token/ERC6909.adoc#ERC6909-setOperator-address-bool-
  40. :xref-ERC6909-transfer-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-transfer-address-uint256-uint256-
  41. :xref-ERC6909-transferFrom-address-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-transferFrom-address-address-uint256-uint256-
  42. :xref-ERC6909-_mint-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-_mint-address-uint256-uint256-
  43. :xref-ERC6909-_transfer-address-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-_transfer-address-address-uint256-uint256-
  44. :xref-ERC6909-_burn-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-_burn-address-uint256-uint256-
  45. :xref-ERC6909-_update-address-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-_update-address-address-uint256-uint256-
  46. :xref-ERC6909-_approve-address-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-_approve-address-address-uint256-uint256-
  47. :xref-ERC6909-_setOperator-address-address-bool-: xref:token/ERC6909.adoc#ERC6909-_setOperator-address-address-bool-
  48. :xref-ERC6909-_spendAllowance-address-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-_spendAllowance-address-address-uint256-uint256-
  49. :xref-ERC6909ContentURI-ContractURIUpdated--: xref:token/ERC6909.adoc#ERC6909ContentURI-ContractURIUpdated--
  50. :xref-ERC6909ContentURI-URI-string-uint256-: xref:token/ERC6909.adoc#ERC6909ContentURI-URI-string-uint256-
  51. :xref-IERC6909-Approval-address-address-uint256-uint256-: xref:interfaces.adoc#IERC6909-Approval-address-address-uint256-uint256-
  52. :xref-IERC6909-OperatorSet-address-address-bool-: xref:interfaces.adoc#IERC6909-OperatorSet-address-address-bool-
  53. :xref-IERC6909-Transfer-address-address-address-uint256-uint256-: xref:interfaces.adoc#IERC6909-Transfer-address-address-address-uint256-uint256-
  54. :xref-ERC6909-ERC6909InsufficientBalance-address-uint256-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-ERC6909InsufficientBalance-address-uint256-uint256-uint256-
  55. :xref-ERC6909-ERC6909InsufficientAllowance-address-uint256-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-ERC6909InsufficientAllowance-address-uint256-uint256-uint256-
  56. :xref-ERC6909-ERC6909InvalidApprover-address-: xref:token/ERC6909.adoc#ERC6909-ERC6909InvalidApprover-address-
  57. :xref-ERC6909-ERC6909InvalidReceiver-address-: xref:token/ERC6909.adoc#ERC6909-ERC6909InvalidReceiver-address-
  58. :xref-ERC6909-ERC6909InvalidSender-address-: xref:token/ERC6909.adoc#ERC6909-ERC6909InvalidSender-address-
  59. :xref-ERC6909-ERC6909InvalidSpender-address-: xref:token/ERC6909.adoc#ERC6909-ERC6909InvalidSpender-address-
  60. :IERC1155-URI: pass:normal[xref:token/ERC1155.adoc#IERC1155-URI-string-uint256-[`IERC1155.URI`]]
  61. :xref-ERC6909Metadata-name-uint256-: xref:token/ERC6909.adoc#ERC6909Metadata-name-uint256-
  62. :xref-ERC6909Metadata-symbol-uint256-: xref:token/ERC6909.adoc#ERC6909Metadata-symbol-uint256-
  63. :xref-ERC6909Metadata-decimals-uint256-: xref:token/ERC6909.adoc#ERC6909Metadata-decimals-uint256-
  64. :xref-ERC6909Metadata-_setName-uint256-string-: xref:token/ERC6909.adoc#ERC6909Metadata-_setName-uint256-string-
  65. :xref-ERC6909Metadata-_setSymbol-uint256-string-: xref:token/ERC6909.adoc#ERC6909Metadata-_setSymbol-uint256-string-
  66. :xref-ERC6909Metadata-_setDecimals-uint256-uint8-: xref:token/ERC6909.adoc#ERC6909Metadata-_setDecimals-uint256-uint8-
  67. :xref-ERC6909-supportsInterface-bytes4-: xref:token/ERC6909.adoc#ERC6909-supportsInterface-bytes4-
  68. :xref-ERC6909-balanceOf-address-uint256-: xref:token/ERC6909.adoc#ERC6909-balanceOf-address-uint256-
  69. :xref-ERC6909-allowance-address-address-uint256-: xref:token/ERC6909.adoc#ERC6909-allowance-address-address-uint256-
  70. :xref-ERC6909-isOperator-address-address-: xref:token/ERC6909.adoc#ERC6909-isOperator-address-address-
  71. :xref-ERC6909-approve-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-approve-address-uint256-uint256-
  72. :xref-ERC6909-setOperator-address-bool-: xref:token/ERC6909.adoc#ERC6909-setOperator-address-bool-
  73. :xref-ERC6909-transfer-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-transfer-address-uint256-uint256-
  74. :xref-ERC6909-transferFrom-address-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-transferFrom-address-address-uint256-uint256-
  75. :xref-ERC6909-_mint-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-_mint-address-uint256-uint256-
  76. :xref-ERC6909-_transfer-address-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-_transfer-address-address-uint256-uint256-
  77. :xref-ERC6909-_burn-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-_burn-address-uint256-uint256-
  78. :xref-ERC6909-_update-address-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-_update-address-address-uint256-uint256-
  79. :xref-ERC6909-_approve-address-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-_approve-address-address-uint256-uint256-
  80. :xref-ERC6909-_setOperator-address-address-bool-: xref:token/ERC6909.adoc#ERC6909-_setOperator-address-address-bool-
  81. :xref-ERC6909-_spendAllowance-address-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-_spendAllowance-address-address-uint256-uint256-
  82. :xref-ERC6909Metadata-ERC6909NameUpdated-uint256-string-: xref:token/ERC6909.adoc#ERC6909Metadata-ERC6909NameUpdated-uint256-string-
  83. :xref-ERC6909Metadata-ERC6909SymbolUpdated-uint256-string-: xref:token/ERC6909.adoc#ERC6909Metadata-ERC6909SymbolUpdated-uint256-string-
  84. :xref-ERC6909Metadata-ERC6909DecimalsUpdated-uint256-uint8-: xref:token/ERC6909.adoc#ERC6909Metadata-ERC6909DecimalsUpdated-uint256-uint8-
  85. :xref-IERC6909-Approval-address-address-uint256-uint256-: xref:interfaces.adoc#IERC6909-Approval-address-address-uint256-uint256-
  86. :xref-IERC6909-OperatorSet-address-address-bool-: xref:interfaces.adoc#IERC6909-OperatorSet-address-address-bool-
  87. :xref-IERC6909-Transfer-address-address-address-uint256-uint256-: xref:interfaces.adoc#IERC6909-Transfer-address-address-address-uint256-uint256-
  88. :xref-ERC6909-ERC6909InsufficientBalance-address-uint256-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-ERC6909InsufficientBalance-address-uint256-uint256-uint256-
  89. :xref-ERC6909-ERC6909InsufficientAllowance-address-uint256-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-ERC6909InsufficientAllowance-address-uint256-uint256-uint256-
  90. :xref-ERC6909-ERC6909InvalidApprover-address-: xref:token/ERC6909.adoc#ERC6909-ERC6909InvalidApprover-address-
  91. :xref-ERC6909-ERC6909InvalidReceiver-address-: xref:token/ERC6909.adoc#ERC6909-ERC6909InvalidReceiver-address-
  92. :xref-ERC6909-ERC6909InvalidSender-address-: xref:token/ERC6909.adoc#ERC6909-ERC6909InvalidSender-address-
  93. :xref-ERC6909-ERC6909InvalidSpender-address-: xref:token/ERC6909.adoc#ERC6909-ERC6909InvalidSpender-address-
  94. :xref-ERC6909TokenSupply-totalSupply-uint256-: xref:token/ERC6909.adoc#ERC6909TokenSupply-totalSupply-uint256-
  95. :xref-ERC6909TokenSupply-_update-address-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909TokenSupply-_update-address-address-uint256-uint256-
  96. :xref-ERC6909-supportsInterface-bytes4-: xref:token/ERC6909.adoc#ERC6909-supportsInterface-bytes4-
  97. :xref-ERC6909-balanceOf-address-uint256-: xref:token/ERC6909.adoc#ERC6909-balanceOf-address-uint256-
  98. :xref-ERC6909-allowance-address-address-uint256-: xref:token/ERC6909.adoc#ERC6909-allowance-address-address-uint256-
  99. :xref-ERC6909-isOperator-address-address-: xref:token/ERC6909.adoc#ERC6909-isOperator-address-address-
  100. :xref-ERC6909-approve-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-approve-address-uint256-uint256-
  101. :xref-ERC6909-setOperator-address-bool-: xref:token/ERC6909.adoc#ERC6909-setOperator-address-bool-
  102. :xref-ERC6909-transfer-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-transfer-address-uint256-uint256-
  103. :xref-ERC6909-transferFrom-address-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-transferFrom-address-address-uint256-uint256-
  104. :xref-ERC6909-_mint-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-_mint-address-uint256-uint256-
  105. :xref-ERC6909-_transfer-address-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-_transfer-address-address-uint256-uint256-
  106. :xref-ERC6909-_burn-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-_burn-address-uint256-uint256-
  107. :xref-ERC6909-_approve-address-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-_approve-address-address-uint256-uint256-
  108. :xref-ERC6909-_setOperator-address-address-bool-: xref:token/ERC6909.adoc#ERC6909-_setOperator-address-address-bool-
  109. :xref-ERC6909-_spendAllowance-address-address-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-_spendAllowance-address-address-uint256-uint256-
  110. :xref-IERC6909-Approval-address-address-uint256-uint256-: xref:interfaces.adoc#IERC6909-Approval-address-address-uint256-uint256-
  111. :xref-IERC6909-OperatorSet-address-address-bool-: xref:interfaces.adoc#IERC6909-OperatorSet-address-address-bool-
  112. :xref-IERC6909-Transfer-address-address-address-uint256-uint256-: xref:interfaces.adoc#IERC6909-Transfer-address-address-address-uint256-uint256-
  113. :xref-ERC6909-ERC6909InsufficientBalance-address-uint256-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-ERC6909InsufficientBalance-address-uint256-uint256-uint256-
  114. :xref-ERC6909-ERC6909InsufficientAllowance-address-uint256-uint256-uint256-: xref:token/ERC6909.adoc#ERC6909-ERC6909InsufficientAllowance-address-uint256-uint256-uint256-
  115. :xref-ERC6909-ERC6909InvalidApprover-address-: xref:token/ERC6909.adoc#ERC6909-ERC6909InvalidApprover-address-
  116. :xref-ERC6909-ERC6909InvalidReceiver-address-: xref:token/ERC6909.adoc#ERC6909-ERC6909InvalidReceiver-address-
  117. :xref-ERC6909-ERC6909InvalidSender-address-: xref:token/ERC6909.adoc#ERC6909-ERC6909InvalidSender-address-
  118. :xref-ERC6909-ERC6909InvalidSpender-address-: xref:token/ERC6909.adoc#ERC6909-ERC6909InvalidSpender-address-
  119. = ERC-6909
  120. [.readme-notice]
  121. NOTE: This document is better viewed at https://docs.openzeppelin.com/contracts/api/token/erc6909
  122. This set of interfaces and contracts are all related to the https://eips.ethereum.org/EIPS/eip-6909[ERC-6909 Minimal Multi-Token Interface].
  123. The ERC consists of four interfaces which fulfill different roles--the interfaces are as follows:
  124. . {IERC6909}: Base interface for a vanilla ERC6909 token.
  125. . {IERC6909ContentURI}: Extends the base interface and adds content URI (contract and token level) functionality.
  126. . {IERC6909Metadata}: Extends the base interface and adds metadata functionality, which exposes a name, symbol, and decimals for each token id.
  127. . {IERC6909TokenSupply}: Extends the base interface and adds total supply functionality for each token id.
  128. Implementations are provided for each of the 4 interfaces defined in the ERC.
  129. == Core
  130. :ERC6909InsufficientBalance: pass:normal[xref:#ERC6909-ERC6909InsufficientBalance-address-uint256-uint256-uint256-[`++ERC6909InsufficientBalance++`]]
  131. :ERC6909InsufficientAllowance: pass:normal[xref:#ERC6909-ERC6909InsufficientAllowance-address-uint256-uint256-uint256-[`++ERC6909InsufficientAllowance++`]]
  132. :ERC6909InvalidApprover: pass:normal[xref:#ERC6909-ERC6909InvalidApprover-address-[`++ERC6909InvalidApprover++`]]
  133. :ERC6909InvalidReceiver: pass:normal[xref:#ERC6909-ERC6909InvalidReceiver-address-[`++ERC6909InvalidReceiver++`]]
  134. :ERC6909InvalidSender: pass:normal[xref:#ERC6909-ERC6909InvalidSender-address-[`++ERC6909InvalidSender++`]]
  135. :ERC6909InvalidSpender: pass:normal[xref:#ERC6909-ERC6909InvalidSpender-address-[`++ERC6909InvalidSpender++`]]
  136. :supportsInterface: pass:normal[xref:#ERC6909-supportsInterface-bytes4-[`++supportsInterface++`]]
  137. :balanceOf: pass:normal[xref:#ERC6909-balanceOf-address-uint256-[`++balanceOf++`]]
  138. :allowance: pass:normal[xref:#ERC6909-allowance-address-address-uint256-[`++allowance++`]]
  139. :isOperator: pass:normal[xref:#ERC6909-isOperator-address-address-[`++isOperator++`]]
  140. :approve: pass:normal[xref:#ERC6909-approve-address-uint256-uint256-[`++approve++`]]
  141. :setOperator: pass:normal[xref:#ERC6909-setOperator-address-bool-[`++setOperator++`]]
  142. :transfer: pass:normal[xref:#ERC6909-transfer-address-uint256-uint256-[`++transfer++`]]
  143. :transferFrom: pass:normal[xref:#ERC6909-transferFrom-address-address-uint256-uint256-[`++transferFrom++`]]
  144. :_mint: pass:normal[xref:#ERC6909-_mint-address-uint256-uint256-[`++_mint++`]]
  145. :_transfer: pass:normal[xref:#ERC6909-_transfer-address-address-uint256-uint256-[`++_transfer++`]]
  146. :_burn: pass:normal[xref:#ERC6909-_burn-address-uint256-uint256-[`++_burn++`]]
  147. :_update: pass:normal[xref:#ERC6909-_update-address-address-uint256-uint256-[`++_update++`]]
  148. :_approve: pass:normal[xref:#ERC6909-_approve-address-address-uint256-uint256-[`++_approve++`]]
  149. :_setOperator: pass:normal[xref:#ERC6909-_setOperator-address-address-bool-[`++_setOperator++`]]
  150. :_spendAllowance: pass:normal[xref:#ERC6909-_spendAllowance-address-address-uint256-uint256-[`++_spendAllowance++`]]
  151. :supportsInterface-bytes4: pass:normal[xref:#ERC6909-supportsInterface-bytes4-[`++supportsInterface++`]]
  152. :balanceOf-address-uint256: pass:normal[xref:#ERC6909-balanceOf-address-uint256-[`++balanceOf++`]]
  153. :allowance-address-address-uint256: pass:normal[xref:#ERC6909-allowance-address-address-uint256-[`++allowance++`]]
  154. :isOperator-address-address: pass:normal[xref:#ERC6909-isOperator-address-address-[`++isOperator++`]]
  155. :approve-address-uint256-uint256: pass:normal[xref:#ERC6909-approve-address-uint256-uint256-[`++approve++`]]
  156. :setOperator-address-bool: pass:normal[xref:#ERC6909-setOperator-address-bool-[`++setOperator++`]]
  157. :transfer-address-uint256-uint256: pass:normal[xref:#ERC6909-transfer-address-uint256-uint256-[`++transfer++`]]
  158. :transferFrom-address-address-uint256-uint256: pass:normal[xref:#ERC6909-transferFrom-address-address-uint256-uint256-[`++transferFrom++`]]
  159. :_mint-address-uint256-uint256: pass:normal[xref:#ERC6909-_mint-address-uint256-uint256-[`++_mint++`]]
  160. :_transfer-address-address-uint256-uint256: pass:normal[xref:#ERC6909-_transfer-address-address-uint256-uint256-[`++_transfer++`]]
  161. :_burn-address-uint256-uint256: pass:normal[xref:#ERC6909-_burn-address-uint256-uint256-[`++_burn++`]]
  162. :_update-address-address-uint256-uint256: pass:normal[xref:#ERC6909-_update-address-address-uint256-uint256-[`++_update++`]]
  163. :_approve-address-address-uint256-uint256: pass:normal[xref:#ERC6909-_approve-address-address-uint256-uint256-[`++_approve++`]]
  164. :_setOperator-address-address-bool: pass:normal[xref:#ERC6909-_setOperator-address-address-bool-[`++_setOperator++`]]
  165. :_spendAllowance-address-address-uint256-uint256: pass:normal[xref:#ERC6909-_spendAllowance-address-address-uint256-uint256-[`++_spendAllowance++`]]
  166. [.contract]
  167. [[ERC6909]]
  168. === `++ERC6909++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.4.0/contracts/token/ERC6909/draft-ERC6909.sol[{github-icon},role=heading-link]
  169. [.hljs-theme-light.nopadding]
  170. ```solidity
  171. import "@openzeppelin/contracts/token/ERC6909/draft-ERC6909.sol";
  172. ```
  173. Implementation of ERC-6909.
  174. See https://eips.ethereum.org/EIPS/eip-6909
  175. [.contract-index]
  176. .Functions
  177. --
  178. * {xref-ERC6909-supportsInterface-bytes4-}[`++supportsInterface(interfaceId)++`]
  179. * {xref-ERC6909-balanceOf-address-uint256-}[`++balanceOf(owner, id)++`]
  180. * {xref-ERC6909-allowance-address-address-uint256-}[`++allowance(owner, spender, id)++`]
  181. * {xref-ERC6909-isOperator-address-address-}[`++isOperator(owner, spender)++`]
  182. * {xref-ERC6909-approve-address-uint256-uint256-}[`++approve(spender, id, amount)++`]
  183. * {xref-ERC6909-setOperator-address-bool-}[`++setOperator(spender, approved)++`]
  184. * {xref-ERC6909-transfer-address-uint256-uint256-}[`++transfer(receiver, id, amount)++`]
  185. * {xref-ERC6909-transferFrom-address-address-uint256-uint256-}[`++transferFrom(sender, receiver, id, amount)++`]
  186. * {xref-ERC6909-_mint-address-uint256-uint256-}[`++_mint(to, id, amount)++`]
  187. * {xref-ERC6909-_transfer-address-address-uint256-uint256-}[`++_transfer(from, to, id, amount)++`]
  188. * {xref-ERC6909-_burn-address-uint256-uint256-}[`++_burn(from, id, amount)++`]
  189. * {xref-ERC6909-_update-address-address-uint256-uint256-}[`++_update(from, to, id, amount)++`]
  190. * {xref-ERC6909-_approve-address-address-uint256-uint256-}[`++_approve(owner, spender, id, amount)++`]
  191. * {xref-ERC6909-_setOperator-address-address-bool-}[`++_setOperator(owner, spender, approved)++`]
  192. * {xref-ERC6909-_spendAllowance-address-address-uint256-uint256-}[`++_spendAllowance(owner, spender, id, amount)++`]
  193. [.contract-subindex-inherited]
  194. .IERC6909
  195. [.contract-subindex-inherited]
  196. .ERC165
  197. [.contract-subindex-inherited]
  198. .IERC165
  199. --
  200. [.contract-index]
  201. .Events
  202. --
  203. [.contract-subindex-inherited]
  204. .IERC6909
  205. * {xref-IERC6909-Approval-address-address-uint256-uint256-}[`++Approval(owner, spender, id, amount)++`]
  206. * {xref-IERC6909-OperatorSet-address-address-bool-}[`++OperatorSet(owner, spender, approved)++`]
  207. * {xref-IERC6909-Transfer-address-address-address-uint256-uint256-}[`++Transfer(caller, sender, receiver, id, amount)++`]
  208. [.contract-subindex-inherited]
  209. .ERC165
  210. [.contract-subindex-inherited]
  211. .IERC165
  212. --
  213. [.contract-index]
  214. .Errors
  215. --
  216. * {xref-ERC6909-ERC6909InsufficientBalance-address-uint256-uint256-uint256-}[`++ERC6909InsufficientBalance(sender, balance, needed, id)++`]
  217. * {xref-ERC6909-ERC6909InsufficientAllowance-address-uint256-uint256-uint256-}[`++ERC6909InsufficientAllowance(spender, allowance, needed, id)++`]
  218. * {xref-ERC6909-ERC6909InvalidApprover-address-}[`++ERC6909InvalidApprover(approver)++`]
  219. * {xref-ERC6909-ERC6909InvalidReceiver-address-}[`++ERC6909InvalidReceiver(receiver)++`]
  220. * {xref-ERC6909-ERC6909InvalidSender-address-}[`++ERC6909InvalidSender(sender)++`]
  221. * {xref-ERC6909-ERC6909InvalidSpender-address-}[`++ERC6909InvalidSpender(spender)++`]
  222. [.contract-subindex-inherited]
  223. .IERC6909
  224. [.contract-subindex-inherited]
  225. .ERC165
  226. [.contract-subindex-inherited]
  227. .IERC165
  228. --
  229. [.contract-item]
  230. [[ERC6909-supportsInterface-bytes4-]]
  231. ==== `[.contract-item-name]#++supportsInterface++#++(bytes4 interfaceId) → bool++` [.item-kind]#public#
  232. Returns true if this contract implements the interface defined by
  233. `interfaceId`. See the corresponding
  234. https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]
  235. to learn more about how these ids are created.
  236. This function call must use less than 30 000 gas.
  237. [.contract-item]
  238. [[ERC6909-balanceOf-address-uint256-]]
  239. ==== `[.contract-item-name]#++balanceOf++#++(address owner, uint256 id) → uint256++` [.item-kind]#public#
  240. Returns the amount of tokens of type `id` owned by `owner`.
  241. [.contract-item]
  242. [[ERC6909-allowance-address-address-uint256-]]
  243. ==== `[.contract-item-name]#++allowance++#++(address owner, address spender, uint256 id) → uint256++` [.item-kind]#public#
  244. Returns the amount of tokens of type `id` that `spender` is allowed to spend on behalf of `owner`.
  245. NOTE: Does not include operator allowances.
  246. [.contract-item]
  247. [[ERC6909-isOperator-address-address-]]
  248. ==== `[.contract-item-name]#++isOperator++#++(address owner, address spender) → bool++` [.item-kind]#public#
  249. Returns true if `spender` is set as an operator for `owner`.
  250. [.contract-item]
  251. [[ERC6909-approve-address-uint256-uint256-]]
  252. ==== `[.contract-item-name]#++approve++#++(address spender, uint256 id, uint256 amount) → bool++` [.item-kind]#public#
  253. Sets an approval to `spender` for `amount` of tokens of type `id` from the caller's tokens. An `amount` of
  254. `type(uint256).max` signifies an unlimited approval.
  255. Must return true.
  256. [.contract-item]
  257. [[ERC6909-setOperator-address-bool-]]
  258. ==== `[.contract-item-name]#++setOperator++#++(address spender, bool approved) → bool++` [.item-kind]#public#
  259. Grants or revokes unlimited transfer permission of any token id to `spender` for the caller's tokens.
  260. Must return true.
  261. [.contract-item]
  262. [[ERC6909-transfer-address-uint256-uint256-]]
  263. ==== `[.contract-item-name]#++transfer++#++(address receiver, uint256 id, uint256 amount) → bool++` [.item-kind]#public#
  264. Transfers `amount` of token type `id` from the caller's account to `receiver`.
  265. Must return true.
  266. [.contract-item]
  267. [[ERC6909-transferFrom-address-address-uint256-uint256-]]
  268. ==== `[.contract-item-name]#++transferFrom++#++(address sender, address receiver, uint256 id, uint256 amount) → bool++` [.item-kind]#public#
  269. Transfers `amount` of token type `id` from `sender` to `receiver`.
  270. Must return true.
  271. [.contract-item]
  272. [[ERC6909-_mint-address-uint256-uint256-]]
  273. ==== `[.contract-item-name]#++_mint++#++(address to, uint256 id, uint256 amount)++` [.item-kind]#internal#
  274. Creates `amount` of token `id` and assigns them to `account`, by transferring it from address(0).
  275. Relies on the `_update` mechanism.
  276. Emits a {Transfer} event with `from` set to the zero address.
  277. NOTE: This function is not virtual, {_update} should be overridden instead.
  278. [.contract-item]
  279. [[ERC6909-_transfer-address-address-uint256-uint256-]]
  280. ==== `[.contract-item-name]#++_transfer++#++(address from, address to, uint256 id, uint256 amount)++` [.item-kind]#internal#
  281. Moves `amount` of token `id` from `from` to `to` without checking for approvals. This function verifies
  282. that neither the sender nor the receiver are address(0), which means it cannot mint or burn tokens.
  283. Relies on the `_update` mechanism.
  284. Emits a {Transfer} event.
  285. NOTE: This function is not virtual, {_update} should be overridden instead.
  286. [.contract-item]
  287. [[ERC6909-_burn-address-uint256-uint256-]]
  288. ==== `[.contract-item-name]#++_burn++#++(address from, uint256 id, uint256 amount)++` [.item-kind]#internal#
  289. Destroys a `amount` of token `id` from `account`.
  290. Relies on the `_update` mechanism.
  291. Emits a {Transfer} event with `to` set to the zero address.
  292. NOTE: This function is not virtual, {_update} should be overridden instead
  293. [.contract-item]
  294. [[ERC6909-_update-address-address-uint256-uint256-]]
  295. ==== `[.contract-item-name]#++_update++#++(address from, address to, uint256 id, uint256 amount)++` [.item-kind]#internal#
  296. Transfers `amount` of token `id` from `from` to `to`, or alternatively mints (or burns) if `from`
  297. (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding
  298. this function.
  299. Emits a {Transfer} event.
  300. [.contract-item]
  301. [[ERC6909-_approve-address-address-uint256-uint256-]]
  302. ==== `[.contract-item-name]#++_approve++#++(address owner, address spender, uint256 id, uint256 amount)++` [.item-kind]#internal#
  303. Sets `amount` as the allowance of `spender` over the `owner`'s `id` tokens.
  304. This internal function is equivalent to `approve`, and can be used to e.g. set automatic allowances for certain
  305. subsystems, etc.
  306. Emits an {Approval} event.
  307. Requirements:
  308. - `owner` cannot be the zero address.
  309. - `spender` cannot be the zero address.
  310. [.contract-item]
  311. [[ERC6909-_setOperator-address-address-bool-]]
  312. ==== `[.contract-item-name]#++_setOperator++#++(address owner, address spender, bool approved)++` [.item-kind]#internal#
  313. Approve `spender` to operate on all of `owner`'s tokens
  314. This internal function is equivalent to `setOperator`, and can be used to e.g. set automatic allowances for
  315. certain subsystems, etc.
  316. Emits an {OperatorSet} event.
  317. Requirements:
  318. - `owner` cannot be the zero address.
  319. - `spender` cannot be the zero address.
  320. [.contract-item]
  321. [[ERC6909-_spendAllowance-address-address-uint256-uint256-]]
  322. ==== `[.contract-item-name]#++_spendAllowance++#++(address owner, address spender, uint256 id, uint256 amount)++` [.item-kind]#internal#
  323. Updates `owner`'s allowance for `spender` based on spent `amount`.
  324. Does not update the allowance value in case of infinite allowance.
  325. Revert if not enough allowance is available.
  326. Does not emit an {Approval} event.
  327. [.contract-item]
  328. [[ERC6909-ERC6909InsufficientBalance-address-uint256-uint256-uint256-]]
  329. ==== `[.contract-item-name]#++ERC6909InsufficientBalance++#++(address sender, uint256 balance, uint256 needed, uint256 id)++` [.item-kind]#error#
  330. [.contract-item]
  331. [[ERC6909-ERC6909InsufficientAllowance-address-uint256-uint256-uint256-]]
  332. ==== `[.contract-item-name]#++ERC6909InsufficientAllowance++#++(address spender, uint256 allowance, uint256 needed, uint256 id)++` [.item-kind]#error#
  333. [.contract-item]
  334. [[ERC6909-ERC6909InvalidApprover-address-]]
  335. ==== `[.contract-item-name]#++ERC6909InvalidApprover++#++(address approver)++` [.item-kind]#error#
  336. [.contract-item]
  337. [[ERC6909-ERC6909InvalidReceiver-address-]]
  338. ==== `[.contract-item-name]#++ERC6909InvalidReceiver++#++(address receiver)++` [.item-kind]#error#
  339. [.contract-item]
  340. [[ERC6909-ERC6909InvalidSender-address-]]
  341. ==== `[.contract-item-name]#++ERC6909InvalidSender++#++(address sender)++` [.item-kind]#error#
  342. [.contract-item]
  343. [[ERC6909-ERC6909InvalidSpender-address-]]
  344. ==== `[.contract-item-name]#++ERC6909InvalidSpender++#++(address spender)++` [.item-kind]#error#
  345. == Extensions
  346. :ContractURIUpdated: pass:normal[xref:#ERC6909ContentURI-ContractURIUpdated--[`++ContractURIUpdated++`]]
  347. :URI: pass:normal[xref:#ERC6909ContentURI-URI-string-uint256-[`++URI++`]]
  348. :contractURI: pass:normal[xref:#ERC6909ContentURI-contractURI--[`++contractURI++`]]
  349. :tokenURI: pass:normal[xref:#ERC6909ContentURI-tokenURI-uint256-[`++tokenURI++`]]
  350. :_setContractURI: pass:normal[xref:#ERC6909ContentURI-_setContractURI-string-[`++_setContractURI++`]]
  351. :_setTokenURI: pass:normal[xref:#ERC6909ContentURI-_setTokenURI-uint256-string-[`++_setTokenURI++`]]
  352. :contractURI-: pass:normal[xref:#ERC6909ContentURI-contractURI--[`++contractURI++`]]
  353. :tokenURI-uint256: pass:normal[xref:#ERC6909ContentURI-tokenURI-uint256-[`++tokenURI++`]]
  354. :_setContractURI-string: pass:normal[xref:#ERC6909ContentURI-_setContractURI-string-[`++_setContractURI++`]]
  355. :_setTokenURI-uint256-string: pass:normal[xref:#ERC6909ContentURI-_setTokenURI-uint256-string-[`++_setTokenURI++`]]
  356. [.contract]
  357. [[ERC6909ContentURI]]
  358. === `++ERC6909ContentURI++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.4.0/contracts/token/ERC6909/extensions/draft-ERC6909ContentURI.sol[{github-icon},role=heading-link]
  359. [.hljs-theme-light.nopadding]
  360. ```solidity
  361. import "@openzeppelin/contracts/token/ERC6909/extensions/draft-ERC6909ContentURI.sol";
  362. ```
  363. Implementation of the Content URI extension defined in ERC6909.
  364. [.contract-index]
  365. .Functions
  366. --
  367. * {xref-ERC6909ContentURI-contractURI--}[`++contractURI()++`]
  368. * {xref-ERC6909ContentURI-tokenURI-uint256-}[`++tokenURI(id)++`]
  369. * {xref-ERC6909ContentURI-_setContractURI-string-}[`++_setContractURI(newContractURI)++`]
  370. * {xref-ERC6909ContentURI-_setTokenURI-uint256-string-}[`++_setTokenURI(id, newTokenURI)++`]
  371. [.contract-subindex-inherited]
  372. .IERC6909ContentURI
  373. [.contract-subindex-inherited]
  374. .ERC6909
  375. * {xref-ERC6909-supportsInterface-bytes4-}[`++supportsInterface(interfaceId)++`]
  376. * {xref-ERC6909-balanceOf-address-uint256-}[`++balanceOf(owner, id)++`]
  377. * {xref-ERC6909-allowance-address-address-uint256-}[`++allowance(owner, spender, id)++`]
  378. * {xref-ERC6909-isOperator-address-address-}[`++isOperator(owner, spender)++`]
  379. * {xref-ERC6909-approve-address-uint256-uint256-}[`++approve(spender, id, amount)++`]
  380. * {xref-ERC6909-setOperator-address-bool-}[`++setOperator(spender, approved)++`]
  381. * {xref-ERC6909-transfer-address-uint256-uint256-}[`++transfer(receiver, id, amount)++`]
  382. * {xref-ERC6909-transferFrom-address-address-uint256-uint256-}[`++transferFrom(sender, receiver, id, amount)++`]
  383. * {xref-ERC6909-_mint-address-uint256-uint256-}[`++_mint(to, id, amount)++`]
  384. * {xref-ERC6909-_transfer-address-address-uint256-uint256-}[`++_transfer(from, to, id, amount)++`]
  385. * {xref-ERC6909-_burn-address-uint256-uint256-}[`++_burn(from, id, amount)++`]
  386. * {xref-ERC6909-_update-address-address-uint256-uint256-}[`++_update(from, to, id, amount)++`]
  387. * {xref-ERC6909-_approve-address-address-uint256-uint256-}[`++_approve(owner, spender, id, amount)++`]
  388. * {xref-ERC6909-_setOperator-address-address-bool-}[`++_setOperator(owner, spender, approved)++`]
  389. * {xref-ERC6909-_spendAllowance-address-address-uint256-uint256-}[`++_spendAllowance(owner, spender, id, amount)++`]
  390. [.contract-subindex-inherited]
  391. .IERC6909
  392. [.contract-subindex-inherited]
  393. .ERC165
  394. [.contract-subindex-inherited]
  395. .IERC165
  396. --
  397. [.contract-index]
  398. .Events
  399. --
  400. * {xref-ERC6909ContentURI-ContractURIUpdated--}[`++ContractURIUpdated()++`]
  401. * {xref-ERC6909ContentURI-URI-string-uint256-}[`++URI(value, id)++`]
  402. [.contract-subindex-inherited]
  403. .IERC6909ContentURI
  404. [.contract-subindex-inherited]
  405. .ERC6909
  406. [.contract-subindex-inherited]
  407. .IERC6909
  408. * {xref-IERC6909-Approval-address-address-uint256-uint256-}[`++Approval(owner, spender, id, amount)++`]
  409. * {xref-IERC6909-OperatorSet-address-address-bool-}[`++OperatorSet(owner, spender, approved)++`]
  410. * {xref-IERC6909-Transfer-address-address-address-uint256-uint256-}[`++Transfer(caller, sender, receiver, id, amount)++`]
  411. [.contract-subindex-inherited]
  412. .ERC165
  413. [.contract-subindex-inherited]
  414. .IERC165
  415. --
  416. [.contract-index]
  417. .Errors
  418. --
  419. [.contract-subindex-inherited]
  420. .IERC6909ContentURI
  421. [.contract-subindex-inherited]
  422. .ERC6909
  423. * {xref-ERC6909-ERC6909InsufficientBalance-address-uint256-uint256-uint256-}[`++ERC6909InsufficientBalance(sender, balance, needed, id)++`]
  424. * {xref-ERC6909-ERC6909InsufficientAllowance-address-uint256-uint256-uint256-}[`++ERC6909InsufficientAllowance(spender, allowance, needed, id)++`]
  425. * {xref-ERC6909-ERC6909InvalidApprover-address-}[`++ERC6909InvalidApprover(approver)++`]
  426. * {xref-ERC6909-ERC6909InvalidReceiver-address-}[`++ERC6909InvalidReceiver(receiver)++`]
  427. * {xref-ERC6909-ERC6909InvalidSender-address-}[`++ERC6909InvalidSender(sender)++`]
  428. * {xref-ERC6909-ERC6909InvalidSpender-address-}[`++ERC6909InvalidSpender(spender)++`]
  429. [.contract-subindex-inherited]
  430. .IERC6909
  431. [.contract-subindex-inherited]
  432. .ERC165
  433. [.contract-subindex-inherited]
  434. .IERC165
  435. --
  436. [.contract-item]
  437. [[ERC6909ContentURI-contractURI--]]
  438. ==== `[.contract-item-name]#++contractURI++#++() → string++` [.item-kind]#public#
  439. Returns URI for the contract.
  440. [.contract-item]
  441. [[ERC6909ContentURI-tokenURI-uint256-]]
  442. ==== `[.contract-item-name]#++tokenURI++#++(uint256 id) → string++` [.item-kind]#public#
  443. Returns the URI for the token of type `id`.
  444. [.contract-item]
  445. [[ERC6909ContentURI-_setContractURI-string-]]
  446. ==== `[.contract-item-name]#++_setContractURI++#++(string newContractURI)++` [.item-kind]#internal#
  447. Sets the {contractURI} for the contract.
  448. Emits a {ContractURIUpdated} event.
  449. [.contract-item]
  450. [[ERC6909ContentURI-_setTokenURI-uint256-string-]]
  451. ==== `[.contract-item-name]#++_setTokenURI++#++(uint256 id, string newTokenURI)++` [.item-kind]#internal#
  452. Sets the {tokenURI} for a given token of type `id`.
  453. Emits a {URI} event.
  454. [.contract-item]
  455. [[ERC6909ContentURI-ContractURIUpdated--]]
  456. ==== `[.contract-item-name]#++ContractURIUpdated++#++()++` [.item-kind]#event#
  457. Event emitted when the contract URI is changed. See https://eips.ethereum.org/EIPS/eip-7572[ERC-7572] for details.
  458. [.contract-item]
  459. [[ERC6909ContentURI-URI-string-uint256-]]
  460. ==== `[.contract-item-name]#++URI++#++(string value, uint256 indexed id)++` [.item-kind]#event#
  461. See {IERC1155-URI}
  462. :TokenMetadata: pass:normal[xref:#ERC6909Metadata-TokenMetadata[`++TokenMetadata++`]]
  463. :ERC6909NameUpdated: pass:normal[xref:#ERC6909Metadata-ERC6909NameUpdated-uint256-string-[`++ERC6909NameUpdated++`]]
  464. :ERC6909SymbolUpdated: pass:normal[xref:#ERC6909Metadata-ERC6909SymbolUpdated-uint256-string-[`++ERC6909SymbolUpdated++`]]
  465. :ERC6909DecimalsUpdated: pass:normal[xref:#ERC6909Metadata-ERC6909DecimalsUpdated-uint256-uint8-[`++ERC6909DecimalsUpdated++`]]
  466. :name: pass:normal[xref:#ERC6909Metadata-name-uint256-[`++name++`]]
  467. :symbol: pass:normal[xref:#ERC6909Metadata-symbol-uint256-[`++symbol++`]]
  468. :decimals: pass:normal[xref:#ERC6909Metadata-decimals-uint256-[`++decimals++`]]
  469. :_setName: pass:normal[xref:#ERC6909Metadata-_setName-uint256-string-[`++_setName++`]]
  470. :_setSymbol: pass:normal[xref:#ERC6909Metadata-_setSymbol-uint256-string-[`++_setSymbol++`]]
  471. :_setDecimals: pass:normal[xref:#ERC6909Metadata-_setDecimals-uint256-uint8-[`++_setDecimals++`]]
  472. :name-uint256: pass:normal[xref:#ERC6909Metadata-name-uint256-[`++name++`]]
  473. :symbol-uint256: pass:normal[xref:#ERC6909Metadata-symbol-uint256-[`++symbol++`]]
  474. :decimals-uint256: pass:normal[xref:#ERC6909Metadata-decimals-uint256-[`++decimals++`]]
  475. :_setName-uint256-string: pass:normal[xref:#ERC6909Metadata-_setName-uint256-string-[`++_setName++`]]
  476. :_setSymbol-uint256-string: pass:normal[xref:#ERC6909Metadata-_setSymbol-uint256-string-[`++_setSymbol++`]]
  477. :_setDecimals-uint256-uint8: pass:normal[xref:#ERC6909Metadata-_setDecimals-uint256-uint8-[`++_setDecimals++`]]
  478. [.contract]
  479. [[ERC6909Metadata]]
  480. === `++ERC6909Metadata++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.4.0/contracts/token/ERC6909/extensions/draft-ERC6909Metadata.sol[{github-icon},role=heading-link]
  481. [.hljs-theme-light.nopadding]
  482. ```solidity
  483. import "@openzeppelin/contracts/token/ERC6909/extensions/draft-ERC6909Metadata.sol";
  484. ```
  485. Implementation of the Metadata extension defined in ERC6909. Exposes the name, symbol, and decimals of each token id.
  486. [.contract-index]
  487. .Functions
  488. --
  489. * {xref-ERC6909Metadata-name-uint256-}[`++name(id)++`]
  490. * {xref-ERC6909Metadata-symbol-uint256-}[`++symbol(id)++`]
  491. * {xref-ERC6909Metadata-decimals-uint256-}[`++decimals(id)++`]
  492. * {xref-ERC6909Metadata-_setName-uint256-string-}[`++_setName(id, newName)++`]
  493. * {xref-ERC6909Metadata-_setSymbol-uint256-string-}[`++_setSymbol(id, newSymbol)++`]
  494. * {xref-ERC6909Metadata-_setDecimals-uint256-uint8-}[`++_setDecimals(id, newDecimals)++`]
  495. [.contract-subindex-inherited]
  496. .IERC6909Metadata
  497. [.contract-subindex-inherited]
  498. .ERC6909
  499. * {xref-ERC6909-supportsInterface-bytes4-}[`++supportsInterface(interfaceId)++`]
  500. * {xref-ERC6909-balanceOf-address-uint256-}[`++balanceOf(owner, id)++`]
  501. * {xref-ERC6909-allowance-address-address-uint256-}[`++allowance(owner, spender, id)++`]
  502. * {xref-ERC6909-isOperator-address-address-}[`++isOperator(owner, spender)++`]
  503. * {xref-ERC6909-approve-address-uint256-uint256-}[`++approve(spender, id, amount)++`]
  504. * {xref-ERC6909-setOperator-address-bool-}[`++setOperator(spender, approved)++`]
  505. * {xref-ERC6909-transfer-address-uint256-uint256-}[`++transfer(receiver, id, amount)++`]
  506. * {xref-ERC6909-transferFrom-address-address-uint256-uint256-}[`++transferFrom(sender, receiver, id, amount)++`]
  507. * {xref-ERC6909-_mint-address-uint256-uint256-}[`++_mint(to, id, amount)++`]
  508. * {xref-ERC6909-_transfer-address-address-uint256-uint256-}[`++_transfer(from, to, id, amount)++`]
  509. * {xref-ERC6909-_burn-address-uint256-uint256-}[`++_burn(from, id, amount)++`]
  510. * {xref-ERC6909-_update-address-address-uint256-uint256-}[`++_update(from, to, id, amount)++`]
  511. * {xref-ERC6909-_approve-address-address-uint256-uint256-}[`++_approve(owner, spender, id, amount)++`]
  512. * {xref-ERC6909-_setOperator-address-address-bool-}[`++_setOperator(owner, spender, approved)++`]
  513. * {xref-ERC6909-_spendAllowance-address-address-uint256-uint256-}[`++_spendAllowance(owner, spender, id, amount)++`]
  514. [.contract-subindex-inherited]
  515. .IERC6909
  516. [.contract-subindex-inherited]
  517. .ERC165
  518. [.contract-subindex-inherited]
  519. .IERC165
  520. --
  521. [.contract-index]
  522. .Events
  523. --
  524. * {xref-ERC6909Metadata-ERC6909NameUpdated-uint256-string-}[`++ERC6909NameUpdated(id, newName)++`]
  525. * {xref-ERC6909Metadata-ERC6909SymbolUpdated-uint256-string-}[`++ERC6909SymbolUpdated(id, newSymbol)++`]
  526. * {xref-ERC6909Metadata-ERC6909DecimalsUpdated-uint256-uint8-}[`++ERC6909DecimalsUpdated(id, newDecimals)++`]
  527. [.contract-subindex-inherited]
  528. .IERC6909Metadata
  529. [.contract-subindex-inherited]
  530. .ERC6909
  531. [.contract-subindex-inherited]
  532. .IERC6909
  533. * {xref-IERC6909-Approval-address-address-uint256-uint256-}[`++Approval(owner, spender, id, amount)++`]
  534. * {xref-IERC6909-OperatorSet-address-address-bool-}[`++OperatorSet(owner, spender, approved)++`]
  535. * {xref-IERC6909-Transfer-address-address-address-uint256-uint256-}[`++Transfer(caller, sender, receiver, id, amount)++`]
  536. [.contract-subindex-inherited]
  537. .ERC165
  538. [.contract-subindex-inherited]
  539. .IERC165
  540. --
  541. [.contract-index]
  542. .Errors
  543. --
  544. [.contract-subindex-inherited]
  545. .IERC6909Metadata
  546. [.contract-subindex-inherited]
  547. .ERC6909
  548. * {xref-ERC6909-ERC6909InsufficientBalance-address-uint256-uint256-uint256-}[`++ERC6909InsufficientBalance(sender, balance, needed, id)++`]
  549. * {xref-ERC6909-ERC6909InsufficientAllowance-address-uint256-uint256-uint256-}[`++ERC6909InsufficientAllowance(spender, allowance, needed, id)++`]
  550. * {xref-ERC6909-ERC6909InvalidApprover-address-}[`++ERC6909InvalidApprover(approver)++`]
  551. * {xref-ERC6909-ERC6909InvalidReceiver-address-}[`++ERC6909InvalidReceiver(receiver)++`]
  552. * {xref-ERC6909-ERC6909InvalidSender-address-}[`++ERC6909InvalidSender(sender)++`]
  553. * {xref-ERC6909-ERC6909InvalidSpender-address-}[`++ERC6909InvalidSpender(spender)++`]
  554. [.contract-subindex-inherited]
  555. .IERC6909
  556. [.contract-subindex-inherited]
  557. .ERC165
  558. [.contract-subindex-inherited]
  559. .IERC165
  560. --
  561. [.contract-item]
  562. [[ERC6909Metadata-name-uint256-]]
  563. ==== `[.contract-item-name]#++name++#++(uint256 id) → string++` [.item-kind]#public#
  564. Returns the name of the token of type `id`.
  565. [.contract-item]
  566. [[ERC6909Metadata-symbol-uint256-]]
  567. ==== `[.contract-item-name]#++symbol++#++(uint256 id) → string++` [.item-kind]#public#
  568. Returns the ticker symbol of the token of type `id`.
  569. [.contract-item]
  570. [[ERC6909Metadata-decimals-uint256-]]
  571. ==== `[.contract-item-name]#++decimals++#++(uint256 id) → uint8++` [.item-kind]#public#
  572. Returns the number of decimals for the token of type `id`.
  573. [.contract-item]
  574. [[ERC6909Metadata-_setName-uint256-string-]]
  575. ==== `[.contract-item-name]#++_setName++#++(uint256 id, string newName)++` [.item-kind]#internal#
  576. Sets the `name` for a given token of type `id`.
  577. Emits an {ERC6909NameUpdated} event.
  578. [.contract-item]
  579. [[ERC6909Metadata-_setSymbol-uint256-string-]]
  580. ==== `[.contract-item-name]#++_setSymbol++#++(uint256 id, string newSymbol)++` [.item-kind]#internal#
  581. Sets the `symbol` for a given token of type `id`.
  582. Emits an {ERC6909SymbolUpdated} event.
  583. [.contract-item]
  584. [[ERC6909Metadata-_setDecimals-uint256-uint8-]]
  585. ==== `[.contract-item-name]#++_setDecimals++#++(uint256 id, uint8 newDecimals)++` [.item-kind]#internal#
  586. Sets the `decimals` for a given token of type `id`.
  587. Emits an {ERC6909DecimalsUpdated} event.
  588. [.contract-item]
  589. [[ERC6909Metadata-ERC6909NameUpdated-uint256-string-]]
  590. ==== `[.contract-item-name]#++ERC6909NameUpdated++#++(uint256 indexed id, string newName)++` [.item-kind]#event#
  591. The name of the token of type `id` was updated to `newName`.
  592. [.contract-item]
  593. [[ERC6909Metadata-ERC6909SymbolUpdated-uint256-string-]]
  594. ==== `[.contract-item-name]#++ERC6909SymbolUpdated++#++(uint256 indexed id, string newSymbol)++` [.item-kind]#event#
  595. The symbol for the token of type `id` was updated to `newSymbol`.
  596. [.contract-item]
  597. [[ERC6909Metadata-ERC6909DecimalsUpdated-uint256-uint8-]]
  598. ==== `[.contract-item-name]#++ERC6909DecimalsUpdated++#++(uint256 indexed id, uint8 newDecimals)++` [.item-kind]#event#
  599. The decimals value for token of type `id` was updated to `newDecimals`.
  600. :totalSupply: pass:normal[xref:#ERC6909TokenSupply-totalSupply-uint256-[`++totalSupply++`]]
  601. :_update: pass:normal[xref:#ERC6909TokenSupply-_update-address-address-uint256-uint256-[`++_update++`]]
  602. :totalSupply-uint256: pass:normal[xref:#ERC6909TokenSupply-totalSupply-uint256-[`++totalSupply++`]]
  603. :_update-address-address-uint256-uint256: pass:normal[xref:#ERC6909TokenSupply-_update-address-address-uint256-uint256-[`++_update++`]]
  604. [.contract]
  605. [[ERC6909TokenSupply]]
  606. === `++ERC6909TokenSupply++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.4.0/contracts/token/ERC6909/extensions/draft-ERC6909TokenSupply.sol[{github-icon},role=heading-link]
  607. [.hljs-theme-light.nopadding]
  608. ```solidity
  609. import "@openzeppelin/contracts/token/ERC6909/extensions/draft-ERC6909TokenSupply.sol";
  610. ```
  611. Implementation of the Token Supply extension defined in ERC6909.
  612. Tracks the total supply of each token id individually.
  613. [.contract-index]
  614. .Functions
  615. --
  616. * {xref-ERC6909TokenSupply-totalSupply-uint256-}[`++totalSupply(id)++`]
  617. * {xref-ERC6909TokenSupply-_update-address-address-uint256-uint256-}[`++_update(from, to, id, amount)++`]
  618. [.contract-subindex-inherited]
  619. .IERC6909TokenSupply
  620. [.contract-subindex-inherited]
  621. .ERC6909
  622. * {xref-ERC6909-supportsInterface-bytes4-}[`++supportsInterface(interfaceId)++`]
  623. * {xref-ERC6909-balanceOf-address-uint256-}[`++balanceOf(owner, id)++`]
  624. * {xref-ERC6909-allowance-address-address-uint256-}[`++allowance(owner, spender, id)++`]
  625. * {xref-ERC6909-isOperator-address-address-}[`++isOperator(owner, spender)++`]
  626. * {xref-ERC6909-approve-address-uint256-uint256-}[`++approve(spender, id, amount)++`]
  627. * {xref-ERC6909-setOperator-address-bool-}[`++setOperator(spender, approved)++`]
  628. * {xref-ERC6909-transfer-address-uint256-uint256-}[`++transfer(receiver, id, amount)++`]
  629. * {xref-ERC6909-transferFrom-address-address-uint256-uint256-}[`++transferFrom(sender, receiver, id, amount)++`]
  630. * {xref-ERC6909-_mint-address-uint256-uint256-}[`++_mint(to, id, amount)++`]
  631. * {xref-ERC6909-_transfer-address-address-uint256-uint256-}[`++_transfer(from, to, id, amount)++`]
  632. * {xref-ERC6909-_burn-address-uint256-uint256-}[`++_burn(from, id, amount)++`]
  633. * {xref-ERC6909-_approve-address-address-uint256-uint256-}[`++_approve(owner, spender, id, amount)++`]
  634. * {xref-ERC6909-_setOperator-address-address-bool-}[`++_setOperator(owner, spender, approved)++`]
  635. * {xref-ERC6909-_spendAllowance-address-address-uint256-uint256-}[`++_spendAllowance(owner, spender, id, amount)++`]
  636. [.contract-subindex-inherited]
  637. .IERC6909
  638. [.contract-subindex-inherited]
  639. .ERC165
  640. [.contract-subindex-inherited]
  641. .IERC165
  642. --
  643. [.contract-index]
  644. .Events
  645. --
  646. [.contract-subindex-inherited]
  647. .IERC6909TokenSupply
  648. [.contract-subindex-inherited]
  649. .ERC6909
  650. [.contract-subindex-inherited]
  651. .IERC6909
  652. * {xref-IERC6909-Approval-address-address-uint256-uint256-}[`++Approval(owner, spender, id, amount)++`]
  653. * {xref-IERC6909-OperatorSet-address-address-bool-}[`++OperatorSet(owner, spender, approved)++`]
  654. * {xref-IERC6909-Transfer-address-address-address-uint256-uint256-}[`++Transfer(caller, sender, receiver, id, amount)++`]
  655. [.contract-subindex-inherited]
  656. .ERC165
  657. [.contract-subindex-inherited]
  658. .IERC165
  659. --
  660. [.contract-index]
  661. .Errors
  662. --
  663. [.contract-subindex-inherited]
  664. .IERC6909TokenSupply
  665. [.contract-subindex-inherited]
  666. .ERC6909
  667. * {xref-ERC6909-ERC6909InsufficientBalance-address-uint256-uint256-uint256-}[`++ERC6909InsufficientBalance(sender, balance, needed, id)++`]
  668. * {xref-ERC6909-ERC6909InsufficientAllowance-address-uint256-uint256-uint256-}[`++ERC6909InsufficientAllowance(spender, allowance, needed, id)++`]
  669. * {xref-ERC6909-ERC6909InvalidApprover-address-}[`++ERC6909InvalidApprover(approver)++`]
  670. * {xref-ERC6909-ERC6909InvalidReceiver-address-}[`++ERC6909InvalidReceiver(receiver)++`]
  671. * {xref-ERC6909-ERC6909InvalidSender-address-}[`++ERC6909InvalidSender(sender)++`]
  672. * {xref-ERC6909-ERC6909InvalidSpender-address-}[`++ERC6909InvalidSpender(spender)++`]
  673. [.contract-subindex-inherited]
  674. .IERC6909
  675. [.contract-subindex-inherited]
  676. .ERC165
  677. [.contract-subindex-inherited]
  678. .IERC165
  679. --
  680. [.contract-item]
  681. [[ERC6909TokenSupply-totalSupply-uint256-]]
  682. ==== `[.contract-item-name]#++totalSupply++#++(uint256 id) → uint256++` [.item-kind]#public#
  683. Returns the total supply of the token of type `id`.
  684. [.contract-item]
  685. [[ERC6909TokenSupply-_update-address-address-uint256-uint256-]]
  686. ==== `[.contract-item-name]#++_update++#++(address from, address to, uint256 id, uint256 amount)++` [.item-kind]#internal#
  687. Override the `_update` function to update the total supply of each token id as necessary.