Wat is de ERC-721-tokenstandaard en hoe werkt deze binnen blockchain?

Wat is de ERC-721-tokenstandaard?
ERC-721 is een Ethereum-standaard voor NFT’s: unieke tokens die je niet één-op-één kunt omwisselen alsof ze allemaal hetzelfde zijn. Elke NFT heeft een eigen nummer, de tokenId. Daardoor kan een contract precies bijhouden welk adres welke NFT bezit.
Je kunt het vergelijken met genummerde toegangskaarten. Twee kaarten kunnen allebei toegang geven tot hetzelfde event, maar kaart nummer 14 is technisch niet dezelfde kaart als nummer 15. Bij ERC-721 werkt dat hetzelfde: ieder token staat afzonderlijk geregistreerd.
Een ERC-721-token wordt geïdentificeerd door twee dingen samen: het adres van het smart contract en de tokenId. Die combinatie wijst naar één specifiek token op een Ethereum-chain.
De standaard geeft smart contracts een gezamenlijke set regels. Daardoor kunnen een crypto wallet, marktplaats of andere app herkennen hoe ze een compatibele NFT moeten tonen, opvragen en versturen. ERC-165 hoort daar ook bij. Dat is een manier waarop software kan controleren welke standaard een contract ondersteunt.
Belangrijk om te weten: een unieke tokenId betekent alleen dat het token binnen dat contract uniek is. Het bewijst niet automatisch dat de gekoppelde afbeelding, het kunstwerk of een fysiek object ook echt uniek of authentiek is.
Korte samenvatting
- ERC-721 is een Ethereum-standaard voor unieke, niet-uitwisselbare tokens.
- Elke NFT heeft binnen een contract een eigen tokenId.
- Het contractadres en de tokenId samen identificeren één specifiek token.
- De standaard helpt wallets en apps om NFT’s op dezelfde manier te herkennen en te verwerken.
- Een unieke tokenId bewijst niet automatisch dat het gekoppelde werk of object authentiek is.
Hoe werkt de ERC-721-tokenstandaard?
Een ERC-721 smart contract houdt voor elke tokenId bij welk blockchainadres de huidige eigenaar is. Met ownerOf(tokenId) kun je die eigenaar opvragen. Met balanceOf(adres) zie je hoeveel NFT’s een adres in totaal bezit.
Wanneer iemand een NFT verstuurt, verandert het contract de geregistreerde eigenaar. Voor zo’n overdracht bestaan onder meer transferFrom en safeTransferFrom.
Die tweede optie is meestal extra belangrijk wanneer je een NFT naar een ander smart contract stuurt. safeTransferFrom controleert dan of het ontvangende contract ERC-721-tokens kan ontvangen. Kan het dat niet, dan wordt de transactie teruggedraaid. Zo voorkom je dat een NFT per ongeluk vast komt te zitten in een contract dat er niets mee kan.
Een eigenaar kan ook toestemming geven aan een ander adres:
- Met
approvemag dat adres één specifieke tokenId verplaatsen. - Met
setApprovalForAllkrijgt een operator toestemming om alle ERC-721-tokens van die eigenaar te verplaatsen.
Die laatste toestemming is dus behoorlijk ruim. Geef zo’n machtiging alleen aan een contract dat je vertrouwt. Een toestemming voor één NFT vervalt zodra die NFT wordt overgedragen.
Het contract slaat overdrachten en toestemmingen ook op in events: meldingen in de openbare blockchainlog. Apps kunnen daarmee volgen wanneer een NFT van eigenaar wisselt of wanneer een operator toestemming krijgt.
ERC-721 bepaalt niet hoe minting of burning moet werken. Minting is het maken en uitgeven van een nieuw token, terwijl burning een token permanent uit de omloop haalt. De maker van het contract bepaalt zelf wie mag minten, hoeveel tokens er kunnen bestaan en of transfers bijvoorbeeld tijdelijk kunnen worden gepauzeerd of kosten hebben.
Waarvoor worden ERC-721-tokens gebruikt?
ERC-721-tokens worden gebruikt voor dingen die je afzonderlijk wilt volgen, omdat iedere token eigen eigenschappen of een eigen functie kan hebben. Denk aan digitale kunst, verzamelobjecten, game-items, eventtickets, certificaten, toegangstokens en online-identiteit.
Ze kunnen ook worden gebruikt om bepaalde fysieke activa te koppelen aan een token (denk aan een huis). Maar daar zit een belangrijk verschil: ERC-721 registreert vooral wie het token op de blockchain beheert. Of dat token buiten de blockchain ook recht geeft op een ticket, object of andere aanspraak, hangt af van de maker, de metadata, de contractvoorwaarden en eventuele aparte afspraken.
Doordat veel apps dezelfde ERC-721-interface begrijpen, kunnen de meeste toepassingen een token in principe herkennen en overdragen. Dat maakt de standaard handig binnen crypto, zonder dat elke app voor iedere NFT-collectie opnieuw moet uitzoeken hoe het contract werkt. Het is daarom ook heel gemakkelijk voor mensen om zelf een NFT-project te starten.
Welke rol spelen ERC-721-tokens bij NFT’s?
ERC-721 is een veelgebruikte technische basis voor NFT’s op Ethereum. De standaard regelt de kern: een afzonderlijke NFT identificeren, de eigenaar registreren, de NFT versturen en toestemming beheren.
NFT betekent simpel gezegd non-fungible token: een token dat niet uitwisselbaar is als gelijke eenheid. ERC-721 is niet hetzelfde als NFT. Het is één specifieke standaard waarmee je NFT’s kunt bouwen. Een NFT kan dus ook een andere technische standaard gebruiken.
Een ERC-721-contract kan bovendien extra regels bevatten. Bijvoorbeeld regels voor minting, toegang tot bepaalde functies, metadata of beperkingen op transfers.
Royalties zitten niet standaard in ERC-721. ERC-2981 is een aparte standaard waarmee royalty-informatie kan worden opgevraagd. Dat betekent nog niet dat een marktplaats die royalty ook automatisch betaalt: de betaling hangt af van de marktplaats of andere betrokken partij.
Hoe worden digitale eigendomsrechten vastgelegd?
Een ERC-721-contract legt vast welk adres eigenaar is van een bepaalde tokenId. Iedereen kan die technische eigendomsregistratie controleren via ownerOf en via de Transfer-events van het contract. Het is tenslotte allemaal zichtbaar op de blockchain, de eigenaar van een NFT is dus vrijwel altijd te controleren of te bekijken. Ook zijn de smart contracts die gebruikt worden voor de NFT-collectie in te zien in de meeste gevallen.
Stel dat tokenId 42 van adres A naar adres B gaat. Dan wordt adres B de geregistreerde eigenaar van tokenId 42. Het contractadres en tokenId 42 blijven ondertussen dezelfde technische identificatie van dat token.
De NFT kan daarnaast metadata hebben: extra informatie over het token. Via tokenURI kan het contract verwijzen naar bijvoorbeeld een JSON-bestand met een naam, beschrijving en een link naar een afbeelding.
Dat on-chain eigenaarschap is niet automatisch hetzelfde als auteursrecht, intellectueel eigendom of juridisch eigendom van de afbeelding, het werk of een fysiek object. Het bezitten van de NFT betekent dus niet vanzelf dat je alle rechten op de gekoppelde inhoud krijgt. Daarvoor is doorgaans een aparte geldige overeenkomst nodig.
Wat is het verschil tussen ERC-721 en ERC-20?
ERC-20 is gemaakt voor fungibele tokens, terwijl ERC-721 is gemaakt voor non-fungible-tokens. Fungibel betekent dat iedere eenheid onderling gelijk is. Eén ERC-20-token van hetzelfde type is dus gelijk aan een andere ERC-20-token van dat type.
Bij ERC-20 stuur je een hoeveelheid, bijvoorbeeld 10 tokens. Bij ERC-721 stuur je één specifieke tokenId, bijvoorbeeld token nummer 42.
De belangrijkste verschillen op een rij:
- Overdracht: ERC-20 draait om een aantal tokens. ERC-721 draait om één unieke tokenId.
- Eigendom: Bij ERC-20 heeft een adres een saldo. Bij ERC-721 houdt het contract per tokenId bij wie eigenaar is.
- Toestemming: ERC-20 gebruikt een allowance voor een bestedingsbedrag. ERC-721 kan toestemming geven voor één NFT of voor alle NFT’s van een eigenaar.
- Deelbaarheid: ERC-20-tokens kunnen in hoeveelheden worden verstuurd. Een ERC-721-token is technisch één afzonderlijke tokenId en heeft geen standaard
decimals-functie. - Totaal aantal: ERC-20 heeft
totalSupplyals standaardfunctie. Bij ERC-721 istotalSupplyalleen beschikbaar als het contract de optionele ERC721Enumerable-extensie gebruikt.
Ook metadata is bij ERC-721 optioneel. Een contract hoeft dus niet per se een naam, symbool of tokenURI aan te bieden, al doen de meeste NFT-contracten dat wel.
Hoe maak je een ERC-721-token?
Je maakt een ERC-721-token door een smart contract te bouwen en daarin mintlogica toe te voegen. ERC-721 zelf geeft geen kant-en-klare openbare mintfunctie, dus de ontwikkelaar bepaalt zelf hoe nieuwe tokens ontstaan.
In de praktijk gaat dat meestal zo:
-
Bouw of gebruik een ERC-721-contract Een ontwikkelaar schrijft een smart contract in Solidity dat ERC-721 en ERC-165 ondersteunt. Vaak wordt een geteste basisimplementatie zoals OpenZeppelin ERC721 uitgebreid, in plaats van alles vanaf nul te schrijven.
-
Bepaal de regels voor minting Het contract moet bepalen wie mag minten, hoe tokenIds worden uitgegeven, of er een maximumaantal tokens is en of minting geld kost. Ook toegangscontrole hoort hier thuis: niet iedereen hoeft automatisch nieuwe NFT’s te kunnen maken.
-
Wijs een nieuwe tokenId toe Voor iedere nieuwe NFT moet het contract een tokenId gebruiken die nog niet bestaat. Die tokenId wordt toegewezen aan een geldig adres, dus niet aan een leeg adres.
-
Gebruik waar mogelijk safe minting
_safeMintcontroleert bij een ontvanger die zelf een smart contract is of dat contract ERC-721-tokens kan ontvangen. Dat verkleint de kans dat een verse NFT vastloopt bij de ontvanger. -
Deploy en voer transacties uit Na deployment op een EVM-chain worden minting, transfers en toestemmingen uitgevoerd als blockchaintransacties. De kosten en risico’s hangen af van de gekozen chain en vooral van de code in het contract.
Een contract kopiëren is niet genoeg voor veilig gebruik. Extra logica voor betalingen, whitelists, upgrades of royalties kan nieuwe kwetsbaarheden toevoegen. Testen en, waar passend, een onafhankelijke security-audit zijn daarom belangrijk.
Welke onderdelen bevat een ERC-721 smart contract?
Een ERC-721 smart contract moet een vaste kern aan functies en events aanbieden. Die vaste interface zorgt ervoor dat andere apps weten hoe ze met de NFT’s kunnen omgaan.
De verplichte onderdelen zijn onder meer:
balanceOf: vraagt op hoeveel NFT’s een adres bezit.ownerOf: vraagt op welk adres eigenaar is van een specifieke tokenId.transferFromensafeTransferFrom: versturen een NFT naar een ander adres.approveengetApproved: regelen en controleren toestemming voor één specifieke NFT.setApprovalForAllenisApprovedForAll: regelen en controleren toestemming voor alle NFT’s van een eigenaar.Transfer,ApprovalenApprovalForAll: events waarmee apps overdrachten en machtigingen kunnen volgen.supportsInterface: de ERC-165-functie waarmee apps kunnen controleren dat het contract ERC-721 ondersteunt.
Er zijn ook optionele uitbreidingen. ERC721Metadata voegt name, symbol en tokenURI toe. ERC721Enumerable voegt onder andere totalSupply toe en functies om tokenIds op te sommen.
Daarnaast heeft een praktisch contract vaak eigen functies, zoals een mintfunctie, rollen voor beheerders, verkoopregels, een base URI of een burnfunctie. Hoe het contract intern gegevens opslaat, bijvoorbeeld eigenaars en toestemmingen, schrijft ERC-721 niet voor. De standaard gaat om wat het contract naar buiten toe moet kunnen doen.
Hoe wordt metadata aan een ERC-721-token gekoppeld?
Metadata wordt meestal gekoppeld via tokenURI(tokenId), een optionele functie die een verwijzing naar informatie over één specifieke NFT teruggeeft. Die URI kan bijvoorbeeld naar een JSON-bestand wijzen.
In zo’n JSON-bestand kunnen velden staan als name, description en image. Een NFT-marktplaats of crypto wallet kan die gegevens gebruiken om de naam, omschrijving en afbeelding van het token te tonen. Aangezien elke NFT eigen statistieken heeft, kun je het zien als een soort verzamelplaatjes. Sommige verzamelplaatjes zijn uniek en zeldzaam, terwijl sommige veelvoorkomend zijn. Dit is dan ook hoe de waarde van NFT’s over het algemeen bepaald wordt.
Een ontwikkelaar kan voor iedere NFT een aparte URI opslaan. Een andere optie is een basis-URI gebruiken en daar per token een eigen nummer of deel aan toevoegen. OpenZeppelin heeft hiervoor onder meer ERC721URIStorage met _setTokenURI.
Belangrijk om op te letten: ERC-721 verplicht niet dat metadata permanent of onveranderlijk is. Een URI is een tekstverwijzing naar gegevens buiten de blockchain. Wie de URI kan aanpassen en waar de inhoud staat, verschilt per contract en opslagopzet. Een afbeelding of JSON-bestand kan dus mogelijk veranderen of niet meer beschikbaar zijn.
Wat zijn de voordelen en nadelen van ERC-721?
ERC-721 is nuttig omdat het een duidelijke, gedeelde manier biedt om unieke tokens op Ethereum te maken. Maar de standaard lost niet ieder probleem rond NFT’s op.
Voordelen:
- Interoperabiliteit: wallets, brokers, veilingen en andere apps kunnen ERC-721-NFT’s op een voorspelbare manier herkennen en verwerken.
- Traceerbaarheid: per tokenId is zichtbaar welk adres eigenaar is en welke overdrachten er zijn geweest.
- Flexibele toestemmingen: je kunt een adres toestemming geven voor één NFT, of een operator voor al je NFT’s.
- Uitbreidbaar: metadata en enumeratie zijn optioneel. Een contract kan dus klein blijven of juist extra functies krijgen.
Nadelen en risico’s:
- Veel macht met
setApprovalForAll: een goedgekeurde operator mag alle ERC-721-tokens van jouw adres verplaatsen. Controleer zulke machtigingen regelmatig en geef ze alleen aan vertrouwde contracten. - Risico bij
transferFrom: een NFT kan vast komen te zitten als het ontvangende contract de NFT niet aankan.safeTransferFromcontroleert dat beter, maar de extra externe call kan een reentrancy-risico geven. Daarbij probeert een ander contract tijdens de uitvoering opnieuw een functie aan te roepen. - Hogere kosten bij enumeratie: ERC721Enumerable wordt vaak niet gebruikt, omdat het opsommen van tokens on-chain veel extra gas kan kosten.
- Geen garantie buiten de blockchain: ERC-721 bewijst niet automatisch auteursrecht, authenticiteit van claims, permanente metadata of een verplichte royaltybetaling.
Kort gezegd: ERC-721 geeft een technische basis voor eigendom en overdracht van een NFT. Of een collectie ook veilig is en welke rechten er precies bij horen, hangt af van de contractcode, beheerrechten, metadata en afspraken buiten de blockchain.
Conclusie
ERC-721 is de Ethereum-standaard die NFT’s een eigen identiteit geeft. Een smart contract registreert per tokenId wie de eigenaar is, hoe een NFT wordt overgedragen en wie daarvoor toestemming heeft.
Dat maakt ERC-721 handig voor onder meer digitale kunst, game-items, tickets en toegangstokens. Tegelijk is een NFT niet automatisch bewijs van auteursrecht, authenticiteit of juridisch eigendom van wat eraan gekoppeld is. Kijk daarom niet alleen naar de NFT zelf, maar ook naar de contractregels, de metadata en de toestemmingen die je aan een contract geeft.