Leestijd: 8 min.
Inleiding
Digitale verzamelobjecten die compatibel zijn met ERC-721 zijn sinds de lancering van Cryptokitties enorm populair geworden en hebben de afgelopen maanden op grote schaal ingang gevonden. In deze handleiding wordt uitgelegd hoe je je eigen ERC-721 (NFT) kunt maken en lanceren met behulp van de smart contract-bibliotheek 0xcert/ethereum-erc721.
Wat is een niet-vervangbaar token?
‘Fungible’ betekent dat iets hetzelfde is of onderling uitwisselbaar is. Bijvoorbeeld bij Ethereum-tokens: alle tokens van dezelfde klasse hebben dezelfde waarde. Hetzelfde geldt voor Cardano-tokens. Fungibele tokens zijn 1:1 onderling uitwisselbaar.
Met dit in gedachten zijn NFT’s uniek: elk exemplaar is anders en heeft unieke kenmerken. Voorbeelden van dingen die als NFT kunnen fungeren zijn verzamelkaarten, kunstwerken, vliegtickets, enzovoort. Ze zijn allemaal duidelijk van elkaar te onderscheiden en onderling niet uitwisselbaar. Beschouw niet-vervangbare tokens (NFT's) als zeer zeldzame verzamelobjecten, elk met hun eigen unieke kenmerken, bijzondere eigenschappen en in de meeste gevallen hun eigen metadata.
Wat is ERC-721?
ERC is de afkorting voor Ethereum Request for Comment en 721 is het identificatienummer van het voorstel. ERC’s zijn standaarden op applicatieniveau voor het Ethereum-ecosysteem; dit kan bijvoorbeeld een standaard voor smart contracts zijn, zoals de ERC-20.
De opsteller van een ERC is verantwoordelijk voor het bereiken van consensus binnen de Ethereum-gemeenschap; zodra het voorstel door de gemeenschap is beoordeeld en goedgekeurd, wordt het een standaard. Je kunt alle recente ERC-voorstellen hier volgen.
ERC-721 is ontwikkeld om NFT’s in smart contracts te kunnen volgen en overdragen.
ERC-721 is een open standaard die beschrijft hoe niet-vervangbare tokens (NFT’s) kunnen worden aangemaakt op blockchains die compatibel zijn met de EVM (Ethereum Virtual Machine). De standaard bevat een reeks regels die het werken met NFT’s vereenvoudigen. NFT’s zijn niet alleen ERC-721-tokens, maar kunnen ook ERC-1155-tokens zijn.
Hieronder volgen de functies en gebeurtenissen die in de ERC-721-standaard zijn gedefinieerd:
ERC-721 definieert een aantal functies in overeenstemming met ERC-20. Dit maakt het veel eenvoudiger om de informatie over de tokens in bepaalde bestaande wallets weer te geven.
ERC-20-functies
- naam: Dit wordt gebruikt om de naam vast te stellen waarmee andere contracten of applicaties u kunnen identificeren.
- symbool: Wordt gebruikt om het symbool of de korte naam te bepalen.
- totalSupply: Deze functie wordt gebruikt om het totale aantal tokens in de blockchain vast te stellen; dit hoeft niet per se een constante waarde te zijn.
- balanceOf: Geeft het aantal NFT’s weer dat een adres bezit.
Functies die verband houden met het eigendom van het token
- ownerOf: Deze functie geeft het adres van de eigenaar van een token weer. Aangezien elk ERC-721-token uniek en niet-vervangbaar is, worden ze op de blockchain weergegeven door middel van een ID. Andere gebruikers, smart contracts of apps kunnen dit ID gebruiken om de eigenaar van een token te achterhalen.
- Goedkeuren: Deze knop dient om de overdracht van het token goed te keuren.
- takeOwnership: Dit is een optionele functie waarmee tokens van een gebruiker kunnen worden opgehaald, mits er eerder toestemming is gegeven aan dit adres om dit te doen.
- overdracht: functie waarmee de eigenaar van een token zijn tokens naar een ander adres kan overdragen, net zoals bij elk ander token of elke andere munteenheid.
- tokenOfOwnerByIndex: Dit is een optionele functie, maar het wordt sterk aanbevolen om deze te implementeren. Elke eigenaar van een token kan tegelijkertijd meerdere exemplaren van dezelfde NFT bezitten. De unieke ID van elke NFT helpt bij het identificeren ervan, maar na verloop van tijd wordt het erg moeilijk om deze ID’s bij te houden. Daarom houdt het contract een overzicht bij van de ID’s die aan de eigenaar zijn gekoppeld, en stelt deze functie ons in staat om de juiste informatie te verkrijgen voor dit overzicht.
Metadatafunctie
- tokenMetadata: Deze optionele functie is een interface waarmee we de informatie over het token kunnen achterhalen.
Evenementen
- Overdracht: Deze gebeurtenis wordt geactiveerd wanneer de eigenaar van een token verandert. Er wordt informatie verstrekt over het adres van waaruit het token wordt overgedragen, het adres waarnaar het is overgedragen en het ID van het token dat is overgedragen.
- Goedkeuren: Deze gebeurtenis wordt geactiveerd wanneer een gebruiker een andere gebruiker machtigt om over het token te beschikken, bijvoorbeeld wanneer de functie `approve` wordt uitgevoerd. De gebeurtenis geeft informatie weer over welk adres momenteel in het bezit is van het token, welk adres is gemachtigd om in de toekomst over het token te beschikken en welk token-ID is goedgekeurd om het in bezit te nemen.
Toepassingen voor niet-vervangbare tokens (NFT's):
- Digitale kunst (of fysieke kunst): Dit is de populairste toepassing van NFT’s. Veilingen van digitale kunst waren een van de eerste toepassingen van NFT’s en blijven groeien
- Spellen: Om in-game aankopen en verzamelobjecten aan te bieden.
- Vastgoed: De mogelijkheid om onroerend goed te tokeniseren en smart contracts op te stellen voor de aan- en verkoop ervan.
- Financiën: Financiële instrumenten zoals leningen, futures en andere verplichtingen.
- Software: Softwarelicenties ter bestrijding van piraterij en ter waarborging van de privacy.
- Tickets voor concerten of sportevenementen: Om fraude bij de kaartverkoop te voorkomen en om fans één plek te bieden waar ze hun ervaringen uit het verleden kunnen terugkijken.
ETH-test uitvoeren
Nu we weten wat een ERC-721-token is en hoe het werkt, gaan we bekijken hoe we ons eigen token kunnen maken en op de markt brengen.
We gaan ons contract op de Ropsten-testblockchain lanceren. Om te beginnen moet je de Metamask- browserextensie hebben geïnstalleerd, zodat je een ETH-portemonnee kunt aanmaken en wat test-ETH kunt ophalen via de Ropsten-faucet. Selecteer ‘Ropsten Test Network’ in je Metamask-portemonnee en kopieer het adres van de portemonnee naar het tekstveld van de faucet. Klik vervolgens op ‘Send me test Ether’.

Bestanden toevoegen aan IPFS
Voordat we ons NFT-contract opstellen, moeten we de bijbehorende afbeelding opslaan en een metadatabestand aanmaken. Hiervoor gebruiken we IPFS, een gedistribueerd systeem voor het delen van bestanden. Download en installeer de IPFS CLI voor jouw besturingssysteem aan de hand van de volgende installatiehandleiding voor IPFS.
Hieronder volgen de stappen om de afbeelding en het metadatabestand op te slaan
Stap 1: De IPFS-repository aanmaken Start de IPFS-repository door de volgende commando’s in de terminal in te voeren
ipfs init
Stap 2: De IPFS-monitor starten
Open een nieuwe terminal en voer de volgende opdracht in
IPFS-daemon
Stap 3: De afbeelding toevoegen aan IPFS
Voeg in het eerste vak de afbeelding toe (hier: art.png)
ipfs toevoegen art.png

Kopieer de hash die begint met Qm en voeg https://ipfs.io/ipfs/ aan het begin toe; het resultaat zou er ongeveer zo uit moeten zien: https://ipfs.io/ipfs/QmQEVVLJUR1WLN15S49rzDJsSP7za9DxeqpUzWuG4aondg
Stap 4: Een JSON-bestand toevoegen aan IPFS
Maak een JSON-bestand aan met de naam nft.json en sla het op in dezelfde map als de afbeelding.
Het JSON-bestand:
{
"name": "NFT Art",
"description": "This image shows the true nature of NFT.",
"image": "https://ipfs.io/ipfs/QmZzBdKF7sQX1Q49CQGmreuZHxt9sVB3hTc3TTXYcVZ7jC",
}
Voeg nu het JSON-bestand toe aan IPFS
ipfs toevoegen nft.json
Kopieer de hash die begint met Qm en voeg https://ipfs.io/ipfs/ aan het begin toe; het resultaat zou er ongeveer zo uit moeten zien: https://ipfs.io/ipfs/QmUFbUjAifv9GwJo7ufTB5sccnrNqELhDMafoEmZdPPng7
Bekijk deze URL eens, die hebben we nodig om onze NFT te lanceren.
Ons token aanmaken
Omwille van het gebruiksgemak en de veiligheid gaan we 0xcert/ethereum-erc721 gebruiken om ons NFT-contract te maken. Met 0xcert/ethereum-erc721 hoeven we niet de volledige ERC-721-interface te schrijven; in plaats daarvan kunnen we het importeren en de functies ervan gebruiken.
Ga naar de Ethereum Remix IDE en maak een nieuw Solidity-bestand aan, bijvoorbeeld - nft.sol
Kopieer de volgende code naar je nieuwe Solidity-bestand:
// SPDX-License-Identifier: MIT
pragma solidity 0.8.0;
import "https://github.com/0xcert/ethereum-erc721/src/contracts/tokens/nf-token-metadata.sol";
import "https://github.com/0xcert/ethereum-erc721/src/contracts/ownership/ownable.sol";
contract newNFT is NFTokenMetadata, Ownable {
constructor() {
nftName = "Synth NFT";
nftSymbol = "SYN";
}
function mint(address _to, uint256 _tokenId, string calldata _uri) external onlyOwner {
super._mint(_to, _tokenId);
super._setTokenUri(_tokenId, _uri);
}
}
Uitleg bij de bovenstaande code:
Regel 1: De specificatie van het SPDX-licentietype, een vereiste toevoeging vanaf Solidity ^0.6.8. Telkens wanneer de code van een smart contract openbaar wordt gemaakt, kunnen deze licenties helpen bij het oplossen en voorkomen van problemen met auteursrechten. Als u geen licentietype wilt specificeren, kunt u de waarde „Unlicensed“ gebruiken of de opmerking gewoon weglaten (dit leidt niet tot een foutmelding, maar alleen tot een waarschuwing).
Regel 2: Hierin wordt de Solidity-versie van het smart contract aangegeven.
Regel 4-5: Importeer het contract 0xcert/ethereum-erc721
Lijn 7: Het contract begint met de naam newNFT en dit contract is afgeleid van andere contracten, namelijk NFTokenMetadata en Ownable.
Regels 9-12: De constructor initialiseren en de naam en het symbool van ons token instellen.
Regel 14: We declareren de functie `mint` met drie argumenten: de variabele `_to` van het type `address`, die het adres bevat waar het NFT-token naartoe wordt gestuurd; de variabele `_tokenId` van het type `uint256`, die de ID van het token bevat; en de variabele `_uri`, die de URI van het JSON-bestand bevat. Door deze `mint`-functie als `external` te declareren, betekent dit dat deze toegankelijk is vanuit andere smart contracts en van buiten de scope van het contract zelf.
Regel 15: Verwijder het token met behulp van het adres waarnaar het wordt verzonden en het token-ID.
Regel 16: Stel de URI in met behulp van het token-id en de URI van het JSON-bestand.
Het smart contract wordt gecompileerd en geïmplementeerd met behulp van geïnjecteerde Web3 (zorg ervoor dat het Ropsten-testnet-netwerk in Metamask is geselecteerd voordat je het contract compileert).
Bevestig de transactie in Metamask.

Als je vóór de implementatie een foutmelding krijgt („This contract may be abstract”), zorg er dan voor dat je het juiste contract selecteert bij de optie „Contracts”

Ga nu naar het gedeelte ‘Deployed Contracts’ in Remix en klap het zojuist geïmplementeerde contract uit. Je ziet daar een heleboel functies/methoden. Klap de functie `mint` uit en voeg de volgende gegevens toe:
- Voeg je Ropsten-adres toe aan het veld _to
- Voer een getal in het veld _tokenid in (we raden 1 aan, omdat dit het eerste is)
- Voeg de URI van het JSON-bestand toe aan het veld _uri; deze hebben we in het vorige gedeelte opgehaald.
Klik op ‘Transact’ en bevestig de transactie in Metamask. Nu heb je het token op het Ropsten-netwerk.
Je kunt andere gegevens, zoals de naam, het symbool, de eigenaar en de tokenuri, controleren door de eerder genoemde tokenid in te voeren.

Conclusie
Gefeliciteerd met het maken van je eigen NFT! Help een bevriende kunstenaar door zijn of haar kunstwerk op het Ethereum-netwerk te zetten, of word zelf kunstenaar. Kijk op de GitHub-pagina van 0xcert/ethereum-erc721 voor meer voorbeelden.
Schrijf je in voor onze nieuwsbrief voor meer artikelen en handleidingen over Ethereum. Als je opmerkingen hebt, laat dan gerust een reactie achter op onze Twitter. Je kunt ook altijd met ons praten op onze Discord-server; daar vind je een aantal van de allerbeste ontwikkelaars :)