ERC20.adoc 166 KB

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