28 maart 2024
Blockchain Stories
Blockchain Ethereum Guides

Maak je eigen smart contract

zelf smart contract maken programmeren

Ethereum heeft weliswaar een eigen token, Ether, maar Ethereum is niet alleen bedoeld om geld van A naar B over te maken. Alternatieve munten als Bitcoin en Litecoin zijn ontworpen voor betalingen, maar Ethereum heeft een veel complexere techniek. Zo is het mogelijk om smart contracts (ook wel: slimme contracten) te maken. Je legt een afspraak dus in de blockchain vast.

Om te voorkomen dat er met het contract gefraudeerd kan worden – zoals in de echte wereld wel eens gebeurt – worden de contracten met elkaar vergeleken in de blockchain. In dit artikel gaan we in op hoe je een eigen, simpele smart contract kan maken.

Zo werken smart contracts

Om een eigen smart contract te maken, is het noodzakelijk eerst een aantal principes te begrijpen. Bij het maken van een eigen smart contract ontkom je niet aan enig programmeerwerk. Ook in dit artikel gaan we een klein beetje programmeren, maar leggen we alle code stap voor stap uit. Op die manier kun je begrijpen hoe het contract werkt en opgebouwd is. Wie al programmeerkennis in huis heeft, kan de basis van dit smart contract verder uitbreiden tot een complexer programma.

Om te voorkomen dat je meteen afhaakt omdat je allerlei programma’s moet installeren, maken we gebruik van zogenaamde web based programma’s. Dat betekent dat je zelf geen programma’s op je computer hoeft te installeren. Dat is een voordeel, want je hoeft alleen iets te snappen van programmeren. Command line commando’s, waarbij je commando’s dient in te voeren zonder enig visueel effect, komen in deze handleiding niet aan de orde.

Het ontstaan van smart contracts

Ethereum werd populair halverwege het jaar 2015. De cryptovaluta is uitgevonden door de Canadees-Russische programmeur Vitalik Buterin. Buterin was ook de bedenker van een nieuw concept: gedecentraliseerde applicaties. Deze worden ook wel dApps genoemd. Het idee is dat je programma’s kunt gebruiken, zonder dat daarvoor een centrale server noodzakelijk is.

Mede door het gebruik van dApps, werd Ethereum erg populair. Het andere grote voordeel van Ethereum is de manier waarop smart contracts, in het Nederlands slimme contracten, werken. Voor een complete uitleg, zie smartcontract.nl. Overigens is het concept van slimme contracten niet helemaal afkomstig van Buterin. Al in 1996 schreef computerwetenschapper Nick Szabo over smart contracts. Zijn werk was een grote inspiratie voor Buterin om smart contracts te implementeren.

De basis

Alvorens we gaan programmeren, nog een klein stukje basis. Ten eerste werken smart contracts niet op echte computers, maar op zogenaamde Ethereum Virtual Machines (EVM). Dit betekent dat een smart contract wordt uitgevoerd op het Ethereum netwerk. Daarmee bedoelen we: er is een grote supercomputer die alle smart contracts uitvoert. EVM is dus virtueel en daarom geen fysieke machine. Je kunt dit vergelijken met bijvoorbeeld het draaien van een virtuele Windows/Linux-machine op je Mac of server.

Gezien deze supercomputer zorgt voor een aantal onkosten, dien je deze bij een transactie te vergoeden. Deze transactiekosten worden uitgedrukt in gas. Elke berekening kost een bepaalde hoeveelheid gas. Hier geldt: hoe complexer je smart contract, hoe duurder het wordt.

Ook voor deze simpele smart contract heb je gas nodig, mits je deze uitvoert op het echte Ethereum netwerk. Wij gebruiken in dit artikel een testomgeving, waar geen transactiekosten gelden. Hoeveel gas je precies kwijt bent, kun je zelf uitrekenen door de hoeveelheid gas te vermenigvuldigen met de gasprijs. Nu je snapt hoe de basis werkt, is het tijd om te programmeren.

Het gebruik van Pragma

Om te voorkomen dat je allerlei programma’s op je computer moet installeren, kun je gebruik maken van online programma’s. Een van deze programma’s is Pragma. Pragma is speciaal ontworpen voor het ontwikkelen en uitrollen van slimme contracten. Je dient je te registreren om er gebruik van te kunnen maken.

MetaMask

Met MetaMask kun je gedecentraliseerde apps (‘dApps’) in je browser uitvoeren. Installeer daarom MetaMask.

TestNet

Om de code die je straks gaat schrijven te testen, dien je in Pragma en MetaMask over te schakelen naar het Kovan TestNet. Zoals de naam al doet vermoeden, kun je hier naar hartenlust code uitproberen, zonder dat je smart contract op het echte Ethereum netwerk terecht komt. Je betaalt om deze reden ook geen gas fee. Je gaat de fee pas betalen als je gebruik gaat maken van het echte netwerk. Je hoeft niet alles opnieuw te programmeren als je naar het echte netwerk gaat. Je kunt de netwerken gemakkelijk schakelen in Pragma en MetaMask.

Het programmeren van het smart contract

Nu je voor Kovan TestNet hebt gekozen, kun je beginnen met programmeren. Met dit slimme contract kan iedereen Ethereum overmaken, zonder een gebruikersnaam of wachtwoord te gebruiken. Dat klinkt onveilig, maar gelukkig maken we gebruik van Ethereum sleutels (‘keypairs’).

Met dit programma kun je tokens minen en verzenden naar andere accounts. Begin de code als volgt:

Code smart contract

pragma solidity ^0.4.21;

Met deze code geef je aan dat je het smart contract gaat programmeren voor Solidity 0.4.2.1 of nieuwer. Op die manier kun je voorkomen dat je straks je code niet kunt uitvoeren, doordat de zogenaamde compiler te oud is.

contract yourToken

Alles dat met yourToken te maken heeft, wordt in dit contract aangegeven. Een contract is een samenwerking tussen code en data. Deze wordt uitgevoerd op de Ethereum blockchain.

address public minter;

Dit is het adres van de minter, ofwel de virtuele mijnwerker. Met het woord ‘public’ geef je aan dat de variabelen gebruikt mogen worden elders in het smart contract.

event Sent(address from, address to, uint amount);

Met deze code geef je aan dat andere programma’s op veranderingen mogen reageren.

function yourToken() public {
minter = msg.sender;
}

Dit is je allereerste functie in het smart contract. Je voert hiermee het adres van de mijnwerker in het contract in. Dit is de koppeling tussen het contract en MetaMask. Door gebruik te maken van variabelen, hoef je geen echte addressen in te voeren. Neem de code dus letterlijk zo over.

function mint(address receiver, uint amount) public {
if(msg.sender != minter) return;
balances[receiver]+=amount;
}

Met deze code kun je zoveel Ethereum tokens minen als je wilt. In het if statement geven we aan dat het programma moet stoppen met werken, als blijkt dat de opdrachtgever onbevoegd is. Met andere woorden: als de sleutels niet overeenkomen. Dit stukje code zorgt er dus voor dat de tokens gemined worden.

function send(address receiver, uint amount) public {
if(balances[msg.sender] < amount) return;
balances[msg.sender]-=amount;
balances[receiver]+=amount;
emit Sent(msg.sender, receiver, amount);
}

Ten slotte de laatste code. Deze functie maakt het mogelijk om tokens van adres A naar adres B te verzenden. Dat werkt aan de hand van ‘sender’ en ‘amount’. De tokens worden afgetrokken van de verzendende kant en bijgevoegd bij de ontvanger. Event Sent zorgt ervoor dat de overdracht echt plaatsvindt. Degene die de tokens overmaakt geven we aan als msg.sender. Dat is eigenlijk de virtuele mijnwerker. Dit doen we, om het contract zo simpel mogelijk te houden. Zou je het contract op het echte netwerk zetten, dan betaal je door de eenvoud van het contract weinig gas fee.

Het uitvoeren van het smart contract

Nu je de code geschreven hebt, kun je je eerste smart contract gaan bouwen en uitvoeren. Dit noemen we ‘compiling’ en ‘deploying’. Ga naar Pragma en klik op de knop ‘Compile’ rechtsboven. Als het contract is gecompiled, kun je deze uit laten voeren. Klik daarom op de knop ‘Deploy’. Om het contract uit te laten voeren, gebruiken we zoals eerder beschreven het Kovan TestNet.

Er verschijnt een scherm waarbij je gevraagd wordt welk contract je wilt uitvoeren. Klik ‘yourToken’ en vervolgens op ‘Next’. Nu kun je de transactie bevestigen door op ‘Submit’ te klikken. Klik op ‘Contracts’ om te zien of het smart contract succesvol is uitgevoerd. In het smart contract kun je ook op ‘Interact’ klikken. Dan kun je meteen opdrachten uitvoeren. Voor bij ‘setters’ bijvoorbeeld maar eens een hoeveelheid van 1000 in. De virtuele mijnwerker gaat dan meteen aan de slag met het ophalen van 1000 tokens.

Je dient hiervoor uiteraard wel eerst weer toestemming te geven. Als het goed is, zie je nu bij ‘Balances’ en bij ‘minter’ twee keer dezelfde smart contract key code. Je hebt nu je eerste smart contract gemaakt.

Gerelateerde artikelen

Wat is een blockchain? Een beknopte uitleg

Robin Heester

‘Ethereum (ETH) Istanbul fork in december’, Vitalik over quantum computing

Gastredacteur

Gaat de Ethereum (ETH) koers boven de $200 uitbreken?

Gastredacteur