ERC20.adoc 130 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670
  1. :github-icon: pass:[<svg class="icon"><use href="#github-icon"/></svg>]
  2. :IERC20: pass:normal[xref:token/ERC20.adoc#IERC20[`IERC20`]]
  3. :IERC20Metadata: pass:normal[xref:token/ERC20.adoc#IERC20Metadata[`IERC20Metadata`]]
  4. :ERC20: pass:normal[xref:token/ERC20.adoc#ERC20[`ERC20`]]
  5. :ERC20Permit: pass:normal[xref:token/ERC20.adoc#ERC20Permit[`ERC20Permit`]]
  6. :ERC20Burnable: pass:normal[xref:token/ERC20.adoc#ERC20Burnable[`ERC20Burnable`]]
  7. :ERC20Capped: pass:normal[xref:token/ERC20.adoc#ERC20Capped[`ERC20Capped`]]
  8. :ERC20Pausable: pass:normal[xref:token/ERC20.adoc#ERC20Pausable[`ERC20Pausable`]]
  9. :ERC20FlashMint: pass:normal[xref:token/ERC20.adoc#ERC20FlashMint[`ERC20FlashMint`]]
  10. :ERC20Votes: pass:normal[xref:token/ERC20.adoc#ERC20Votes[`ERC20Votes`]]
  11. :ERC20Wrapper: pass:normal[xref:token/ERC20.adoc#ERC20Wrapper[`ERC20Wrapper`]]
  12. :ERC20Votes: pass:normal[xref:token/ERC20.adoc#ERC20Votes[`ERC20Votes`]]
  13. :ERC4626: pass:normal[xref:token/ERC20.adoc#ERC4626[`ERC4626`]]
  14. :SafeERC20: pass:normal[xref:token/ERC20.adoc#SafeERC20[`SafeERC20`]]
  15. :VestingWallet: pass:normal[xref:finance.adoc#VestingWallet[`VestingWallet`]]
  16. :xref-IERC20-totalSupply--: xref:token/ERC20.adoc#IERC20-totalSupply--
  17. :xref-IERC20-balanceOf-address-: xref:token/ERC20.adoc#IERC20-balanceOf-address-
  18. :xref-IERC20-transfer-address-uint256-: xref:token/ERC20.adoc#IERC20-transfer-address-uint256-
  19. :xref-IERC20-allowance-address-address-: xref:token/ERC20.adoc#IERC20-allowance-address-address-
  20. :xref-IERC20-approve-address-uint256-: xref:token/ERC20.adoc#IERC20-approve-address-uint256-
  21. :xref-IERC20-transferFrom-address-address-uint256-: xref:token/ERC20.adoc#IERC20-transferFrom-address-address-uint256-
  22. :xref-IERC20-Transfer-address-address-uint256-: xref:token/ERC20.adoc#IERC20-Transfer-address-address-uint256-
  23. :xref-IERC20-Approval-address-address-uint256-: xref:token/ERC20.adoc#IERC20-Approval-address-address-uint256-
  24. :xref-IERC20Metadata-name--: xref:token/ERC20.adoc#IERC20Metadata-name--
  25. :xref-IERC20Metadata-symbol--: xref:token/ERC20.adoc#IERC20Metadata-symbol--
  26. :xref-IERC20Metadata-decimals--: xref:token/ERC20.adoc#IERC20Metadata-decimals--
  27. :xref-IERC20-totalSupply--: xref:token/ERC20.adoc#IERC20-totalSupply--
  28. :xref-IERC20-balanceOf-address-: xref:token/ERC20.adoc#IERC20-balanceOf-address-
  29. :xref-IERC20-transfer-address-uint256-: xref:token/ERC20.adoc#IERC20-transfer-address-uint256-
  30. :xref-IERC20-allowance-address-address-: xref:token/ERC20.adoc#IERC20-allowance-address-address-
  31. :xref-IERC20-approve-address-uint256-: xref:token/ERC20.adoc#IERC20-approve-address-uint256-
  32. :xref-IERC20-transferFrom-address-address-uint256-: xref:token/ERC20.adoc#IERC20-transferFrom-address-address-uint256-
  33. :xref-IERC20-Transfer-address-address-uint256-: xref:token/ERC20.adoc#IERC20-Transfer-address-address-uint256-
  34. :xref-IERC20-Approval-address-address-uint256-: xref:token/ERC20.adoc#IERC20-Approval-address-address-uint256-
  35. :IERC20: pass:normal[xref:token/ERC20.adoc#IERC20[`IERC20`]]
  36. :xref-ERC20-constructor-string-string-: xref:token/ERC20.adoc#ERC20-constructor-string-string-
  37. :xref-ERC20-name--: xref:token/ERC20.adoc#ERC20-name--
  38. :xref-ERC20-symbol--: xref:token/ERC20.adoc#ERC20-symbol--
  39. :xref-ERC20-decimals--: xref:token/ERC20.adoc#ERC20-decimals--
  40. :xref-ERC20-totalSupply--: xref:token/ERC20.adoc#ERC20-totalSupply--
  41. :xref-ERC20-balanceOf-address-: xref:token/ERC20.adoc#ERC20-balanceOf-address-
  42. :xref-ERC20-transfer-address-uint256-: xref:token/ERC20.adoc#ERC20-transfer-address-uint256-
  43. :xref-ERC20-allowance-address-address-: xref:token/ERC20.adoc#ERC20-allowance-address-address-
  44. :xref-ERC20-approve-address-uint256-: xref:token/ERC20.adoc#ERC20-approve-address-uint256-
  45. :xref-ERC20-transferFrom-address-address-uint256-: xref:token/ERC20.adoc#ERC20-transferFrom-address-address-uint256-
  46. :xref-ERC20-_transfer-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_transfer-address-address-uint256-
  47. :xref-ERC20-_update-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_update-address-address-uint256-
  48. :xref-ERC20-_mint-address-uint256-: xref:token/ERC20.adoc#ERC20-_mint-address-uint256-
  49. :xref-ERC20-_burn-address-uint256-: xref:token/ERC20.adoc#ERC20-_burn-address-uint256-
  50. :xref-ERC20-_approve-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_approve-address-address-uint256-
  51. :xref-ERC20-_approve-address-address-uint256-bool-: xref:token/ERC20.adoc#ERC20-_approve-address-address-uint256-bool-
  52. :xref-ERC20-_spendAllowance-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_spendAllowance-address-address-uint256-
  53. :xref-IERC20-Transfer-address-address-uint256-: xref:token/ERC20.adoc#IERC20-Transfer-address-address-uint256-
  54. :xref-IERC20-Approval-address-address-uint256-: xref:token/ERC20.adoc#IERC20-Approval-address-address-uint256-
  55. :xref-IERC20Errors-ERC20InsufficientBalance-address-uint256-uint256-: xref:interfaces.adoc#IERC20Errors-ERC20InsufficientBalance-address-uint256-uint256-
  56. :xref-IERC20Errors-ERC20InvalidSender-address-: xref:interfaces.adoc#IERC20Errors-ERC20InvalidSender-address-
  57. :xref-IERC20Errors-ERC20InvalidReceiver-address-: xref:interfaces.adoc#IERC20Errors-ERC20InvalidReceiver-address-
  58. :xref-IERC20Errors-ERC20InsufficientAllowance-address-uint256-uint256-: xref:interfaces.adoc#IERC20Errors-ERC20InsufficientAllowance-address-uint256-uint256-
  59. :xref-IERC20Errors-ERC20InvalidApprover-address-: xref:interfaces.adoc#IERC20Errors-ERC20InvalidApprover-address-
  60. :xref-IERC20Errors-ERC20InvalidSpender-address-: xref:interfaces.adoc#IERC20Errors-ERC20InvalidSpender-address-
  61. :IERC20-balanceOf: pass:normal[xref:token/ERC20.adoc#IERC20-balanceOf-address-[`IERC20.balanceOf`]]
  62. :IERC20-transfer: pass:normal[xref:token/ERC20.adoc#IERC20-transfer-address-uint256-[`IERC20.transfer`]]
  63. :IERC20-totalSupply: pass:normal[xref:token/ERC20.adoc#IERC20-totalSupply--[`IERC20.totalSupply`]]
  64. :IERC20-balanceOf: pass:normal[xref:token/ERC20.adoc#IERC20-balanceOf-address-[`IERC20.balanceOf`]]
  65. :IERC20-transfer: pass:normal[xref:token/ERC20.adoc#IERC20-transfer-address-uint256-[`IERC20.transfer`]]
  66. :IERC20-allowance: pass:normal[xref:token/ERC20.adoc#IERC20-allowance-address-address-[`IERC20.allowance`]]
  67. :IERC20-approve: pass:normal[xref:token/ERC20.adoc#IERC20-approve-address-uint256-[`IERC20.approve`]]
  68. :IERC20-transferFrom: pass:normal[xref:token/ERC20.adoc#IERC20-transferFrom-address-address-uint256-[`IERC20.transferFrom`]]
  69. :ERC20: pass:normal[xref:token/ERC20.adoc#ERC20[`ERC20`]]
  70. :IERC20-allowance: pass:normal[xref:token/ERC20.adoc#IERC20-allowance-address-address-[`IERC20.allowance`]]
  71. :IERC20-approve: pass:normal[xref:token/ERC20.adoc#IERC20-approve-address-uint256-[`IERC20.approve`]]
  72. :SafeERC20-safeTransferFrom: pass:normal[xref:token/ERC20.adoc#SafeERC20-safeTransferFrom-contract-IERC20-address-address-uint256-[`SafeERC20.safeTransferFrom`]]
  73. :xref-IERC20Permit-permit-address-address-uint256-uint256-uint8-bytes32-bytes32-: xref:token/ERC20.adoc#IERC20Permit-permit-address-address-uint256-uint256-uint8-bytes32-bytes32-
  74. :xref-IERC20Permit-nonces-address-: xref:token/ERC20.adoc#IERC20Permit-nonces-address-
  75. :xref-IERC20Permit-DOMAIN_SEPARATOR--: xref:token/ERC20.adoc#IERC20Permit-DOMAIN_SEPARATOR--
  76. :IERC20-approve: pass:normal[xref:token/ERC20.adoc#IERC20-approve-address-uint256-[`IERC20.approve`]]
  77. :EIP712: pass:normal[xref:utils.adoc#EIP712[`EIP712`]]
  78. :IERC20-allowance: pass:normal[xref:token/ERC20.adoc#IERC20-allowance-address-address-[`IERC20.allowance`]]
  79. :IERC20-approve: pass:normal[xref:token/ERC20.adoc#IERC20-approve-address-uint256-[`IERC20.approve`]]
  80. :xref-ERC20Permit-constructor-string-: xref:token/ERC20.adoc#ERC20Permit-constructor-string-
  81. :xref-ERC20Permit-permit-address-address-uint256-uint256-uint8-bytes32-bytes32-: xref:token/ERC20.adoc#ERC20Permit-permit-address-address-uint256-uint256-uint8-bytes32-bytes32-
  82. :xref-ERC20Permit-nonces-address-: xref:token/ERC20.adoc#ERC20Permit-nonces-address-
  83. :xref-ERC20Permit-DOMAIN_SEPARATOR--: xref:token/ERC20.adoc#ERC20Permit-DOMAIN_SEPARATOR--
  84. :xref-Nonces-_useNonce-address-: xref:utils.adoc#Nonces-_useNonce-address-
  85. :xref-Nonces-_useCheckedNonce-address-uint256-: xref:utils.adoc#Nonces-_useCheckedNonce-address-uint256-
  86. :xref-EIP712-_domainSeparatorV4--: xref:utils.adoc#EIP712-_domainSeparatorV4--
  87. :xref-EIP712-_hashTypedDataV4-bytes32-: xref:utils.adoc#EIP712-_hashTypedDataV4-bytes32-
  88. :xref-EIP712-eip712Domain--: xref:utils.adoc#EIP712-eip712Domain--
  89. :xref-EIP712-_EIP712Name--: xref:utils.adoc#EIP712-_EIP712Name--
  90. :xref-EIP712-_EIP712Version--: xref:utils.adoc#EIP712-_EIP712Version--
  91. :xref-ERC20-name--: xref:token/ERC20.adoc#ERC20-name--
  92. :xref-ERC20-symbol--: xref:token/ERC20.adoc#ERC20-symbol--
  93. :xref-ERC20-decimals--: xref:token/ERC20.adoc#ERC20-decimals--
  94. :xref-ERC20-totalSupply--: xref:token/ERC20.adoc#ERC20-totalSupply--
  95. :xref-ERC20-balanceOf-address-: xref:token/ERC20.adoc#ERC20-balanceOf-address-
  96. :xref-ERC20-transfer-address-uint256-: xref:token/ERC20.adoc#ERC20-transfer-address-uint256-
  97. :xref-ERC20-allowance-address-address-: xref:token/ERC20.adoc#ERC20-allowance-address-address-
  98. :xref-ERC20-approve-address-uint256-: xref:token/ERC20.adoc#ERC20-approve-address-uint256-
  99. :xref-ERC20-transferFrom-address-address-uint256-: xref:token/ERC20.adoc#ERC20-transferFrom-address-address-uint256-
  100. :xref-ERC20-_transfer-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_transfer-address-address-uint256-
  101. :xref-ERC20-_update-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_update-address-address-uint256-
  102. :xref-ERC20-_mint-address-uint256-: xref:token/ERC20.adoc#ERC20-_mint-address-uint256-
  103. :xref-ERC20-_burn-address-uint256-: xref:token/ERC20.adoc#ERC20-_burn-address-uint256-
  104. :xref-ERC20-_approve-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_approve-address-address-uint256-
  105. :xref-ERC20-_approve-address-address-uint256-bool-: xref:token/ERC20.adoc#ERC20-_approve-address-address-uint256-bool-
  106. :xref-ERC20-_spendAllowance-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_spendAllowance-address-address-uint256-
  107. :xref-IERC5267-EIP712DomainChanged--: xref:interfaces.adoc#IERC5267-EIP712DomainChanged--
  108. :xref-IERC20-Transfer-address-address-uint256-: xref:token/ERC20.adoc#IERC20-Transfer-address-address-uint256-
  109. :xref-IERC20-Approval-address-address-uint256-: xref:token/ERC20.adoc#IERC20-Approval-address-address-uint256-
  110. :xref-ERC20Permit-ERC2612ExpiredSignature-uint256-: xref:token/ERC20.adoc#ERC20Permit-ERC2612ExpiredSignature-uint256-
  111. :xref-ERC20Permit-ERC2612InvalidSigner-address-address-: xref:token/ERC20.adoc#ERC20Permit-ERC2612InvalidSigner-address-address-
  112. :xref-Nonces-InvalidAccountNonce-address-uint256-: xref:utils.adoc#Nonces-InvalidAccountNonce-address-uint256-
  113. :xref-IERC20Errors-ERC20InsufficientBalance-address-uint256-uint256-: xref:interfaces.adoc#IERC20Errors-ERC20InsufficientBalance-address-uint256-uint256-
  114. :xref-IERC20Errors-ERC20InvalidSender-address-: xref:interfaces.adoc#IERC20Errors-ERC20InvalidSender-address-
  115. :xref-IERC20Errors-ERC20InvalidReceiver-address-: xref:interfaces.adoc#IERC20Errors-ERC20InvalidReceiver-address-
  116. :xref-IERC20Errors-ERC20InsufficientAllowance-address-uint256-uint256-: xref:interfaces.adoc#IERC20Errors-ERC20InsufficientAllowance-address-uint256-uint256-
  117. :xref-IERC20Errors-ERC20InvalidApprover-address-: xref:interfaces.adoc#IERC20Errors-ERC20InvalidApprover-address-
  118. :xref-IERC20Errors-ERC20InvalidSpender-address-: xref:interfaces.adoc#IERC20Errors-ERC20InvalidSpender-address-
  119. :EIP712: pass:normal[xref:utils.adoc#EIP712[`EIP712`]]
  120. :IERC20-approve: pass:normal[xref:token/ERC20.adoc#IERC20-approve-address-uint256-[`IERC20.approve`]]
  121. :EIP712: pass:normal[xref:utils.adoc#EIP712[`EIP712`]]
  122. :ERC20: pass:normal[xref:token/ERC20.adoc#ERC20[`ERC20`]]
  123. :xref-ERC20Burnable-burn-uint256-: xref:token/ERC20.adoc#ERC20Burnable-burn-uint256-
  124. :xref-ERC20Burnable-burnFrom-address-uint256-: xref:token/ERC20.adoc#ERC20Burnable-burnFrom-address-uint256-
  125. :xref-ERC20-name--: xref:token/ERC20.adoc#ERC20-name--
  126. :xref-ERC20-symbol--: xref:token/ERC20.adoc#ERC20-symbol--
  127. :xref-ERC20-decimals--: xref:token/ERC20.adoc#ERC20-decimals--
  128. :xref-ERC20-totalSupply--: xref:token/ERC20.adoc#ERC20-totalSupply--
  129. :xref-ERC20-balanceOf-address-: xref:token/ERC20.adoc#ERC20-balanceOf-address-
  130. :xref-ERC20-transfer-address-uint256-: xref:token/ERC20.adoc#ERC20-transfer-address-uint256-
  131. :xref-ERC20-allowance-address-address-: xref:token/ERC20.adoc#ERC20-allowance-address-address-
  132. :xref-ERC20-approve-address-uint256-: xref:token/ERC20.adoc#ERC20-approve-address-uint256-
  133. :xref-ERC20-transferFrom-address-address-uint256-: xref:token/ERC20.adoc#ERC20-transferFrom-address-address-uint256-
  134. :xref-ERC20-_transfer-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_transfer-address-address-uint256-
  135. :xref-ERC20-_update-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_update-address-address-uint256-
  136. :xref-ERC20-_mint-address-uint256-: xref:token/ERC20.adoc#ERC20-_mint-address-uint256-
  137. :xref-ERC20-_burn-address-uint256-: xref:token/ERC20.adoc#ERC20-_burn-address-uint256-
  138. :xref-ERC20-_approve-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_approve-address-address-uint256-
  139. :xref-ERC20-_approve-address-address-uint256-bool-: xref:token/ERC20.adoc#ERC20-_approve-address-address-uint256-bool-
  140. :xref-ERC20-_spendAllowance-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_spendAllowance-address-address-uint256-
  141. :xref-IERC20-Transfer-address-address-uint256-: xref:token/ERC20.adoc#IERC20-Transfer-address-address-uint256-
  142. :xref-IERC20-Approval-address-address-uint256-: xref:token/ERC20.adoc#IERC20-Approval-address-address-uint256-
  143. :xref-IERC20Errors-ERC20InsufficientBalance-address-uint256-uint256-: xref:interfaces.adoc#IERC20Errors-ERC20InsufficientBalance-address-uint256-uint256-
  144. :xref-IERC20Errors-ERC20InvalidSender-address-: xref:interfaces.adoc#IERC20Errors-ERC20InvalidSender-address-
  145. :xref-IERC20Errors-ERC20InvalidReceiver-address-: xref:interfaces.adoc#IERC20Errors-ERC20InvalidReceiver-address-
  146. :xref-IERC20Errors-ERC20InsufficientAllowance-address-uint256-uint256-: xref:interfaces.adoc#IERC20Errors-ERC20InsufficientAllowance-address-uint256-uint256-
  147. :xref-IERC20Errors-ERC20InvalidApprover-address-: xref:interfaces.adoc#IERC20Errors-ERC20InvalidApprover-address-
  148. :xref-IERC20Errors-ERC20InvalidSpender-address-: xref:interfaces.adoc#IERC20Errors-ERC20InvalidSpender-address-
  149. :ERC20-_burn: pass:normal[xref:token/ERC20.adoc#ERC20-_burn-address-uint256-[`ERC20._burn`]]
  150. :ERC20-_burn: pass:normal[xref:token/ERC20.adoc#ERC20-_burn-address-uint256-[`ERC20._burn`]]
  151. :ERC20-allowance: pass:normal[xref:token/ERC20.adoc#ERC20-allowance-address-address-[`ERC20.allowance`]]
  152. :ERC20: pass:normal[xref:token/ERC20.adoc#ERC20[`ERC20`]]
  153. :xref-ERC20Capped-constructor-uint256-: xref:token/ERC20.adoc#ERC20Capped-constructor-uint256-
  154. :xref-ERC20Capped-cap--: xref:token/ERC20.adoc#ERC20Capped-cap--
  155. :xref-ERC20Capped-_update-address-address-uint256-: xref:token/ERC20.adoc#ERC20Capped-_update-address-address-uint256-
  156. :xref-ERC20-name--: xref:token/ERC20.adoc#ERC20-name--
  157. :xref-ERC20-symbol--: xref:token/ERC20.adoc#ERC20-symbol--
  158. :xref-ERC20-decimals--: xref:token/ERC20.adoc#ERC20-decimals--
  159. :xref-ERC20-totalSupply--: xref:token/ERC20.adoc#ERC20-totalSupply--
  160. :xref-ERC20-balanceOf-address-: xref:token/ERC20.adoc#ERC20-balanceOf-address-
  161. :xref-ERC20-transfer-address-uint256-: xref:token/ERC20.adoc#ERC20-transfer-address-uint256-
  162. :xref-ERC20-allowance-address-address-: xref:token/ERC20.adoc#ERC20-allowance-address-address-
  163. :xref-ERC20-approve-address-uint256-: xref:token/ERC20.adoc#ERC20-approve-address-uint256-
  164. :xref-ERC20-transferFrom-address-address-uint256-: xref:token/ERC20.adoc#ERC20-transferFrom-address-address-uint256-
  165. :xref-ERC20-_transfer-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_transfer-address-address-uint256-
  166. :xref-ERC20-_mint-address-uint256-: xref:token/ERC20.adoc#ERC20-_mint-address-uint256-
  167. :xref-ERC20-_burn-address-uint256-: xref:token/ERC20.adoc#ERC20-_burn-address-uint256-
  168. :xref-ERC20-_approve-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_approve-address-address-uint256-
  169. :xref-ERC20-_approve-address-address-uint256-bool-: xref:token/ERC20.adoc#ERC20-_approve-address-address-uint256-bool-
  170. :xref-ERC20-_spendAllowance-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_spendAllowance-address-address-uint256-
  171. :xref-IERC20-Transfer-address-address-uint256-: xref:token/ERC20.adoc#IERC20-Transfer-address-address-uint256-
  172. :xref-IERC20-Approval-address-address-uint256-: xref:token/ERC20.adoc#IERC20-Approval-address-address-uint256-
  173. :xref-ERC20Capped-ERC20ExceededCap-uint256-uint256-: xref:token/ERC20.adoc#ERC20Capped-ERC20ExceededCap-uint256-uint256-
  174. :xref-ERC20Capped-ERC20InvalidCap-uint256-: xref:token/ERC20.adoc#ERC20Capped-ERC20InvalidCap-uint256-
  175. :xref-IERC20Errors-ERC20InsufficientBalance-address-uint256-uint256-: xref:interfaces.adoc#IERC20Errors-ERC20InsufficientBalance-address-uint256-uint256-
  176. :xref-IERC20Errors-ERC20InvalidSender-address-: xref:interfaces.adoc#IERC20Errors-ERC20InvalidSender-address-
  177. :xref-IERC20Errors-ERC20InvalidReceiver-address-: xref:interfaces.adoc#IERC20Errors-ERC20InvalidReceiver-address-
  178. :xref-IERC20Errors-ERC20InsufficientAllowance-address-uint256-uint256-: xref:interfaces.adoc#IERC20Errors-ERC20InsufficientAllowance-address-uint256-uint256-
  179. :xref-IERC20Errors-ERC20InvalidApprover-address-: xref:interfaces.adoc#IERC20Errors-ERC20InvalidApprover-address-
  180. :xref-IERC20Errors-ERC20InvalidSpender-address-: xref:interfaces.adoc#IERC20Errors-ERC20InvalidSpender-address-
  181. :ERC20-_update: pass:normal[xref:token/ERC20.adoc#ERC20-_update-address-address-uint256-[`ERC20._update`]]
  182. :Pausable-_pause: pass:normal[xref:utils.adoc#Pausable-_pause--[`Pausable._pause`]]
  183. :Pausable-_unpause: pass:normal[xref:utils.adoc#Pausable-_unpause--[`Pausable._unpause`]]
  184. :AccessControl: pass:normal[xref:access.adoc#AccessControl[`AccessControl`]]
  185. :Ownable: pass:normal[xref:access.adoc#Ownable[`Ownable`]]
  186. :xref-ERC20Pausable-_update-address-address-uint256-: xref:token/ERC20.adoc#ERC20Pausable-_update-address-address-uint256-
  187. :xref-Pausable-paused--: xref:utils.adoc#Pausable-paused--
  188. :xref-Pausable-_requireNotPaused--: xref:utils.adoc#Pausable-_requireNotPaused--
  189. :xref-Pausable-_requirePaused--: xref:utils.adoc#Pausable-_requirePaused--
  190. :xref-Pausable-_pause--: xref:utils.adoc#Pausable-_pause--
  191. :xref-Pausable-_unpause--: xref:utils.adoc#Pausable-_unpause--
  192. :xref-ERC20-name--: xref:token/ERC20.adoc#ERC20-name--
  193. :xref-ERC20-symbol--: xref:token/ERC20.adoc#ERC20-symbol--
  194. :xref-ERC20-decimals--: xref:token/ERC20.adoc#ERC20-decimals--
  195. :xref-ERC20-totalSupply--: xref:token/ERC20.adoc#ERC20-totalSupply--
  196. :xref-ERC20-balanceOf-address-: xref:token/ERC20.adoc#ERC20-balanceOf-address-
  197. :xref-ERC20-transfer-address-uint256-: xref:token/ERC20.adoc#ERC20-transfer-address-uint256-
  198. :xref-ERC20-allowance-address-address-: xref:token/ERC20.adoc#ERC20-allowance-address-address-
  199. :xref-ERC20-approve-address-uint256-: xref:token/ERC20.adoc#ERC20-approve-address-uint256-
  200. :xref-ERC20-transferFrom-address-address-uint256-: xref:token/ERC20.adoc#ERC20-transferFrom-address-address-uint256-
  201. :xref-ERC20-_transfer-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_transfer-address-address-uint256-
  202. :xref-ERC20-_mint-address-uint256-: xref:token/ERC20.adoc#ERC20-_mint-address-uint256-
  203. :xref-ERC20-_burn-address-uint256-: xref:token/ERC20.adoc#ERC20-_burn-address-uint256-
  204. :xref-ERC20-_approve-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_approve-address-address-uint256-
  205. :xref-ERC20-_approve-address-address-uint256-bool-: xref:token/ERC20.adoc#ERC20-_approve-address-address-uint256-bool-
  206. :xref-ERC20-_spendAllowance-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_spendAllowance-address-address-uint256-
  207. :xref-Pausable-Paused-address-: xref:utils.adoc#Pausable-Paused-address-
  208. :xref-Pausable-Unpaused-address-: xref:utils.adoc#Pausable-Unpaused-address-
  209. :xref-IERC20-Transfer-address-address-uint256-: xref:token/ERC20.adoc#IERC20-Transfer-address-address-uint256-
  210. :xref-IERC20-Approval-address-address-uint256-: xref:token/ERC20.adoc#IERC20-Approval-address-address-uint256-
  211. :xref-Pausable-EnforcedPause--: xref:utils.adoc#Pausable-EnforcedPause--
  212. :xref-Pausable-ExpectedPause--: xref:utils.adoc#Pausable-ExpectedPause--
  213. :xref-IERC20Errors-ERC20InsufficientBalance-address-uint256-uint256-: xref:interfaces.adoc#IERC20Errors-ERC20InsufficientBalance-address-uint256-uint256-
  214. :xref-IERC20Errors-ERC20InvalidSender-address-: xref:interfaces.adoc#IERC20Errors-ERC20InvalidSender-address-
  215. :xref-IERC20Errors-ERC20InvalidReceiver-address-: xref:interfaces.adoc#IERC20Errors-ERC20InvalidReceiver-address-
  216. :xref-IERC20Errors-ERC20InsufficientAllowance-address-uint256-uint256-: xref:interfaces.adoc#IERC20Errors-ERC20InsufficientAllowance-address-uint256-uint256-
  217. :xref-IERC20Errors-ERC20InvalidApprover-address-: xref:interfaces.adoc#IERC20Errors-ERC20InvalidApprover-address-
  218. :xref-IERC20Errors-ERC20InvalidSpender-address-: xref:interfaces.adoc#IERC20Errors-ERC20InvalidSpender-address-
  219. :ERC20-_update: pass:normal[xref:token/ERC20.adoc#ERC20-_update-address-address-uint256-[`ERC20._update`]]
  220. :xref-ERC20Votes-_maxSupply--: xref:token/ERC20.adoc#ERC20Votes-_maxSupply--
  221. :xref-ERC20Votes-_update-address-address-uint256-: xref:token/ERC20.adoc#ERC20Votes-_update-address-address-uint256-
  222. :xref-ERC20Votes-_getVotingUnits-address-: xref:token/ERC20.adoc#ERC20Votes-_getVotingUnits-address-
  223. :xref-ERC20Votes-numCheckpoints-address-: xref:token/ERC20.adoc#ERC20Votes-numCheckpoints-address-
  224. :xref-ERC20Votes-checkpoints-address-uint32-: xref:token/ERC20.adoc#ERC20Votes-checkpoints-address-uint32-
  225. :xref-Votes-clock--: xref:governance.adoc#Votes-clock--
  226. :xref-Votes-CLOCK_MODE--: xref:governance.adoc#Votes-CLOCK_MODE--
  227. :xref-Votes-getVotes-address-: xref:governance.adoc#Votes-getVotes-address-
  228. :xref-Votes-getPastVotes-address-uint256-: xref:governance.adoc#Votes-getPastVotes-address-uint256-
  229. :xref-Votes-getPastTotalSupply-uint256-: xref:governance.adoc#Votes-getPastTotalSupply-uint256-
  230. :xref-Votes-_getTotalSupply--: xref:governance.adoc#Votes-_getTotalSupply--
  231. :xref-Votes-delegates-address-: xref:governance.adoc#Votes-delegates-address-
  232. :xref-Votes-delegate-address-: xref:governance.adoc#Votes-delegate-address-
  233. :xref-Votes-delegateBySig-address-uint256-uint256-uint8-bytes32-bytes32-: xref:governance.adoc#Votes-delegateBySig-address-uint256-uint256-uint8-bytes32-bytes32-
  234. :xref-Votes-_delegate-address-address-: xref:governance.adoc#Votes-_delegate-address-address-
  235. :xref-Votes-_transferVotingUnits-address-address-uint256-: xref:governance.adoc#Votes-_transferVotingUnits-address-address-uint256-
  236. :xref-Votes-_numCheckpoints-address-: xref:governance.adoc#Votes-_numCheckpoints-address-
  237. :xref-Votes-_checkpoints-address-uint32-: xref:governance.adoc#Votes-_checkpoints-address-uint32-
  238. :xref-Nonces-nonces-address-: xref:utils.adoc#Nonces-nonces-address-
  239. :xref-Nonces-_useNonce-address-: xref:utils.adoc#Nonces-_useNonce-address-
  240. :xref-Nonces-_useCheckedNonce-address-uint256-: xref:utils.adoc#Nonces-_useCheckedNonce-address-uint256-
  241. :xref-EIP712-_domainSeparatorV4--: xref:utils.adoc#EIP712-_domainSeparatorV4--
  242. :xref-EIP712-_hashTypedDataV4-bytes32-: xref:utils.adoc#EIP712-_hashTypedDataV4-bytes32-
  243. :xref-EIP712-eip712Domain--: xref:utils.adoc#EIP712-eip712Domain--
  244. :xref-EIP712-_EIP712Name--: xref:utils.adoc#EIP712-_EIP712Name--
  245. :xref-EIP712-_EIP712Version--: xref:utils.adoc#EIP712-_EIP712Version--
  246. :xref-ERC20-name--: xref:token/ERC20.adoc#ERC20-name--
  247. :xref-ERC20-symbol--: xref:token/ERC20.adoc#ERC20-symbol--
  248. :xref-ERC20-decimals--: xref:token/ERC20.adoc#ERC20-decimals--
  249. :xref-ERC20-totalSupply--: xref:token/ERC20.adoc#ERC20-totalSupply--
  250. :xref-ERC20-balanceOf-address-: xref:token/ERC20.adoc#ERC20-balanceOf-address-
  251. :xref-ERC20-transfer-address-uint256-: xref:token/ERC20.adoc#ERC20-transfer-address-uint256-
  252. :xref-ERC20-allowance-address-address-: xref:token/ERC20.adoc#ERC20-allowance-address-address-
  253. :xref-ERC20-approve-address-uint256-: xref:token/ERC20.adoc#ERC20-approve-address-uint256-
  254. :xref-ERC20-transferFrom-address-address-uint256-: xref:token/ERC20.adoc#ERC20-transferFrom-address-address-uint256-
  255. :xref-ERC20-_transfer-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_transfer-address-address-uint256-
  256. :xref-ERC20-_mint-address-uint256-: xref:token/ERC20.adoc#ERC20-_mint-address-uint256-
  257. :xref-ERC20-_burn-address-uint256-: xref:token/ERC20.adoc#ERC20-_burn-address-uint256-
  258. :xref-ERC20-_approve-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_approve-address-address-uint256-
  259. :xref-ERC20-_approve-address-address-uint256-bool-: xref:token/ERC20.adoc#ERC20-_approve-address-address-uint256-bool-
  260. :xref-ERC20-_spendAllowance-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_spendAllowance-address-address-uint256-
  261. :xref-IVotes-DelegateChanged-address-address-address-: xref:governance.adoc#IVotes-DelegateChanged-address-address-address-
  262. :xref-IVotes-DelegateVotesChanged-address-uint256-uint256-: xref:governance.adoc#IVotes-DelegateVotesChanged-address-uint256-uint256-
  263. :xref-IERC5267-EIP712DomainChanged--: xref:interfaces.adoc#IERC5267-EIP712DomainChanged--
  264. :xref-IERC20-Transfer-address-address-uint256-: xref:token/ERC20.adoc#IERC20-Transfer-address-address-uint256-
  265. :xref-IERC20-Approval-address-address-uint256-: xref:token/ERC20.adoc#IERC20-Approval-address-address-uint256-
  266. :xref-ERC20Votes-ERC20ExceededSafeSupply-uint256-uint256-: xref:token/ERC20.adoc#ERC20Votes-ERC20ExceededSafeSupply-uint256-uint256-
  267. :xref-Votes-ERC6372InconsistentClock--: xref:governance.adoc#Votes-ERC6372InconsistentClock--
  268. :xref-Votes-ERC5805FutureLookup-uint256-uint48-: xref:governance.adoc#Votes-ERC5805FutureLookup-uint256-uint48-
  269. :xref-IVotes-VotesExpiredSignature-uint256-: xref:governance.adoc#IVotes-VotesExpiredSignature-uint256-
  270. :xref-Nonces-InvalidAccountNonce-address-uint256-: xref:utils.adoc#Nonces-InvalidAccountNonce-address-uint256-
  271. :xref-IERC20Errors-ERC20InsufficientBalance-address-uint256-uint256-: xref:interfaces.adoc#IERC20Errors-ERC20InsufficientBalance-address-uint256-uint256-
  272. :xref-IERC20Errors-ERC20InvalidSender-address-: xref:interfaces.adoc#IERC20Errors-ERC20InvalidSender-address-
  273. :xref-IERC20Errors-ERC20InvalidReceiver-address-: xref:interfaces.adoc#IERC20Errors-ERC20InvalidReceiver-address-
  274. :xref-IERC20Errors-ERC20InsufficientAllowance-address-uint256-uint256-: xref:interfaces.adoc#IERC20Errors-ERC20InsufficientAllowance-address-uint256-uint256-
  275. :xref-IERC20Errors-ERC20InvalidApprover-address-: xref:interfaces.adoc#IERC20Errors-ERC20InvalidApprover-address-
  276. :xref-IERC20Errors-ERC20InvalidSpender-address-: xref:interfaces.adoc#IERC20Errors-ERC20InvalidSpender-address-
  277. :Votes: pass:normal[xref:governance.adoc#Votes[`Votes`]]
  278. :IVotes-DelegateVotesChanged: pass:normal[xref:governance.adoc#IVotes-DelegateVotesChanged-address-uint256-uint256-[`IVotes.DelegateVotesChanged`]]
  279. :ERC20Votes: pass:normal[xref:token/ERC20.adoc#ERC20Votes[`ERC20Votes`]]
  280. :xref-ERC20Wrapper-constructor-contract-IERC20-: xref:token/ERC20.adoc#ERC20Wrapper-constructor-contract-IERC20-
  281. :xref-ERC20Wrapper-decimals--: xref:token/ERC20.adoc#ERC20Wrapper-decimals--
  282. :xref-ERC20Wrapper-underlying--: xref:token/ERC20.adoc#ERC20Wrapper-underlying--
  283. :xref-ERC20Wrapper-depositFor-address-uint256-: xref:token/ERC20.adoc#ERC20Wrapper-depositFor-address-uint256-
  284. :xref-ERC20Wrapper-withdrawTo-address-uint256-: xref:token/ERC20.adoc#ERC20Wrapper-withdrawTo-address-uint256-
  285. :xref-ERC20Wrapper-_recover-address-: xref:token/ERC20.adoc#ERC20Wrapper-_recover-address-
  286. :xref-ERC20-name--: xref:token/ERC20.adoc#ERC20-name--
  287. :xref-ERC20-symbol--: xref:token/ERC20.adoc#ERC20-symbol--
  288. :xref-ERC20-totalSupply--: xref:token/ERC20.adoc#ERC20-totalSupply--
  289. :xref-ERC20-balanceOf-address-: xref:token/ERC20.adoc#ERC20-balanceOf-address-
  290. :xref-ERC20-transfer-address-uint256-: xref:token/ERC20.adoc#ERC20-transfer-address-uint256-
  291. :xref-ERC20-allowance-address-address-: xref:token/ERC20.adoc#ERC20-allowance-address-address-
  292. :xref-ERC20-approve-address-uint256-: xref:token/ERC20.adoc#ERC20-approve-address-uint256-
  293. :xref-ERC20-transferFrom-address-address-uint256-: xref:token/ERC20.adoc#ERC20-transferFrom-address-address-uint256-
  294. :xref-ERC20-_transfer-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_transfer-address-address-uint256-
  295. :xref-ERC20-_update-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_update-address-address-uint256-
  296. :xref-ERC20-_mint-address-uint256-: xref:token/ERC20.adoc#ERC20-_mint-address-uint256-
  297. :xref-ERC20-_burn-address-uint256-: xref:token/ERC20.adoc#ERC20-_burn-address-uint256-
  298. :xref-ERC20-_approve-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_approve-address-address-uint256-
  299. :xref-ERC20-_approve-address-address-uint256-bool-: xref:token/ERC20.adoc#ERC20-_approve-address-address-uint256-bool-
  300. :xref-ERC20-_spendAllowance-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_spendAllowance-address-address-uint256-
  301. :xref-IERC20-Transfer-address-address-uint256-: xref:token/ERC20.adoc#IERC20-Transfer-address-address-uint256-
  302. :xref-IERC20-Approval-address-address-uint256-: xref:token/ERC20.adoc#IERC20-Approval-address-address-uint256-
  303. :xref-ERC20Wrapper-ERC20InvalidUnderlying-address-: xref:token/ERC20.adoc#ERC20Wrapper-ERC20InvalidUnderlying-address-
  304. :xref-IERC20Errors-ERC20InsufficientBalance-address-uint256-uint256-: xref:interfaces.adoc#IERC20Errors-ERC20InsufficientBalance-address-uint256-uint256-
  305. :xref-IERC20Errors-ERC20InvalidSender-address-: xref:interfaces.adoc#IERC20Errors-ERC20InvalidSender-address-
  306. :xref-IERC20Errors-ERC20InvalidReceiver-address-: xref:interfaces.adoc#IERC20Errors-ERC20InvalidReceiver-address-
  307. :xref-IERC20Errors-ERC20InsufficientAllowance-address-uint256-uint256-: xref:interfaces.adoc#IERC20Errors-ERC20InsufficientAllowance-address-uint256-uint256-
  308. :xref-IERC20Errors-ERC20InvalidApprover-address-: xref:interfaces.adoc#IERC20Errors-ERC20InvalidApprover-address-
  309. :xref-IERC20Errors-ERC20InvalidSpender-address-: xref:interfaces.adoc#IERC20Errors-ERC20InvalidSpender-address-
  310. :ERC20-decimals: pass:normal[xref:token/ERC20.adoc#ERC20-decimals--[`ERC20.decimals`]]
  311. :ERC20Capped: pass:normal[xref:token/ERC20.adoc#ERC20Capped[`ERC20Capped`]]
  312. :ERC20Votes: pass:normal[xref:token/ERC20.adoc#ERC20Votes[`ERC20Votes`]]
  313. :xref-ERC20FlashMint-maxFlashLoan-address-: xref:token/ERC20.adoc#ERC20FlashMint-maxFlashLoan-address-
  314. :xref-ERC20FlashMint-flashFee-address-uint256-: xref:token/ERC20.adoc#ERC20FlashMint-flashFee-address-uint256-
  315. :xref-ERC20FlashMint-_flashFee-address-uint256-: xref:token/ERC20.adoc#ERC20FlashMint-_flashFee-address-uint256-
  316. :xref-ERC20FlashMint-_flashFeeReceiver--: xref:token/ERC20.adoc#ERC20FlashMint-_flashFeeReceiver--
  317. :xref-ERC20FlashMint-flashLoan-contract-IERC3156FlashBorrower-address-uint256-bytes-: xref:token/ERC20.adoc#ERC20FlashMint-flashLoan-contract-IERC3156FlashBorrower-address-uint256-bytes-
  318. :xref-ERC20-name--: xref:token/ERC20.adoc#ERC20-name--
  319. :xref-ERC20-symbol--: xref:token/ERC20.adoc#ERC20-symbol--
  320. :xref-ERC20-decimals--: xref:token/ERC20.adoc#ERC20-decimals--
  321. :xref-ERC20-totalSupply--: xref:token/ERC20.adoc#ERC20-totalSupply--
  322. :xref-ERC20-balanceOf-address-: xref:token/ERC20.adoc#ERC20-balanceOf-address-
  323. :xref-ERC20-transfer-address-uint256-: xref:token/ERC20.adoc#ERC20-transfer-address-uint256-
  324. :xref-ERC20-allowance-address-address-: xref:token/ERC20.adoc#ERC20-allowance-address-address-
  325. :xref-ERC20-approve-address-uint256-: xref:token/ERC20.adoc#ERC20-approve-address-uint256-
  326. :xref-ERC20-transferFrom-address-address-uint256-: xref:token/ERC20.adoc#ERC20-transferFrom-address-address-uint256-
  327. :xref-ERC20-_transfer-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_transfer-address-address-uint256-
  328. :xref-ERC20-_update-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_update-address-address-uint256-
  329. :xref-ERC20-_mint-address-uint256-: xref:token/ERC20.adoc#ERC20-_mint-address-uint256-
  330. :xref-ERC20-_burn-address-uint256-: xref:token/ERC20.adoc#ERC20-_burn-address-uint256-
  331. :xref-ERC20-_approve-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_approve-address-address-uint256-
  332. :xref-ERC20-_approve-address-address-uint256-bool-: xref:token/ERC20.adoc#ERC20-_approve-address-address-uint256-bool-
  333. :xref-ERC20-_spendAllowance-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_spendAllowance-address-address-uint256-
  334. :xref-IERC20-Transfer-address-address-uint256-: xref:token/ERC20.adoc#IERC20-Transfer-address-address-uint256-
  335. :xref-IERC20-Approval-address-address-uint256-: xref:token/ERC20.adoc#IERC20-Approval-address-address-uint256-
  336. :xref-ERC20FlashMint-ERC3156UnsupportedToken-address-: xref:token/ERC20.adoc#ERC20FlashMint-ERC3156UnsupportedToken-address-
  337. :xref-ERC20FlashMint-ERC3156ExceededMaxLoan-uint256-: xref:token/ERC20.adoc#ERC20FlashMint-ERC3156ExceededMaxLoan-uint256-
  338. :xref-ERC20FlashMint-ERC3156InvalidReceiver-address-: xref:token/ERC20.adoc#ERC20FlashMint-ERC3156InvalidReceiver-address-
  339. :xref-IERC20Errors-ERC20InsufficientBalance-address-uint256-uint256-: xref:interfaces.adoc#IERC20Errors-ERC20InsufficientBalance-address-uint256-uint256-
  340. :xref-IERC20Errors-ERC20InvalidSender-address-: xref:interfaces.adoc#IERC20Errors-ERC20InvalidSender-address-
  341. :xref-IERC20Errors-ERC20InvalidReceiver-address-: xref:interfaces.adoc#IERC20Errors-ERC20InvalidReceiver-address-
  342. :xref-IERC20Errors-ERC20InsufficientAllowance-address-uint256-uint256-: xref:interfaces.adoc#IERC20Errors-ERC20InsufficientAllowance-address-uint256-uint256-
  343. :xref-IERC20Errors-ERC20InvalidApprover-address-: xref:interfaces.adoc#IERC20Errors-ERC20InvalidApprover-address-
  344. :xref-IERC20Errors-ERC20InvalidSpender-address-: xref:interfaces.adoc#IERC20Errors-ERC20InvalidSpender-address-
  345. :IERC3156FlashBorrower: pass:normal[xref:interfaces.adoc#IERC3156FlashBorrower[`IERC3156FlashBorrower`]]
  346. :xref-ERC4626-constructor-contract-IERC20-: xref:token/ERC20.adoc#ERC4626-constructor-contract-IERC20-
  347. :xref-ERC4626-decimals--: xref:token/ERC20.adoc#ERC4626-decimals--
  348. :xref-ERC4626-asset--: xref:token/ERC20.adoc#ERC4626-asset--
  349. :xref-ERC4626-totalAssets--: xref:token/ERC20.adoc#ERC4626-totalAssets--
  350. :xref-ERC4626-convertToShares-uint256-: xref:token/ERC20.adoc#ERC4626-convertToShares-uint256-
  351. :xref-ERC4626-convertToAssets-uint256-: xref:token/ERC20.adoc#ERC4626-convertToAssets-uint256-
  352. :xref-ERC4626-maxDeposit-address-: xref:token/ERC20.adoc#ERC4626-maxDeposit-address-
  353. :xref-ERC4626-maxMint-address-: xref:token/ERC20.adoc#ERC4626-maxMint-address-
  354. :xref-ERC4626-maxWithdraw-address-: xref:token/ERC20.adoc#ERC4626-maxWithdraw-address-
  355. :xref-ERC4626-maxRedeem-address-: xref:token/ERC20.adoc#ERC4626-maxRedeem-address-
  356. :xref-ERC4626-previewDeposit-uint256-: xref:token/ERC20.adoc#ERC4626-previewDeposit-uint256-
  357. :xref-ERC4626-previewMint-uint256-: xref:token/ERC20.adoc#ERC4626-previewMint-uint256-
  358. :xref-ERC4626-previewWithdraw-uint256-: xref:token/ERC20.adoc#ERC4626-previewWithdraw-uint256-
  359. :xref-ERC4626-previewRedeem-uint256-: xref:token/ERC20.adoc#ERC4626-previewRedeem-uint256-
  360. :xref-ERC4626-deposit-uint256-address-: xref:token/ERC20.adoc#ERC4626-deposit-uint256-address-
  361. :xref-ERC4626-mint-uint256-address-: xref:token/ERC20.adoc#ERC4626-mint-uint256-address-
  362. :xref-ERC4626-withdraw-uint256-address-address-: xref:token/ERC20.adoc#ERC4626-withdraw-uint256-address-address-
  363. :xref-ERC4626-redeem-uint256-address-address-: xref:token/ERC20.adoc#ERC4626-redeem-uint256-address-address-
  364. :xref-ERC4626-_convertToShares-uint256-enum-Math-Rounding-: xref:token/ERC20.adoc#ERC4626-_convertToShares-uint256-enum-Math-Rounding-
  365. :xref-ERC4626-_convertToAssets-uint256-enum-Math-Rounding-: xref:token/ERC20.adoc#ERC4626-_convertToAssets-uint256-enum-Math-Rounding-
  366. :xref-ERC4626-_deposit-address-address-uint256-uint256-: xref:token/ERC20.adoc#ERC4626-_deposit-address-address-uint256-uint256-
  367. :xref-ERC4626-_withdraw-address-address-address-uint256-uint256-: xref:token/ERC20.adoc#ERC4626-_withdraw-address-address-address-uint256-uint256-
  368. :xref-ERC4626-_decimalsOffset--: xref:token/ERC20.adoc#ERC4626-_decimalsOffset--
  369. :xref-ERC20-name--: xref:token/ERC20.adoc#ERC20-name--
  370. :xref-ERC20-symbol--: xref:token/ERC20.adoc#ERC20-symbol--
  371. :xref-ERC20-totalSupply--: xref:token/ERC20.adoc#ERC20-totalSupply--
  372. :xref-ERC20-balanceOf-address-: xref:token/ERC20.adoc#ERC20-balanceOf-address-
  373. :xref-ERC20-transfer-address-uint256-: xref:token/ERC20.adoc#ERC20-transfer-address-uint256-
  374. :xref-ERC20-allowance-address-address-: xref:token/ERC20.adoc#ERC20-allowance-address-address-
  375. :xref-ERC20-approve-address-uint256-: xref:token/ERC20.adoc#ERC20-approve-address-uint256-
  376. :xref-ERC20-transferFrom-address-address-uint256-: xref:token/ERC20.adoc#ERC20-transferFrom-address-address-uint256-
  377. :xref-ERC20-_transfer-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_transfer-address-address-uint256-
  378. :xref-ERC20-_update-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_update-address-address-uint256-
  379. :xref-ERC20-_mint-address-uint256-: xref:token/ERC20.adoc#ERC20-_mint-address-uint256-
  380. :xref-ERC20-_burn-address-uint256-: xref:token/ERC20.adoc#ERC20-_burn-address-uint256-
  381. :xref-ERC20-_approve-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_approve-address-address-uint256-
  382. :xref-ERC20-_approve-address-address-uint256-bool-: xref:token/ERC20.adoc#ERC20-_approve-address-address-uint256-bool-
  383. :xref-ERC20-_spendAllowance-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_spendAllowance-address-address-uint256-
  384. :xref-IERC4626-Deposit-address-address-uint256-uint256-: xref:interfaces.adoc#IERC4626-Deposit-address-address-uint256-uint256-
  385. :xref-IERC4626-Withdraw-address-address-address-uint256-uint256-: xref:interfaces.adoc#IERC4626-Withdraw-address-address-address-uint256-uint256-
  386. :xref-IERC20-Transfer-address-address-uint256-: xref:token/ERC20.adoc#IERC20-Transfer-address-address-uint256-
  387. :xref-IERC20-Approval-address-address-uint256-: xref:token/ERC20.adoc#IERC20-Approval-address-address-uint256-
  388. :xref-ERC4626-ERC4626ExceededMaxDeposit-address-uint256-uint256-: xref:token/ERC20.adoc#ERC4626-ERC4626ExceededMaxDeposit-address-uint256-uint256-
  389. :xref-ERC4626-ERC4626ExceededMaxMint-address-uint256-uint256-: xref:token/ERC20.adoc#ERC4626-ERC4626ExceededMaxMint-address-uint256-uint256-
  390. :xref-ERC4626-ERC4626ExceededMaxWithdraw-address-uint256-uint256-: xref:token/ERC20.adoc#ERC4626-ERC4626ExceededMaxWithdraw-address-uint256-uint256-
  391. :xref-ERC4626-ERC4626ExceededMaxRedeem-address-uint256-uint256-: xref:token/ERC20.adoc#ERC4626-ERC4626ExceededMaxRedeem-address-uint256-uint256-
  392. :xref-IERC20Errors-ERC20InsufficientBalance-address-uint256-uint256-: xref:interfaces.adoc#IERC20Errors-ERC20InsufficientBalance-address-uint256-uint256-
  393. :xref-IERC20Errors-ERC20InvalidSender-address-: xref:interfaces.adoc#IERC20Errors-ERC20InvalidSender-address-
  394. :xref-IERC20Errors-ERC20InvalidReceiver-address-: xref:interfaces.adoc#IERC20Errors-ERC20InvalidReceiver-address-
  395. :xref-IERC20Errors-ERC20InsufficientAllowance-address-uint256-uint256-: xref:interfaces.adoc#IERC20Errors-ERC20InsufficientAllowance-address-uint256-uint256-
  396. :xref-IERC20Errors-ERC20InvalidApprover-address-: xref:interfaces.adoc#IERC20Errors-ERC20InvalidApprover-address-
  397. :xref-IERC20Errors-ERC20InvalidSpender-address-: xref:interfaces.adoc#IERC20Errors-ERC20InvalidSpender-address-
  398. :IERC20Metadata-decimals: pass:normal[xref:token/ERC20.adoc#IERC20Metadata-decimals--[`IERC20Metadata.decimals`]]
  399. :IERC4626-asset: pass:normal[xref:interfaces.adoc#IERC4626-asset--[`IERC4626.asset`]]
  400. :IERC4626-totalAssets: pass:normal[xref:interfaces.adoc#IERC4626-totalAssets--[`IERC4626.totalAssets`]]
  401. :IERC4626-convertToShares: pass:normal[xref:interfaces.adoc#IERC4626-convertToShares-uint256-[`IERC4626.convertToShares`]]
  402. :IERC4626-convertToAssets: pass:normal[xref:interfaces.adoc#IERC4626-convertToAssets-uint256-[`IERC4626.convertToAssets`]]
  403. :IERC4626-maxDeposit: pass:normal[xref:interfaces.adoc#IERC4626-maxDeposit-address-[`IERC4626.maxDeposit`]]
  404. :IERC4626-maxMint: pass:normal[xref:interfaces.adoc#IERC4626-maxMint-address-[`IERC4626.maxMint`]]
  405. :IERC4626-maxWithdraw: pass:normal[xref:interfaces.adoc#IERC4626-maxWithdraw-address-[`IERC4626.maxWithdraw`]]
  406. :IERC4626-maxRedeem: pass:normal[xref:interfaces.adoc#IERC4626-maxRedeem-address-[`IERC4626.maxRedeem`]]
  407. :IERC4626-previewDeposit: pass:normal[xref:interfaces.adoc#IERC4626-previewDeposit-uint256-[`IERC4626.previewDeposit`]]
  408. :IERC4626-previewMint: pass:normal[xref:interfaces.adoc#IERC4626-previewMint-uint256-[`IERC4626.previewMint`]]
  409. :IERC4626-previewWithdraw: pass:normal[xref:interfaces.adoc#IERC4626-previewWithdraw-uint256-[`IERC4626.previewWithdraw`]]
  410. :IERC4626-previewRedeem: pass:normal[xref:interfaces.adoc#IERC4626-previewRedeem-uint256-[`IERC4626.previewRedeem`]]
  411. :IERC4626-deposit: pass:normal[xref:interfaces.adoc#IERC4626-deposit-uint256-address-[`IERC4626.deposit`]]
  412. :IERC4626-mint: pass:normal[xref:interfaces.adoc#IERC4626-mint-uint256-address-[`IERC4626.mint`]]
  413. :IERC4626-withdraw: pass:normal[xref:interfaces.adoc#IERC4626-withdraw-uint256-address-address-[`IERC4626.withdraw`]]
  414. :IERC4626-redeem: pass:normal[xref:interfaces.adoc#IERC4626-redeem-uint256-address-address-[`IERC4626.redeem`]]
  415. :xref-SafeERC20-safeTransfer-contract-IERC20-address-uint256-: xref:token/ERC20.adoc#SafeERC20-safeTransfer-contract-IERC20-address-uint256-
  416. :xref-SafeERC20-safeTransferFrom-contract-IERC20-address-address-uint256-: xref:token/ERC20.adoc#SafeERC20-safeTransferFrom-contract-IERC20-address-address-uint256-
  417. :xref-SafeERC20-safeIncreaseAllowance-contract-IERC20-address-uint256-: xref:token/ERC20.adoc#SafeERC20-safeIncreaseAllowance-contract-IERC20-address-uint256-
  418. :xref-SafeERC20-safeDecreaseAllowance-contract-IERC20-address-uint256-: xref:token/ERC20.adoc#SafeERC20-safeDecreaseAllowance-contract-IERC20-address-uint256-
  419. :xref-SafeERC20-forceApprove-contract-IERC20-address-uint256-: xref:token/ERC20.adoc#SafeERC20-forceApprove-contract-IERC20-address-uint256-
  420. :xref-SafeERC20-SafeERC20FailedOperation-address-: xref:token/ERC20.adoc#SafeERC20-SafeERC20FailedOperation-address-
  421. :xref-SafeERC20-SafeERC20FailedDecreaseAllowance-address-uint256-uint256-: xref:token/ERC20.adoc#SafeERC20-SafeERC20FailedDecreaseAllowance-address-uint256-uint256-
  422. = ERC 20
  423. [.readme-notice]
  424. NOTE: This document is better viewed at https://docs.openzeppelin.com/contracts/api/token/erc20
  425. This set of interfaces, contracts, and utilities are all related to the https://eips.ethereum.org/EIPS/eip-20[ERC20 Token Standard].
  426. TIP: For an overview of ERC20 tokens and a walk through on how to create a token contract read our xref:ROOT:erc20.adoc[ERC20 guide].
  427. There are a few core contracts that implement the behavior specified in the EIP:
  428. * {IERC20}: the interface all ERC20 implementations should conform to.
  429. * {IERC20Metadata}: the extended ERC20 interface including the <<ERC20-name,`name`>>, <<ERC20-symbol,`symbol`>> and <<ERC20-decimals,`decimals`>> functions.
  430. * {ERC20}: the implementation of the ERC20 interface, including the <<ERC20-name,`name`>>, <<ERC20-symbol,`symbol`>> and <<ERC20-decimals,`decimals`>> optional standard extension to the base interface.
  431. Additionally there are multiple custom extensions, including:
  432. * {ERC20Permit}: gasless approval of tokens (standardized as ERC2612).
  433. * {ERC20Burnable}: destruction of own tokens.
  434. * {ERC20Capped}: enforcement of a cap to the total supply when minting tokens.
  435. * {ERC20Pausable}: ability to pause token transfers.
  436. * {ERC20FlashMint}: token level support for flash loans through the minting and burning of ephemeral tokens (standardized as ERC3156).
  437. * {ERC20Votes}: support for voting and vote delegation.
  438. * {ERC20Wrapper}: wrapper to create an ERC20 backed by another ERC20, with deposit and withdraw methods. Useful in conjunction with {ERC20Votes}.
  439. * {ERC4626}: tokenized vault that manages shares (represented as ERC20) that are backed by assets (another ERC20).
  440. Finally, there are some utilities to interact with ERC20 contracts in various ways:
  441. * {SafeERC20}: a wrapper around the interface that eliminates the need to handle boolean return values.
  442. Other utilities that support ERC20 assets can be found in codebase:
  443. * ERC20 tokens can be timelocked (held tokens for a beneficiary until a specified time) or vested (released following a given schedule) using a {VestingWallet}.
  444. NOTE: This core set of contracts is designed to be unopinionated, allowing developers to access the internal functions in ERC20 (such as <<ERC20-_mint-address-uint256-,`_mint`>>) and expose them as external functions in the way they prefer.
  445. == Core
  446. :Transfer: pass:normal[xref:#IERC20-Transfer-address-address-uint256-[`++Transfer++`]]
  447. :Approval: pass:normal[xref:#IERC20-Approval-address-address-uint256-[`++Approval++`]]
  448. :totalSupply: pass:normal[xref:#IERC20-totalSupply--[`++totalSupply++`]]
  449. :balanceOf: pass:normal[xref:#IERC20-balanceOf-address-[`++balanceOf++`]]
  450. :transfer: pass:normal[xref:#IERC20-transfer-address-uint256-[`++transfer++`]]
  451. :allowance: pass:normal[xref:#IERC20-allowance-address-address-[`++allowance++`]]
  452. :approve: pass:normal[xref:#IERC20-approve-address-uint256-[`++approve++`]]
  453. :transferFrom: pass:normal[xref:#IERC20-transferFrom-address-address-uint256-[`++transferFrom++`]]
  454. [.contract]
  455. [[IERC20]]
  456. === `++IERC20++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.0.0-rc.2/contracts/token/ERC20/IERC20.sol[{github-icon},role=heading-link]
  457. [.hljs-theme-light.nopadding]
  458. ```solidity
  459. import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
  460. ```
  461. Interface of the ERC20 standard as defined in the EIP.
  462. [.contract-index]
  463. .Functions
  464. --
  465. * {xref-IERC20-totalSupply--}[`++totalSupply()++`]
  466. * {xref-IERC20-balanceOf-address-}[`++balanceOf(account)++`]
  467. * {xref-IERC20-transfer-address-uint256-}[`++transfer(to, value)++`]
  468. * {xref-IERC20-allowance-address-address-}[`++allowance(owner, spender)++`]
  469. * {xref-IERC20-approve-address-uint256-}[`++approve(spender, value)++`]
  470. * {xref-IERC20-transferFrom-address-address-uint256-}[`++transferFrom(from, to, value)++`]
  471. --
  472. [.contract-index]
  473. .Events
  474. --
  475. * {xref-IERC20-Transfer-address-address-uint256-}[`++Transfer(from, to, value)++`]
  476. * {xref-IERC20-Approval-address-address-uint256-}[`++Approval(owner, spender, value)++`]
  477. --
  478. [.contract-item]
  479. [[IERC20-totalSupply--]]
  480. ==== `[.contract-item-name]#++totalSupply++#++() → uint256++` [.item-kind]#external#
  481. Returns the value of tokens in existence.
  482. [.contract-item]
  483. [[IERC20-balanceOf-address-]]
  484. ==== `[.contract-item-name]#++balanceOf++#++(address account) → uint256++` [.item-kind]#external#
  485. Returns the value of tokens owned by `account`.
  486. [.contract-item]
  487. [[IERC20-transfer-address-uint256-]]
  488. ==== `[.contract-item-name]#++transfer++#++(address to, uint256 value) → bool++` [.item-kind]#external#
  489. Moves a `value` amount of tokens from the caller's account to `to`.
  490. Returns a boolean value indicating whether the operation succeeded.
  491. Emits a {Transfer} event.
  492. [.contract-item]
  493. [[IERC20-allowance-address-address-]]
  494. ==== `[.contract-item-name]#++allowance++#++(address owner, address spender) → uint256++` [.item-kind]#external#
  495. Returns the remaining number of tokens that `spender` will be
  496. allowed to spend on behalf of `owner` through {transferFrom}. This is
  497. zero by default.
  498. This value changes when {approve} or {transferFrom} are called.
  499. [.contract-item]
  500. [[IERC20-approve-address-uint256-]]
  501. ==== `[.contract-item-name]#++approve++#++(address spender, uint256 value) → bool++` [.item-kind]#external#
  502. Sets a `value` amount of tokens as the allowance of `spender` over the
  503. caller's tokens.
  504. Returns a boolean value indicating whether the operation succeeded.
  505. IMPORTANT: Beware that changing an allowance with this method brings the risk
  506. that someone may use both the old and the new allowance by unfortunate
  507. transaction ordering. One possible solution to mitigate this race
  508. condition is to first reduce the spender's allowance to 0 and set the
  509. desired value afterwards:
  510. https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
  511. Emits an {Approval} event.
  512. [.contract-item]
  513. [[IERC20-transferFrom-address-address-uint256-]]
  514. ==== `[.contract-item-name]#++transferFrom++#++(address from, address to, uint256 value) → bool++` [.item-kind]#external#
  515. Moves a `value` amount of tokens from `from` to `to` using the
  516. allowance mechanism. `value` is then deducted from the caller's
  517. allowance.
  518. Returns a boolean value indicating whether the operation succeeded.
  519. Emits a {Transfer} event.
  520. [.contract-item]
  521. [[IERC20-Transfer-address-address-uint256-]]
  522. ==== `[.contract-item-name]#++Transfer++#++(address indexed from, address indexed to, uint256 value)++` [.item-kind]#event#
  523. Emitted when `value` tokens are moved from one account (`from`) to
  524. another (`to`).
  525. Note that `value` may be zero.
  526. [.contract-item]
  527. [[IERC20-Approval-address-address-uint256-]]
  528. ==== `[.contract-item-name]#++Approval++#++(address indexed owner, address indexed spender, uint256 value)++` [.item-kind]#event#
  529. Emitted when the allowance of a `spender` for an `owner` is set by
  530. a call to {approve}. `value` is the new allowance.
  531. :name: pass:normal[xref:#IERC20Metadata-name--[`++name++`]]
  532. :symbol: pass:normal[xref:#IERC20Metadata-symbol--[`++symbol++`]]
  533. :decimals: pass:normal[xref:#IERC20Metadata-decimals--[`++decimals++`]]
  534. [.contract]
  535. [[IERC20Metadata]]
  536. === `++IERC20Metadata++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.0.0-rc.2/contracts/token/ERC20/extensions/IERC20Metadata.sol[{github-icon},role=heading-link]
  537. [.hljs-theme-light.nopadding]
  538. ```solidity
  539. import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
  540. ```
  541. Interface for the optional metadata functions from the ERC20 standard.
  542. [.contract-index]
  543. .Functions
  544. --
  545. * {xref-IERC20Metadata-name--}[`++name()++`]
  546. * {xref-IERC20Metadata-symbol--}[`++symbol()++`]
  547. * {xref-IERC20Metadata-decimals--}[`++decimals()++`]
  548. [.contract-subindex-inherited]
  549. .IERC20
  550. * {xref-IERC20-totalSupply--}[`++totalSupply()++`]
  551. * {xref-IERC20-balanceOf-address-}[`++balanceOf(account)++`]
  552. * {xref-IERC20-transfer-address-uint256-}[`++transfer(to, value)++`]
  553. * {xref-IERC20-allowance-address-address-}[`++allowance(owner, spender)++`]
  554. * {xref-IERC20-approve-address-uint256-}[`++approve(spender, value)++`]
  555. * {xref-IERC20-transferFrom-address-address-uint256-}[`++transferFrom(from, to, value)++`]
  556. --
  557. [.contract-index]
  558. .Events
  559. --
  560. [.contract-subindex-inherited]
  561. .IERC20
  562. * {xref-IERC20-Transfer-address-address-uint256-}[`++Transfer(from, to, value)++`]
  563. * {xref-IERC20-Approval-address-address-uint256-}[`++Approval(owner, spender, value)++`]
  564. --
  565. [.contract-item]
  566. [[IERC20Metadata-name--]]
  567. ==== `[.contract-item-name]#++name++#++() → string++` [.item-kind]#external#
  568. Returns the name of the token.
  569. [.contract-item]
  570. [[IERC20Metadata-symbol--]]
  571. ==== `[.contract-item-name]#++symbol++#++() → string++` [.item-kind]#external#
  572. Returns the symbol of the token.
  573. [.contract-item]
  574. [[IERC20Metadata-decimals--]]
  575. ==== `[.contract-item-name]#++decimals++#++() → uint8++` [.item-kind]#external#
  576. Returns the decimals places of the token.
  577. :constructor: pass:normal[xref:#ERC20-constructor-string-string-[`++constructor++`]]
  578. :name: pass:normal[xref:#ERC20-name--[`++name++`]]
  579. :symbol: pass:normal[xref:#ERC20-symbol--[`++symbol++`]]
  580. :decimals: pass:normal[xref:#ERC20-decimals--[`++decimals++`]]
  581. :totalSupply: pass:normal[xref:#ERC20-totalSupply--[`++totalSupply++`]]
  582. :balanceOf: pass:normal[xref:#ERC20-balanceOf-address-[`++balanceOf++`]]
  583. :transfer: pass:normal[xref:#ERC20-transfer-address-uint256-[`++transfer++`]]
  584. :allowance: pass:normal[xref:#ERC20-allowance-address-address-[`++allowance++`]]
  585. :approve: pass:normal[xref:#ERC20-approve-address-uint256-[`++approve++`]]
  586. :transferFrom: pass:normal[xref:#ERC20-transferFrom-address-address-uint256-[`++transferFrom++`]]
  587. :_transfer: pass:normal[xref:#ERC20-_transfer-address-address-uint256-[`++_transfer++`]]
  588. :_update: pass:normal[xref:#ERC20-_update-address-address-uint256-[`++_update++`]]
  589. :_mint: pass:normal[xref:#ERC20-_mint-address-uint256-[`++_mint++`]]
  590. :_burn: pass:normal[xref:#ERC20-_burn-address-uint256-[`++_burn++`]]
  591. :_approve: pass:normal[xref:#ERC20-_approve-address-address-uint256-[`++_approve++`]]
  592. :_approve: pass:normal[xref:#ERC20-_approve-address-address-uint256-bool-[`++_approve++`]]
  593. :_spendAllowance: pass:normal[xref:#ERC20-_spendAllowance-address-address-uint256-[`++_spendAllowance++`]]
  594. [.contract]
  595. [[ERC20]]
  596. === `++ERC20++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.0.0-rc.2/contracts/token/ERC20/ERC20.sol[{github-icon},role=heading-link]
  597. [.hljs-theme-light.nopadding]
  598. ```solidity
  599. import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
  600. ```
  601. Implementation of the {IERC20} interface.
  602. This implementation is agnostic to the way tokens are created. This means
  603. that a supply mechanism has to be added in a derived contract using {_mint}.
  604. TIP: For a detailed writeup see our guide
  605. https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
  606. to implement supply mechanisms].
  607. The default value of {decimals} is 18. To change this, you should override
  608. this function so it returns a different value.
  609. We have followed general OpenZeppelin Contracts guidelines: functions revert
  610. instead returning `false` on failure. This behavior is nonetheless
  611. conventional and does not conflict with the expectations of ERC20
  612. applications.
  613. Additionally, an {Approval} event is emitted on calls to {transferFrom}.
  614. This allows applications to reconstruct the allowance for all accounts just
  615. by listening to said events. Other implementations of the EIP may not emit
  616. these events, as it isn't required by the specification.
  617. [.contract-index]
  618. .Functions
  619. --
  620. * {xref-ERC20-constructor-string-string-}[`++constructor(name_, symbol_)++`]
  621. * {xref-ERC20-name--}[`++name()++`]
  622. * {xref-ERC20-symbol--}[`++symbol()++`]
  623. * {xref-ERC20-decimals--}[`++decimals()++`]
  624. * {xref-ERC20-totalSupply--}[`++totalSupply()++`]
  625. * {xref-ERC20-balanceOf-address-}[`++balanceOf(account)++`]
  626. * {xref-ERC20-transfer-address-uint256-}[`++transfer(to, value)++`]
  627. * {xref-ERC20-allowance-address-address-}[`++allowance(owner, spender)++`]
  628. * {xref-ERC20-approve-address-uint256-}[`++approve(spender, value)++`]
  629. * {xref-ERC20-transferFrom-address-address-uint256-}[`++transferFrom(from, to, value)++`]
  630. * {xref-ERC20-_transfer-address-address-uint256-}[`++_transfer(from, to, value)++`]
  631. * {xref-ERC20-_update-address-address-uint256-}[`++_update(from, to, value)++`]
  632. * {xref-ERC20-_mint-address-uint256-}[`++_mint(account, value)++`]
  633. * {xref-ERC20-_burn-address-uint256-}[`++_burn(account, value)++`]
  634. * {xref-ERC20-_approve-address-address-uint256-}[`++_approve(owner, spender, value)++`]
  635. * {xref-ERC20-_approve-address-address-uint256-bool-}[`++_approve(owner, spender, value, emitEvent)++`]
  636. * {xref-ERC20-_spendAllowance-address-address-uint256-}[`++_spendAllowance(owner, spender, value)++`]
  637. [.contract-subindex-inherited]
  638. .IERC20Errors
  639. [.contract-subindex-inherited]
  640. .IERC20Metadata
  641. [.contract-subindex-inherited]
  642. .IERC20
  643. --
  644. [.contract-index]
  645. .Events
  646. --
  647. [.contract-subindex-inherited]
  648. .IERC20Errors
  649. [.contract-subindex-inherited]
  650. .IERC20Metadata
  651. [.contract-subindex-inherited]
  652. .IERC20
  653. * {xref-IERC20-Transfer-address-address-uint256-}[`++Transfer(from, to, value)++`]
  654. * {xref-IERC20-Approval-address-address-uint256-}[`++Approval(owner, spender, value)++`]
  655. --
  656. [.contract-index]
  657. .Errors
  658. --
  659. [.contract-subindex-inherited]
  660. .IERC20Errors
  661. * {xref-IERC20Errors-ERC20InsufficientBalance-address-uint256-uint256-}[`++ERC20InsufficientBalance(sender, balance, needed)++`]
  662. * {xref-IERC20Errors-ERC20InvalidSender-address-}[`++ERC20InvalidSender(sender)++`]
  663. * {xref-IERC20Errors-ERC20InvalidReceiver-address-}[`++ERC20InvalidReceiver(receiver)++`]
  664. * {xref-IERC20Errors-ERC20InsufficientAllowance-address-uint256-uint256-}[`++ERC20InsufficientAllowance(spender, allowance, needed)++`]
  665. * {xref-IERC20Errors-ERC20InvalidApprover-address-}[`++ERC20InvalidApprover(approver)++`]
  666. * {xref-IERC20Errors-ERC20InvalidSpender-address-}[`++ERC20InvalidSpender(spender)++`]
  667. [.contract-subindex-inherited]
  668. .IERC20Metadata
  669. [.contract-subindex-inherited]
  670. .IERC20
  671. --
  672. [.contract-item]
  673. [[ERC20-constructor-string-string-]]
  674. ==== `[.contract-item-name]#++constructor++#++(string name_, string symbol_)++` [.item-kind]#internal#
  675. Sets the values for {name} and {symbol}.
  676. All two of these values are immutable: they can only be set once during
  677. construction.
  678. [.contract-item]
  679. [[ERC20-name--]]
  680. ==== `[.contract-item-name]#++name++#++() → string++` [.item-kind]#public#
  681. Returns the name of the token.
  682. [.contract-item]
  683. [[ERC20-symbol--]]
  684. ==== `[.contract-item-name]#++symbol++#++() → string++` [.item-kind]#public#
  685. Returns the symbol of the token, usually a shorter version of the
  686. name.
  687. [.contract-item]
  688. [[ERC20-decimals--]]
  689. ==== `[.contract-item-name]#++decimals++#++() → uint8++` [.item-kind]#public#
  690. Returns the number of decimals used to get its user representation.
  691. For example, if `decimals` equals `2`, a balance of `505` tokens should
  692. be displayed to a user as `5.05` (`505 / 10 ** 2`).
  693. Tokens usually opt for a value of 18, imitating the relationship between
  694. Ether and Wei. This is the default value returned by this function, unless
  695. it's overridden.
  696. NOTE: This information is only used for _display_ purposes: it in
  697. no way affects any of the arithmetic of the contract, including
  698. {IERC20-balanceOf} and {IERC20-transfer}.
  699. [.contract-item]
  700. [[ERC20-totalSupply--]]
  701. ==== `[.contract-item-name]#++totalSupply++#++() → uint256++` [.item-kind]#public#
  702. See {IERC20-totalSupply}.
  703. [.contract-item]
  704. [[ERC20-balanceOf-address-]]
  705. ==== `[.contract-item-name]#++balanceOf++#++(address account) → uint256++` [.item-kind]#public#
  706. See {IERC20-balanceOf}.
  707. [.contract-item]
  708. [[ERC20-transfer-address-uint256-]]
  709. ==== `[.contract-item-name]#++transfer++#++(address to, uint256 value) → bool++` [.item-kind]#public#
  710. See {IERC20-transfer}.
  711. Requirements:
  712. - `to` cannot be the zero address.
  713. - the caller must have a balance of at least `value`.
  714. [.contract-item]
  715. [[ERC20-allowance-address-address-]]
  716. ==== `[.contract-item-name]#++allowance++#++(address owner, address spender) → uint256++` [.item-kind]#public#
  717. See {IERC20-allowance}.
  718. [.contract-item]
  719. [[ERC20-approve-address-uint256-]]
  720. ==== `[.contract-item-name]#++approve++#++(address spender, uint256 value) → bool++` [.item-kind]#public#
  721. See {IERC20-approve}.
  722. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on
  723. `transferFrom`. This is semantically equivalent to an infinite approval.
  724. Requirements:
  725. - `spender` cannot be the zero address.
  726. [.contract-item]
  727. [[ERC20-transferFrom-address-address-uint256-]]
  728. ==== `[.contract-item-name]#++transferFrom++#++(address from, address to, uint256 value) → bool++` [.item-kind]#public#
  729. See {IERC20-transferFrom}.
  730. Emits an {Approval} event indicating the updated allowance. This is not
  731. required by the EIP. See the note at the beginning of {ERC20}.
  732. NOTE: Does not update the allowance if the current allowance
  733. is the maximum `uint256`.
  734. Requirements:
  735. - `from` and `to` cannot be the zero address.
  736. - `from` must have a balance of at least `value`.
  737. - the caller must have allowance for ``from``'s tokens of at least
  738. `value`.
  739. [.contract-item]
  740. [[ERC20-_transfer-address-address-uint256-]]
  741. ==== `[.contract-item-name]#++_transfer++#++(address from, address to, uint256 value)++` [.item-kind]#internal#
  742. Moves a `value` amount of tokens from `from` to `to`.
  743. This internal function is equivalent to {transfer}, and can be used to
  744. e.g. implement automatic token fees, slashing mechanisms, etc.
  745. Emits a {Transfer} event.
  746. NOTE: This function is not virtual, {_update} should be overridden instead.
  747. [.contract-item]
  748. [[ERC20-_update-address-address-uint256-]]
  749. ==== `[.contract-item-name]#++_update++#++(address from, address to, uint256 value)++` [.item-kind]#internal#
  750. Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`
  751. (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding
  752. this function.
  753. Emits a {Transfer} event.
  754. [.contract-item]
  755. [[ERC20-_mint-address-uint256-]]
  756. ==== `[.contract-item-name]#++_mint++#++(address account, uint256 value)++` [.item-kind]#internal#
  757. Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).
  758. Relies on the `_update` mechanism
  759. Emits a {Transfer} event with `from` set to the zero address.
  760. NOTE: This function is not virtual, {_update} should be overridden instead.
  761. [.contract-item]
  762. [[ERC20-_burn-address-uint256-]]
  763. ==== `[.contract-item-name]#++_burn++#++(address account, uint256 value)++` [.item-kind]#internal#
  764. Destroys a `value` amount of tokens from `account`, lowering the total supply.
  765. Relies on the `_update` mechanism.
  766. Emits a {Transfer} event with `to` set to the zero address.
  767. NOTE: This function is not virtual, {_update} should be overridden instead
  768. [.contract-item]
  769. [[ERC20-_approve-address-address-uint256-]]
  770. ==== `[.contract-item-name]#++_approve++#++(address owner, address spender, uint256 value)++` [.item-kind]#internal#
  771. Sets `value` as the allowance of `spender` over the `owner` s tokens.
  772. This internal function is equivalent to `approve`, and can be used to
  773. e.g. set automatic allowances for certain subsystems, etc.
  774. Emits an {Approval} event.
  775. Requirements:
  776. - `owner` cannot be the zero address.
  777. - `spender` cannot be the zero address.
  778. Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.
  779. [.contract-item]
  780. [[ERC20-_approve-address-address-uint256-bool-]]
  781. ==== `[.contract-item-name]#++_approve++#++(address owner, address spender, uint256 value, bool emitEvent)++` [.item-kind]#internal#
  782. Variant of {_approve} with an optional flag to enable or disable the {Approval} event.
  783. By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by
  784. `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any
  785. `Approval` event during `transferFrom` operations.
  786. Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to
  787. true using the following override:
  788. ```
  789. function _approve(address owner, address spender, uint256 value, bool) internal virtual override {
  790. super._approve(owner, spender, value, true);
  791. }
  792. ```
  793. Requirements are the same as {_approve}.
  794. [.contract-item]
  795. [[ERC20-_spendAllowance-address-address-uint256-]]
  796. ==== `[.contract-item-name]#++_spendAllowance++#++(address owner, address spender, uint256 value)++` [.item-kind]#internal#
  797. Updates `owner` s allowance for `spender` based on spent `value`.
  798. Does not update the allowance value in case of infinite allowance.
  799. Revert if not enough allowance is available.
  800. Does not emit an {Approval} event.
  801. == Extensions
  802. :permit: pass:normal[xref:#IERC20Permit-permit-address-address-uint256-uint256-uint8-bytes32-bytes32-[`++permit++`]]
  803. :nonces: pass:normal[xref:#IERC20Permit-nonces-address-[`++nonces++`]]
  804. :DOMAIN_SEPARATOR: pass:normal[xref:#IERC20Permit-DOMAIN_SEPARATOR--[`++DOMAIN_SEPARATOR++`]]
  805. [.contract]
  806. [[IERC20Permit]]
  807. === `++IERC20Permit++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.0.0-rc.2/contracts/token/ERC20/extensions/IERC20Permit.sol[{github-icon},role=heading-link]
  808. [.hljs-theme-light.nopadding]
  809. ```solidity
  810. import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol";
  811. ```
  812. Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in
  813. https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].
  814. Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by
  815. presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't
  816. need to send a transaction, and thus is not required to hold Ether at all.
  817. ==== Security Considerations
  818. There are two important considerations concerning the use of `permit`. The first is that a valid permit signature
  819. expresses an allowance, and it should not be assumed to convey additional meaning. In particular, it should not be
  820. considered as an intention to spend the allowance in any specific way. The second is that because permits have
  821. built-in replay protection and can be submitted by anyone, they can be frontrun. A protocol that uses permits should
  822. take this into consideration and allow a `permit` call to fail. Combining these two aspects, a pattern that may be
  823. generally recommended is:
  824. ```solidity
  825. function doThingWithPermit(..., uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public {
  826. try token.permit(msg.sender, address(this), value, deadline, v, r, s) {} catch {}
  827. doThing(..., value);
  828. }
  829. function doThing(..., uint256 value) public {
  830. token.safeTransferFrom(msg.sender, address(this), value);
  831. ...
  832. }
  833. ```
  834. Observe that: 1) `msg.sender` is used as the owner, leaving no ambiguity as to the signer intent, and 2) the use of
  835. `try/catch` allows the permit to fail and makes the code tolerant to frontrunning. (See also
  836. {SafeERC20-safeTransferFrom}).
  837. Additionally, note that smart contract wallets (such as Argent or Safe) are not able to produce permit signatures, so
  838. contracts should have entry points that don't rely on permit.
  839. [.contract-index]
  840. .Functions
  841. --
  842. * {xref-IERC20Permit-permit-address-address-uint256-uint256-uint8-bytes32-bytes32-}[`++permit(owner, spender, value, deadline, v, r, s)++`]
  843. * {xref-IERC20Permit-nonces-address-}[`++nonces(owner)++`]
  844. * {xref-IERC20Permit-DOMAIN_SEPARATOR--}[`++DOMAIN_SEPARATOR()++`]
  845. --
  846. [.contract-item]
  847. [[IERC20Permit-permit-address-address-uint256-uint256-uint8-bytes32-bytes32-]]
  848. ==== `[.contract-item-name]#++permit++#++(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s)++` [.item-kind]#external#
  849. Sets `value` as the allowance of `spender` over ``owner``'s tokens,
  850. given ``owner``'s signed approval.
  851. IMPORTANT: The same issues {IERC20-approve} has related to transaction
  852. ordering also apply here.
  853. Emits an {Approval} event.
  854. Requirements:
  855. - `spender` cannot be the zero address.
  856. - `deadline` must be a timestamp in the future.
  857. - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`
  858. over the EIP712-formatted function arguments.
  859. - the signature must use ``owner``'s current nonce (see {nonces}).
  860. For more information on the signature format, see the
  861. https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP
  862. section].
  863. CAUTION: See Security Considerations above.
  864. [.contract-item]
  865. [[IERC20Permit-nonces-address-]]
  866. ==== `[.contract-item-name]#++nonces++#++(address owner) → uint256++` [.item-kind]#external#
  867. Returns the current nonce for `owner`. This value must be
  868. included whenever a signature is generated for {permit}.
  869. Every successful call to {permit} increases ``owner``'s nonce by one. This
  870. prevents a signature from being used multiple times.
  871. [.contract-item]
  872. [[IERC20Permit-DOMAIN_SEPARATOR--]]
  873. ==== `[.contract-item-name]#++DOMAIN_SEPARATOR++#++() → bytes32++` [.item-kind]#external#
  874. Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.
  875. :ERC2612ExpiredSignature: pass:normal[xref:#ERC20Permit-ERC2612ExpiredSignature-uint256-[`++ERC2612ExpiredSignature++`]]
  876. :ERC2612InvalidSigner: pass:normal[xref:#ERC20Permit-ERC2612InvalidSigner-address-address-[`++ERC2612InvalidSigner++`]]
  877. :constructor: pass:normal[xref:#ERC20Permit-constructor-string-[`++constructor++`]]
  878. :permit: pass:normal[xref:#ERC20Permit-permit-address-address-uint256-uint256-uint8-bytes32-bytes32-[`++permit++`]]
  879. :nonces: pass:normal[xref:#ERC20Permit-nonces-address-[`++nonces++`]]
  880. :DOMAIN_SEPARATOR: pass:normal[xref:#ERC20Permit-DOMAIN_SEPARATOR--[`++DOMAIN_SEPARATOR++`]]
  881. [.contract]
  882. [[ERC20Permit]]
  883. === `++ERC20Permit++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.0.0-rc.2/contracts/token/ERC20/extensions/ERC20Permit.sol[{github-icon},role=heading-link]
  884. [.hljs-theme-light.nopadding]
  885. ```solidity
  886. import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol";
  887. ```
  888. Implementation of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in
  889. https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].
  890. Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by
  891. presenting a message signed by the account. By not relying on `{IERC20-approve}`, the token holder account doesn't
  892. need to send a transaction, and thus is not required to hold Ether at all.
  893. [.contract-index]
  894. .Functions
  895. --
  896. * {xref-ERC20Permit-constructor-string-}[`++constructor(name)++`]
  897. * {xref-ERC20Permit-permit-address-address-uint256-uint256-uint8-bytes32-bytes32-}[`++permit(owner, spender, value, deadline, v, r, s)++`]
  898. * {xref-ERC20Permit-nonces-address-}[`++nonces(owner)++`]
  899. * {xref-ERC20Permit-DOMAIN_SEPARATOR--}[`++DOMAIN_SEPARATOR()++`]
  900. [.contract-subindex-inherited]
  901. .Nonces
  902. * {xref-Nonces-_useNonce-address-}[`++_useNonce(owner)++`]
  903. * {xref-Nonces-_useCheckedNonce-address-uint256-}[`++_useCheckedNonce(owner, nonce)++`]
  904. [.contract-subindex-inherited]
  905. .EIP712
  906. * {xref-EIP712-_domainSeparatorV4--}[`++_domainSeparatorV4()++`]
  907. * {xref-EIP712-_hashTypedDataV4-bytes32-}[`++_hashTypedDataV4(structHash)++`]
  908. * {xref-EIP712-eip712Domain--}[`++eip712Domain()++`]
  909. * {xref-EIP712-_EIP712Name--}[`++_EIP712Name()++`]
  910. * {xref-EIP712-_EIP712Version--}[`++_EIP712Version()++`]
  911. [.contract-subindex-inherited]
  912. .IERC5267
  913. [.contract-subindex-inherited]
  914. .IERC20Permit
  915. [.contract-subindex-inherited]
  916. .ERC20
  917. * {xref-ERC20-name--}[`++name()++`]
  918. * {xref-ERC20-symbol--}[`++symbol()++`]
  919. * {xref-ERC20-decimals--}[`++decimals()++`]
  920. * {xref-ERC20-totalSupply--}[`++totalSupply()++`]
  921. * {xref-ERC20-balanceOf-address-}[`++balanceOf(account)++`]
  922. * {xref-ERC20-transfer-address-uint256-}[`++transfer(to, value)++`]
  923. * {xref-ERC20-allowance-address-address-}[`++allowance(owner, spender)++`]
  924. * {xref-ERC20-approve-address-uint256-}[`++approve(spender, value)++`]
  925. * {xref-ERC20-transferFrom-address-address-uint256-}[`++transferFrom(from, to, value)++`]
  926. * {xref-ERC20-_transfer-address-address-uint256-}[`++_transfer(from, to, value)++`]
  927. * {xref-ERC20-_update-address-address-uint256-}[`++_update(from, to, value)++`]
  928. * {xref-ERC20-_mint-address-uint256-}[`++_mint(account, value)++`]
  929. * {xref-ERC20-_burn-address-uint256-}[`++_burn(account, value)++`]
  930. * {xref-ERC20-_approve-address-address-uint256-}[`++_approve(owner, spender, value)++`]
  931. * {xref-ERC20-_approve-address-address-uint256-bool-}[`++_approve(owner, spender, value, emitEvent)++`]
  932. * {xref-ERC20-_spendAllowance-address-address-uint256-}[`++_spendAllowance(owner, spender, value)++`]
  933. [.contract-subindex-inherited]
  934. .IERC20Errors
  935. [.contract-subindex-inherited]
  936. .IERC20Metadata
  937. [.contract-subindex-inherited]
  938. .IERC20
  939. --
  940. [.contract-index]
  941. .Events
  942. --
  943. [.contract-subindex-inherited]
  944. .Nonces
  945. [.contract-subindex-inherited]
  946. .EIP712
  947. [.contract-subindex-inherited]
  948. .IERC5267
  949. * {xref-IERC5267-EIP712DomainChanged--}[`++EIP712DomainChanged()++`]
  950. [.contract-subindex-inherited]
  951. .IERC20Permit
  952. [.contract-subindex-inherited]
  953. .ERC20
  954. [.contract-subindex-inherited]
  955. .IERC20Errors
  956. [.contract-subindex-inherited]
  957. .IERC20Metadata
  958. [.contract-subindex-inherited]
  959. .IERC20
  960. * {xref-IERC20-Transfer-address-address-uint256-}[`++Transfer(from, to, value)++`]
  961. * {xref-IERC20-Approval-address-address-uint256-}[`++Approval(owner, spender, value)++`]
  962. --
  963. [.contract-index]
  964. .Errors
  965. --
  966. * {xref-ERC20Permit-ERC2612ExpiredSignature-uint256-}[`++ERC2612ExpiredSignature(deadline)++`]
  967. * {xref-ERC20Permit-ERC2612InvalidSigner-address-address-}[`++ERC2612InvalidSigner(signer, owner)++`]
  968. [.contract-subindex-inherited]
  969. .Nonces
  970. * {xref-Nonces-InvalidAccountNonce-address-uint256-}[`++InvalidAccountNonce(account, currentNonce)++`]
  971. [.contract-subindex-inherited]
  972. .EIP712
  973. [.contract-subindex-inherited]
  974. .IERC5267
  975. [.contract-subindex-inherited]
  976. .IERC20Permit
  977. [.contract-subindex-inherited]
  978. .ERC20
  979. [.contract-subindex-inherited]
  980. .IERC20Errors
  981. * {xref-IERC20Errors-ERC20InsufficientBalance-address-uint256-uint256-}[`++ERC20InsufficientBalance(sender, balance, needed)++`]
  982. * {xref-IERC20Errors-ERC20InvalidSender-address-}[`++ERC20InvalidSender(sender)++`]
  983. * {xref-IERC20Errors-ERC20InvalidReceiver-address-}[`++ERC20InvalidReceiver(receiver)++`]
  984. * {xref-IERC20Errors-ERC20InsufficientAllowance-address-uint256-uint256-}[`++ERC20InsufficientAllowance(spender, allowance, needed)++`]
  985. * {xref-IERC20Errors-ERC20InvalidApprover-address-}[`++ERC20InvalidApprover(approver)++`]
  986. * {xref-IERC20Errors-ERC20InvalidSpender-address-}[`++ERC20InvalidSpender(spender)++`]
  987. [.contract-subindex-inherited]
  988. .IERC20Metadata
  989. [.contract-subindex-inherited]
  990. .IERC20
  991. --
  992. [.contract-item]
  993. [[ERC20Permit-constructor-string-]]
  994. ==== `[.contract-item-name]#++constructor++#++(string name)++` [.item-kind]#internal#
  995. Initializes the {EIP712} domain separator using the `name` parameter, and setting `version` to `"1"`.
  996. It's a good idea to use the same `name` that is defined as the ERC20 token name.
  997. [.contract-item]
  998. [[ERC20Permit-permit-address-address-uint256-uint256-uint8-bytes32-bytes32-]]
  999. ==== `[.contract-item-name]#++permit++#++(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s)++` [.item-kind]#public#
  1000. Sets `value` as the allowance of `spender` over ``owner``'s tokens,
  1001. given ``owner``'s signed approval.
  1002. IMPORTANT: The same issues {IERC20-approve} has related to transaction
  1003. ordering also apply here.
  1004. Emits an {Approval} event.
  1005. Requirements:
  1006. - `spender` cannot be the zero address.
  1007. - `deadline` must be a timestamp in the future.
  1008. - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`
  1009. over the EIP712-formatted function arguments.
  1010. - the signature must use ``owner``'s current nonce (see {nonces}).
  1011. For more information on the signature format, see the
  1012. https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP
  1013. section].
  1014. CAUTION: See Security Considerations above.
  1015. [.contract-item]
  1016. [[ERC20Permit-nonces-address-]]
  1017. ==== `[.contract-item-name]#++nonces++#++(address owner) → uint256++` [.item-kind]#public#
  1018. Returns the current nonce for `owner`. This value must be
  1019. included whenever a signature is generated for {permit}.
  1020. Every successful call to {permit} increases ``owner``'s nonce by one. This
  1021. prevents a signature from being used multiple times.
  1022. [.contract-item]
  1023. [[ERC20Permit-DOMAIN_SEPARATOR--]]
  1024. ==== `[.contract-item-name]#++DOMAIN_SEPARATOR++#++() → bytes32++` [.item-kind]#external#
  1025. Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.
  1026. [.contract-item]
  1027. [[ERC20Permit-ERC2612ExpiredSignature-uint256-]]
  1028. ==== `[.contract-item-name]#++ERC2612ExpiredSignature++#++(uint256 deadline)++` [.item-kind]#error#
  1029. Permit deadline has expired.
  1030. [.contract-item]
  1031. [[ERC20Permit-ERC2612InvalidSigner-address-address-]]
  1032. ==== `[.contract-item-name]#++ERC2612InvalidSigner++#++(address signer, address owner)++` [.item-kind]#error#
  1033. Mismatched signature.
  1034. :burn: pass:normal[xref:#ERC20Burnable-burn-uint256-[`++burn++`]]
  1035. :burnFrom: pass:normal[xref:#ERC20Burnable-burnFrom-address-uint256-[`++burnFrom++`]]
  1036. [.contract]
  1037. [[ERC20Burnable]]
  1038. === `++ERC20Burnable++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.0.0-rc.2/contracts/token/ERC20/extensions/ERC20Burnable.sol[{github-icon},role=heading-link]
  1039. [.hljs-theme-light.nopadding]
  1040. ```solidity
  1041. import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol";
  1042. ```
  1043. Extension of {ERC20} that allows token holders to destroy both their own
  1044. tokens and those that they have an allowance for, in a way that can be
  1045. recognized off-chain (via event analysis).
  1046. [.contract-index]
  1047. .Functions
  1048. --
  1049. * {xref-ERC20Burnable-burn-uint256-}[`++burn(value)++`]
  1050. * {xref-ERC20Burnable-burnFrom-address-uint256-}[`++burnFrom(account, value)++`]
  1051. [.contract-subindex-inherited]
  1052. .ERC20
  1053. * {xref-ERC20-name--}[`++name()++`]
  1054. * {xref-ERC20-symbol--}[`++symbol()++`]
  1055. * {xref-ERC20-decimals--}[`++decimals()++`]
  1056. * {xref-ERC20-totalSupply--}[`++totalSupply()++`]
  1057. * {xref-ERC20-balanceOf-address-}[`++balanceOf(account)++`]
  1058. * {xref-ERC20-transfer-address-uint256-}[`++transfer(to, value)++`]
  1059. * {xref-ERC20-allowance-address-address-}[`++allowance(owner, spender)++`]
  1060. * {xref-ERC20-approve-address-uint256-}[`++approve(spender, value)++`]
  1061. * {xref-ERC20-transferFrom-address-address-uint256-}[`++transferFrom(from, to, value)++`]
  1062. * {xref-ERC20-_transfer-address-address-uint256-}[`++_transfer(from, to, value)++`]
  1063. * {xref-ERC20-_update-address-address-uint256-}[`++_update(from, to, value)++`]
  1064. * {xref-ERC20-_mint-address-uint256-}[`++_mint(account, value)++`]
  1065. * {xref-ERC20-_burn-address-uint256-}[`++_burn(account, value)++`]
  1066. * {xref-ERC20-_approve-address-address-uint256-}[`++_approve(owner, spender, value)++`]
  1067. * {xref-ERC20-_approve-address-address-uint256-bool-}[`++_approve(owner, spender, value, emitEvent)++`]
  1068. * {xref-ERC20-_spendAllowance-address-address-uint256-}[`++_spendAllowance(owner, spender, value)++`]
  1069. [.contract-subindex-inherited]
  1070. .IERC20Errors
  1071. [.contract-subindex-inherited]
  1072. .IERC20Metadata
  1073. [.contract-subindex-inherited]
  1074. .IERC20
  1075. --
  1076. [.contract-index]
  1077. .Events
  1078. --
  1079. [.contract-subindex-inherited]
  1080. .ERC20
  1081. [.contract-subindex-inherited]
  1082. .IERC20Errors
  1083. [.contract-subindex-inherited]
  1084. .IERC20Metadata
  1085. [.contract-subindex-inherited]
  1086. .IERC20
  1087. * {xref-IERC20-Transfer-address-address-uint256-}[`++Transfer(from, to, value)++`]
  1088. * {xref-IERC20-Approval-address-address-uint256-}[`++Approval(owner, spender, value)++`]
  1089. --
  1090. [.contract-index]
  1091. .Errors
  1092. --
  1093. [.contract-subindex-inherited]
  1094. .ERC20
  1095. [.contract-subindex-inherited]
  1096. .IERC20Errors
  1097. * {xref-IERC20Errors-ERC20InsufficientBalance-address-uint256-uint256-}[`++ERC20InsufficientBalance(sender, balance, needed)++`]
  1098. * {xref-IERC20Errors-ERC20InvalidSender-address-}[`++ERC20InvalidSender(sender)++`]
  1099. * {xref-IERC20Errors-ERC20InvalidReceiver-address-}[`++ERC20InvalidReceiver(receiver)++`]
  1100. * {xref-IERC20Errors-ERC20InsufficientAllowance-address-uint256-uint256-}[`++ERC20InsufficientAllowance(spender, allowance, needed)++`]
  1101. * {xref-IERC20Errors-ERC20InvalidApprover-address-}[`++ERC20InvalidApprover(approver)++`]
  1102. * {xref-IERC20Errors-ERC20InvalidSpender-address-}[`++ERC20InvalidSpender(spender)++`]
  1103. [.contract-subindex-inherited]
  1104. .IERC20Metadata
  1105. [.contract-subindex-inherited]
  1106. .IERC20
  1107. --
  1108. [.contract-item]
  1109. [[ERC20Burnable-burn-uint256-]]
  1110. ==== `[.contract-item-name]#++burn++#++(uint256 value)++` [.item-kind]#public#
  1111. Destroys a `value` amount of tokens from the caller.
  1112. See {ERC20-_burn}.
  1113. [.contract-item]
  1114. [[ERC20Burnable-burnFrom-address-uint256-]]
  1115. ==== `[.contract-item-name]#++burnFrom++#++(address account, uint256 value)++` [.item-kind]#public#
  1116. Destroys a `value` amount of tokens from `account`, deducting from
  1117. the caller's allowance.
  1118. See {ERC20-_burn} and {ERC20-allowance}.
  1119. Requirements:
  1120. - the caller must have allowance for ``accounts``'s tokens of at least
  1121. `value`.
  1122. :ERC20ExceededCap: pass:normal[xref:#ERC20Capped-ERC20ExceededCap-uint256-uint256-[`++ERC20ExceededCap++`]]
  1123. :ERC20InvalidCap: pass:normal[xref:#ERC20Capped-ERC20InvalidCap-uint256-[`++ERC20InvalidCap++`]]
  1124. :constructor: pass:normal[xref:#ERC20Capped-constructor-uint256-[`++constructor++`]]
  1125. :cap: pass:normal[xref:#ERC20Capped-cap--[`++cap++`]]
  1126. :_update: pass:normal[xref:#ERC20Capped-_update-address-address-uint256-[`++_update++`]]
  1127. [.contract]
  1128. [[ERC20Capped]]
  1129. === `++ERC20Capped++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.0.0-rc.2/contracts/token/ERC20/extensions/ERC20Capped.sol[{github-icon},role=heading-link]
  1130. [.hljs-theme-light.nopadding]
  1131. ```solidity
  1132. import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Capped.sol";
  1133. ```
  1134. Extension of {ERC20} that adds a cap to the supply of tokens.
  1135. [.contract-index]
  1136. .Functions
  1137. --
  1138. * {xref-ERC20Capped-constructor-uint256-}[`++constructor(cap_)++`]
  1139. * {xref-ERC20Capped-cap--}[`++cap()++`]
  1140. * {xref-ERC20Capped-_update-address-address-uint256-}[`++_update(from, to, value)++`]
  1141. [.contract-subindex-inherited]
  1142. .ERC20
  1143. * {xref-ERC20-name--}[`++name()++`]
  1144. * {xref-ERC20-symbol--}[`++symbol()++`]
  1145. * {xref-ERC20-decimals--}[`++decimals()++`]
  1146. * {xref-ERC20-totalSupply--}[`++totalSupply()++`]
  1147. * {xref-ERC20-balanceOf-address-}[`++balanceOf(account)++`]
  1148. * {xref-ERC20-transfer-address-uint256-}[`++transfer(to, value)++`]
  1149. * {xref-ERC20-allowance-address-address-}[`++allowance(owner, spender)++`]
  1150. * {xref-ERC20-approve-address-uint256-}[`++approve(spender, value)++`]
  1151. * {xref-ERC20-transferFrom-address-address-uint256-}[`++transferFrom(from, to, value)++`]
  1152. * {xref-ERC20-_transfer-address-address-uint256-}[`++_transfer(from, to, value)++`]
  1153. * {xref-ERC20-_mint-address-uint256-}[`++_mint(account, value)++`]
  1154. * {xref-ERC20-_burn-address-uint256-}[`++_burn(account, value)++`]
  1155. * {xref-ERC20-_approve-address-address-uint256-}[`++_approve(owner, spender, value)++`]
  1156. * {xref-ERC20-_approve-address-address-uint256-bool-}[`++_approve(owner, spender, value, emitEvent)++`]
  1157. * {xref-ERC20-_spendAllowance-address-address-uint256-}[`++_spendAllowance(owner, spender, value)++`]
  1158. [.contract-subindex-inherited]
  1159. .IERC20Errors
  1160. [.contract-subindex-inherited]
  1161. .IERC20Metadata
  1162. [.contract-subindex-inherited]
  1163. .IERC20
  1164. --
  1165. [.contract-index]
  1166. .Events
  1167. --
  1168. [.contract-subindex-inherited]
  1169. .ERC20
  1170. [.contract-subindex-inherited]
  1171. .IERC20Errors
  1172. [.contract-subindex-inherited]
  1173. .IERC20Metadata
  1174. [.contract-subindex-inherited]
  1175. .IERC20
  1176. * {xref-IERC20-Transfer-address-address-uint256-}[`++Transfer(from, to, value)++`]
  1177. * {xref-IERC20-Approval-address-address-uint256-}[`++Approval(owner, spender, value)++`]
  1178. --
  1179. [.contract-index]
  1180. .Errors
  1181. --
  1182. * {xref-ERC20Capped-ERC20ExceededCap-uint256-uint256-}[`++ERC20ExceededCap(increasedSupply, cap)++`]
  1183. * {xref-ERC20Capped-ERC20InvalidCap-uint256-}[`++ERC20InvalidCap(cap)++`]
  1184. [.contract-subindex-inherited]
  1185. .ERC20
  1186. [.contract-subindex-inherited]
  1187. .IERC20Errors
  1188. * {xref-IERC20Errors-ERC20InsufficientBalance-address-uint256-uint256-}[`++ERC20InsufficientBalance(sender, balance, needed)++`]
  1189. * {xref-IERC20Errors-ERC20InvalidSender-address-}[`++ERC20InvalidSender(sender)++`]
  1190. * {xref-IERC20Errors-ERC20InvalidReceiver-address-}[`++ERC20InvalidReceiver(receiver)++`]
  1191. * {xref-IERC20Errors-ERC20InsufficientAllowance-address-uint256-uint256-}[`++ERC20InsufficientAllowance(spender, allowance, needed)++`]
  1192. * {xref-IERC20Errors-ERC20InvalidApprover-address-}[`++ERC20InvalidApprover(approver)++`]
  1193. * {xref-IERC20Errors-ERC20InvalidSpender-address-}[`++ERC20InvalidSpender(spender)++`]
  1194. [.contract-subindex-inherited]
  1195. .IERC20Metadata
  1196. [.contract-subindex-inherited]
  1197. .IERC20
  1198. --
  1199. [.contract-item]
  1200. [[ERC20Capped-constructor-uint256-]]
  1201. ==== `[.contract-item-name]#++constructor++#++(uint256 cap_)++` [.item-kind]#internal#
  1202. Sets the value of the `cap`. This value is immutable, it can only be
  1203. set once during construction.
  1204. [.contract-item]
  1205. [[ERC20Capped-cap--]]
  1206. ==== `[.contract-item-name]#++cap++#++() → uint256++` [.item-kind]#public#
  1207. Returns the cap on the token's total supply.
  1208. [.contract-item]
  1209. [[ERC20Capped-_update-address-address-uint256-]]
  1210. ==== `[.contract-item-name]#++_update++#++(address from, address to, uint256 value)++` [.item-kind]#internal#
  1211. See {ERC20-_update}.
  1212. [.contract-item]
  1213. [[ERC20Capped-ERC20ExceededCap-uint256-uint256-]]
  1214. ==== `[.contract-item-name]#++ERC20ExceededCap++#++(uint256 increasedSupply, uint256 cap)++` [.item-kind]#error#
  1215. Total supply cap has been exceeded.
  1216. [.contract-item]
  1217. [[ERC20Capped-ERC20InvalidCap-uint256-]]
  1218. ==== `[.contract-item-name]#++ERC20InvalidCap++#++(uint256 cap)++` [.item-kind]#error#
  1219. The supplied cap is not a valid cap.
  1220. :_update: pass:normal[xref:#ERC20Pausable-_update-address-address-uint256-[`++_update++`]]
  1221. [.contract]
  1222. [[ERC20Pausable]]
  1223. === `++ERC20Pausable++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.0.0-rc.2/contracts/token/ERC20/extensions/ERC20Pausable.sol[{github-icon},role=heading-link]
  1224. [.hljs-theme-light.nopadding]
  1225. ```solidity
  1226. import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Pausable.sol";
  1227. ```
  1228. ERC20 token with pausable token transfers, minting and burning.
  1229. Useful for scenarios such as preventing trades until the end of an evaluation
  1230. period, or having an emergency switch for freezing all token transfers in the
  1231. event of a large bug.
  1232. IMPORTANT: This contract does not include public pause and unpause functions. In
  1233. addition to inheriting this contract, you must define both functions, invoking the
  1234. {Pausable-_pause} and {Pausable-_unpause} internal functions, with appropriate
  1235. access control, e.g. using {AccessControl} or {Ownable}. Not doing so will
  1236. make the contract pause mechanism of the contract unreachable, and thus unusable.
  1237. [.contract-index]
  1238. .Functions
  1239. --
  1240. * {xref-ERC20Pausable-_update-address-address-uint256-}[`++_update(from, to, value)++`]
  1241. [.contract-subindex-inherited]
  1242. .Pausable
  1243. * {xref-Pausable-paused--}[`++paused()++`]
  1244. * {xref-Pausable-_requireNotPaused--}[`++_requireNotPaused()++`]
  1245. * {xref-Pausable-_requirePaused--}[`++_requirePaused()++`]
  1246. * {xref-Pausable-_pause--}[`++_pause()++`]
  1247. * {xref-Pausable-_unpause--}[`++_unpause()++`]
  1248. [.contract-subindex-inherited]
  1249. .ERC20
  1250. * {xref-ERC20-name--}[`++name()++`]
  1251. * {xref-ERC20-symbol--}[`++symbol()++`]
  1252. * {xref-ERC20-decimals--}[`++decimals()++`]
  1253. * {xref-ERC20-totalSupply--}[`++totalSupply()++`]
  1254. * {xref-ERC20-balanceOf-address-}[`++balanceOf(account)++`]
  1255. * {xref-ERC20-transfer-address-uint256-}[`++transfer(to, value)++`]
  1256. * {xref-ERC20-allowance-address-address-}[`++allowance(owner, spender)++`]
  1257. * {xref-ERC20-approve-address-uint256-}[`++approve(spender, value)++`]
  1258. * {xref-ERC20-transferFrom-address-address-uint256-}[`++transferFrom(from, to, value)++`]
  1259. * {xref-ERC20-_transfer-address-address-uint256-}[`++_transfer(from, to, value)++`]
  1260. * {xref-ERC20-_mint-address-uint256-}[`++_mint(account, value)++`]
  1261. * {xref-ERC20-_burn-address-uint256-}[`++_burn(account, value)++`]
  1262. * {xref-ERC20-_approve-address-address-uint256-}[`++_approve(owner, spender, value)++`]
  1263. * {xref-ERC20-_approve-address-address-uint256-bool-}[`++_approve(owner, spender, value, emitEvent)++`]
  1264. * {xref-ERC20-_spendAllowance-address-address-uint256-}[`++_spendAllowance(owner, spender, value)++`]
  1265. [.contract-subindex-inherited]
  1266. .IERC20Errors
  1267. [.contract-subindex-inherited]
  1268. .IERC20Metadata
  1269. [.contract-subindex-inherited]
  1270. .IERC20
  1271. --
  1272. [.contract-index]
  1273. .Events
  1274. --
  1275. [.contract-subindex-inherited]
  1276. .Pausable
  1277. * {xref-Pausable-Paused-address-}[`++Paused(account)++`]
  1278. * {xref-Pausable-Unpaused-address-}[`++Unpaused(account)++`]
  1279. [.contract-subindex-inherited]
  1280. .ERC20
  1281. [.contract-subindex-inherited]
  1282. .IERC20Errors
  1283. [.contract-subindex-inherited]
  1284. .IERC20Metadata
  1285. [.contract-subindex-inherited]
  1286. .IERC20
  1287. * {xref-IERC20-Transfer-address-address-uint256-}[`++Transfer(from, to, value)++`]
  1288. * {xref-IERC20-Approval-address-address-uint256-}[`++Approval(owner, spender, value)++`]
  1289. --
  1290. [.contract-index]
  1291. .Errors
  1292. --
  1293. [.contract-subindex-inherited]
  1294. .Pausable
  1295. * {xref-Pausable-EnforcedPause--}[`++EnforcedPause()++`]
  1296. * {xref-Pausable-ExpectedPause--}[`++ExpectedPause()++`]
  1297. [.contract-subindex-inherited]
  1298. .ERC20
  1299. [.contract-subindex-inherited]
  1300. .IERC20Errors
  1301. * {xref-IERC20Errors-ERC20InsufficientBalance-address-uint256-uint256-}[`++ERC20InsufficientBalance(sender, balance, needed)++`]
  1302. * {xref-IERC20Errors-ERC20InvalidSender-address-}[`++ERC20InvalidSender(sender)++`]
  1303. * {xref-IERC20Errors-ERC20InvalidReceiver-address-}[`++ERC20InvalidReceiver(receiver)++`]
  1304. * {xref-IERC20Errors-ERC20InsufficientAllowance-address-uint256-uint256-}[`++ERC20InsufficientAllowance(spender, allowance, needed)++`]
  1305. * {xref-IERC20Errors-ERC20InvalidApprover-address-}[`++ERC20InvalidApprover(approver)++`]
  1306. * {xref-IERC20Errors-ERC20InvalidSpender-address-}[`++ERC20InvalidSpender(spender)++`]
  1307. [.contract-subindex-inherited]
  1308. .IERC20Metadata
  1309. [.contract-subindex-inherited]
  1310. .IERC20
  1311. --
  1312. [.contract-item]
  1313. [[ERC20Pausable-_update-address-address-uint256-]]
  1314. ==== `[.contract-item-name]#++_update++#++(address from, address to, uint256 value)++` [.item-kind]#internal#
  1315. See {ERC20-_update}.
  1316. Requirements:
  1317. - the contract must not be paused.
  1318. :ERC20ExceededSafeSupply: pass:normal[xref:#ERC20Votes-ERC20ExceededSafeSupply-uint256-uint256-[`++ERC20ExceededSafeSupply++`]]
  1319. :_maxSupply: pass:normal[xref:#ERC20Votes-_maxSupply--[`++_maxSupply++`]]
  1320. :_update: pass:normal[xref:#ERC20Votes-_update-address-address-uint256-[`++_update++`]]
  1321. :_getVotingUnits: pass:normal[xref:#ERC20Votes-_getVotingUnits-address-[`++_getVotingUnits++`]]
  1322. :numCheckpoints: pass:normal[xref:#ERC20Votes-numCheckpoints-address-[`++numCheckpoints++`]]
  1323. :checkpoints: pass:normal[xref:#ERC20Votes-checkpoints-address-uint32-[`++checkpoints++`]]
  1324. [.contract]
  1325. [[ERC20Votes]]
  1326. === `++ERC20Votes++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.0.0-rc.2/contracts/token/ERC20/extensions/ERC20Votes.sol[{github-icon},role=heading-link]
  1327. [.hljs-theme-light.nopadding]
  1328. ```solidity
  1329. import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol";
  1330. ```
  1331. Extension of ERC20 to support Compound-like voting and delegation. This version is more generic than Compound's,
  1332. and supports token supply up to 2^208^ - 1, while COMP is limited to 2^96^ - 1.
  1333. NOTE: This contract does not provide interface compatibility with Compound's COMP token.
  1334. This extension keeps a history (checkpoints) of each account's vote power. Vote power can be delegated either
  1335. by calling the {delegate} function directly, or by providing a signature to be used with {delegateBySig}. Voting
  1336. power can be queried through the public accessors {getVotes} and {getPastVotes}.
  1337. By default, token balance does not account for voting power. This makes transfers cheaper. The downside is that it
  1338. requires users to delegate to themselves in order to activate checkpoints and have their voting power tracked.
  1339. [.contract-index]
  1340. .Functions
  1341. --
  1342. * {xref-ERC20Votes-_maxSupply--}[`++_maxSupply()++`]
  1343. * {xref-ERC20Votes-_update-address-address-uint256-}[`++_update(from, to, value)++`]
  1344. * {xref-ERC20Votes-_getVotingUnits-address-}[`++_getVotingUnits(account)++`]
  1345. * {xref-ERC20Votes-numCheckpoints-address-}[`++numCheckpoints(account)++`]
  1346. * {xref-ERC20Votes-checkpoints-address-uint32-}[`++checkpoints(account, pos)++`]
  1347. [.contract-subindex-inherited]
  1348. .Votes
  1349. * {xref-Votes-clock--}[`++clock()++`]
  1350. * {xref-Votes-CLOCK_MODE--}[`++CLOCK_MODE()++`]
  1351. * {xref-Votes-getVotes-address-}[`++getVotes(account)++`]
  1352. * {xref-Votes-getPastVotes-address-uint256-}[`++getPastVotes(account, timepoint)++`]
  1353. * {xref-Votes-getPastTotalSupply-uint256-}[`++getPastTotalSupply(timepoint)++`]
  1354. * {xref-Votes-_getTotalSupply--}[`++_getTotalSupply()++`]
  1355. * {xref-Votes-delegates-address-}[`++delegates(account)++`]
  1356. * {xref-Votes-delegate-address-}[`++delegate(delegatee)++`]
  1357. * {xref-Votes-delegateBySig-address-uint256-uint256-uint8-bytes32-bytes32-}[`++delegateBySig(delegatee, nonce, expiry, v, r, s)++`]
  1358. * {xref-Votes-_delegate-address-address-}[`++_delegate(account, delegatee)++`]
  1359. * {xref-Votes-_transferVotingUnits-address-address-uint256-}[`++_transferVotingUnits(from, to, amount)++`]
  1360. * {xref-Votes-_numCheckpoints-address-}[`++_numCheckpoints(account)++`]
  1361. * {xref-Votes-_checkpoints-address-uint32-}[`++_checkpoints(account, pos)++`]
  1362. [.contract-subindex-inherited]
  1363. .IERC5805
  1364. [.contract-subindex-inherited]
  1365. .IVotes
  1366. [.contract-subindex-inherited]
  1367. .IERC6372
  1368. [.contract-subindex-inherited]
  1369. .Nonces
  1370. * {xref-Nonces-nonces-address-}[`++nonces(owner)++`]
  1371. * {xref-Nonces-_useNonce-address-}[`++_useNonce(owner)++`]
  1372. * {xref-Nonces-_useCheckedNonce-address-uint256-}[`++_useCheckedNonce(owner, nonce)++`]
  1373. [.contract-subindex-inherited]
  1374. .EIP712
  1375. * {xref-EIP712-_domainSeparatorV4--}[`++_domainSeparatorV4()++`]
  1376. * {xref-EIP712-_hashTypedDataV4-bytes32-}[`++_hashTypedDataV4(structHash)++`]
  1377. * {xref-EIP712-eip712Domain--}[`++eip712Domain()++`]
  1378. * {xref-EIP712-_EIP712Name--}[`++_EIP712Name()++`]
  1379. * {xref-EIP712-_EIP712Version--}[`++_EIP712Version()++`]
  1380. [.contract-subindex-inherited]
  1381. .IERC5267
  1382. [.contract-subindex-inherited]
  1383. .ERC20
  1384. * {xref-ERC20-name--}[`++name()++`]
  1385. * {xref-ERC20-symbol--}[`++symbol()++`]
  1386. * {xref-ERC20-decimals--}[`++decimals()++`]
  1387. * {xref-ERC20-totalSupply--}[`++totalSupply()++`]
  1388. * {xref-ERC20-balanceOf-address-}[`++balanceOf(account)++`]
  1389. * {xref-ERC20-transfer-address-uint256-}[`++transfer(to, value)++`]
  1390. * {xref-ERC20-allowance-address-address-}[`++allowance(owner, spender)++`]
  1391. * {xref-ERC20-approve-address-uint256-}[`++approve(spender, value)++`]
  1392. * {xref-ERC20-transferFrom-address-address-uint256-}[`++transferFrom(from, to, value)++`]
  1393. * {xref-ERC20-_transfer-address-address-uint256-}[`++_transfer(from, to, value)++`]
  1394. * {xref-ERC20-_mint-address-uint256-}[`++_mint(account, value)++`]
  1395. * {xref-ERC20-_burn-address-uint256-}[`++_burn(account, value)++`]
  1396. * {xref-ERC20-_approve-address-address-uint256-}[`++_approve(owner, spender, value)++`]
  1397. * {xref-ERC20-_approve-address-address-uint256-bool-}[`++_approve(owner, spender, value, emitEvent)++`]
  1398. * {xref-ERC20-_spendAllowance-address-address-uint256-}[`++_spendAllowance(owner, spender, value)++`]
  1399. [.contract-subindex-inherited]
  1400. .IERC20Errors
  1401. [.contract-subindex-inherited]
  1402. .IERC20Metadata
  1403. [.contract-subindex-inherited]
  1404. .IERC20
  1405. --
  1406. [.contract-index]
  1407. .Events
  1408. --
  1409. [.contract-subindex-inherited]
  1410. .Votes
  1411. [.contract-subindex-inherited]
  1412. .IERC5805
  1413. [.contract-subindex-inherited]
  1414. .IVotes
  1415. * {xref-IVotes-DelegateChanged-address-address-address-}[`++DelegateChanged(delegator, fromDelegate, toDelegate)++`]
  1416. * {xref-IVotes-DelegateVotesChanged-address-uint256-uint256-}[`++DelegateVotesChanged(delegate, previousVotes, newVotes)++`]
  1417. [.contract-subindex-inherited]
  1418. .IERC6372
  1419. [.contract-subindex-inherited]
  1420. .Nonces
  1421. [.contract-subindex-inherited]
  1422. .EIP712
  1423. [.contract-subindex-inherited]
  1424. .IERC5267
  1425. * {xref-IERC5267-EIP712DomainChanged--}[`++EIP712DomainChanged()++`]
  1426. [.contract-subindex-inherited]
  1427. .ERC20
  1428. [.contract-subindex-inherited]
  1429. .IERC20Errors
  1430. [.contract-subindex-inherited]
  1431. .IERC20Metadata
  1432. [.contract-subindex-inherited]
  1433. .IERC20
  1434. * {xref-IERC20-Transfer-address-address-uint256-}[`++Transfer(from, to, value)++`]
  1435. * {xref-IERC20-Approval-address-address-uint256-}[`++Approval(owner, spender, value)++`]
  1436. --
  1437. [.contract-index]
  1438. .Errors
  1439. --
  1440. * {xref-ERC20Votes-ERC20ExceededSafeSupply-uint256-uint256-}[`++ERC20ExceededSafeSupply(increasedSupply, cap)++`]
  1441. [.contract-subindex-inherited]
  1442. .Votes
  1443. * {xref-Votes-ERC6372InconsistentClock--}[`++ERC6372InconsistentClock()++`]
  1444. * {xref-Votes-ERC5805FutureLookup-uint256-uint48-}[`++ERC5805FutureLookup(timepoint, clock)++`]
  1445. [.contract-subindex-inherited]
  1446. .IERC5805
  1447. [.contract-subindex-inherited]
  1448. .IVotes
  1449. * {xref-IVotes-VotesExpiredSignature-uint256-}[`++VotesExpiredSignature(expiry)++`]
  1450. [.contract-subindex-inherited]
  1451. .IERC6372
  1452. [.contract-subindex-inherited]
  1453. .Nonces
  1454. * {xref-Nonces-InvalidAccountNonce-address-uint256-}[`++InvalidAccountNonce(account, currentNonce)++`]
  1455. [.contract-subindex-inherited]
  1456. .EIP712
  1457. [.contract-subindex-inherited]
  1458. .IERC5267
  1459. [.contract-subindex-inherited]
  1460. .ERC20
  1461. [.contract-subindex-inherited]
  1462. .IERC20Errors
  1463. * {xref-IERC20Errors-ERC20InsufficientBalance-address-uint256-uint256-}[`++ERC20InsufficientBalance(sender, balance, needed)++`]
  1464. * {xref-IERC20Errors-ERC20InvalidSender-address-}[`++ERC20InvalidSender(sender)++`]
  1465. * {xref-IERC20Errors-ERC20InvalidReceiver-address-}[`++ERC20InvalidReceiver(receiver)++`]
  1466. * {xref-IERC20Errors-ERC20InsufficientAllowance-address-uint256-uint256-}[`++ERC20InsufficientAllowance(spender, allowance, needed)++`]
  1467. * {xref-IERC20Errors-ERC20InvalidApprover-address-}[`++ERC20InvalidApprover(approver)++`]
  1468. * {xref-IERC20Errors-ERC20InvalidSpender-address-}[`++ERC20InvalidSpender(spender)++`]
  1469. [.contract-subindex-inherited]
  1470. .IERC20Metadata
  1471. [.contract-subindex-inherited]
  1472. .IERC20
  1473. --
  1474. [.contract-item]
  1475. [[ERC20Votes-_maxSupply--]]
  1476. ==== `[.contract-item-name]#++_maxSupply++#++() → uint256++` [.item-kind]#internal#
  1477. Maximum token supply. Defaults to `type(uint208).max` (2^208^ - 1).
  1478. This maximum is enforced in {_update}. It limits the total supply of the token, which is otherwise a uint256,
  1479. so that checkpoints can be stored in the Trace208 structure used by {{Votes}}. Increasing this value will not
  1480. remove the underlying limitation, and will cause {_update} to fail because of a math overflow in
  1481. {_transferVotingUnits}. An override could be used to further restrict the total supply (to a lower value) if
  1482. additional logic requires it. When resolving override conflicts on this function, the minimum should be
  1483. returned.
  1484. [.contract-item]
  1485. [[ERC20Votes-_update-address-address-uint256-]]
  1486. ==== `[.contract-item-name]#++_update++#++(address from, address to, uint256 value)++` [.item-kind]#internal#
  1487. Move voting power when tokens are transferred.
  1488. Emits a {IVotes-DelegateVotesChanged} event.
  1489. [.contract-item]
  1490. [[ERC20Votes-_getVotingUnits-address-]]
  1491. ==== `[.contract-item-name]#++_getVotingUnits++#++(address account) → uint256++` [.item-kind]#internal#
  1492. Returns the voting units of an `account`.
  1493. WARNING: Overriding this function may compromise the internal vote accounting.
  1494. `ERC20Votes` assumes tokens map to voting units 1:1 and this is not easy to change.
  1495. [.contract-item]
  1496. [[ERC20Votes-numCheckpoints-address-]]
  1497. ==== `[.contract-item-name]#++numCheckpoints++#++(address account) → uint32++` [.item-kind]#public#
  1498. Get number of checkpoints for `account`.
  1499. [.contract-item]
  1500. [[ERC20Votes-checkpoints-address-uint32-]]
  1501. ==== `[.contract-item-name]#++checkpoints++#++(address account, uint32 pos) → struct Checkpoints.Checkpoint208++` [.item-kind]#public#
  1502. Get the `pos`-th checkpoint for `account`.
  1503. [.contract-item]
  1504. [[ERC20Votes-ERC20ExceededSafeSupply-uint256-uint256-]]
  1505. ==== `[.contract-item-name]#++ERC20ExceededSafeSupply++#++(uint256 increasedSupply, uint256 cap)++` [.item-kind]#error#
  1506. Total supply cap has been exceeded, introducing a risk of votes overflowing.
  1507. :ERC20InvalidUnderlying: pass:normal[xref:#ERC20Wrapper-ERC20InvalidUnderlying-address-[`++ERC20InvalidUnderlying++`]]
  1508. :constructor: pass:normal[xref:#ERC20Wrapper-constructor-contract-IERC20-[`++constructor++`]]
  1509. :decimals: pass:normal[xref:#ERC20Wrapper-decimals--[`++decimals++`]]
  1510. :underlying: pass:normal[xref:#ERC20Wrapper-underlying--[`++underlying++`]]
  1511. :depositFor: pass:normal[xref:#ERC20Wrapper-depositFor-address-uint256-[`++depositFor++`]]
  1512. :withdrawTo: pass:normal[xref:#ERC20Wrapper-withdrawTo-address-uint256-[`++withdrawTo++`]]
  1513. :_recover: pass:normal[xref:#ERC20Wrapper-_recover-address-[`++_recover++`]]
  1514. [.contract]
  1515. [[ERC20Wrapper]]
  1516. === `++ERC20Wrapper++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.0.0-rc.2/contracts/token/ERC20/extensions/ERC20Wrapper.sol[{github-icon},role=heading-link]
  1517. [.hljs-theme-light.nopadding]
  1518. ```solidity
  1519. import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Wrapper.sol";
  1520. ```
  1521. Extension of the ERC20 token contract to support token wrapping.
  1522. Users can deposit and withdraw "underlying tokens" and receive a matching number of "wrapped tokens". This is useful
  1523. in conjunction with other modules. For example, combining this wrapping mechanism with {ERC20Votes} will allow the
  1524. wrapping of an existing "basic" ERC20 into a governance token.
  1525. [.contract-index]
  1526. .Functions
  1527. --
  1528. * {xref-ERC20Wrapper-constructor-contract-IERC20-}[`++constructor(underlyingToken)++`]
  1529. * {xref-ERC20Wrapper-decimals--}[`++decimals()++`]
  1530. * {xref-ERC20Wrapper-underlying--}[`++underlying()++`]
  1531. * {xref-ERC20Wrapper-depositFor-address-uint256-}[`++depositFor(account, value)++`]
  1532. * {xref-ERC20Wrapper-withdrawTo-address-uint256-}[`++withdrawTo(account, value)++`]
  1533. * {xref-ERC20Wrapper-_recover-address-}[`++_recover(account)++`]
  1534. [.contract-subindex-inherited]
  1535. .ERC20
  1536. * {xref-ERC20-name--}[`++name()++`]
  1537. * {xref-ERC20-symbol--}[`++symbol()++`]
  1538. * {xref-ERC20-totalSupply--}[`++totalSupply()++`]
  1539. * {xref-ERC20-balanceOf-address-}[`++balanceOf(account)++`]
  1540. * {xref-ERC20-transfer-address-uint256-}[`++transfer(to, value)++`]
  1541. * {xref-ERC20-allowance-address-address-}[`++allowance(owner, spender)++`]
  1542. * {xref-ERC20-approve-address-uint256-}[`++approve(spender, value)++`]
  1543. * {xref-ERC20-transferFrom-address-address-uint256-}[`++transferFrom(from, to, value)++`]
  1544. * {xref-ERC20-_transfer-address-address-uint256-}[`++_transfer(from, to, value)++`]
  1545. * {xref-ERC20-_update-address-address-uint256-}[`++_update(from, to, value)++`]
  1546. * {xref-ERC20-_mint-address-uint256-}[`++_mint(account, value)++`]
  1547. * {xref-ERC20-_burn-address-uint256-}[`++_burn(account, value)++`]
  1548. * {xref-ERC20-_approve-address-address-uint256-}[`++_approve(owner, spender, value)++`]
  1549. * {xref-ERC20-_approve-address-address-uint256-bool-}[`++_approve(owner, spender, value, emitEvent)++`]
  1550. * {xref-ERC20-_spendAllowance-address-address-uint256-}[`++_spendAllowance(owner, spender, value)++`]
  1551. [.contract-subindex-inherited]
  1552. .IERC20Errors
  1553. [.contract-subindex-inherited]
  1554. .IERC20Metadata
  1555. [.contract-subindex-inherited]
  1556. .IERC20
  1557. --
  1558. [.contract-index]
  1559. .Events
  1560. --
  1561. [.contract-subindex-inherited]
  1562. .ERC20
  1563. [.contract-subindex-inherited]
  1564. .IERC20Errors
  1565. [.contract-subindex-inherited]
  1566. .IERC20Metadata
  1567. [.contract-subindex-inherited]
  1568. .IERC20
  1569. * {xref-IERC20-Transfer-address-address-uint256-}[`++Transfer(from, to, value)++`]
  1570. * {xref-IERC20-Approval-address-address-uint256-}[`++Approval(owner, spender, value)++`]
  1571. --
  1572. [.contract-index]
  1573. .Errors
  1574. --
  1575. * {xref-ERC20Wrapper-ERC20InvalidUnderlying-address-}[`++ERC20InvalidUnderlying(token)++`]
  1576. [.contract-subindex-inherited]
  1577. .ERC20
  1578. [.contract-subindex-inherited]
  1579. .IERC20Errors
  1580. * {xref-IERC20Errors-ERC20InsufficientBalance-address-uint256-uint256-}[`++ERC20InsufficientBalance(sender, balance, needed)++`]
  1581. * {xref-IERC20Errors-ERC20InvalidSender-address-}[`++ERC20InvalidSender(sender)++`]
  1582. * {xref-IERC20Errors-ERC20InvalidReceiver-address-}[`++ERC20InvalidReceiver(receiver)++`]
  1583. * {xref-IERC20Errors-ERC20InsufficientAllowance-address-uint256-uint256-}[`++ERC20InsufficientAllowance(spender, allowance, needed)++`]
  1584. * {xref-IERC20Errors-ERC20InvalidApprover-address-}[`++ERC20InvalidApprover(approver)++`]
  1585. * {xref-IERC20Errors-ERC20InvalidSpender-address-}[`++ERC20InvalidSpender(spender)++`]
  1586. [.contract-subindex-inherited]
  1587. .IERC20Metadata
  1588. [.contract-subindex-inherited]
  1589. .IERC20
  1590. --
  1591. [.contract-item]
  1592. [[ERC20Wrapper-constructor-contract-IERC20-]]
  1593. ==== `[.contract-item-name]#++constructor++#++(contract IERC20 underlyingToken)++` [.item-kind]#internal#
  1594. [.contract-item]
  1595. [[ERC20Wrapper-decimals--]]
  1596. ==== `[.contract-item-name]#++decimals++#++() → uint8++` [.item-kind]#public#
  1597. See {ERC20-decimals}.
  1598. [.contract-item]
  1599. [[ERC20Wrapper-underlying--]]
  1600. ==== `[.contract-item-name]#++underlying++#++() → contract IERC20++` [.item-kind]#public#
  1601. Returns the address of the underlying ERC-20 token that is being wrapped.
  1602. [.contract-item]
  1603. [[ERC20Wrapper-depositFor-address-uint256-]]
  1604. ==== `[.contract-item-name]#++depositFor++#++(address account, uint256 value) → bool++` [.item-kind]#public#
  1605. Allow a user to deposit underlying tokens and mint the corresponding number of wrapped tokens.
  1606. [.contract-item]
  1607. [[ERC20Wrapper-withdrawTo-address-uint256-]]
  1608. ==== `[.contract-item-name]#++withdrawTo++#++(address account, uint256 value) → bool++` [.item-kind]#public#
  1609. Allow a user to burn a number of wrapped tokens and withdraw the corresponding number of underlying tokens.
  1610. [.contract-item]
  1611. [[ERC20Wrapper-_recover-address-]]
  1612. ==== `[.contract-item-name]#++_recover++#++(address account) → uint256++` [.item-kind]#internal#
  1613. Mint wrapped token to cover any underlyingTokens that would have been transferred by mistake. Internal
  1614. function that can be exposed with access control if desired.
  1615. [.contract-item]
  1616. [[ERC20Wrapper-ERC20InvalidUnderlying-address-]]
  1617. ==== `[.contract-item-name]#++ERC20InvalidUnderlying++#++(address token)++` [.item-kind]#error#
  1618. The underlying token couldn't be wrapped.
  1619. :ERC3156UnsupportedToken: pass:normal[xref:#ERC20FlashMint-ERC3156UnsupportedToken-address-[`++ERC3156UnsupportedToken++`]]
  1620. :ERC3156ExceededMaxLoan: pass:normal[xref:#ERC20FlashMint-ERC3156ExceededMaxLoan-uint256-[`++ERC3156ExceededMaxLoan++`]]
  1621. :ERC3156InvalidReceiver: pass:normal[xref:#ERC20FlashMint-ERC3156InvalidReceiver-address-[`++ERC3156InvalidReceiver++`]]
  1622. :maxFlashLoan: pass:normal[xref:#ERC20FlashMint-maxFlashLoan-address-[`++maxFlashLoan++`]]
  1623. :flashFee: pass:normal[xref:#ERC20FlashMint-flashFee-address-uint256-[`++flashFee++`]]
  1624. :_flashFee: pass:normal[xref:#ERC20FlashMint-_flashFee-address-uint256-[`++_flashFee++`]]
  1625. :_flashFeeReceiver: pass:normal[xref:#ERC20FlashMint-_flashFeeReceiver--[`++_flashFeeReceiver++`]]
  1626. :flashLoan: pass:normal[xref:#ERC20FlashMint-flashLoan-contract-IERC3156FlashBorrower-address-uint256-bytes-[`++flashLoan++`]]
  1627. [.contract]
  1628. [[ERC20FlashMint]]
  1629. === `++ERC20FlashMint++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.0.0-rc.2/contracts/token/ERC20/extensions/ERC20FlashMint.sol[{github-icon},role=heading-link]
  1630. [.hljs-theme-light.nopadding]
  1631. ```solidity
  1632. import "@openzeppelin/contracts/token/ERC20/extensions/ERC20FlashMint.sol";
  1633. ```
  1634. Implementation of the ERC3156 Flash loans extension, as defined in
  1635. https://eips.ethereum.org/EIPS/eip-3156[ERC-3156].
  1636. Adds the {flashLoan} method, which provides flash loan support at the token
  1637. level. By default there is no fee, but this can be changed by overriding {flashFee}.
  1638. NOTE: When this extension is used along with the {ERC20Capped} or {ERC20Votes} extensions,
  1639. {maxFlashLoan} will not correctly reflect the maximum that can be flash minted. We recommend
  1640. overriding {maxFlashLoan} so that it correctly reflects the supply cap.
  1641. [.contract-index]
  1642. .Functions
  1643. --
  1644. * {xref-ERC20FlashMint-maxFlashLoan-address-}[`++maxFlashLoan(token)++`]
  1645. * {xref-ERC20FlashMint-flashFee-address-uint256-}[`++flashFee(token, value)++`]
  1646. * {xref-ERC20FlashMint-_flashFee-address-uint256-}[`++_flashFee(token, value)++`]
  1647. * {xref-ERC20FlashMint-_flashFeeReceiver--}[`++_flashFeeReceiver()++`]
  1648. * {xref-ERC20FlashMint-flashLoan-contract-IERC3156FlashBorrower-address-uint256-bytes-}[`++flashLoan(receiver, token, value, data)++`]
  1649. [.contract-subindex-inherited]
  1650. .IERC3156FlashLender
  1651. [.contract-subindex-inherited]
  1652. .ERC20
  1653. * {xref-ERC20-name--}[`++name()++`]
  1654. * {xref-ERC20-symbol--}[`++symbol()++`]
  1655. * {xref-ERC20-decimals--}[`++decimals()++`]
  1656. * {xref-ERC20-totalSupply--}[`++totalSupply()++`]
  1657. * {xref-ERC20-balanceOf-address-}[`++balanceOf(account)++`]
  1658. * {xref-ERC20-transfer-address-uint256-}[`++transfer(to, value)++`]
  1659. * {xref-ERC20-allowance-address-address-}[`++allowance(owner, spender)++`]
  1660. * {xref-ERC20-approve-address-uint256-}[`++approve(spender, value)++`]
  1661. * {xref-ERC20-transferFrom-address-address-uint256-}[`++transferFrom(from, to, value)++`]
  1662. * {xref-ERC20-_transfer-address-address-uint256-}[`++_transfer(from, to, value)++`]
  1663. * {xref-ERC20-_update-address-address-uint256-}[`++_update(from, to, value)++`]
  1664. * {xref-ERC20-_mint-address-uint256-}[`++_mint(account, value)++`]
  1665. * {xref-ERC20-_burn-address-uint256-}[`++_burn(account, value)++`]
  1666. * {xref-ERC20-_approve-address-address-uint256-}[`++_approve(owner, spender, value)++`]
  1667. * {xref-ERC20-_approve-address-address-uint256-bool-}[`++_approve(owner, spender, value, emitEvent)++`]
  1668. * {xref-ERC20-_spendAllowance-address-address-uint256-}[`++_spendAllowance(owner, spender, value)++`]
  1669. [.contract-subindex-inherited]
  1670. .IERC20Errors
  1671. [.contract-subindex-inherited]
  1672. .IERC20Metadata
  1673. [.contract-subindex-inherited]
  1674. .IERC20
  1675. --
  1676. [.contract-index]
  1677. .Events
  1678. --
  1679. [.contract-subindex-inherited]
  1680. .IERC3156FlashLender
  1681. [.contract-subindex-inherited]
  1682. .ERC20
  1683. [.contract-subindex-inherited]
  1684. .IERC20Errors
  1685. [.contract-subindex-inherited]
  1686. .IERC20Metadata
  1687. [.contract-subindex-inherited]
  1688. .IERC20
  1689. * {xref-IERC20-Transfer-address-address-uint256-}[`++Transfer(from, to, value)++`]
  1690. * {xref-IERC20-Approval-address-address-uint256-}[`++Approval(owner, spender, value)++`]
  1691. --
  1692. [.contract-index]
  1693. .Errors
  1694. --
  1695. * {xref-ERC20FlashMint-ERC3156UnsupportedToken-address-}[`++ERC3156UnsupportedToken(token)++`]
  1696. * {xref-ERC20FlashMint-ERC3156ExceededMaxLoan-uint256-}[`++ERC3156ExceededMaxLoan(maxLoan)++`]
  1697. * {xref-ERC20FlashMint-ERC3156InvalidReceiver-address-}[`++ERC3156InvalidReceiver(receiver)++`]
  1698. [.contract-subindex-inherited]
  1699. .IERC3156FlashLender
  1700. [.contract-subindex-inherited]
  1701. .ERC20
  1702. [.contract-subindex-inherited]
  1703. .IERC20Errors
  1704. * {xref-IERC20Errors-ERC20InsufficientBalance-address-uint256-uint256-}[`++ERC20InsufficientBalance(sender, balance, needed)++`]
  1705. * {xref-IERC20Errors-ERC20InvalidSender-address-}[`++ERC20InvalidSender(sender)++`]
  1706. * {xref-IERC20Errors-ERC20InvalidReceiver-address-}[`++ERC20InvalidReceiver(receiver)++`]
  1707. * {xref-IERC20Errors-ERC20InsufficientAllowance-address-uint256-uint256-}[`++ERC20InsufficientAllowance(spender, allowance, needed)++`]
  1708. * {xref-IERC20Errors-ERC20InvalidApprover-address-}[`++ERC20InvalidApprover(approver)++`]
  1709. * {xref-IERC20Errors-ERC20InvalidSpender-address-}[`++ERC20InvalidSpender(spender)++`]
  1710. [.contract-subindex-inherited]
  1711. .IERC20Metadata
  1712. [.contract-subindex-inherited]
  1713. .IERC20
  1714. --
  1715. [.contract-item]
  1716. [[ERC20FlashMint-maxFlashLoan-address-]]
  1717. ==== `[.contract-item-name]#++maxFlashLoan++#++(address token) → uint256++` [.item-kind]#public#
  1718. Returns the maximum amount of tokens available for loan.
  1719. [.contract-item]
  1720. [[ERC20FlashMint-flashFee-address-uint256-]]
  1721. ==== `[.contract-item-name]#++flashFee++#++(address token, uint256 value) → uint256++` [.item-kind]#public#
  1722. Returns the fee applied when doing flash loans. This function calls
  1723. the {_flashFee} function which returns the fee applied when doing flash
  1724. loans.
  1725. [.contract-item]
  1726. [[ERC20FlashMint-_flashFee-address-uint256-]]
  1727. ==== `[.contract-item-name]#++_flashFee++#++(address token, uint256 value) → uint256++` [.item-kind]#internal#
  1728. Returns the fee applied when doing flash loans. By default this
  1729. implementation has 0 fees. This function can be overloaded to make
  1730. the flash loan mechanism deflationary.
  1731. [.contract-item]
  1732. [[ERC20FlashMint-_flashFeeReceiver--]]
  1733. ==== `[.contract-item-name]#++_flashFeeReceiver++#++() → address++` [.item-kind]#internal#
  1734. Returns the receiver address of the flash fee. By default this
  1735. implementation returns the address(0) which means the fee amount will be burnt.
  1736. This function can be overloaded to change the fee receiver.
  1737. [.contract-item]
  1738. [[ERC20FlashMint-flashLoan-contract-IERC3156FlashBorrower-address-uint256-bytes-]]
  1739. ==== `[.contract-item-name]#++flashLoan++#++(contract IERC3156FlashBorrower receiver, address token, uint256 value, bytes data) → bool++` [.item-kind]#public#
  1740. Performs a flash loan. New tokens are minted and sent to the
  1741. `receiver`, who is required to implement the {IERC3156FlashBorrower}
  1742. interface. By the end of the flash loan, the receiver is expected to own
  1743. value + fee tokens and have them approved back to the token contract itself so
  1744. they can be burned.
  1745. [.contract-item]
  1746. [[ERC20FlashMint-ERC3156UnsupportedToken-address-]]
  1747. ==== `[.contract-item-name]#++ERC3156UnsupportedToken++#++(address token)++` [.item-kind]#error#
  1748. The loan token is not valid.
  1749. [.contract-item]
  1750. [[ERC20FlashMint-ERC3156ExceededMaxLoan-uint256-]]
  1751. ==== `[.contract-item-name]#++ERC3156ExceededMaxLoan++#++(uint256 maxLoan)++` [.item-kind]#error#
  1752. The requested loan exceeds the max loan value for `token`.
  1753. [.contract-item]
  1754. [[ERC20FlashMint-ERC3156InvalidReceiver-address-]]
  1755. ==== `[.contract-item-name]#++ERC3156InvalidReceiver++#++(address receiver)++` [.item-kind]#error#
  1756. The receiver of a flashloan is not a valid {onFlashLoan} implementer.
  1757. :ERC4626ExceededMaxDeposit: pass:normal[xref:#ERC4626-ERC4626ExceededMaxDeposit-address-uint256-uint256-[`++ERC4626ExceededMaxDeposit++`]]
  1758. :ERC4626ExceededMaxMint: pass:normal[xref:#ERC4626-ERC4626ExceededMaxMint-address-uint256-uint256-[`++ERC4626ExceededMaxMint++`]]
  1759. :ERC4626ExceededMaxWithdraw: pass:normal[xref:#ERC4626-ERC4626ExceededMaxWithdraw-address-uint256-uint256-[`++ERC4626ExceededMaxWithdraw++`]]
  1760. :ERC4626ExceededMaxRedeem: pass:normal[xref:#ERC4626-ERC4626ExceededMaxRedeem-address-uint256-uint256-[`++ERC4626ExceededMaxRedeem++`]]
  1761. :constructor: pass:normal[xref:#ERC4626-constructor-contract-IERC20-[`++constructor++`]]
  1762. :decimals: pass:normal[xref:#ERC4626-decimals--[`++decimals++`]]
  1763. :asset: pass:normal[xref:#ERC4626-asset--[`++asset++`]]
  1764. :totalAssets: pass:normal[xref:#ERC4626-totalAssets--[`++totalAssets++`]]
  1765. :convertToShares: pass:normal[xref:#ERC4626-convertToShares-uint256-[`++convertToShares++`]]
  1766. :convertToAssets: pass:normal[xref:#ERC4626-convertToAssets-uint256-[`++convertToAssets++`]]
  1767. :maxDeposit: pass:normal[xref:#ERC4626-maxDeposit-address-[`++maxDeposit++`]]
  1768. :maxMint: pass:normal[xref:#ERC4626-maxMint-address-[`++maxMint++`]]
  1769. :maxWithdraw: pass:normal[xref:#ERC4626-maxWithdraw-address-[`++maxWithdraw++`]]
  1770. :maxRedeem: pass:normal[xref:#ERC4626-maxRedeem-address-[`++maxRedeem++`]]
  1771. :previewDeposit: pass:normal[xref:#ERC4626-previewDeposit-uint256-[`++previewDeposit++`]]
  1772. :previewMint: pass:normal[xref:#ERC4626-previewMint-uint256-[`++previewMint++`]]
  1773. :previewWithdraw: pass:normal[xref:#ERC4626-previewWithdraw-uint256-[`++previewWithdraw++`]]
  1774. :previewRedeem: pass:normal[xref:#ERC4626-previewRedeem-uint256-[`++previewRedeem++`]]
  1775. :deposit: pass:normal[xref:#ERC4626-deposit-uint256-address-[`++deposit++`]]
  1776. :mint: pass:normal[xref:#ERC4626-mint-uint256-address-[`++mint++`]]
  1777. :withdraw: pass:normal[xref:#ERC4626-withdraw-uint256-address-address-[`++withdraw++`]]
  1778. :redeem: pass:normal[xref:#ERC4626-redeem-uint256-address-address-[`++redeem++`]]
  1779. :_convertToShares: pass:normal[xref:#ERC4626-_convertToShares-uint256-enum-Math-Rounding-[`++_convertToShares++`]]
  1780. :_convertToAssets: pass:normal[xref:#ERC4626-_convertToAssets-uint256-enum-Math-Rounding-[`++_convertToAssets++`]]
  1781. :_deposit: pass:normal[xref:#ERC4626-_deposit-address-address-uint256-uint256-[`++_deposit++`]]
  1782. :_withdraw: pass:normal[xref:#ERC4626-_withdraw-address-address-address-uint256-uint256-[`++_withdraw++`]]
  1783. :_decimalsOffset: pass:normal[xref:#ERC4626-_decimalsOffset--[`++_decimalsOffset++`]]
  1784. [.contract]
  1785. [[ERC4626]]
  1786. === `++ERC4626++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.0.0-rc.2/contracts/token/ERC20/extensions/ERC4626.sol[{github-icon},role=heading-link]
  1787. [.hljs-theme-light.nopadding]
  1788. ```solidity
  1789. import "@openzeppelin/contracts/token/ERC20/extensions/ERC4626.sol";
  1790. ```
  1791. Implementation of the ERC4626 "Tokenized Vault Standard" as defined in
  1792. https://eips.ethereum.org/EIPS/eip-4626[EIP-4626].
  1793. This extension allows the minting and burning of "shares" (represented using the ERC20 inheritance) in exchange for
  1794. underlying "assets" through standardized {deposit}, {mint}, {redeem} and {burn} workflows. This contract extends
  1795. the ERC20 standard. Any additional extensions included along it would affect the "shares" token represented by this
  1796. contract and not the "assets" token which is an independent contract.
  1797. [CAUTION]
  1798. ====
  1799. In empty (or nearly empty) ERC-4626 vaults, deposits are at high risk of being stolen through frontrunning
  1800. with a "donation" to the vault that inflates the price of a share. This is variously known as a donation or inflation
  1801. attack and is essentially a problem of slippage. Vault deployers can protect against this attack by making an initial
  1802. deposit of a non-trivial amount of the asset, such that price manipulation becomes infeasible. Withdrawals may
  1803. similarly be affected by slippage. Users can protect against this attack as well as unexpected slippage in general by
  1804. verifying the amount received is as expected, using a wrapper that performs these checks such as
  1805. https://github.com/fei-protocol/ERC4626#erc4626router-and-base[ERC4626Router].
  1806. Since v4.9, this implementation uses virtual assets and shares to mitigate that risk. The `_decimalsOffset()`
  1807. corresponds to an offset in the decimal representation between the underlying asset's decimals and the vault
  1808. decimals. This offset also determines the rate of virtual shares to virtual assets in the vault, which itself
  1809. determines the initial exchange rate. While not fully preventing the attack, analysis shows that the default offset
  1810. (0) makes it non-profitable, as a result of the value being captured by the virtual shares (out of the attacker's
  1811. donation) matching the attacker's expected gains. With a larger offset, the attack becomes orders of magnitude more
  1812. expensive than it is profitable. More details about the underlying math can be found
  1813. xref:erc4626.adoc#inflation-attack[here].
  1814. The drawback of this approach is that the virtual shares do capture (a very small) part of the value being accrued
  1815. to the vault. Also, if the vault experiences losses, the users try to exit the vault, the virtual shares and assets
  1816. will cause the first user to exit to experience reduced losses in detriment to the last users that will experience
  1817. bigger losses. Developers willing to revert back to the pre-v4.9 behavior just need to override the
  1818. `_convertToShares` and `_convertToAssets` functions.
  1819. To learn more, check out our xref:ROOT:erc4626.adoc[ERC-4626 guide].
  1820. ====
  1821. [.contract-index]
  1822. .Functions
  1823. --
  1824. * {xref-ERC4626-constructor-contract-IERC20-}[`++constructor(asset_)++`]
  1825. * {xref-ERC4626-decimals--}[`++decimals()++`]
  1826. * {xref-ERC4626-asset--}[`++asset()++`]
  1827. * {xref-ERC4626-totalAssets--}[`++totalAssets()++`]
  1828. * {xref-ERC4626-convertToShares-uint256-}[`++convertToShares(assets)++`]
  1829. * {xref-ERC4626-convertToAssets-uint256-}[`++convertToAssets(shares)++`]
  1830. * {xref-ERC4626-maxDeposit-address-}[`++maxDeposit()++`]
  1831. * {xref-ERC4626-maxMint-address-}[`++maxMint()++`]
  1832. * {xref-ERC4626-maxWithdraw-address-}[`++maxWithdraw(owner)++`]
  1833. * {xref-ERC4626-maxRedeem-address-}[`++maxRedeem(owner)++`]
  1834. * {xref-ERC4626-previewDeposit-uint256-}[`++previewDeposit(assets)++`]
  1835. * {xref-ERC4626-previewMint-uint256-}[`++previewMint(shares)++`]
  1836. * {xref-ERC4626-previewWithdraw-uint256-}[`++previewWithdraw(assets)++`]
  1837. * {xref-ERC4626-previewRedeem-uint256-}[`++previewRedeem(shares)++`]
  1838. * {xref-ERC4626-deposit-uint256-address-}[`++deposit(assets, receiver)++`]
  1839. * {xref-ERC4626-mint-uint256-address-}[`++mint(shares, receiver)++`]
  1840. * {xref-ERC4626-withdraw-uint256-address-address-}[`++withdraw(assets, receiver, owner)++`]
  1841. * {xref-ERC4626-redeem-uint256-address-address-}[`++redeem(shares, receiver, owner)++`]
  1842. * {xref-ERC4626-_convertToShares-uint256-enum-Math-Rounding-}[`++_convertToShares(assets, rounding)++`]
  1843. * {xref-ERC4626-_convertToAssets-uint256-enum-Math-Rounding-}[`++_convertToAssets(shares, rounding)++`]
  1844. * {xref-ERC4626-_deposit-address-address-uint256-uint256-}[`++_deposit(caller, receiver, assets, shares)++`]
  1845. * {xref-ERC4626-_withdraw-address-address-address-uint256-uint256-}[`++_withdraw(caller, receiver, owner, assets, shares)++`]
  1846. * {xref-ERC4626-_decimalsOffset--}[`++_decimalsOffset()++`]
  1847. [.contract-subindex-inherited]
  1848. .IERC4626
  1849. [.contract-subindex-inherited]
  1850. .ERC20
  1851. * {xref-ERC20-name--}[`++name()++`]
  1852. * {xref-ERC20-symbol--}[`++symbol()++`]
  1853. * {xref-ERC20-totalSupply--}[`++totalSupply()++`]
  1854. * {xref-ERC20-balanceOf-address-}[`++balanceOf(account)++`]
  1855. * {xref-ERC20-transfer-address-uint256-}[`++transfer(to, value)++`]
  1856. * {xref-ERC20-allowance-address-address-}[`++allowance(owner, spender)++`]
  1857. * {xref-ERC20-approve-address-uint256-}[`++approve(spender, value)++`]
  1858. * {xref-ERC20-transferFrom-address-address-uint256-}[`++transferFrom(from, to, value)++`]
  1859. * {xref-ERC20-_transfer-address-address-uint256-}[`++_transfer(from, to, value)++`]
  1860. * {xref-ERC20-_update-address-address-uint256-}[`++_update(from, to, value)++`]
  1861. * {xref-ERC20-_mint-address-uint256-}[`++_mint(account, value)++`]
  1862. * {xref-ERC20-_burn-address-uint256-}[`++_burn(account, value)++`]
  1863. * {xref-ERC20-_approve-address-address-uint256-}[`++_approve(owner, spender, value)++`]
  1864. * {xref-ERC20-_approve-address-address-uint256-bool-}[`++_approve(owner, spender, value, emitEvent)++`]
  1865. * {xref-ERC20-_spendAllowance-address-address-uint256-}[`++_spendAllowance(owner, spender, value)++`]
  1866. [.contract-subindex-inherited]
  1867. .IERC20Errors
  1868. [.contract-subindex-inherited]
  1869. .IERC20Metadata
  1870. [.contract-subindex-inherited]
  1871. .IERC20
  1872. --
  1873. [.contract-index]
  1874. .Events
  1875. --
  1876. [.contract-subindex-inherited]
  1877. .IERC4626
  1878. * {xref-IERC4626-Deposit-address-address-uint256-uint256-}[`++Deposit(sender, owner, assets, shares)++`]
  1879. * {xref-IERC4626-Withdraw-address-address-address-uint256-uint256-}[`++Withdraw(sender, receiver, owner, assets, shares)++`]
  1880. [.contract-subindex-inherited]
  1881. .ERC20
  1882. [.contract-subindex-inherited]
  1883. .IERC20Errors
  1884. [.contract-subindex-inherited]
  1885. .IERC20Metadata
  1886. [.contract-subindex-inherited]
  1887. .IERC20
  1888. * {xref-IERC20-Transfer-address-address-uint256-}[`++Transfer(from, to, value)++`]
  1889. * {xref-IERC20-Approval-address-address-uint256-}[`++Approval(owner, spender, value)++`]
  1890. --
  1891. [.contract-index]
  1892. .Errors
  1893. --
  1894. * {xref-ERC4626-ERC4626ExceededMaxDeposit-address-uint256-uint256-}[`++ERC4626ExceededMaxDeposit(receiver, assets, max)++`]
  1895. * {xref-ERC4626-ERC4626ExceededMaxMint-address-uint256-uint256-}[`++ERC4626ExceededMaxMint(receiver, shares, max)++`]
  1896. * {xref-ERC4626-ERC4626ExceededMaxWithdraw-address-uint256-uint256-}[`++ERC4626ExceededMaxWithdraw(owner, assets, max)++`]
  1897. * {xref-ERC4626-ERC4626ExceededMaxRedeem-address-uint256-uint256-}[`++ERC4626ExceededMaxRedeem(owner, shares, max)++`]
  1898. [.contract-subindex-inherited]
  1899. .IERC4626
  1900. [.contract-subindex-inherited]
  1901. .ERC20
  1902. [.contract-subindex-inherited]
  1903. .IERC20Errors
  1904. * {xref-IERC20Errors-ERC20InsufficientBalance-address-uint256-uint256-}[`++ERC20InsufficientBalance(sender, balance, needed)++`]
  1905. * {xref-IERC20Errors-ERC20InvalidSender-address-}[`++ERC20InvalidSender(sender)++`]
  1906. * {xref-IERC20Errors-ERC20InvalidReceiver-address-}[`++ERC20InvalidReceiver(receiver)++`]
  1907. * {xref-IERC20Errors-ERC20InsufficientAllowance-address-uint256-uint256-}[`++ERC20InsufficientAllowance(spender, allowance, needed)++`]
  1908. * {xref-IERC20Errors-ERC20InvalidApprover-address-}[`++ERC20InvalidApprover(approver)++`]
  1909. * {xref-IERC20Errors-ERC20InvalidSpender-address-}[`++ERC20InvalidSpender(spender)++`]
  1910. [.contract-subindex-inherited]
  1911. .IERC20Metadata
  1912. [.contract-subindex-inherited]
  1913. .IERC20
  1914. --
  1915. [.contract-item]
  1916. [[ERC4626-constructor-contract-IERC20-]]
  1917. ==== `[.contract-item-name]#++constructor++#++(contract IERC20 asset_)++` [.item-kind]#internal#
  1918. Set the underlying asset contract. This must be an ERC20-compatible contract (ERC20 or ERC777).
  1919. [.contract-item]
  1920. [[ERC4626-decimals--]]
  1921. ==== `[.contract-item-name]#++decimals++#++() → uint8++` [.item-kind]#public#
  1922. Decimals are computed by adding the decimal offset on top of the underlying asset's decimals. This
  1923. "original" value is cached during construction of the vault contract. If this read operation fails (e.g., the
  1924. asset has not been created yet), a default of 18 is used to represent the underlying asset's decimals.
  1925. See {IERC20Metadata-decimals}.
  1926. [.contract-item]
  1927. [[ERC4626-asset--]]
  1928. ==== `[.contract-item-name]#++asset++#++() → address++` [.item-kind]#public#
  1929. See {IERC4626-asset}.
  1930. [.contract-item]
  1931. [[ERC4626-totalAssets--]]
  1932. ==== `[.contract-item-name]#++totalAssets++#++() → uint256++` [.item-kind]#public#
  1933. See {IERC4626-totalAssets}.
  1934. [.contract-item]
  1935. [[ERC4626-convertToShares-uint256-]]
  1936. ==== `[.contract-item-name]#++convertToShares++#++(uint256 assets) → uint256++` [.item-kind]#public#
  1937. See {IERC4626-convertToShares}.
  1938. [.contract-item]
  1939. [[ERC4626-convertToAssets-uint256-]]
  1940. ==== `[.contract-item-name]#++convertToAssets++#++(uint256 shares) → uint256++` [.item-kind]#public#
  1941. See {IERC4626-convertToAssets}.
  1942. [.contract-item]
  1943. [[ERC4626-maxDeposit-address-]]
  1944. ==== `[.contract-item-name]#++maxDeposit++#++(address) → uint256++` [.item-kind]#public#
  1945. See {IERC4626-maxDeposit}.
  1946. [.contract-item]
  1947. [[ERC4626-maxMint-address-]]
  1948. ==== `[.contract-item-name]#++maxMint++#++(address) → uint256++` [.item-kind]#public#
  1949. See {IERC4626-maxMint}.
  1950. [.contract-item]
  1951. [[ERC4626-maxWithdraw-address-]]
  1952. ==== `[.contract-item-name]#++maxWithdraw++#++(address owner) → uint256++` [.item-kind]#public#
  1953. See {IERC4626-maxWithdraw}.
  1954. [.contract-item]
  1955. [[ERC4626-maxRedeem-address-]]
  1956. ==== `[.contract-item-name]#++maxRedeem++#++(address owner) → uint256++` [.item-kind]#public#
  1957. See {IERC4626-maxRedeem}.
  1958. [.contract-item]
  1959. [[ERC4626-previewDeposit-uint256-]]
  1960. ==== `[.contract-item-name]#++previewDeposit++#++(uint256 assets) → uint256++` [.item-kind]#public#
  1961. See {IERC4626-previewDeposit}.
  1962. [.contract-item]
  1963. [[ERC4626-previewMint-uint256-]]
  1964. ==== `[.contract-item-name]#++previewMint++#++(uint256 shares) → uint256++` [.item-kind]#public#
  1965. See {IERC4626-previewMint}.
  1966. [.contract-item]
  1967. [[ERC4626-previewWithdraw-uint256-]]
  1968. ==== `[.contract-item-name]#++previewWithdraw++#++(uint256 assets) → uint256++` [.item-kind]#public#
  1969. See {IERC4626-previewWithdraw}.
  1970. [.contract-item]
  1971. [[ERC4626-previewRedeem-uint256-]]
  1972. ==== `[.contract-item-name]#++previewRedeem++#++(uint256 shares) → uint256++` [.item-kind]#public#
  1973. See {IERC4626-previewRedeem}.
  1974. [.contract-item]
  1975. [[ERC4626-deposit-uint256-address-]]
  1976. ==== `[.contract-item-name]#++deposit++#++(uint256 assets, address receiver) → uint256++` [.item-kind]#public#
  1977. See {IERC4626-deposit}.
  1978. [.contract-item]
  1979. [[ERC4626-mint-uint256-address-]]
  1980. ==== `[.contract-item-name]#++mint++#++(uint256 shares, address receiver) → uint256++` [.item-kind]#public#
  1981. See {IERC4626-mint}.
  1982. As opposed to {deposit}, minting is allowed even if the vault is in a state where the price of a share is zero.
  1983. In this case, the shares will be minted without requiring any assets to be deposited.
  1984. [.contract-item]
  1985. [[ERC4626-withdraw-uint256-address-address-]]
  1986. ==== `[.contract-item-name]#++withdraw++#++(uint256 assets, address receiver, address owner) → uint256++` [.item-kind]#public#
  1987. See {IERC4626-withdraw}.
  1988. [.contract-item]
  1989. [[ERC4626-redeem-uint256-address-address-]]
  1990. ==== `[.contract-item-name]#++redeem++#++(uint256 shares, address receiver, address owner) → uint256++` [.item-kind]#public#
  1991. See {IERC4626-redeem}.
  1992. [.contract-item]
  1993. [[ERC4626-_convertToShares-uint256-enum-Math-Rounding-]]
  1994. ==== `[.contract-item-name]#++_convertToShares++#++(uint256 assets, enum Math.Rounding rounding) → uint256++` [.item-kind]#internal#
  1995. Internal conversion function (from assets to shares) with support for rounding direction.
  1996. [.contract-item]
  1997. [[ERC4626-_convertToAssets-uint256-enum-Math-Rounding-]]
  1998. ==== `[.contract-item-name]#++_convertToAssets++#++(uint256 shares, enum Math.Rounding rounding) → uint256++` [.item-kind]#internal#
  1999. Internal conversion function (from shares to assets) with support for rounding direction.
  2000. [.contract-item]
  2001. [[ERC4626-_deposit-address-address-uint256-uint256-]]
  2002. ==== `[.contract-item-name]#++_deposit++#++(address caller, address receiver, uint256 assets, uint256 shares)++` [.item-kind]#internal#
  2003. Deposit/mint common workflow.
  2004. [.contract-item]
  2005. [[ERC4626-_withdraw-address-address-address-uint256-uint256-]]
  2006. ==== `[.contract-item-name]#++_withdraw++#++(address caller, address receiver, address owner, uint256 assets, uint256 shares)++` [.item-kind]#internal#
  2007. Withdraw/redeem common workflow.
  2008. [.contract-item]
  2009. [[ERC4626-_decimalsOffset--]]
  2010. ==== `[.contract-item-name]#++_decimalsOffset++#++() → uint8++` [.item-kind]#internal#
  2011. [.contract-item]
  2012. [[ERC4626-ERC4626ExceededMaxDeposit-address-uint256-uint256-]]
  2013. ==== `[.contract-item-name]#++ERC4626ExceededMaxDeposit++#++(address receiver, uint256 assets, uint256 max)++` [.item-kind]#error#
  2014. Attempted to deposit more assets than the max amount for `receiver`.
  2015. [.contract-item]
  2016. [[ERC4626-ERC4626ExceededMaxMint-address-uint256-uint256-]]
  2017. ==== `[.contract-item-name]#++ERC4626ExceededMaxMint++#++(address receiver, uint256 shares, uint256 max)++` [.item-kind]#error#
  2018. Attempted to mint more shares than the max amount for `receiver`.
  2019. [.contract-item]
  2020. [[ERC4626-ERC4626ExceededMaxWithdraw-address-uint256-uint256-]]
  2021. ==== `[.contract-item-name]#++ERC4626ExceededMaxWithdraw++#++(address owner, uint256 assets, uint256 max)++` [.item-kind]#error#
  2022. Attempted to withdraw more assets than the max amount for `receiver`.
  2023. [.contract-item]
  2024. [[ERC4626-ERC4626ExceededMaxRedeem-address-uint256-uint256-]]
  2025. ==== `[.contract-item-name]#++ERC4626ExceededMaxRedeem++#++(address owner, uint256 shares, uint256 max)++` [.item-kind]#error#
  2026. Attempted to redeem more shares than the max amount for `receiver`.
  2027. == Utilities
  2028. :SafeERC20FailedOperation: pass:normal[xref:#SafeERC20-SafeERC20FailedOperation-address-[`++SafeERC20FailedOperation++`]]
  2029. :SafeERC20FailedDecreaseAllowance: pass:normal[xref:#SafeERC20-SafeERC20FailedDecreaseAllowance-address-uint256-uint256-[`++SafeERC20FailedDecreaseAllowance++`]]
  2030. :safeTransfer: pass:normal[xref:#SafeERC20-safeTransfer-contract-IERC20-address-uint256-[`++safeTransfer++`]]
  2031. :safeTransferFrom: pass:normal[xref:#SafeERC20-safeTransferFrom-contract-IERC20-address-address-uint256-[`++safeTransferFrom++`]]
  2032. :safeIncreaseAllowance: pass:normal[xref:#SafeERC20-safeIncreaseAllowance-contract-IERC20-address-uint256-[`++safeIncreaseAllowance++`]]
  2033. :safeDecreaseAllowance: pass:normal[xref:#SafeERC20-safeDecreaseAllowance-contract-IERC20-address-uint256-[`++safeDecreaseAllowance++`]]
  2034. :forceApprove: pass:normal[xref:#SafeERC20-forceApprove-contract-IERC20-address-uint256-[`++forceApprove++`]]
  2035. [.contract]
  2036. [[SafeERC20]]
  2037. === `++SafeERC20++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.0.0-rc.2/contracts/token/ERC20/utils/SafeERC20.sol[{github-icon},role=heading-link]
  2038. [.hljs-theme-light.nopadding]
  2039. ```solidity
  2040. import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
  2041. ```
  2042. Wrappers around ERC20 operations that throw on failure (when the token
  2043. contract returns false). Tokens that return no value (and instead revert or
  2044. throw on failure) are also supported, non-reverting calls are assumed to be
  2045. successful.
  2046. To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
  2047. which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
  2048. [.contract-index]
  2049. .Functions
  2050. --
  2051. * {xref-SafeERC20-safeTransfer-contract-IERC20-address-uint256-}[`++safeTransfer(token, to, value)++`]
  2052. * {xref-SafeERC20-safeTransferFrom-contract-IERC20-address-address-uint256-}[`++safeTransferFrom(token, from, to, value)++`]
  2053. * {xref-SafeERC20-safeIncreaseAllowance-contract-IERC20-address-uint256-}[`++safeIncreaseAllowance(token, spender, value)++`]
  2054. * {xref-SafeERC20-safeDecreaseAllowance-contract-IERC20-address-uint256-}[`++safeDecreaseAllowance(token, spender, requestedDecrease)++`]
  2055. * {xref-SafeERC20-forceApprove-contract-IERC20-address-uint256-}[`++forceApprove(token, spender, value)++`]
  2056. --
  2057. [.contract-index]
  2058. .Errors
  2059. --
  2060. * {xref-SafeERC20-SafeERC20FailedOperation-address-}[`++SafeERC20FailedOperation(token)++`]
  2061. * {xref-SafeERC20-SafeERC20FailedDecreaseAllowance-address-uint256-uint256-}[`++SafeERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease)++`]
  2062. --
  2063. [.contract-item]
  2064. [[SafeERC20-safeTransfer-contract-IERC20-address-uint256-]]
  2065. ==== `[.contract-item-name]#++safeTransfer++#++(contract IERC20 token, address to, uint256 value)++` [.item-kind]#internal#
  2066. Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,
  2067. non-reverting calls are assumed to be successful.
  2068. [.contract-item]
  2069. [[SafeERC20-safeTransferFrom-contract-IERC20-address-address-uint256-]]
  2070. ==== `[.contract-item-name]#++safeTransferFrom++#++(contract IERC20 token, address from, address to, uint256 value)++` [.item-kind]#internal#
  2071. Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the
  2072. calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.
  2073. [.contract-item]
  2074. [[SafeERC20-safeIncreaseAllowance-contract-IERC20-address-uint256-]]
  2075. ==== `[.contract-item-name]#++safeIncreaseAllowance++#++(contract IERC20 token, address spender, uint256 value)++` [.item-kind]#internal#
  2076. Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,
  2077. non-reverting calls are assumed to be successful.
  2078. [.contract-item]
  2079. [[SafeERC20-safeDecreaseAllowance-contract-IERC20-address-uint256-]]
  2080. ==== `[.contract-item-name]#++safeDecreaseAllowance++#++(contract IERC20 token, address spender, uint256 requestedDecrease)++` [.item-kind]#internal#
  2081. Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no
  2082. value, non-reverting calls are assumed to be successful.
  2083. [.contract-item]
  2084. [[SafeERC20-forceApprove-contract-IERC20-address-uint256-]]
  2085. ==== `[.contract-item-name]#++forceApprove++#++(contract IERC20 token, address spender, uint256 value)++` [.item-kind]#internal#
  2086. Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,
  2087. non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval
  2088. to be set to zero before setting it to a non-zero value, such as USDT.
  2089. [.contract-item]
  2090. [[SafeERC20-SafeERC20FailedOperation-address-]]
  2091. ==== `[.contract-item-name]#++SafeERC20FailedOperation++#++(address token)++` [.item-kind]#error#
  2092. An operation with an ERC20 token failed.
  2093. [.contract-item]
  2094. [[SafeERC20-SafeERC20FailedDecreaseAllowance-address-uint256-uint256-]]
  2095. ==== `[.contract-item-name]#++SafeERC20FailedDecreaseAllowance++#++(address spender, uint256 currentAllowance, uint256 requestedDecrease)++` [.item-kind]#error#
  2096. Indicates a failed `decreaseAllowance` request.