Wist je dat cryptocurrencies verschillende functies kunnen hebben? Misschien dat het doen van betalingen het eerste is wat in je opkomt. Bij munten zoals Bitcoin en Litecoin is dit inderdaad het geval, maar er bestaan ook crypto’s met complexere technieken. Zo kun je met Ethereum een eigen smart contract maken. Met interesse en een beetje programmeerkennis is het mogelijk om dit zelf voor elkaar te krijgen. In dit artikel leggen we stap voor stap uit hoe een smart contract is opgebouwd en hoe je zelf maakt.
Smart contracts: het prille begin
In 1996 schreef de computerwetenschapper Nick Szabo voor het eerst over smart contracts. Destijds was Russisch-Canadese Vitalik Buterin slechts twee jaar oud. Het duurde meer dan tien jaar voordat de inmiddels tot computerprogrammeur opgeleide Buterin het artikel onder ogen kreeg. Het vormde voor hem een grote inspiratie om het crypto platform Ethereum op te richten.
d’Apps
De jonge Buterin zat vol ideeën, aangezien hij een geheel nieuw concept voor applicaties bedacht: d’Apps. Deze gedecentraliseerde applicaties worden door programmeurs op het Ethereum netwerk gebouwd. Een d’app kan worden gebruikt zonder dat er een centrale server nodig is. Dit betekent dus dat er geen sprake is van een centrale autoriteit die de verrichtingen op het netwerk in de gaten houdt.
Wat zijn smart contracts nu precies?
Het is goed om eerst te weten wat smart contracts precies zijn. Een praktisch voorbeeld aan de hand van een verkoopautomaat zorgt voor meer duidelijkheid. Om een product te verkopen werkt het met een vaste set van regels en acties. Ze vormen een soort contract. Pas als aan alle regels is voldaan kan er worden verkocht, mits de klant uiteraard een actie onderneemt. Hoe ingewikkelder een bepaalde verkoop, hoe meer regels en acties er zijn. Je kunt het verkopen van producten ook weergeven in een simpel stappenplan:
- Verkoopmachine ontvangt geld (input)
- Verkoopmachine vraagt aan de klant om een keuze te maken
- Klant moet een keuze maken in de verkoopmachine
- De verkoopmachine controleert of er voldoende geld betaald is. Is dat het geval? Dan ontvangt de klant het product. Is hier geen sprake van, dan krijgt de klant een melding dat het bedrag niet voldoende is.
Ethereum Virtual Machines
Smart contracts worden in het Nederlands ook wel ‘slimme contracten’ genoemd. In een paar jaar tijd hebben ze Ethereum zeer populair gemaakt. Interessant om te weten is dat smart contracts niet via standaard computers worden uitgevoerd. In plaats daarvan maken ze gebruik van Ethereum Virtual Machines (EVM). Zoals de naam doet vermoeden, is dit een virtuele machine die alle smart contracts uitvoert. Je kunt het vergelijken met een enorm grote en slimme computer. Wel maakt deze machine een aantal onkosten. Gebruikers dienen daarom bij het gebruik van de EVM een transactie te betalen voor elke berekening. De kosten worden uitgedrukt in gas. Hoe ingewikkelder een smart contract is, hoe hoger de onkosten.
Eigen adres
Elk Ethereum account heeft een eigen adres die de partijen die betrokken zijn bij een smart contract vertegenwoordigd. Stel je voor dat je kaartjes verkoopt voor een evenement. In dat geval wordt het evenement verbonden met je eigen adres. Wanneer een ander persoon een ticket koopt, komt het geld direct bij jou terecht in plaats van een tussenpersoon.
Solidity
Tijdens het testen en maken van een smart contract kom je allerlei termen tegen. Zo heeft het Ethereum netwerk een eigen programmeertaal genaamd Solidity. Je kunt het vergelijken met JavaScript. Bijzonder aan Solidity is dat er bij elke transactie een bericht kan worden geschreven met unieke informatie van de zender naar de ontvanger. Denk bijvoorbeeld aan het account adres of de waarde van de Ether die is verstuurd.
Smart contract testen en installeren
Voor het maken van een eigen smart contract hoef je geen programma op de computer te installeren. Op dit moment maken mensen van over de hele wereld gebruik van online programma’s. Om een smart contract te maken dien je eerst een Ethereum wallet op je computer te installeren. Dit kan bijvoorbeeld op de website van Github, waar zowel versies voor Windows, Linux en OSX te vinden zijn.
Testen met de MetaMask plugin
Tijdens het installeren van de wallet heb je de keuze tussen een hoofdnetwerk of een testnetwerk. Aangezien het schrijven van codes vrij complex kan zijn, raden we aan om een testprogramma te gebruiken. De MetaMask plugin is hier zeer geschikt voor. Je kunt er namelijk codes uitproberen zonder dat de smart contract meteen op het Ethereum netwerk belandt. Bovendien hoef je tijdens het testen nog geen vergoeding te betalen. Pas wanneer je het netwerk echt gaat gebruiken is een betaling in gas verplicht.
Gebruik van de digitale omgeving Remix
Wanneer je voor het eerst een Ethereum smart contract maakt raden we aan om gebruik te maken van Remix. Deze interactieve digitale omgeving werkt goed in combinatie met MetaMask. Je kunt er eenvoudig een contract mee beheren en wisselen tussen verschillende Ethereum accounts.
De knoppen van Remix
Wanneer je Remix verschijnen er een aantal knoppen in beeld die je eerst moet begrijpen voordat je begint. Zo zie je in het rechterpaneel de knop ‘Run Tab’ staan. In dit gedeelte vinden onder andere de transacties plaats. Daarnaast heb je de keuze tussen een ‘web3 provider’, een ‘injected Web3’ en ‘Javascript Virtual Machine’.
Web3 provider en JavaScript VM
Een web3 provider maakt verbinding met een node. Het vertelt welke code er voor een bepaalde node gebruikt moet worden. De Javascript Virtual Machine is een software machine die een echte computer nabootst. Je kunt er applicaties op draaien die niet voor je eigen besturingssysteem geschikt zijn . Sommige Virtual Machines houden zich bezig met het draaien van een enkel proces op diverse besturingssystemen, en JavaScript VM is daar een voorbeeld van.
Smart contract aanmaken in testomgeving
Heb je je voldoende verdiept in de smart contract, MetaMask en Remix begrippen? Dan is het tijd om het contract aan te maken in de testomgeving. Ten eerste dien je in MetaMask het zogeheten Ropsten netwerk te selecteren. In de online omgeving van Remix dien je ‘Injected Web3’ te selecteren. Dit betekent dat de MetaMask wordt gebruikt als een wallet/node. Het komt wel eens voor dat je account niet meteen in Remix verschijnt. Maak je geen zorgen, want vaak moet je even gewoon even de browser refreshen. Is je account in beeld? Klik dan in het tabblad ‘Run’ op de knop ‘create’ om het smart contract aan te maken.
Bevestiging nodig
Het aanmaken van een contract betekent dat je een transactie start. Aangezien hier een vergoeding voor nodig is, vraagt het programma waarschijnlijk om een bevestiging. Pas daarna wordt de transactie naar de blockchain verzonden. Dit is een belangrijke stap. Je zult nu even moeten wachten op een miner die het blok toegevoegd. Een voordeel van het Ethereum netwerk is dat dit vrij snel gebeurt, meestal binnen twintig seconden.
Byte code
Op het Ropsten testnetwerk heb je nu een contract aangemaakt. Je ziet dat het contract net als een wallet een eigen adres heeft. Vervolgens zorgt het programma Remix ervoor dat het contract dat je hebt geschreven in Solidity wijzigt in de zogeheten byte code. Deze codetaal kan op de blockchain worden geplaatst.
Smart contract testen
Met het programma Remix is het mogelijk om je eigen gemaakte smart contract te testen. Na het aanmaken van het contract verschijnt er een deelvenster in beeld. Daarmee kun je het contract eenvoudig aanroepen. Daarnaast biedt het een aantal andere mogelijkheden, zoals ‘minuten’. Dit betekent dat een account voorzien kan worden van een aantal digitale munten. Alleen de eigenaar van het smart contract kan dit doen. Tenslotte is er natuurlijk de functie ‘send’ waarmee je digitale munten naar iemand anders kunt overmaken.
Transacties controleren met Etherscan
Voor het controleren van transacties kun je het beste het programma Etherscan gebruiken. Dit is een handig hulpmiddelen om het overzicht van je transacties te bewaren.
Niet meer te wijzigen
Wanneer je eenmaal een smart contract hebt aangemaakt kun je het niet meer wijzigen. In de blockchain wordt dit gegeven aangeduid met de term ‘immutable’, oftewel ‘niet meer te veranderen’. Dit maakt het des te belangrijker om een smart contract eerst te testen. Wanneer je het eenmaal aanmaakt op het main netwerk van Ethereum kun je het nier meer aanpassen.
Kun je een smart contract verwijderen?
Overigens is het wel mogelijk om via een bepaalde constructie een smart contract te verwijderen. Dit is handig wanneer je bijvoorbeeld een fout hebt gemaakt. In dat het geval? Klik dan op de functie ‘selfdestruct’. Zorg er wel voor dat de resterende ether ergens anders naar toe wordt gestuurd. Overigens kan alleen de eigenaar van het smart contract het opheffen. Dit is logisch, aangezien niemand anders zomaar een contract moet kunnen verwijderen.