ERC20.adoc 159 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204
  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. :ERC20Snapshot: pass:normal[xref:token/ERC20.adoc#ERC20Snapshot[`ERC20Snapshot`]]
  10. :ERC20FlashMint: pass:normal[xref:token/ERC20.adoc#ERC20FlashMint[`ERC20FlashMint`]]
  11. :ERC20Votes: pass:normal[xref:token/ERC20.adoc#ERC20Votes[`ERC20Votes`]]
  12. :ERC20VotesComp: pass:normal[xref:token/ERC20.adoc#ERC20VotesComp[`ERC20VotesComp`]]
  13. :ERC20Wrapper: pass:normal[xref:token/ERC20.adoc#ERC20Wrapper[`ERC20Wrapper`]]
  14. :ERC20Votes: pass:normal[xref:token/ERC20.adoc#ERC20Votes[`ERC20Votes`]]
  15. :ERC4626: pass:normal[xref:token/ERC20.adoc#ERC4626[`ERC4626`]]
  16. :SafeERC20: pass:normal[xref:token/ERC20.adoc#SafeERC20[`SafeERC20`]]
  17. :TokenTimelock: pass:normal[xref:token/ERC20.adoc#TokenTimelock[`TokenTimelock`]]
  18. :ERC20PresetMinterPauser: pass:normal[xref:token/ERC20.adoc#ERC20PresetMinterPauser[`ERC20PresetMinterPauser`]]
  19. :xref-IERC20-totalSupply--: xref:token/ERC20.adoc#IERC20-totalSupply--
  20. :xref-IERC20-balanceOf-address-: xref:token/ERC20.adoc#IERC20-balanceOf-address-
  21. :xref-IERC20-transfer-address-uint256-: xref:token/ERC20.adoc#IERC20-transfer-address-uint256-
  22. :xref-IERC20-allowance-address-address-: xref:token/ERC20.adoc#IERC20-allowance-address-address-
  23. :xref-IERC20-approve-address-uint256-: xref:token/ERC20.adoc#IERC20-approve-address-uint256-
  24. :xref-IERC20-transferFrom-address-address-uint256-: xref:token/ERC20.adoc#IERC20-transferFrom-address-address-uint256-
  25. :xref-IERC20-Transfer-address-address-uint256-: xref:token/ERC20.adoc#IERC20-Transfer-address-address-uint256-
  26. :xref-IERC20-Approval-address-address-uint256-: xref:token/ERC20.adoc#IERC20-Approval-address-address-uint256-
  27. :xref-IERC20Metadata-name--: xref:token/ERC20.adoc#IERC20Metadata-name--
  28. :xref-IERC20Metadata-symbol--: xref:token/ERC20.adoc#IERC20Metadata-symbol--
  29. :xref-IERC20Metadata-decimals--: xref:token/ERC20.adoc#IERC20Metadata-decimals--
  30. :xref-IERC20-totalSupply--: xref:token/ERC20.adoc#IERC20-totalSupply--
  31. :xref-IERC20-balanceOf-address-: xref:token/ERC20.adoc#IERC20-balanceOf-address-
  32. :xref-IERC20-transfer-address-uint256-: xref:token/ERC20.adoc#IERC20-transfer-address-uint256-
  33. :xref-IERC20-allowance-address-address-: xref:token/ERC20.adoc#IERC20-allowance-address-address-
  34. :xref-IERC20-approve-address-uint256-: xref:token/ERC20.adoc#IERC20-approve-address-uint256-
  35. :xref-IERC20-transferFrom-address-address-uint256-: xref:token/ERC20.adoc#IERC20-transferFrom-address-address-uint256-
  36. :xref-IERC20-Transfer-address-address-uint256-: xref:token/ERC20.adoc#IERC20-Transfer-address-address-uint256-
  37. :xref-IERC20-Approval-address-address-uint256-: xref:token/ERC20.adoc#IERC20-Approval-address-address-uint256-
  38. :IERC20: pass:normal[xref:token/ERC20.adoc#IERC20[`IERC20`]]
  39. :ERC20PresetMinterPauser: pass:normal[xref:token/ERC20.adoc#ERC20PresetMinterPauser[`ERC20PresetMinterPauser`]]
  40. :IERC20-approve: pass:normal[xref:token/ERC20.adoc#IERC20-approve-address-uint256-[`IERC20.approve`]]
  41. :xref-ERC20-constructor-string-string-: xref:token/ERC20.adoc#ERC20-constructor-string-string-
  42. :xref-ERC20-name--: xref:token/ERC20.adoc#ERC20-name--
  43. :xref-ERC20-symbol--: xref:token/ERC20.adoc#ERC20-symbol--
  44. :xref-ERC20-decimals--: xref:token/ERC20.adoc#ERC20-decimals--
  45. :xref-ERC20-totalSupply--: xref:token/ERC20.adoc#ERC20-totalSupply--
  46. :xref-ERC20-balanceOf-address-: xref:token/ERC20.adoc#ERC20-balanceOf-address-
  47. :xref-ERC20-transfer-address-uint256-: xref:token/ERC20.adoc#ERC20-transfer-address-uint256-
  48. :xref-ERC20-allowance-address-address-: xref:token/ERC20.adoc#ERC20-allowance-address-address-
  49. :xref-ERC20-approve-address-uint256-: xref:token/ERC20.adoc#ERC20-approve-address-uint256-
  50. :xref-ERC20-transferFrom-address-address-uint256-: xref:token/ERC20.adoc#ERC20-transferFrom-address-address-uint256-
  51. :xref-ERC20-increaseAllowance-address-uint256-: xref:token/ERC20.adoc#ERC20-increaseAllowance-address-uint256-
  52. :xref-ERC20-decreaseAllowance-address-uint256-: xref:token/ERC20.adoc#ERC20-decreaseAllowance-address-uint256-
  53. :xref-ERC20-_transfer-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_transfer-address-address-uint256-
  54. :xref-ERC20-_mint-address-uint256-: xref:token/ERC20.adoc#ERC20-_mint-address-uint256-
  55. :xref-ERC20-_burn-address-uint256-: xref:token/ERC20.adoc#ERC20-_burn-address-uint256-
  56. :xref-ERC20-_approve-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_approve-address-address-uint256-
  57. :xref-ERC20-_spendAllowance-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_spendAllowance-address-address-uint256-
  58. :xref-ERC20-_beforeTokenTransfer-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_beforeTokenTransfer-address-address-uint256-
  59. :xref-ERC20-_afterTokenTransfer-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_afterTokenTransfer-address-address-uint256-
  60. :xref-IERC20-Transfer-address-address-uint256-: xref:token/ERC20.adoc#IERC20-Transfer-address-address-uint256-
  61. :xref-IERC20-Approval-address-address-uint256-: xref:token/ERC20.adoc#IERC20-Approval-address-address-uint256-
  62. :IERC20-balanceOf: pass:normal[xref:token/ERC20.adoc#IERC20-balanceOf-address-[`IERC20.balanceOf`]]
  63. :IERC20-transfer: pass:normal[xref:token/ERC20.adoc#IERC20-transfer-address-uint256-[`IERC20.transfer`]]
  64. :IERC20-totalSupply: pass:normal[xref:token/ERC20.adoc#IERC20-totalSupply--[`IERC20.totalSupply`]]
  65. :IERC20-balanceOf: pass:normal[xref:token/ERC20.adoc#IERC20-balanceOf-address-[`IERC20.balanceOf`]]
  66. :IERC20-transfer: pass:normal[xref:token/ERC20.adoc#IERC20-transfer-address-uint256-[`IERC20.transfer`]]
  67. :IERC20-allowance: pass:normal[xref:token/ERC20.adoc#IERC20-allowance-address-address-[`IERC20.allowance`]]
  68. :IERC20-approve: pass:normal[xref:token/ERC20.adoc#IERC20-approve-address-uint256-[`IERC20.approve`]]
  69. :IERC20-transferFrom: pass:normal[xref:token/ERC20.adoc#IERC20-transferFrom-address-address-uint256-[`IERC20.transferFrom`]]
  70. :ERC20: pass:normal[xref:token/ERC20.adoc#ERC20[`ERC20`]]
  71. :IERC20-approve: pass:normal[xref:token/ERC20.adoc#IERC20-approve-address-uint256-[`IERC20.approve`]]
  72. :IERC20-approve: pass:normal[xref:token/ERC20.adoc#IERC20-approve-address-uint256-[`IERC20.approve`]]
  73. :IERC20-allowance: pass:normal[xref:token/ERC20.adoc#IERC20-allowance-address-address-[`IERC20.allowance`]]
  74. :IERC20-approve: pass:normal[xref:token/ERC20.adoc#IERC20-approve-address-uint256-[`IERC20.approve`]]
  75. :SafeERC20-safeTransferFrom: pass:normal[xref:token/ERC20.adoc#SafeERC20-safeTransferFrom-contract-IERC20-address-address-uint256-[`SafeERC20.safeTransferFrom`]]
  76. :xref-IERC20Permit-permit-address-address-uint256-uint256-uint8-bytes32-bytes32-: xref:token/ERC20.adoc#IERC20Permit-permit-address-address-uint256-uint256-uint8-bytes32-bytes32-
  77. :xref-IERC20Permit-nonces-address-: xref:token/ERC20.adoc#IERC20Permit-nonces-address-
  78. :xref-IERC20Permit-DOMAIN_SEPARATOR--: xref:token/ERC20.adoc#IERC20Permit-DOMAIN_SEPARATOR--
  79. :IERC20-approve: pass:normal[xref:token/ERC20.adoc#IERC20-approve-address-uint256-[`IERC20.approve`]]
  80. :EIP712: pass:normal[xref:utils.adoc#EIP712[`EIP712`]]
  81. :IERC20-allowance: pass:normal[xref:token/ERC20.adoc#IERC20-allowance-address-address-[`IERC20.allowance`]]
  82. :IERC20-approve: pass:normal[xref:token/ERC20.adoc#IERC20-approve-address-uint256-[`IERC20.approve`]]
  83. :xref-ERC20Permit-constructor-string-: xref:token/ERC20.adoc#ERC20Permit-constructor-string-
  84. :xref-ERC20Permit-permit-address-address-uint256-uint256-uint8-bytes32-bytes32-: xref:token/ERC20.adoc#ERC20Permit-permit-address-address-uint256-uint256-uint8-bytes32-bytes32-
  85. :xref-ERC20Permit-nonces-address-: xref:token/ERC20.adoc#ERC20Permit-nonces-address-
  86. :xref-ERC20Permit-DOMAIN_SEPARATOR--: xref:token/ERC20.adoc#ERC20Permit-DOMAIN_SEPARATOR--
  87. :xref-ERC20Permit-_useNonce-address-: xref:token/ERC20.adoc#ERC20Permit-_useNonce-address-
  88. :xref-EIP712-_domainSeparatorV4--: xref:utils.adoc#EIP712-_domainSeparatorV4--
  89. :xref-EIP712-_hashTypedDataV4-bytes32-: xref:utils.adoc#EIP712-_hashTypedDataV4-bytes32-
  90. :xref-EIP712-eip712Domain--: xref:utils.adoc#EIP712-eip712Domain--
  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-increaseAllowance-address-uint256-: xref:token/ERC20.adoc#ERC20-increaseAllowance-address-uint256-
  101. :xref-ERC20-decreaseAllowance-address-uint256-: xref:token/ERC20.adoc#ERC20-decreaseAllowance-address-uint256-
  102. :xref-ERC20-_transfer-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_transfer-address-address-uint256-
  103. :xref-ERC20-_mint-address-uint256-: xref:token/ERC20.adoc#ERC20-_mint-address-uint256-
  104. :xref-ERC20-_burn-address-uint256-: xref:token/ERC20.adoc#ERC20-_burn-address-uint256-
  105. :xref-ERC20-_approve-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_approve-address-address-uint256-
  106. :xref-ERC20-_spendAllowance-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_spendAllowance-address-address-uint256-
  107. :xref-ERC20-_beforeTokenTransfer-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_beforeTokenTransfer-address-address-uint256-
  108. :xref-ERC20-_afterTokenTransfer-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_afterTokenTransfer-address-address-uint256-
  109. :xref-IERC5267-EIP712DomainChanged--: xref:interfaces.adoc#IERC5267-EIP712DomainChanged--
  110. :xref-IERC20-Transfer-address-address-uint256-: xref:token/ERC20.adoc#IERC20-Transfer-address-address-uint256-
  111. :xref-IERC20-Approval-address-address-uint256-: xref:token/ERC20.adoc#IERC20-Approval-address-address-uint256-
  112. :EIP712: pass:normal[xref:utils.adoc#EIP712[`EIP712`]]
  113. :IERC20-approve: pass:normal[xref:token/ERC20.adoc#IERC20-approve-address-uint256-[`IERC20.approve`]]
  114. :EIP712: pass:normal[xref:utils.adoc#EIP712[`EIP712`]]
  115. :ERC20: pass:normal[xref:token/ERC20.adoc#ERC20[`ERC20`]]
  116. :xref-ERC20Burnable-burn-uint256-: xref:token/ERC20.adoc#ERC20Burnable-burn-uint256-
  117. :xref-ERC20Burnable-burnFrom-address-uint256-: xref:token/ERC20.adoc#ERC20Burnable-burnFrom-address-uint256-
  118. :xref-ERC20-name--: xref:token/ERC20.adoc#ERC20-name--
  119. :xref-ERC20-symbol--: xref:token/ERC20.adoc#ERC20-symbol--
  120. :xref-ERC20-decimals--: xref:token/ERC20.adoc#ERC20-decimals--
  121. :xref-ERC20-totalSupply--: xref:token/ERC20.adoc#ERC20-totalSupply--
  122. :xref-ERC20-balanceOf-address-: xref:token/ERC20.adoc#ERC20-balanceOf-address-
  123. :xref-ERC20-transfer-address-uint256-: xref:token/ERC20.adoc#ERC20-transfer-address-uint256-
  124. :xref-ERC20-allowance-address-address-: xref:token/ERC20.adoc#ERC20-allowance-address-address-
  125. :xref-ERC20-approve-address-uint256-: xref:token/ERC20.adoc#ERC20-approve-address-uint256-
  126. :xref-ERC20-transferFrom-address-address-uint256-: xref:token/ERC20.adoc#ERC20-transferFrom-address-address-uint256-
  127. :xref-ERC20-increaseAllowance-address-uint256-: xref:token/ERC20.adoc#ERC20-increaseAllowance-address-uint256-
  128. :xref-ERC20-decreaseAllowance-address-uint256-: xref:token/ERC20.adoc#ERC20-decreaseAllowance-address-uint256-
  129. :xref-ERC20-_transfer-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_transfer-address-address-uint256-
  130. :xref-ERC20-_mint-address-uint256-: xref:token/ERC20.adoc#ERC20-_mint-address-uint256-
  131. :xref-ERC20-_burn-address-uint256-: xref:token/ERC20.adoc#ERC20-_burn-address-uint256-
  132. :xref-ERC20-_approve-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_approve-address-address-uint256-
  133. :xref-ERC20-_spendAllowance-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_spendAllowance-address-address-uint256-
  134. :xref-ERC20-_beforeTokenTransfer-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_beforeTokenTransfer-address-address-uint256-
  135. :xref-ERC20-_afterTokenTransfer-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_afterTokenTransfer-address-address-uint256-
  136. :xref-IERC20-Transfer-address-address-uint256-: xref:token/ERC20.adoc#IERC20-Transfer-address-address-uint256-
  137. :xref-IERC20-Approval-address-address-uint256-: xref:token/ERC20.adoc#IERC20-Approval-address-address-uint256-
  138. :ERC20-_burn: pass:normal[xref:token/ERC20.adoc#ERC20-_burn-address-uint256-[`ERC20._burn`]]
  139. :ERC20-_burn: pass:normal[xref:token/ERC20.adoc#ERC20-_burn-address-uint256-[`ERC20._burn`]]
  140. :ERC20-allowance: pass:normal[xref:token/ERC20.adoc#ERC20-allowance-address-address-[`ERC20.allowance`]]
  141. :ERC20: pass:normal[xref:token/ERC20.adoc#ERC20[`ERC20`]]
  142. :xref-ERC20Capped-constructor-uint256-: xref:token/ERC20.adoc#ERC20Capped-constructor-uint256-
  143. :xref-ERC20Capped-cap--: xref:token/ERC20.adoc#ERC20Capped-cap--
  144. :xref-ERC20Capped-_mint-address-uint256-: xref:token/ERC20.adoc#ERC20Capped-_mint-address-uint256-
  145. :xref-ERC20-name--: xref:token/ERC20.adoc#ERC20-name--
  146. :xref-ERC20-symbol--: xref:token/ERC20.adoc#ERC20-symbol--
  147. :xref-ERC20-decimals--: xref:token/ERC20.adoc#ERC20-decimals--
  148. :xref-ERC20-totalSupply--: xref:token/ERC20.adoc#ERC20-totalSupply--
  149. :xref-ERC20-balanceOf-address-: xref:token/ERC20.adoc#ERC20-balanceOf-address-
  150. :xref-ERC20-transfer-address-uint256-: xref:token/ERC20.adoc#ERC20-transfer-address-uint256-
  151. :xref-ERC20-allowance-address-address-: xref:token/ERC20.adoc#ERC20-allowance-address-address-
  152. :xref-ERC20-approve-address-uint256-: xref:token/ERC20.adoc#ERC20-approve-address-uint256-
  153. :xref-ERC20-transferFrom-address-address-uint256-: xref:token/ERC20.adoc#ERC20-transferFrom-address-address-uint256-
  154. :xref-ERC20-increaseAllowance-address-uint256-: xref:token/ERC20.adoc#ERC20-increaseAllowance-address-uint256-
  155. :xref-ERC20-decreaseAllowance-address-uint256-: xref:token/ERC20.adoc#ERC20-decreaseAllowance-address-uint256-
  156. :xref-ERC20-_transfer-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_transfer-address-address-uint256-
  157. :xref-ERC20-_burn-address-uint256-: xref:token/ERC20.adoc#ERC20-_burn-address-uint256-
  158. :xref-ERC20-_approve-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_approve-address-address-uint256-
  159. :xref-ERC20-_spendAllowance-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_spendAllowance-address-address-uint256-
  160. :xref-ERC20-_beforeTokenTransfer-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_beforeTokenTransfer-address-address-uint256-
  161. :xref-ERC20-_afterTokenTransfer-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_afterTokenTransfer-address-address-uint256-
  162. :xref-IERC20-Transfer-address-address-uint256-: xref:token/ERC20.adoc#IERC20-Transfer-address-address-uint256-
  163. :xref-IERC20-Approval-address-address-uint256-: xref:token/ERC20.adoc#IERC20-Approval-address-address-uint256-
  164. :ERC20-_mint: pass:normal[xref:token/ERC20.adoc#ERC20-_mint-address-uint256-[`ERC20._mint`]]
  165. :Pausable-_pause: pass:normal[xref:security.adoc#Pausable-_pause--[`Pausable._pause`]]
  166. :Pausable-_unpause: pass:normal[xref:security.adoc#Pausable-_unpause--[`Pausable._unpause`]]
  167. :AccessControl: pass:normal[xref:access.adoc#AccessControl[`AccessControl`]]
  168. :Ownable: pass:normal[xref:access.adoc#Ownable[`Ownable`]]
  169. :xref-ERC20Pausable-_beforeTokenTransfer-address-address-uint256-: xref:token/ERC20.adoc#ERC20Pausable-_beforeTokenTransfer-address-address-uint256-
  170. :xref-Pausable-paused--: xref:security.adoc#Pausable-paused--
  171. :xref-Pausable-_requireNotPaused--: xref:security.adoc#Pausable-_requireNotPaused--
  172. :xref-Pausable-_requirePaused--: xref:security.adoc#Pausable-_requirePaused--
  173. :xref-Pausable-_pause--: xref:security.adoc#Pausable-_pause--
  174. :xref-Pausable-_unpause--: xref:security.adoc#Pausable-_unpause--
  175. :xref-ERC20-name--: xref:token/ERC20.adoc#ERC20-name--
  176. :xref-ERC20-symbol--: xref:token/ERC20.adoc#ERC20-symbol--
  177. :xref-ERC20-decimals--: xref:token/ERC20.adoc#ERC20-decimals--
  178. :xref-ERC20-totalSupply--: xref:token/ERC20.adoc#ERC20-totalSupply--
  179. :xref-ERC20-balanceOf-address-: xref:token/ERC20.adoc#ERC20-balanceOf-address-
  180. :xref-ERC20-transfer-address-uint256-: xref:token/ERC20.adoc#ERC20-transfer-address-uint256-
  181. :xref-ERC20-allowance-address-address-: xref:token/ERC20.adoc#ERC20-allowance-address-address-
  182. :xref-ERC20-approve-address-uint256-: xref:token/ERC20.adoc#ERC20-approve-address-uint256-
  183. :xref-ERC20-transferFrom-address-address-uint256-: xref:token/ERC20.adoc#ERC20-transferFrom-address-address-uint256-
  184. :xref-ERC20-increaseAllowance-address-uint256-: xref:token/ERC20.adoc#ERC20-increaseAllowance-address-uint256-
  185. :xref-ERC20-decreaseAllowance-address-uint256-: xref:token/ERC20.adoc#ERC20-decreaseAllowance-address-uint256-
  186. :xref-ERC20-_transfer-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_transfer-address-address-uint256-
  187. :xref-ERC20-_mint-address-uint256-: xref:token/ERC20.adoc#ERC20-_mint-address-uint256-
  188. :xref-ERC20-_burn-address-uint256-: xref:token/ERC20.adoc#ERC20-_burn-address-uint256-
  189. :xref-ERC20-_approve-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_approve-address-address-uint256-
  190. :xref-ERC20-_spendAllowance-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_spendAllowance-address-address-uint256-
  191. :xref-ERC20-_afterTokenTransfer-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_afterTokenTransfer-address-address-uint256-
  192. :xref-Pausable-Paused-address-: xref:security.adoc#Pausable-Paused-address-
  193. :xref-Pausable-Unpaused-address-: xref:security.adoc#Pausable-Unpaused-address-
  194. :xref-IERC20-Transfer-address-address-uint256-: xref:token/ERC20.adoc#IERC20-Transfer-address-address-uint256-
  195. :xref-IERC20-Approval-address-address-uint256-: xref:token/ERC20.adoc#IERC20-Approval-address-address-uint256-
  196. :ERC20-_beforeTokenTransfer: pass:normal[xref:token/ERC20.adoc#ERC20-_beforeTokenTransfer-address-address-uint256-[`ERC20._beforeTokenTransfer`]]
  197. :ERC20Votes: pass:normal[xref:token/ERC20.adoc#ERC20Votes[`ERC20Votes`]]
  198. :xref-ERC20Snapshot-_snapshot--: xref:token/ERC20.adoc#ERC20Snapshot-_snapshot--
  199. :xref-ERC20Snapshot-_getCurrentSnapshotId--: xref:token/ERC20.adoc#ERC20Snapshot-_getCurrentSnapshotId--
  200. :xref-ERC20Snapshot-balanceOfAt-address-uint256-: xref:token/ERC20.adoc#ERC20Snapshot-balanceOfAt-address-uint256-
  201. :xref-ERC20Snapshot-totalSupplyAt-uint256-: xref:token/ERC20.adoc#ERC20Snapshot-totalSupplyAt-uint256-
  202. :xref-ERC20Snapshot-_beforeTokenTransfer-address-address-uint256-: xref:token/ERC20.adoc#ERC20Snapshot-_beforeTokenTransfer-address-address-uint256-
  203. :xref-ERC20-name--: xref:token/ERC20.adoc#ERC20-name--
  204. :xref-ERC20-symbol--: xref:token/ERC20.adoc#ERC20-symbol--
  205. :xref-ERC20-decimals--: xref:token/ERC20.adoc#ERC20-decimals--
  206. :xref-ERC20-totalSupply--: xref:token/ERC20.adoc#ERC20-totalSupply--
  207. :xref-ERC20-balanceOf-address-: xref:token/ERC20.adoc#ERC20-balanceOf-address-
  208. :xref-ERC20-transfer-address-uint256-: xref:token/ERC20.adoc#ERC20-transfer-address-uint256-
  209. :xref-ERC20-allowance-address-address-: xref:token/ERC20.adoc#ERC20-allowance-address-address-
  210. :xref-ERC20-approve-address-uint256-: xref:token/ERC20.adoc#ERC20-approve-address-uint256-
  211. :xref-ERC20-transferFrom-address-address-uint256-: xref:token/ERC20.adoc#ERC20-transferFrom-address-address-uint256-
  212. :xref-ERC20-increaseAllowance-address-uint256-: xref:token/ERC20.adoc#ERC20-increaseAllowance-address-uint256-
  213. :xref-ERC20-decreaseAllowance-address-uint256-: xref:token/ERC20.adoc#ERC20-decreaseAllowance-address-uint256-
  214. :xref-ERC20-_transfer-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_transfer-address-address-uint256-
  215. :xref-ERC20-_mint-address-uint256-: xref:token/ERC20.adoc#ERC20-_mint-address-uint256-
  216. :xref-ERC20-_burn-address-uint256-: xref:token/ERC20.adoc#ERC20-_burn-address-uint256-
  217. :xref-ERC20-_approve-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_approve-address-address-uint256-
  218. :xref-ERC20-_spendAllowance-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_spendAllowance-address-address-uint256-
  219. :xref-ERC20-_afterTokenTransfer-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_afterTokenTransfer-address-address-uint256-
  220. :xref-ERC20Snapshot-Snapshot-uint256-: xref:token/ERC20.adoc#ERC20Snapshot-Snapshot-uint256-
  221. :xref-IERC20-Transfer-address-address-uint256-: xref:token/ERC20.adoc#IERC20-Transfer-address-address-uint256-
  222. :xref-IERC20-Approval-address-address-uint256-: xref:token/ERC20.adoc#IERC20-Approval-address-address-uint256-
  223. :AccessControl: pass:normal[xref:access.adoc#AccessControl[`AccessControl`]]
  224. :ERC20VotesComp: pass:normal[xref:token/ERC20.adoc#ERC20VotesComp[`ERC20VotesComp`]]
  225. :xref-ERC20Votes-clock--: xref:token/ERC20.adoc#ERC20Votes-clock--
  226. :xref-ERC20Votes-CLOCK_MODE--: xref:token/ERC20.adoc#ERC20Votes-CLOCK_MODE--
  227. :xref-ERC20Votes-checkpoints-address-uint32-: xref:token/ERC20.adoc#ERC20Votes-checkpoints-address-uint32-
  228. :xref-ERC20Votes-numCheckpoints-address-: xref:token/ERC20.adoc#ERC20Votes-numCheckpoints-address-
  229. :xref-ERC20Votes-delegates-address-: xref:token/ERC20.adoc#ERC20Votes-delegates-address-
  230. :xref-ERC20Votes-getVotes-address-: xref:token/ERC20.adoc#ERC20Votes-getVotes-address-
  231. :xref-ERC20Votes-getPastVotes-address-uint256-: xref:token/ERC20.adoc#ERC20Votes-getPastVotes-address-uint256-
  232. :xref-ERC20Votes-getPastTotalSupply-uint256-: xref:token/ERC20.adoc#ERC20Votes-getPastTotalSupply-uint256-
  233. :xref-ERC20Votes-delegate-address-: xref:token/ERC20.adoc#ERC20Votes-delegate-address-
  234. :xref-ERC20Votes-delegateBySig-address-uint256-uint256-uint8-bytes32-bytes32-: xref:token/ERC20.adoc#ERC20Votes-delegateBySig-address-uint256-uint256-uint8-bytes32-bytes32-
  235. :xref-ERC20Votes-_maxSupply--: xref:token/ERC20.adoc#ERC20Votes-_maxSupply--
  236. :xref-ERC20Votes-_mint-address-uint256-: xref:token/ERC20.adoc#ERC20Votes-_mint-address-uint256-
  237. :xref-ERC20Votes-_burn-address-uint256-: xref:token/ERC20.adoc#ERC20Votes-_burn-address-uint256-
  238. :xref-ERC20Votes-_afterTokenTransfer-address-address-uint256-: xref:token/ERC20.adoc#ERC20Votes-_afterTokenTransfer-address-address-uint256-
  239. :xref-ERC20Votes-_delegate-address-address-: xref:token/ERC20.adoc#ERC20Votes-_delegate-address-address-
  240. :xref-ERC20Permit-permit-address-address-uint256-uint256-uint8-bytes32-bytes32-: xref:token/ERC20.adoc#ERC20Permit-permit-address-address-uint256-uint256-uint8-bytes32-bytes32-
  241. :xref-ERC20Permit-nonces-address-: xref:token/ERC20.adoc#ERC20Permit-nonces-address-
  242. :xref-ERC20Permit-DOMAIN_SEPARATOR--: xref:token/ERC20.adoc#ERC20Permit-DOMAIN_SEPARATOR--
  243. :xref-ERC20Permit-_useNonce-address-: xref:token/ERC20.adoc#ERC20Permit-_useNonce-address-
  244. :xref-EIP712-_domainSeparatorV4--: xref:utils.adoc#EIP712-_domainSeparatorV4--
  245. :xref-EIP712-_hashTypedDataV4-bytes32-: xref:utils.adoc#EIP712-_hashTypedDataV4-bytes32-
  246. :xref-EIP712-eip712Domain--: xref:utils.adoc#EIP712-eip712Domain--
  247. :xref-ERC20-name--: xref:token/ERC20.adoc#ERC20-name--
  248. :xref-ERC20-symbol--: xref:token/ERC20.adoc#ERC20-symbol--
  249. :xref-ERC20-decimals--: xref:token/ERC20.adoc#ERC20-decimals--
  250. :xref-ERC20-totalSupply--: xref:token/ERC20.adoc#ERC20-totalSupply--
  251. :xref-ERC20-balanceOf-address-: xref:token/ERC20.adoc#ERC20-balanceOf-address-
  252. :xref-ERC20-transfer-address-uint256-: xref:token/ERC20.adoc#ERC20-transfer-address-uint256-
  253. :xref-ERC20-allowance-address-address-: xref:token/ERC20.adoc#ERC20-allowance-address-address-
  254. :xref-ERC20-approve-address-uint256-: xref:token/ERC20.adoc#ERC20-approve-address-uint256-
  255. :xref-ERC20-transferFrom-address-address-uint256-: xref:token/ERC20.adoc#ERC20-transferFrom-address-address-uint256-
  256. :xref-ERC20-increaseAllowance-address-uint256-: xref:token/ERC20.adoc#ERC20-increaseAllowance-address-uint256-
  257. :xref-ERC20-decreaseAllowance-address-uint256-: xref:token/ERC20.adoc#ERC20-decreaseAllowance-address-uint256-
  258. :xref-ERC20-_transfer-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_transfer-address-address-uint256-
  259. :xref-ERC20-_approve-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_approve-address-address-uint256-
  260. :xref-ERC20-_spendAllowance-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_spendAllowance-address-address-uint256-
  261. :xref-ERC20-_beforeTokenTransfer-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_beforeTokenTransfer-address-address-uint256-
  262. :xref-IVotes-DelegateChanged-address-address-address-: xref:governance.adoc#IVotes-DelegateChanged-address-address-address-
  263. :xref-IVotes-DelegateVotesChanged-address-uint256-uint256-: xref:governance.adoc#IVotes-DelegateVotesChanged-address-uint256-uint256-
  264. :xref-IERC5267-EIP712DomainChanged--: xref:interfaces.adoc#IERC5267-EIP712DomainChanged--
  265. :xref-IERC20-Transfer-address-address-uint256-: xref:token/ERC20.adoc#IERC20-Transfer-address-address-uint256-
  266. :xref-IERC20-Approval-address-address-uint256-: xref:token/ERC20.adoc#IERC20-Approval-address-address-uint256-
  267. :IVotes-DelegateVotesChanged: pass:normal[xref:governance.adoc#IVotes-DelegateVotesChanged-address-uint256-uint256-[`IVotes.DelegateVotesChanged`]]
  268. :IVotes-DelegateChanged: pass:normal[xref:governance.adoc#IVotes-DelegateChanged-address-address-address-[`IVotes.DelegateChanged`]]
  269. :IVotes-DelegateVotesChanged: pass:normal[xref:governance.adoc#IVotes-DelegateVotesChanged-address-uint256-uint256-[`IVotes.DelegateVotesChanged`]]
  270. :ERC20Votes: pass:normal[xref:token/ERC20.adoc#ERC20Votes[`ERC20Votes`]]
  271. :xref-ERC20VotesComp-getCurrentVotes-address-: xref:token/ERC20.adoc#ERC20VotesComp-getCurrentVotes-address-
  272. :xref-ERC20VotesComp-getPriorVotes-address-uint256-: xref:token/ERC20.adoc#ERC20VotesComp-getPriorVotes-address-uint256-
  273. :xref-ERC20VotesComp-_maxSupply--: xref:token/ERC20.adoc#ERC20VotesComp-_maxSupply--
  274. :xref-ERC20Votes-clock--: xref:token/ERC20.adoc#ERC20Votes-clock--
  275. :xref-ERC20Votes-CLOCK_MODE--: xref:token/ERC20.adoc#ERC20Votes-CLOCK_MODE--
  276. :xref-ERC20Votes-checkpoints-address-uint32-: xref:token/ERC20.adoc#ERC20Votes-checkpoints-address-uint32-
  277. :xref-ERC20Votes-numCheckpoints-address-: xref:token/ERC20.adoc#ERC20Votes-numCheckpoints-address-
  278. :xref-ERC20Votes-delegates-address-: xref:token/ERC20.adoc#ERC20Votes-delegates-address-
  279. :xref-ERC20Votes-getVotes-address-: xref:token/ERC20.adoc#ERC20Votes-getVotes-address-
  280. :xref-ERC20Votes-getPastVotes-address-uint256-: xref:token/ERC20.adoc#ERC20Votes-getPastVotes-address-uint256-
  281. :xref-ERC20Votes-getPastTotalSupply-uint256-: xref:token/ERC20.adoc#ERC20Votes-getPastTotalSupply-uint256-
  282. :xref-ERC20Votes-delegate-address-: xref:token/ERC20.adoc#ERC20Votes-delegate-address-
  283. :xref-ERC20Votes-delegateBySig-address-uint256-uint256-uint8-bytes32-bytes32-: xref:token/ERC20.adoc#ERC20Votes-delegateBySig-address-uint256-uint256-uint8-bytes32-bytes32-
  284. :xref-ERC20Votes-_mint-address-uint256-: xref:token/ERC20.adoc#ERC20Votes-_mint-address-uint256-
  285. :xref-ERC20Votes-_burn-address-uint256-: xref:token/ERC20.adoc#ERC20Votes-_burn-address-uint256-
  286. :xref-ERC20Votes-_afterTokenTransfer-address-address-uint256-: xref:token/ERC20.adoc#ERC20Votes-_afterTokenTransfer-address-address-uint256-
  287. :xref-ERC20Votes-_delegate-address-address-: xref:token/ERC20.adoc#ERC20Votes-_delegate-address-address-
  288. :xref-ERC20Permit-permit-address-address-uint256-uint256-uint8-bytes32-bytes32-: xref:token/ERC20.adoc#ERC20Permit-permit-address-address-uint256-uint256-uint8-bytes32-bytes32-
  289. :xref-ERC20Permit-nonces-address-: xref:token/ERC20.adoc#ERC20Permit-nonces-address-
  290. :xref-ERC20Permit-DOMAIN_SEPARATOR--: xref:token/ERC20.adoc#ERC20Permit-DOMAIN_SEPARATOR--
  291. :xref-ERC20Permit-_useNonce-address-: xref:token/ERC20.adoc#ERC20Permit-_useNonce-address-
  292. :xref-EIP712-_domainSeparatorV4--: xref:utils.adoc#EIP712-_domainSeparatorV4--
  293. :xref-EIP712-_hashTypedDataV4-bytes32-: xref:utils.adoc#EIP712-_hashTypedDataV4-bytes32-
  294. :xref-EIP712-eip712Domain--: xref:utils.adoc#EIP712-eip712Domain--
  295. :xref-ERC20-name--: xref:token/ERC20.adoc#ERC20-name--
  296. :xref-ERC20-symbol--: xref:token/ERC20.adoc#ERC20-symbol--
  297. :xref-ERC20-decimals--: xref:token/ERC20.adoc#ERC20-decimals--
  298. :xref-ERC20-totalSupply--: xref:token/ERC20.adoc#ERC20-totalSupply--
  299. :xref-ERC20-balanceOf-address-: xref:token/ERC20.adoc#ERC20-balanceOf-address-
  300. :xref-ERC20-transfer-address-uint256-: xref:token/ERC20.adoc#ERC20-transfer-address-uint256-
  301. :xref-ERC20-allowance-address-address-: xref:token/ERC20.adoc#ERC20-allowance-address-address-
  302. :xref-ERC20-approve-address-uint256-: xref:token/ERC20.adoc#ERC20-approve-address-uint256-
  303. :xref-ERC20-transferFrom-address-address-uint256-: xref:token/ERC20.adoc#ERC20-transferFrom-address-address-uint256-
  304. :xref-ERC20-increaseAllowance-address-uint256-: xref:token/ERC20.adoc#ERC20-increaseAllowance-address-uint256-
  305. :xref-ERC20-decreaseAllowance-address-uint256-: xref:token/ERC20.adoc#ERC20-decreaseAllowance-address-uint256-
  306. :xref-ERC20-_transfer-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_transfer-address-address-uint256-
  307. :xref-ERC20-_approve-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_approve-address-address-uint256-
  308. :xref-ERC20-_spendAllowance-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_spendAllowance-address-address-uint256-
  309. :xref-ERC20-_beforeTokenTransfer-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_beforeTokenTransfer-address-address-uint256-
  310. :xref-IVotes-DelegateChanged-address-address-address-: xref:governance.adoc#IVotes-DelegateChanged-address-address-address-
  311. :xref-IVotes-DelegateVotesChanged-address-uint256-uint256-: xref:governance.adoc#IVotes-DelegateVotesChanged-address-uint256-uint256-
  312. :xref-IERC5267-EIP712DomainChanged--: xref:interfaces.adoc#IERC5267-EIP712DomainChanged--
  313. :xref-IERC20-Transfer-address-address-uint256-: xref:token/ERC20.adoc#IERC20-Transfer-address-address-uint256-
  314. :xref-IERC20-Approval-address-address-uint256-: xref:token/ERC20.adoc#IERC20-Approval-address-address-uint256-
  315. :ERC20Votes: pass:normal[xref:token/ERC20.adoc#ERC20Votes[`ERC20Votes`]]
  316. :xref-ERC20Wrapper-constructor-contract-IERC20-: xref:token/ERC20.adoc#ERC20Wrapper-constructor-contract-IERC20-
  317. :xref-ERC20Wrapper-decimals--: xref:token/ERC20.adoc#ERC20Wrapper-decimals--
  318. :xref-ERC20Wrapper-underlying--: xref:token/ERC20.adoc#ERC20Wrapper-underlying--
  319. :xref-ERC20Wrapper-depositFor-address-uint256-: xref:token/ERC20.adoc#ERC20Wrapper-depositFor-address-uint256-
  320. :xref-ERC20Wrapper-withdrawTo-address-uint256-: xref:token/ERC20.adoc#ERC20Wrapper-withdrawTo-address-uint256-
  321. :xref-ERC20Wrapper-_recover-address-: xref:token/ERC20.adoc#ERC20Wrapper-_recover-address-
  322. :xref-ERC20-name--: xref:token/ERC20.adoc#ERC20-name--
  323. :xref-ERC20-symbol--: xref:token/ERC20.adoc#ERC20-symbol--
  324. :xref-ERC20-totalSupply--: xref:token/ERC20.adoc#ERC20-totalSupply--
  325. :xref-ERC20-balanceOf-address-: xref:token/ERC20.adoc#ERC20-balanceOf-address-
  326. :xref-ERC20-transfer-address-uint256-: xref:token/ERC20.adoc#ERC20-transfer-address-uint256-
  327. :xref-ERC20-allowance-address-address-: xref:token/ERC20.adoc#ERC20-allowance-address-address-
  328. :xref-ERC20-approve-address-uint256-: xref:token/ERC20.adoc#ERC20-approve-address-uint256-
  329. :xref-ERC20-transferFrom-address-address-uint256-: xref:token/ERC20.adoc#ERC20-transferFrom-address-address-uint256-
  330. :xref-ERC20-increaseAllowance-address-uint256-: xref:token/ERC20.adoc#ERC20-increaseAllowance-address-uint256-
  331. :xref-ERC20-decreaseAllowance-address-uint256-: xref:token/ERC20.adoc#ERC20-decreaseAllowance-address-uint256-
  332. :xref-ERC20-_transfer-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_transfer-address-address-uint256-
  333. :xref-ERC20-_mint-address-uint256-: xref:token/ERC20.adoc#ERC20-_mint-address-uint256-
  334. :xref-ERC20-_burn-address-uint256-: xref:token/ERC20.adoc#ERC20-_burn-address-uint256-
  335. :xref-ERC20-_approve-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_approve-address-address-uint256-
  336. :xref-ERC20-_spendAllowance-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_spendAllowance-address-address-uint256-
  337. :xref-ERC20-_beforeTokenTransfer-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_beforeTokenTransfer-address-address-uint256-
  338. :xref-ERC20-_afterTokenTransfer-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_afterTokenTransfer-address-address-uint256-
  339. :xref-IERC20-Transfer-address-address-uint256-: xref:token/ERC20.adoc#IERC20-Transfer-address-address-uint256-
  340. :xref-IERC20-Approval-address-address-uint256-: xref:token/ERC20.adoc#IERC20-Approval-address-address-uint256-
  341. :ERC20-decimals: pass:normal[xref:token/ERC20.adoc#ERC20-decimals--[`ERC20.decimals`]]
  342. :xref-ERC20FlashMint-maxFlashLoan-address-: xref:token/ERC20.adoc#ERC20FlashMint-maxFlashLoan-address-
  343. :xref-ERC20FlashMint-flashFee-address-uint256-: xref:token/ERC20.adoc#ERC20FlashMint-flashFee-address-uint256-
  344. :xref-ERC20FlashMint-_flashFee-address-uint256-: xref:token/ERC20.adoc#ERC20FlashMint-_flashFee-address-uint256-
  345. :xref-ERC20FlashMint-_flashFeeReceiver--: xref:token/ERC20.adoc#ERC20FlashMint-_flashFeeReceiver--
  346. :xref-ERC20FlashMint-flashLoan-contract-IERC3156FlashBorrower-address-uint256-bytes-: xref:token/ERC20.adoc#ERC20FlashMint-flashLoan-contract-IERC3156FlashBorrower-address-uint256-bytes-
  347. :xref-ERC20-name--: xref:token/ERC20.adoc#ERC20-name--
  348. :xref-ERC20-symbol--: xref:token/ERC20.adoc#ERC20-symbol--
  349. :xref-ERC20-decimals--: xref:token/ERC20.adoc#ERC20-decimals--
  350. :xref-ERC20-totalSupply--: xref:token/ERC20.adoc#ERC20-totalSupply--
  351. :xref-ERC20-balanceOf-address-: xref:token/ERC20.adoc#ERC20-balanceOf-address-
  352. :xref-ERC20-transfer-address-uint256-: xref:token/ERC20.adoc#ERC20-transfer-address-uint256-
  353. :xref-ERC20-allowance-address-address-: xref:token/ERC20.adoc#ERC20-allowance-address-address-
  354. :xref-ERC20-approve-address-uint256-: xref:token/ERC20.adoc#ERC20-approve-address-uint256-
  355. :xref-ERC20-transferFrom-address-address-uint256-: xref:token/ERC20.adoc#ERC20-transferFrom-address-address-uint256-
  356. :xref-ERC20-increaseAllowance-address-uint256-: xref:token/ERC20.adoc#ERC20-increaseAllowance-address-uint256-
  357. :xref-ERC20-decreaseAllowance-address-uint256-: xref:token/ERC20.adoc#ERC20-decreaseAllowance-address-uint256-
  358. :xref-ERC20-_transfer-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_transfer-address-address-uint256-
  359. :xref-ERC20-_mint-address-uint256-: xref:token/ERC20.adoc#ERC20-_mint-address-uint256-
  360. :xref-ERC20-_burn-address-uint256-: xref:token/ERC20.adoc#ERC20-_burn-address-uint256-
  361. :xref-ERC20-_approve-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_approve-address-address-uint256-
  362. :xref-ERC20-_spendAllowance-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_spendAllowance-address-address-uint256-
  363. :xref-ERC20-_beforeTokenTransfer-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_beforeTokenTransfer-address-address-uint256-
  364. :xref-ERC20-_afterTokenTransfer-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_afterTokenTransfer-address-address-uint256-
  365. :xref-IERC20-Transfer-address-address-uint256-: xref:token/ERC20.adoc#IERC20-Transfer-address-address-uint256-
  366. :xref-IERC20-Approval-address-address-uint256-: xref:token/ERC20.adoc#IERC20-Approval-address-address-uint256-
  367. :IERC3156FlashBorrower: pass:normal[xref:interfaces.adoc#IERC3156FlashBorrower[`IERC3156FlashBorrower`]]
  368. :xref-ERC4626-constructor-contract-IERC20-: xref:token/ERC20.adoc#ERC4626-constructor-contract-IERC20-
  369. :xref-ERC4626-decimals--: xref:token/ERC20.adoc#ERC4626-decimals--
  370. :xref-ERC4626-asset--: xref:token/ERC20.adoc#ERC4626-asset--
  371. :xref-ERC4626-totalAssets--: xref:token/ERC20.adoc#ERC4626-totalAssets--
  372. :xref-ERC4626-convertToShares-uint256-: xref:token/ERC20.adoc#ERC4626-convertToShares-uint256-
  373. :xref-ERC4626-convertToAssets-uint256-: xref:token/ERC20.adoc#ERC4626-convertToAssets-uint256-
  374. :xref-ERC4626-maxDeposit-address-: xref:token/ERC20.adoc#ERC4626-maxDeposit-address-
  375. :xref-ERC4626-maxMint-address-: xref:token/ERC20.adoc#ERC4626-maxMint-address-
  376. :xref-ERC4626-maxWithdraw-address-: xref:token/ERC20.adoc#ERC4626-maxWithdraw-address-
  377. :xref-ERC4626-maxRedeem-address-: xref:token/ERC20.adoc#ERC4626-maxRedeem-address-
  378. :xref-ERC4626-previewDeposit-uint256-: xref:token/ERC20.adoc#ERC4626-previewDeposit-uint256-
  379. :xref-ERC4626-previewMint-uint256-: xref:token/ERC20.adoc#ERC4626-previewMint-uint256-
  380. :xref-ERC4626-previewWithdraw-uint256-: xref:token/ERC20.adoc#ERC4626-previewWithdraw-uint256-
  381. :xref-ERC4626-previewRedeem-uint256-: xref:token/ERC20.adoc#ERC4626-previewRedeem-uint256-
  382. :xref-ERC4626-deposit-uint256-address-: xref:token/ERC20.adoc#ERC4626-deposit-uint256-address-
  383. :xref-ERC4626-mint-uint256-address-: xref:token/ERC20.adoc#ERC4626-mint-uint256-address-
  384. :xref-ERC4626-withdraw-uint256-address-address-: xref:token/ERC20.adoc#ERC4626-withdraw-uint256-address-address-
  385. :xref-ERC4626-redeem-uint256-address-address-: xref:token/ERC20.adoc#ERC4626-redeem-uint256-address-address-
  386. :xref-ERC4626-_convertToShares-uint256-enum-Math-Rounding-: xref:token/ERC20.adoc#ERC4626-_convertToShares-uint256-enum-Math-Rounding-
  387. :xref-ERC4626-_convertToAssets-uint256-enum-Math-Rounding-: xref:token/ERC20.adoc#ERC4626-_convertToAssets-uint256-enum-Math-Rounding-
  388. :xref-ERC4626-_deposit-address-address-uint256-uint256-: xref:token/ERC20.adoc#ERC4626-_deposit-address-address-uint256-uint256-
  389. :xref-ERC4626-_withdraw-address-address-address-uint256-uint256-: xref:token/ERC20.adoc#ERC4626-_withdraw-address-address-address-uint256-uint256-
  390. :xref-ERC4626-_decimalsOffset--: xref:token/ERC20.adoc#ERC4626-_decimalsOffset--
  391. :xref-ERC20-name--: xref:token/ERC20.adoc#ERC20-name--
  392. :xref-ERC20-symbol--: xref:token/ERC20.adoc#ERC20-symbol--
  393. :xref-ERC20-totalSupply--: xref:token/ERC20.adoc#ERC20-totalSupply--
  394. :xref-ERC20-balanceOf-address-: xref:token/ERC20.adoc#ERC20-balanceOf-address-
  395. :xref-ERC20-transfer-address-uint256-: xref:token/ERC20.adoc#ERC20-transfer-address-uint256-
  396. :xref-ERC20-allowance-address-address-: xref:token/ERC20.adoc#ERC20-allowance-address-address-
  397. :xref-ERC20-approve-address-uint256-: xref:token/ERC20.adoc#ERC20-approve-address-uint256-
  398. :xref-ERC20-transferFrom-address-address-uint256-: xref:token/ERC20.adoc#ERC20-transferFrom-address-address-uint256-
  399. :xref-ERC20-increaseAllowance-address-uint256-: xref:token/ERC20.adoc#ERC20-increaseAllowance-address-uint256-
  400. :xref-ERC20-decreaseAllowance-address-uint256-: xref:token/ERC20.adoc#ERC20-decreaseAllowance-address-uint256-
  401. :xref-ERC20-_transfer-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_transfer-address-address-uint256-
  402. :xref-ERC20-_mint-address-uint256-: xref:token/ERC20.adoc#ERC20-_mint-address-uint256-
  403. :xref-ERC20-_burn-address-uint256-: xref:token/ERC20.adoc#ERC20-_burn-address-uint256-
  404. :xref-ERC20-_approve-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_approve-address-address-uint256-
  405. :xref-ERC20-_spendAllowance-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_spendAllowance-address-address-uint256-
  406. :xref-ERC20-_beforeTokenTransfer-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_beforeTokenTransfer-address-address-uint256-
  407. :xref-ERC20-_afterTokenTransfer-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_afterTokenTransfer-address-address-uint256-
  408. :xref-IERC4626-Deposit-address-address-uint256-uint256-: xref:interfaces.adoc#IERC4626-Deposit-address-address-uint256-uint256-
  409. :xref-IERC4626-Withdraw-address-address-address-uint256-uint256-: xref:interfaces.adoc#IERC4626-Withdraw-address-address-address-uint256-uint256-
  410. :xref-IERC20-Transfer-address-address-uint256-: xref:token/ERC20.adoc#IERC20-Transfer-address-address-uint256-
  411. :xref-IERC20-Approval-address-address-uint256-: xref:token/ERC20.adoc#IERC20-Approval-address-address-uint256-
  412. :IERC20Metadata-decimals: pass:normal[xref:token/ERC20.adoc#IERC20Metadata-decimals--[`IERC20Metadata.decimals`]]
  413. :IERC4626-asset: pass:normal[xref:interfaces.adoc#IERC4626-asset--[`IERC4626.asset`]]
  414. :IERC4626-totalAssets: pass:normal[xref:interfaces.adoc#IERC4626-totalAssets--[`IERC4626.totalAssets`]]
  415. :IERC4626-convertToShares: pass:normal[xref:interfaces.adoc#IERC4626-convertToShares-uint256-[`IERC4626.convertToShares`]]
  416. :IERC4626-convertToAssets: pass:normal[xref:interfaces.adoc#IERC4626-convertToAssets-uint256-[`IERC4626.convertToAssets`]]
  417. :IERC4626-maxDeposit: pass:normal[xref:interfaces.adoc#IERC4626-maxDeposit-address-[`IERC4626.maxDeposit`]]
  418. :IERC4626-maxMint: pass:normal[xref:interfaces.adoc#IERC4626-maxMint-address-[`IERC4626.maxMint`]]
  419. :IERC4626-maxWithdraw: pass:normal[xref:interfaces.adoc#IERC4626-maxWithdraw-address-[`IERC4626.maxWithdraw`]]
  420. :IERC4626-maxRedeem: pass:normal[xref:interfaces.adoc#IERC4626-maxRedeem-address-[`IERC4626.maxRedeem`]]
  421. :IERC4626-previewDeposit: pass:normal[xref:interfaces.adoc#IERC4626-previewDeposit-uint256-[`IERC4626.previewDeposit`]]
  422. :IERC4626-previewMint: pass:normal[xref:interfaces.adoc#IERC4626-previewMint-uint256-[`IERC4626.previewMint`]]
  423. :IERC4626-previewWithdraw: pass:normal[xref:interfaces.adoc#IERC4626-previewWithdraw-uint256-[`IERC4626.previewWithdraw`]]
  424. :IERC4626-previewRedeem: pass:normal[xref:interfaces.adoc#IERC4626-previewRedeem-uint256-[`IERC4626.previewRedeem`]]
  425. :IERC4626-deposit: pass:normal[xref:interfaces.adoc#IERC4626-deposit-uint256-address-[`IERC4626.deposit`]]
  426. :IERC4626-mint: pass:normal[xref:interfaces.adoc#IERC4626-mint-uint256-address-[`IERC4626.mint`]]
  427. :IERC4626-withdraw: pass:normal[xref:interfaces.adoc#IERC4626-withdraw-uint256-address-address-[`IERC4626.withdraw`]]
  428. :IERC4626-redeem: pass:normal[xref:interfaces.adoc#IERC4626-redeem-uint256-address-address-[`IERC4626.redeem`]]
  429. :ERC20: pass:normal[xref:token/ERC20.adoc#ERC20[`ERC20`]]
  430. :AccessControl: pass:normal[xref:access.adoc#AccessControl[`AccessControl`]]
  431. :xref-ERC20PresetMinterPauser-constructor-string-string-: xref:token/ERC20.adoc#ERC20PresetMinterPauser-constructor-string-string-
  432. :xref-ERC20PresetMinterPauser-mint-address-uint256-: xref:token/ERC20.adoc#ERC20PresetMinterPauser-mint-address-uint256-
  433. :xref-ERC20PresetMinterPauser-pause--: xref:token/ERC20.adoc#ERC20PresetMinterPauser-pause--
  434. :xref-ERC20PresetMinterPauser-unpause--: xref:token/ERC20.adoc#ERC20PresetMinterPauser-unpause--
  435. :xref-ERC20PresetMinterPauser-_beforeTokenTransfer-address-address-uint256-: xref:token/ERC20.adoc#ERC20PresetMinterPauser-_beforeTokenTransfer-address-address-uint256-
  436. :xref-Pausable-paused--: xref:security.adoc#Pausable-paused--
  437. :xref-Pausable-_requireNotPaused--: xref:security.adoc#Pausable-_requireNotPaused--
  438. :xref-Pausable-_requirePaused--: xref:security.adoc#Pausable-_requirePaused--
  439. :xref-Pausable-_pause--: xref:security.adoc#Pausable-_pause--
  440. :xref-Pausable-_unpause--: xref:security.adoc#Pausable-_unpause--
  441. :xref-ERC20Burnable-burn-uint256-: xref:token/ERC20.adoc#ERC20Burnable-burn-uint256-
  442. :xref-ERC20Burnable-burnFrom-address-uint256-: xref:token/ERC20.adoc#ERC20Burnable-burnFrom-address-uint256-
  443. :xref-ERC20-name--: xref:token/ERC20.adoc#ERC20-name--
  444. :xref-ERC20-symbol--: xref:token/ERC20.adoc#ERC20-symbol--
  445. :xref-ERC20-decimals--: xref:token/ERC20.adoc#ERC20-decimals--
  446. :xref-ERC20-totalSupply--: xref:token/ERC20.adoc#ERC20-totalSupply--
  447. :xref-ERC20-balanceOf-address-: xref:token/ERC20.adoc#ERC20-balanceOf-address-
  448. :xref-ERC20-transfer-address-uint256-: xref:token/ERC20.adoc#ERC20-transfer-address-uint256-
  449. :xref-ERC20-allowance-address-address-: xref:token/ERC20.adoc#ERC20-allowance-address-address-
  450. :xref-ERC20-approve-address-uint256-: xref:token/ERC20.adoc#ERC20-approve-address-uint256-
  451. :xref-ERC20-transferFrom-address-address-uint256-: xref:token/ERC20.adoc#ERC20-transferFrom-address-address-uint256-
  452. :xref-ERC20-increaseAllowance-address-uint256-: xref:token/ERC20.adoc#ERC20-increaseAllowance-address-uint256-
  453. :xref-ERC20-decreaseAllowance-address-uint256-: xref:token/ERC20.adoc#ERC20-decreaseAllowance-address-uint256-
  454. :xref-ERC20-_transfer-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_transfer-address-address-uint256-
  455. :xref-ERC20-_mint-address-uint256-: xref:token/ERC20.adoc#ERC20-_mint-address-uint256-
  456. :xref-ERC20-_burn-address-uint256-: xref:token/ERC20.adoc#ERC20-_burn-address-uint256-
  457. :xref-ERC20-_approve-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_approve-address-address-uint256-
  458. :xref-ERC20-_spendAllowance-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_spendAllowance-address-address-uint256-
  459. :xref-ERC20-_afterTokenTransfer-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_afterTokenTransfer-address-address-uint256-
  460. :xref-AccessControlEnumerable-supportsInterface-bytes4-: xref:access.adoc#AccessControlEnumerable-supportsInterface-bytes4-
  461. :xref-AccessControlEnumerable-getRoleMember-bytes32-uint256-: xref:access.adoc#AccessControlEnumerable-getRoleMember-bytes32-uint256-
  462. :xref-AccessControlEnumerable-getRoleMemberCount-bytes32-: xref:access.adoc#AccessControlEnumerable-getRoleMemberCount-bytes32-
  463. :xref-AccessControlEnumerable-_grantRole-bytes32-address-: xref:access.adoc#AccessControlEnumerable-_grantRole-bytes32-address-
  464. :xref-AccessControlEnumerable-_revokeRole-bytes32-address-: xref:access.adoc#AccessControlEnumerable-_revokeRole-bytes32-address-
  465. :xref-AccessControl-hasRole-bytes32-address-: xref:access.adoc#AccessControl-hasRole-bytes32-address-
  466. :xref-AccessControl-_checkRole-bytes32-: xref:access.adoc#AccessControl-_checkRole-bytes32-
  467. :xref-AccessControl-_checkRole-bytes32-address-: xref:access.adoc#AccessControl-_checkRole-bytes32-address-
  468. :xref-AccessControl-getRoleAdmin-bytes32-: xref:access.adoc#AccessControl-getRoleAdmin-bytes32-
  469. :xref-AccessControl-grantRole-bytes32-address-: xref:access.adoc#AccessControl-grantRole-bytes32-address-
  470. :xref-AccessControl-revokeRole-bytes32-address-: xref:access.adoc#AccessControl-revokeRole-bytes32-address-
  471. :xref-AccessControl-renounceRole-bytes32-address-: xref:access.adoc#AccessControl-renounceRole-bytes32-address-
  472. :xref-AccessControl-_setupRole-bytes32-address-: xref:access.adoc#AccessControl-_setupRole-bytes32-address-
  473. :xref-AccessControl-_setRoleAdmin-bytes32-bytes32-: xref:access.adoc#AccessControl-_setRoleAdmin-bytes32-bytes32-
  474. :xref-Pausable-Paused-address-: xref:security.adoc#Pausable-Paused-address-
  475. :xref-Pausable-Unpaused-address-: xref:security.adoc#Pausable-Unpaused-address-
  476. :xref-IERC20-Transfer-address-address-uint256-: xref:token/ERC20.adoc#IERC20-Transfer-address-address-uint256-
  477. :xref-IERC20-Approval-address-address-uint256-: xref:token/ERC20.adoc#IERC20-Approval-address-address-uint256-
  478. :xref-IAccessControl-RoleAdminChanged-bytes32-bytes32-bytes32-: xref:access.adoc#IAccessControl-RoleAdminChanged-bytes32-bytes32-bytes32-
  479. :xref-IAccessControl-RoleGranted-bytes32-address-address-: xref:access.adoc#IAccessControl-RoleGranted-bytes32-address-address-
  480. :xref-IAccessControl-RoleRevoked-bytes32-address-address-: xref:access.adoc#IAccessControl-RoleRevoked-bytes32-address-address-
  481. :ERC20-constructor: pass:normal[xref:token/ERC20.adoc#ERC20-constructor-string-string-[`ERC20.constructor`]]
  482. :ERC20-_mint: pass:normal[xref:token/ERC20.adoc#ERC20-_mint-address-uint256-[`ERC20._mint`]]
  483. :ERC20Pausable: pass:normal[xref:token/ERC20.adoc#ERC20Pausable[`ERC20Pausable`]]
  484. :Pausable-_pause: pass:normal[xref:security.adoc#Pausable-_pause--[`Pausable._pause`]]
  485. :ERC20Pausable: pass:normal[xref:token/ERC20.adoc#ERC20Pausable[`ERC20Pausable`]]
  486. :Pausable-_unpause: pass:normal[xref:security.adoc#Pausable-_unpause--[`Pausable._unpause`]]
  487. :ERC20: pass:normal[xref:token/ERC20.adoc#ERC20[`ERC20`]]
  488. :ERC20Burnable: pass:normal[xref:token/ERC20.adoc#ERC20Burnable[`ERC20Burnable`]]
  489. :xref-ERC20PresetFixedSupply-constructor-string-string-uint256-address-: xref:token/ERC20.adoc#ERC20PresetFixedSupply-constructor-string-string-uint256-address-
  490. :xref-ERC20Burnable-burn-uint256-: xref:token/ERC20.adoc#ERC20Burnable-burn-uint256-
  491. :xref-ERC20Burnable-burnFrom-address-uint256-: xref:token/ERC20.adoc#ERC20Burnable-burnFrom-address-uint256-
  492. :xref-ERC20-name--: xref:token/ERC20.adoc#ERC20-name--
  493. :xref-ERC20-symbol--: xref:token/ERC20.adoc#ERC20-symbol--
  494. :xref-ERC20-decimals--: xref:token/ERC20.adoc#ERC20-decimals--
  495. :xref-ERC20-totalSupply--: xref:token/ERC20.adoc#ERC20-totalSupply--
  496. :xref-ERC20-balanceOf-address-: xref:token/ERC20.adoc#ERC20-balanceOf-address-
  497. :xref-ERC20-transfer-address-uint256-: xref:token/ERC20.adoc#ERC20-transfer-address-uint256-
  498. :xref-ERC20-allowance-address-address-: xref:token/ERC20.adoc#ERC20-allowance-address-address-
  499. :xref-ERC20-approve-address-uint256-: xref:token/ERC20.adoc#ERC20-approve-address-uint256-
  500. :xref-ERC20-transferFrom-address-address-uint256-: xref:token/ERC20.adoc#ERC20-transferFrom-address-address-uint256-
  501. :xref-ERC20-increaseAllowance-address-uint256-: xref:token/ERC20.adoc#ERC20-increaseAllowance-address-uint256-
  502. :xref-ERC20-decreaseAllowance-address-uint256-: xref:token/ERC20.adoc#ERC20-decreaseAllowance-address-uint256-
  503. :xref-ERC20-_transfer-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_transfer-address-address-uint256-
  504. :xref-ERC20-_mint-address-uint256-: xref:token/ERC20.adoc#ERC20-_mint-address-uint256-
  505. :xref-ERC20-_burn-address-uint256-: xref:token/ERC20.adoc#ERC20-_burn-address-uint256-
  506. :xref-ERC20-_approve-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_approve-address-address-uint256-
  507. :xref-ERC20-_spendAllowance-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_spendAllowance-address-address-uint256-
  508. :xref-ERC20-_beforeTokenTransfer-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_beforeTokenTransfer-address-address-uint256-
  509. :xref-ERC20-_afterTokenTransfer-address-address-uint256-: xref:token/ERC20.adoc#ERC20-_afterTokenTransfer-address-address-uint256-
  510. :xref-IERC20-Transfer-address-address-uint256-: xref:token/ERC20.adoc#IERC20-Transfer-address-address-uint256-
  511. :xref-IERC20-Approval-address-address-uint256-: xref:token/ERC20.adoc#IERC20-Approval-address-address-uint256-
  512. :ERC20-constructor: pass:normal[xref:token/ERC20.adoc#ERC20-constructor-string-string-[`ERC20.constructor`]]
  513. :xref-SafeERC20-safeTransfer-contract-IERC20-address-uint256-: xref:token/ERC20.adoc#SafeERC20-safeTransfer-contract-IERC20-address-uint256-
  514. :xref-SafeERC20-safeTransferFrom-contract-IERC20-address-address-uint256-: xref:token/ERC20.adoc#SafeERC20-safeTransferFrom-contract-IERC20-address-address-uint256-
  515. :xref-SafeERC20-safeApprove-contract-IERC20-address-uint256-: xref:token/ERC20.adoc#SafeERC20-safeApprove-contract-IERC20-address-uint256-
  516. :xref-SafeERC20-safeIncreaseAllowance-contract-IERC20-address-uint256-: xref:token/ERC20.adoc#SafeERC20-safeIncreaseAllowance-contract-IERC20-address-uint256-
  517. :xref-SafeERC20-safeDecreaseAllowance-contract-IERC20-address-uint256-: xref:token/ERC20.adoc#SafeERC20-safeDecreaseAllowance-contract-IERC20-address-uint256-
  518. :xref-SafeERC20-forceApprove-contract-IERC20-address-uint256-: xref:token/ERC20.adoc#SafeERC20-forceApprove-contract-IERC20-address-uint256-
  519. :xref-SafeERC20-safePermit-contract-IERC20Permit-address-address-uint256-uint256-uint8-bytes32-bytes32-: xref:token/ERC20.adoc#SafeERC20-safePermit-contract-IERC20Permit-address-address-uint256-uint256-uint8-bytes32-bytes32-
  520. :IERC20-approve: pass:normal[xref:token/ERC20.adoc#IERC20-approve-address-uint256-[`IERC20.approve`]]
  521. :xref-TokenTimelock-constructor-contract-IERC20-address-uint256-: xref:token/ERC20.adoc#TokenTimelock-constructor-contract-IERC20-address-uint256-
  522. :xref-TokenTimelock-token--: xref:token/ERC20.adoc#TokenTimelock-token--
  523. :xref-TokenTimelock-beneficiary--: xref:token/ERC20.adoc#TokenTimelock-beneficiary--
  524. :xref-TokenTimelock-releaseTime--: xref:token/ERC20.adoc#TokenTimelock-releaseTime--
  525. :xref-TokenTimelock-release--: xref:token/ERC20.adoc#TokenTimelock-release--
  526. = ERC 20
  527. [.readme-notice]
  528. NOTE: This document is better viewed at https://docs.openzeppelin.com/contracts/api/token/erc20
  529. This set of interfaces, contracts, and utilities are all related to the https://eips.ethereum.org/EIPS/eip-20[ERC20 Token Standard].
  530. 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].
  531. There are a few core contracts that implement the behavior specified in the EIP:
  532. * {IERC20}: the interface all ERC20 implementations should conform to.
  533. * {IERC20Metadata}: the extended ERC20 interface including the <<ERC20-name,`name`>>, <<ERC20-symbol,`symbol`>> and <<ERC20-decimals,`decimals`>> functions.
  534. * {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.
  535. Additionally there are multiple custom extensions, including:
  536. * {ERC20Permit}: gasless approval of tokens (standardized as ERC2612).
  537. * {ERC20Burnable}: destruction of own tokens.
  538. * {ERC20Capped}: enforcement of a cap to the total supply when minting tokens.
  539. * {ERC20Pausable}: ability to pause token transfers.
  540. * {ERC20Snapshot}: efficient storage of past token balances to be later queried at any point in time.
  541. * {ERC20FlashMint}: token level support for flash loans through the minting and burning of ephemeral tokens (standardized as ERC3156).
  542. * {ERC20Votes}: support for voting and vote delegation.
  543. * {ERC20VotesComp}: support for voting and vote delegation (compatible with Compound's token, with uint96 restrictions).
  544. * {ERC20Wrapper}: wrapper to create an ERC20 backed by another ERC20, with deposit and withdraw methods. Useful in conjunction with {ERC20Votes}.
  545. * {ERC4626}: tokenized vault that manages shares (represented as ERC20) that are backed by assets (another ERC20).
  546. Finally, there are some utilities to interact with ERC20 contracts in various ways.
  547. * {SafeERC20}: a wrapper around the interface that eliminates the need to handle boolean return values.
  548. * {TokenTimelock}: hold tokens for a beneficiary until a specified time.
  549. 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. On the other hand, xref:ROOT:erc20.adoc#Presets[ERC20 Presets] (such as {ERC20PresetMinterPauser}) are designed using opinionated patterns to provide developers with ready to use, deployable contracts.
  550. == Core
  551. :Transfer: pass:normal[xref:#IERC20-Transfer-address-address-uint256-[`++Transfer++`]]
  552. :Approval: pass:normal[xref:#IERC20-Approval-address-address-uint256-[`++Approval++`]]
  553. :totalSupply: pass:normal[xref:#IERC20-totalSupply--[`++totalSupply++`]]
  554. :balanceOf: pass:normal[xref:#IERC20-balanceOf-address-[`++balanceOf++`]]
  555. :transfer: pass:normal[xref:#IERC20-transfer-address-uint256-[`++transfer++`]]
  556. :allowance: pass:normal[xref:#IERC20-allowance-address-address-[`++allowance++`]]
  557. :approve: pass:normal[xref:#IERC20-approve-address-uint256-[`++approve++`]]
  558. :transferFrom: pass:normal[xref:#IERC20-transferFrom-address-address-uint256-[`++transferFrom++`]]
  559. [.contract]
  560. [[IERC20]]
  561. === `++IERC20++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.9.5/contracts/token/ERC20/IERC20.sol[{github-icon},role=heading-link]
  562. [.hljs-theme-light.nopadding]
  563. ```solidity
  564. import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
  565. ```
  566. Interface of the ERC20 standard as defined in the EIP.
  567. [.contract-index]
  568. .Functions
  569. --
  570. * {xref-IERC20-totalSupply--}[`++totalSupply()++`]
  571. * {xref-IERC20-balanceOf-address-}[`++balanceOf(account)++`]
  572. * {xref-IERC20-transfer-address-uint256-}[`++transfer(to, amount)++`]
  573. * {xref-IERC20-allowance-address-address-}[`++allowance(owner, spender)++`]
  574. * {xref-IERC20-approve-address-uint256-}[`++approve(spender, amount)++`]
  575. * {xref-IERC20-transferFrom-address-address-uint256-}[`++transferFrom(from, to, amount)++`]
  576. --
  577. [.contract-index]
  578. .Events
  579. --
  580. * {xref-IERC20-Transfer-address-address-uint256-}[`++Transfer(from, to, value)++`]
  581. * {xref-IERC20-Approval-address-address-uint256-}[`++Approval(owner, spender, value)++`]
  582. --
  583. [.contract-item]
  584. [[IERC20-totalSupply--]]
  585. ==== `[.contract-item-name]#++totalSupply++#++() → uint256++` [.item-kind]#external#
  586. Returns the amount of tokens in existence.
  587. [.contract-item]
  588. [[IERC20-balanceOf-address-]]
  589. ==== `[.contract-item-name]#++balanceOf++#++(address account) → uint256++` [.item-kind]#external#
  590. Returns the amount of tokens owned by `account`.
  591. [.contract-item]
  592. [[IERC20-transfer-address-uint256-]]
  593. ==== `[.contract-item-name]#++transfer++#++(address to, uint256 amount) → bool++` [.item-kind]#external#
  594. Moves `amount` tokens from the caller's account to `to`.
  595. Returns a boolean value indicating whether the operation succeeded.
  596. Emits a {Transfer} event.
  597. [.contract-item]
  598. [[IERC20-allowance-address-address-]]
  599. ==== `[.contract-item-name]#++allowance++#++(address owner, address spender) → uint256++` [.item-kind]#external#
  600. Returns the remaining number of tokens that `spender` will be
  601. allowed to spend on behalf of `owner` through {transferFrom}. This is
  602. zero by default.
  603. This value changes when {approve} or {transferFrom} are called.
  604. [.contract-item]
  605. [[IERC20-approve-address-uint256-]]
  606. ==== `[.contract-item-name]#++approve++#++(address spender, uint256 amount) → bool++` [.item-kind]#external#
  607. Sets `amount` as the allowance of `spender` over the caller's tokens.
  608. Returns a boolean value indicating whether the operation succeeded.
  609. IMPORTANT: Beware that changing an allowance with this method brings the risk
  610. that someone may use both the old and the new allowance by unfortunate
  611. transaction ordering. One possible solution to mitigate this race
  612. condition is to first reduce the spender's allowance to 0 and set the
  613. desired value afterwards:
  614. https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
  615. Emits an {Approval} event.
  616. [.contract-item]
  617. [[IERC20-transferFrom-address-address-uint256-]]
  618. ==== `[.contract-item-name]#++transferFrom++#++(address from, address to, uint256 amount) → bool++` [.item-kind]#external#
  619. Moves `amount` tokens from `from` to `to` using the
  620. allowance mechanism. `amount` is then deducted from the caller's
  621. allowance.
  622. Returns a boolean value indicating whether the operation succeeded.
  623. Emits a {Transfer} event.
  624. [.contract-item]
  625. [[IERC20-Transfer-address-address-uint256-]]
  626. ==== `[.contract-item-name]#++Transfer++#++(address indexed from, address indexed to, uint256 value)++` [.item-kind]#event#
  627. Emitted when `value` tokens are moved from one account (`from`) to
  628. another (`to`).
  629. Note that `value` may be zero.
  630. [.contract-item]
  631. [[IERC20-Approval-address-address-uint256-]]
  632. ==== `[.contract-item-name]#++Approval++#++(address indexed owner, address indexed spender, uint256 value)++` [.item-kind]#event#
  633. Emitted when the allowance of a `spender` for an `owner` is set by
  634. a call to {approve}. `value` is the new allowance.
  635. :name: pass:normal[xref:#IERC20Metadata-name--[`++name++`]]
  636. :symbol: pass:normal[xref:#IERC20Metadata-symbol--[`++symbol++`]]
  637. :decimals: pass:normal[xref:#IERC20Metadata-decimals--[`++decimals++`]]
  638. [.contract]
  639. [[IERC20Metadata]]
  640. === `++IERC20Metadata++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.9.5/contracts/token/ERC20/extensions/IERC20Metadata.sol[{github-icon},role=heading-link]
  641. [.hljs-theme-light.nopadding]
  642. ```solidity
  643. import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
  644. ```
  645. Interface for the optional metadata functions from the ERC20 standard.
  646. _Available since v4.1._
  647. [.contract-index]
  648. .Functions
  649. --
  650. * {xref-IERC20Metadata-name--}[`++name()++`]
  651. * {xref-IERC20Metadata-symbol--}[`++symbol()++`]
  652. * {xref-IERC20Metadata-decimals--}[`++decimals()++`]
  653. [.contract-subindex-inherited]
  654. .IERC20
  655. * {xref-IERC20-totalSupply--}[`++totalSupply()++`]
  656. * {xref-IERC20-balanceOf-address-}[`++balanceOf(account)++`]
  657. * {xref-IERC20-transfer-address-uint256-}[`++transfer(to, amount)++`]
  658. * {xref-IERC20-allowance-address-address-}[`++allowance(owner, spender)++`]
  659. * {xref-IERC20-approve-address-uint256-}[`++approve(spender, amount)++`]
  660. * {xref-IERC20-transferFrom-address-address-uint256-}[`++transferFrom(from, to, amount)++`]
  661. --
  662. [.contract-index]
  663. .Events
  664. --
  665. [.contract-subindex-inherited]
  666. .IERC20
  667. * {xref-IERC20-Transfer-address-address-uint256-}[`++Transfer(from, to, value)++`]
  668. * {xref-IERC20-Approval-address-address-uint256-}[`++Approval(owner, spender, value)++`]
  669. --
  670. [.contract-item]
  671. [[IERC20Metadata-name--]]
  672. ==== `[.contract-item-name]#++name++#++() → string++` [.item-kind]#external#
  673. Returns the name of the token.
  674. [.contract-item]
  675. [[IERC20Metadata-symbol--]]
  676. ==== `[.contract-item-name]#++symbol++#++() → string++` [.item-kind]#external#
  677. Returns the symbol of the token.
  678. [.contract-item]
  679. [[IERC20Metadata-decimals--]]
  680. ==== `[.contract-item-name]#++decimals++#++() → uint8++` [.item-kind]#external#
  681. Returns the decimals places of the token.
  682. :constructor: pass:normal[xref:#ERC20-constructor-string-string-[`++constructor++`]]
  683. :name: pass:normal[xref:#ERC20-name--[`++name++`]]
  684. :symbol: pass:normal[xref:#ERC20-symbol--[`++symbol++`]]
  685. :decimals: pass:normal[xref:#ERC20-decimals--[`++decimals++`]]
  686. :totalSupply: pass:normal[xref:#ERC20-totalSupply--[`++totalSupply++`]]
  687. :balanceOf: pass:normal[xref:#ERC20-balanceOf-address-[`++balanceOf++`]]
  688. :transfer: pass:normal[xref:#ERC20-transfer-address-uint256-[`++transfer++`]]
  689. :allowance: pass:normal[xref:#ERC20-allowance-address-address-[`++allowance++`]]
  690. :approve: pass:normal[xref:#ERC20-approve-address-uint256-[`++approve++`]]
  691. :transferFrom: pass:normal[xref:#ERC20-transferFrom-address-address-uint256-[`++transferFrom++`]]
  692. :increaseAllowance: pass:normal[xref:#ERC20-increaseAllowance-address-uint256-[`++increaseAllowance++`]]
  693. :decreaseAllowance: pass:normal[xref:#ERC20-decreaseAllowance-address-uint256-[`++decreaseAllowance++`]]
  694. :_transfer: pass:normal[xref:#ERC20-_transfer-address-address-uint256-[`++_transfer++`]]
  695. :_mint: pass:normal[xref:#ERC20-_mint-address-uint256-[`++_mint++`]]
  696. :_burn: pass:normal[xref:#ERC20-_burn-address-uint256-[`++_burn++`]]
  697. :_approve: pass:normal[xref:#ERC20-_approve-address-address-uint256-[`++_approve++`]]
  698. :_spendAllowance: pass:normal[xref:#ERC20-_spendAllowance-address-address-uint256-[`++_spendAllowance++`]]
  699. :_beforeTokenTransfer: pass:normal[xref:#ERC20-_beforeTokenTransfer-address-address-uint256-[`++_beforeTokenTransfer++`]]
  700. :_afterTokenTransfer: pass:normal[xref:#ERC20-_afterTokenTransfer-address-address-uint256-[`++_afterTokenTransfer++`]]
  701. [.contract]
  702. [[ERC20]]
  703. === `++ERC20++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.9.5/contracts/token/ERC20/ERC20.sol[{github-icon},role=heading-link]
  704. [.hljs-theme-light.nopadding]
  705. ```solidity
  706. import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
  707. ```
  708. Implementation of the {IERC20} interface.
  709. This implementation is agnostic to the way tokens are created. This means
  710. that a supply mechanism has to be added in a derived contract using {_mint}.
  711. For a generic mechanism see {ERC20PresetMinterPauser}.
  712. TIP: For a detailed writeup see our guide
  713. https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
  714. to implement supply mechanisms].
  715. The default value of {decimals} is 18. To change this, you should override
  716. this function so it returns a different value.
  717. We have followed general OpenZeppelin Contracts guidelines: functions revert
  718. instead returning `false` on failure. This behavior is nonetheless
  719. conventional and does not conflict with the expectations of ERC20
  720. applications.
  721. Additionally, an {Approval} event is emitted on calls to {transferFrom}.
  722. This allows applications to reconstruct the allowance for all accounts just
  723. by listening to said events. Other implementations of the EIP may not emit
  724. these events, as it isn't required by the specification.
  725. Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
  726. functions have been added to mitigate the well-known issues around setting
  727. allowances. See {IERC20-approve}.
  728. [.contract-index]
  729. .Functions
  730. --
  731. * {xref-ERC20-constructor-string-string-}[`++constructor(name_, symbol_)++`]
  732. * {xref-ERC20-name--}[`++name()++`]
  733. * {xref-ERC20-symbol--}[`++symbol()++`]
  734. * {xref-ERC20-decimals--}[`++decimals()++`]
  735. * {xref-ERC20-totalSupply--}[`++totalSupply()++`]
  736. * {xref-ERC20-balanceOf-address-}[`++balanceOf(account)++`]
  737. * {xref-ERC20-transfer-address-uint256-}[`++transfer(to, amount)++`]
  738. * {xref-ERC20-allowance-address-address-}[`++allowance(owner, spender)++`]
  739. * {xref-ERC20-approve-address-uint256-}[`++approve(spender, amount)++`]
  740. * {xref-ERC20-transferFrom-address-address-uint256-}[`++transferFrom(from, to, amount)++`]
  741. * {xref-ERC20-increaseAllowance-address-uint256-}[`++increaseAllowance(spender, addedValue)++`]
  742. * {xref-ERC20-decreaseAllowance-address-uint256-}[`++decreaseAllowance(spender, subtractedValue)++`]
  743. * {xref-ERC20-_transfer-address-address-uint256-}[`++_transfer(from, to, amount)++`]
  744. * {xref-ERC20-_mint-address-uint256-}[`++_mint(account, amount)++`]
  745. * {xref-ERC20-_burn-address-uint256-}[`++_burn(account, amount)++`]
  746. * {xref-ERC20-_approve-address-address-uint256-}[`++_approve(owner, spender, amount)++`]
  747. * {xref-ERC20-_spendAllowance-address-address-uint256-}[`++_spendAllowance(owner, spender, amount)++`]
  748. * {xref-ERC20-_beforeTokenTransfer-address-address-uint256-}[`++_beforeTokenTransfer(from, to, amount)++`]
  749. * {xref-ERC20-_afterTokenTransfer-address-address-uint256-}[`++_afterTokenTransfer(from, to, amount)++`]
  750. [.contract-subindex-inherited]
  751. .IERC20Metadata
  752. [.contract-subindex-inherited]
  753. .IERC20
  754. --
  755. [.contract-index]
  756. .Events
  757. --
  758. [.contract-subindex-inherited]
  759. .IERC20Metadata
  760. [.contract-subindex-inherited]
  761. .IERC20
  762. * {xref-IERC20-Transfer-address-address-uint256-}[`++Transfer(from, to, value)++`]
  763. * {xref-IERC20-Approval-address-address-uint256-}[`++Approval(owner, spender, value)++`]
  764. --
  765. [.contract-item]
  766. [[ERC20-constructor-string-string-]]
  767. ==== `[.contract-item-name]#++constructor++#++(string name_, string symbol_)++` [.item-kind]#public#
  768. Sets the values for {name} and {symbol}.
  769. All two of these values are immutable: they can only be set once during
  770. construction.
  771. [.contract-item]
  772. [[ERC20-name--]]
  773. ==== `[.contract-item-name]#++name++#++() → string++` [.item-kind]#public#
  774. Returns the name of the token.
  775. [.contract-item]
  776. [[ERC20-symbol--]]
  777. ==== `[.contract-item-name]#++symbol++#++() → string++` [.item-kind]#public#
  778. Returns the symbol of the token, usually a shorter version of the
  779. name.
  780. [.contract-item]
  781. [[ERC20-decimals--]]
  782. ==== `[.contract-item-name]#++decimals++#++() → uint8++` [.item-kind]#public#
  783. Returns the number of decimals used to get its user representation.
  784. For example, if `decimals` equals `2`, a balance of `505` tokens should
  785. be displayed to a user as `5.05` (`505 / 10 ** 2`).
  786. Tokens usually opt for a value of 18, imitating the relationship between
  787. Ether and Wei. This is the default value returned by this function, unless
  788. it's overridden.
  789. NOTE: This information is only used for _display_ purposes: it in
  790. no way affects any of the arithmetic of the contract, including
  791. {IERC20-balanceOf} and {IERC20-transfer}.
  792. [.contract-item]
  793. [[ERC20-totalSupply--]]
  794. ==== `[.contract-item-name]#++totalSupply++#++() → uint256++` [.item-kind]#public#
  795. See {IERC20-totalSupply}.
  796. [.contract-item]
  797. [[ERC20-balanceOf-address-]]
  798. ==== `[.contract-item-name]#++balanceOf++#++(address account) → uint256++` [.item-kind]#public#
  799. See {IERC20-balanceOf}.
  800. [.contract-item]
  801. [[ERC20-transfer-address-uint256-]]
  802. ==== `[.contract-item-name]#++transfer++#++(address to, uint256 amount) → bool++` [.item-kind]#public#
  803. See {IERC20-transfer}.
  804. Requirements:
  805. - `to` cannot be the zero address.
  806. - the caller must have a balance of at least `amount`.
  807. [.contract-item]
  808. [[ERC20-allowance-address-address-]]
  809. ==== `[.contract-item-name]#++allowance++#++(address owner, address spender) → uint256++` [.item-kind]#public#
  810. See {IERC20-allowance}.
  811. [.contract-item]
  812. [[ERC20-approve-address-uint256-]]
  813. ==== `[.contract-item-name]#++approve++#++(address spender, uint256 amount) → bool++` [.item-kind]#public#
  814. See {IERC20-approve}.
  815. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
  816. `transferFrom`. This is semantically equivalent to an infinite approval.
  817. Requirements:
  818. - `spender` cannot be the zero address.
  819. [.contract-item]
  820. [[ERC20-transferFrom-address-address-uint256-]]
  821. ==== `[.contract-item-name]#++transferFrom++#++(address from, address to, uint256 amount) → bool++` [.item-kind]#public#
  822. See {IERC20-transferFrom}.
  823. Emits an {Approval} event indicating the updated allowance. This is not
  824. required by the EIP. See the note at the beginning of {ERC20}.
  825. NOTE: Does not update the allowance if the current allowance
  826. is the maximum `uint256`.
  827. Requirements:
  828. - `from` and `to` cannot be the zero address.
  829. - `from` must have a balance of at least `amount`.
  830. - the caller must have allowance for ``from``'s tokens of at least
  831. `amount`.
  832. [.contract-item]
  833. [[ERC20-increaseAllowance-address-uint256-]]
  834. ==== `[.contract-item-name]#++increaseAllowance++#++(address spender, uint256 addedValue) → bool++` [.item-kind]#public#
  835. Atomically increases the allowance granted to `spender` by the caller.
  836. This is an alternative to {approve} that can be used as a mitigation for
  837. problems described in {IERC20-approve}.
  838. Emits an {Approval} event indicating the updated allowance.
  839. Requirements:
  840. - `spender` cannot be the zero address.
  841. [.contract-item]
  842. [[ERC20-decreaseAllowance-address-uint256-]]
  843. ==== `[.contract-item-name]#++decreaseAllowance++#++(address spender, uint256 subtractedValue) → bool++` [.item-kind]#public#
  844. Atomically decreases the allowance granted to `spender` by the caller.
  845. This is an alternative to {approve} that can be used as a mitigation for
  846. problems described in {IERC20-approve}.
  847. Emits an {Approval} event indicating the updated allowance.
  848. Requirements:
  849. - `spender` cannot be the zero address.
  850. - `spender` must have allowance for the caller of at least
  851. `subtractedValue`.
  852. [.contract-item]
  853. [[ERC20-_transfer-address-address-uint256-]]
  854. ==== `[.contract-item-name]#++_transfer++#++(address from, address to, uint256 amount)++` [.item-kind]#internal#
  855. Moves `amount` of tokens from `from` to `to`.
  856. This internal function is equivalent to {transfer}, and can be used to
  857. e.g. implement automatic token fees, slashing mechanisms, etc.
  858. Emits a {Transfer} event.
  859. Requirements:
  860. - `from` cannot be the zero address.
  861. - `to` cannot be the zero address.
  862. - `from` must have a balance of at least `amount`.
  863. [.contract-item]
  864. [[ERC20-_mint-address-uint256-]]
  865. ==== `[.contract-item-name]#++_mint++#++(address account, uint256 amount)++` [.item-kind]#internal#
  866. Creates `amount` tokens and assigns them to `account`, increasing
  867. the total supply.
  868. Emits a {Transfer} event with `from` set to the zero address.
  869. Requirements:
  870. - `account` cannot be the zero address.
  871. [.contract-item]
  872. [[ERC20-_burn-address-uint256-]]
  873. ==== `[.contract-item-name]#++_burn++#++(address account, uint256 amount)++` [.item-kind]#internal#
  874. Destroys `amount` tokens from `account`, reducing the
  875. total supply.
  876. Emits a {Transfer} event with `to` set to the zero address.
  877. Requirements:
  878. - `account` cannot be the zero address.
  879. - `account` must have at least `amount` tokens.
  880. [.contract-item]
  881. [[ERC20-_approve-address-address-uint256-]]
  882. ==== `[.contract-item-name]#++_approve++#++(address owner, address spender, uint256 amount)++` [.item-kind]#internal#
  883. Sets `amount` as the allowance of `spender` over the `owner` s tokens.
  884. This internal function is equivalent to `approve`, and can be used to
  885. e.g. set automatic allowances for certain subsystems, etc.
  886. Emits an {Approval} event.
  887. Requirements:
  888. - `owner` cannot be the zero address.
  889. - `spender` cannot be the zero address.
  890. [.contract-item]
  891. [[ERC20-_spendAllowance-address-address-uint256-]]
  892. ==== `[.contract-item-name]#++_spendAllowance++#++(address owner, address spender, uint256 amount)++` [.item-kind]#internal#
  893. Updates `owner` s allowance for `spender` based on spent `amount`.
  894. Does not update the allowance amount in case of infinite allowance.
  895. Revert if not enough allowance is available.
  896. Might emit an {Approval} event.
  897. [.contract-item]
  898. [[ERC20-_beforeTokenTransfer-address-address-uint256-]]
  899. ==== `[.contract-item-name]#++_beforeTokenTransfer++#++(address from, address to, uint256 amount)++` [.item-kind]#internal#
  900. Hook that is called before any transfer of tokens. This includes
  901. minting and burning.
  902. Calling conditions:
  903. - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
  904. will be transferred to `to`.
  905. - when `from` is zero, `amount` tokens will be minted for `to`.
  906. - when `to` is zero, `amount` of ``from``'s tokens will be burned.
  907. - `from` and `to` are never both zero.
  908. To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
  909. [.contract-item]
  910. [[ERC20-_afterTokenTransfer-address-address-uint256-]]
  911. ==== `[.contract-item-name]#++_afterTokenTransfer++#++(address from, address to, uint256 amount)++` [.item-kind]#internal#
  912. Hook that is called after any transfer of tokens. This includes
  913. minting and burning.
  914. Calling conditions:
  915. - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
  916. has been transferred to `to`.
  917. - when `from` is zero, `amount` tokens have been minted for `to`.
  918. - when `to` is zero, `amount` of ``from``'s tokens have been burned.
  919. - `from` and `to` are never both zero.
  920. To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
  921. == Extensions
  922. :permit: pass:normal[xref:#IERC20Permit-permit-address-address-uint256-uint256-uint8-bytes32-bytes32-[`++permit++`]]
  923. :nonces: pass:normal[xref:#IERC20Permit-nonces-address-[`++nonces++`]]
  924. :DOMAIN_SEPARATOR: pass:normal[xref:#IERC20Permit-DOMAIN_SEPARATOR--[`++DOMAIN_SEPARATOR++`]]
  925. [.contract]
  926. [[IERC20Permit]]
  927. === `++IERC20Permit++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.9.5/contracts/token/ERC20/extensions/IERC20Permit.sol[{github-icon},role=heading-link]
  928. [.hljs-theme-light.nopadding]
  929. ```solidity
  930. import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol";
  931. ```
  932. Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in
  933. https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].
  934. Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by
  935. presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't
  936. need to send a transaction, and thus is not required to hold Ether at all.
  937. ==== Security Considerations
  938. There are two important considerations concerning the use of `permit`. The first is that a valid permit signature
  939. expresses an allowance, and it should not be assumed to convey additional meaning. In particular, it should not be
  940. considered as an intention to spend the allowance in any specific way. The second is that because permits have
  941. built-in replay protection and can be submitted by anyone, they can be frontrun. A protocol that uses permits should
  942. take this into consideration and allow a `permit` call to fail. Combining these two aspects, a pattern that may be
  943. generally recommended is:
  944. ```solidity
  945. function doThingWithPermit(..., uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public {
  946. try token.permit(msg.sender, address(this), value, deadline, v, r, s) {} catch {}
  947. doThing(..., value);
  948. }
  949. function doThing(..., uint256 value) public {
  950. token.safeTransferFrom(msg.sender, address(this), value);
  951. ...
  952. }
  953. ```
  954. Observe that: 1) `msg.sender` is used as the owner, leaving no ambiguity as to the signer intent, and 2) the use of
  955. `try/catch` allows the permit to fail and makes the code tolerant to frontrunning. (See also
  956. {SafeERC20-safeTransferFrom}).
  957. Additionally, note that smart contract wallets (such as Argent or Safe) are not able to produce permit signatures, so
  958. contracts should have entry points that don't rely on permit.
  959. [.contract-index]
  960. .Functions
  961. --
  962. * {xref-IERC20Permit-permit-address-address-uint256-uint256-uint8-bytes32-bytes32-}[`++permit(owner, spender, value, deadline, v, r, s)++`]
  963. * {xref-IERC20Permit-nonces-address-}[`++nonces(owner)++`]
  964. * {xref-IERC20Permit-DOMAIN_SEPARATOR--}[`++DOMAIN_SEPARATOR()++`]
  965. --
  966. [.contract-item]
  967. [[IERC20Permit-permit-address-address-uint256-uint256-uint8-bytes32-bytes32-]]
  968. ==== `[.contract-item-name]#++permit++#++(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s)++` [.item-kind]#external#
  969. Sets `value` as the allowance of `spender` over ``owner``'s tokens,
  970. given ``owner``'s signed approval.
  971. IMPORTANT: The same issues {IERC20-approve} has related to transaction
  972. ordering also apply here.
  973. Emits an {Approval} event.
  974. Requirements:
  975. - `spender` cannot be the zero address.
  976. - `deadline` must be a timestamp in the future.
  977. - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`
  978. over the EIP712-formatted function arguments.
  979. - the signature must use ``owner``'s current nonce (see {nonces}).
  980. For more information on the signature format, see the
  981. https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP
  982. section].
  983. CAUTION: See Security Considerations above.
  984. [.contract-item]
  985. [[IERC20Permit-nonces-address-]]
  986. ==== `[.contract-item-name]#++nonces++#++(address owner) → uint256++` [.item-kind]#external#
  987. Returns the current nonce for `owner`. This value must be
  988. included whenever a signature is generated for {permit}.
  989. Every successful call to {permit} increases ``owner``'s nonce by one. This
  990. prevents a signature from being used multiple times.
  991. [.contract-item]
  992. [[IERC20Permit-DOMAIN_SEPARATOR--]]
  993. ==== `[.contract-item-name]#++DOMAIN_SEPARATOR++#++() → bytes32++` [.item-kind]#external#
  994. Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.
  995. :constructor: pass:normal[xref:#ERC20Permit-constructor-string-[`++constructor++`]]
  996. :permit: pass:normal[xref:#ERC20Permit-permit-address-address-uint256-uint256-uint8-bytes32-bytes32-[`++permit++`]]
  997. :nonces: pass:normal[xref:#ERC20Permit-nonces-address-[`++nonces++`]]
  998. :DOMAIN_SEPARATOR: pass:normal[xref:#ERC20Permit-DOMAIN_SEPARATOR--[`++DOMAIN_SEPARATOR++`]]
  999. :_useNonce: pass:normal[xref:#ERC20Permit-_useNonce-address-[`++_useNonce++`]]
  1000. [.contract]
  1001. [[ERC20Permit]]
  1002. === `++ERC20Permit++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.9.5/contracts/token/ERC20/extensions/ERC20Permit.sol[{github-icon},role=heading-link]
  1003. [.hljs-theme-light.nopadding]
  1004. ```solidity
  1005. import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol";
  1006. ```
  1007. Implementation of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in
  1008. https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].
  1009. Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by
  1010. presenting a message signed by the account. By not relying on `{IERC20-approve}`, the token holder account doesn't
  1011. need to send a transaction, and thus is not required to hold Ether at all.
  1012. _Available since v3.4._
  1013. [.contract-index]
  1014. .Functions
  1015. --
  1016. * {xref-ERC20Permit-constructor-string-}[`++constructor(name)++`]
  1017. * {xref-ERC20Permit-permit-address-address-uint256-uint256-uint8-bytes32-bytes32-}[`++permit(owner, spender, value, deadline, v, r, s)++`]
  1018. * {xref-ERC20Permit-nonces-address-}[`++nonces(owner)++`]
  1019. * {xref-ERC20Permit-DOMAIN_SEPARATOR--}[`++DOMAIN_SEPARATOR()++`]
  1020. * {xref-ERC20Permit-_useNonce-address-}[`++_useNonce(owner)++`]
  1021. [.contract-subindex-inherited]
  1022. .EIP712
  1023. * {xref-EIP712-_domainSeparatorV4--}[`++_domainSeparatorV4()++`]
  1024. * {xref-EIP712-_hashTypedDataV4-bytes32-}[`++_hashTypedDataV4(structHash)++`]
  1025. * {xref-EIP712-eip712Domain--}[`++eip712Domain()++`]
  1026. [.contract-subindex-inherited]
  1027. .IERC5267
  1028. [.contract-subindex-inherited]
  1029. .IERC20Permit
  1030. [.contract-subindex-inherited]
  1031. .ERC20
  1032. * {xref-ERC20-name--}[`++name()++`]
  1033. * {xref-ERC20-symbol--}[`++symbol()++`]
  1034. * {xref-ERC20-decimals--}[`++decimals()++`]
  1035. * {xref-ERC20-totalSupply--}[`++totalSupply()++`]
  1036. * {xref-ERC20-balanceOf-address-}[`++balanceOf(account)++`]
  1037. * {xref-ERC20-transfer-address-uint256-}[`++transfer(to, amount)++`]
  1038. * {xref-ERC20-allowance-address-address-}[`++allowance(owner, spender)++`]
  1039. * {xref-ERC20-approve-address-uint256-}[`++approve(spender, amount)++`]
  1040. * {xref-ERC20-transferFrom-address-address-uint256-}[`++transferFrom(from, to, amount)++`]
  1041. * {xref-ERC20-increaseAllowance-address-uint256-}[`++increaseAllowance(spender, addedValue)++`]
  1042. * {xref-ERC20-decreaseAllowance-address-uint256-}[`++decreaseAllowance(spender, subtractedValue)++`]
  1043. * {xref-ERC20-_transfer-address-address-uint256-}[`++_transfer(from, to, amount)++`]
  1044. * {xref-ERC20-_mint-address-uint256-}[`++_mint(account, amount)++`]
  1045. * {xref-ERC20-_burn-address-uint256-}[`++_burn(account, amount)++`]
  1046. * {xref-ERC20-_approve-address-address-uint256-}[`++_approve(owner, spender, amount)++`]
  1047. * {xref-ERC20-_spendAllowance-address-address-uint256-}[`++_spendAllowance(owner, spender, amount)++`]
  1048. * {xref-ERC20-_beforeTokenTransfer-address-address-uint256-}[`++_beforeTokenTransfer(from, to, amount)++`]
  1049. * {xref-ERC20-_afterTokenTransfer-address-address-uint256-}[`++_afterTokenTransfer(from, to, amount)++`]
  1050. [.contract-subindex-inherited]
  1051. .IERC20Metadata
  1052. [.contract-subindex-inherited]
  1053. .IERC20
  1054. --
  1055. [.contract-index]
  1056. .Events
  1057. --
  1058. [.contract-subindex-inherited]
  1059. .EIP712
  1060. [.contract-subindex-inherited]
  1061. .IERC5267
  1062. * {xref-IERC5267-EIP712DomainChanged--}[`++EIP712DomainChanged()++`]
  1063. [.contract-subindex-inherited]
  1064. .IERC20Permit
  1065. [.contract-subindex-inherited]
  1066. .ERC20
  1067. [.contract-subindex-inherited]
  1068. .IERC20Metadata
  1069. [.contract-subindex-inherited]
  1070. .IERC20
  1071. * {xref-IERC20-Transfer-address-address-uint256-}[`++Transfer(from, to, value)++`]
  1072. * {xref-IERC20-Approval-address-address-uint256-}[`++Approval(owner, spender, value)++`]
  1073. --
  1074. [.contract-item]
  1075. [[ERC20Permit-constructor-string-]]
  1076. ==== `[.contract-item-name]#++constructor++#++(string name)++` [.item-kind]#internal#
  1077. Initializes the {EIP712} domain separator using the `name` parameter, and setting `version` to `"1"`.
  1078. It's a good idea to use the same `name` that is defined as the ERC20 token name.
  1079. [.contract-item]
  1080. [[ERC20Permit-permit-address-address-uint256-uint256-uint8-bytes32-bytes32-]]
  1081. ==== `[.contract-item-name]#++permit++#++(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s)++` [.item-kind]#public#
  1082. Sets `value` as the allowance of `spender` over ``owner``'s tokens,
  1083. given ``owner``'s signed approval.
  1084. IMPORTANT: The same issues {IERC20-approve} has related to transaction
  1085. ordering also apply here.
  1086. Emits an {Approval} event.
  1087. Requirements:
  1088. - `spender` cannot be the zero address.
  1089. - `deadline` must be a timestamp in the future.
  1090. - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`
  1091. over the EIP712-formatted function arguments.
  1092. - the signature must use ``owner``'s current nonce (see {nonces}).
  1093. For more information on the signature format, see the
  1094. https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP
  1095. section].
  1096. CAUTION: See Security Considerations above.
  1097. [.contract-item]
  1098. [[ERC20Permit-nonces-address-]]
  1099. ==== `[.contract-item-name]#++nonces++#++(address owner) → uint256++` [.item-kind]#public#
  1100. Returns the current nonce for `owner`. This value must be
  1101. included whenever a signature is generated for {permit}.
  1102. Every successful call to {permit} increases ``owner``'s nonce by one. This
  1103. prevents a signature from being used multiple times.
  1104. [.contract-item]
  1105. [[ERC20Permit-DOMAIN_SEPARATOR--]]
  1106. ==== `[.contract-item-name]#++DOMAIN_SEPARATOR++#++() → bytes32++` [.item-kind]#external#
  1107. Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.
  1108. [.contract-item]
  1109. [[ERC20Permit-_useNonce-address-]]
  1110. ==== `[.contract-item-name]#++_useNonce++#++(address owner) → uint256 current++` [.item-kind]#internal#
  1111. "Consume a nonce": return the current value and increment.
  1112. _Available since v4.1._
  1113. :burn: pass:normal[xref:#ERC20Burnable-burn-uint256-[`++burn++`]]
  1114. :burnFrom: pass:normal[xref:#ERC20Burnable-burnFrom-address-uint256-[`++burnFrom++`]]
  1115. [.contract]
  1116. [[ERC20Burnable]]
  1117. === `++ERC20Burnable++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.9.5/contracts/token/ERC20/extensions/ERC20Burnable.sol[{github-icon},role=heading-link]
  1118. [.hljs-theme-light.nopadding]
  1119. ```solidity
  1120. import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol";
  1121. ```
  1122. Extension of {ERC20} that allows token holders to destroy both their own
  1123. tokens and those that they have an allowance for, in a way that can be
  1124. recognized off-chain (via event analysis).
  1125. [.contract-index]
  1126. .Functions
  1127. --
  1128. * {xref-ERC20Burnable-burn-uint256-}[`++burn(amount)++`]
  1129. * {xref-ERC20Burnable-burnFrom-address-uint256-}[`++burnFrom(account, amount)++`]
  1130. [.contract-subindex-inherited]
  1131. .ERC20
  1132. * {xref-ERC20-name--}[`++name()++`]
  1133. * {xref-ERC20-symbol--}[`++symbol()++`]
  1134. * {xref-ERC20-decimals--}[`++decimals()++`]
  1135. * {xref-ERC20-totalSupply--}[`++totalSupply()++`]
  1136. * {xref-ERC20-balanceOf-address-}[`++balanceOf(account)++`]
  1137. * {xref-ERC20-transfer-address-uint256-}[`++transfer(to, amount)++`]
  1138. * {xref-ERC20-allowance-address-address-}[`++allowance(owner, spender)++`]
  1139. * {xref-ERC20-approve-address-uint256-}[`++approve(spender, amount)++`]
  1140. * {xref-ERC20-transferFrom-address-address-uint256-}[`++transferFrom(from, to, amount)++`]
  1141. * {xref-ERC20-increaseAllowance-address-uint256-}[`++increaseAllowance(spender, addedValue)++`]
  1142. * {xref-ERC20-decreaseAllowance-address-uint256-}[`++decreaseAllowance(spender, subtractedValue)++`]
  1143. * {xref-ERC20-_transfer-address-address-uint256-}[`++_transfer(from, to, amount)++`]
  1144. * {xref-ERC20-_mint-address-uint256-}[`++_mint(account, amount)++`]
  1145. * {xref-ERC20-_burn-address-uint256-}[`++_burn(account, amount)++`]
  1146. * {xref-ERC20-_approve-address-address-uint256-}[`++_approve(owner, spender, amount)++`]
  1147. * {xref-ERC20-_spendAllowance-address-address-uint256-}[`++_spendAllowance(owner, spender, amount)++`]
  1148. * {xref-ERC20-_beforeTokenTransfer-address-address-uint256-}[`++_beforeTokenTransfer(from, to, amount)++`]
  1149. * {xref-ERC20-_afterTokenTransfer-address-address-uint256-}[`++_afterTokenTransfer(from, to, amount)++`]
  1150. [.contract-subindex-inherited]
  1151. .IERC20Metadata
  1152. [.contract-subindex-inherited]
  1153. .IERC20
  1154. --
  1155. [.contract-index]
  1156. .Events
  1157. --
  1158. [.contract-subindex-inherited]
  1159. .ERC20
  1160. [.contract-subindex-inherited]
  1161. .IERC20Metadata
  1162. [.contract-subindex-inherited]
  1163. .IERC20
  1164. * {xref-IERC20-Transfer-address-address-uint256-}[`++Transfer(from, to, value)++`]
  1165. * {xref-IERC20-Approval-address-address-uint256-}[`++Approval(owner, spender, value)++`]
  1166. --
  1167. [.contract-item]
  1168. [[ERC20Burnable-burn-uint256-]]
  1169. ==== `[.contract-item-name]#++burn++#++(uint256 amount)++` [.item-kind]#public#
  1170. Destroys `amount` tokens from the caller.
  1171. See {ERC20-_burn}.
  1172. [.contract-item]
  1173. [[ERC20Burnable-burnFrom-address-uint256-]]
  1174. ==== `[.contract-item-name]#++burnFrom++#++(address account, uint256 amount)++` [.item-kind]#public#
  1175. Destroys `amount` tokens from `account`, deducting from the caller's
  1176. allowance.
  1177. See {ERC20-_burn} and {ERC20-allowance}.
  1178. Requirements:
  1179. - the caller must have allowance for ``accounts``'s tokens of at least
  1180. `amount`.
  1181. :constructor: pass:normal[xref:#ERC20Capped-constructor-uint256-[`++constructor++`]]
  1182. :cap: pass:normal[xref:#ERC20Capped-cap--[`++cap++`]]
  1183. :_mint: pass:normal[xref:#ERC20Capped-_mint-address-uint256-[`++_mint++`]]
  1184. [.contract]
  1185. [[ERC20Capped]]
  1186. === `++ERC20Capped++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.9.5/contracts/token/ERC20/extensions/ERC20Capped.sol[{github-icon},role=heading-link]
  1187. [.hljs-theme-light.nopadding]
  1188. ```solidity
  1189. import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Capped.sol";
  1190. ```
  1191. Extension of {ERC20} that adds a cap to the supply of tokens.
  1192. [.contract-index]
  1193. .Functions
  1194. --
  1195. * {xref-ERC20Capped-constructor-uint256-}[`++constructor(cap_)++`]
  1196. * {xref-ERC20Capped-cap--}[`++cap()++`]
  1197. * {xref-ERC20Capped-_mint-address-uint256-}[`++_mint(account, amount)++`]
  1198. [.contract-subindex-inherited]
  1199. .ERC20
  1200. * {xref-ERC20-name--}[`++name()++`]
  1201. * {xref-ERC20-symbol--}[`++symbol()++`]
  1202. * {xref-ERC20-decimals--}[`++decimals()++`]
  1203. * {xref-ERC20-totalSupply--}[`++totalSupply()++`]
  1204. * {xref-ERC20-balanceOf-address-}[`++balanceOf(account)++`]
  1205. * {xref-ERC20-transfer-address-uint256-}[`++transfer(to, amount)++`]
  1206. * {xref-ERC20-allowance-address-address-}[`++allowance(owner, spender)++`]
  1207. * {xref-ERC20-approve-address-uint256-}[`++approve(spender, amount)++`]
  1208. * {xref-ERC20-transferFrom-address-address-uint256-}[`++transferFrom(from, to, amount)++`]
  1209. * {xref-ERC20-increaseAllowance-address-uint256-}[`++increaseAllowance(spender, addedValue)++`]
  1210. * {xref-ERC20-decreaseAllowance-address-uint256-}[`++decreaseAllowance(spender, subtractedValue)++`]
  1211. * {xref-ERC20-_transfer-address-address-uint256-}[`++_transfer(from, to, amount)++`]
  1212. * {xref-ERC20-_burn-address-uint256-}[`++_burn(account, amount)++`]
  1213. * {xref-ERC20-_approve-address-address-uint256-}[`++_approve(owner, spender, amount)++`]
  1214. * {xref-ERC20-_spendAllowance-address-address-uint256-}[`++_spendAllowance(owner, spender, amount)++`]
  1215. * {xref-ERC20-_beforeTokenTransfer-address-address-uint256-}[`++_beforeTokenTransfer(from, to, amount)++`]
  1216. * {xref-ERC20-_afterTokenTransfer-address-address-uint256-}[`++_afterTokenTransfer(from, to, amount)++`]
  1217. [.contract-subindex-inherited]
  1218. .IERC20Metadata
  1219. [.contract-subindex-inherited]
  1220. .IERC20
  1221. --
  1222. [.contract-index]
  1223. .Events
  1224. --
  1225. [.contract-subindex-inherited]
  1226. .ERC20
  1227. [.contract-subindex-inherited]
  1228. .IERC20Metadata
  1229. [.contract-subindex-inherited]
  1230. .IERC20
  1231. * {xref-IERC20-Transfer-address-address-uint256-}[`++Transfer(from, to, value)++`]
  1232. * {xref-IERC20-Approval-address-address-uint256-}[`++Approval(owner, spender, value)++`]
  1233. --
  1234. [.contract-item]
  1235. [[ERC20Capped-constructor-uint256-]]
  1236. ==== `[.contract-item-name]#++constructor++#++(uint256 cap_)++` [.item-kind]#internal#
  1237. Sets the value of the `cap`. This value is immutable, it can only be
  1238. set once during construction.
  1239. [.contract-item]
  1240. [[ERC20Capped-cap--]]
  1241. ==== `[.contract-item-name]#++cap++#++() → uint256++` [.item-kind]#public#
  1242. Returns the cap on the token's total supply.
  1243. [.contract-item]
  1244. [[ERC20Capped-_mint-address-uint256-]]
  1245. ==== `[.contract-item-name]#++_mint++#++(address account, uint256 amount)++` [.item-kind]#internal#
  1246. See {ERC20-_mint}.
  1247. :_beforeTokenTransfer: pass:normal[xref:#ERC20Pausable-_beforeTokenTransfer-address-address-uint256-[`++_beforeTokenTransfer++`]]
  1248. [.contract]
  1249. [[ERC20Pausable]]
  1250. === `++ERC20Pausable++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.9.5/contracts/token/ERC20/extensions/ERC20Pausable.sol[{github-icon},role=heading-link]
  1251. [.hljs-theme-light.nopadding]
  1252. ```solidity
  1253. import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Pausable.sol";
  1254. ```
  1255. ERC20 token with pausable token transfers, minting and burning.
  1256. Useful for scenarios such as preventing trades until the end of an evaluation
  1257. period, or having an emergency switch for freezing all token transfers in the
  1258. event of a large bug.
  1259. IMPORTANT: This contract does not include public pause and unpause functions. In
  1260. addition to inheriting this contract, you must define both functions, invoking the
  1261. {Pausable-_pause} and {Pausable-_unpause} internal functions, with appropriate
  1262. access control, e.g. using {AccessControl} or {Ownable}. Not doing so will
  1263. make the contract unpausable.
  1264. [.contract-index]
  1265. .Functions
  1266. --
  1267. * {xref-ERC20Pausable-_beforeTokenTransfer-address-address-uint256-}[`++_beforeTokenTransfer(from, to, amount)++`]
  1268. [.contract-subindex-inherited]
  1269. .Pausable
  1270. * {xref-Pausable-paused--}[`++paused()++`]
  1271. * {xref-Pausable-_requireNotPaused--}[`++_requireNotPaused()++`]
  1272. * {xref-Pausable-_requirePaused--}[`++_requirePaused()++`]
  1273. * {xref-Pausable-_pause--}[`++_pause()++`]
  1274. * {xref-Pausable-_unpause--}[`++_unpause()++`]
  1275. [.contract-subindex-inherited]
  1276. .ERC20
  1277. * {xref-ERC20-name--}[`++name()++`]
  1278. * {xref-ERC20-symbol--}[`++symbol()++`]
  1279. * {xref-ERC20-decimals--}[`++decimals()++`]
  1280. * {xref-ERC20-totalSupply--}[`++totalSupply()++`]
  1281. * {xref-ERC20-balanceOf-address-}[`++balanceOf(account)++`]
  1282. * {xref-ERC20-transfer-address-uint256-}[`++transfer(to, amount)++`]
  1283. * {xref-ERC20-allowance-address-address-}[`++allowance(owner, spender)++`]
  1284. * {xref-ERC20-approve-address-uint256-}[`++approve(spender, amount)++`]
  1285. * {xref-ERC20-transferFrom-address-address-uint256-}[`++transferFrom(from, to, amount)++`]
  1286. * {xref-ERC20-increaseAllowance-address-uint256-}[`++increaseAllowance(spender, addedValue)++`]
  1287. * {xref-ERC20-decreaseAllowance-address-uint256-}[`++decreaseAllowance(spender, subtractedValue)++`]
  1288. * {xref-ERC20-_transfer-address-address-uint256-}[`++_transfer(from, to, amount)++`]
  1289. * {xref-ERC20-_mint-address-uint256-}[`++_mint(account, amount)++`]
  1290. * {xref-ERC20-_burn-address-uint256-}[`++_burn(account, amount)++`]
  1291. * {xref-ERC20-_approve-address-address-uint256-}[`++_approve(owner, spender, amount)++`]
  1292. * {xref-ERC20-_spendAllowance-address-address-uint256-}[`++_spendAllowance(owner, spender, amount)++`]
  1293. * {xref-ERC20-_afterTokenTransfer-address-address-uint256-}[`++_afterTokenTransfer(from, to, amount)++`]
  1294. [.contract-subindex-inherited]
  1295. .IERC20Metadata
  1296. [.contract-subindex-inherited]
  1297. .IERC20
  1298. --
  1299. [.contract-index]
  1300. .Events
  1301. --
  1302. [.contract-subindex-inherited]
  1303. .Pausable
  1304. * {xref-Pausable-Paused-address-}[`++Paused(account)++`]
  1305. * {xref-Pausable-Unpaused-address-}[`++Unpaused(account)++`]
  1306. [.contract-subindex-inherited]
  1307. .ERC20
  1308. [.contract-subindex-inherited]
  1309. .IERC20Metadata
  1310. [.contract-subindex-inherited]
  1311. .IERC20
  1312. * {xref-IERC20-Transfer-address-address-uint256-}[`++Transfer(from, to, value)++`]
  1313. * {xref-IERC20-Approval-address-address-uint256-}[`++Approval(owner, spender, value)++`]
  1314. --
  1315. [.contract-item]
  1316. [[ERC20Pausable-_beforeTokenTransfer-address-address-uint256-]]
  1317. ==== `[.contract-item-name]#++_beforeTokenTransfer++#++(address from, address to, uint256 amount)++` [.item-kind]#internal#
  1318. See {ERC20-_beforeTokenTransfer}.
  1319. Requirements:
  1320. - the contract must not be paused.
  1321. :Snapshots: pass:normal[xref:#ERC20Snapshot-Snapshots[`++Snapshots++`]]
  1322. :Snapshot: pass:normal[xref:#ERC20Snapshot-Snapshot-uint256-[`++Snapshot++`]]
  1323. :_snapshot: pass:normal[xref:#ERC20Snapshot-_snapshot--[`++_snapshot++`]]
  1324. :_getCurrentSnapshotId: pass:normal[xref:#ERC20Snapshot-_getCurrentSnapshotId--[`++_getCurrentSnapshotId++`]]
  1325. :balanceOfAt: pass:normal[xref:#ERC20Snapshot-balanceOfAt-address-uint256-[`++balanceOfAt++`]]
  1326. :totalSupplyAt: pass:normal[xref:#ERC20Snapshot-totalSupplyAt-uint256-[`++totalSupplyAt++`]]
  1327. :_beforeTokenTransfer: pass:normal[xref:#ERC20Snapshot-_beforeTokenTransfer-address-address-uint256-[`++_beforeTokenTransfer++`]]
  1328. [.contract]
  1329. [[ERC20Snapshot]]
  1330. === `++ERC20Snapshot++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.9.5/contracts/token/ERC20/extensions/ERC20Snapshot.sol[{github-icon},role=heading-link]
  1331. [.hljs-theme-light.nopadding]
  1332. ```solidity
  1333. import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Snapshot.sol";
  1334. ```
  1335. This contract extends an ERC20 token with a snapshot mechanism. When a snapshot is created, the balances and
  1336. total supply at the time are recorded for later access.
  1337. This can be used to safely create mechanisms based on token balances such as trustless dividends or weighted voting.
  1338. In naive implementations it's possible to perform a "double spend" attack by reusing the same balance from different
  1339. accounts. By using snapshots to calculate dividends or voting power, those attacks no longer apply. It can also be
  1340. used to create an efficient ERC20 forking mechanism.
  1341. Snapshots are created by the internal {_snapshot} function, which will emit the {Snapshot} event and return a
  1342. snapshot id. To get the total supply at the time of a snapshot, call the function {totalSupplyAt} with the snapshot
  1343. id. To get the balance of an account at the time of a snapshot, call the {balanceOfAt} function with the snapshot id
  1344. and the account address.
  1345. NOTE: Snapshot policy can be customized by overriding the {_getCurrentSnapshotId} method. For example, having it
  1346. return `block.number` will trigger the creation of snapshot at the beginning of each new block. When overriding this
  1347. function, be careful about the monotonicity of its result. Non-monotonic snapshot ids will break the contract.
  1348. Implementing snapshots for every block using this method will incur significant gas costs. For a gas-efficient
  1349. alternative consider {ERC20Votes}.
  1350. ==== Gas Costs
  1351. Snapshots are efficient. Snapshot creation is _O(1)_. Retrieval of balances or total supply from a snapshot is _O(log
  1352. n)_ in the number of snapshots that have been created, although _n_ for a specific account will generally be much
  1353. smaller since identical balances in subsequent snapshots are stored as a single entry.
  1354. There is a constant overhead for normal ERC20 transfers due to the additional snapshot bookkeeping. This overhead is
  1355. only significant for the first transfer that immediately follows a snapshot for a particular account. Subsequent
  1356. transfers will have normal cost until the next snapshot, and so on.
  1357. [.contract-index]
  1358. .Functions
  1359. --
  1360. * {xref-ERC20Snapshot-_snapshot--}[`++_snapshot()++`]
  1361. * {xref-ERC20Snapshot-_getCurrentSnapshotId--}[`++_getCurrentSnapshotId()++`]
  1362. * {xref-ERC20Snapshot-balanceOfAt-address-uint256-}[`++balanceOfAt(account, snapshotId)++`]
  1363. * {xref-ERC20Snapshot-totalSupplyAt-uint256-}[`++totalSupplyAt(snapshotId)++`]
  1364. * {xref-ERC20Snapshot-_beforeTokenTransfer-address-address-uint256-}[`++_beforeTokenTransfer(from, to, amount)++`]
  1365. [.contract-subindex-inherited]
  1366. .ERC20
  1367. * {xref-ERC20-name--}[`++name()++`]
  1368. * {xref-ERC20-symbol--}[`++symbol()++`]
  1369. * {xref-ERC20-decimals--}[`++decimals()++`]
  1370. * {xref-ERC20-totalSupply--}[`++totalSupply()++`]
  1371. * {xref-ERC20-balanceOf-address-}[`++balanceOf(account)++`]
  1372. * {xref-ERC20-transfer-address-uint256-}[`++transfer(to, amount)++`]
  1373. * {xref-ERC20-allowance-address-address-}[`++allowance(owner, spender)++`]
  1374. * {xref-ERC20-approve-address-uint256-}[`++approve(spender, amount)++`]
  1375. * {xref-ERC20-transferFrom-address-address-uint256-}[`++transferFrom(from, to, amount)++`]
  1376. * {xref-ERC20-increaseAllowance-address-uint256-}[`++increaseAllowance(spender, addedValue)++`]
  1377. * {xref-ERC20-decreaseAllowance-address-uint256-}[`++decreaseAllowance(spender, subtractedValue)++`]
  1378. * {xref-ERC20-_transfer-address-address-uint256-}[`++_transfer(from, to, amount)++`]
  1379. * {xref-ERC20-_mint-address-uint256-}[`++_mint(account, amount)++`]
  1380. * {xref-ERC20-_burn-address-uint256-}[`++_burn(account, amount)++`]
  1381. * {xref-ERC20-_approve-address-address-uint256-}[`++_approve(owner, spender, amount)++`]
  1382. * {xref-ERC20-_spendAllowance-address-address-uint256-}[`++_spendAllowance(owner, spender, amount)++`]
  1383. * {xref-ERC20-_afterTokenTransfer-address-address-uint256-}[`++_afterTokenTransfer(from, to, amount)++`]
  1384. [.contract-subindex-inherited]
  1385. .IERC20Metadata
  1386. [.contract-subindex-inherited]
  1387. .IERC20
  1388. --
  1389. [.contract-index]
  1390. .Events
  1391. --
  1392. * {xref-ERC20Snapshot-Snapshot-uint256-}[`++Snapshot(id)++`]
  1393. [.contract-subindex-inherited]
  1394. .ERC20
  1395. [.contract-subindex-inherited]
  1396. .IERC20Metadata
  1397. [.contract-subindex-inherited]
  1398. .IERC20
  1399. * {xref-IERC20-Transfer-address-address-uint256-}[`++Transfer(from, to, value)++`]
  1400. * {xref-IERC20-Approval-address-address-uint256-}[`++Approval(owner, spender, value)++`]
  1401. --
  1402. [.contract-item]
  1403. [[ERC20Snapshot-_snapshot--]]
  1404. ==== `[.contract-item-name]#++_snapshot++#++() → uint256++` [.item-kind]#internal#
  1405. Creates a new snapshot and returns its snapshot id.
  1406. Emits a {Snapshot} event that contains the same id.
  1407. {_snapshot} is `internal` and you have to decide how to expose it externally. Its usage may be restricted to a
  1408. set of accounts, for example using {AccessControl}, or it may be open to the public.
  1409. [WARNING]
  1410. ====
  1411. While an open way of calling {_snapshot} is required for certain trust minimization mechanisms such as forking,
  1412. you must consider that it can potentially be used by attackers in two ways.
  1413. First, it can be used to increase the cost of retrieval of values from snapshots, although it will grow
  1414. logarithmically thus rendering this attack ineffective in the long term. Second, it can be used to target
  1415. specific accounts and increase the cost of ERC20 transfers for them, in the ways specified in the Gas Costs
  1416. section above.
  1417. We haven't measured the actual numbers; if this is something you're interested in please reach out to us.
  1418. ====
  1419. [.contract-item]
  1420. [[ERC20Snapshot-_getCurrentSnapshotId--]]
  1421. ==== `[.contract-item-name]#++_getCurrentSnapshotId++#++() → uint256++` [.item-kind]#internal#
  1422. Get the current snapshotId
  1423. [.contract-item]
  1424. [[ERC20Snapshot-balanceOfAt-address-uint256-]]
  1425. ==== `[.contract-item-name]#++balanceOfAt++#++(address account, uint256 snapshotId) → uint256++` [.item-kind]#public#
  1426. Retrieves the balance of `account` at the time `snapshotId` was created.
  1427. [.contract-item]
  1428. [[ERC20Snapshot-totalSupplyAt-uint256-]]
  1429. ==== `[.contract-item-name]#++totalSupplyAt++#++(uint256 snapshotId) → uint256++` [.item-kind]#public#
  1430. Retrieves the total supply at the time `snapshotId` was created.
  1431. [.contract-item]
  1432. [[ERC20Snapshot-_beforeTokenTransfer-address-address-uint256-]]
  1433. ==== `[.contract-item-name]#++_beforeTokenTransfer++#++(address from, address to, uint256 amount)++` [.item-kind]#internal#
  1434. Hook that is called before any transfer of tokens. This includes
  1435. minting and burning.
  1436. Calling conditions:
  1437. - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
  1438. will be transferred to `to`.
  1439. - when `from` is zero, `amount` tokens will be minted for `to`.
  1440. - when `to` is zero, `amount` of ``from``'s tokens will be burned.
  1441. - `from` and `to` are never both zero.
  1442. To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
  1443. [.contract-item]
  1444. [[ERC20Snapshot-Snapshot-uint256-]]
  1445. ==== `[.contract-item-name]#++Snapshot++#++(uint256 id)++` [.item-kind]#event#
  1446. Emitted by {_snapshot} when a snapshot identified by `id` is created.
  1447. :Checkpoint: pass:normal[xref:#ERC20Votes-Checkpoint[`++Checkpoint++`]]
  1448. :clock: pass:normal[xref:#ERC20Votes-clock--[`++clock++`]]
  1449. :CLOCK_MODE: pass:normal[xref:#ERC20Votes-CLOCK_MODE--[`++CLOCK_MODE++`]]
  1450. :checkpoints: pass:normal[xref:#ERC20Votes-checkpoints-address-uint32-[`++checkpoints++`]]
  1451. :numCheckpoints: pass:normal[xref:#ERC20Votes-numCheckpoints-address-[`++numCheckpoints++`]]
  1452. :delegates: pass:normal[xref:#ERC20Votes-delegates-address-[`++delegates++`]]
  1453. :getVotes: pass:normal[xref:#ERC20Votes-getVotes-address-[`++getVotes++`]]
  1454. :getPastVotes: pass:normal[xref:#ERC20Votes-getPastVotes-address-uint256-[`++getPastVotes++`]]
  1455. :getPastTotalSupply: pass:normal[xref:#ERC20Votes-getPastTotalSupply-uint256-[`++getPastTotalSupply++`]]
  1456. :delegate: pass:normal[xref:#ERC20Votes-delegate-address-[`++delegate++`]]
  1457. :delegateBySig: pass:normal[xref:#ERC20Votes-delegateBySig-address-uint256-uint256-uint8-bytes32-bytes32-[`++delegateBySig++`]]
  1458. :_maxSupply: pass:normal[xref:#ERC20Votes-_maxSupply--[`++_maxSupply++`]]
  1459. :_mint: pass:normal[xref:#ERC20Votes-_mint-address-uint256-[`++_mint++`]]
  1460. :_burn: pass:normal[xref:#ERC20Votes-_burn-address-uint256-[`++_burn++`]]
  1461. :_afterTokenTransfer: pass:normal[xref:#ERC20Votes-_afterTokenTransfer-address-address-uint256-[`++_afterTokenTransfer++`]]
  1462. :_delegate: pass:normal[xref:#ERC20Votes-_delegate-address-address-[`++_delegate++`]]
  1463. [.contract]
  1464. [[ERC20Votes]]
  1465. === `++ERC20Votes++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.9.5/contracts/token/ERC20/extensions/ERC20Votes.sol[{github-icon},role=heading-link]
  1466. [.hljs-theme-light.nopadding]
  1467. ```solidity
  1468. import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol";
  1469. ```
  1470. Extension of ERC20 to support Compound-like voting and delegation. This version is more generic than Compound's,
  1471. and supports token supply up to 2^224^ - 1, while COMP is limited to 2^96^ - 1.
  1472. NOTE: If exact COMP compatibility is required, use the {ERC20VotesComp} variant of this module.
  1473. This extension keeps a history (checkpoints) of each account's vote power. Vote power can be delegated either
  1474. by calling the {delegate} function directly, or by providing a signature to be used with {delegateBySig}. Voting
  1475. power can be queried through the public accessors {getVotes} and {getPastVotes}.
  1476. By default, token balance does not account for voting power. This makes transfers cheaper. The downside is that it
  1477. requires users to delegate to themselves in order to activate checkpoints and have their voting power tracked.
  1478. _Available since v4.2._
  1479. [.contract-index]
  1480. .Functions
  1481. --
  1482. * {xref-ERC20Votes-clock--}[`++clock()++`]
  1483. * {xref-ERC20Votes-CLOCK_MODE--}[`++CLOCK_MODE()++`]
  1484. * {xref-ERC20Votes-checkpoints-address-uint32-}[`++checkpoints(account, pos)++`]
  1485. * {xref-ERC20Votes-numCheckpoints-address-}[`++numCheckpoints(account)++`]
  1486. * {xref-ERC20Votes-delegates-address-}[`++delegates(account)++`]
  1487. * {xref-ERC20Votes-getVotes-address-}[`++getVotes(account)++`]
  1488. * {xref-ERC20Votes-getPastVotes-address-uint256-}[`++getPastVotes(account, timepoint)++`]
  1489. * {xref-ERC20Votes-getPastTotalSupply-uint256-}[`++getPastTotalSupply(timepoint)++`]
  1490. * {xref-ERC20Votes-delegate-address-}[`++delegate(delegatee)++`]
  1491. * {xref-ERC20Votes-delegateBySig-address-uint256-uint256-uint8-bytes32-bytes32-}[`++delegateBySig(delegatee, nonce, expiry, v, r, s)++`]
  1492. * {xref-ERC20Votes-_maxSupply--}[`++_maxSupply()++`]
  1493. * {xref-ERC20Votes-_mint-address-uint256-}[`++_mint(account, amount)++`]
  1494. * {xref-ERC20Votes-_burn-address-uint256-}[`++_burn(account, amount)++`]
  1495. * {xref-ERC20Votes-_afterTokenTransfer-address-address-uint256-}[`++_afterTokenTransfer(from, to, amount)++`]
  1496. * {xref-ERC20Votes-_delegate-address-address-}[`++_delegate(delegator, delegatee)++`]
  1497. [.contract-subindex-inherited]
  1498. .IERC5805
  1499. [.contract-subindex-inherited]
  1500. .IVotes
  1501. [.contract-subindex-inherited]
  1502. .IERC6372
  1503. [.contract-subindex-inherited]
  1504. .ERC20Permit
  1505. * {xref-ERC20Permit-permit-address-address-uint256-uint256-uint8-bytes32-bytes32-}[`++permit(owner, spender, value, deadline, v, r, s)++`]
  1506. * {xref-ERC20Permit-nonces-address-}[`++nonces(owner)++`]
  1507. * {xref-ERC20Permit-DOMAIN_SEPARATOR--}[`++DOMAIN_SEPARATOR()++`]
  1508. * {xref-ERC20Permit-_useNonce-address-}[`++_useNonce(owner)++`]
  1509. [.contract-subindex-inherited]
  1510. .EIP712
  1511. * {xref-EIP712-_domainSeparatorV4--}[`++_domainSeparatorV4()++`]
  1512. * {xref-EIP712-_hashTypedDataV4-bytes32-}[`++_hashTypedDataV4(structHash)++`]
  1513. * {xref-EIP712-eip712Domain--}[`++eip712Domain()++`]
  1514. [.contract-subindex-inherited]
  1515. .IERC5267
  1516. [.contract-subindex-inherited]
  1517. .IERC20Permit
  1518. [.contract-subindex-inherited]
  1519. .ERC20
  1520. * {xref-ERC20-name--}[`++name()++`]
  1521. * {xref-ERC20-symbol--}[`++symbol()++`]
  1522. * {xref-ERC20-decimals--}[`++decimals()++`]
  1523. * {xref-ERC20-totalSupply--}[`++totalSupply()++`]
  1524. * {xref-ERC20-balanceOf-address-}[`++balanceOf(account)++`]
  1525. * {xref-ERC20-transfer-address-uint256-}[`++transfer(to, amount)++`]
  1526. * {xref-ERC20-allowance-address-address-}[`++allowance(owner, spender)++`]
  1527. * {xref-ERC20-approve-address-uint256-}[`++approve(spender, amount)++`]
  1528. * {xref-ERC20-transferFrom-address-address-uint256-}[`++transferFrom(from, to, amount)++`]
  1529. * {xref-ERC20-increaseAllowance-address-uint256-}[`++increaseAllowance(spender, addedValue)++`]
  1530. * {xref-ERC20-decreaseAllowance-address-uint256-}[`++decreaseAllowance(spender, subtractedValue)++`]
  1531. * {xref-ERC20-_transfer-address-address-uint256-}[`++_transfer(from, to, amount)++`]
  1532. * {xref-ERC20-_approve-address-address-uint256-}[`++_approve(owner, spender, amount)++`]
  1533. * {xref-ERC20-_spendAllowance-address-address-uint256-}[`++_spendAllowance(owner, spender, amount)++`]
  1534. * {xref-ERC20-_beforeTokenTransfer-address-address-uint256-}[`++_beforeTokenTransfer(from, to, amount)++`]
  1535. [.contract-subindex-inherited]
  1536. .IERC20Metadata
  1537. [.contract-subindex-inherited]
  1538. .IERC20
  1539. --
  1540. [.contract-index]
  1541. .Events
  1542. --
  1543. [.contract-subindex-inherited]
  1544. .IERC5805
  1545. [.contract-subindex-inherited]
  1546. .IVotes
  1547. * {xref-IVotes-DelegateChanged-address-address-address-}[`++DelegateChanged(delegator, fromDelegate, toDelegate)++`]
  1548. * {xref-IVotes-DelegateVotesChanged-address-uint256-uint256-}[`++DelegateVotesChanged(delegate, previousBalance, newBalance)++`]
  1549. [.contract-subindex-inherited]
  1550. .IERC6372
  1551. [.contract-subindex-inherited]
  1552. .ERC20Permit
  1553. [.contract-subindex-inherited]
  1554. .EIP712
  1555. [.contract-subindex-inherited]
  1556. .IERC5267
  1557. * {xref-IERC5267-EIP712DomainChanged--}[`++EIP712DomainChanged()++`]
  1558. [.contract-subindex-inherited]
  1559. .IERC20Permit
  1560. [.contract-subindex-inherited]
  1561. .ERC20
  1562. [.contract-subindex-inherited]
  1563. .IERC20Metadata
  1564. [.contract-subindex-inherited]
  1565. .IERC20
  1566. * {xref-IERC20-Transfer-address-address-uint256-}[`++Transfer(from, to, value)++`]
  1567. * {xref-IERC20-Approval-address-address-uint256-}[`++Approval(owner, spender, value)++`]
  1568. --
  1569. [.contract-item]
  1570. [[ERC20Votes-clock--]]
  1571. ==== `[.contract-item-name]#++clock++#++() → uint48++` [.item-kind]#public#
  1572. Clock used for flagging checkpoints. Can be overridden to implement timestamp based checkpoints (and voting).
  1573. [.contract-item]
  1574. [[ERC20Votes-CLOCK_MODE--]]
  1575. ==== `[.contract-item-name]#++CLOCK_MODE++#++() → string++` [.item-kind]#public#
  1576. Description of the clock
  1577. [.contract-item]
  1578. [[ERC20Votes-checkpoints-address-uint32-]]
  1579. ==== `[.contract-item-name]#++checkpoints++#++(address account, uint32 pos) → struct ERC20Votes.Checkpoint++` [.item-kind]#public#
  1580. Get the `pos`-th checkpoint for `account`.
  1581. [.contract-item]
  1582. [[ERC20Votes-numCheckpoints-address-]]
  1583. ==== `[.contract-item-name]#++numCheckpoints++#++(address account) → uint32++` [.item-kind]#public#
  1584. Get number of checkpoints for `account`.
  1585. [.contract-item]
  1586. [[ERC20Votes-delegates-address-]]
  1587. ==== `[.contract-item-name]#++delegates++#++(address account) → address++` [.item-kind]#public#
  1588. Get the address `account` is currently delegating to.
  1589. [.contract-item]
  1590. [[ERC20Votes-getVotes-address-]]
  1591. ==== `[.contract-item-name]#++getVotes++#++(address account) → uint256++` [.item-kind]#public#
  1592. Gets the current votes balance for `account`
  1593. [.contract-item]
  1594. [[ERC20Votes-getPastVotes-address-uint256-]]
  1595. ==== `[.contract-item-name]#++getPastVotes++#++(address account, uint256 timepoint) → uint256++` [.item-kind]#public#
  1596. Retrieve the number of votes for `account` at the end of `timepoint`.
  1597. Requirements:
  1598. - `timepoint` must be in the past
  1599. [.contract-item]
  1600. [[ERC20Votes-getPastTotalSupply-uint256-]]
  1601. ==== `[.contract-item-name]#++getPastTotalSupply++#++(uint256 timepoint) → uint256++` [.item-kind]#public#
  1602. Retrieve the `totalSupply` at the end of `timepoint`. Note, this value is the sum of all balances.
  1603. It is NOT the sum of all the delegated votes!
  1604. Requirements:
  1605. - `timepoint` must be in the past
  1606. [.contract-item]
  1607. [[ERC20Votes-delegate-address-]]
  1608. ==== `[.contract-item-name]#++delegate++#++(address delegatee)++` [.item-kind]#public#
  1609. Delegate votes from the sender to `delegatee`.
  1610. [.contract-item]
  1611. [[ERC20Votes-delegateBySig-address-uint256-uint256-uint8-bytes32-bytes32-]]
  1612. ==== `[.contract-item-name]#++delegateBySig++#++(address delegatee, uint256 nonce, uint256 expiry, uint8 v, bytes32 r, bytes32 s)++` [.item-kind]#public#
  1613. Delegates votes from signer to `delegatee`
  1614. [.contract-item]
  1615. [[ERC20Votes-_maxSupply--]]
  1616. ==== `[.contract-item-name]#++_maxSupply++#++() → uint224++` [.item-kind]#internal#
  1617. Maximum token supply. Defaults to `type(uint224).max` (2^224^ - 1).
  1618. [.contract-item]
  1619. [[ERC20Votes-_mint-address-uint256-]]
  1620. ==== `[.contract-item-name]#++_mint++#++(address account, uint256 amount)++` [.item-kind]#internal#
  1621. Snapshots the totalSupply after it has been increased.
  1622. [.contract-item]
  1623. [[ERC20Votes-_burn-address-uint256-]]
  1624. ==== `[.contract-item-name]#++_burn++#++(address account, uint256 amount)++` [.item-kind]#internal#
  1625. Snapshots the totalSupply after it has been decreased.
  1626. [.contract-item]
  1627. [[ERC20Votes-_afterTokenTransfer-address-address-uint256-]]
  1628. ==== `[.contract-item-name]#++_afterTokenTransfer++#++(address from, address to, uint256 amount)++` [.item-kind]#internal#
  1629. Move voting power when tokens are transferred.
  1630. Emits a {IVotes-DelegateVotesChanged} event.
  1631. [.contract-item]
  1632. [[ERC20Votes-_delegate-address-address-]]
  1633. ==== `[.contract-item-name]#++_delegate++#++(address delegator, address delegatee)++` [.item-kind]#internal#
  1634. Change delegation for `delegator` to `delegatee`.
  1635. Emits events {IVotes-DelegateChanged} and {IVotes-DelegateVotesChanged}.
  1636. :getCurrentVotes: pass:normal[xref:#ERC20VotesComp-getCurrentVotes-address-[`++getCurrentVotes++`]]
  1637. :getPriorVotes: pass:normal[xref:#ERC20VotesComp-getPriorVotes-address-uint256-[`++getPriorVotes++`]]
  1638. :_maxSupply: pass:normal[xref:#ERC20VotesComp-_maxSupply--[`++_maxSupply++`]]
  1639. [.contract]
  1640. [[ERC20VotesComp]]
  1641. === `++ERC20VotesComp++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.9.5/contracts/token/ERC20/extensions/ERC20VotesComp.sol[{github-icon},role=heading-link]
  1642. [.hljs-theme-light.nopadding]
  1643. ```solidity
  1644. import "@openzeppelin/contracts/token/ERC20/extensions/ERC20VotesComp.sol";
  1645. ```
  1646. Extension of ERC20 to support Compound's voting and delegation. This version exactly matches Compound's
  1647. interface, with the drawback of only supporting supply up to (2^96^ - 1).
  1648. NOTE: You should use this contract if you need exact compatibility with COMP (for example in order to use your token
  1649. with Governor Alpha or Bravo) and if you are sure the supply cap of 2^96^ is enough for you. Otherwise, use the
  1650. {ERC20Votes} variant of this module.
  1651. This extension keeps a history (checkpoints) of each account's vote power. Vote power can be delegated either
  1652. by calling the {delegate} function directly, or by providing a signature to be used with {delegateBySig}. Voting
  1653. power can be queried through the public accessors {getCurrentVotes} and {getPriorVotes}.
  1654. By default, token balance does not account for voting power. This makes transfers cheaper. The downside is that it
  1655. requires users to delegate to themselves in order to activate checkpoints and have their voting power tracked.
  1656. _Available since v4.2._
  1657. [.contract-index]
  1658. .Functions
  1659. --
  1660. * {xref-ERC20VotesComp-getCurrentVotes-address-}[`++getCurrentVotes(account)++`]
  1661. * {xref-ERC20VotesComp-getPriorVotes-address-uint256-}[`++getPriorVotes(account, blockNumber)++`]
  1662. * {xref-ERC20VotesComp-_maxSupply--}[`++_maxSupply()++`]
  1663. [.contract-subindex-inherited]
  1664. .ERC20Votes
  1665. * {xref-ERC20Votes-clock--}[`++clock()++`]
  1666. * {xref-ERC20Votes-CLOCK_MODE--}[`++CLOCK_MODE()++`]
  1667. * {xref-ERC20Votes-checkpoints-address-uint32-}[`++checkpoints(account, pos)++`]
  1668. * {xref-ERC20Votes-numCheckpoints-address-}[`++numCheckpoints(account)++`]
  1669. * {xref-ERC20Votes-delegates-address-}[`++delegates(account)++`]
  1670. * {xref-ERC20Votes-getVotes-address-}[`++getVotes(account)++`]
  1671. * {xref-ERC20Votes-getPastVotes-address-uint256-}[`++getPastVotes(account, timepoint)++`]
  1672. * {xref-ERC20Votes-getPastTotalSupply-uint256-}[`++getPastTotalSupply(timepoint)++`]
  1673. * {xref-ERC20Votes-delegate-address-}[`++delegate(delegatee)++`]
  1674. * {xref-ERC20Votes-delegateBySig-address-uint256-uint256-uint8-bytes32-bytes32-}[`++delegateBySig(delegatee, nonce, expiry, v, r, s)++`]
  1675. * {xref-ERC20Votes-_mint-address-uint256-}[`++_mint(account, amount)++`]
  1676. * {xref-ERC20Votes-_burn-address-uint256-}[`++_burn(account, amount)++`]
  1677. * {xref-ERC20Votes-_afterTokenTransfer-address-address-uint256-}[`++_afterTokenTransfer(from, to, amount)++`]
  1678. * {xref-ERC20Votes-_delegate-address-address-}[`++_delegate(delegator, delegatee)++`]
  1679. [.contract-subindex-inherited]
  1680. .IERC5805
  1681. [.contract-subindex-inherited]
  1682. .IVotes
  1683. [.contract-subindex-inherited]
  1684. .IERC6372
  1685. [.contract-subindex-inherited]
  1686. .ERC20Permit
  1687. * {xref-ERC20Permit-permit-address-address-uint256-uint256-uint8-bytes32-bytes32-}[`++permit(owner, spender, value, deadline, v, r, s)++`]
  1688. * {xref-ERC20Permit-nonces-address-}[`++nonces(owner)++`]
  1689. * {xref-ERC20Permit-DOMAIN_SEPARATOR--}[`++DOMAIN_SEPARATOR()++`]
  1690. * {xref-ERC20Permit-_useNonce-address-}[`++_useNonce(owner)++`]
  1691. [.contract-subindex-inherited]
  1692. .EIP712
  1693. * {xref-EIP712-_domainSeparatorV4--}[`++_domainSeparatorV4()++`]
  1694. * {xref-EIP712-_hashTypedDataV4-bytes32-}[`++_hashTypedDataV4(structHash)++`]
  1695. * {xref-EIP712-eip712Domain--}[`++eip712Domain()++`]
  1696. [.contract-subindex-inherited]
  1697. .IERC5267
  1698. [.contract-subindex-inherited]
  1699. .IERC20Permit
  1700. [.contract-subindex-inherited]
  1701. .ERC20
  1702. * {xref-ERC20-name--}[`++name()++`]
  1703. * {xref-ERC20-symbol--}[`++symbol()++`]
  1704. * {xref-ERC20-decimals--}[`++decimals()++`]
  1705. * {xref-ERC20-totalSupply--}[`++totalSupply()++`]
  1706. * {xref-ERC20-balanceOf-address-}[`++balanceOf(account)++`]
  1707. * {xref-ERC20-transfer-address-uint256-}[`++transfer(to, amount)++`]
  1708. * {xref-ERC20-allowance-address-address-}[`++allowance(owner, spender)++`]
  1709. * {xref-ERC20-approve-address-uint256-}[`++approve(spender, amount)++`]
  1710. * {xref-ERC20-transferFrom-address-address-uint256-}[`++transferFrom(from, to, amount)++`]
  1711. * {xref-ERC20-increaseAllowance-address-uint256-}[`++increaseAllowance(spender, addedValue)++`]
  1712. * {xref-ERC20-decreaseAllowance-address-uint256-}[`++decreaseAllowance(spender, subtractedValue)++`]
  1713. * {xref-ERC20-_transfer-address-address-uint256-}[`++_transfer(from, to, amount)++`]
  1714. * {xref-ERC20-_approve-address-address-uint256-}[`++_approve(owner, spender, amount)++`]
  1715. * {xref-ERC20-_spendAllowance-address-address-uint256-}[`++_spendAllowance(owner, spender, amount)++`]
  1716. * {xref-ERC20-_beforeTokenTransfer-address-address-uint256-}[`++_beforeTokenTransfer(from, to, amount)++`]
  1717. [.contract-subindex-inherited]
  1718. .IERC20Metadata
  1719. [.contract-subindex-inherited]
  1720. .IERC20
  1721. --
  1722. [.contract-index]
  1723. .Events
  1724. --
  1725. [.contract-subindex-inherited]
  1726. .ERC20Votes
  1727. [.contract-subindex-inherited]
  1728. .IERC5805
  1729. [.contract-subindex-inherited]
  1730. .IVotes
  1731. * {xref-IVotes-DelegateChanged-address-address-address-}[`++DelegateChanged(delegator, fromDelegate, toDelegate)++`]
  1732. * {xref-IVotes-DelegateVotesChanged-address-uint256-uint256-}[`++DelegateVotesChanged(delegate, previousBalance, newBalance)++`]
  1733. [.contract-subindex-inherited]
  1734. .IERC6372
  1735. [.contract-subindex-inherited]
  1736. .ERC20Permit
  1737. [.contract-subindex-inherited]
  1738. .EIP712
  1739. [.contract-subindex-inherited]
  1740. .IERC5267
  1741. * {xref-IERC5267-EIP712DomainChanged--}[`++EIP712DomainChanged()++`]
  1742. [.contract-subindex-inherited]
  1743. .IERC20Permit
  1744. [.contract-subindex-inherited]
  1745. .ERC20
  1746. [.contract-subindex-inherited]
  1747. .IERC20Metadata
  1748. [.contract-subindex-inherited]
  1749. .IERC20
  1750. * {xref-IERC20-Transfer-address-address-uint256-}[`++Transfer(from, to, value)++`]
  1751. * {xref-IERC20-Approval-address-address-uint256-}[`++Approval(owner, spender, value)++`]
  1752. --
  1753. [.contract-item]
  1754. [[ERC20VotesComp-getCurrentVotes-address-]]
  1755. ==== `[.contract-item-name]#++getCurrentVotes++#++(address account) → uint96++` [.item-kind]#external#
  1756. Comp version of the {getVotes} accessor, with `uint96` return type.
  1757. [.contract-item]
  1758. [[ERC20VotesComp-getPriorVotes-address-uint256-]]
  1759. ==== `[.contract-item-name]#++getPriorVotes++#++(address account, uint256 blockNumber) → uint96++` [.item-kind]#external#
  1760. Comp version of the {getPastVotes} accessor, with `uint96` return type.
  1761. [.contract-item]
  1762. [[ERC20VotesComp-_maxSupply--]]
  1763. ==== `[.contract-item-name]#++_maxSupply++#++() → uint224++` [.item-kind]#internal#
  1764. Maximum token supply. Reduced to `type(uint96).max` (2^96^ - 1) to fit COMP interface.
  1765. :constructor: pass:normal[xref:#ERC20Wrapper-constructor-contract-IERC20-[`++constructor++`]]
  1766. :decimals: pass:normal[xref:#ERC20Wrapper-decimals--[`++decimals++`]]
  1767. :underlying: pass:normal[xref:#ERC20Wrapper-underlying--[`++underlying++`]]
  1768. :depositFor: pass:normal[xref:#ERC20Wrapper-depositFor-address-uint256-[`++depositFor++`]]
  1769. :withdrawTo: pass:normal[xref:#ERC20Wrapper-withdrawTo-address-uint256-[`++withdrawTo++`]]
  1770. :_recover: pass:normal[xref:#ERC20Wrapper-_recover-address-[`++_recover++`]]
  1771. [.contract]
  1772. [[ERC20Wrapper]]
  1773. === `++ERC20Wrapper++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.9.5/contracts/token/ERC20/extensions/ERC20Wrapper.sol[{github-icon},role=heading-link]
  1774. [.hljs-theme-light.nopadding]
  1775. ```solidity
  1776. import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Wrapper.sol";
  1777. ```
  1778. Extension of the ERC20 token contract to support token wrapping.
  1779. Users can deposit and withdraw "underlying tokens" and receive a matching number of "wrapped tokens". This is useful
  1780. in conjunction with other modules. For example, combining this wrapping mechanism with {ERC20Votes} will allow the
  1781. wrapping of an existing "basic" ERC20 into a governance token.
  1782. _Available since v4.2._
  1783. [.contract-index]
  1784. .Functions
  1785. --
  1786. * {xref-ERC20Wrapper-constructor-contract-IERC20-}[`++constructor(underlyingToken)++`]
  1787. * {xref-ERC20Wrapper-decimals--}[`++decimals()++`]
  1788. * {xref-ERC20Wrapper-underlying--}[`++underlying()++`]
  1789. * {xref-ERC20Wrapper-depositFor-address-uint256-}[`++depositFor(account, amount)++`]
  1790. * {xref-ERC20Wrapper-withdrawTo-address-uint256-}[`++withdrawTo(account, amount)++`]
  1791. * {xref-ERC20Wrapper-_recover-address-}[`++_recover(account)++`]
  1792. [.contract-subindex-inherited]
  1793. .ERC20
  1794. * {xref-ERC20-name--}[`++name()++`]
  1795. * {xref-ERC20-symbol--}[`++symbol()++`]
  1796. * {xref-ERC20-totalSupply--}[`++totalSupply()++`]
  1797. * {xref-ERC20-balanceOf-address-}[`++balanceOf(account)++`]
  1798. * {xref-ERC20-transfer-address-uint256-}[`++transfer(to, amount)++`]
  1799. * {xref-ERC20-allowance-address-address-}[`++allowance(owner, spender)++`]
  1800. * {xref-ERC20-approve-address-uint256-}[`++approve(spender, amount)++`]
  1801. * {xref-ERC20-transferFrom-address-address-uint256-}[`++transferFrom(from, to, amount)++`]
  1802. * {xref-ERC20-increaseAllowance-address-uint256-}[`++increaseAllowance(spender, addedValue)++`]
  1803. * {xref-ERC20-decreaseAllowance-address-uint256-}[`++decreaseAllowance(spender, subtractedValue)++`]
  1804. * {xref-ERC20-_transfer-address-address-uint256-}[`++_transfer(from, to, amount)++`]
  1805. * {xref-ERC20-_mint-address-uint256-}[`++_mint(account, amount)++`]
  1806. * {xref-ERC20-_burn-address-uint256-}[`++_burn(account, amount)++`]
  1807. * {xref-ERC20-_approve-address-address-uint256-}[`++_approve(owner, spender, amount)++`]
  1808. * {xref-ERC20-_spendAllowance-address-address-uint256-}[`++_spendAllowance(owner, spender, amount)++`]
  1809. * {xref-ERC20-_beforeTokenTransfer-address-address-uint256-}[`++_beforeTokenTransfer(from, to, amount)++`]
  1810. * {xref-ERC20-_afterTokenTransfer-address-address-uint256-}[`++_afterTokenTransfer(from, to, amount)++`]
  1811. [.contract-subindex-inherited]
  1812. .IERC20Metadata
  1813. [.contract-subindex-inherited]
  1814. .IERC20
  1815. --
  1816. [.contract-index]
  1817. .Events
  1818. --
  1819. [.contract-subindex-inherited]
  1820. .ERC20
  1821. [.contract-subindex-inherited]
  1822. .IERC20Metadata
  1823. [.contract-subindex-inherited]
  1824. .IERC20
  1825. * {xref-IERC20-Transfer-address-address-uint256-}[`++Transfer(from, to, value)++`]
  1826. * {xref-IERC20-Approval-address-address-uint256-}[`++Approval(owner, spender, value)++`]
  1827. --
  1828. [.contract-item]
  1829. [[ERC20Wrapper-constructor-contract-IERC20-]]
  1830. ==== `[.contract-item-name]#++constructor++#++(contract IERC20 underlyingToken)++` [.item-kind]#internal#
  1831. [.contract-item]
  1832. [[ERC20Wrapper-decimals--]]
  1833. ==== `[.contract-item-name]#++decimals++#++() → uint8++` [.item-kind]#public#
  1834. See {ERC20-decimals}.
  1835. [.contract-item]
  1836. [[ERC20Wrapper-underlying--]]
  1837. ==== `[.contract-item-name]#++underlying++#++() → contract IERC20++` [.item-kind]#public#
  1838. Returns the address of the underlying ERC-20 token that is being wrapped.
  1839. [.contract-item]
  1840. [[ERC20Wrapper-depositFor-address-uint256-]]
  1841. ==== `[.contract-item-name]#++depositFor++#++(address account, uint256 amount) → bool++` [.item-kind]#public#
  1842. Allow a user to deposit underlying tokens and mint the corresponding number of wrapped tokens.
  1843. [.contract-item]
  1844. [[ERC20Wrapper-withdrawTo-address-uint256-]]
  1845. ==== `[.contract-item-name]#++withdrawTo++#++(address account, uint256 amount) → bool++` [.item-kind]#public#
  1846. Allow a user to burn a number of wrapped tokens and withdraw the corresponding number of underlying tokens.
  1847. [.contract-item]
  1848. [[ERC20Wrapper-_recover-address-]]
  1849. ==== `[.contract-item-name]#++_recover++#++(address account) → uint256++` [.item-kind]#internal#
  1850. Mint wrapped token to cover any underlyingTokens that would have been transferred by mistake. Internal
  1851. function that can be exposed with access control if desired.
  1852. :maxFlashLoan: pass:normal[xref:#ERC20FlashMint-maxFlashLoan-address-[`++maxFlashLoan++`]]
  1853. :flashFee: pass:normal[xref:#ERC20FlashMint-flashFee-address-uint256-[`++flashFee++`]]
  1854. :_flashFee: pass:normal[xref:#ERC20FlashMint-_flashFee-address-uint256-[`++_flashFee++`]]
  1855. :_flashFeeReceiver: pass:normal[xref:#ERC20FlashMint-_flashFeeReceiver--[`++_flashFeeReceiver++`]]
  1856. :flashLoan: pass:normal[xref:#ERC20FlashMint-flashLoan-contract-IERC3156FlashBorrower-address-uint256-bytes-[`++flashLoan++`]]
  1857. [.contract]
  1858. [[ERC20FlashMint]]
  1859. === `++ERC20FlashMint++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.9.5/contracts/token/ERC20/extensions/ERC20FlashMint.sol[{github-icon},role=heading-link]
  1860. [.hljs-theme-light.nopadding]
  1861. ```solidity
  1862. import "@openzeppelin/contracts/token/ERC20/extensions/ERC20FlashMint.sol";
  1863. ```
  1864. Implementation of the ERC3156 Flash loans extension, as defined in
  1865. https://eips.ethereum.org/EIPS/eip-3156[ERC-3156].
  1866. Adds the {flashLoan} method, which provides flash loan support at the token
  1867. level. By default there is no fee, but this can be changed by overriding {flashFee}.
  1868. _Available since v4.1._
  1869. [.contract-index]
  1870. .Functions
  1871. --
  1872. * {xref-ERC20FlashMint-maxFlashLoan-address-}[`++maxFlashLoan(token)++`]
  1873. * {xref-ERC20FlashMint-flashFee-address-uint256-}[`++flashFee(token, amount)++`]
  1874. * {xref-ERC20FlashMint-_flashFee-address-uint256-}[`++_flashFee(token, amount)++`]
  1875. * {xref-ERC20FlashMint-_flashFeeReceiver--}[`++_flashFeeReceiver()++`]
  1876. * {xref-ERC20FlashMint-flashLoan-contract-IERC3156FlashBorrower-address-uint256-bytes-}[`++flashLoan(receiver, token, amount, data)++`]
  1877. [.contract-subindex-inherited]
  1878. .IERC3156FlashLender
  1879. [.contract-subindex-inherited]
  1880. .ERC20
  1881. * {xref-ERC20-name--}[`++name()++`]
  1882. * {xref-ERC20-symbol--}[`++symbol()++`]
  1883. * {xref-ERC20-decimals--}[`++decimals()++`]
  1884. * {xref-ERC20-totalSupply--}[`++totalSupply()++`]
  1885. * {xref-ERC20-balanceOf-address-}[`++balanceOf(account)++`]
  1886. * {xref-ERC20-transfer-address-uint256-}[`++transfer(to, amount)++`]
  1887. * {xref-ERC20-allowance-address-address-}[`++allowance(owner, spender)++`]
  1888. * {xref-ERC20-approve-address-uint256-}[`++approve(spender, amount)++`]
  1889. * {xref-ERC20-transferFrom-address-address-uint256-}[`++transferFrom(from, to, amount)++`]
  1890. * {xref-ERC20-increaseAllowance-address-uint256-}[`++increaseAllowance(spender, addedValue)++`]
  1891. * {xref-ERC20-decreaseAllowance-address-uint256-}[`++decreaseAllowance(spender, subtractedValue)++`]
  1892. * {xref-ERC20-_transfer-address-address-uint256-}[`++_transfer(from, to, amount)++`]
  1893. * {xref-ERC20-_mint-address-uint256-}[`++_mint(account, amount)++`]
  1894. * {xref-ERC20-_burn-address-uint256-}[`++_burn(account, amount)++`]
  1895. * {xref-ERC20-_approve-address-address-uint256-}[`++_approve(owner, spender, amount)++`]
  1896. * {xref-ERC20-_spendAllowance-address-address-uint256-}[`++_spendAllowance(owner, spender, amount)++`]
  1897. * {xref-ERC20-_beforeTokenTransfer-address-address-uint256-}[`++_beforeTokenTransfer(from, to, amount)++`]
  1898. * {xref-ERC20-_afterTokenTransfer-address-address-uint256-}[`++_afterTokenTransfer(from, to, amount)++`]
  1899. [.contract-subindex-inherited]
  1900. .IERC20Metadata
  1901. [.contract-subindex-inherited]
  1902. .IERC20
  1903. --
  1904. [.contract-index]
  1905. .Events
  1906. --
  1907. [.contract-subindex-inherited]
  1908. .IERC3156FlashLender
  1909. [.contract-subindex-inherited]
  1910. .ERC20
  1911. [.contract-subindex-inherited]
  1912. .IERC20Metadata
  1913. [.contract-subindex-inherited]
  1914. .IERC20
  1915. * {xref-IERC20-Transfer-address-address-uint256-}[`++Transfer(from, to, value)++`]
  1916. * {xref-IERC20-Approval-address-address-uint256-}[`++Approval(owner, spender, value)++`]
  1917. --
  1918. [.contract-item]
  1919. [[ERC20FlashMint-maxFlashLoan-address-]]
  1920. ==== `[.contract-item-name]#++maxFlashLoan++#++(address token) → uint256++` [.item-kind]#public#
  1921. Returns the maximum amount of tokens available for loan.
  1922. [.contract-item]
  1923. [[ERC20FlashMint-flashFee-address-uint256-]]
  1924. ==== `[.contract-item-name]#++flashFee++#++(address token, uint256 amount) → uint256++` [.item-kind]#public#
  1925. Returns the fee applied when doing flash loans. This function calls
  1926. the {_flashFee} function which returns the fee applied when doing flash
  1927. loans.
  1928. [.contract-item]
  1929. [[ERC20FlashMint-_flashFee-address-uint256-]]
  1930. ==== `[.contract-item-name]#++_flashFee++#++(address token, uint256 amount) → uint256++` [.item-kind]#internal#
  1931. Returns the fee applied when doing flash loans. By default this
  1932. implementation has 0 fees. This function can be overloaded to make
  1933. the flash loan mechanism deflationary.
  1934. [.contract-item]
  1935. [[ERC20FlashMint-_flashFeeReceiver--]]
  1936. ==== `[.contract-item-name]#++_flashFeeReceiver++#++() → address++` [.item-kind]#internal#
  1937. Returns the receiver address of the flash fee. By default this
  1938. implementation returns the address(0) which means the fee amount will be burnt.
  1939. This function can be overloaded to change the fee receiver.
  1940. [.contract-item]
  1941. [[ERC20FlashMint-flashLoan-contract-IERC3156FlashBorrower-address-uint256-bytes-]]
  1942. ==== `[.contract-item-name]#++flashLoan++#++(contract IERC3156FlashBorrower receiver, address token, uint256 amount, bytes data) → bool++` [.item-kind]#public#
  1943. Performs a flash loan. New tokens are minted and sent to the
  1944. `receiver`, who is required to implement the {IERC3156FlashBorrower}
  1945. interface. By the end of the flash loan, the receiver is expected to own
  1946. amount + fee tokens and have them approved back to the token contract itself so
  1947. they can be burned.
  1948. :constructor: pass:normal[xref:#ERC4626-constructor-contract-IERC20-[`++constructor++`]]
  1949. :decimals: pass:normal[xref:#ERC4626-decimals--[`++decimals++`]]
  1950. :asset: pass:normal[xref:#ERC4626-asset--[`++asset++`]]
  1951. :totalAssets: pass:normal[xref:#ERC4626-totalAssets--[`++totalAssets++`]]
  1952. :convertToShares: pass:normal[xref:#ERC4626-convertToShares-uint256-[`++convertToShares++`]]
  1953. :convertToAssets: pass:normal[xref:#ERC4626-convertToAssets-uint256-[`++convertToAssets++`]]
  1954. :maxDeposit: pass:normal[xref:#ERC4626-maxDeposit-address-[`++maxDeposit++`]]
  1955. :maxMint: pass:normal[xref:#ERC4626-maxMint-address-[`++maxMint++`]]
  1956. :maxWithdraw: pass:normal[xref:#ERC4626-maxWithdraw-address-[`++maxWithdraw++`]]
  1957. :maxRedeem: pass:normal[xref:#ERC4626-maxRedeem-address-[`++maxRedeem++`]]
  1958. :previewDeposit: pass:normal[xref:#ERC4626-previewDeposit-uint256-[`++previewDeposit++`]]
  1959. :previewMint: pass:normal[xref:#ERC4626-previewMint-uint256-[`++previewMint++`]]
  1960. :previewWithdraw: pass:normal[xref:#ERC4626-previewWithdraw-uint256-[`++previewWithdraw++`]]
  1961. :previewRedeem: pass:normal[xref:#ERC4626-previewRedeem-uint256-[`++previewRedeem++`]]
  1962. :deposit: pass:normal[xref:#ERC4626-deposit-uint256-address-[`++deposit++`]]
  1963. :mint: pass:normal[xref:#ERC4626-mint-uint256-address-[`++mint++`]]
  1964. :withdraw: pass:normal[xref:#ERC4626-withdraw-uint256-address-address-[`++withdraw++`]]
  1965. :redeem: pass:normal[xref:#ERC4626-redeem-uint256-address-address-[`++redeem++`]]
  1966. :_convertToShares: pass:normal[xref:#ERC4626-_convertToShares-uint256-enum-Math-Rounding-[`++_convertToShares++`]]
  1967. :_convertToAssets: pass:normal[xref:#ERC4626-_convertToAssets-uint256-enum-Math-Rounding-[`++_convertToAssets++`]]
  1968. :_deposit: pass:normal[xref:#ERC4626-_deposit-address-address-uint256-uint256-[`++_deposit++`]]
  1969. :_withdraw: pass:normal[xref:#ERC4626-_withdraw-address-address-address-uint256-uint256-[`++_withdraw++`]]
  1970. :_decimalsOffset: pass:normal[xref:#ERC4626-_decimalsOffset--[`++_decimalsOffset++`]]
  1971. [.contract]
  1972. [[ERC4626]]
  1973. === `++ERC4626++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.9.5/contracts/token/ERC20/extensions/ERC4626.sol[{github-icon},role=heading-link]
  1974. [.hljs-theme-light.nopadding]
  1975. ```solidity
  1976. import "@openzeppelin/contracts/token/ERC20/extensions/ERC4626.sol";
  1977. ```
  1978. Implementation of the ERC4626 "Tokenized Vault Standard" as defined in
  1979. https://eips.ethereum.org/EIPS/eip-4626[EIP-4626].
  1980. This extension allows the minting and burning of "shares" (represented using the ERC20 inheritance) in exchange for
  1981. underlying "assets" through standardized {deposit}, {mint}, {redeem} and {burn} workflows. This contract extends
  1982. the ERC20 standard. Any additional extensions included along it would affect the "shares" token represented by this
  1983. contract and not the "assets" token which is an independent contract.
  1984. [CAUTION]
  1985. ====
  1986. In empty (or nearly empty) ERC-4626 vaults, deposits are at high risk of being stolen through frontrunning
  1987. with a "donation" to the vault that inflates the price of a share. This is variously known as a donation or inflation
  1988. attack and is essentially a problem of slippage. Vault deployers can protect against this attack by making an initial
  1989. deposit of a non-trivial amount of the asset, such that price manipulation becomes infeasible. Withdrawals may
  1990. similarly be affected by slippage. Users can protect against this attack as well as unexpected slippage in general by
  1991. verifying the amount received is as expected, using a wrapper that performs these checks such as
  1992. https://github.com/fei-protocol/ERC4626#erc4626router-and-base[ERC4626Router].
  1993. Since v4.9, this implementation uses virtual assets and shares to mitigate that risk. The `_decimalsOffset()`
  1994. corresponds to an offset in the decimal representation between the underlying asset's decimals and the vault
  1995. decimals. This offset also determines the rate of virtual shares to virtual assets in the vault, which itself
  1996. determines the initial exchange rate. While not fully preventing the attack, analysis shows that the default offset
  1997. (0) makes it non-profitable, as a result of the value being captured by the virtual shares (out of the attacker's
  1998. donation) matching the attacker's expected gains. With a larger offset, the attack becomes orders of magnitude more
  1999. expensive than it is profitable. More details about the underlying math can be found
  2000. xref:erc4626.adoc#inflation-attack[here].
  2001. The drawback of this approach is that the virtual shares do capture (a very small) part of the value being accrued
  2002. to the vault. Also, if the vault experiences losses, the users try to exit the vault, the virtual shares and assets
  2003. will cause the first user to exit to experience reduced losses in detriment to the last users that will experience
  2004. bigger losses. Developers willing to revert back to the pre-v4.9 behavior just need to override the
  2005. `_convertToShares` and `_convertToAssets` functions.
  2006. To learn more, check out our xref:ROOT:erc4626.adoc[ERC-4626 guide].
  2007. ====
  2008. _Available since v4.7._
  2009. [.contract-index]
  2010. .Functions
  2011. --
  2012. * {xref-ERC4626-constructor-contract-IERC20-}[`++constructor(asset_)++`]
  2013. * {xref-ERC4626-decimals--}[`++decimals()++`]
  2014. * {xref-ERC4626-asset--}[`++asset()++`]
  2015. * {xref-ERC4626-totalAssets--}[`++totalAssets()++`]
  2016. * {xref-ERC4626-convertToShares-uint256-}[`++convertToShares(assets)++`]
  2017. * {xref-ERC4626-convertToAssets-uint256-}[`++convertToAssets(shares)++`]
  2018. * {xref-ERC4626-maxDeposit-address-}[`++maxDeposit()++`]
  2019. * {xref-ERC4626-maxMint-address-}[`++maxMint()++`]
  2020. * {xref-ERC4626-maxWithdraw-address-}[`++maxWithdraw(owner)++`]
  2021. * {xref-ERC4626-maxRedeem-address-}[`++maxRedeem(owner)++`]
  2022. * {xref-ERC4626-previewDeposit-uint256-}[`++previewDeposit(assets)++`]
  2023. * {xref-ERC4626-previewMint-uint256-}[`++previewMint(shares)++`]
  2024. * {xref-ERC4626-previewWithdraw-uint256-}[`++previewWithdraw(assets)++`]
  2025. * {xref-ERC4626-previewRedeem-uint256-}[`++previewRedeem(shares)++`]
  2026. * {xref-ERC4626-deposit-uint256-address-}[`++deposit(assets, receiver)++`]
  2027. * {xref-ERC4626-mint-uint256-address-}[`++mint(shares, receiver)++`]
  2028. * {xref-ERC4626-withdraw-uint256-address-address-}[`++withdraw(assets, receiver, owner)++`]
  2029. * {xref-ERC4626-redeem-uint256-address-address-}[`++redeem(shares, receiver, owner)++`]
  2030. * {xref-ERC4626-_convertToShares-uint256-enum-Math-Rounding-}[`++_convertToShares(assets, rounding)++`]
  2031. * {xref-ERC4626-_convertToAssets-uint256-enum-Math-Rounding-}[`++_convertToAssets(shares, rounding)++`]
  2032. * {xref-ERC4626-_deposit-address-address-uint256-uint256-}[`++_deposit(caller, receiver, assets, shares)++`]
  2033. * {xref-ERC4626-_withdraw-address-address-address-uint256-uint256-}[`++_withdraw(caller, receiver, owner, assets, shares)++`]
  2034. * {xref-ERC4626-_decimalsOffset--}[`++_decimalsOffset()++`]
  2035. [.contract-subindex-inherited]
  2036. .IERC4626
  2037. [.contract-subindex-inherited]
  2038. .ERC20
  2039. * {xref-ERC20-name--}[`++name()++`]
  2040. * {xref-ERC20-symbol--}[`++symbol()++`]
  2041. * {xref-ERC20-totalSupply--}[`++totalSupply()++`]
  2042. * {xref-ERC20-balanceOf-address-}[`++balanceOf(account)++`]
  2043. * {xref-ERC20-transfer-address-uint256-}[`++transfer(to, amount)++`]
  2044. * {xref-ERC20-allowance-address-address-}[`++allowance(owner, spender)++`]
  2045. * {xref-ERC20-approve-address-uint256-}[`++approve(spender, amount)++`]
  2046. * {xref-ERC20-transferFrom-address-address-uint256-}[`++transferFrom(from, to, amount)++`]
  2047. * {xref-ERC20-increaseAllowance-address-uint256-}[`++increaseAllowance(spender, addedValue)++`]
  2048. * {xref-ERC20-decreaseAllowance-address-uint256-}[`++decreaseAllowance(spender, subtractedValue)++`]
  2049. * {xref-ERC20-_transfer-address-address-uint256-}[`++_transfer(from, to, amount)++`]
  2050. * {xref-ERC20-_mint-address-uint256-}[`++_mint(account, amount)++`]
  2051. * {xref-ERC20-_burn-address-uint256-}[`++_burn(account, amount)++`]
  2052. * {xref-ERC20-_approve-address-address-uint256-}[`++_approve(owner, spender, amount)++`]
  2053. * {xref-ERC20-_spendAllowance-address-address-uint256-}[`++_spendAllowance(owner, spender, amount)++`]
  2054. * {xref-ERC20-_beforeTokenTransfer-address-address-uint256-}[`++_beforeTokenTransfer(from, to, amount)++`]
  2055. * {xref-ERC20-_afterTokenTransfer-address-address-uint256-}[`++_afterTokenTransfer(from, to, amount)++`]
  2056. [.contract-subindex-inherited]
  2057. .IERC20Metadata
  2058. [.contract-subindex-inherited]
  2059. .IERC20
  2060. --
  2061. [.contract-index]
  2062. .Events
  2063. --
  2064. [.contract-subindex-inherited]
  2065. .IERC4626
  2066. * {xref-IERC4626-Deposit-address-address-uint256-uint256-}[`++Deposit(sender, owner, assets, shares)++`]
  2067. * {xref-IERC4626-Withdraw-address-address-address-uint256-uint256-}[`++Withdraw(sender, receiver, owner, assets, shares)++`]
  2068. [.contract-subindex-inherited]
  2069. .ERC20
  2070. [.contract-subindex-inherited]
  2071. .IERC20Metadata
  2072. [.contract-subindex-inherited]
  2073. .IERC20
  2074. * {xref-IERC20-Transfer-address-address-uint256-}[`++Transfer(from, to, value)++`]
  2075. * {xref-IERC20-Approval-address-address-uint256-}[`++Approval(owner, spender, value)++`]
  2076. --
  2077. [.contract-item]
  2078. [[ERC4626-constructor-contract-IERC20-]]
  2079. ==== `[.contract-item-name]#++constructor++#++(contract IERC20 asset_)++` [.item-kind]#internal#
  2080. Set the underlying asset contract. This must be an ERC20-compatible contract (ERC20 or ERC777).
  2081. [.contract-item]
  2082. [[ERC4626-decimals--]]
  2083. ==== `[.contract-item-name]#++decimals++#++() → uint8++` [.item-kind]#public#
  2084. Decimals are computed by adding the decimal offset on top of the underlying asset's decimals. This
  2085. "original" value is cached during construction of the vault contract. If this read operation fails (e.g., the
  2086. asset has not been created yet), a default of 18 is used to represent the underlying asset's decimals.
  2087. See {IERC20Metadata-decimals}.
  2088. [.contract-item]
  2089. [[ERC4626-asset--]]
  2090. ==== `[.contract-item-name]#++asset++#++() → address++` [.item-kind]#public#
  2091. See {IERC4626-asset}.
  2092. [.contract-item]
  2093. [[ERC4626-totalAssets--]]
  2094. ==== `[.contract-item-name]#++totalAssets++#++() → uint256++` [.item-kind]#public#
  2095. See {IERC4626-totalAssets}.
  2096. [.contract-item]
  2097. [[ERC4626-convertToShares-uint256-]]
  2098. ==== `[.contract-item-name]#++convertToShares++#++(uint256 assets) → uint256++` [.item-kind]#public#
  2099. See {IERC4626-convertToShares}.
  2100. [.contract-item]
  2101. [[ERC4626-convertToAssets-uint256-]]
  2102. ==== `[.contract-item-name]#++convertToAssets++#++(uint256 shares) → uint256++` [.item-kind]#public#
  2103. See {IERC4626-convertToAssets}.
  2104. [.contract-item]
  2105. [[ERC4626-maxDeposit-address-]]
  2106. ==== `[.contract-item-name]#++maxDeposit++#++(address) → uint256++` [.item-kind]#public#
  2107. See {IERC4626-maxDeposit}.
  2108. [.contract-item]
  2109. [[ERC4626-maxMint-address-]]
  2110. ==== `[.contract-item-name]#++maxMint++#++(address) → uint256++` [.item-kind]#public#
  2111. See {IERC4626-maxMint}.
  2112. [.contract-item]
  2113. [[ERC4626-maxWithdraw-address-]]
  2114. ==== `[.contract-item-name]#++maxWithdraw++#++(address owner) → uint256++` [.item-kind]#public#
  2115. See {IERC4626-maxWithdraw}.
  2116. [.contract-item]
  2117. [[ERC4626-maxRedeem-address-]]
  2118. ==== `[.contract-item-name]#++maxRedeem++#++(address owner) → uint256++` [.item-kind]#public#
  2119. See {IERC4626-maxRedeem}.
  2120. [.contract-item]
  2121. [[ERC4626-previewDeposit-uint256-]]
  2122. ==== `[.contract-item-name]#++previewDeposit++#++(uint256 assets) → uint256++` [.item-kind]#public#
  2123. See {IERC4626-previewDeposit}.
  2124. [.contract-item]
  2125. [[ERC4626-previewMint-uint256-]]
  2126. ==== `[.contract-item-name]#++previewMint++#++(uint256 shares) → uint256++` [.item-kind]#public#
  2127. See {IERC4626-previewMint}.
  2128. [.contract-item]
  2129. [[ERC4626-previewWithdraw-uint256-]]
  2130. ==== `[.contract-item-name]#++previewWithdraw++#++(uint256 assets) → uint256++` [.item-kind]#public#
  2131. See {IERC4626-previewWithdraw}.
  2132. [.contract-item]
  2133. [[ERC4626-previewRedeem-uint256-]]
  2134. ==== `[.contract-item-name]#++previewRedeem++#++(uint256 shares) → uint256++` [.item-kind]#public#
  2135. See {IERC4626-previewRedeem}.
  2136. [.contract-item]
  2137. [[ERC4626-deposit-uint256-address-]]
  2138. ==== `[.contract-item-name]#++deposit++#++(uint256 assets, address receiver) → uint256++` [.item-kind]#public#
  2139. See {IERC4626-deposit}.
  2140. [.contract-item]
  2141. [[ERC4626-mint-uint256-address-]]
  2142. ==== `[.contract-item-name]#++mint++#++(uint256 shares, address receiver) → uint256++` [.item-kind]#public#
  2143. See {IERC4626-mint}.
  2144. As opposed to {deposit}, minting is allowed even if the vault is in a state where the price of a share is zero.
  2145. In this case, the shares will be minted without requiring any assets to be deposited.
  2146. [.contract-item]
  2147. [[ERC4626-withdraw-uint256-address-address-]]
  2148. ==== `[.contract-item-name]#++withdraw++#++(uint256 assets, address receiver, address owner) → uint256++` [.item-kind]#public#
  2149. See {IERC4626-withdraw}.
  2150. [.contract-item]
  2151. [[ERC4626-redeem-uint256-address-address-]]
  2152. ==== `[.contract-item-name]#++redeem++#++(uint256 shares, address receiver, address owner) → uint256++` [.item-kind]#public#
  2153. See {IERC4626-redeem}.
  2154. [.contract-item]
  2155. [[ERC4626-_convertToShares-uint256-enum-Math-Rounding-]]
  2156. ==== `[.contract-item-name]#++_convertToShares++#++(uint256 assets, enum Math.Rounding rounding) → uint256++` [.item-kind]#internal#
  2157. Internal conversion function (from assets to shares) with support for rounding direction.
  2158. [.contract-item]
  2159. [[ERC4626-_convertToAssets-uint256-enum-Math-Rounding-]]
  2160. ==== `[.contract-item-name]#++_convertToAssets++#++(uint256 shares, enum Math.Rounding rounding) → uint256++` [.item-kind]#internal#
  2161. Internal conversion function (from shares to assets) with support for rounding direction.
  2162. [.contract-item]
  2163. [[ERC4626-_deposit-address-address-uint256-uint256-]]
  2164. ==== `[.contract-item-name]#++_deposit++#++(address caller, address receiver, uint256 assets, uint256 shares)++` [.item-kind]#internal#
  2165. Deposit/mint common workflow.
  2166. [.contract-item]
  2167. [[ERC4626-_withdraw-address-address-address-uint256-uint256-]]
  2168. ==== `[.contract-item-name]#++_withdraw++#++(address caller, address receiver, address owner, uint256 assets, uint256 shares)++` [.item-kind]#internal#
  2169. Withdraw/redeem common workflow.
  2170. [.contract-item]
  2171. [[ERC4626-_decimalsOffset--]]
  2172. ==== `[.contract-item-name]#++_decimalsOffset++#++() → uint8++` [.item-kind]#internal#
  2173. == Presets
  2174. These contracts are preconfigured combinations of the above features. They can be used through inheritance or as models to copy and paste their source code.
  2175. :MINTER_ROLE: pass:normal[xref:#ERC20PresetMinterPauser-MINTER_ROLE-bytes32[`++MINTER_ROLE++`]]
  2176. :PAUSER_ROLE: pass:normal[xref:#ERC20PresetMinterPauser-PAUSER_ROLE-bytes32[`++PAUSER_ROLE++`]]
  2177. :constructor: pass:normal[xref:#ERC20PresetMinterPauser-constructor-string-string-[`++constructor++`]]
  2178. :mint: pass:normal[xref:#ERC20PresetMinterPauser-mint-address-uint256-[`++mint++`]]
  2179. :pause: pass:normal[xref:#ERC20PresetMinterPauser-pause--[`++pause++`]]
  2180. :unpause: pass:normal[xref:#ERC20PresetMinterPauser-unpause--[`++unpause++`]]
  2181. :_beforeTokenTransfer: pass:normal[xref:#ERC20PresetMinterPauser-_beforeTokenTransfer-address-address-uint256-[`++_beforeTokenTransfer++`]]
  2182. [.contract]
  2183. [[ERC20PresetMinterPauser]]
  2184. === `++ERC20PresetMinterPauser++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.9.5/contracts/token/ERC20/presets/ERC20PresetMinterPauser.sol[{github-icon},role=heading-link]
  2185. [.hljs-theme-light.nopadding]
  2186. ```solidity
  2187. import "@openzeppelin/contracts/token/ERC20/presets/ERC20PresetMinterPauser.sol";
  2188. ```
  2189. {ERC20} token, including:
  2190. - ability for holders to burn (destroy) their tokens
  2191. - a minter role that allows for token minting (creation)
  2192. - a pauser role that allows to stop all token transfers
  2193. This contract uses {AccessControl} to lock permissioned functions using the
  2194. different roles - head to its documentation for details.
  2195. The account that deploys the contract will be granted the minter and pauser
  2196. roles, as well as the default admin role, which will let it grant both minter
  2197. and pauser roles to other accounts.
  2198. _Deprecated in favor of https://wizard.openzeppelin.com/[Contracts Wizard]._
  2199. [.contract-index]
  2200. .Functions
  2201. --
  2202. * {xref-ERC20PresetMinterPauser-constructor-string-string-}[`++constructor(name, symbol)++`]
  2203. * {xref-ERC20PresetMinterPauser-mint-address-uint256-}[`++mint(to, amount)++`]
  2204. * {xref-ERC20PresetMinterPauser-pause--}[`++pause()++`]
  2205. * {xref-ERC20PresetMinterPauser-unpause--}[`++unpause()++`]
  2206. * {xref-ERC20PresetMinterPauser-_beforeTokenTransfer-address-address-uint256-}[`++_beforeTokenTransfer(from, to, amount)++`]
  2207. [.contract-subindex-inherited]
  2208. .ERC20Pausable
  2209. [.contract-subindex-inherited]
  2210. .Pausable
  2211. * {xref-Pausable-paused--}[`++paused()++`]
  2212. * {xref-Pausable-_requireNotPaused--}[`++_requireNotPaused()++`]
  2213. * {xref-Pausable-_requirePaused--}[`++_requirePaused()++`]
  2214. * {xref-Pausable-_pause--}[`++_pause()++`]
  2215. * {xref-Pausable-_unpause--}[`++_unpause()++`]
  2216. [.contract-subindex-inherited]
  2217. .ERC20Burnable
  2218. * {xref-ERC20Burnable-burn-uint256-}[`++burn(amount)++`]
  2219. * {xref-ERC20Burnable-burnFrom-address-uint256-}[`++burnFrom(account, amount)++`]
  2220. [.contract-subindex-inherited]
  2221. .ERC20
  2222. * {xref-ERC20-name--}[`++name()++`]
  2223. * {xref-ERC20-symbol--}[`++symbol()++`]
  2224. * {xref-ERC20-decimals--}[`++decimals()++`]
  2225. * {xref-ERC20-totalSupply--}[`++totalSupply()++`]
  2226. * {xref-ERC20-balanceOf-address-}[`++balanceOf(account)++`]
  2227. * {xref-ERC20-transfer-address-uint256-}[`++transfer(to, amount)++`]
  2228. * {xref-ERC20-allowance-address-address-}[`++allowance(owner, spender)++`]
  2229. * {xref-ERC20-approve-address-uint256-}[`++approve(spender, amount)++`]
  2230. * {xref-ERC20-transferFrom-address-address-uint256-}[`++transferFrom(from, to, amount)++`]
  2231. * {xref-ERC20-increaseAllowance-address-uint256-}[`++increaseAllowance(spender, addedValue)++`]
  2232. * {xref-ERC20-decreaseAllowance-address-uint256-}[`++decreaseAllowance(spender, subtractedValue)++`]
  2233. * {xref-ERC20-_transfer-address-address-uint256-}[`++_transfer(from, to, amount)++`]
  2234. * {xref-ERC20-_mint-address-uint256-}[`++_mint(account, amount)++`]
  2235. * {xref-ERC20-_burn-address-uint256-}[`++_burn(account, amount)++`]
  2236. * {xref-ERC20-_approve-address-address-uint256-}[`++_approve(owner, spender, amount)++`]
  2237. * {xref-ERC20-_spendAllowance-address-address-uint256-}[`++_spendAllowance(owner, spender, amount)++`]
  2238. * {xref-ERC20-_afterTokenTransfer-address-address-uint256-}[`++_afterTokenTransfer(from, to, amount)++`]
  2239. [.contract-subindex-inherited]
  2240. .IERC20Metadata
  2241. [.contract-subindex-inherited]
  2242. .IERC20
  2243. [.contract-subindex-inherited]
  2244. .AccessControlEnumerable
  2245. * {xref-AccessControlEnumerable-supportsInterface-bytes4-}[`++supportsInterface(interfaceId)++`]
  2246. * {xref-AccessControlEnumerable-getRoleMember-bytes32-uint256-}[`++getRoleMember(role, index)++`]
  2247. * {xref-AccessControlEnumerable-getRoleMemberCount-bytes32-}[`++getRoleMemberCount(role)++`]
  2248. * {xref-AccessControlEnumerable-_grantRole-bytes32-address-}[`++_grantRole(role, account)++`]
  2249. * {xref-AccessControlEnumerable-_revokeRole-bytes32-address-}[`++_revokeRole(role, account)++`]
  2250. [.contract-subindex-inherited]
  2251. .AccessControl
  2252. * {xref-AccessControl-hasRole-bytes32-address-}[`++hasRole(role, account)++`]
  2253. * {xref-AccessControl-_checkRole-bytes32-}[`++_checkRole(role)++`]
  2254. * {xref-AccessControl-_checkRole-bytes32-address-}[`++_checkRole(role, account)++`]
  2255. * {xref-AccessControl-getRoleAdmin-bytes32-}[`++getRoleAdmin(role)++`]
  2256. * {xref-AccessControl-grantRole-bytes32-address-}[`++grantRole(role, account)++`]
  2257. * {xref-AccessControl-revokeRole-bytes32-address-}[`++revokeRole(role, account)++`]
  2258. * {xref-AccessControl-renounceRole-bytes32-address-}[`++renounceRole(role, account)++`]
  2259. * {xref-AccessControl-_setupRole-bytes32-address-}[`++_setupRole(role, account)++`]
  2260. * {xref-AccessControl-_setRoleAdmin-bytes32-bytes32-}[`++_setRoleAdmin(role, adminRole)++`]
  2261. [.contract-subindex-inherited]
  2262. .ERC165
  2263. [.contract-subindex-inherited]
  2264. .IERC165
  2265. [.contract-subindex-inherited]
  2266. .IAccessControlEnumerable
  2267. [.contract-subindex-inherited]
  2268. .IAccessControl
  2269. --
  2270. [.contract-index]
  2271. .Events
  2272. --
  2273. [.contract-subindex-inherited]
  2274. .ERC20Pausable
  2275. [.contract-subindex-inherited]
  2276. .Pausable
  2277. * {xref-Pausable-Paused-address-}[`++Paused(account)++`]
  2278. * {xref-Pausable-Unpaused-address-}[`++Unpaused(account)++`]
  2279. [.contract-subindex-inherited]
  2280. .ERC20Burnable
  2281. [.contract-subindex-inherited]
  2282. .ERC20
  2283. [.contract-subindex-inherited]
  2284. .IERC20Metadata
  2285. [.contract-subindex-inherited]
  2286. .IERC20
  2287. * {xref-IERC20-Transfer-address-address-uint256-}[`++Transfer(from, to, value)++`]
  2288. * {xref-IERC20-Approval-address-address-uint256-}[`++Approval(owner, spender, value)++`]
  2289. [.contract-subindex-inherited]
  2290. .AccessControlEnumerable
  2291. [.contract-subindex-inherited]
  2292. .AccessControl
  2293. [.contract-subindex-inherited]
  2294. .ERC165
  2295. [.contract-subindex-inherited]
  2296. .IERC165
  2297. [.contract-subindex-inherited]
  2298. .IAccessControlEnumerable
  2299. [.contract-subindex-inherited]
  2300. .IAccessControl
  2301. * {xref-IAccessControl-RoleAdminChanged-bytes32-bytes32-bytes32-}[`++RoleAdminChanged(role, previousAdminRole, newAdminRole)++`]
  2302. * {xref-IAccessControl-RoleGranted-bytes32-address-address-}[`++RoleGranted(role, account, sender)++`]
  2303. * {xref-IAccessControl-RoleRevoked-bytes32-address-address-}[`++RoleRevoked(role, account, sender)++`]
  2304. --
  2305. [.contract-item]
  2306. [[ERC20PresetMinterPauser-constructor-string-string-]]
  2307. ==== `[.contract-item-name]#++constructor++#++(string name, string symbol)++` [.item-kind]#public#
  2308. Grants `DEFAULT_ADMIN_ROLE`, `MINTER_ROLE` and `PAUSER_ROLE` to the
  2309. account that deploys the contract.
  2310. See {ERC20-constructor}.
  2311. [.contract-item]
  2312. [[ERC20PresetMinterPauser-mint-address-uint256-]]
  2313. ==== `[.contract-item-name]#++mint++#++(address to, uint256 amount)++` [.item-kind]#public#
  2314. Creates `amount` new tokens for `to`.
  2315. See {ERC20-_mint}.
  2316. Requirements:
  2317. - the caller must have the `MINTER_ROLE`.
  2318. [.contract-item]
  2319. [[ERC20PresetMinterPauser-pause--]]
  2320. ==== `[.contract-item-name]#++pause++#++()++` [.item-kind]#public#
  2321. Pauses all token transfers.
  2322. See {ERC20Pausable} and {Pausable-_pause}.
  2323. Requirements:
  2324. - the caller must have the `PAUSER_ROLE`.
  2325. [.contract-item]
  2326. [[ERC20PresetMinterPauser-unpause--]]
  2327. ==== `[.contract-item-name]#++unpause++#++()++` [.item-kind]#public#
  2328. Unpauses all token transfers.
  2329. See {ERC20Pausable} and {Pausable-_unpause}.
  2330. Requirements:
  2331. - the caller must have the `PAUSER_ROLE`.
  2332. [.contract-item]
  2333. [[ERC20PresetMinterPauser-_beforeTokenTransfer-address-address-uint256-]]
  2334. ==== `[.contract-item-name]#++_beforeTokenTransfer++#++(address from, address to, uint256 amount)++` [.item-kind]#internal#
  2335. :constructor: pass:normal[xref:#ERC20PresetFixedSupply-constructor-string-string-uint256-address-[`++constructor++`]]
  2336. [.contract]
  2337. [[ERC20PresetFixedSupply]]
  2338. === `++ERC20PresetFixedSupply++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.9.5/contracts/token/ERC20/presets/ERC20PresetFixedSupply.sol[{github-icon},role=heading-link]
  2339. [.hljs-theme-light.nopadding]
  2340. ```solidity
  2341. import "@openzeppelin/contracts/token/ERC20/presets/ERC20PresetFixedSupply.sol";
  2342. ```
  2343. {ERC20} token, including:
  2344. - Preminted initial supply
  2345. - Ability for holders to burn (destroy) their tokens
  2346. - No access control mechanism (for minting/pausing) and hence no governance
  2347. This contract uses {ERC20Burnable} to include burn capabilities - head to
  2348. its documentation for details.
  2349. _Available since v3.4._
  2350. _Deprecated in favor of https://wizard.openzeppelin.com/[Contracts Wizard]._
  2351. [.contract-index]
  2352. .Functions
  2353. --
  2354. * {xref-ERC20PresetFixedSupply-constructor-string-string-uint256-address-}[`++constructor(name, symbol, initialSupply, owner)++`]
  2355. [.contract-subindex-inherited]
  2356. .ERC20Burnable
  2357. * {xref-ERC20Burnable-burn-uint256-}[`++burn(amount)++`]
  2358. * {xref-ERC20Burnable-burnFrom-address-uint256-}[`++burnFrom(account, amount)++`]
  2359. [.contract-subindex-inherited]
  2360. .ERC20
  2361. * {xref-ERC20-name--}[`++name()++`]
  2362. * {xref-ERC20-symbol--}[`++symbol()++`]
  2363. * {xref-ERC20-decimals--}[`++decimals()++`]
  2364. * {xref-ERC20-totalSupply--}[`++totalSupply()++`]
  2365. * {xref-ERC20-balanceOf-address-}[`++balanceOf(account)++`]
  2366. * {xref-ERC20-transfer-address-uint256-}[`++transfer(to, amount)++`]
  2367. * {xref-ERC20-allowance-address-address-}[`++allowance(owner, spender)++`]
  2368. * {xref-ERC20-approve-address-uint256-}[`++approve(spender, amount)++`]
  2369. * {xref-ERC20-transferFrom-address-address-uint256-}[`++transferFrom(from, to, amount)++`]
  2370. * {xref-ERC20-increaseAllowance-address-uint256-}[`++increaseAllowance(spender, addedValue)++`]
  2371. * {xref-ERC20-decreaseAllowance-address-uint256-}[`++decreaseAllowance(spender, subtractedValue)++`]
  2372. * {xref-ERC20-_transfer-address-address-uint256-}[`++_transfer(from, to, amount)++`]
  2373. * {xref-ERC20-_mint-address-uint256-}[`++_mint(account, amount)++`]
  2374. * {xref-ERC20-_burn-address-uint256-}[`++_burn(account, amount)++`]
  2375. * {xref-ERC20-_approve-address-address-uint256-}[`++_approve(owner, spender, amount)++`]
  2376. * {xref-ERC20-_spendAllowance-address-address-uint256-}[`++_spendAllowance(owner, spender, amount)++`]
  2377. * {xref-ERC20-_beforeTokenTransfer-address-address-uint256-}[`++_beforeTokenTransfer(from, to, amount)++`]
  2378. * {xref-ERC20-_afterTokenTransfer-address-address-uint256-}[`++_afterTokenTransfer(from, to, amount)++`]
  2379. [.contract-subindex-inherited]
  2380. .IERC20Metadata
  2381. [.contract-subindex-inherited]
  2382. .IERC20
  2383. --
  2384. [.contract-index]
  2385. .Events
  2386. --
  2387. [.contract-subindex-inherited]
  2388. .ERC20Burnable
  2389. [.contract-subindex-inherited]
  2390. .ERC20
  2391. [.contract-subindex-inherited]
  2392. .IERC20Metadata
  2393. [.contract-subindex-inherited]
  2394. .IERC20
  2395. * {xref-IERC20-Transfer-address-address-uint256-}[`++Transfer(from, to, value)++`]
  2396. * {xref-IERC20-Approval-address-address-uint256-}[`++Approval(owner, spender, value)++`]
  2397. --
  2398. [.contract-item]
  2399. [[ERC20PresetFixedSupply-constructor-string-string-uint256-address-]]
  2400. ==== `[.contract-item-name]#++constructor++#++(string name, string symbol, uint256 initialSupply, address owner)++` [.item-kind]#public#
  2401. Mints `initialSupply` amount of token and transfers them to `owner`.
  2402. See {ERC20-constructor}.
  2403. == Utilities
  2404. :safeTransfer: pass:normal[xref:#SafeERC20-safeTransfer-contract-IERC20-address-uint256-[`++safeTransfer++`]]
  2405. :safeTransferFrom: pass:normal[xref:#SafeERC20-safeTransferFrom-contract-IERC20-address-address-uint256-[`++safeTransferFrom++`]]
  2406. :safeApprove: pass:normal[xref:#SafeERC20-safeApprove-contract-IERC20-address-uint256-[`++safeApprove++`]]
  2407. :safeIncreaseAllowance: pass:normal[xref:#SafeERC20-safeIncreaseAllowance-contract-IERC20-address-uint256-[`++safeIncreaseAllowance++`]]
  2408. :safeDecreaseAllowance: pass:normal[xref:#SafeERC20-safeDecreaseAllowance-contract-IERC20-address-uint256-[`++safeDecreaseAllowance++`]]
  2409. :forceApprove: pass:normal[xref:#SafeERC20-forceApprove-contract-IERC20-address-uint256-[`++forceApprove++`]]
  2410. :safePermit: pass:normal[xref:#SafeERC20-safePermit-contract-IERC20Permit-address-address-uint256-uint256-uint8-bytes32-bytes32-[`++safePermit++`]]
  2411. [.contract]
  2412. [[SafeERC20]]
  2413. === `++SafeERC20++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.9.5/contracts/token/ERC20/utils/SafeERC20.sol[{github-icon},role=heading-link]
  2414. [.hljs-theme-light.nopadding]
  2415. ```solidity
  2416. import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
  2417. ```
  2418. Wrappers around ERC20 operations that throw on failure (when the token
  2419. contract returns false). Tokens that return no value (and instead revert or
  2420. throw on failure) are also supported, non-reverting calls are assumed to be
  2421. successful.
  2422. To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
  2423. which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
  2424. [.contract-index]
  2425. .Functions
  2426. --
  2427. * {xref-SafeERC20-safeTransfer-contract-IERC20-address-uint256-}[`++safeTransfer(token, to, value)++`]
  2428. * {xref-SafeERC20-safeTransferFrom-contract-IERC20-address-address-uint256-}[`++safeTransferFrom(token, from, to, value)++`]
  2429. * {xref-SafeERC20-safeApprove-contract-IERC20-address-uint256-}[`++safeApprove(token, spender, value)++`]
  2430. * {xref-SafeERC20-safeIncreaseAllowance-contract-IERC20-address-uint256-}[`++safeIncreaseAllowance(token, spender, value)++`]
  2431. * {xref-SafeERC20-safeDecreaseAllowance-contract-IERC20-address-uint256-}[`++safeDecreaseAllowance(token, spender, value)++`]
  2432. * {xref-SafeERC20-forceApprove-contract-IERC20-address-uint256-}[`++forceApprove(token, spender, value)++`]
  2433. * {xref-SafeERC20-safePermit-contract-IERC20Permit-address-address-uint256-uint256-uint8-bytes32-bytes32-}[`++safePermit(token, owner, spender, value, deadline, v, r, s)++`]
  2434. --
  2435. [.contract-item]
  2436. [[SafeERC20-safeTransfer-contract-IERC20-address-uint256-]]
  2437. ==== `[.contract-item-name]#++safeTransfer++#++(contract IERC20 token, address to, uint256 value)++` [.item-kind]#internal#
  2438. Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,
  2439. non-reverting calls are assumed to be successful.
  2440. [.contract-item]
  2441. [[SafeERC20-safeTransferFrom-contract-IERC20-address-address-uint256-]]
  2442. ==== `[.contract-item-name]#++safeTransferFrom++#++(contract IERC20 token, address from, address to, uint256 value)++` [.item-kind]#internal#
  2443. Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the
  2444. calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.
  2445. [.contract-item]
  2446. [[SafeERC20-safeApprove-contract-IERC20-address-uint256-]]
  2447. ==== `[.contract-item-name]#++safeApprove++#++(contract IERC20 token, address spender, uint256 value)++` [.item-kind]#internal#
  2448. Deprecated. This function has issues similar to the ones found in
  2449. {IERC20-approve}, and its usage is discouraged.
  2450. Whenever possible, use {safeIncreaseAllowance} and
  2451. {safeDecreaseAllowance} instead.
  2452. [.contract-item]
  2453. [[SafeERC20-safeIncreaseAllowance-contract-IERC20-address-uint256-]]
  2454. ==== `[.contract-item-name]#++safeIncreaseAllowance++#++(contract IERC20 token, address spender, uint256 value)++` [.item-kind]#internal#
  2455. Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,
  2456. non-reverting calls are assumed to be successful.
  2457. [.contract-item]
  2458. [[SafeERC20-safeDecreaseAllowance-contract-IERC20-address-uint256-]]
  2459. ==== `[.contract-item-name]#++safeDecreaseAllowance++#++(contract IERC20 token, address spender, uint256 value)++` [.item-kind]#internal#
  2460. Decrease the calling contract's allowance toward `spender` by `value`. If `token` returns no value,
  2461. non-reverting calls are assumed to be successful.
  2462. [.contract-item]
  2463. [[SafeERC20-forceApprove-contract-IERC20-address-uint256-]]
  2464. ==== `[.contract-item-name]#++forceApprove++#++(contract IERC20 token, address spender, uint256 value)++` [.item-kind]#internal#
  2465. Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,
  2466. non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval
  2467. to be set to zero before setting it to a non-zero value, such as USDT.
  2468. [.contract-item]
  2469. [[SafeERC20-safePermit-contract-IERC20Permit-address-address-uint256-uint256-uint8-bytes32-bytes32-]]
  2470. ==== `[.contract-item-name]#++safePermit++#++(contract IERC20Permit token, address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s)++` [.item-kind]#internal#
  2471. Use a ERC-2612 signature to set the `owner` approval toward `spender` on `token`.
  2472. Revert on invalid signature.
  2473. :constructor: pass:normal[xref:#TokenTimelock-constructor-contract-IERC20-address-uint256-[`++constructor++`]]
  2474. :token: pass:normal[xref:#TokenTimelock-token--[`++token++`]]
  2475. :beneficiary: pass:normal[xref:#TokenTimelock-beneficiary--[`++beneficiary++`]]
  2476. :releaseTime: pass:normal[xref:#TokenTimelock-releaseTime--[`++releaseTime++`]]
  2477. :release: pass:normal[xref:#TokenTimelock-release--[`++release++`]]
  2478. [.contract]
  2479. [[TokenTimelock]]
  2480. === `++TokenTimelock++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.9.5/contracts/token/ERC20/utils/TokenTimelock.sol[{github-icon},role=heading-link]
  2481. [.hljs-theme-light.nopadding]
  2482. ```solidity
  2483. import "@openzeppelin/contracts/token/ERC20/utils/TokenTimelock.sol";
  2484. ```
  2485. A token holder contract that will allow a beneficiary to extract the
  2486. tokens after a given release time.
  2487. Useful for simple vesting schedules like "advisors get all of their tokens
  2488. after 1 year".
  2489. [.contract-index]
  2490. .Functions
  2491. --
  2492. * {xref-TokenTimelock-constructor-contract-IERC20-address-uint256-}[`++constructor(token_, beneficiary_, releaseTime_)++`]
  2493. * {xref-TokenTimelock-token--}[`++token()++`]
  2494. * {xref-TokenTimelock-beneficiary--}[`++beneficiary()++`]
  2495. * {xref-TokenTimelock-releaseTime--}[`++releaseTime()++`]
  2496. * {xref-TokenTimelock-release--}[`++release()++`]
  2497. --
  2498. [.contract-item]
  2499. [[TokenTimelock-constructor-contract-IERC20-address-uint256-]]
  2500. ==== `[.contract-item-name]#++constructor++#++(contract IERC20 token_, address beneficiary_, uint256 releaseTime_)++` [.item-kind]#public#
  2501. Deploys a timelock instance that is able to hold the token specified, and will only release it to
  2502. `beneficiary_` when {release} is invoked after `releaseTime_`. The release time is specified as a Unix timestamp
  2503. (in seconds).
  2504. [.contract-item]
  2505. [[TokenTimelock-token--]]
  2506. ==== `[.contract-item-name]#++token++#++() → contract IERC20++` [.item-kind]#public#
  2507. Returns the token being held.
  2508. [.contract-item]
  2509. [[TokenTimelock-beneficiary--]]
  2510. ==== `[.contract-item-name]#++beneficiary++#++() → address++` [.item-kind]#public#
  2511. Returns the beneficiary that will receive the tokens.
  2512. [.contract-item]
  2513. [[TokenTimelock-releaseTime--]]
  2514. ==== `[.contract-item-name]#++releaseTime++#++() → uint256++` [.item-kind]#public#
  2515. Returns the time when the tokens are released in seconds since Unix epoch (i.e. Unix timestamp).
  2516. [.contract-item]
  2517. [[TokenTimelock-release--]]
  2518. ==== `[.contract-item-name]#++release++#++()++` [.item-kind]#public#
  2519. Transfers tokens held by the timelock to the beneficiary. Will only succeed if invoked after the release
  2520. time.