1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034 |
- :github-icon: pass:[<svg class="icon"><use href="#github-icon"/></svg>]
- :IERC721: pass:normal[xref:token/ERC721.adoc#IERC721[`IERC721`]]
- :IERC721Metadata: pass:normal[xref:token/ERC721.adoc#IERC721Metadata[`IERC721Metadata`]]
- :IERC721Enumerable: pass:normal[xref:token/ERC721.adoc#IERC721Enumerable[`IERC721Enumerable`]]
- :IERC721Receiver: pass:normal[xref:token/ERC721.adoc#IERC721Receiver[`IERC721Receiver`]]
- :ERC721: pass:normal[xref:token/ERC721.adoc#ERC721[`ERC721`]]
- :ERC721Enumerable: pass:normal[xref:token/ERC721.adoc#ERC721Enumerable[`ERC721Enumerable`]]
- :ERC721Holder: pass:normal[xref:token/ERC721.adoc#ERC721Holder[`ERC721Holder`]]
- :ERC721Consecutive: pass:normal[xref:token/ERC721.adoc#ERC721Consecutive[`ERC721Consecutive`]]
- :ERC721URIStorage: pass:normal[xref:token/ERC721.adoc#ERC721URIStorage[`ERC721URIStorage`]]
- :ERC721Votes: pass:normal[xref:token/ERC721.adoc#ERC721Votes[`ERC721Votes`]]
- :ERC721Royalty: pass:normal[xref:token/ERC721.adoc#ERC721Royalty[`ERC721Royalty`]]
- :ERC721Pausable: pass:normal[xref:token/ERC721.adoc#ERC721Pausable[`ERC721Pausable`]]
- :ERC721Burnable: pass:normal[xref:token/ERC721.adoc#ERC721Burnable[`ERC721Burnable`]]
- :ERC721Wrapper: pass:normal[xref:token/ERC721.adoc#ERC721Wrapper[`ERC721Wrapper`]]
- :ERC721Votes: pass:normal[xref:token/ERC721.adoc#ERC721Votes[`ERC721Votes`]]
- :xref-IERC721-balanceOf-address-: xref:token/ERC721.adoc#IERC721-balanceOf-address-
- :xref-IERC721-ownerOf-uint256-: xref:token/ERC721.adoc#IERC721-ownerOf-uint256-
- :xref-IERC721-safeTransferFrom-address-address-uint256-bytes-: xref:token/ERC721.adoc#IERC721-safeTransferFrom-address-address-uint256-bytes-
- :xref-IERC721-safeTransferFrom-address-address-uint256-: xref:token/ERC721.adoc#IERC721-safeTransferFrom-address-address-uint256-
- :xref-IERC721-transferFrom-address-address-uint256-: xref:token/ERC721.adoc#IERC721-transferFrom-address-address-uint256-
- :xref-IERC721-approve-address-uint256-: xref:token/ERC721.adoc#IERC721-approve-address-uint256-
- :xref-IERC721-setApprovalForAll-address-bool-: xref:token/ERC721.adoc#IERC721-setApprovalForAll-address-bool-
- :xref-IERC721-getApproved-uint256-: xref:token/ERC721.adoc#IERC721-getApproved-uint256-
- :xref-IERC721-isApprovedForAll-address-address-: xref:token/ERC721.adoc#IERC721-isApprovedForAll-address-address-
- :xref-IERC165-supportsInterface-bytes4-: xref:utils.adoc#IERC165-supportsInterface-bytes4-
- :xref-IERC721-Transfer-address-address-uint256-: xref:token/ERC721.adoc#IERC721-Transfer-address-address-uint256-
- :xref-IERC721-Approval-address-address-uint256-: xref:token/ERC721.adoc#IERC721-Approval-address-address-uint256-
- :xref-IERC721-ApprovalForAll-address-address-bool-: xref:token/ERC721.adoc#IERC721-ApprovalForAll-address-address-bool-
- :IERC721Receiver-onERC721Received: pass:normal[xref:token/ERC721.adoc#IERC721Receiver-onERC721Received-address-address-uint256-bytes-[`IERC721Receiver.onERC721Received`]]
- :IERC721Receiver-onERC721Received: pass:normal[xref:token/ERC721.adoc#IERC721Receiver-onERC721Received-address-address-uint256-bytes-[`IERC721Receiver.onERC721Received`]]
- :xref-IERC721Metadata-name--: xref:token/ERC721.adoc#IERC721Metadata-name--
- :xref-IERC721Metadata-symbol--: xref:token/ERC721.adoc#IERC721Metadata-symbol--
- :xref-IERC721Metadata-tokenURI-uint256-: xref:token/ERC721.adoc#IERC721Metadata-tokenURI-uint256-
- :xref-IERC721-balanceOf-address-: xref:token/ERC721.adoc#IERC721-balanceOf-address-
- :xref-IERC721-ownerOf-uint256-: xref:token/ERC721.adoc#IERC721-ownerOf-uint256-
- :xref-IERC721-safeTransferFrom-address-address-uint256-bytes-: xref:token/ERC721.adoc#IERC721-safeTransferFrom-address-address-uint256-bytes-
- :xref-IERC721-safeTransferFrom-address-address-uint256-: xref:token/ERC721.adoc#IERC721-safeTransferFrom-address-address-uint256-
- :xref-IERC721-transferFrom-address-address-uint256-: xref:token/ERC721.adoc#IERC721-transferFrom-address-address-uint256-
- :xref-IERC721-approve-address-uint256-: xref:token/ERC721.adoc#IERC721-approve-address-uint256-
- :xref-IERC721-setApprovalForAll-address-bool-: xref:token/ERC721.adoc#IERC721-setApprovalForAll-address-bool-
- :xref-IERC721-getApproved-uint256-: xref:token/ERC721.adoc#IERC721-getApproved-uint256-
- :xref-IERC721-isApprovedForAll-address-address-: xref:token/ERC721.adoc#IERC721-isApprovedForAll-address-address-
- :xref-IERC165-supportsInterface-bytes4-: xref:utils.adoc#IERC165-supportsInterface-bytes4-
- :xref-IERC721-Transfer-address-address-uint256-: xref:token/ERC721.adoc#IERC721-Transfer-address-address-uint256-
- :xref-IERC721-Approval-address-address-uint256-: xref:token/ERC721.adoc#IERC721-Approval-address-address-uint256-
- :xref-IERC721-ApprovalForAll-address-address-bool-: xref:token/ERC721.adoc#IERC721-ApprovalForAll-address-address-bool-
- :xref-IERC721Enumerable-totalSupply--: xref:token/ERC721.adoc#IERC721Enumerable-totalSupply--
- :xref-IERC721Enumerable-tokenOfOwnerByIndex-address-uint256-: xref:token/ERC721.adoc#IERC721Enumerable-tokenOfOwnerByIndex-address-uint256-
- :xref-IERC721Enumerable-tokenByIndex-uint256-: xref:token/ERC721.adoc#IERC721Enumerable-tokenByIndex-uint256-
- :xref-IERC721-balanceOf-address-: xref:token/ERC721.adoc#IERC721-balanceOf-address-
- :xref-IERC721-ownerOf-uint256-: xref:token/ERC721.adoc#IERC721-ownerOf-uint256-
- :xref-IERC721-safeTransferFrom-address-address-uint256-bytes-: xref:token/ERC721.adoc#IERC721-safeTransferFrom-address-address-uint256-bytes-
- :xref-IERC721-safeTransferFrom-address-address-uint256-: xref:token/ERC721.adoc#IERC721-safeTransferFrom-address-address-uint256-
- :xref-IERC721-transferFrom-address-address-uint256-: xref:token/ERC721.adoc#IERC721-transferFrom-address-address-uint256-
- :xref-IERC721-approve-address-uint256-: xref:token/ERC721.adoc#IERC721-approve-address-uint256-
- :xref-IERC721-setApprovalForAll-address-bool-: xref:token/ERC721.adoc#IERC721-setApprovalForAll-address-bool-
- :xref-IERC721-getApproved-uint256-: xref:token/ERC721.adoc#IERC721-getApproved-uint256-
- :xref-IERC721-isApprovedForAll-address-address-: xref:token/ERC721.adoc#IERC721-isApprovedForAll-address-address-
- :xref-IERC165-supportsInterface-bytes4-: xref:utils.adoc#IERC165-supportsInterface-bytes4-
- :xref-IERC721-Transfer-address-address-uint256-: xref:token/ERC721.adoc#IERC721-Transfer-address-address-uint256-
- :xref-IERC721-Approval-address-address-uint256-: xref:token/ERC721.adoc#IERC721-Approval-address-address-uint256-
- :xref-IERC721-ApprovalForAll-address-address-bool-: xref:token/ERC721.adoc#IERC721-ApprovalForAll-address-address-bool-
- :ERC721Enumerable: pass:normal[xref:token/ERC721.adoc#ERC721Enumerable[`ERC721Enumerable`]]
- :xref-ERC721-constructor-string-string-: xref:token/ERC721.adoc#ERC721-constructor-string-string-
- :xref-ERC721-supportsInterface-bytes4-: xref:token/ERC721.adoc#ERC721-supportsInterface-bytes4-
- :xref-ERC721-balanceOf-address-: xref:token/ERC721.adoc#ERC721-balanceOf-address-
- :xref-ERC721-ownerOf-uint256-: xref:token/ERC721.adoc#ERC721-ownerOf-uint256-
- :xref-ERC721-name--: xref:token/ERC721.adoc#ERC721-name--
- :xref-ERC721-symbol--: xref:token/ERC721.adoc#ERC721-symbol--
- :xref-ERC721-tokenURI-uint256-: xref:token/ERC721.adoc#ERC721-tokenURI-uint256-
- :xref-ERC721-_baseURI--: xref:token/ERC721.adoc#ERC721-_baseURI--
- :xref-ERC721-approve-address-uint256-: xref:token/ERC721.adoc#ERC721-approve-address-uint256-
- :xref-ERC721-getApproved-uint256-: xref:token/ERC721.adoc#ERC721-getApproved-uint256-
- :xref-ERC721-setApprovalForAll-address-bool-: xref:token/ERC721.adoc#ERC721-setApprovalForAll-address-bool-
- :xref-ERC721-isApprovedForAll-address-address-: xref:token/ERC721.adoc#ERC721-isApprovedForAll-address-address-
- :xref-ERC721-transferFrom-address-address-uint256-: xref:token/ERC721.adoc#ERC721-transferFrom-address-address-uint256-
- :xref-ERC721-safeTransferFrom-address-address-uint256-: xref:token/ERC721.adoc#ERC721-safeTransferFrom-address-address-uint256-
- :xref-ERC721-safeTransferFrom-address-address-uint256-bytes-: xref:token/ERC721.adoc#ERC721-safeTransferFrom-address-address-uint256-bytes-
- :xref-ERC721-_ownerOf-uint256-: xref:token/ERC721.adoc#ERC721-_ownerOf-uint256-
- :xref-ERC721-_getApproved-uint256-: xref:token/ERC721.adoc#ERC721-_getApproved-uint256-
- :xref-ERC721-_isAuthorized-address-address-uint256-: xref:token/ERC721.adoc#ERC721-_isAuthorized-address-address-uint256-
- :xref-ERC721-_checkAuthorized-address-address-uint256-: xref:token/ERC721.adoc#ERC721-_checkAuthorized-address-address-uint256-
- :xref-ERC721-_increaseBalance-address-uint128-: xref:token/ERC721.adoc#ERC721-_increaseBalance-address-uint128-
- :xref-ERC721-_update-address-uint256-address-: xref:token/ERC721.adoc#ERC721-_update-address-uint256-address-
- :xref-ERC721-_mint-address-uint256-: xref:token/ERC721.adoc#ERC721-_mint-address-uint256-
- :xref-ERC721-_safeMint-address-uint256-: xref:token/ERC721.adoc#ERC721-_safeMint-address-uint256-
- :xref-ERC721-_safeMint-address-uint256-bytes-: xref:token/ERC721.adoc#ERC721-_safeMint-address-uint256-bytes-
- :xref-ERC721-_burn-uint256-: xref:token/ERC721.adoc#ERC721-_burn-uint256-
- :xref-ERC721-_transfer-address-address-uint256-: xref:token/ERC721.adoc#ERC721-_transfer-address-address-uint256-
- :xref-ERC721-_safeTransfer-address-address-uint256-: xref:token/ERC721.adoc#ERC721-_safeTransfer-address-address-uint256-
- :xref-ERC721-_safeTransfer-address-address-uint256-bytes-: xref:token/ERC721.adoc#ERC721-_safeTransfer-address-address-uint256-bytes-
- :xref-ERC721-_approve-address-uint256-address-: xref:token/ERC721.adoc#ERC721-_approve-address-uint256-address-
- :xref-ERC721-_approve-address-uint256-address-bool-: xref:token/ERC721.adoc#ERC721-_approve-address-uint256-address-bool-
- :xref-ERC721-_setApprovalForAll-address-address-bool-: xref:token/ERC721.adoc#ERC721-_setApprovalForAll-address-address-bool-
- :xref-ERC721-_requireOwned-uint256-: xref:token/ERC721.adoc#ERC721-_requireOwned-uint256-
- :xref-IERC721-Transfer-address-address-uint256-: xref:token/ERC721.adoc#IERC721-Transfer-address-address-uint256-
- :xref-IERC721-Approval-address-address-uint256-: xref:token/ERC721.adoc#IERC721-Approval-address-address-uint256-
- :xref-IERC721-ApprovalForAll-address-address-bool-: xref:token/ERC721.adoc#IERC721-ApprovalForAll-address-address-bool-
- :xref-IERC721Errors-ERC721InvalidOwner-address-: xref:interfaces.adoc#IERC721Errors-ERC721InvalidOwner-address-
- :xref-IERC721Errors-ERC721NonexistentToken-uint256-: xref:interfaces.adoc#IERC721Errors-ERC721NonexistentToken-uint256-
- :xref-IERC721Errors-ERC721IncorrectOwner-address-uint256-address-: xref:interfaces.adoc#IERC721Errors-ERC721IncorrectOwner-address-uint256-address-
- :xref-IERC721Errors-ERC721InvalidSender-address-: xref:interfaces.adoc#IERC721Errors-ERC721InvalidSender-address-
- :xref-IERC721Errors-ERC721InvalidReceiver-address-: xref:interfaces.adoc#IERC721Errors-ERC721InvalidReceiver-address-
- :xref-IERC721Errors-ERC721InsufficientApproval-address-uint256-: xref:interfaces.adoc#IERC721Errors-ERC721InsufficientApproval-address-uint256-
- :xref-IERC721Errors-ERC721InvalidApprover-address-: xref:interfaces.adoc#IERC721Errors-ERC721InvalidApprover-address-
- :xref-IERC721Errors-ERC721InvalidOperator-address-: xref:interfaces.adoc#IERC721Errors-ERC721InvalidOperator-address-
- :IERC165-supportsInterface: pass:normal[xref:utils.adoc#IERC165-supportsInterface-bytes4-[`IERC165.supportsInterface`]]
- :IERC721-balanceOf: pass:normal[xref:token/ERC721.adoc#IERC721-balanceOf-address-[`IERC721.balanceOf`]]
- :IERC721-ownerOf: pass:normal[xref:token/ERC721.adoc#IERC721-ownerOf-uint256-[`IERC721.ownerOf`]]
- :IERC721Metadata-name: pass:normal[xref:token/ERC721.adoc#IERC721Metadata-name--[`IERC721Metadata.name`]]
- :IERC721Metadata-symbol: pass:normal[xref:token/ERC721.adoc#IERC721Metadata-symbol--[`IERC721Metadata.symbol`]]
- :IERC721Metadata-tokenURI: pass:normal[xref:token/ERC721.adoc#IERC721Metadata-tokenURI-uint256-[`IERC721Metadata.tokenURI`]]
- :IERC721-approve: pass:normal[xref:token/ERC721.adoc#IERC721-approve-address-uint256-[`IERC721.approve`]]
- :IERC721-getApproved: pass:normal[xref:token/ERC721.adoc#IERC721-getApproved-uint256-[`IERC721.getApproved`]]
- :IERC721-setApprovalForAll: pass:normal[xref:token/ERC721.adoc#IERC721-setApprovalForAll-address-bool-[`IERC721.setApprovalForAll`]]
- :IERC721-isApprovedForAll: pass:normal[xref:token/ERC721.adoc#IERC721-isApprovedForAll-address-address-[`IERC721.isApprovedForAll`]]
- :IERC721-transferFrom: pass:normal[xref:token/ERC721.adoc#IERC721-transferFrom-address-address-uint256-[`IERC721.transferFrom`]]
- :IERC721-safeTransferFrom: pass:normal[xref:token/ERC721.adoc#IERC721-safeTransferFrom-address-address-uint256-[`IERC721.safeTransferFrom`]]
- :IERC721-safeTransferFrom: pass:normal[xref:token/ERC721.adoc#IERC721-safeTransferFrom-address-address-uint256-[`IERC721.safeTransferFrom`]]
- :IERC721Receiver-onERC721Received: pass:normal[xref:token/ERC721.adoc#IERC721Receiver-onERC721Received-address-address-uint256-bytes-[`IERC721Receiver.onERC721Received`]]
- :xref-ERC721-_safeMint-address-uint256-: xref:token/ERC721.adoc#ERC721-_safeMint-address-uint256-
- :IERC721Receiver-onERC721Received: pass:normal[xref:token/ERC721.adoc#IERC721Receiver-onERC721Received-address-address-uint256-bytes-[`IERC721Receiver.onERC721Received`]]
- :IERC721Receiver-onERC721Received: pass:normal[xref:token/ERC721.adoc#IERC721Receiver-onERC721Received-address-address-uint256-bytes-[`IERC721Receiver.onERC721Received`]]
- :IERC721Receiver-onERC721Received: pass:normal[xref:token/ERC721.adoc#IERC721Receiver-onERC721Received-address-address-uint256-bytes-[`IERC721Receiver.onERC721Received`]]
- :xref-ERC721-_safeTransfer-address-address-uint256-: xref:token/ERC721.adoc#ERC721-_safeTransfer-address-address-uint256-
- :IERC721Receiver-onERC721Received: pass:normal[xref:token/ERC721.adoc#IERC721Receiver-onERC721Received-address-address-uint256-bytes-[`IERC721Receiver.onERC721Received`]]
- :ERC721: pass:normal[xref:token/ERC721.adoc#ERC721[`ERC721`]]
- :ERC721: pass:normal[xref:token/ERC721.adoc#ERC721[`ERC721`]]
- :ERC721Consecutive: pass:normal[xref:token/ERC721.adoc#ERC721Consecutive[`ERC721Consecutive`]]
- :ERC721Enumerable: pass:normal[xref:token/ERC721.adoc#ERC721Enumerable[`ERC721Enumerable`]]
- :xref-ERC721Enumerable-supportsInterface-bytes4-: xref:token/ERC721.adoc#ERC721Enumerable-supportsInterface-bytes4-
- :xref-ERC721Enumerable-tokenOfOwnerByIndex-address-uint256-: xref:token/ERC721.adoc#ERC721Enumerable-tokenOfOwnerByIndex-address-uint256-
- :xref-ERC721Enumerable-totalSupply--: xref:token/ERC721.adoc#ERC721Enumerable-totalSupply--
- :xref-ERC721Enumerable-tokenByIndex-uint256-: xref:token/ERC721.adoc#ERC721Enumerable-tokenByIndex-uint256-
- :xref-ERC721Enumerable-_update-address-uint256-address-: xref:token/ERC721.adoc#ERC721Enumerable-_update-address-uint256-address-
- :xref-ERC721Enumerable-_increaseBalance-address-uint128-: xref:token/ERC721.adoc#ERC721Enumerable-_increaseBalance-address-uint128-
- :xref-ERC721-balanceOf-address-: xref:token/ERC721.adoc#ERC721-balanceOf-address-
- :xref-ERC721-ownerOf-uint256-: xref:token/ERC721.adoc#ERC721-ownerOf-uint256-
- :xref-ERC721-name--: xref:token/ERC721.adoc#ERC721-name--
- :xref-ERC721-symbol--: xref:token/ERC721.adoc#ERC721-symbol--
- :xref-ERC721-tokenURI-uint256-: xref:token/ERC721.adoc#ERC721-tokenURI-uint256-
- :xref-ERC721-_baseURI--: xref:token/ERC721.adoc#ERC721-_baseURI--
- :xref-ERC721-approve-address-uint256-: xref:token/ERC721.adoc#ERC721-approve-address-uint256-
- :xref-ERC721-getApproved-uint256-: xref:token/ERC721.adoc#ERC721-getApproved-uint256-
- :xref-ERC721-setApprovalForAll-address-bool-: xref:token/ERC721.adoc#ERC721-setApprovalForAll-address-bool-
- :xref-ERC721-isApprovedForAll-address-address-: xref:token/ERC721.adoc#ERC721-isApprovedForAll-address-address-
- :xref-ERC721-transferFrom-address-address-uint256-: xref:token/ERC721.adoc#ERC721-transferFrom-address-address-uint256-
- :xref-ERC721-safeTransferFrom-address-address-uint256-: xref:token/ERC721.adoc#ERC721-safeTransferFrom-address-address-uint256-
- :xref-ERC721-safeTransferFrom-address-address-uint256-bytes-: xref:token/ERC721.adoc#ERC721-safeTransferFrom-address-address-uint256-bytes-
- :xref-ERC721-_ownerOf-uint256-: xref:token/ERC721.adoc#ERC721-_ownerOf-uint256-
- :xref-ERC721-_getApproved-uint256-: xref:token/ERC721.adoc#ERC721-_getApproved-uint256-
- :xref-ERC721-_isAuthorized-address-address-uint256-: xref:token/ERC721.adoc#ERC721-_isAuthorized-address-address-uint256-
- :xref-ERC721-_checkAuthorized-address-address-uint256-: xref:token/ERC721.adoc#ERC721-_checkAuthorized-address-address-uint256-
- :xref-ERC721-_mint-address-uint256-: xref:token/ERC721.adoc#ERC721-_mint-address-uint256-
- :xref-ERC721-_safeMint-address-uint256-: xref:token/ERC721.adoc#ERC721-_safeMint-address-uint256-
- :xref-ERC721-_safeMint-address-uint256-bytes-: xref:token/ERC721.adoc#ERC721-_safeMint-address-uint256-bytes-
- :xref-ERC721-_burn-uint256-: xref:token/ERC721.adoc#ERC721-_burn-uint256-
- :xref-ERC721-_transfer-address-address-uint256-: xref:token/ERC721.adoc#ERC721-_transfer-address-address-uint256-
- :xref-ERC721-_safeTransfer-address-address-uint256-: xref:token/ERC721.adoc#ERC721-_safeTransfer-address-address-uint256-
- :xref-ERC721-_safeTransfer-address-address-uint256-bytes-: xref:token/ERC721.adoc#ERC721-_safeTransfer-address-address-uint256-bytes-
- :xref-ERC721-_approve-address-uint256-address-: xref:token/ERC721.adoc#ERC721-_approve-address-uint256-address-
- :xref-ERC721-_approve-address-uint256-address-bool-: xref:token/ERC721.adoc#ERC721-_approve-address-uint256-address-bool-
- :xref-ERC721-_setApprovalForAll-address-address-bool-: xref:token/ERC721.adoc#ERC721-_setApprovalForAll-address-address-bool-
- :xref-ERC721-_requireOwned-uint256-: xref:token/ERC721.adoc#ERC721-_requireOwned-uint256-
- :xref-IERC721-Transfer-address-address-uint256-: xref:token/ERC721.adoc#IERC721-Transfer-address-address-uint256-
- :xref-IERC721-Approval-address-address-uint256-: xref:token/ERC721.adoc#IERC721-Approval-address-address-uint256-
- :xref-IERC721-ApprovalForAll-address-address-bool-: xref:token/ERC721.adoc#IERC721-ApprovalForAll-address-address-bool-
- :xref-ERC721Enumerable-ERC721OutOfBoundsIndex-address-uint256-: xref:token/ERC721.adoc#ERC721Enumerable-ERC721OutOfBoundsIndex-address-uint256-
- :xref-ERC721Enumerable-ERC721EnumerableForbiddenBatchMint--: xref:token/ERC721.adoc#ERC721Enumerable-ERC721EnumerableForbiddenBatchMint--
- :xref-IERC721Errors-ERC721InvalidOwner-address-: xref:interfaces.adoc#IERC721Errors-ERC721InvalidOwner-address-
- :xref-IERC721Errors-ERC721NonexistentToken-uint256-: xref:interfaces.adoc#IERC721Errors-ERC721NonexistentToken-uint256-
- :xref-IERC721Errors-ERC721IncorrectOwner-address-uint256-address-: xref:interfaces.adoc#IERC721Errors-ERC721IncorrectOwner-address-uint256-address-
- :xref-IERC721Errors-ERC721InvalidSender-address-: xref:interfaces.adoc#IERC721Errors-ERC721InvalidSender-address-
- :xref-IERC721Errors-ERC721InvalidReceiver-address-: xref:interfaces.adoc#IERC721Errors-ERC721InvalidReceiver-address-
- :xref-IERC721Errors-ERC721InsufficientApproval-address-uint256-: xref:interfaces.adoc#IERC721Errors-ERC721InsufficientApproval-address-uint256-
- :xref-IERC721Errors-ERC721InvalidApprover-address-: xref:interfaces.adoc#IERC721Errors-ERC721InvalidApprover-address-
- :xref-IERC721Errors-ERC721InvalidOperator-address-: xref:interfaces.adoc#IERC721Errors-ERC721InvalidOperator-address-
- :IERC165-supportsInterface: pass:normal[xref:utils.adoc#IERC165-supportsInterface-bytes4-[`IERC165.supportsInterface`]]
- :IERC721Enumerable-tokenOfOwnerByIndex: pass:normal[xref:token/ERC721.adoc#IERC721Enumerable-tokenOfOwnerByIndex-address-uint256-[`IERC721Enumerable.tokenOfOwnerByIndex`]]
- :IERC721Enumerable-totalSupply: pass:normal[xref:token/ERC721.adoc#IERC721Enumerable-totalSupply--[`IERC721Enumerable.totalSupply`]]
- :IERC721Enumerable-tokenByIndex: pass:normal[xref:token/ERC721.adoc#IERC721Enumerable-tokenByIndex-uint256-[`IERC721Enumerable.tokenByIndex`]]
- :ERC721-_update: pass:normal[xref:token/ERC721.adoc#ERC721-_update-address-uint256-address-[`ERC721._update`]]
- :xref-IERC721Receiver-onERC721Received-address-address-uint256-bytes-: xref:token/ERC721.adoc#IERC721Receiver-onERC721Received-address-address-uint256-bytes-
- :IERC721: pass:normal[xref:token/ERC721.adoc#IERC721[`IERC721`]]
- :IERC721-safeTransferFrom: pass:normal[xref:token/ERC721.adoc#IERC721-safeTransferFrom-address-address-uint256-[`IERC721.safeTransferFrom`]]
- :Pausable-_pause: pass:normal[xref:utils.adoc#Pausable-_pause--[`Pausable._pause`]]
- :Pausable-_unpause: pass:normal[xref:utils.adoc#Pausable-_unpause--[`Pausable._unpause`]]
- :AccessControl: pass:normal[xref:access.adoc#AccessControl[`AccessControl`]]
- :Ownable: pass:normal[xref:access.adoc#Ownable[`Ownable`]]
- :xref-ERC721Pausable-_update-address-uint256-address-: xref:token/ERC721.adoc#ERC721Pausable-_update-address-uint256-address-
- :xref-Pausable-paused--: xref:utils.adoc#Pausable-paused--
- :xref-Pausable-_requireNotPaused--: xref:utils.adoc#Pausable-_requireNotPaused--
- :xref-Pausable-_requirePaused--: xref:utils.adoc#Pausable-_requirePaused--
- :xref-Pausable-_pause--: xref:utils.adoc#Pausable-_pause--
- :xref-Pausable-_unpause--: xref:utils.adoc#Pausable-_unpause--
- :xref-ERC721-supportsInterface-bytes4-: xref:token/ERC721.adoc#ERC721-supportsInterface-bytes4-
- :xref-ERC721-balanceOf-address-: xref:token/ERC721.adoc#ERC721-balanceOf-address-
- :xref-ERC721-ownerOf-uint256-: xref:token/ERC721.adoc#ERC721-ownerOf-uint256-
- :xref-ERC721-name--: xref:token/ERC721.adoc#ERC721-name--
- :xref-ERC721-symbol--: xref:token/ERC721.adoc#ERC721-symbol--
- :xref-ERC721-tokenURI-uint256-: xref:token/ERC721.adoc#ERC721-tokenURI-uint256-
- :xref-ERC721-_baseURI--: xref:token/ERC721.adoc#ERC721-_baseURI--
- :xref-ERC721-approve-address-uint256-: xref:token/ERC721.adoc#ERC721-approve-address-uint256-
- :xref-ERC721-getApproved-uint256-: xref:token/ERC721.adoc#ERC721-getApproved-uint256-
- :xref-ERC721-setApprovalForAll-address-bool-: xref:token/ERC721.adoc#ERC721-setApprovalForAll-address-bool-
- :xref-ERC721-isApprovedForAll-address-address-: xref:token/ERC721.adoc#ERC721-isApprovedForAll-address-address-
- :xref-ERC721-transferFrom-address-address-uint256-: xref:token/ERC721.adoc#ERC721-transferFrom-address-address-uint256-
- :xref-ERC721-safeTransferFrom-address-address-uint256-: xref:token/ERC721.adoc#ERC721-safeTransferFrom-address-address-uint256-
- :xref-ERC721-safeTransferFrom-address-address-uint256-bytes-: xref:token/ERC721.adoc#ERC721-safeTransferFrom-address-address-uint256-bytes-
- :xref-ERC721-_ownerOf-uint256-: xref:token/ERC721.adoc#ERC721-_ownerOf-uint256-
- :xref-ERC721-_getApproved-uint256-: xref:token/ERC721.adoc#ERC721-_getApproved-uint256-
- :xref-ERC721-_isAuthorized-address-address-uint256-: xref:token/ERC721.adoc#ERC721-_isAuthorized-address-address-uint256-
- :xref-ERC721-_checkAuthorized-address-address-uint256-: xref:token/ERC721.adoc#ERC721-_checkAuthorized-address-address-uint256-
- :xref-ERC721-_increaseBalance-address-uint128-: xref:token/ERC721.adoc#ERC721-_increaseBalance-address-uint128-
- :xref-ERC721-_mint-address-uint256-: xref:token/ERC721.adoc#ERC721-_mint-address-uint256-
- :xref-ERC721-_safeMint-address-uint256-: xref:token/ERC721.adoc#ERC721-_safeMint-address-uint256-
- :xref-ERC721-_safeMint-address-uint256-bytes-: xref:token/ERC721.adoc#ERC721-_safeMint-address-uint256-bytes-
- :xref-ERC721-_burn-uint256-: xref:token/ERC721.adoc#ERC721-_burn-uint256-
- :xref-ERC721-_transfer-address-address-uint256-: xref:token/ERC721.adoc#ERC721-_transfer-address-address-uint256-
- :xref-ERC721-_safeTransfer-address-address-uint256-: xref:token/ERC721.adoc#ERC721-_safeTransfer-address-address-uint256-
- :xref-ERC721-_safeTransfer-address-address-uint256-bytes-: xref:token/ERC721.adoc#ERC721-_safeTransfer-address-address-uint256-bytes-
- :xref-ERC721-_approve-address-uint256-address-: xref:token/ERC721.adoc#ERC721-_approve-address-uint256-address-
- :xref-ERC721-_approve-address-uint256-address-bool-: xref:token/ERC721.adoc#ERC721-_approve-address-uint256-address-bool-
- :xref-ERC721-_setApprovalForAll-address-address-bool-: xref:token/ERC721.adoc#ERC721-_setApprovalForAll-address-address-bool-
- :xref-ERC721-_requireOwned-uint256-: xref:token/ERC721.adoc#ERC721-_requireOwned-uint256-
- :xref-Pausable-Paused-address-: xref:utils.adoc#Pausable-Paused-address-
- :xref-Pausable-Unpaused-address-: xref:utils.adoc#Pausable-Unpaused-address-
- :xref-IERC721-Transfer-address-address-uint256-: xref:token/ERC721.adoc#IERC721-Transfer-address-address-uint256-
- :xref-IERC721-Approval-address-address-uint256-: xref:token/ERC721.adoc#IERC721-Approval-address-address-uint256-
- :xref-IERC721-ApprovalForAll-address-address-bool-: xref:token/ERC721.adoc#IERC721-ApprovalForAll-address-address-bool-
- :xref-Pausable-EnforcedPause--: xref:utils.adoc#Pausable-EnforcedPause--
- :xref-Pausable-ExpectedPause--: xref:utils.adoc#Pausable-ExpectedPause--
- :xref-IERC721Errors-ERC721InvalidOwner-address-: xref:interfaces.adoc#IERC721Errors-ERC721InvalidOwner-address-
- :xref-IERC721Errors-ERC721NonexistentToken-uint256-: xref:interfaces.adoc#IERC721Errors-ERC721NonexistentToken-uint256-
- :xref-IERC721Errors-ERC721IncorrectOwner-address-uint256-address-: xref:interfaces.adoc#IERC721Errors-ERC721IncorrectOwner-address-uint256-address-
- :xref-IERC721Errors-ERC721InvalidSender-address-: xref:interfaces.adoc#IERC721Errors-ERC721InvalidSender-address-
- :xref-IERC721Errors-ERC721InvalidReceiver-address-: xref:interfaces.adoc#IERC721Errors-ERC721InvalidReceiver-address-
- :xref-IERC721Errors-ERC721InsufficientApproval-address-uint256-: xref:interfaces.adoc#IERC721Errors-ERC721InsufficientApproval-address-uint256-
- :xref-IERC721Errors-ERC721InvalidApprover-address-: xref:interfaces.adoc#IERC721Errors-ERC721InvalidApprover-address-
- :xref-IERC721Errors-ERC721InvalidOperator-address-: xref:interfaces.adoc#IERC721Errors-ERC721InvalidOperator-address-
- :ERC721-_update: pass:normal[xref:token/ERC721.adoc#ERC721-_update-address-uint256-address-[`ERC721._update`]]
- :xref-ERC721Burnable-burn-uint256-: xref:token/ERC721.adoc#ERC721Burnable-burn-uint256-
- :xref-ERC721-supportsInterface-bytes4-: xref:token/ERC721.adoc#ERC721-supportsInterface-bytes4-
- :xref-ERC721-balanceOf-address-: xref:token/ERC721.adoc#ERC721-balanceOf-address-
- :xref-ERC721-ownerOf-uint256-: xref:token/ERC721.adoc#ERC721-ownerOf-uint256-
- :xref-ERC721-name--: xref:token/ERC721.adoc#ERC721-name--
- :xref-ERC721-symbol--: xref:token/ERC721.adoc#ERC721-symbol--
- :xref-ERC721-tokenURI-uint256-: xref:token/ERC721.adoc#ERC721-tokenURI-uint256-
- :xref-ERC721-_baseURI--: xref:token/ERC721.adoc#ERC721-_baseURI--
- :xref-ERC721-approve-address-uint256-: xref:token/ERC721.adoc#ERC721-approve-address-uint256-
- :xref-ERC721-getApproved-uint256-: xref:token/ERC721.adoc#ERC721-getApproved-uint256-
- :xref-ERC721-setApprovalForAll-address-bool-: xref:token/ERC721.adoc#ERC721-setApprovalForAll-address-bool-
- :xref-ERC721-isApprovedForAll-address-address-: xref:token/ERC721.adoc#ERC721-isApprovedForAll-address-address-
- :xref-ERC721-transferFrom-address-address-uint256-: xref:token/ERC721.adoc#ERC721-transferFrom-address-address-uint256-
- :xref-ERC721-safeTransferFrom-address-address-uint256-: xref:token/ERC721.adoc#ERC721-safeTransferFrom-address-address-uint256-
- :xref-ERC721-safeTransferFrom-address-address-uint256-bytes-: xref:token/ERC721.adoc#ERC721-safeTransferFrom-address-address-uint256-bytes-
- :xref-ERC721-_ownerOf-uint256-: xref:token/ERC721.adoc#ERC721-_ownerOf-uint256-
- :xref-ERC721-_getApproved-uint256-: xref:token/ERC721.adoc#ERC721-_getApproved-uint256-
- :xref-ERC721-_isAuthorized-address-address-uint256-: xref:token/ERC721.adoc#ERC721-_isAuthorized-address-address-uint256-
- :xref-ERC721-_checkAuthorized-address-address-uint256-: xref:token/ERC721.adoc#ERC721-_checkAuthorized-address-address-uint256-
- :xref-ERC721-_increaseBalance-address-uint128-: xref:token/ERC721.adoc#ERC721-_increaseBalance-address-uint128-
- :xref-ERC721-_update-address-uint256-address-: xref:token/ERC721.adoc#ERC721-_update-address-uint256-address-
- :xref-ERC721-_mint-address-uint256-: xref:token/ERC721.adoc#ERC721-_mint-address-uint256-
- :xref-ERC721-_safeMint-address-uint256-: xref:token/ERC721.adoc#ERC721-_safeMint-address-uint256-
- :xref-ERC721-_safeMint-address-uint256-bytes-: xref:token/ERC721.adoc#ERC721-_safeMint-address-uint256-bytes-
- :xref-ERC721-_burn-uint256-: xref:token/ERC721.adoc#ERC721-_burn-uint256-
- :xref-ERC721-_transfer-address-address-uint256-: xref:token/ERC721.adoc#ERC721-_transfer-address-address-uint256-
- :xref-ERC721-_safeTransfer-address-address-uint256-: xref:token/ERC721.adoc#ERC721-_safeTransfer-address-address-uint256-
- :xref-ERC721-_safeTransfer-address-address-uint256-bytes-: xref:token/ERC721.adoc#ERC721-_safeTransfer-address-address-uint256-bytes-
- :xref-ERC721-_approve-address-uint256-address-: xref:token/ERC721.adoc#ERC721-_approve-address-uint256-address-
- :xref-ERC721-_approve-address-uint256-address-bool-: xref:token/ERC721.adoc#ERC721-_approve-address-uint256-address-bool-
- :xref-ERC721-_setApprovalForAll-address-address-bool-: xref:token/ERC721.adoc#ERC721-_setApprovalForAll-address-address-bool-
- :xref-ERC721-_requireOwned-uint256-: xref:token/ERC721.adoc#ERC721-_requireOwned-uint256-
- :xref-IERC721-Transfer-address-address-uint256-: xref:token/ERC721.adoc#IERC721-Transfer-address-address-uint256-
- :xref-IERC721-Approval-address-address-uint256-: xref:token/ERC721.adoc#IERC721-Approval-address-address-uint256-
- :xref-IERC721-ApprovalForAll-address-address-bool-: xref:token/ERC721.adoc#IERC721-ApprovalForAll-address-address-bool-
- :xref-IERC721Errors-ERC721InvalidOwner-address-: xref:interfaces.adoc#IERC721Errors-ERC721InvalidOwner-address-
- :xref-IERC721Errors-ERC721NonexistentToken-uint256-: xref:interfaces.adoc#IERC721Errors-ERC721NonexistentToken-uint256-
- :xref-IERC721Errors-ERC721IncorrectOwner-address-uint256-address-: xref:interfaces.adoc#IERC721Errors-ERC721IncorrectOwner-address-uint256-address-
- :xref-IERC721Errors-ERC721InvalidSender-address-: xref:interfaces.adoc#IERC721Errors-ERC721InvalidSender-address-
- :xref-IERC721Errors-ERC721InvalidReceiver-address-: xref:interfaces.adoc#IERC721Errors-ERC721InvalidReceiver-address-
- :xref-IERC721Errors-ERC721InsufficientApproval-address-uint256-: xref:interfaces.adoc#IERC721Errors-ERC721InsufficientApproval-address-uint256-
- :xref-IERC721Errors-ERC721InvalidApprover-address-: xref:interfaces.adoc#IERC721Errors-ERC721InvalidApprover-address-
- :xref-IERC721Errors-ERC721InvalidOperator-address-: xref:interfaces.adoc#IERC721Errors-ERC721InvalidOperator-address-
- :ERC721-_burn: pass:normal[xref:token/ERC721.adoc#ERC721-_burn-uint256-[`ERC721._burn`]]
- :xref-ERC721Consecutive-_maxBatchSize--: xref:token/ERC721.adoc#ERC721Consecutive-_maxBatchSize--
- :xref-ERC721Consecutive-_ownerOf-uint256-: xref:token/ERC721.adoc#ERC721Consecutive-_ownerOf-uint256-
- :xref-ERC721Consecutive-_mintConsecutive-address-uint96-: xref:token/ERC721.adoc#ERC721Consecutive-_mintConsecutive-address-uint96-
- :xref-ERC721Consecutive-_update-address-uint256-address-: xref:token/ERC721.adoc#ERC721Consecutive-_update-address-uint256-address-
- :xref-ERC721Consecutive-_firstConsecutiveId--: xref:token/ERC721.adoc#ERC721Consecutive-_firstConsecutiveId--
- :xref-ERC721-supportsInterface-bytes4-: xref:token/ERC721.adoc#ERC721-supportsInterface-bytes4-
- :xref-ERC721-balanceOf-address-: xref:token/ERC721.adoc#ERC721-balanceOf-address-
- :xref-ERC721-ownerOf-uint256-: xref:token/ERC721.adoc#ERC721-ownerOf-uint256-
- :xref-ERC721-name--: xref:token/ERC721.adoc#ERC721-name--
- :xref-ERC721-symbol--: xref:token/ERC721.adoc#ERC721-symbol--
- :xref-ERC721-tokenURI-uint256-: xref:token/ERC721.adoc#ERC721-tokenURI-uint256-
- :xref-ERC721-_baseURI--: xref:token/ERC721.adoc#ERC721-_baseURI--
- :xref-ERC721-approve-address-uint256-: xref:token/ERC721.adoc#ERC721-approve-address-uint256-
- :xref-ERC721-getApproved-uint256-: xref:token/ERC721.adoc#ERC721-getApproved-uint256-
- :xref-ERC721-setApprovalForAll-address-bool-: xref:token/ERC721.adoc#ERC721-setApprovalForAll-address-bool-
- :xref-ERC721-isApprovedForAll-address-address-: xref:token/ERC721.adoc#ERC721-isApprovedForAll-address-address-
- :xref-ERC721-transferFrom-address-address-uint256-: xref:token/ERC721.adoc#ERC721-transferFrom-address-address-uint256-
- :xref-ERC721-safeTransferFrom-address-address-uint256-: xref:token/ERC721.adoc#ERC721-safeTransferFrom-address-address-uint256-
- :xref-ERC721-safeTransferFrom-address-address-uint256-bytes-: xref:token/ERC721.adoc#ERC721-safeTransferFrom-address-address-uint256-bytes-
- :xref-ERC721-_getApproved-uint256-: xref:token/ERC721.adoc#ERC721-_getApproved-uint256-
- :xref-ERC721-_isAuthorized-address-address-uint256-: xref:token/ERC721.adoc#ERC721-_isAuthorized-address-address-uint256-
- :xref-ERC721-_checkAuthorized-address-address-uint256-: xref:token/ERC721.adoc#ERC721-_checkAuthorized-address-address-uint256-
- :xref-ERC721-_increaseBalance-address-uint128-: xref:token/ERC721.adoc#ERC721-_increaseBalance-address-uint128-
- :xref-ERC721-_mint-address-uint256-: xref:token/ERC721.adoc#ERC721-_mint-address-uint256-
- :xref-ERC721-_safeMint-address-uint256-: xref:token/ERC721.adoc#ERC721-_safeMint-address-uint256-
- :xref-ERC721-_safeMint-address-uint256-bytes-: xref:token/ERC721.adoc#ERC721-_safeMint-address-uint256-bytes-
- :xref-ERC721-_burn-uint256-: xref:token/ERC721.adoc#ERC721-_burn-uint256-
- :xref-ERC721-_transfer-address-address-uint256-: xref:token/ERC721.adoc#ERC721-_transfer-address-address-uint256-
- :xref-ERC721-_safeTransfer-address-address-uint256-: xref:token/ERC721.adoc#ERC721-_safeTransfer-address-address-uint256-
- :xref-ERC721-_safeTransfer-address-address-uint256-bytes-: xref:token/ERC721.adoc#ERC721-_safeTransfer-address-address-uint256-bytes-
- :xref-ERC721-_approve-address-uint256-address-: xref:token/ERC721.adoc#ERC721-_approve-address-uint256-address-
- :xref-ERC721-_approve-address-uint256-address-bool-: xref:token/ERC721.adoc#ERC721-_approve-address-uint256-address-bool-
- :xref-ERC721-_setApprovalForAll-address-address-bool-: xref:token/ERC721.adoc#ERC721-_setApprovalForAll-address-address-bool-
- :xref-ERC721-_requireOwned-uint256-: xref:token/ERC721.adoc#ERC721-_requireOwned-uint256-
- :xref-IERC721-Transfer-address-address-uint256-: xref:token/ERC721.adoc#IERC721-Transfer-address-address-uint256-
- :xref-IERC721-Approval-address-address-uint256-: xref:token/ERC721.adoc#IERC721-Approval-address-address-uint256-
- :xref-IERC721-ApprovalForAll-address-address-bool-: xref:token/ERC721.adoc#IERC721-ApprovalForAll-address-address-bool-
- :xref-IERC2309-ConsecutiveTransfer-uint256-uint256-address-address-: xref:interfaces.adoc#IERC2309-ConsecutiveTransfer-uint256-uint256-address-address-
- :xref-ERC721Consecutive-ERC721ForbiddenBatchMint--: xref:token/ERC721.adoc#ERC721Consecutive-ERC721ForbiddenBatchMint--
- :xref-ERC721Consecutive-ERC721ExceededMaxBatchMint-uint256-uint256-: xref:token/ERC721.adoc#ERC721Consecutive-ERC721ExceededMaxBatchMint-uint256-uint256-
- :xref-ERC721Consecutive-ERC721ForbiddenMint--: xref:token/ERC721.adoc#ERC721Consecutive-ERC721ForbiddenMint--
- :xref-ERC721Consecutive-ERC721ForbiddenBatchBurn--: xref:token/ERC721.adoc#ERC721Consecutive-ERC721ForbiddenBatchBurn--
- :xref-IERC721Errors-ERC721InvalidOwner-address-: xref:interfaces.adoc#IERC721Errors-ERC721InvalidOwner-address-
- :xref-IERC721Errors-ERC721NonexistentToken-uint256-: xref:interfaces.adoc#IERC721Errors-ERC721NonexistentToken-uint256-
- :xref-IERC721Errors-ERC721IncorrectOwner-address-uint256-address-: xref:interfaces.adoc#IERC721Errors-ERC721IncorrectOwner-address-uint256-address-
- :xref-IERC721Errors-ERC721InvalidSender-address-: xref:interfaces.adoc#IERC721Errors-ERC721InvalidSender-address-
- :xref-IERC721Errors-ERC721InvalidReceiver-address-: xref:interfaces.adoc#IERC721Errors-ERC721InvalidReceiver-address-
- :xref-IERC721Errors-ERC721InsufficientApproval-address-uint256-: xref:interfaces.adoc#IERC721Errors-ERC721InsufficientApproval-address-uint256-
- :xref-IERC721Errors-ERC721InvalidApprover-address-: xref:interfaces.adoc#IERC721Errors-ERC721InvalidApprover-address-
- :xref-IERC721Errors-ERC721InvalidOperator-address-: xref:interfaces.adoc#IERC721Errors-ERC721InvalidOperator-address-
- :ERC721-_ownerOf: pass:normal[xref:token/ERC721.adoc#ERC721-_ownerOf-uint256-[`ERC721._ownerOf`]]
- :IERC2309-ConsecutiveTransfer: pass:normal[xref:interfaces.adoc#IERC2309-ConsecutiveTransfer-uint256-uint256-address-address-[`IERC2309.ConsecutiveTransfer`]]
- :ERC721-_update: pass:normal[xref:token/ERC721.adoc#ERC721-_update-address-uint256-address-[`ERC721._update`]]
- :ERC721Consecutive: pass:normal[xref:token/ERC721.adoc#ERC721Consecutive[`ERC721Consecutive`]]
- :IERC721-Transfer: pass:normal[xref:token/ERC721.adoc#IERC721-Transfer-address-address-uint256-[`IERC721.Transfer`]]
- :xref-ERC721URIStorage-supportsInterface-bytes4-: xref:token/ERC721.adoc#ERC721URIStorage-supportsInterface-bytes4-
- :xref-ERC721URIStorage-tokenURI-uint256-: xref:token/ERC721.adoc#ERC721URIStorage-tokenURI-uint256-
- :xref-ERC721URIStorage-_setTokenURI-uint256-string-: xref:token/ERC721.adoc#ERC721URIStorage-_setTokenURI-uint256-string-
- :xref-ERC721-balanceOf-address-: xref:token/ERC721.adoc#ERC721-balanceOf-address-
- :xref-ERC721-ownerOf-uint256-: xref:token/ERC721.adoc#ERC721-ownerOf-uint256-
- :xref-ERC721-name--: xref:token/ERC721.adoc#ERC721-name--
- :xref-ERC721-symbol--: xref:token/ERC721.adoc#ERC721-symbol--
- :xref-ERC721-_baseURI--: xref:token/ERC721.adoc#ERC721-_baseURI--
- :xref-ERC721-approve-address-uint256-: xref:token/ERC721.adoc#ERC721-approve-address-uint256-
- :xref-ERC721-getApproved-uint256-: xref:token/ERC721.adoc#ERC721-getApproved-uint256-
- :xref-ERC721-setApprovalForAll-address-bool-: xref:token/ERC721.adoc#ERC721-setApprovalForAll-address-bool-
- :xref-ERC721-isApprovedForAll-address-address-: xref:token/ERC721.adoc#ERC721-isApprovedForAll-address-address-
- :xref-ERC721-transferFrom-address-address-uint256-: xref:token/ERC721.adoc#ERC721-transferFrom-address-address-uint256-
- :xref-ERC721-safeTransferFrom-address-address-uint256-: xref:token/ERC721.adoc#ERC721-safeTransferFrom-address-address-uint256-
- :xref-ERC721-safeTransferFrom-address-address-uint256-bytes-: xref:token/ERC721.adoc#ERC721-safeTransferFrom-address-address-uint256-bytes-
- :xref-ERC721-_ownerOf-uint256-: xref:token/ERC721.adoc#ERC721-_ownerOf-uint256-
- :xref-ERC721-_getApproved-uint256-: xref:token/ERC721.adoc#ERC721-_getApproved-uint256-
- :xref-ERC721-_isAuthorized-address-address-uint256-: xref:token/ERC721.adoc#ERC721-_isAuthorized-address-address-uint256-
- :xref-ERC721-_checkAuthorized-address-address-uint256-: xref:token/ERC721.adoc#ERC721-_checkAuthorized-address-address-uint256-
- :xref-ERC721-_increaseBalance-address-uint128-: xref:token/ERC721.adoc#ERC721-_increaseBalance-address-uint128-
- :xref-ERC721-_update-address-uint256-address-: xref:token/ERC721.adoc#ERC721-_update-address-uint256-address-
- :xref-ERC721-_mint-address-uint256-: xref:token/ERC721.adoc#ERC721-_mint-address-uint256-
- :xref-ERC721-_safeMint-address-uint256-: xref:token/ERC721.adoc#ERC721-_safeMint-address-uint256-
- :xref-ERC721-_safeMint-address-uint256-bytes-: xref:token/ERC721.adoc#ERC721-_safeMint-address-uint256-bytes-
- :xref-ERC721-_burn-uint256-: xref:token/ERC721.adoc#ERC721-_burn-uint256-
- :xref-ERC721-_transfer-address-address-uint256-: xref:token/ERC721.adoc#ERC721-_transfer-address-address-uint256-
- :xref-ERC721-_safeTransfer-address-address-uint256-: xref:token/ERC721.adoc#ERC721-_safeTransfer-address-address-uint256-
- :xref-ERC721-_safeTransfer-address-address-uint256-bytes-: xref:token/ERC721.adoc#ERC721-_safeTransfer-address-address-uint256-bytes-
- :xref-ERC721-_approve-address-uint256-address-: xref:token/ERC721.adoc#ERC721-_approve-address-uint256-address-
- :xref-ERC721-_approve-address-uint256-address-bool-: xref:token/ERC721.adoc#ERC721-_approve-address-uint256-address-bool-
- :xref-ERC721-_setApprovalForAll-address-address-bool-: xref:token/ERC721.adoc#ERC721-_setApprovalForAll-address-address-bool-
- :xref-ERC721-_requireOwned-uint256-: xref:token/ERC721.adoc#ERC721-_requireOwned-uint256-
- :xref-IERC4906-MetadataUpdate-uint256-: xref:interfaces.adoc#IERC4906-MetadataUpdate-uint256-
- :xref-IERC4906-BatchMetadataUpdate-uint256-uint256-: xref:interfaces.adoc#IERC4906-BatchMetadataUpdate-uint256-uint256-
- :xref-IERC721-Transfer-address-address-uint256-: xref:token/ERC721.adoc#IERC721-Transfer-address-address-uint256-
- :xref-IERC721-Approval-address-address-uint256-: xref:token/ERC721.adoc#IERC721-Approval-address-address-uint256-
- :xref-IERC721-ApprovalForAll-address-address-bool-: xref:token/ERC721.adoc#IERC721-ApprovalForAll-address-address-bool-
- :xref-IERC721Errors-ERC721InvalidOwner-address-: xref:interfaces.adoc#IERC721Errors-ERC721InvalidOwner-address-
- :xref-IERC721Errors-ERC721NonexistentToken-uint256-: xref:interfaces.adoc#IERC721Errors-ERC721NonexistentToken-uint256-
- :xref-IERC721Errors-ERC721IncorrectOwner-address-uint256-address-: xref:interfaces.adoc#IERC721Errors-ERC721IncorrectOwner-address-uint256-address-
- :xref-IERC721Errors-ERC721InvalidSender-address-: xref:interfaces.adoc#IERC721Errors-ERC721InvalidSender-address-
- :xref-IERC721Errors-ERC721InvalidReceiver-address-: xref:interfaces.adoc#IERC721Errors-ERC721InvalidReceiver-address-
- :xref-IERC721Errors-ERC721InsufficientApproval-address-uint256-: xref:interfaces.adoc#IERC721Errors-ERC721InsufficientApproval-address-uint256-
- :xref-IERC721Errors-ERC721InvalidApprover-address-: xref:interfaces.adoc#IERC721Errors-ERC721InvalidApprover-address-
- :xref-IERC721Errors-ERC721InvalidOperator-address-: xref:interfaces.adoc#IERC721Errors-ERC721InvalidOperator-address-
- :IERC165-supportsInterface: pass:normal[xref:utils.adoc#IERC165-supportsInterface-bytes4-[`IERC165.supportsInterface`]]
- :IERC721Metadata-tokenURI: pass:normal[xref:token/ERC721.adoc#IERC721Metadata-tokenURI-uint256-[`IERC721Metadata.tokenURI`]]
- :Votes: pass:normal[xref:governance.adoc#Votes[`Votes`]]
- :xref-ERC721Votes-_update-address-uint256-address-: xref:token/ERC721.adoc#ERC721Votes-_update-address-uint256-address-
- :xref-ERC721Votes-_getVotingUnits-address-: xref:token/ERC721.adoc#ERC721Votes-_getVotingUnits-address-
- :xref-ERC721Votes-_increaseBalance-address-uint128-: xref:token/ERC721.adoc#ERC721Votes-_increaseBalance-address-uint128-
- :xref-Votes-clock--: xref:governance.adoc#Votes-clock--
- :xref-Votes-CLOCK_MODE--: xref:governance.adoc#Votes-CLOCK_MODE--
- :xref-Votes-getVotes-address-: xref:governance.adoc#Votes-getVotes-address-
- :xref-Votes-getPastVotes-address-uint256-: xref:governance.adoc#Votes-getPastVotes-address-uint256-
- :xref-Votes-getPastTotalSupply-uint256-: xref:governance.adoc#Votes-getPastTotalSupply-uint256-
- :xref-Votes-_getTotalSupply--: xref:governance.adoc#Votes-_getTotalSupply--
- :xref-Votes-delegates-address-: xref:governance.adoc#Votes-delegates-address-
- :xref-Votes-delegate-address-: xref:governance.adoc#Votes-delegate-address-
- :xref-Votes-delegateBySig-address-uint256-uint256-uint8-bytes32-bytes32-: xref:governance.adoc#Votes-delegateBySig-address-uint256-uint256-uint8-bytes32-bytes32-
- :xref-Votes-_delegate-address-address-: xref:governance.adoc#Votes-_delegate-address-address-
- :xref-Votes-_transferVotingUnits-address-address-uint256-: xref:governance.adoc#Votes-_transferVotingUnits-address-address-uint256-
- :xref-Votes-_moveDelegateVotes-address-address-uint256-: xref:governance.adoc#Votes-_moveDelegateVotes-address-address-uint256-
- :xref-Votes-_numCheckpoints-address-: xref:governance.adoc#Votes-_numCheckpoints-address-
- :xref-Votes-_checkpoints-address-uint32-: xref:governance.adoc#Votes-_checkpoints-address-uint32-
- :xref-Nonces-nonces-address-: xref:utils.adoc#Nonces-nonces-address-
- :xref-Nonces-_useNonce-address-: xref:utils.adoc#Nonces-_useNonce-address-
- :xref-Nonces-_useCheckedNonce-address-uint256-: xref:utils.adoc#Nonces-_useCheckedNonce-address-uint256-
- :xref-EIP712-_domainSeparatorV4--: xref:utils.adoc#EIP712-_domainSeparatorV4--
- :xref-EIP712-_hashTypedDataV4-bytes32-: xref:utils.adoc#EIP712-_hashTypedDataV4-bytes32-
- :xref-EIP712-eip712Domain--: xref:utils.adoc#EIP712-eip712Domain--
- :xref-EIP712-_EIP712Name--: xref:utils.adoc#EIP712-_EIP712Name--
- :xref-EIP712-_EIP712Version--: xref:utils.adoc#EIP712-_EIP712Version--
- :xref-ERC721-supportsInterface-bytes4-: xref:token/ERC721.adoc#ERC721-supportsInterface-bytes4-
- :xref-ERC721-balanceOf-address-: xref:token/ERC721.adoc#ERC721-balanceOf-address-
- :xref-ERC721-ownerOf-uint256-: xref:token/ERC721.adoc#ERC721-ownerOf-uint256-
- :xref-ERC721-name--: xref:token/ERC721.adoc#ERC721-name--
- :xref-ERC721-symbol--: xref:token/ERC721.adoc#ERC721-symbol--
- :xref-ERC721-tokenURI-uint256-: xref:token/ERC721.adoc#ERC721-tokenURI-uint256-
- :xref-ERC721-_baseURI--: xref:token/ERC721.adoc#ERC721-_baseURI--
- :xref-ERC721-approve-address-uint256-: xref:token/ERC721.adoc#ERC721-approve-address-uint256-
- :xref-ERC721-getApproved-uint256-: xref:token/ERC721.adoc#ERC721-getApproved-uint256-
- :xref-ERC721-setApprovalForAll-address-bool-: xref:token/ERC721.adoc#ERC721-setApprovalForAll-address-bool-
- :xref-ERC721-isApprovedForAll-address-address-: xref:token/ERC721.adoc#ERC721-isApprovedForAll-address-address-
- :xref-ERC721-transferFrom-address-address-uint256-: xref:token/ERC721.adoc#ERC721-transferFrom-address-address-uint256-
- :xref-ERC721-safeTransferFrom-address-address-uint256-: xref:token/ERC721.adoc#ERC721-safeTransferFrom-address-address-uint256-
- :xref-ERC721-safeTransferFrom-address-address-uint256-bytes-: xref:token/ERC721.adoc#ERC721-safeTransferFrom-address-address-uint256-bytes-
- :xref-ERC721-_ownerOf-uint256-: xref:token/ERC721.adoc#ERC721-_ownerOf-uint256-
- :xref-ERC721-_getApproved-uint256-: xref:token/ERC721.adoc#ERC721-_getApproved-uint256-
- :xref-ERC721-_isAuthorized-address-address-uint256-: xref:token/ERC721.adoc#ERC721-_isAuthorized-address-address-uint256-
- :xref-ERC721-_checkAuthorized-address-address-uint256-: xref:token/ERC721.adoc#ERC721-_checkAuthorized-address-address-uint256-
- :xref-ERC721-_mint-address-uint256-: xref:token/ERC721.adoc#ERC721-_mint-address-uint256-
- :xref-ERC721-_safeMint-address-uint256-: xref:token/ERC721.adoc#ERC721-_safeMint-address-uint256-
- :xref-ERC721-_safeMint-address-uint256-bytes-: xref:token/ERC721.adoc#ERC721-_safeMint-address-uint256-bytes-
- :xref-ERC721-_burn-uint256-: xref:token/ERC721.adoc#ERC721-_burn-uint256-
- :xref-ERC721-_transfer-address-address-uint256-: xref:token/ERC721.adoc#ERC721-_transfer-address-address-uint256-
- :xref-ERC721-_safeTransfer-address-address-uint256-: xref:token/ERC721.adoc#ERC721-_safeTransfer-address-address-uint256-
- :xref-ERC721-_safeTransfer-address-address-uint256-bytes-: xref:token/ERC721.adoc#ERC721-_safeTransfer-address-address-uint256-bytes-
- :xref-ERC721-_approve-address-uint256-address-: xref:token/ERC721.adoc#ERC721-_approve-address-uint256-address-
- :xref-ERC721-_approve-address-uint256-address-bool-: xref:token/ERC721.adoc#ERC721-_approve-address-uint256-address-bool-
- :xref-ERC721-_setApprovalForAll-address-address-bool-: xref:token/ERC721.adoc#ERC721-_setApprovalForAll-address-address-bool-
- :xref-ERC721-_requireOwned-uint256-: xref:token/ERC721.adoc#ERC721-_requireOwned-uint256-
- :xref-IVotes-DelegateChanged-address-address-address-: xref:governance.adoc#IVotes-DelegateChanged-address-address-address-
- :xref-IVotes-DelegateVotesChanged-address-uint256-uint256-: xref:governance.adoc#IVotes-DelegateVotesChanged-address-uint256-uint256-
- :xref-IERC5267-EIP712DomainChanged--: xref:interfaces.adoc#IERC5267-EIP712DomainChanged--
- :xref-IERC721-Transfer-address-address-uint256-: xref:token/ERC721.adoc#IERC721-Transfer-address-address-uint256-
- :xref-IERC721-Approval-address-address-uint256-: xref:token/ERC721.adoc#IERC721-Approval-address-address-uint256-
- :xref-IERC721-ApprovalForAll-address-address-bool-: xref:token/ERC721.adoc#IERC721-ApprovalForAll-address-address-bool-
- :xref-Votes-ERC6372InconsistentClock--: xref:governance.adoc#Votes-ERC6372InconsistentClock--
- :xref-Votes-ERC5805FutureLookup-uint256-uint48-: xref:governance.adoc#Votes-ERC5805FutureLookup-uint256-uint48-
- :xref-IVotes-VotesExpiredSignature-uint256-: xref:governance.adoc#IVotes-VotesExpiredSignature-uint256-
- :xref-Nonces-InvalidAccountNonce-address-uint256-: xref:utils.adoc#Nonces-InvalidAccountNonce-address-uint256-
- :xref-IERC721Errors-ERC721InvalidOwner-address-: xref:interfaces.adoc#IERC721Errors-ERC721InvalidOwner-address-
- :xref-IERC721Errors-ERC721NonexistentToken-uint256-: xref:interfaces.adoc#IERC721Errors-ERC721NonexistentToken-uint256-
- :xref-IERC721Errors-ERC721IncorrectOwner-address-uint256-address-: xref:interfaces.adoc#IERC721Errors-ERC721IncorrectOwner-address-uint256-address-
- :xref-IERC721Errors-ERC721InvalidSender-address-: xref:interfaces.adoc#IERC721Errors-ERC721InvalidSender-address-
- :xref-IERC721Errors-ERC721InvalidReceiver-address-: xref:interfaces.adoc#IERC721Errors-ERC721InvalidReceiver-address-
- :xref-IERC721Errors-ERC721InsufficientApproval-address-uint256-: xref:interfaces.adoc#IERC721Errors-ERC721InsufficientApproval-address-uint256-
- :xref-IERC721Errors-ERC721InvalidApprover-address-: xref:interfaces.adoc#IERC721Errors-ERC721InvalidApprover-address-
- :xref-IERC721Errors-ERC721InvalidOperator-address-: xref:interfaces.adoc#IERC721Errors-ERC721InvalidOperator-address-
- :ERC721-_update: pass:normal[xref:token/ERC721.adoc#ERC721-_update-address-uint256-address-[`ERC721._update`]]
- :IVotes-DelegateVotesChanged: pass:normal[xref:governance.adoc#IVotes-DelegateVotesChanged-address-uint256-uint256-[`IVotes.DelegateVotesChanged`]]
- :ERC721-_increaseBalance: pass:normal[xref:token/ERC721.adoc#ERC721-_increaseBalance-address-uint128-[`ERC721._increaseBalance`]]
- :ERC2981-_setDefaultRoyalty: pass:normal[xref:token/common.adoc#ERC2981-_setDefaultRoyalty-address-uint96-[`ERC2981._setDefaultRoyalty`]]
- :ERC2981-_setTokenRoyalty: pass:normal[xref:token/common.adoc#ERC2981-_setTokenRoyalty-uint256-address-uint96-[`ERC2981._setTokenRoyalty`]]
- :xref-ERC721Royalty-supportsInterface-bytes4-: xref:token/ERC721.adoc#ERC721Royalty-supportsInterface-bytes4-
- :xref-ERC721-balanceOf-address-: xref:token/ERC721.adoc#ERC721-balanceOf-address-
- :xref-ERC721-ownerOf-uint256-: xref:token/ERC721.adoc#ERC721-ownerOf-uint256-
- :xref-ERC721-name--: xref:token/ERC721.adoc#ERC721-name--
- :xref-ERC721-symbol--: xref:token/ERC721.adoc#ERC721-symbol--
- :xref-ERC721-tokenURI-uint256-: xref:token/ERC721.adoc#ERC721-tokenURI-uint256-
- :xref-ERC721-_baseURI--: xref:token/ERC721.adoc#ERC721-_baseURI--
- :xref-ERC721-approve-address-uint256-: xref:token/ERC721.adoc#ERC721-approve-address-uint256-
- :xref-ERC721-getApproved-uint256-: xref:token/ERC721.adoc#ERC721-getApproved-uint256-
- :xref-ERC721-setApprovalForAll-address-bool-: xref:token/ERC721.adoc#ERC721-setApprovalForAll-address-bool-
- :xref-ERC721-isApprovedForAll-address-address-: xref:token/ERC721.adoc#ERC721-isApprovedForAll-address-address-
- :xref-ERC721-transferFrom-address-address-uint256-: xref:token/ERC721.adoc#ERC721-transferFrom-address-address-uint256-
- :xref-ERC721-safeTransferFrom-address-address-uint256-: xref:token/ERC721.adoc#ERC721-safeTransferFrom-address-address-uint256-
- :xref-ERC721-safeTransferFrom-address-address-uint256-bytes-: xref:token/ERC721.adoc#ERC721-safeTransferFrom-address-address-uint256-bytes-
- :xref-ERC721-_ownerOf-uint256-: xref:token/ERC721.adoc#ERC721-_ownerOf-uint256-
- :xref-ERC721-_getApproved-uint256-: xref:token/ERC721.adoc#ERC721-_getApproved-uint256-
- :xref-ERC721-_isAuthorized-address-address-uint256-: xref:token/ERC721.adoc#ERC721-_isAuthorized-address-address-uint256-
- :xref-ERC721-_checkAuthorized-address-address-uint256-: xref:token/ERC721.adoc#ERC721-_checkAuthorized-address-address-uint256-
- :xref-ERC721-_increaseBalance-address-uint128-: xref:token/ERC721.adoc#ERC721-_increaseBalance-address-uint128-
- :xref-ERC721-_update-address-uint256-address-: xref:token/ERC721.adoc#ERC721-_update-address-uint256-address-
- :xref-ERC721-_mint-address-uint256-: xref:token/ERC721.adoc#ERC721-_mint-address-uint256-
- :xref-ERC721-_safeMint-address-uint256-: xref:token/ERC721.adoc#ERC721-_safeMint-address-uint256-
- :xref-ERC721-_safeMint-address-uint256-bytes-: xref:token/ERC721.adoc#ERC721-_safeMint-address-uint256-bytes-
- :xref-ERC721-_burn-uint256-: xref:token/ERC721.adoc#ERC721-_burn-uint256-
- :xref-ERC721-_transfer-address-address-uint256-: xref:token/ERC721.adoc#ERC721-_transfer-address-address-uint256-
- :xref-ERC721-_safeTransfer-address-address-uint256-: xref:token/ERC721.adoc#ERC721-_safeTransfer-address-address-uint256-
- :xref-ERC721-_safeTransfer-address-address-uint256-bytes-: xref:token/ERC721.adoc#ERC721-_safeTransfer-address-address-uint256-bytes-
- :xref-ERC721-_approve-address-uint256-address-: xref:token/ERC721.adoc#ERC721-_approve-address-uint256-address-
- :xref-ERC721-_approve-address-uint256-address-bool-: xref:token/ERC721.adoc#ERC721-_approve-address-uint256-address-bool-
- :xref-ERC721-_setApprovalForAll-address-address-bool-: xref:token/ERC721.adoc#ERC721-_setApprovalForAll-address-address-bool-
- :xref-ERC721-_requireOwned-uint256-: xref:token/ERC721.adoc#ERC721-_requireOwned-uint256-
- :xref-ERC2981-royaltyInfo-uint256-uint256-: xref:token/common.adoc#ERC2981-royaltyInfo-uint256-uint256-
- :xref-ERC2981-_feeDenominator--: xref:token/common.adoc#ERC2981-_feeDenominator--
- :xref-ERC2981-_setDefaultRoyalty-address-uint96-: xref:token/common.adoc#ERC2981-_setDefaultRoyalty-address-uint96-
- :xref-ERC2981-_deleteDefaultRoyalty--: xref:token/common.adoc#ERC2981-_deleteDefaultRoyalty--
- :xref-ERC2981-_setTokenRoyalty-uint256-address-uint96-: xref:token/common.adoc#ERC2981-_setTokenRoyalty-uint256-address-uint96-
- :xref-ERC2981-_resetTokenRoyalty-uint256-: xref:token/common.adoc#ERC2981-_resetTokenRoyalty-uint256-
- :xref-IERC721-Transfer-address-address-uint256-: xref:token/ERC721.adoc#IERC721-Transfer-address-address-uint256-
- :xref-IERC721-Approval-address-address-uint256-: xref:token/ERC721.adoc#IERC721-Approval-address-address-uint256-
- :xref-IERC721-ApprovalForAll-address-address-bool-: xref:token/ERC721.adoc#IERC721-ApprovalForAll-address-address-bool-
- :xref-IERC721Errors-ERC721InvalidOwner-address-: xref:interfaces.adoc#IERC721Errors-ERC721InvalidOwner-address-
- :xref-IERC721Errors-ERC721NonexistentToken-uint256-: xref:interfaces.adoc#IERC721Errors-ERC721NonexistentToken-uint256-
- :xref-IERC721Errors-ERC721IncorrectOwner-address-uint256-address-: xref:interfaces.adoc#IERC721Errors-ERC721IncorrectOwner-address-uint256-address-
- :xref-IERC721Errors-ERC721InvalidSender-address-: xref:interfaces.adoc#IERC721Errors-ERC721InvalidSender-address-
- :xref-IERC721Errors-ERC721InvalidReceiver-address-: xref:interfaces.adoc#IERC721Errors-ERC721InvalidReceiver-address-
- :xref-IERC721Errors-ERC721InsufficientApproval-address-uint256-: xref:interfaces.adoc#IERC721Errors-ERC721InsufficientApproval-address-uint256-
- :xref-IERC721Errors-ERC721InvalidApprover-address-: xref:interfaces.adoc#IERC721Errors-ERC721InvalidApprover-address-
- :xref-IERC721Errors-ERC721InvalidOperator-address-: xref:interfaces.adoc#IERC721Errors-ERC721InvalidOperator-address-
- :xref-ERC2981-ERC2981InvalidDefaultRoyalty-uint256-uint256-: xref:token/common.adoc#ERC2981-ERC2981InvalidDefaultRoyalty-uint256-uint256-
- :xref-ERC2981-ERC2981InvalidDefaultRoyaltyReceiver-address-: xref:token/common.adoc#ERC2981-ERC2981InvalidDefaultRoyaltyReceiver-address-
- :xref-ERC2981-ERC2981InvalidTokenRoyalty-uint256-uint256-uint256-: xref:token/common.adoc#ERC2981-ERC2981InvalidTokenRoyalty-uint256-uint256-uint256-
- :xref-ERC2981-ERC2981InvalidTokenRoyaltyReceiver-uint256-address-: xref:token/common.adoc#ERC2981-ERC2981InvalidTokenRoyaltyReceiver-uint256-address-
- :IERC165-supportsInterface: pass:normal[xref:utils.adoc#IERC165-supportsInterface-bytes4-[`IERC165.supportsInterface`]]
- :ERC721Votes: pass:normal[xref:token/ERC721.adoc#ERC721Votes[`ERC721Votes`]]
- :xref-ERC721Wrapper-constructor-contract-IERC721-: xref:token/ERC721.adoc#ERC721Wrapper-constructor-contract-IERC721-
- :xref-ERC721Wrapper-depositFor-address-uint256---: xref:token/ERC721.adoc#ERC721Wrapper-depositFor-address-uint256---
- :xref-ERC721Wrapper-withdrawTo-address-uint256---: xref:token/ERC721.adoc#ERC721Wrapper-withdrawTo-address-uint256---
- :xref-ERC721Wrapper-onERC721Received-address-address-uint256-bytes-: xref:token/ERC721.adoc#ERC721Wrapper-onERC721Received-address-address-uint256-bytes-
- :xref-ERC721Wrapper-_recover-address-uint256-: xref:token/ERC721.adoc#ERC721Wrapper-_recover-address-uint256-
- :xref-ERC721Wrapper-underlying--: xref:token/ERC721.adoc#ERC721Wrapper-underlying--
- :xref-ERC721-supportsInterface-bytes4-: xref:token/ERC721.adoc#ERC721-supportsInterface-bytes4-
- :xref-ERC721-balanceOf-address-: xref:token/ERC721.adoc#ERC721-balanceOf-address-
- :xref-ERC721-ownerOf-uint256-: xref:token/ERC721.adoc#ERC721-ownerOf-uint256-
- :xref-ERC721-name--: xref:token/ERC721.adoc#ERC721-name--
- :xref-ERC721-symbol--: xref:token/ERC721.adoc#ERC721-symbol--
- :xref-ERC721-tokenURI-uint256-: xref:token/ERC721.adoc#ERC721-tokenURI-uint256-
- :xref-ERC721-_baseURI--: xref:token/ERC721.adoc#ERC721-_baseURI--
- :xref-ERC721-approve-address-uint256-: xref:token/ERC721.adoc#ERC721-approve-address-uint256-
- :xref-ERC721-getApproved-uint256-: xref:token/ERC721.adoc#ERC721-getApproved-uint256-
- :xref-ERC721-setApprovalForAll-address-bool-: xref:token/ERC721.adoc#ERC721-setApprovalForAll-address-bool-
- :xref-ERC721-isApprovedForAll-address-address-: xref:token/ERC721.adoc#ERC721-isApprovedForAll-address-address-
- :xref-ERC721-transferFrom-address-address-uint256-: xref:token/ERC721.adoc#ERC721-transferFrom-address-address-uint256-
- :xref-ERC721-safeTransferFrom-address-address-uint256-: xref:token/ERC721.adoc#ERC721-safeTransferFrom-address-address-uint256-
- :xref-ERC721-safeTransferFrom-address-address-uint256-bytes-: xref:token/ERC721.adoc#ERC721-safeTransferFrom-address-address-uint256-bytes-
- :xref-ERC721-_ownerOf-uint256-: xref:token/ERC721.adoc#ERC721-_ownerOf-uint256-
- :xref-ERC721-_getApproved-uint256-: xref:token/ERC721.adoc#ERC721-_getApproved-uint256-
- :xref-ERC721-_isAuthorized-address-address-uint256-: xref:token/ERC721.adoc#ERC721-_isAuthorized-address-address-uint256-
- :xref-ERC721-_checkAuthorized-address-address-uint256-: xref:token/ERC721.adoc#ERC721-_checkAuthorized-address-address-uint256-
- :xref-ERC721-_increaseBalance-address-uint128-: xref:token/ERC721.adoc#ERC721-_increaseBalance-address-uint128-
- :xref-ERC721-_update-address-uint256-address-: xref:token/ERC721.adoc#ERC721-_update-address-uint256-address-
- :xref-ERC721-_mint-address-uint256-: xref:token/ERC721.adoc#ERC721-_mint-address-uint256-
- :xref-ERC721-_safeMint-address-uint256-: xref:token/ERC721.adoc#ERC721-_safeMint-address-uint256-
- :xref-ERC721-_safeMint-address-uint256-bytes-: xref:token/ERC721.adoc#ERC721-_safeMint-address-uint256-bytes-
- :xref-ERC721-_burn-uint256-: xref:token/ERC721.adoc#ERC721-_burn-uint256-
- :xref-ERC721-_transfer-address-address-uint256-: xref:token/ERC721.adoc#ERC721-_transfer-address-address-uint256-
- :xref-ERC721-_safeTransfer-address-address-uint256-: xref:token/ERC721.adoc#ERC721-_safeTransfer-address-address-uint256-
- :xref-ERC721-_safeTransfer-address-address-uint256-bytes-: xref:token/ERC721.adoc#ERC721-_safeTransfer-address-address-uint256-bytes-
- :xref-ERC721-_approve-address-uint256-address-: xref:token/ERC721.adoc#ERC721-_approve-address-uint256-address-
- :xref-ERC721-_approve-address-uint256-address-bool-: xref:token/ERC721.adoc#ERC721-_approve-address-uint256-address-bool-
- :xref-ERC721-_setApprovalForAll-address-address-bool-: xref:token/ERC721.adoc#ERC721-_setApprovalForAll-address-address-bool-
- :xref-ERC721-_requireOwned-uint256-: xref:token/ERC721.adoc#ERC721-_requireOwned-uint256-
- :xref-IERC721-Transfer-address-address-uint256-: xref:token/ERC721.adoc#IERC721-Transfer-address-address-uint256-
- :xref-IERC721-Approval-address-address-uint256-: xref:token/ERC721.adoc#IERC721-Approval-address-address-uint256-
- :xref-IERC721-ApprovalForAll-address-address-bool-: xref:token/ERC721.adoc#IERC721-ApprovalForAll-address-address-bool-
- :xref-ERC721Wrapper-ERC721UnsupportedToken-address-: xref:token/ERC721.adoc#ERC721Wrapper-ERC721UnsupportedToken-address-
- :xref-IERC721Errors-ERC721InvalidOwner-address-: xref:interfaces.adoc#IERC721Errors-ERC721InvalidOwner-address-
- :xref-IERC721Errors-ERC721NonexistentToken-uint256-: xref:interfaces.adoc#IERC721Errors-ERC721NonexistentToken-uint256-
- :xref-IERC721Errors-ERC721IncorrectOwner-address-uint256-address-: xref:interfaces.adoc#IERC721Errors-ERC721IncorrectOwner-address-uint256-address-
- :xref-IERC721Errors-ERC721InvalidSender-address-: xref:interfaces.adoc#IERC721Errors-ERC721InvalidSender-address-
- :xref-IERC721Errors-ERC721InvalidReceiver-address-: xref:interfaces.adoc#IERC721Errors-ERC721InvalidReceiver-address-
- :xref-IERC721Errors-ERC721InsufficientApproval-address-uint256-: xref:interfaces.adoc#IERC721Errors-ERC721InsufficientApproval-address-uint256-
- :xref-IERC721Errors-ERC721InvalidApprover-address-: xref:interfaces.adoc#IERC721Errors-ERC721InvalidApprover-address-
- :xref-IERC721Errors-ERC721InvalidOperator-address-: xref:interfaces.adoc#IERC721Errors-ERC721InvalidOperator-address-
- :IERC721Receiver-onERC721Received: pass:normal[xref:token/ERC721.adoc#IERC721Receiver-onERC721Received-address-address-uint256-bytes-[`IERC721Receiver.onERC721Received`]]
- :IERC721-transferFrom: pass:normal[xref:token/ERC721.adoc#IERC721-transferFrom-address-address-uint256-[`IERC721.transferFrom`]]
- :ERC721Wrapper-_recover: pass:normal[xref:token/ERC721.adoc#ERC721Wrapper-_recover-address-uint256-[`ERC721Wrapper._recover`]]
- :IERC721Receiver: pass:normal[xref:token/ERC721.adoc#IERC721Receiver[`IERC721Receiver`]]
- :IERC721-safeTransferFrom: pass:normal[xref:token/ERC721.adoc#IERC721-safeTransferFrom-address-address-uint256-[`IERC721.safeTransferFrom`]]
- :IERC721-approve: pass:normal[xref:token/ERC721.adoc#IERC721-approve-address-uint256-[`IERC721.approve`]]
- :IERC721-setApprovalForAll: pass:normal[xref:token/ERC721.adoc#IERC721-setApprovalForAll-address-bool-[`IERC721.setApprovalForAll`]]
- :xref-ERC721Holder-onERC721Received-address-address-uint256-bytes-: xref:token/ERC721.adoc#ERC721Holder-onERC721Received-address-address-uint256-bytes-
- :IERC721Receiver-onERC721Received: pass:normal[xref:token/ERC721.adoc#IERC721Receiver-onERC721Received-address-address-uint256-bytes-[`IERC721Receiver.onERC721Received`]]
- :xref-ERC721Utils-checkOnERC721Received-address-address-address-uint256-bytes-: xref:token/ERC721.adoc#ERC721Utils-checkOnERC721Received-address-address-address-uint256-bytes-
- :IERC721Receiver-onERC721Received: pass:normal[xref:token/ERC721.adoc#IERC721Receiver-onERC721Received-address-address-uint256-bytes-[`IERC721Receiver.onERC721Received`]]
- = ERC-721
- [.readme-notice]
- NOTE: This document is better viewed at https://docs.openzeppelin.com/contracts/api/token/erc721
- This set of interfaces, contracts, and utilities are all related to the https://eips.ethereum.org/EIPS/eip-721[ERC-721 Non-Fungible Token Standard].
- TIP: For a walk through on how to create an ERC-721 token read our xref:ROOT:erc721.adoc[ERC-721 guide].
- The ERC specifies four interfaces:
- * {IERC721}: Core functionality required in all compliant implementation.
- * {IERC721Metadata}: Optional extension that adds name, symbol, and token URI, almost always included.
- * {IERC721Enumerable}: Optional extension that allows enumerating the tokens on chain, often not included since it requires large gas overhead.
- * {IERC721Receiver}: An interface that must be implemented by contracts if they want to accept tokens through `safeTransferFrom`.
- OpenZeppelin Contracts provides implementations of all four interfaces:
- * {ERC721}: The core and metadata extensions, with a base URI mechanism.
- * {ERC721Enumerable}: The enumerable extension.
- * {ERC721Holder}: A bare bones implementation of the receiver interface.
- Additionally there are a few of other extensions:
- * {ERC721Consecutive}: An implementation of https://eips.ethereum.org/EIPS/eip-2309[ERC-2309] for minting batchs of tokens during construction, in accordance with ERC-721.
- * {ERC721URIStorage}: A more flexible but more expensive way of storing metadata.
- * {ERC721Votes}: Support for voting and vote delegation.
- * {ERC721Royalty}: A way to signal royalty information following ERC-2981.
- * {ERC721Pausable}: A primitive to pause contract operation.
- * {ERC721Burnable}: A way for token holders to burn their own tokens.
- * {ERC721Wrapper}: Wrapper to create an ERC-721 backed by another ERC-721, with deposit and withdraw methods. Useful in conjunction with {ERC721Votes}.
- NOTE: This core set of contracts is designed to be unopinionated, allowing developers to access the internal functions in ERC-721 (such as <<ERC721-_mint-address-uint256-,`_mint`>>) and expose them as external functions in the way they prefer.
- == Core
- :Transfer: pass:normal[xref:#IERC721-Transfer-address-address-uint256-[`++Transfer++`]]
- :Approval: pass:normal[xref:#IERC721-Approval-address-address-uint256-[`++Approval++`]]
- :ApprovalForAll: pass:normal[xref:#IERC721-ApprovalForAll-address-address-bool-[`++ApprovalForAll++`]]
- :balanceOf: pass:normal[xref:#IERC721-balanceOf-address-[`++balanceOf++`]]
- :ownerOf: pass:normal[xref:#IERC721-ownerOf-uint256-[`++ownerOf++`]]
- :safeTransferFrom: pass:normal[xref:#IERC721-safeTransferFrom-address-address-uint256-bytes-[`++safeTransferFrom++`]]
- :safeTransferFrom: pass:normal[xref:#IERC721-safeTransferFrom-address-address-uint256-[`++safeTransferFrom++`]]
- :transferFrom: pass:normal[xref:#IERC721-transferFrom-address-address-uint256-[`++transferFrom++`]]
- :approve: pass:normal[xref:#IERC721-approve-address-uint256-[`++approve++`]]
- :setApprovalForAll: pass:normal[xref:#IERC721-setApprovalForAll-address-bool-[`++setApprovalForAll++`]]
- :getApproved: pass:normal[xref:#IERC721-getApproved-uint256-[`++getApproved++`]]
- :isApprovedForAll: pass:normal[xref:#IERC721-isApprovedForAll-address-address-[`++isApprovedForAll++`]]
- [.contract]
- [[IERC721]]
- === `++IERC721++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.1.0/contracts/token/ERC721/IERC721.sol[{github-icon},role=heading-link]
- [.hljs-theme-light.nopadding]
- ```solidity
- import "@openzeppelin/contracts/token/ERC721/IERC721.sol";
- ```
- Required interface of an ERC-721 compliant contract.
- [.contract-index]
- .Functions
- --
- * {xref-IERC721-balanceOf-address-}[`++balanceOf(owner)++`]
- * {xref-IERC721-ownerOf-uint256-}[`++ownerOf(tokenId)++`]
- * {xref-IERC721-safeTransferFrom-address-address-uint256-bytes-}[`++safeTransferFrom(from, to, tokenId, data)++`]
- * {xref-IERC721-safeTransferFrom-address-address-uint256-}[`++safeTransferFrom(from, to, tokenId)++`]
- * {xref-IERC721-transferFrom-address-address-uint256-}[`++transferFrom(from, to, tokenId)++`]
- * {xref-IERC721-approve-address-uint256-}[`++approve(to, tokenId)++`]
- * {xref-IERC721-setApprovalForAll-address-bool-}[`++setApprovalForAll(operator, approved)++`]
- * {xref-IERC721-getApproved-uint256-}[`++getApproved(tokenId)++`]
- * {xref-IERC721-isApprovedForAll-address-address-}[`++isApprovedForAll(owner, operator)++`]
- [.contract-subindex-inherited]
- .IERC165
- * {xref-IERC165-supportsInterface-bytes4-}[`++supportsInterface(interfaceId)++`]
- --
- [.contract-index]
- .Events
- --
- * {xref-IERC721-Transfer-address-address-uint256-}[`++Transfer(from, to, tokenId)++`]
- * {xref-IERC721-Approval-address-address-uint256-}[`++Approval(owner, approved, tokenId)++`]
- * {xref-IERC721-ApprovalForAll-address-address-bool-}[`++ApprovalForAll(owner, operator, approved)++`]
- [.contract-subindex-inherited]
- .IERC165
- --
- [.contract-item]
- [[IERC721-balanceOf-address-]]
- ==== `[.contract-item-name]#++balanceOf++#++(address owner) → uint256 balance++` [.item-kind]#external#
- Returns the number of tokens in ``owner``'s account.
- [.contract-item]
- [[IERC721-ownerOf-uint256-]]
- ==== `[.contract-item-name]#++ownerOf++#++(uint256 tokenId) → address owner++` [.item-kind]#external#
- Returns the owner of the `tokenId` token.
- Requirements:
- - `tokenId` must exist.
- [.contract-item]
- [[IERC721-safeTransferFrom-address-address-uint256-bytes-]]
- ==== `[.contract-item-name]#++safeTransferFrom++#++(address from, address to, uint256 tokenId, bytes data)++` [.item-kind]#external#
- Safely transfers `tokenId` token from `from` to `to`.
- Requirements:
- - `from` cannot be the zero address.
- - `to` cannot be the zero address.
- - `tokenId` token must exist and be owned by `from`.
- - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
- - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon
- a safe transfer.
- Emits a {Transfer} event.
- [.contract-item]
- [[IERC721-safeTransferFrom-address-address-uint256-]]
- ==== `[.contract-item-name]#++safeTransferFrom++#++(address from, address to, uint256 tokenId)++` [.item-kind]#external#
- Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
- are aware of the ERC-721 protocol to prevent tokens from being forever locked.
- Requirements:
- - `from` cannot be the zero address.
- - `to` cannot be the zero address.
- - `tokenId` token must exist and be owned by `from`.
- - If the caller is not `from`, it must have been allowed to move this token by either {approve} or
- {setApprovalForAll}.
- - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon
- a safe transfer.
- Emits a {Transfer} event.
- [.contract-item]
- [[IERC721-transferFrom-address-address-uint256-]]
- ==== `[.contract-item-name]#++transferFrom++#++(address from, address to, uint256 tokenId)++` [.item-kind]#external#
- Transfers `tokenId` token from `from` to `to`.
- WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC-721
- or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must
- understand this adds an external call which potentially creates a reentrancy vulnerability.
- Requirements:
- - `from` cannot be the zero address.
- - `to` cannot be the zero address.
- - `tokenId` token must be owned by `from`.
- - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
- Emits a {Transfer} event.
- [.contract-item]
- [[IERC721-approve-address-uint256-]]
- ==== `[.contract-item-name]#++approve++#++(address to, uint256 tokenId)++` [.item-kind]#external#
- Gives permission to `to` to transfer `tokenId` token to another account.
- The approval is cleared when the token is transferred.
- Only a single account can be approved at a time, so approving the zero address clears previous approvals.
- Requirements:
- - The caller must own the token or be an approved operator.
- - `tokenId` must exist.
- Emits an {Approval} event.
- [.contract-item]
- [[IERC721-setApprovalForAll-address-bool-]]
- ==== `[.contract-item-name]#++setApprovalForAll++#++(address operator, bool approved)++` [.item-kind]#external#
- Approve or remove `operator` as an operator for the caller.
- Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
- Requirements:
- - The `operator` cannot be the address zero.
- Emits an {ApprovalForAll} event.
- [.contract-item]
- [[IERC721-getApproved-uint256-]]
- ==== `[.contract-item-name]#++getApproved++#++(uint256 tokenId) → address operator++` [.item-kind]#external#
- Returns the account approved for `tokenId` token.
- Requirements:
- - `tokenId` must exist.
- [.contract-item]
- [[IERC721-isApprovedForAll-address-address-]]
- ==== `[.contract-item-name]#++isApprovedForAll++#++(address owner, address operator) → bool++` [.item-kind]#external#
- Returns if the `operator` is allowed to manage all of the assets of `owner`.
- See {setApprovalForAll}
- [.contract-item]
- [[IERC721-Transfer-address-address-uint256-]]
- ==== `[.contract-item-name]#++Transfer++#++(address indexed from, address indexed to, uint256 indexed tokenId)++` [.item-kind]#event#
- Emitted when `tokenId` token is transferred from `from` to `to`.
- [.contract-item]
- [[IERC721-Approval-address-address-uint256-]]
- ==== `[.contract-item-name]#++Approval++#++(address indexed owner, address indexed approved, uint256 indexed tokenId)++` [.item-kind]#event#
- Emitted when `owner` enables `approved` to manage the `tokenId` token.
- [.contract-item]
- [[IERC721-ApprovalForAll-address-address-bool-]]
- ==== `[.contract-item-name]#++ApprovalForAll++#++(address indexed owner, address indexed operator, bool approved)++` [.item-kind]#event#
- Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
- :name: pass:normal[xref:#IERC721Metadata-name--[`++name++`]]
- :symbol: pass:normal[xref:#IERC721Metadata-symbol--[`++symbol++`]]
- :tokenURI: pass:normal[xref:#IERC721Metadata-tokenURI-uint256-[`++tokenURI++`]]
- [.contract]
- [[IERC721Metadata]]
- === `++IERC721Metadata++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.1.0/contracts/token/ERC721/extensions/IERC721Metadata.sol[{github-icon},role=heading-link]
- [.hljs-theme-light.nopadding]
- ```solidity
- import "@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol";
- ```
- See https://eips.ethereum.org/EIPS/eip-721
- [.contract-index]
- .Functions
- --
- * {xref-IERC721Metadata-name--}[`++name()++`]
- * {xref-IERC721Metadata-symbol--}[`++symbol()++`]
- * {xref-IERC721Metadata-tokenURI-uint256-}[`++tokenURI(tokenId)++`]
- [.contract-subindex-inherited]
- .IERC721
- * {xref-IERC721-balanceOf-address-}[`++balanceOf(owner)++`]
- * {xref-IERC721-ownerOf-uint256-}[`++ownerOf(tokenId)++`]
- * {xref-IERC721-safeTransferFrom-address-address-uint256-bytes-}[`++safeTransferFrom(from, to, tokenId, data)++`]
- * {xref-IERC721-safeTransferFrom-address-address-uint256-}[`++safeTransferFrom(from, to, tokenId)++`]
- * {xref-IERC721-transferFrom-address-address-uint256-}[`++transferFrom(from, to, tokenId)++`]
- * {xref-IERC721-approve-address-uint256-}[`++approve(to, tokenId)++`]
- * {xref-IERC721-setApprovalForAll-address-bool-}[`++setApprovalForAll(operator, approved)++`]
- * {xref-IERC721-getApproved-uint256-}[`++getApproved(tokenId)++`]
- * {xref-IERC721-isApprovedForAll-address-address-}[`++isApprovedForAll(owner, operator)++`]
- [.contract-subindex-inherited]
- .IERC165
- * {xref-IERC165-supportsInterface-bytes4-}[`++supportsInterface(interfaceId)++`]
- --
- [.contract-index]
- .Events
- --
- [.contract-subindex-inherited]
- .IERC721
- * {xref-IERC721-Transfer-address-address-uint256-}[`++Transfer(from, to, tokenId)++`]
- * {xref-IERC721-Approval-address-address-uint256-}[`++Approval(owner, approved, tokenId)++`]
- * {xref-IERC721-ApprovalForAll-address-address-bool-}[`++ApprovalForAll(owner, operator, approved)++`]
- [.contract-subindex-inherited]
- .IERC165
- --
- [.contract-item]
- [[IERC721Metadata-name--]]
- ==== `[.contract-item-name]#++name++#++() → string++` [.item-kind]#external#
- Returns the token collection name.
- [.contract-item]
- [[IERC721Metadata-symbol--]]
- ==== `[.contract-item-name]#++symbol++#++() → string++` [.item-kind]#external#
- Returns the token collection symbol.
- [.contract-item]
- [[IERC721Metadata-tokenURI-uint256-]]
- ==== `[.contract-item-name]#++tokenURI++#++(uint256 tokenId) → string++` [.item-kind]#external#
- Returns the Uniform Resource Identifier (URI) for `tokenId` token.
- :totalSupply: pass:normal[xref:#IERC721Enumerable-totalSupply--[`++totalSupply++`]]
- :tokenOfOwnerByIndex: pass:normal[xref:#IERC721Enumerable-tokenOfOwnerByIndex-address-uint256-[`++tokenOfOwnerByIndex++`]]
- :tokenByIndex: pass:normal[xref:#IERC721Enumerable-tokenByIndex-uint256-[`++tokenByIndex++`]]
- [.contract]
- [[IERC721Enumerable]]
- === `++IERC721Enumerable++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.1.0/contracts/token/ERC721/extensions/IERC721Enumerable.sol[{github-icon},role=heading-link]
- [.hljs-theme-light.nopadding]
- ```solidity
- import "@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol";
- ```
- See https://eips.ethereum.org/EIPS/eip-721
- [.contract-index]
- .Functions
- --
- * {xref-IERC721Enumerable-totalSupply--}[`++totalSupply()++`]
- * {xref-IERC721Enumerable-tokenOfOwnerByIndex-address-uint256-}[`++tokenOfOwnerByIndex(owner, index)++`]
- * {xref-IERC721Enumerable-tokenByIndex-uint256-}[`++tokenByIndex(index)++`]
- [.contract-subindex-inherited]
- .IERC721
- * {xref-IERC721-balanceOf-address-}[`++balanceOf(owner)++`]
- * {xref-IERC721-ownerOf-uint256-}[`++ownerOf(tokenId)++`]
- * {xref-IERC721-safeTransferFrom-address-address-uint256-bytes-}[`++safeTransferFrom(from, to, tokenId, data)++`]
- * {xref-IERC721-safeTransferFrom-address-address-uint256-}[`++safeTransferFrom(from, to, tokenId)++`]
- * {xref-IERC721-transferFrom-address-address-uint256-}[`++transferFrom(from, to, tokenId)++`]
- * {xref-IERC721-approve-address-uint256-}[`++approve(to, tokenId)++`]
- * {xref-IERC721-setApprovalForAll-address-bool-}[`++setApprovalForAll(operator, approved)++`]
- * {xref-IERC721-getApproved-uint256-}[`++getApproved(tokenId)++`]
- * {xref-IERC721-isApprovedForAll-address-address-}[`++isApprovedForAll(owner, operator)++`]
- [.contract-subindex-inherited]
- .IERC165
- * {xref-IERC165-supportsInterface-bytes4-}[`++supportsInterface(interfaceId)++`]
- --
- [.contract-index]
- .Events
- --
- [.contract-subindex-inherited]
- .IERC721
- * {xref-IERC721-Transfer-address-address-uint256-}[`++Transfer(from, to, tokenId)++`]
- * {xref-IERC721-Approval-address-address-uint256-}[`++Approval(owner, approved, tokenId)++`]
- * {xref-IERC721-ApprovalForAll-address-address-bool-}[`++ApprovalForAll(owner, operator, approved)++`]
- [.contract-subindex-inherited]
- .IERC165
- --
- [.contract-item]
- [[IERC721Enumerable-totalSupply--]]
- ==== `[.contract-item-name]#++totalSupply++#++() → uint256++` [.item-kind]#external#
- Returns the total amount of tokens stored by the contract.
- [.contract-item]
- [[IERC721Enumerable-tokenOfOwnerByIndex-address-uint256-]]
- ==== `[.contract-item-name]#++tokenOfOwnerByIndex++#++(address owner, uint256 index) → uint256++` [.item-kind]#external#
- Returns a token ID owned by `owner` at a given `index` of its token list.
- Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
- [.contract-item]
- [[IERC721Enumerable-tokenByIndex-uint256-]]
- ==== `[.contract-item-name]#++tokenByIndex++#++(uint256 index) → uint256++` [.item-kind]#external#
- Returns a token ID at a given `index` of all the tokens stored by the contract.
- Use along with {totalSupply} to enumerate all tokens.
- :constructor: pass:normal[xref:#ERC721-constructor-string-string-[`++constructor++`]]
- :supportsInterface: pass:normal[xref:#ERC721-supportsInterface-bytes4-[`++supportsInterface++`]]
- :balanceOf: pass:normal[xref:#ERC721-balanceOf-address-[`++balanceOf++`]]
- :ownerOf: pass:normal[xref:#ERC721-ownerOf-uint256-[`++ownerOf++`]]
- :name: pass:normal[xref:#ERC721-name--[`++name++`]]
- :symbol: pass:normal[xref:#ERC721-symbol--[`++symbol++`]]
- :tokenURI: pass:normal[xref:#ERC721-tokenURI-uint256-[`++tokenURI++`]]
- :_baseURI: pass:normal[xref:#ERC721-_baseURI--[`++_baseURI++`]]
- :approve: pass:normal[xref:#ERC721-approve-address-uint256-[`++approve++`]]
- :getApproved: pass:normal[xref:#ERC721-getApproved-uint256-[`++getApproved++`]]
- :setApprovalForAll: pass:normal[xref:#ERC721-setApprovalForAll-address-bool-[`++setApprovalForAll++`]]
- :isApprovedForAll: pass:normal[xref:#ERC721-isApprovedForAll-address-address-[`++isApprovedForAll++`]]
- :transferFrom: pass:normal[xref:#ERC721-transferFrom-address-address-uint256-[`++transferFrom++`]]
- :safeTransferFrom: pass:normal[xref:#ERC721-safeTransferFrom-address-address-uint256-[`++safeTransferFrom++`]]
- :safeTransferFrom: pass:normal[xref:#ERC721-safeTransferFrom-address-address-uint256-bytes-[`++safeTransferFrom++`]]
- :_ownerOf: pass:normal[xref:#ERC721-_ownerOf-uint256-[`++_ownerOf++`]]
- :_getApproved: pass:normal[xref:#ERC721-_getApproved-uint256-[`++_getApproved++`]]
- :_isAuthorized: pass:normal[xref:#ERC721-_isAuthorized-address-address-uint256-[`++_isAuthorized++`]]
- :_checkAuthorized: pass:normal[xref:#ERC721-_checkAuthorized-address-address-uint256-[`++_checkAuthorized++`]]
- :_increaseBalance: pass:normal[xref:#ERC721-_increaseBalance-address-uint128-[`++_increaseBalance++`]]
- :_update: pass:normal[xref:#ERC721-_update-address-uint256-address-[`++_update++`]]
- :_mint: pass:normal[xref:#ERC721-_mint-address-uint256-[`++_mint++`]]
- :_safeMint: pass:normal[xref:#ERC721-_safeMint-address-uint256-[`++_safeMint++`]]
- :_safeMint: pass:normal[xref:#ERC721-_safeMint-address-uint256-bytes-[`++_safeMint++`]]
- :_burn: pass:normal[xref:#ERC721-_burn-uint256-[`++_burn++`]]
- :_transfer: pass:normal[xref:#ERC721-_transfer-address-address-uint256-[`++_transfer++`]]
- :_safeTransfer: pass:normal[xref:#ERC721-_safeTransfer-address-address-uint256-[`++_safeTransfer++`]]
- :_safeTransfer: pass:normal[xref:#ERC721-_safeTransfer-address-address-uint256-bytes-[`++_safeTransfer++`]]
- :_approve: pass:normal[xref:#ERC721-_approve-address-uint256-address-[`++_approve++`]]
- :_approve: pass:normal[xref:#ERC721-_approve-address-uint256-address-bool-[`++_approve++`]]
- :_setApprovalForAll: pass:normal[xref:#ERC721-_setApprovalForAll-address-address-bool-[`++_setApprovalForAll++`]]
- :_requireOwned: pass:normal[xref:#ERC721-_requireOwned-uint256-[`++_requireOwned++`]]
- [.contract]
- [[ERC721]]
- === `++ERC721++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.1.0/contracts/token/ERC721/ERC721.sol[{github-icon},role=heading-link]
- [.hljs-theme-light.nopadding]
- ```solidity
- import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
- ```
- Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC-721] Non-Fungible Token Standard, including
- the Metadata extension, but not including the Enumerable extension, which is available separately as
- {ERC721Enumerable}.
- [.contract-index]
- .Functions
- --
- * {xref-ERC721-constructor-string-string-}[`++constructor(name_, symbol_)++`]
- * {xref-ERC721-supportsInterface-bytes4-}[`++supportsInterface(interfaceId)++`]
- * {xref-ERC721-balanceOf-address-}[`++balanceOf(owner)++`]
- * {xref-ERC721-ownerOf-uint256-}[`++ownerOf(tokenId)++`]
- * {xref-ERC721-name--}[`++name()++`]
- * {xref-ERC721-symbol--}[`++symbol()++`]
- * {xref-ERC721-tokenURI-uint256-}[`++tokenURI(tokenId)++`]
- * {xref-ERC721-_baseURI--}[`++_baseURI()++`]
- * {xref-ERC721-approve-address-uint256-}[`++approve(to, tokenId)++`]
- * {xref-ERC721-getApproved-uint256-}[`++getApproved(tokenId)++`]
- * {xref-ERC721-setApprovalForAll-address-bool-}[`++setApprovalForAll(operator, approved)++`]
- * {xref-ERC721-isApprovedForAll-address-address-}[`++isApprovedForAll(owner, operator)++`]
- * {xref-ERC721-transferFrom-address-address-uint256-}[`++transferFrom(from, to, tokenId)++`]
- * {xref-ERC721-safeTransferFrom-address-address-uint256-}[`++safeTransferFrom(from, to, tokenId)++`]
- * {xref-ERC721-safeTransferFrom-address-address-uint256-bytes-}[`++safeTransferFrom(from, to, tokenId, data)++`]
- * {xref-ERC721-_ownerOf-uint256-}[`++_ownerOf(tokenId)++`]
- * {xref-ERC721-_getApproved-uint256-}[`++_getApproved(tokenId)++`]
- * {xref-ERC721-_isAuthorized-address-address-uint256-}[`++_isAuthorized(owner, spender, tokenId)++`]
- * {xref-ERC721-_checkAuthorized-address-address-uint256-}[`++_checkAuthorized(owner, spender, tokenId)++`]
- * {xref-ERC721-_increaseBalance-address-uint128-}[`++_increaseBalance(account, value)++`]
- * {xref-ERC721-_update-address-uint256-address-}[`++_update(to, tokenId, auth)++`]
- * {xref-ERC721-_mint-address-uint256-}[`++_mint(to, tokenId)++`]
- * {xref-ERC721-_safeMint-address-uint256-}[`++_safeMint(to, tokenId)++`]
- * {xref-ERC721-_safeMint-address-uint256-bytes-}[`++_safeMint(to, tokenId, data)++`]
- * {xref-ERC721-_burn-uint256-}[`++_burn(tokenId)++`]
- * {xref-ERC721-_transfer-address-address-uint256-}[`++_transfer(from, to, tokenId)++`]
- * {xref-ERC721-_safeTransfer-address-address-uint256-}[`++_safeTransfer(from, to, tokenId)++`]
- * {xref-ERC721-_safeTransfer-address-address-uint256-bytes-}[`++_safeTransfer(from, to, tokenId, data)++`]
- * {xref-ERC721-_approve-address-uint256-address-}[`++_approve(to, tokenId, auth)++`]
- * {xref-ERC721-_approve-address-uint256-address-bool-}[`++_approve(to, tokenId, auth, emitEvent)++`]
- * {xref-ERC721-_setApprovalForAll-address-address-bool-}[`++_setApprovalForAll(owner, operator, approved)++`]
- * {xref-ERC721-_requireOwned-uint256-}[`++_requireOwned(tokenId)++`]
- [.contract-subindex-inherited]
- .IERC721Errors
- [.contract-subindex-inherited]
- .IERC721Metadata
- [.contract-subindex-inherited]
- .IERC721
- [.contract-subindex-inherited]
- .ERC165
- [.contract-subindex-inherited]
- .IERC165
- --
- [.contract-index]
- .Events
- --
- [.contract-subindex-inherited]
- .IERC721Errors
- [.contract-subindex-inherited]
- .IERC721Metadata
- [.contract-subindex-inherited]
- .IERC721
- * {xref-IERC721-Transfer-address-address-uint256-}[`++Transfer(from, to, tokenId)++`]
- * {xref-IERC721-Approval-address-address-uint256-}[`++Approval(owner, approved, tokenId)++`]
- * {xref-IERC721-ApprovalForAll-address-address-bool-}[`++ApprovalForAll(owner, operator, approved)++`]
- [.contract-subindex-inherited]
- .ERC165
- [.contract-subindex-inherited]
- .IERC165
- --
- [.contract-index]
- .Errors
- --
- [.contract-subindex-inherited]
- .IERC721Errors
- * {xref-IERC721Errors-ERC721InvalidOwner-address-}[`++ERC721InvalidOwner(owner)++`]
- * {xref-IERC721Errors-ERC721NonexistentToken-uint256-}[`++ERC721NonexistentToken(tokenId)++`]
- * {xref-IERC721Errors-ERC721IncorrectOwner-address-uint256-address-}[`++ERC721IncorrectOwner(sender, tokenId, owner)++`]
- * {xref-IERC721Errors-ERC721InvalidSender-address-}[`++ERC721InvalidSender(sender)++`]
- * {xref-IERC721Errors-ERC721InvalidReceiver-address-}[`++ERC721InvalidReceiver(receiver)++`]
- * {xref-IERC721Errors-ERC721InsufficientApproval-address-uint256-}[`++ERC721InsufficientApproval(operator, tokenId)++`]
- * {xref-IERC721Errors-ERC721InvalidApprover-address-}[`++ERC721InvalidApprover(approver)++`]
- * {xref-IERC721Errors-ERC721InvalidOperator-address-}[`++ERC721InvalidOperator(operator)++`]
- [.contract-subindex-inherited]
- .IERC721Metadata
- [.contract-subindex-inherited]
- .IERC721
- [.contract-subindex-inherited]
- .ERC165
- [.contract-subindex-inherited]
- .IERC165
- --
- [.contract-item]
- [[ERC721-constructor-string-string-]]
- ==== `[.contract-item-name]#++constructor++#++(string name_, string symbol_)++` [.item-kind]#internal#
- Initializes the contract by setting a `name` and a `symbol` to the token collection.
- [.contract-item]
- [[ERC721-supportsInterface-bytes4-]]
- ==== `[.contract-item-name]#++supportsInterface++#++(bytes4 interfaceId) → bool++` [.item-kind]#public#
- See {IERC165-supportsInterface}.
- [.contract-item]
- [[ERC721-balanceOf-address-]]
- ==== `[.contract-item-name]#++balanceOf++#++(address owner) → uint256++` [.item-kind]#public#
- See {IERC721-balanceOf}.
- [.contract-item]
- [[ERC721-ownerOf-uint256-]]
- ==== `[.contract-item-name]#++ownerOf++#++(uint256 tokenId) → address++` [.item-kind]#public#
- See {IERC721-ownerOf}.
- [.contract-item]
- [[ERC721-name--]]
- ==== `[.contract-item-name]#++name++#++() → string++` [.item-kind]#public#
- See {IERC721Metadata-name}.
- [.contract-item]
- [[ERC721-symbol--]]
- ==== `[.contract-item-name]#++symbol++#++() → string++` [.item-kind]#public#
- See {IERC721Metadata-symbol}.
- [.contract-item]
- [[ERC721-tokenURI-uint256-]]
- ==== `[.contract-item-name]#++tokenURI++#++(uint256 tokenId) → string++` [.item-kind]#public#
- See {IERC721Metadata-tokenURI}.
- [.contract-item]
- [[ERC721-_baseURI--]]
- ==== `[.contract-item-name]#++_baseURI++#++() → string++` [.item-kind]#internal#
- Base URI for computing {tokenURI}. If set, the resulting URI for each
- token will be the concatenation of the `baseURI` and the `tokenId`. Empty
- by default, can be overridden in child contracts.
- [.contract-item]
- [[ERC721-approve-address-uint256-]]
- ==== `[.contract-item-name]#++approve++#++(address to, uint256 tokenId)++` [.item-kind]#public#
- See {IERC721-approve}.
- [.contract-item]
- [[ERC721-getApproved-uint256-]]
- ==== `[.contract-item-name]#++getApproved++#++(uint256 tokenId) → address++` [.item-kind]#public#
- See {IERC721-getApproved}.
- [.contract-item]
- [[ERC721-setApprovalForAll-address-bool-]]
- ==== `[.contract-item-name]#++setApprovalForAll++#++(address operator, bool approved)++` [.item-kind]#public#
- See {IERC721-setApprovalForAll}.
- [.contract-item]
- [[ERC721-isApprovedForAll-address-address-]]
- ==== `[.contract-item-name]#++isApprovedForAll++#++(address owner, address operator) → bool++` [.item-kind]#public#
- See {IERC721-isApprovedForAll}.
- [.contract-item]
- [[ERC721-transferFrom-address-address-uint256-]]
- ==== `[.contract-item-name]#++transferFrom++#++(address from, address to, uint256 tokenId)++` [.item-kind]#public#
- See {IERC721-transferFrom}.
- [.contract-item]
- [[ERC721-safeTransferFrom-address-address-uint256-]]
- ==== `[.contract-item-name]#++safeTransferFrom++#++(address from, address to, uint256 tokenId)++` [.item-kind]#public#
- See {IERC721-safeTransferFrom}.
- [.contract-item]
- [[ERC721-safeTransferFrom-address-address-uint256-bytes-]]
- ==== `[.contract-item-name]#++safeTransferFrom++#++(address from, address to, uint256 tokenId, bytes data)++` [.item-kind]#public#
- See {IERC721-safeTransferFrom}.
- [.contract-item]
- [[ERC721-_ownerOf-uint256-]]
- ==== `[.contract-item-name]#++_ownerOf++#++(uint256 tokenId) → address++` [.item-kind]#internal#
- Returns the owner of the `tokenId`. Does NOT revert if token doesn't exist
- IMPORTANT: Any overrides to this function that add ownership of tokens not tracked by the
- core ERC-721 logic MUST be matched with the use of {_increaseBalance} to keep balances
- consistent with ownership. The invariant to preserve is that for any address `a` the value returned by
- `balanceOf(a)` must be equal to the number of tokens such that `_ownerOf(tokenId)` is `a`.
- [.contract-item]
- [[ERC721-_getApproved-uint256-]]
- ==== `[.contract-item-name]#++_getApproved++#++(uint256 tokenId) → address++` [.item-kind]#internal#
- Returns the approved address for `tokenId`. Returns 0 if `tokenId` is not minted.
- [.contract-item]
- [[ERC721-_isAuthorized-address-address-uint256-]]
- ==== `[.contract-item-name]#++_isAuthorized++#++(address owner, address spender, uint256 tokenId) → bool++` [.item-kind]#internal#
- Returns whether `spender` is allowed to manage `owner`'s tokens, or `tokenId` in
- particular (ignoring whether it is owned by `owner`).
- WARNING: This function assumes that `owner` is the actual owner of `tokenId` and does not verify this
- assumption.
- [.contract-item]
- [[ERC721-_checkAuthorized-address-address-uint256-]]
- ==== `[.contract-item-name]#++_checkAuthorized++#++(address owner, address spender, uint256 tokenId)++` [.item-kind]#internal#
- Checks if `spender` can operate on `tokenId`, assuming the provided `owner` is the actual owner.
- Reverts if:
- - `spender` does not have approval from `owner` for `tokenId`.
- - `spender` does not have approval to manage all of `owner`'s assets.
- WARNING: This function assumes that `owner` is the actual owner of `tokenId` and does not verify this
- assumption.
- [.contract-item]
- [[ERC721-_increaseBalance-address-uint128-]]
- ==== `[.contract-item-name]#++_increaseBalance++#++(address account, uint128 value)++` [.item-kind]#internal#
- Unsafe write access to the balances, used by extensions that "mint" tokens using an {ownerOf} override.
- NOTE: the value is limited to type(uint128).max. This protect against _balance overflow. It is unrealistic that
- a uint256 would ever overflow from increments when these increments are bounded to uint128 values.
- WARNING: Increasing an account's balance using this function tends to be paired with an override of the
- {_ownerOf} function to resolve the ownership of the corresponding tokens so that balances and ownership
- remain consistent with one another.
- [.contract-item]
- [[ERC721-_update-address-uint256-address-]]
- ==== `[.contract-item-name]#++_update++#++(address to, uint256 tokenId, address auth) → address++` [.item-kind]#internal#
- Transfers `tokenId` from its current owner to `to`, or alternatively mints (or burns) if the current owner
- (or `to`) is the zero address. Returns the owner of the `tokenId` before the update.
- The `auth` argument is optional. If the value passed is non 0, then this function will check that
- `auth` is either the owner of the token, or approved to operate on the token (by the owner).
- Emits a {Transfer} event.
- NOTE: If overriding this function in a way that tracks balances, see also {_increaseBalance}.
- [.contract-item]
- [[ERC721-_mint-address-uint256-]]
- ==== `[.contract-item-name]#++_mint++#++(address to, uint256 tokenId)++` [.item-kind]#internal#
- Mints `tokenId` and transfers it to `to`.
- WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
- Requirements:
- - `tokenId` must not exist.
- - `to` cannot be the zero address.
- Emits a {Transfer} event.
- [.contract-item]
- [[ERC721-_safeMint-address-uint256-]]
- ==== `[.contract-item-name]#++_safeMint++#++(address to, uint256 tokenId)++` [.item-kind]#internal#
- Mints `tokenId`, transfers it to `to` and checks for `to` acceptance.
- Requirements:
- - `tokenId` must not exist.
- - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
- Emits a {Transfer} event.
- [.contract-item]
- [[ERC721-_safeMint-address-uint256-bytes-]]
- ==== `[.contract-item-name]#++_safeMint++#++(address to, uint256 tokenId, bytes data)++` [.item-kind]#internal#
- Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
- forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
- [.contract-item]
- [[ERC721-_burn-uint256-]]
- ==== `[.contract-item-name]#++_burn++#++(uint256 tokenId)++` [.item-kind]#internal#
- Destroys `tokenId`.
- The approval is cleared when the token is burned.
- This is an internal function that does not check if the sender is authorized to operate on the token.
- Requirements:
- - `tokenId` must exist.
- Emits a {Transfer} event.
- [.contract-item]
- [[ERC721-_transfer-address-address-uint256-]]
- ==== `[.contract-item-name]#++_transfer++#++(address from, address to, uint256 tokenId)++` [.item-kind]#internal#
- Transfers `tokenId` from `from` to `to`.
- As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
- Requirements:
- - `to` cannot be the zero address.
- - `tokenId` token must be owned by `from`.
- Emits a {Transfer} event.
- [.contract-item]
- [[ERC721-_safeTransfer-address-address-uint256-]]
- ==== `[.contract-item-name]#++_safeTransfer++#++(address from, address to, uint256 tokenId)++` [.item-kind]#internal#
- Safely transfers `tokenId` token from `from` to `to`, checking that contract recipients
- are aware of the ERC-721 standard to prevent tokens from being forever locked.
- `data` is additional data, it has no specified format and it is sent in call to `to`.
- This internal function is like {safeTransferFrom} in the sense that it invokes
- {IERC721Receiver-onERC721Received} on the receiver, and can be used to e.g.
- implement alternative mechanisms to perform token transfer, such as signature-based.
- Requirements:
- - `tokenId` token must exist and be owned by `from`.
- - `to` cannot be the zero address.
- - `from` cannot be the zero address.
- - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
- Emits a {Transfer} event.
- [.contract-item]
- [[ERC721-_safeTransfer-address-address-uint256-bytes-]]
- ==== `[.contract-item-name]#++_safeTransfer++#++(address from, address to, uint256 tokenId, bytes data)++` [.item-kind]#internal#
- Same as {xref-ERC721-_safeTransfer-address-address-uint256-}[`_safeTransfer`], with an additional `data` parameter which is
- forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
- [.contract-item]
- [[ERC721-_approve-address-uint256-address-]]
- ==== `[.contract-item-name]#++_approve++#++(address to, uint256 tokenId, address auth)++` [.item-kind]#internal#
- Approve `to` to operate on `tokenId`
- The `auth` argument is optional. If the value passed is non 0, then this function will check that `auth` is
- either the owner of the token, or approved to operate on all tokens held by this owner.
- Emits an {Approval} event.
- Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.
- [.contract-item]
- [[ERC721-_approve-address-uint256-address-bool-]]
- ==== `[.contract-item-name]#++_approve++#++(address to, uint256 tokenId, address auth, bool emitEvent)++` [.item-kind]#internal#
- Variant of `_approve` with an optional flag to enable or disable the {Approval} event. The event is not
- emitted in the context of transfers.
- [.contract-item]
- [[ERC721-_setApprovalForAll-address-address-bool-]]
- ==== `[.contract-item-name]#++_setApprovalForAll++#++(address owner, address operator, bool approved)++` [.item-kind]#internal#
- Approve `operator` to operate on all of `owner` tokens
- Requirements:
- - operator can't be the address zero.
- Emits an {ApprovalForAll} event.
- [.contract-item]
- [[ERC721-_requireOwned-uint256-]]
- ==== `[.contract-item-name]#++_requireOwned++#++(uint256 tokenId) → address++` [.item-kind]#internal#
- Reverts if the `tokenId` doesn't have a current owner (it hasn't been minted, or it has been burned).
- Returns the owner.
- Overrides to ownership logic should be done to {_ownerOf}.
- :ERC721OutOfBoundsIndex: pass:normal[xref:#ERC721Enumerable-ERC721OutOfBoundsIndex-address-uint256-[`++ERC721OutOfBoundsIndex++`]]
- :ERC721EnumerableForbiddenBatchMint: pass:normal[xref:#ERC721Enumerable-ERC721EnumerableForbiddenBatchMint--[`++ERC721EnumerableForbiddenBatchMint++`]]
- :supportsInterface: pass:normal[xref:#ERC721Enumerable-supportsInterface-bytes4-[`++supportsInterface++`]]
- :tokenOfOwnerByIndex: pass:normal[xref:#ERC721Enumerable-tokenOfOwnerByIndex-address-uint256-[`++tokenOfOwnerByIndex++`]]
- :totalSupply: pass:normal[xref:#ERC721Enumerable-totalSupply--[`++totalSupply++`]]
- :tokenByIndex: pass:normal[xref:#ERC721Enumerable-tokenByIndex-uint256-[`++tokenByIndex++`]]
- :_update: pass:normal[xref:#ERC721Enumerable-_update-address-uint256-address-[`++_update++`]]
- :_increaseBalance: pass:normal[xref:#ERC721Enumerable-_increaseBalance-address-uint128-[`++_increaseBalance++`]]
- [.contract]
- [[ERC721Enumerable]]
- === `++ERC721Enumerable++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.1.0/contracts/token/ERC721/extensions/ERC721Enumerable.sol[{github-icon},role=heading-link]
- [.hljs-theme-light.nopadding]
- ```solidity
- import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol";
- ```
- This implements an optional extension of {ERC721} defined in the ERC that adds enumerability
- of all the token ids in the contract as well as all token ids owned by each account.
- CAUTION: {ERC721} extensions that implement custom `balanceOf` logic, such as {ERC721Consecutive},
- interfere with enumerability and should not be used together with {ERC721Enumerable}.
- [.contract-index]
- .Functions
- --
- * {xref-ERC721Enumerable-supportsInterface-bytes4-}[`++supportsInterface(interfaceId)++`]
- * {xref-ERC721Enumerable-tokenOfOwnerByIndex-address-uint256-}[`++tokenOfOwnerByIndex(owner, index)++`]
- * {xref-ERC721Enumerable-totalSupply--}[`++totalSupply()++`]
- * {xref-ERC721Enumerable-tokenByIndex-uint256-}[`++tokenByIndex(index)++`]
- * {xref-ERC721Enumerable-_update-address-uint256-address-}[`++_update(to, tokenId, auth)++`]
- * {xref-ERC721Enumerable-_increaseBalance-address-uint128-}[`++_increaseBalance(account, amount)++`]
- [.contract-subindex-inherited]
- .IERC721Enumerable
- [.contract-subindex-inherited]
- .ERC721
- * {xref-ERC721-balanceOf-address-}[`++balanceOf(owner)++`]
- * {xref-ERC721-ownerOf-uint256-}[`++ownerOf(tokenId)++`]
- * {xref-ERC721-name--}[`++name()++`]
- * {xref-ERC721-symbol--}[`++symbol()++`]
- * {xref-ERC721-tokenURI-uint256-}[`++tokenURI(tokenId)++`]
- * {xref-ERC721-_baseURI--}[`++_baseURI()++`]
- * {xref-ERC721-approve-address-uint256-}[`++approve(to, tokenId)++`]
- * {xref-ERC721-getApproved-uint256-}[`++getApproved(tokenId)++`]
- * {xref-ERC721-setApprovalForAll-address-bool-}[`++setApprovalForAll(operator, approved)++`]
- * {xref-ERC721-isApprovedForAll-address-address-}[`++isApprovedForAll(owner, operator)++`]
- * {xref-ERC721-transferFrom-address-address-uint256-}[`++transferFrom(from, to, tokenId)++`]
- * {xref-ERC721-safeTransferFrom-address-address-uint256-}[`++safeTransferFrom(from, to, tokenId)++`]
- * {xref-ERC721-safeTransferFrom-address-address-uint256-bytes-}[`++safeTransferFrom(from, to, tokenId, data)++`]
- * {xref-ERC721-_ownerOf-uint256-}[`++_ownerOf(tokenId)++`]
- * {xref-ERC721-_getApproved-uint256-}[`++_getApproved(tokenId)++`]
- * {xref-ERC721-_isAuthorized-address-address-uint256-}[`++_isAuthorized(owner, spender, tokenId)++`]
- * {xref-ERC721-_checkAuthorized-address-address-uint256-}[`++_checkAuthorized(owner, spender, tokenId)++`]
- * {xref-ERC721-_mint-address-uint256-}[`++_mint(to, tokenId)++`]
- * {xref-ERC721-_safeMint-address-uint256-}[`++_safeMint(to, tokenId)++`]
- * {xref-ERC721-_safeMint-address-uint256-bytes-}[`++_safeMint(to, tokenId, data)++`]
- * {xref-ERC721-_burn-uint256-}[`++_burn(tokenId)++`]
- * {xref-ERC721-_transfer-address-address-uint256-}[`++_transfer(from, to, tokenId)++`]
- * {xref-ERC721-_safeTransfer-address-address-uint256-}[`++_safeTransfer(from, to, tokenId)++`]
- * {xref-ERC721-_safeTransfer-address-address-uint256-bytes-}[`++_safeTransfer(from, to, tokenId, data)++`]
- * {xref-ERC721-_approve-address-uint256-address-}[`++_approve(to, tokenId, auth)++`]
- * {xref-ERC721-_approve-address-uint256-address-bool-}[`++_approve(to, tokenId, auth, emitEvent)++`]
- * {xref-ERC721-_setApprovalForAll-address-address-bool-}[`++_setApprovalForAll(owner, operator, approved)++`]
- * {xref-ERC721-_requireOwned-uint256-}[`++_requireOwned(tokenId)++`]
- [.contract-subindex-inherited]
- .IERC721Errors
- [.contract-subindex-inherited]
- .IERC721Metadata
- [.contract-subindex-inherited]
- .IERC721
- [.contract-subindex-inherited]
- .ERC165
- [.contract-subindex-inherited]
- .IERC165
- --
- [.contract-index]
- .Events
- --
- [.contract-subindex-inherited]
- .IERC721Enumerable
- [.contract-subindex-inherited]
- .ERC721
- [.contract-subindex-inherited]
- .IERC721Errors
- [.contract-subindex-inherited]
- .IERC721Metadata
- [.contract-subindex-inherited]
- .IERC721
- * {xref-IERC721-Transfer-address-address-uint256-}[`++Transfer(from, to, tokenId)++`]
- * {xref-IERC721-Approval-address-address-uint256-}[`++Approval(owner, approved, tokenId)++`]
- * {xref-IERC721-ApprovalForAll-address-address-bool-}[`++ApprovalForAll(owner, operator, approved)++`]
- [.contract-subindex-inherited]
- .ERC165
- [.contract-subindex-inherited]
- .IERC165
- --
- [.contract-index]
- .Errors
- --
- * {xref-ERC721Enumerable-ERC721OutOfBoundsIndex-address-uint256-}[`++ERC721OutOfBoundsIndex(owner, index)++`]
- * {xref-ERC721Enumerable-ERC721EnumerableForbiddenBatchMint--}[`++ERC721EnumerableForbiddenBatchMint()++`]
- [.contract-subindex-inherited]
- .IERC721Enumerable
- [.contract-subindex-inherited]
- .ERC721
- [.contract-subindex-inherited]
- .IERC721Errors
- * {xref-IERC721Errors-ERC721InvalidOwner-address-}[`++ERC721InvalidOwner(owner)++`]
- * {xref-IERC721Errors-ERC721NonexistentToken-uint256-}[`++ERC721NonexistentToken(tokenId)++`]
- * {xref-IERC721Errors-ERC721IncorrectOwner-address-uint256-address-}[`++ERC721IncorrectOwner(sender, tokenId, owner)++`]
- * {xref-IERC721Errors-ERC721InvalidSender-address-}[`++ERC721InvalidSender(sender)++`]
- * {xref-IERC721Errors-ERC721InvalidReceiver-address-}[`++ERC721InvalidReceiver(receiver)++`]
- * {xref-IERC721Errors-ERC721InsufficientApproval-address-uint256-}[`++ERC721InsufficientApproval(operator, tokenId)++`]
- * {xref-IERC721Errors-ERC721InvalidApprover-address-}[`++ERC721InvalidApprover(approver)++`]
- * {xref-IERC721Errors-ERC721InvalidOperator-address-}[`++ERC721InvalidOperator(operator)++`]
- [.contract-subindex-inherited]
- .IERC721Metadata
- [.contract-subindex-inherited]
- .IERC721
- [.contract-subindex-inherited]
- .ERC165
- [.contract-subindex-inherited]
- .IERC165
- --
- [.contract-item]
- [[ERC721Enumerable-supportsInterface-bytes4-]]
- ==== `[.contract-item-name]#++supportsInterface++#++(bytes4 interfaceId) → bool++` [.item-kind]#public#
- See {IERC165-supportsInterface}.
- [.contract-item]
- [[ERC721Enumerable-tokenOfOwnerByIndex-address-uint256-]]
- ==== `[.contract-item-name]#++tokenOfOwnerByIndex++#++(address owner, uint256 index) → uint256++` [.item-kind]#public#
- See {IERC721Enumerable-tokenOfOwnerByIndex}.
- [.contract-item]
- [[ERC721Enumerable-totalSupply--]]
- ==== `[.contract-item-name]#++totalSupply++#++() → uint256++` [.item-kind]#public#
- See {IERC721Enumerable-totalSupply}.
- [.contract-item]
- [[ERC721Enumerable-tokenByIndex-uint256-]]
- ==== `[.contract-item-name]#++tokenByIndex++#++(uint256 index) → uint256++` [.item-kind]#public#
- See {IERC721Enumerable-tokenByIndex}.
- [.contract-item]
- [[ERC721Enumerable-_update-address-uint256-address-]]
- ==== `[.contract-item-name]#++_update++#++(address to, uint256 tokenId, address auth) → address++` [.item-kind]#internal#
- See {ERC721-_update}.
- [.contract-item]
- [[ERC721Enumerable-_increaseBalance-address-uint128-]]
- ==== `[.contract-item-name]#++_increaseBalance++#++(address account, uint128 amount)++` [.item-kind]#internal#
- [.contract-item]
- [[ERC721Enumerable-ERC721OutOfBoundsIndex-address-uint256-]]
- ==== `[.contract-item-name]#++ERC721OutOfBoundsIndex++#++(address owner, uint256 index)++` [.item-kind]#error#
- An `owner`'s token query was out of bounds for `index`.
- NOTE: The owner being `address(0)` indicates a global out of bounds index.
- [.contract-item]
- [[ERC721Enumerable-ERC721EnumerableForbiddenBatchMint--]]
- ==== `[.contract-item-name]#++ERC721EnumerableForbiddenBatchMint++#++()++` [.item-kind]#error#
- Batch mint is not allowed.
- :onERC721Received: pass:normal[xref:#IERC721Receiver-onERC721Received-address-address-uint256-bytes-[`++onERC721Received++`]]
- [.contract]
- [[IERC721Receiver]]
- === `++IERC721Receiver++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.1.0/contracts/token/ERC721/IERC721Receiver.sol[{github-icon},role=heading-link]
- [.hljs-theme-light.nopadding]
- ```solidity
- import "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol";
- ```
- Interface for any contract that wants to support safeTransfers
- from ERC-721 asset contracts.
- [.contract-index]
- .Functions
- --
- * {xref-IERC721Receiver-onERC721Received-address-address-uint256-bytes-}[`++onERC721Received(operator, from, tokenId, data)++`]
- --
- [.contract-item]
- [[IERC721Receiver-onERC721Received-address-address-uint256-bytes-]]
- ==== `[.contract-item-name]#++onERC721Received++#++(address operator, address from, uint256 tokenId, bytes data) → bytes4++` [.item-kind]#external#
- Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
- by `operator` from `from`, this function is called.
- It must return its Solidity selector to confirm the token transfer.
- If any other value is returned or the interface is not implemented by the recipient, the transfer will be
- reverted.
- The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.
- == Extensions
- :_update: pass:normal[xref:#ERC721Pausable-_update-address-uint256-address-[`++_update++`]]
- [.contract]
- [[ERC721Pausable]]
- === `++ERC721Pausable++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.1.0/contracts/token/ERC721/extensions/ERC721Pausable.sol[{github-icon},role=heading-link]
- [.hljs-theme-light.nopadding]
- ```solidity
- import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Pausable.sol";
- ```
- ERC-721 token with pausable token transfers, minting and burning.
- Useful for scenarios such as preventing trades until the end of an evaluation
- period, or having an emergency switch for freezing all token transfers in the
- event of a large bug.
- IMPORTANT: This contract does not include public pause and unpause functions. In
- addition to inheriting this contract, you must define both functions, invoking the
- {Pausable-_pause} and {Pausable-_unpause} internal functions, with appropriate
- access control, e.g. using {AccessControl} or {Ownable}. Not doing so will
- make the contract pause mechanism of the contract unreachable, and thus unusable.
- [.contract-index]
- .Functions
- --
- * {xref-ERC721Pausable-_update-address-uint256-address-}[`++_update(to, tokenId, auth)++`]
- [.contract-subindex-inherited]
- .Pausable
- * {xref-Pausable-paused--}[`++paused()++`]
- * {xref-Pausable-_requireNotPaused--}[`++_requireNotPaused()++`]
- * {xref-Pausable-_requirePaused--}[`++_requirePaused()++`]
- * {xref-Pausable-_pause--}[`++_pause()++`]
- * {xref-Pausable-_unpause--}[`++_unpause()++`]
- [.contract-subindex-inherited]
- .ERC721
- * {xref-ERC721-supportsInterface-bytes4-}[`++supportsInterface(interfaceId)++`]
- * {xref-ERC721-balanceOf-address-}[`++balanceOf(owner)++`]
- * {xref-ERC721-ownerOf-uint256-}[`++ownerOf(tokenId)++`]
- * {xref-ERC721-name--}[`++name()++`]
- * {xref-ERC721-symbol--}[`++symbol()++`]
- * {xref-ERC721-tokenURI-uint256-}[`++tokenURI(tokenId)++`]
- * {xref-ERC721-_baseURI--}[`++_baseURI()++`]
- * {xref-ERC721-approve-address-uint256-}[`++approve(to, tokenId)++`]
- * {xref-ERC721-getApproved-uint256-}[`++getApproved(tokenId)++`]
- * {xref-ERC721-setApprovalForAll-address-bool-}[`++setApprovalForAll(operator, approved)++`]
- * {xref-ERC721-isApprovedForAll-address-address-}[`++isApprovedForAll(owner, operator)++`]
- * {xref-ERC721-transferFrom-address-address-uint256-}[`++transferFrom(from, to, tokenId)++`]
- * {xref-ERC721-safeTransferFrom-address-address-uint256-}[`++safeTransferFrom(from, to, tokenId)++`]
- * {xref-ERC721-safeTransferFrom-address-address-uint256-bytes-}[`++safeTransferFrom(from, to, tokenId, data)++`]
- * {xref-ERC721-_ownerOf-uint256-}[`++_ownerOf(tokenId)++`]
- * {xref-ERC721-_getApproved-uint256-}[`++_getApproved(tokenId)++`]
- * {xref-ERC721-_isAuthorized-address-address-uint256-}[`++_isAuthorized(owner, spender, tokenId)++`]
- * {xref-ERC721-_checkAuthorized-address-address-uint256-}[`++_checkAuthorized(owner, spender, tokenId)++`]
- * {xref-ERC721-_increaseBalance-address-uint128-}[`++_increaseBalance(account, value)++`]
- * {xref-ERC721-_mint-address-uint256-}[`++_mint(to, tokenId)++`]
- * {xref-ERC721-_safeMint-address-uint256-}[`++_safeMint(to, tokenId)++`]
- * {xref-ERC721-_safeMint-address-uint256-bytes-}[`++_safeMint(to, tokenId, data)++`]
- * {xref-ERC721-_burn-uint256-}[`++_burn(tokenId)++`]
- * {xref-ERC721-_transfer-address-address-uint256-}[`++_transfer(from, to, tokenId)++`]
- * {xref-ERC721-_safeTransfer-address-address-uint256-}[`++_safeTransfer(from, to, tokenId)++`]
- * {xref-ERC721-_safeTransfer-address-address-uint256-bytes-}[`++_safeTransfer(from, to, tokenId, data)++`]
- * {xref-ERC721-_approve-address-uint256-address-}[`++_approve(to, tokenId, auth)++`]
- * {xref-ERC721-_approve-address-uint256-address-bool-}[`++_approve(to, tokenId, auth, emitEvent)++`]
- * {xref-ERC721-_setApprovalForAll-address-address-bool-}[`++_setApprovalForAll(owner, operator, approved)++`]
- * {xref-ERC721-_requireOwned-uint256-}[`++_requireOwned(tokenId)++`]
- [.contract-subindex-inherited]
- .IERC721Errors
- [.contract-subindex-inherited]
- .IERC721Metadata
- [.contract-subindex-inherited]
- .IERC721
- [.contract-subindex-inherited]
- .ERC165
- [.contract-subindex-inherited]
- .IERC165
- --
- [.contract-index]
- .Events
- --
- [.contract-subindex-inherited]
- .Pausable
- * {xref-Pausable-Paused-address-}[`++Paused(account)++`]
- * {xref-Pausable-Unpaused-address-}[`++Unpaused(account)++`]
- [.contract-subindex-inherited]
- .ERC721
- [.contract-subindex-inherited]
- .IERC721Errors
- [.contract-subindex-inherited]
- .IERC721Metadata
- [.contract-subindex-inherited]
- .IERC721
- * {xref-IERC721-Transfer-address-address-uint256-}[`++Transfer(from, to, tokenId)++`]
- * {xref-IERC721-Approval-address-address-uint256-}[`++Approval(owner, approved, tokenId)++`]
- * {xref-IERC721-ApprovalForAll-address-address-bool-}[`++ApprovalForAll(owner, operator, approved)++`]
- [.contract-subindex-inherited]
- .ERC165
- [.contract-subindex-inherited]
- .IERC165
- --
- [.contract-index]
- .Errors
- --
- [.contract-subindex-inherited]
- .Pausable
- * {xref-Pausable-EnforcedPause--}[`++EnforcedPause()++`]
- * {xref-Pausable-ExpectedPause--}[`++ExpectedPause()++`]
- [.contract-subindex-inherited]
- .ERC721
- [.contract-subindex-inherited]
- .IERC721Errors
- * {xref-IERC721Errors-ERC721InvalidOwner-address-}[`++ERC721InvalidOwner(owner)++`]
- * {xref-IERC721Errors-ERC721NonexistentToken-uint256-}[`++ERC721NonexistentToken(tokenId)++`]
- * {xref-IERC721Errors-ERC721IncorrectOwner-address-uint256-address-}[`++ERC721IncorrectOwner(sender, tokenId, owner)++`]
- * {xref-IERC721Errors-ERC721InvalidSender-address-}[`++ERC721InvalidSender(sender)++`]
- * {xref-IERC721Errors-ERC721InvalidReceiver-address-}[`++ERC721InvalidReceiver(receiver)++`]
- * {xref-IERC721Errors-ERC721InsufficientApproval-address-uint256-}[`++ERC721InsufficientApproval(operator, tokenId)++`]
- * {xref-IERC721Errors-ERC721InvalidApprover-address-}[`++ERC721InvalidApprover(approver)++`]
- * {xref-IERC721Errors-ERC721InvalidOperator-address-}[`++ERC721InvalidOperator(operator)++`]
- [.contract-subindex-inherited]
- .IERC721Metadata
- [.contract-subindex-inherited]
- .IERC721
- [.contract-subindex-inherited]
- .ERC165
- [.contract-subindex-inherited]
- .IERC165
- --
- [.contract-item]
- [[ERC721Pausable-_update-address-uint256-address-]]
- ==== `[.contract-item-name]#++_update++#++(address to, uint256 tokenId, address auth) → address++` [.item-kind]#internal#
- See {ERC721-_update}.
- Requirements:
- - the contract must not be paused.
- :burn: pass:normal[xref:#ERC721Burnable-burn-uint256-[`++burn++`]]
- [.contract]
- [[ERC721Burnable]]
- === `++ERC721Burnable++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.1.0/contracts/token/ERC721/extensions/ERC721Burnable.sol[{github-icon},role=heading-link]
- [.hljs-theme-light.nopadding]
- ```solidity
- import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Burnable.sol";
- ```
- ERC-721 Token that can be burned (destroyed).
- [.contract-index]
- .Functions
- --
- * {xref-ERC721Burnable-burn-uint256-}[`++burn(tokenId)++`]
- [.contract-subindex-inherited]
- .ERC721
- * {xref-ERC721-supportsInterface-bytes4-}[`++supportsInterface(interfaceId)++`]
- * {xref-ERC721-balanceOf-address-}[`++balanceOf(owner)++`]
- * {xref-ERC721-ownerOf-uint256-}[`++ownerOf(tokenId)++`]
- * {xref-ERC721-name--}[`++name()++`]
- * {xref-ERC721-symbol--}[`++symbol()++`]
- * {xref-ERC721-tokenURI-uint256-}[`++tokenURI(tokenId)++`]
- * {xref-ERC721-_baseURI--}[`++_baseURI()++`]
- * {xref-ERC721-approve-address-uint256-}[`++approve(to, tokenId)++`]
- * {xref-ERC721-getApproved-uint256-}[`++getApproved(tokenId)++`]
- * {xref-ERC721-setApprovalForAll-address-bool-}[`++setApprovalForAll(operator, approved)++`]
- * {xref-ERC721-isApprovedForAll-address-address-}[`++isApprovedForAll(owner, operator)++`]
- * {xref-ERC721-transferFrom-address-address-uint256-}[`++transferFrom(from, to, tokenId)++`]
- * {xref-ERC721-safeTransferFrom-address-address-uint256-}[`++safeTransferFrom(from, to, tokenId)++`]
- * {xref-ERC721-safeTransferFrom-address-address-uint256-bytes-}[`++safeTransferFrom(from, to, tokenId, data)++`]
- * {xref-ERC721-_ownerOf-uint256-}[`++_ownerOf(tokenId)++`]
- * {xref-ERC721-_getApproved-uint256-}[`++_getApproved(tokenId)++`]
- * {xref-ERC721-_isAuthorized-address-address-uint256-}[`++_isAuthorized(owner, spender, tokenId)++`]
- * {xref-ERC721-_checkAuthorized-address-address-uint256-}[`++_checkAuthorized(owner, spender, tokenId)++`]
- * {xref-ERC721-_increaseBalance-address-uint128-}[`++_increaseBalance(account, value)++`]
- * {xref-ERC721-_update-address-uint256-address-}[`++_update(to, tokenId, auth)++`]
- * {xref-ERC721-_mint-address-uint256-}[`++_mint(to, tokenId)++`]
- * {xref-ERC721-_safeMint-address-uint256-}[`++_safeMint(to, tokenId)++`]
- * {xref-ERC721-_safeMint-address-uint256-bytes-}[`++_safeMint(to, tokenId, data)++`]
- * {xref-ERC721-_burn-uint256-}[`++_burn(tokenId)++`]
- * {xref-ERC721-_transfer-address-address-uint256-}[`++_transfer(from, to, tokenId)++`]
- * {xref-ERC721-_safeTransfer-address-address-uint256-}[`++_safeTransfer(from, to, tokenId)++`]
- * {xref-ERC721-_safeTransfer-address-address-uint256-bytes-}[`++_safeTransfer(from, to, tokenId, data)++`]
- * {xref-ERC721-_approve-address-uint256-address-}[`++_approve(to, tokenId, auth)++`]
- * {xref-ERC721-_approve-address-uint256-address-bool-}[`++_approve(to, tokenId, auth, emitEvent)++`]
- * {xref-ERC721-_setApprovalForAll-address-address-bool-}[`++_setApprovalForAll(owner, operator, approved)++`]
- * {xref-ERC721-_requireOwned-uint256-}[`++_requireOwned(tokenId)++`]
- [.contract-subindex-inherited]
- .IERC721Errors
- [.contract-subindex-inherited]
- .IERC721Metadata
- [.contract-subindex-inherited]
- .IERC721
- [.contract-subindex-inherited]
- .ERC165
- [.contract-subindex-inherited]
- .IERC165
- --
- [.contract-index]
- .Events
- --
- [.contract-subindex-inherited]
- .ERC721
- [.contract-subindex-inherited]
- .IERC721Errors
- [.contract-subindex-inherited]
- .IERC721Metadata
- [.contract-subindex-inherited]
- .IERC721
- * {xref-IERC721-Transfer-address-address-uint256-}[`++Transfer(from, to, tokenId)++`]
- * {xref-IERC721-Approval-address-address-uint256-}[`++Approval(owner, approved, tokenId)++`]
- * {xref-IERC721-ApprovalForAll-address-address-bool-}[`++ApprovalForAll(owner, operator, approved)++`]
- [.contract-subindex-inherited]
- .ERC165
- [.contract-subindex-inherited]
- .IERC165
- --
- [.contract-index]
- .Errors
- --
- [.contract-subindex-inherited]
- .ERC721
- [.contract-subindex-inherited]
- .IERC721Errors
- * {xref-IERC721Errors-ERC721InvalidOwner-address-}[`++ERC721InvalidOwner(owner)++`]
- * {xref-IERC721Errors-ERC721NonexistentToken-uint256-}[`++ERC721NonexistentToken(tokenId)++`]
- * {xref-IERC721Errors-ERC721IncorrectOwner-address-uint256-address-}[`++ERC721IncorrectOwner(sender, tokenId, owner)++`]
- * {xref-IERC721Errors-ERC721InvalidSender-address-}[`++ERC721InvalidSender(sender)++`]
- * {xref-IERC721Errors-ERC721InvalidReceiver-address-}[`++ERC721InvalidReceiver(receiver)++`]
- * {xref-IERC721Errors-ERC721InsufficientApproval-address-uint256-}[`++ERC721InsufficientApproval(operator, tokenId)++`]
- * {xref-IERC721Errors-ERC721InvalidApprover-address-}[`++ERC721InvalidApprover(approver)++`]
- * {xref-IERC721Errors-ERC721InvalidOperator-address-}[`++ERC721InvalidOperator(operator)++`]
- [.contract-subindex-inherited]
- .IERC721Metadata
- [.contract-subindex-inherited]
- .IERC721
- [.contract-subindex-inherited]
- .ERC165
- [.contract-subindex-inherited]
- .IERC165
- --
- [.contract-item]
- [[ERC721Burnable-burn-uint256-]]
- ==== `[.contract-item-name]#++burn++#++(uint256 tokenId)++` [.item-kind]#public#
- Burns `tokenId`. See {ERC721-_burn}.
- Requirements:
- - The caller must own `tokenId` or be an approved operator.
- :ERC721ForbiddenBatchMint: pass:normal[xref:#ERC721Consecutive-ERC721ForbiddenBatchMint--[`++ERC721ForbiddenBatchMint++`]]
- :ERC721ExceededMaxBatchMint: pass:normal[xref:#ERC721Consecutive-ERC721ExceededMaxBatchMint-uint256-uint256-[`++ERC721ExceededMaxBatchMint++`]]
- :ERC721ForbiddenMint: pass:normal[xref:#ERC721Consecutive-ERC721ForbiddenMint--[`++ERC721ForbiddenMint++`]]
- :ERC721ForbiddenBatchBurn: pass:normal[xref:#ERC721Consecutive-ERC721ForbiddenBatchBurn--[`++ERC721ForbiddenBatchBurn++`]]
- :_maxBatchSize: pass:normal[xref:#ERC721Consecutive-_maxBatchSize--[`++_maxBatchSize++`]]
- :_ownerOf: pass:normal[xref:#ERC721Consecutive-_ownerOf-uint256-[`++_ownerOf++`]]
- :_mintConsecutive: pass:normal[xref:#ERC721Consecutive-_mintConsecutive-address-uint96-[`++_mintConsecutive++`]]
- :_update: pass:normal[xref:#ERC721Consecutive-_update-address-uint256-address-[`++_update++`]]
- :_firstConsecutiveId: pass:normal[xref:#ERC721Consecutive-_firstConsecutiveId--[`++_firstConsecutiveId++`]]
- [.contract]
- [[ERC721Consecutive]]
- === `++ERC721Consecutive++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.1.0/contracts/token/ERC721/extensions/ERC721Consecutive.sol[{github-icon},role=heading-link]
- [.hljs-theme-light.nopadding]
- ```solidity
- import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Consecutive.sol";
- ```
- Implementation of the ERC-2309 "Consecutive Transfer Extension" as defined in
- https://eips.ethereum.org/EIPS/eip-2309[ERC-2309].
- This extension allows the minting of large batches of tokens, during contract construction only. For upgradeable
- contracts this implies that batch minting is only available during proxy deployment, and not in subsequent upgrades.
- These batches are limited to 5000 tokens at a time by default to accommodate off-chain indexers.
- Using this extension removes the ability to mint single tokens during contract construction. This ability is
- regained after construction. During construction, only batch minting is allowed.
- IMPORTANT: This extension does not call the {_update} function for tokens minted in batch. Any logic added to this
- function through overrides will not be triggered when token are minted in batch. You may want to also override
- {_increaseBalance} or {_mintConsecutive} to account for these mints.
- IMPORTANT: When overriding {_mintConsecutive}, be careful about call ordering. {ownerOf} may return invalid
- values during the {_mintConsecutive} execution if the super call is not called first. To be safe, execute the
- super call before your custom logic.
- [.contract-index]
- .Functions
- --
- * {xref-ERC721Consecutive-_maxBatchSize--}[`++_maxBatchSize()++`]
- * {xref-ERC721Consecutive-_ownerOf-uint256-}[`++_ownerOf(tokenId)++`]
- * {xref-ERC721Consecutive-_mintConsecutive-address-uint96-}[`++_mintConsecutive(to, batchSize)++`]
- * {xref-ERC721Consecutive-_update-address-uint256-address-}[`++_update(to, tokenId, auth)++`]
- * {xref-ERC721Consecutive-_firstConsecutiveId--}[`++_firstConsecutiveId()++`]
- [.contract-subindex-inherited]
- .ERC721
- * {xref-ERC721-supportsInterface-bytes4-}[`++supportsInterface(interfaceId)++`]
- * {xref-ERC721-balanceOf-address-}[`++balanceOf(owner)++`]
- * {xref-ERC721-ownerOf-uint256-}[`++ownerOf(tokenId)++`]
- * {xref-ERC721-name--}[`++name()++`]
- * {xref-ERC721-symbol--}[`++symbol()++`]
- * {xref-ERC721-tokenURI-uint256-}[`++tokenURI(tokenId)++`]
- * {xref-ERC721-_baseURI--}[`++_baseURI()++`]
- * {xref-ERC721-approve-address-uint256-}[`++approve(to, tokenId)++`]
- * {xref-ERC721-getApproved-uint256-}[`++getApproved(tokenId)++`]
- * {xref-ERC721-setApprovalForAll-address-bool-}[`++setApprovalForAll(operator, approved)++`]
- * {xref-ERC721-isApprovedForAll-address-address-}[`++isApprovedForAll(owner, operator)++`]
- * {xref-ERC721-transferFrom-address-address-uint256-}[`++transferFrom(from, to, tokenId)++`]
- * {xref-ERC721-safeTransferFrom-address-address-uint256-}[`++safeTransferFrom(from, to, tokenId)++`]
- * {xref-ERC721-safeTransferFrom-address-address-uint256-bytes-}[`++safeTransferFrom(from, to, tokenId, data)++`]
- * {xref-ERC721-_getApproved-uint256-}[`++_getApproved(tokenId)++`]
- * {xref-ERC721-_isAuthorized-address-address-uint256-}[`++_isAuthorized(owner, spender, tokenId)++`]
- * {xref-ERC721-_checkAuthorized-address-address-uint256-}[`++_checkAuthorized(owner, spender, tokenId)++`]
- * {xref-ERC721-_increaseBalance-address-uint128-}[`++_increaseBalance(account, value)++`]
- * {xref-ERC721-_mint-address-uint256-}[`++_mint(to, tokenId)++`]
- * {xref-ERC721-_safeMint-address-uint256-}[`++_safeMint(to, tokenId)++`]
- * {xref-ERC721-_safeMint-address-uint256-bytes-}[`++_safeMint(to, tokenId, data)++`]
- * {xref-ERC721-_burn-uint256-}[`++_burn(tokenId)++`]
- * {xref-ERC721-_transfer-address-address-uint256-}[`++_transfer(from, to, tokenId)++`]
- * {xref-ERC721-_safeTransfer-address-address-uint256-}[`++_safeTransfer(from, to, tokenId)++`]
- * {xref-ERC721-_safeTransfer-address-address-uint256-bytes-}[`++_safeTransfer(from, to, tokenId, data)++`]
- * {xref-ERC721-_approve-address-uint256-address-}[`++_approve(to, tokenId, auth)++`]
- * {xref-ERC721-_approve-address-uint256-address-bool-}[`++_approve(to, tokenId, auth, emitEvent)++`]
- * {xref-ERC721-_setApprovalForAll-address-address-bool-}[`++_setApprovalForAll(owner, operator, approved)++`]
- * {xref-ERC721-_requireOwned-uint256-}[`++_requireOwned(tokenId)++`]
- [.contract-subindex-inherited]
- .IERC721Errors
- [.contract-subindex-inherited]
- .IERC721Metadata
- [.contract-subindex-inherited]
- .IERC721
- [.contract-subindex-inherited]
- .ERC165
- [.contract-subindex-inherited]
- .IERC165
- [.contract-subindex-inherited]
- .IERC2309
- --
- [.contract-index]
- .Events
- --
- [.contract-subindex-inherited]
- .ERC721
- [.contract-subindex-inherited]
- .IERC721Errors
- [.contract-subindex-inherited]
- .IERC721Metadata
- [.contract-subindex-inherited]
- .IERC721
- * {xref-IERC721-Transfer-address-address-uint256-}[`++Transfer(from, to, tokenId)++`]
- * {xref-IERC721-Approval-address-address-uint256-}[`++Approval(owner, approved, tokenId)++`]
- * {xref-IERC721-ApprovalForAll-address-address-bool-}[`++ApprovalForAll(owner, operator, approved)++`]
- [.contract-subindex-inherited]
- .ERC165
- [.contract-subindex-inherited]
- .IERC165
- [.contract-subindex-inherited]
- .IERC2309
- * {xref-IERC2309-ConsecutiveTransfer-uint256-uint256-address-address-}[`++ConsecutiveTransfer(fromTokenId, toTokenId, fromAddress, toAddress)++`]
- --
- [.contract-index]
- .Errors
- --
- * {xref-ERC721Consecutive-ERC721ForbiddenBatchMint--}[`++ERC721ForbiddenBatchMint()++`]
- * {xref-ERC721Consecutive-ERC721ExceededMaxBatchMint-uint256-uint256-}[`++ERC721ExceededMaxBatchMint(batchSize, maxBatch)++`]
- * {xref-ERC721Consecutive-ERC721ForbiddenMint--}[`++ERC721ForbiddenMint()++`]
- * {xref-ERC721Consecutive-ERC721ForbiddenBatchBurn--}[`++ERC721ForbiddenBatchBurn()++`]
- [.contract-subindex-inherited]
- .ERC721
- [.contract-subindex-inherited]
- .IERC721Errors
- * {xref-IERC721Errors-ERC721InvalidOwner-address-}[`++ERC721InvalidOwner(owner)++`]
- * {xref-IERC721Errors-ERC721NonexistentToken-uint256-}[`++ERC721NonexistentToken(tokenId)++`]
- * {xref-IERC721Errors-ERC721IncorrectOwner-address-uint256-address-}[`++ERC721IncorrectOwner(sender, tokenId, owner)++`]
- * {xref-IERC721Errors-ERC721InvalidSender-address-}[`++ERC721InvalidSender(sender)++`]
- * {xref-IERC721Errors-ERC721InvalidReceiver-address-}[`++ERC721InvalidReceiver(receiver)++`]
- * {xref-IERC721Errors-ERC721InsufficientApproval-address-uint256-}[`++ERC721InsufficientApproval(operator, tokenId)++`]
- * {xref-IERC721Errors-ERC721InvalidApprover-address-}[`++ERC721InvalidApprover(approver)++`]
- * {xref-IERC721Errors-ERC721InvalidOperator-address-}[`++ERC721InvalidOperator(operator)++`]
- [.contract-subindex-inherited]
- .IERC721Metadata
- [.contract-subindex-inherited]
- .IERC721
- [.contract-subindex-inherited]
- .ERC165
- [.contract-subindex-inherited]
- .IERC165
- [.contract-subindex-inherited]
- .IERC2309
- --
- [.contract-item]
- [[ERC721Consecutive-_maxBatchSize--]]
- ==== `[.contract-item-name]#++_maxBatchSize++#++() → uint96++` [.item-kind]#internal#
- Maximum size of a batch of consecutive tokens. This is designed to limit stress on off-chain indexing
- services that have to record one entry per token, and have protections against "unreasonably large" batches of
- tokens.
- NOTE: Overriding the default value of 5000 will not cause on-chain issues, but may result in the asset not being
- correctly supported by off-chain indexing services (including marketplaces).
- [.contract-item]
- [[ERC721Consecutive-_ownerOf-uint256-]]
- ==== `[.contract-item-name]#++_ownerOf++#++(uint256 tokenId) → address++` [.item-kind]#internal#
- See {ERC721-_ownerOf}. Override that checks the sequential ownership structure for tokens that have
- been minted as part of a batch, and not yet transferred.
- [.contract-item]
- [[ERC721Consecutive-_mintConsecutive-address-uint96-]]
- ==== `[.contract-item-name]#++_mintConsecutive++#++(address to, uint96 batchSize) → uint96++` [.item-kind]#internal#
- Mint a batch of tokens of length `batchSize` for `to`. Returns the token id of the first token minted in the
- batch; if `batchSize` is 0, returns the number of consecutive ids minted so far.
- Requirements:
- - `batchSize` must not be greater than {_maxBatchSize}.
- - The function is called in the constructor of the contract (directly or indirectly).
- CAUTION: Does not emit a `Transfer` event. This is ERC-721 compliant as long as it is done inside of the
- constructor, which is enforced by this function.
- CAUTION: Does not invoke `onERC721Received` on the receiver.
- Emits a {IERC2309-ConsecutiveTransfer} event.
- [.contract-item]
- [[ERC721Consecutive-_update-address-uint256-address-]]
- ==== `[.contract-item-name]#++_update++#++(address to, uint256 tokenId, address auth) → address++` [.item-kind]#internal#
- See {ERC721-_update}. Override version that restricts normal minting to after construction.
- WARNING: Using {ERC721Consecutive} prevents minting during construction in favor of {_mintConsecutive}.
- After construction, {_mintConsecutive} is no longer available and minting through {_update} becomes available.
- [.contract-item]
- [[ERC721Consecutive-_firstConsecutiveId--]]
- ==== `[.contract-item-name]#++_firstConsecutiveId++#++() → uint96++` [.item-kind]#internal#
- Used to offset the first token id in {_nextConsecutiveId}
- [.contract-item]
- [[ERC721Consecutive-ERC721ForbiddenBatchMint--]]
- ==== `[.contract-item-name]#++ERC721ForbiddenBatchMint++#++()++` [.item-kind]#error#
- Batch mint is restricted to the constructor.
- Any batch mint not emitting the {IERC721-Transfer} event outside of the constructor
- is non ERC-721 compliant.
- [.contract-item]
- [[ERC721Consecutive-ERC721ExceededMaxBatchMint-uint256-uint256-]]
- ==== `[.contract-item-name]#++ERC721ExceededMaxBatchMint++#++(uint256 batchSize, uint256 maxBatch)++` [.item-kind]#error#
- Exceeds the max amount of mints per batch.
- [.contract-item]
- [[ERC721Consecutive-ERC721ForbiddenMint--]]
- ==== `[.contract-item-name]#++ERC721ForbiddenMint++#++()++` [.item-kind]#error#
- Individual minting is not allowed.
- [.contract-item]
- [[ERC721Consecutive-ERC721ForbiddenBatchBurn--]]
- ==== `[.contract-item-name]#++ERC721ForbiddenBatchBurn++#++()++` [.item-kind]#error#
- Batch burn is not supported.
- :supportsInterface: pass:normal[xref:#ERC721URIStorage-supportsInterface-bytes4-[`++supportsInterface++`]]
- :tokenURI: pass:normal[xref:#ERC721URIStorage-tokenURI-uint256-[`++tokenURI++`]]
- :_setTokenURI: pass:normal[xref:#ERC721URIStorage-_setTokenURI-uint256-string-[`++_setTokenURI++`]]
- [.contract]
- [[ERC721URIStorage]]
- === `++ERC721URIStorage++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.1.0/contracts/token/ERC721/extensions/ERC721URIStorage.sol[{github-icon},role=heading-link]
- [.hljs-theme-light.nopadding]
- ```solidity
- import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";
- ```
- ERC-721 token with storage based token URI management.
- [.contract-index]
- .Functions
- --
- * {xref-ERC721URIStorage-supportsInterface-bytes4-}[`++supportsInterface(interfaceId)++`]
- * {xref-ERC721URIStorage-tokenURI-uint256-}[`++tokenURI(tokenId)++`]
- * {xref-ERC721URIStorage-_setTokenURI-uint256-string-}[`++_setTokenURI(tokenId, _tokenURI)++`]
- [.contract-subindex-inherited]
- .ERC721
- * {xref-ERC721-balanceOf-address-}[`++balanceOf(owner)++`]
- * {xref-ERC721-ownerOf-uint256-}[`++ownerOf(tokenId)++`]
- * {xref-ERC721-name--}[`++name()++`]
- * {xref-ERC721-symbol--}[`++symbol()++`]
- * {xref-ERC721-_baseURI--}[`++_baseURI()++`]
- * {xref-ERC721-approve-address-uint256-}[`++approve(to, tokenId)++`]
- * {xref-ERC721-getApproved-uint256-}[`++getApproved(tokenId)++`]
- * {xref-ERC721-setApprovalForAll-address-bool-}[`++setApprovalForAll(operator, approved)++`]
- * {xref-ERC721-isApprovedForAll-address-address-}[`++isApprovedForAll(owner, operator)++`]
- * {xref-ERC721-transferFrom-address-address-uint256-}[`++transferFrom(from, to, tokenId)++`]
- * {xref-ERC721-safeTransferFrom-address-address-uint256-}[`++safeTransferFrom(from, to, tokenId)++`]
- * {xref-ERC721-safeTransferFrom-address-address-uint256-bytes-}[`++safeTransferFrom(from, to, tokenId, data)++`]
- * {xref-ERC721-_ownerOf-uint256-}[`++_ownerOf(tokenId)++`]
- * {xref-ERC721-_getApproved-uint256-}[`++_getApproved(tokenId)++`]
- * {xref-ERC721-_isAuthorized-address-address-uint256-}[`++_isAuthorized(owner, spender, tokenId)++`]
- * {xref-ERC721-_checkAuthorized-address-address-uint256-}[`++_checkAuthorized(owner, spender, tokenId)++`]
- * {xref-ERC721-_increaseBalance-address-uint128-}[`++_increaseBalance(account, value)++`]
- * {xref-ERC721-_update-address-uint256-address-}[`++_update(to, tokenId, auth)++`]
- * {xref-ERC721-_mint-address-uint256-}[`++_mint(to, tokenId)++`]
- * {xref-ERC721-_safeMint-address-uint256-}[`++_safeMint(to, tokenId)++`]
- * {xref-ERC721-_safeMint-address-uint256-bytes-}[`++_safeMint(to, tokenId, data)++`]
- * {xref-ERC721-_burn-uint256-}[`++_burn(tokenId)++`]
- * {xref-ERC721-_transfer-address-address-uint256-}[`++_transfer(from, to, tokenId)++`]
- * {xref-ERC721-_safeTransfer-address-address-uint256-}[`++_safeTransfer(from, to, tokenId)++`]
- * {xref-ERC721-_safeTransfer-address-address-uint256-bytes-}[`++_safeTransfer(from, to, tokenId, data)++`]
- * {xref-ERC721-_approve-address-uint256-address-}[`++_approve(to, tokenId, auth)++`]
- * {xref-ERC721-_approve-address-uint256-address-bool-}[`++_approve(to, tokenId, auth, emitEvent)++`]
- * {xref-ERC721-_setApprovalForAll-address-address-bool-}[`++_setApprovalForAll(owner, operator, approved)++`]
- * {xref-ERC721-_requireOwned-uint256-}[`++_requireOwned(tokenId)++`]
- [.contract-subindex-inherited]
- .IERC721Errors
- [.contract-subindex-inherited]
- .IERC721Metadata
- [.contract-subindex-inherited]
- .IERC4906
- [.contract-subindex-inherited]
- .IERC721
- [.contract-subindex-inherited]
- .ERC165
- [.contract-subindex-inherited]
- .IERC165
- --
- [.contract-index]
- .Events
- --
- [.contract-subindex-inherited]
- .ERC721
- [.contract-subindex-inherited]
- .IERC721Errors
- [.contract-subindex-inherited]
- .IERC721Metadata
- [.contract-subindex-inherited]
- .IERC4906
- * {xref-IERC4906-MetadataUpdate-uint256-}[`++MetadataUpdate(_tokenId)++`]
- * {xref-IERC4906-BatchMetadataUpdate-uint256-uint256-}[`++BatchMetadataUpdate(_fromTokenId, _toTokenId)++`]
- [.contract-subindex-inherited]
- .IERC721
- * {xref-IERC721-Transfer-address-address-uint256-}[`++Transfer(from, to, tokenId)++`]
- * {xref-IERC721-Approval-address-address-uint256-}[`++Approval(owner, approved, tokenId)++`]
- * {xref-IERC721-ApprovalForAll-address-address-bool-}[`++ApprovalForAll(owner, operator, approved)++`]
- [.contract-subindex-inherited]
- .ERC165
- [.contract-subindex-inherited]
- .IERC165
- --
- [.contract-index]
- .Errors
- --
- [.contract-subindex-inherited]
- .ERC721
- [.contract-subindex-inherited]
- .IERC721Errors
- * {xref-IERC721Errors-ERC721InvalidOwner-address-}[`++ERC721InvalidOwner(owner)++`]
- * {xref-IERC721Errors-ERC721NonexistentToken-uint256-}[`++ERC721NonexistentToken(tokenId)++`]
- * {xref-IERC721Errors-ERC721IncorrectOwner-address-uint256-address-}[`++ERC721IncorrectOwner(sender, tokenId, owner)++`]
- * {xref-IERC721Errors-ERC721InvalidSender-address-}[`++ERC721InvalidSender(sender)++`]
- * {xref-IERC721Errors-ERC721InvalidReceiver-address-}[`++ERC721InvalidReceiver(receiver)++`]
- * {xref-IERC721Errors-ERC721InsufficientApproval-address-uint256-}[`++ERC721InsufficientApproval(operator, tokenId)++`]
- * {xref-IERC721Errors-ERC721InvalidApprover-address-}[`++ERC721InvalidApprover(approver)++`]
- * {xref-IERC721Errors-ERC721InvalidOperator-address-}[`++ERC721InvalidOperator(operator)++`]
- [.contract-subindex-inherited]
- .IERC721Metadata
- [.contract-subindex-inherited]
- .IERC4906
- [.contract-subindex-inherited]
- .IERC721
- [.contract-subindex-inherited]
- .ERC165
- [.contract-subindex-inherited]
- .IERC165
- --
- [.contract-item]
- [[ERC721URIStorage-supportsInterface-bytes4-]]
- ==== `[.contract-item-name]#++supportsInterface++#++(bytes4 interfaceId) → bool++` [.item-kind]#public#
- See {IERC165-supportsInterface}
- [.contract-item]
- [[ERC721URIStorage-tokenURI-uint256-]]
- ==== `[.contract-item-name]#++tokenURI++#++(uint256 tokenId) → string++` [.item-kind]#public#
- See {IERC721Metadata-tokenURI}.
- [.contract-item]
- [[ERC721URIStorage-_setTokenURI-uint256-string-]]
- ==== `[.contract-item-name]#++_setTokenURI++#++(uint256 tokenId, string _tokenURI)++` [.item-kind]#internal#
- Sets `_tokenURI` as the tokenURI of `tokenId`.
- Emits {MetadataUpdate}.
- :_update: pass:normal[xref:#ERC721Votes-_update-address-uint256-address-[`++_update++`]]
- :_getVotingUnits: pass:normal[xref:#ERC721Votes-_getVotingUnits-address-[`++_getVotingUnits++`]]
- :_increaseBalance: pass:normal[xref:#ERC721Votes-_increaseBalance-address-uint128-[`++_increaseBalance++`]]
- [.contract]
- [[ERC721Votes]]
- === `++ERC721Votes++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.1.0/contracts/token/ERC721/extensions/ERC721Votes.sol[{github-icon},role=heading-link]
- [.hljs-theme-light.nopadding]
- ```solidity
- import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Votes.sol";
- ```
- Extension of ERC-721 to support voting and delegation as implemented by {Votes}, where each individual NFT counts
- as 1 vote unit.
- Tokens do not count as votes until they are delegated, because votes must be tracked which incurs an additional cost
- on every transfer. Token holders can either delegate to a trusted representative who will decide how to make use of
- the votes in governance decisions, or they can delegate to themselves to be their own representative.
- [.contract-index]
- .Functions
- --
- * {xref-ERC721Votes-_update-address-uint256-address-}[`++_update(to, tokenId, auth)++`]
- * {xref-ERC721Votes-_getVotingUnits-address-}[`++_getVotingUnits(account)++`]
- * {xref-ERC721Votes-_increaseBalance-address-uint128-}[`++_increaseBalance(account, amount)++`]
- [.contract-subindex-inherited]
- .Votes
- * {xref-Votes-clock--}[`++clock()++`]
- * {xref-Votes-CLOCK_MODE--}[`++CLOCK_MODE()++`]
- * {xref-Votes-getVotes-address-}[`++getVotes(account)++`]
- * {xref-Votes-getPastVotes-address-uint256-}[`++getPastVotes(account, timepoint)++`]
- * {xref-Votes-getPastTotalSupply-uint256-}[`++getPastTotalSupply(timepoint)++`]
- * {xref-Votes-_getTotalSupply--}[`++_getTotalSupply()++`]
- * {xref-Votes-delegates-address-}[`++delegates(account)++`]
- * {xref-Votes-delegate-address-}[`++delegate(delegatee)++`]
- * {xref-Votes-delegateBySig-address-uint256-uint256-uint8-bytes32-bytes32-}[`++delegateBySig(delegatee, nonce, expiry, v, r, s)++`]
- * {xref-Votes-_delegate-address-address-}[`++_delegate(account, delegatee)++`]
- * {xref-Votes-_transferVotingUnits-address-address-uint256-}[`++_transferVotingUnits(from, to, amount)++`]
- * {xref-Votes-_moveDelegateVotes-address-address-uint256-}[`++_moveDelegateVotes(from, to, amount)++`]
- * {xref-Votes-_numCheckpoints-address-}[`++_numCheckpoints(account)++`]
- * {xref-Votes-_checkpoints-address-uint32-}[`++_checkpoints(account, pos)++`]
- [.contract-subindex-inherited]
- .IERC5805
- [.contract-subindex-inherited]
- .IVotes
- [.contract-subindex-inherited]
- .IERC6372
- [.contract-subindex-inherited]
- .Nonces
- * {xref-Nonces-nonces-address-}[`++nonces(owner)++`]
- * {xref-Nonces-_useNonce-address-}[`++_useNonce(owner)++`]
- * {xref-Nonces-_useCheckedNonce-address-uint256-}[`++_useCheckedNonce(owner, nonce)++`]
- [.contract-subindex-inherited]
- .EIP712
- * {xref-EIP712-_domainSeparatorV4--}[`++_domainSeparatorV4()++`]
- * {xref-EIP712-_hashTypedDataV4-bytes32-}[`++_hashTypedDataV4(structHash)++`]
- * {xref-EIP712-eip712Domain--}[`++eip712Domain()++`]
- * {xref-EIP712-_EIP712Name--}[`++_EIP712Name()++`]
- * {xref-EIP712-_EIP712Version--}[`++_EIP712Version()++`]
- [.contract-subindex-inherited]
- .IERC5267
- [.contract-subindex-inherited]
- .ERC721
- * {xref-ERC721-supportsInterface-bytes4-}[`++supportsInterface(interfaceId)++`]
- * {xref-ERC721-balanceOf-address-}[`++balanceOf(owner)++`]
- * {xref-ERC721-ownerOf-uint256-}[`++ownerOf(tokenId)++`]
- * {xref-ERC721-name--}[`++name()++`]
- * {xref-ERC721-symbol--}[`++symbol()++`]
- * {xref-ERC721-tokenURI-uint256-}[`++tokenURI(tokenId)++`]
- * {xref-ERC721-_baseURI--}[`++_baseURI()++`]
- * {xref-ERC721-approve-address-uint256-}[`++approve(to, tokenId)++`]
- * {xref-ERC721-getApproved-uint256-}[`++getApproved(tokenId)++`]
- * {xref-ERC721-setApprovalForAll-address-bool-}[`++setApprovalForAll(operator, approved)++`]
- * {xref-ERC721-isApprovedForAll-address-address-}[`++isApprovedForAll(owner, operator)++`]
- * {xref-ERC721-transferFrom-address-address-uint256-}[`++transferFrom(from, to, tokenId)++`]
- * {xref-ERC721-safeTransferFrom-address-address-uint256-}[`++safeTransferFrom(from, to, tokenId)++`]
- * {xref-ERC721-safeTransferFrom-address-address-uint256-bytes-}[`++safeTransferFrom(from, to, tokenId, data)++`]
- * {xref-ERC721-_ownerOf-uint256-}[`++_ownerOf(tokenId)++`]
- * {xref-ERC721-_getApproved-uint256-}[`++_getApproved(tokenId)++`]
- * {xref-ERC721-_isAuthorized-address-address-uint256-}[`++_isAuthorized(owner, spender, tokenId)++`]
- * {xref-ERC721-_checkAuthorized-address-address-uint256-}[`++_checkAuthorized(owner, spender, tokenId)++`]
- * {xref-ERC721-_mint-address-uint256-}[`++_mint(to, tokenId)++`]
- * {xref-ERC721-_safeMint-address-uint256-}[`++_safeMint(to, tokenId)++`]
- * {xref-ERC721-_safeMint-address-uint256-bytes-}[`++_safeMint(to, tokenId, data)++`]
- * {xref-ERC721-_burn-uint256-}[`++_burn(tokenId)++`]
- * {xref-ERC721-_transfer-address-address-uint256-}[`++_transfer(from, to, tokenId)++`]
- * {xref-ERC721-_safeTransfer-address-address-uint256-}[`++_safeTransfer(from, to, tokenId)++`]
- * {xref-ERC721-_safeTransfer-address-address-uint256-bytes-}[`++_safeTransfer(from, to, tokenId, data)++`]
- * {xref-ERC721-_approve-address-uint256-address-}[`++_approve(to, tokenId, auth)++`]
- * {xref-ERC721-_approve-address-uint256-address-bool-}[`++_approve(to, tokenId, auth, emitEvent)++`]
- * {xref-ERC721-_setApprovalForAll-address-address-bool-}[`++_setApprovalForAll(owner, operator, approved)++`]
- * {xref-ERC721-_requireOwned-uint256-}[`++_requireOwned(tokenId)++`]
- [.contract-subindex-inherited]
- .IERC721Errors
- [.contract-subindex-inherited]
- .IERC721Metadata
- [.contract-subindex-inherited]
- .IERC721
- [.contract-subindex-inherited]
- .ERC165
- [.contract-subindex-inherited]
- .IERC165
- --
- [.contract-index]
- .Events
- --
- [.contract-subindex-inherited]
- .Votes
- [.contract-subindex-inherited]
- .IERC5805
- [.contract-subindex-inherited]
- .IVotes
- * {xref-IVotes-DelegateChanged-address-address-address-}[`++DelegateChanged(delegator, fromDelegate, toDelegate)++`]
- * {xref-IVotes-DelegateVotesChanged-address-uint256-uint256-}[`++DelegateVotesChanged(delegate, previousVotes, newVotes)++`]
- [.contract-subindex-inherited]
- .IERC6372
- [.contract-subindex-inherited]
- .Nonces
- [.contract-subindex-inherited]
- .EIP712
- [.contract-subindex-inherited]
- .IERC5267
- * {xref-IERC5267-EIP712DomainChanged--}[`++EIP712DomainChanged()++`]
- [.contract-subindex-inherited]
- .ERC721
- [.contract-subindex-inherited]
- .IERC721Errors
- [.contract-subindex-inherited]
- .IERC721Metadata
- [.contract-subindex-inherited]
- .IERC721
- * {xref-IERC721-Transfer-address-address-uint256-}[`++Transfer(from, to, tokenId)++`]
- * {xref-IERC721-Approval-address-address-uint256-}[`++Approval(owner, approved, tokenId)++`]
- * {xref-IERC721-ApprovalForAll-address-address-bool-}[`++ApprovalForAll(owner, operator, approved)++`]
- [.contract-subindex-inherited]
- .ERC165
- [.contract-subindex-inherited]
- .IERC165
- --
- [.contract-index]
- .Errors
- --
- [.contract-subindex-inherited]
- .Votes
- * {xref-Votes-ERC6372InconsistentClock--}[`++ERC6372InconsistentClock()++`]
- * {xref-Votes-ERC5805FutureLookup-uint256-uint48-}[`++ERC5805FutureLookup(timepoint, clock)++`]
- [.contract-subindex-inherited]
- .IERC5805
- [.contract-subindex-inherited]
- .IVotes
- * {xref-IVotes-VotesExpiredSignature-uint256-}[`++VotesExpiredSignature(expiry)++`]
- [.contract-subindex-inherited]
- .IERC6372
- [.contract-subindex-inherited]
- .Nonces
- * {xref-Nonces-InvalidAccountNonce-address-uint256-}[`++InvalidAccountNonce(account, currentNonce)++`]
- [.contract-subindex-inherited]
- .EIP712
- [.contract-subindex-inherited]
- .IERC5267
- [.contract-subindex-inherited]
- .ERC721
- [.contract-subindex-inherited]
- .IERC721Errors
- * {xref-IERC721Errors-ERC721InvalidOwner-address-}[`++ERC721InvalidOwner(owner)++`]
- * {xref-IERC721Errors-ERC721NonexistentToken-uint256-}[`++ERC721NonexistentToken(tokenId)++`]
- * {xref-IERC721Errors-ERC721IncorrectOwner-address-uint256-address-}[`++ERC721IncorrectOwner(sender, tokenId, owner)++`]
- * {xref-IERC721Errors-ERC721InvalidSender-address-}[`++ERC721InvalidSender(sender)++`]
- * {xref-IERC721Errors-ERC721InvalidReceiver-address-}[`++ERC721InvalidReceiver(receiver)++`]
- * {xref-IERC721Errors-ERC721InsufficientApproval-address-uint256-}[`++ERC721InsufficientApproval(operator, tokenId)++`]
- * {xref-IERC721Errors-ERC721InvalidApprover-address-}[`++ERC721InvalidApprover(approver)++`]
- * {xref-IERC721Errors-ERC721InvalidOperator-address-}[`++ERC721InvalidOperator(operator)++`]
- [.contract-subindex-inherited]
- .IERC721Metadata
- [.contract-subindex-inherited]
- .IERC721
- [.contract-subindex-inherited]
- .ERC165
- [.contract-subindex-inherited]
- .IERC165
- --
- [.contract-item]
- [[ERC721Votes-_update-address-uint256-address-]]
- ==== `[.contract-item-name]#++_update++#++(address to, uint256 tokenId, address auth) → address++` [.item-kind]#internal#
- See {ERC721-_update}. Adjusts votes when tokens are transferred.
- Emits a {IVotes-DelegateVotesChanged} event.
- [.contract-item]
- [[ERC721Votes-_getVotingUnits-address-]]
- ==== `[.contract-item-name]#++_getVotingUnits++#++(address account) → uint256++` [.item-kind]#internal#
- Returns the balance of `account`.
- WARNING: Overriding this function will likely result in incorrect vote tracking.
- [.contract-item]
- [[ERC721Votes-_increaseBalance-address-uint128-]]
- ==== `[.contract-item-name]#++_increaseBalance++#++(address account, uint128 amount)++` [.item-kind]#internal#
- See {ERC721-_increaseBalance}. We need that to account tokens that were minted in batch.
- :supportsInterface: pass:normal[xref:#ERC721Royalty-supportsInterface-bytes4-[`++supportsInterface++`]]
- [.contract]
- [[ERC721Royalty]]
- === `++ERC721Royalty++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.1.0/contracts/token/ERC721/extensions/ERC721Royalty.sol[{github-icon},role=heading-link]
- [.hljs-theme-light.nopadding]
- ```solidity
- import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Royalty.sol";
- ```
- Extension of ERC-721 with the ERC-2981 NFT Royalty Standard, a standardized way to retrieve royalty payment
- information.
- Royalty information can be specified globally for all token ids via {ERC2981-_setDefaultRoyalty}, and/or individually
- for specific token ids via {ERC2981-_setTokenRoyalty}. The latter takes precedence over the first.
- IMPORTANT: ERC-2981 only specifies a way to signal royalty information and does not enforce its payment. See
- https://eips.ethereum.org/EIPS/eip-2981#optional-royalty-payments[Rationale] in the ERC. Marketplaces are expected to
- voluntarily pay royalties together with sales, but note that this standard is not yet widely supported.
- [.contract-index]
- .Functions
- --
- * {xref-ERC721Royalty-supportsInterface-bytes4-}[`++supportsInterface(interfaceId)++`]
- [.contract-subindex-inherited]
- .ERC721
- * {xref-ERC721-balanceOf-address-}[`++balanceOf(owner)++`]
- * {xref-ERC721-ownerOf-uint256-}[`++ownerOf(tokenId)++`]
- * {xref-ERC721-name--}[`++name()++`]
- * {xref-ERC721-symbol--}[`++symbol()++`]
- * {xref-ERC721-tokenURI-uint256-}[`++tokenURI(tokenId)++`]
- * {xref-ERC721-_baseURI--}[`++_baseURI()++`]
- * {xref-ERC721-approve-address-uint256-}[`++approve(to, tokenId)++`]
- * {xref-ERC721-getApproved-uint256-}[`++getApproved(tokenId)++`]
- * {xref-ERC721-setApprovalForAll-address-bool-}[`++setApprovalForAll(operator, approved)++`]
- * {xref-ERC721-isApprovedForAll-address-address-}[`++isApprovedForAll(owner, operator)++`]
- * {xref-ERC721-transferFrom-address-address-uint256-}[`++transferFrom(from, to, tokenId)++`]
- * {xref-ERC721-safeTransferFrom-address-address-uint256-}[`++safeTransferFrom(from, to, tokenId)++`]
- * {xref-ERC721-safeTransferFrom-address-address-uint256-bytes-}[`++safeTransferFrom(from, to, tokenId, data)++`]
- * {xref-ERC721-_ownerOf-uint256-}[`++_ownerOf(tokenId)++`]
- * {xref-ERC721-_getApproved-uint256-}[`++_getApproved(tokenId)++`]
- * {xref-ERC721-_isAuthorized-address-address-uint256-}[`++_isAuthorized(owner, spender, tokenId)++`]
- * {xref-ERC721-_checkAuthorized-address-address-uint256-}[`++_checkAuthorized(owner, spender, tokenId)++`]
- * {xref-ERC721-_increaseBalance-address-uint128-}[`++_increaseBalance(account, value)++`]
- * {xref-ERC721-_update-address-uint256-address-}[`++_update(to, tokenId, auth)++`]
- * {xref-ERC721-_mint-address-uint256-}[`++_mint(to, tokenId)++`]
- * {xref-ERC721-_safeMint-address-uint256-}[`++_safeMint(to, tokenId)++`]
- * {xref-ERC721-_safeMint-address-uint256-bytes-}[`++_safeMint(to, tokenId, data)++`]
- * {xref-ERC721-_burn-uint256-}[`++_burn(tokenId)++`]
- * {xref-ERC721-_transfer-address-address-uint256-}[`++_transfer(from, to, tokenId)++`]
- * {xref-ERC721-_safeTransfer-address-address-uint256-}[`++_safeTransfer(from, to, tokenId)++`]
- * {xref-ERC721-_safeTransfer-address-address-uint256-bytes-}[`++_safeTransfer(from, to, tokenId, data)++`]
- * {xref-ERC721-_approve-address-uint256-address-}[`++_approve(to, tokenId, auth)++`]
- * {xref-ERC721-_approve-address-uint256-address-bool-}[`++_approve(to, tokenId, auth, emitEvent)++`]
- * {xref-ERC721-_setApprovalForAll-address-address-bool-}[`++_setApprovalForAll(owner, operator, approved)++`]
- * {xref-ERC721-_requireOwned-uint256-}[`++_requireOwned(tokenId)++`]
- [.contract-subindex-inherited]
- .IERC721Errors
- [.contract-subindex-inherited]
- .IERC721Metadata
- [.contract-subindex-inherited]
- .IERC721
- [.contract-subindex-inherited]
- .ERC2981
- * {xref-ERC2981-royaltyInfo-uint256-uint256-}[`++royaltyInfo(tokenId, salePrice)++`]
- * {xref-ERC2981-_feeDenominator--}[`++_feeDenominator()++`]
- * {xref-ERC2981-_setDefaultRoyalty-address-uint96-}[`++_setDefaultRoyalty(receiver, feeNumerator)++`]
- * {xref-ERC2981-_deleteDefaultRoyalty--}[`++_deleteDefaultRoyalty()++`]
- * {xref-ERC2981-_setTokenRoyalty-uint256-address-uint96-}[`++_setTokenRoyalty(tokenId, receiver, feeNumerator)++`]
- * {xref-ERC2981-_resetTokenRoyalty-uint256-}[`++_resetTokenRoyalty(tokenId)++`]
- [.contract-subindex-inherited]
- .ERC165
- [.contract-subindex-inherited]
- .IERC2981
- [.contract-subindex-inherited]
- .IERC165
- --
- [.contract-index]
- .Events
- --
- [.contract-subindex-inherited]
- .ERC721
- [.contract-subindex-inherited]
- .IERC721Errors
- [.contract-subindex-inherited]
- .IERC721Metadata
- [.contract-subindex-inherited]
- .IERC721
- * {xref-IERC721-Transfer-address-address-uint256-}[`++Transfer(from, to, tokenId)++`]
- * {xref-IERC721-Approval-address-address-uint256-}[`++Approval(owner, approved, tokenId)++`]
- * {xref-IERC721-ApprovalForAll-address-address-bool-}[`++ApprovalForAll(owner, operator, approved)++`]
- [.contract-subindex-inherited]
- .ERC2981
- [.contract-subindex-inherited]
- .ERC165
- [.contract-subindex-inherited]
- .IERC2981
- [.contract-subindex-inherited]
- .IERC165
- --
- [.contract-index]
- .Errors
- --
- [.contract-subindex-inherited]
- .ERC721
- [.contract-subindex-inherited]
- .IERC721Errors
- * {xref-IERC721Errors-ERC721InvalidOwner-address-}[`++ERC721InvalidOwner(owner)++`]
- * {xref-IERC721Errors-ERC721NonexistentToken-uint256-}[`++ERC721NonexistentToken(tokenId)++`]
- * {xref-IERC721Errors-ERC721IncorrectOwner-address-uint256-address-}[`++ERC721IncorrectOwner(sender, tokenId, owner)++`]
- * {xref-IERC721Errors-ERC721InvalidSender-address-}[`++ERC721InvalidSender(sender)++`]
- * {xref-IERC721Errors-ERC721InvalidReceiver-address-}[`++ERC721InvalidReceiver(receiver)++`]
- * {xref-IERC721Errors-ERC721InsufficientApproval-address-uint256-}[`++ERC721InsufficientApproval(operator, tokenId)++`]
- * {xref-IERC721Errors-ERC721InvalidApprover-address-}[`++ERC721InvalidApprover(approver)++`]
- * {xref-IERC721Errors-ERC721InvalidOperator-address-}[`++ERC721InvalidOperator(operator)++`]
- [.contract-subindex-inherited]
- .IERC721Metadata
- [.contract-subindex-inherited]
- .IERC721
- [.contract-subindex-inherited]
- .ERC2981
- * {xref-ERC2981-ERC2981InvalidDefaultRoyalty-uint256-uint256-}[`++ERC2981InvalidDefaultRoyalty(numerator, denominator)++`]
- * {xref-ERC2981-ERC2981InvalidDefaultRoyaltyReceiver-address-}[`++ERC2981InvalidDefaultRoyaltyReceiver(receiver)++`]
- * {xref-ERC2981-ERC2981InvalidTokenRoyalty-uint256-uint256-uint256-}[`++ERC2981InvalidTokenRoyalty(tokenId, numerator, denominator)++`]
- * {xref-ERC2981-ERC2981InvalidTokenRoyaltyReceiver-uint256-address-}[`++ERC2981InvalidTokenRoyaltyReceiver(tokenId, receiver)++`]
- [.contract-subindex-inherited]
- .ERC165
- [.contract-subindex-inherited]
- .IERC2981
- [.contract-subindex-inherited]
- .IERC165
- --
- [.contract-item]
- [[ERC721Royalty-supportsInterface-bytes4-]]
- ==== `[.contract-item-name]#++supportsInterface++#++(bytes4 interfaceId) → bool++` [.item-kind]#public#
- See {IERC165-supportsInterface}.
- :ERC721UnsupportedToken: pass:normal[xref:#ERC721Wrapper-ERC721UnsupportedToken-address-[`++ERC721UnsupportedToken++`]]
- :constructor: pass:normal[xref:#ERC721Wrapper-constructor-contract-IERC721-[`++constructor++`]]
- :depositFor: pass:normal[xref:#ERC721Wrapper-depositFor-address-uint256---[`++depositFor++`]]
- :withdrawTo: pass:normal[xref:#ERC721Wrapper-withdrawTo-address-uint256---[`++withdrawTo++`]]
- :onERC721Received: pass:normal[xref:#ERC721Wrapper-onERC721Received-address-address-uint256-bytes-[`++onERC721Received++`]]
- :_recover: pass:normal[xref:#ERC721Wrapper-_recover-address-uint256-[`++_recover++`]]
- :underlying: pass:normal[xref:#ERC721Wrapper-underlying--[`++underlying++`]]
- [.contract]
- [[ERC721Wrapper]]
- === `++ERC721Wrapper++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.1.0/contracts/token/ERC721/extensions/ERC721Wrapper.sol[{github-icon},role=heading-link]
- [.hljs-theme-light.nopadding]
- ```solidity
- import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Wrapper.sol";
- ```
- Extension of the ERC-721 token contract to support token wrapping.
- Users can deposit and withdraw an "underlying token" and receive a "wrapped token" with a matching tokenId. This is
- useful in conjunction with other modules. For example, combining this wrapping mechanism with {ERC721Votes} will allow
- the wrapping of an existing "basic" ERC-721 into a governance token.
- [.contract-index]
- .Functions
- --
- * {xref-ERC721Wrapper-constructor-contract-IERC721-}[`++constructor(underlyingToken)++`]
- * {xref-ERC721Wrapper-depositFor-address-uint256---}[`++depositFor(account, tokenIds)++`]
- * {xref-ERC721Wrapper-withdrawTo-address-uint256---}[`++withdrawTo(account, tokenIds)++`]
- * {xref-ERC721Wrapper-onERC721Received-address-address-uint256-bytes-}[`++onERC721Received(, from, tokenId, )++`]
- * {xref-ERC721Wrapper-_recover-address-uint256-}[`++_recover(account, tokenId)++`]
- * {xref-ERC721Wrapper-underlying--}[`++underlying()++`]
- [.contract-subindex-inherited]
- .IERC721Receiver
- [.contract-subindex-inherited]
- .ERC721
- * {xref-ERC721-supportsInterface-bytes4-}[`++supportsInterface(interfaceId)++`]
- * {xref-ERC721-balanceOf-address-}[`++balanceOf(owner)++`]
- * {xref-ERC721-ownerOf-uint256-}[`++ownerOf(tokenId)++`]
- * {xref-ERC721-name--}[`++name()++`]
- * {xref-ERC721-symbol--}[`++symbol()++`]
- * {xref-ERC721-tokenURI-uint256-}[`++tokenURI(tokenId)++`]
- * {xref-ERC721-_baseURI--}[`++_baseURI()++`]
- * {xref-ERC721-approve-address-uint256-}[`++approve(to, tokenId)++`]
- * {xref-ERC721-getApproved-uint256-}[`++getApproved(tokenId)++`]
- * {xref-ERC721-setApprovalForAll-address-bool-}[`++setApprovalForAll(operator, approved)++`]
- * {xref-ERC721-isApprovedForAll-address-address-}[`++isApprovedForAll(owner, operator)++`]
- * {xref-ERC721-transferFrom-address-address-uint256-}[`++transferFrom(from, to, tokenId)++`]
- * {xref-ERC721-safeTransferFrom-address-address-uint256-}[`++safeTransferFrom(from, to, tokenId)++`]
- * {xref-ERC721-safeTransferFrom-address-address-uint256-bytes-}[`++safeTransferFrom(from, to, tokenId, data)++`]
- * {xref-ERC721-_ownerOf-uint256-}[`++_ownerOf(tokenId)++`]
- * {xref-ERC721-_getApproved-uint256-}[`++_getApproved(tokenId)++`]
- * {xref-ERC721-_isAuthorized-address-address-uint256-}[`++_isAuthorized(owner, spender, tokenId)++`]
- * {xref-ERC721-_checkAuthorized-address-address-uint256-}[`++_checkAuthorized(owner, spender, tokenId)++`]
- * {xref-ERC721-_increaseBalance-address-uint128-}[`++_increaseBalance(account, value)++`]
- * {xref-ERC721-_update-address-uint256-address-}[`++_update(to, tokenId, auth)++`]
- * {xref-ERC721-_mint-address-uint256-}[`++_mint(to, tokenId)++`]
- * {xref-ERC721-_safeMint-address-uint256-}[`++_safeMint(to, tokenId)++`]
- * {xref-ERC721-_safeMint-address-uint256-bytes-}[`++_safeMint(to, tokenId, data)++`]
- * {xref-ERC721-_burn-uint256-}[`++_burn(tokenId)++`]
- * {xref-ERC721-_transfer-address-address-uint256-}[`++_transfer(from, to, tokenId)++`]
- * {xref-ERC721-_safeTransfer-address-address-uint256-}[`++_safeTransfer(from, to, tokenId)++`]
- * {xref-ERC721-_safeTransfer-address-address-uint256-bytes-}[`++_safeTransfer(from, to, tokenId, data)++`]
- * {xref-ERC721-_approve-address-uint256-address-}[`++_approve(to, tokenId, auth)++`]
- * {xref-ERC721-_approve-address-uint256-address-bool-}[`++_approve(to, tokenId, auth, emitEvent)++`]
- * {xref-ERC721-_setApprovalForAll-address-address-bool-}[`++_setApprovalForAll(owner, operator, approved)++`]
- * {xref-ERC721-_requireOwned-uint256-}[`++_requireOwned(tokenId)++`]
- [.contract-subindex-inherited]
- .IERC721Errors
- [.contract-subindex-inherited]
- .IERC721Metadata
- [.contract-subindex-inherited]
- .IERC721
- [.contract-subindex-inherited]
- .ERC165
- [.contract-subindex-inherited]
- .IERC165
- --
- [.contract-index]
- .Events
- --
- [.contract-subindex-inherited]
- .IERC721Receiver
- [.contract-subindex-inherited]
- .ERC721
- [.contract-subindex-inherited]
- .IERC721Errors
- [.contract-subindex-inherited]
- .IERC721Metadata
- [.contract-subindex-inherited]
- .IERC721
- * {xref-IERC721-Transfer-address-address-uint256-}[`++Transfer(from, to, tokenId)++`]
- * {xref-IERC721-Approval-address-address-uint256-}[`++Approval(owner, approved, tokenId)++`]
- * {xref-IERC721-ApprovalForAll-address-address-bool-}[`++ApprovalForAll(owner, operator, approved)++`]
- [.contract-subindex-inherited]
- .ERC165
- [.contract-subindex-inherited]
- .IERC165
- --
- [.contract-index]
- .Errors
- --
- * {xref-ERC721Wrapper-ERC721UnsupportedToken-address-}[`++ERC721UnsupportedToken(token)++`]
- [.contract-subindex-inherited]
- .IERC721Receiver
- [.contract-subindex-inherited]
- .ERC721
- [.contract-subindex-inherited]
- .IERC721Errors
- * {xref-IERC721Errors-ERC721InvalidOwner-address-}[`++ERC721InvalidOwner(owner)++`]
- * {xref-IERC721Errors-ERC721NonexistentToken-uint256-}[`++ERC721NonexistentToken(tokenId)++`]
- * {xref-IERC721Errors-ERC721IncorrectOwner-address-uint256-address-}[`++ERC721IncorrectOwner(sender, tokenId, owner)++`]
- * {xref-IERC721Errors-ERC721InvalidSender-address-}[`++ERC721InvalidSender(sender)++`]
- * {xref-IERC721Errors-ERC721InvalidReceiver-address-}[`++ERC721InvalidReceiver(receiver)++`]
- * {xref-IERC721Errors-ERC721InsufficientApproval-address-uint256-}[`++ERC721InsufficientApproval(operator, tokenId)++`]
- * {xref-IERC721Errors-ERC721InvalidApprover-address-}[`++ERC721InvalidApprover(approver)++`]
- * {xref-IERC721Errors-ERC721InvalidOperator-address-}[`++ERC721InvalidOperator(operator)++`]
- [.contract-subindex-inherited]
- .IERC721Metadata
- [.contract-subindex-inherited]
- .IERC721
- [.contract-subindex-inherited]
- .ERC165
- [.contract-subindex-inherited]
- .IERC165
- --
- [.contract-item]
- [[ERC721Wrapper-constructor-contract-IERC721-]]
- ==== `[.contract-item-name]#++constructor++#++(contract IERC721 underlyingToken)++` [.item-kind]#internal#
- [.contract-item]
- [[ERC721Wrapper-depositFor-address-uint256---]]
- ==== `[.contract-item-name]#++depositFor++#++(address account, uint256[] tokenIds) → bool++` [.item-kind]#public#
- Allow a user to deposit underlying tokens and mint the corresponding tokenIds.
- [.contract-item]
- [[ERC721Wrapper-withdrawTo-address-uint256---]]
- ==== `[.contract-item-name]#++withdrawTo++#++(address account, uint256[] tokenIds) → bool++` [.item-kind]#public#
- Allow a user to burn wrapped tokens and withdraw the corresponding tokenIds of the underlying tokens.
- [.contract-item]
- [[ERC721Wrapper-onERC721Received-address-address-uint256-bytes-]]
- ==== `[.contract-item-name]#++onERC721Received++#++(address, address from, uint256 tokenId, bytes) → bytes4++` [.item-kind]#public#
- Overrides {IERC721Receiver-onERC721Received} to allow minting on direct ERC-721 transfers to
- this contract.
- In case there's data attached, it validates that the operator is this contract, so only trusted data
- is accepted from {depositFor}.
- WARNING: Doesn't work with unsafe transfers (eg. {IERC721-transferFrom}). Use {ERC721Wrapper-_recover}
- for recovering in that scenario.
- [.contract-item]
- [[ERC721Wrapper-_recover-address-uint256-]]
- ==== `[.contract-item-name]#++_recover++#++(address account, uint256 tokenId) → uint256++` [.item-kind]#internal#
- Mint a wrapped token to cover any underlyingToken that would have been transferred by mistake. Internal
- function that can be exposed with access control if desired.
- [.contract-item]
- [[ERC721Wrapper-underlying--]]
- ==== `[.contract-item-name]#++underlying++#++() → contract IERC721++` [.item-kind]#public#
- Returns the underlying token.
- [.contract-item]
- [[ERC721Wrapper-ERC721UnsupportedToken-address-]]
- ==== `[.contract-item-name]#++ERC721UnsupportedToken++#++(address token)++` [.item-kind]#error#
- The received ERC-721 token couldn't be wrapped.
- == Utilities
- :onERC721Received: pass:normal[xref:#ERC721Holder-onERC721Received-address-address-uint256-bytes-[`++onERC721Received++`]]
- [.contract]
- [[ERC721Holder]]
- === `++ERC721Holder++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.1.0/contracts/token/ERC721/utils/ERC721Holder.sol[{github-icon},role=heading-link]
- [.hljs-theme-light.nopadding]
- ```solidity
- import "@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol";
- ```
- Implementation of the {IERC721Receiver} interface.
- Accepts all token transfers.
- Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or
- {IERC721-setApprovalForAll}.
- [.contract-index]
- .Functions
- --
- * {xref-ERC721Holder-onERC721Received-address-address-uint256-bytes-}[`++onERC721Received(, , , )++`]
- [.contract-subindex-inherited]
- .IERC721Receiver
- --
- [.contract-item]
- [[ERC721Holder-onERC721Received-address-address-uint256-bytes-]]
- ==== `[.contract-item-name]#++onERC721Received++#++(address, address, uint256, bytes) → bytes4++` [.item-kind]#public#
- See {IERC721Receiver-onERC721Received}.
- Always returns `IERC721Receiver.onERC721Received.selector`.
- :checkOnERC721Received: pass:normal[xref:#ERC721Utils-checkOnERC721Received-address-address-address-uint256-bytes-[`++checkOnERC721Received++`]]
- [.contract]
- [[ERC721Utils]]
- === `++ERC721Utils++` link:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.1.0/contracts/token/ERC721/utils/ERC721Utils.sol[{github-icon},role=heading-link]
- [.hljs-theme-light.nopadding]
- ```solidity
- import "@openzeppelin/contracts/token/ERC721/utils/ERC721Utils.sol";
- ```
- Library that provide common ERC-721 utility functions.
- See https://eips.ethereum.org/EIPS/eip-721[ERC-721].
- _Available since v5.1._
- [.contract-index]
- .Functions
- --
- * {xref-ERC721Utils-checkOnERC721Received-address-address-address-uint256-bytes-}[`++checkOnERC721Received(operator, from, to, tokenId, data)++`]
- --
- [.contract-item]
- [[ERC721Utils-checkOnERC721Received-address-address-address-uint256-bytes-]]
- ==== `[.contract-item-name]#++checkOnERC721Received++#++(address operator, address from, address to, uint256 tokenId, bytes data)++` [.item-kind]#internal#
- Performs an acceptance check for the provided `operator` by calling {IERC721-onERC721Received}
- on the `to` address. The `operator` is generally the address that initiated the token transfer (i.e. `msg.sender`).
- The acceptance call is not executed and treated as a no-op if the target address doesn't contain code (i.e. an EOA).
- Otherwise, the recipient must implement {IERC721Receiver-onERC721Received} and return the acceptance magic value to accept
- the transfer.
|