Dialogic Blockchain Series #5

Stroop de mouwen maar op!

Over blockchain wordt veel gepraat, maar hoe ziet een blockchain er nou ‘in het echt’ uit? De beste manier om een nieuwe technologie te leren kennen is door er zelf mee te spelen. In dit artikel leggen we uit hoe je zélf met de blockchain kunt experimenteren. Het bouwen van je eigen blockchain is namelijk absoluut niet moeilijk. Het kan er af en toe wel moeilijk uitzien – maar geen nood, het valt eigenlijk wel mee.

Aan de slag: wat heb je nodig?

Om een simpele blockchain op te zetten kun je gebruik maken van software die gratis beschikbaar is op internet. Deze software werkt in de meeste gevallen op Windows- en Mac-computers. In dit voorbeeld zullen we gebruik maken van het Ethereum-platform. Ethereum is een publiek toegankelijke blockchain – het gebruiken van de blockchain reken je af met de digitale ‘ether’-valuta. In dit voorbeeld gebruiken we de software onder de Ethereum-blockchain om onze eigen, private kloon ervan te maken.

De client installeren

Om te beginnen heb je een client nodig. Dit is een stuk software dat met andere computers (‘nodes’) de blockchaincommunicatie regelt. Door de client op te starten doe je mee aan de blockchain, en kun je nieuwe contracten in de blockchain opslaan. Download de ‘Go Ethereum’-client vanaf deze pagina en installeer deze. Wanneer je dit hebt gedaan is het goed om even te controleren of de client goed is geinstalleerd. Om dit te doen ga je (in Windows) naar het Startmenu, ‘Uitvoeren’, en typ je ‘cmd’ gevolgd door ‘OK’ (Mac-gebruikers openen via de map Applicaties de map Hulpprogramma’s en vervolgens het programma ‘Terminal’; de overige instructies zijn hetzelfde). In het scherm dat dan verschijnt typ je ‘geth version’ gevolgd door een enter. Als alles goed is gegaan krijg je een overzicht te zien van de geinstalleerde versie van Go-Ethereum.

 

Het begin van de ketting: de blockchain-genesis

Nu de software geïnstalleerd is, is het tijd om de blockchain te gaan opbouwen. Zoals eerder beschreven bestaat een blockchain uit een ketting van ‘blokken’. Het eerste blok heet het ‘genesis-blok’ en is speciaal, omdat het het eerste blok is dat door alle deelnemers zonder verdere controle wordt vertrouwd. Alle blokken die volgen op het genesisblok zijn onderdeel van de blockchain.

Download allereerst het bestand genesis.json en plaats het op het bureaublad. Dit bestand beschrijft hoe het genesisblok eruit moet gaan zien. Voer vervolgens in het commandoscherm het volgende commando uit:

 

geth –datadir %USERPROFILE%/Desktop/data –networkid 3336 init %USERPROFILE%/Desktop/genesis.json

Als alles goed is gegaan verschijnt de melding dat het genesisblok goed is aangemaakt. Op het bureaublad is een ‘data’-map verschenen – hierin slaat de client alle data op die nodig is om deel te nemen aan de blockchain.

Nu het genesisblok is gemaakt is het tijd om de blockchain op te starten! Gebruik hiervoor het volgende commando:

 

geth –datadir %USERPROFILE%\Desktop\data –ipcpath ./geth.ipc –rpc –rpccorsdomain “*” –networkid 3336

Zodra de melding ‘IPC endpoint opened’ verschijnt is de client klaar voor gebruik. Je kunt de client stoppen door op ‘Ctrl-C’ te drukken in het commandoscherm. Nu is het tijd om de blockchain daadwerkelijk te gaan gebruiken. Je kunt dit op een aantal manieren doen; allereerst kun je toegang krijgen tot de blockchain via de ‘console’. Dit is een omgeving waarin je met commando’s opdrachten kunt uitvoeren op de blockchain. Zo kun je via de console de client de opdracht geven om nieuwe blokken toe te gaan voegen aan de ketting. Laat de client draaien en open een nieuw commandovenster (Start, Uitvoeren, cmd of de Terminal op Mac) en geef het volgende commando in:

 

geth attach \\.\pipe\geth.ipc

 

Als het goed is verschijnt er “Welcome to the Geth JavaScript console!” en enkele versienummers. Eerst moeten we een account maken – met een account krijg je de toegang tot de blockchain. Een account is beveiligd met een wachtwoord. Bij het aanmaken van een account stel je dit wachtwoord in. Een nieuw account maak je met het volgende commando:

 

personal.newAccount()

 

Vervolgens zul je, steeds wanneer de client opnieuw is opgestart, het account moeten openen (‘unlocken’). Dat kan met het volgende commando (deze vraagt om het eerder gekozen wachtwoord):

 

personal.unlockAccount(personal.listAccounts[0])

 

Om de client nu blokken te laten toevoegen aan de keten, moet er ‘gemined’ worden. Je start het miningproces als volgt:

 

miner.setEtherbase(personal.listAccounts[0])

miner.start(1)

 

Omdat het minen nogal veel rekenkracht kost kiezen we er hier voor om de snelheid te beperken – het getal ‘1’ bepaalt dat slechts één processor in je computer voor het minen wordt ingezet. In een ‘echt’ netwerk zul je alle rekenkracht inzetten. Wanner je het minen voor het eerst start zul je zien dat het even duurt voordat er daadwerkelijk blokken verschijnen (in het scherm van de client verschijnt een aantal keer “Generating DAG”). Daarna zie je als het goed is iedere paar seconden een block verschijnen:

Doordat in het genesisbestand is ingesteld dat het minen van blokken makkelijk is, verschijnen er snel nieuwe blokken. In een ‘echte’ blockchain is het minen moeilijker, en verschijnen de blokken langzamer. Om een blockchain te testen is het echter fijn wanneer blokken snel verschijnen – je slimme contracten worden dan sneller verwerkt.

Je kunt de console nu verlaten door ‘exit’ te typen. Het kan overigens geen kwaad de console nog even open te laten staan.

Slimme contracten schrijven

Om slimme contracten te schrijven en in de blockchain te plaatsen, maak je gebruik van programmeeromgeving Solidity. Download Solidity via deze link – pak het zipbestand uit en dubbelklik op het bestand ‘index.html’. Als alles goed is gegaan verschijnt een leeg tekstveld:

We moeten de Solidity-editor eerst nog even vertellen dat hij met onze eigen blockchain (via onze eigen client) kan praten. Om dit te doen ga je naar het tabblad ‘Contract’ en kies je onder ‘Select execution environment’ voor ‘Web3 provider’. Klik vervolgens door alle meldingen heen.

Je bent nu klaar om je eerste slimme contract te schrijven! We gaan in de volgende artikelen nader in op verschillende slimme contracten. Onderstaand is een zeer simpel contract dat eigenlijk niets doet, maar waarmee we wel kunnen testen of de blockchain werkt:

 

pragma solidity ^0.4.0;

 

contract Hello {

    address public owner;

   

    function Hello() {

        owner = msg.sender;

    }

   

    // No payments can be sent

    function () {

        throw;

    }

}

 

Wat staat hier? De eerste regel geeft eigenlijk niets meer aan dan wat de versie van de programmeertaal is die we willen gebruiken (0.4.0). Vervolgens start het contract (“contract Hello”). De regel ‘address public owner’ geeft aan dat er in dit contract één gegeven is opgeslagen, namelijk het adres (‘rekeningnummer’) van degene die het contract maakte. De ‘function Hello’ geeft aan wat er moet gebeuren als dit contract wordt aangemaakt. Het enige wat we nu doen is opslaan wíe het contract aanmaakte, in het eerder besproken adresveld. Tot slot vinden we wat regels terug om te zorgen dat er niet zomaar blockchaingeld kan worden overgemaakt náár het contract.

De code voor een contract moet je zien als een blauwdruk – je kunt één of meerdere contracten instantiëren die werken volgens de code (net als dat er in de wereld van de ‘normale’ contracten bijvoorbeeld meerdere ‘koopovereenkomsten’ kunnen worden afgesloten die over verschillende huizen kunnen gaan, maar er verder qua vorm hetzelfde uitzien).

Om een nieuw contract af te sluiten, klik je in Solidity op ‘Create’ op het tabblad ‘Contract’. Er staat als het goed is eerst ‘waiting for transaction to be published’. Het kan zijn dat er een foutmelding verschijnt – in dat geval kan het zijn dat je account weer ‘op slot’ is gegaan. Voer in de console dan opnieuw het commando ‘personal.unlockAccount(personal.listAccounts[0]))’ uit. Als alles goed is gegaan verschijnt uiteindelijk een blok ‘Untitled:Hello at’ gevolgd door een lang getal. Dit getal is het adres van het contract, eigenlijk het contractnummer. Met dit nummer kun je specifieke acties uitvoeren met het contract – hier komen we later op terug. In het blok zelf vind je de eigenschappen van het contract terug, waaronder het rekeningnummer van de ‘owner’. Voor nu laten we het hierbij – je hebt je eerste slimme contract gemaakt!

Tot slot

Op basis van je eigen blockchain kun je in principe allerlei toepassingen bouwen op basis van slimme contracten. Dat wil echter niet zeggen dat het ook verstandig is om je eigen blockchain daarvoor te gaan gebruiken. De eerste vraag die je je zult moeten stellen, is of het gebruik van een blockchain wel echt noodzakelijk is. Wanneer alle partijen die informatie moeten uitwisselen en afspraken met elkaar maken elkaar volledig vertrouwen, is een ‘simpele’ gedeelde database eigenlijk genoeg. Wil je toch een blockchain gebruiken, dan is het verstandig om aan te sluiten bij bestaande blockchains: deze hebben de massa om de voordelen van blockchains maximaal tot hun recht te laten komen.

 

< Lees DBS #4

 

Benieuwd naar meer?

Dialogic helpt publieke organisaties met beleidsvorming met en rondom nieuwe technologieën. In de Dialogic Blockchain Series leggen we uit wat blockchain kan betekenen voor overheden en behandelen we elke twee weken een ander onderwerp. Meld je dus nu aan en blijf op de hoogte!

[cm_form form_id=’cm_58f5fdd950bd8′]

Heb je vragen of ben je benieuwd wat blockchain voor jou kan betekenen? Neem contact op met Tommy van der Vorst.