Onze website gebruikt cookies om de site gebruiksvriendelijker te maken.

Smart Contracts – Autonome code op een blockchain

Posted on 18/10/2016 by Kristof Verslype

In een eerdere blogpost hadden we het over Bitcoin en blockchains. Indien deze termen u vertrouwd in de oren klinken is de kans groot dat u ook al de term smart contract heeft horen waaien, wat ook wel blockchain 2.0 genoemd wordt. Deze blogpost gaat hier dieper op in.

Intro

Een traditioneel contract beschrijft in menselijke taal, op papier afspraken tussen meerdere partijen. Dit contract is ingebed in een wettelijk kader zodat juridische stappen ondernomen kunnen worden indien één of meer partijen de gemaakte afspraken niet nakomen. Bovendien is er soms een intermediaire partij vereist, de notaris, bijvoorbeeld bij de transactie van vastgoed.

Een smart contract op een blockchain is code die afspraken tussen meerdere partijen beschrijft. Doordat deze code autonoom op de blockchain draait, is er geen wetgever of notaris die we moeten vertrouwen voor de correcte uitvoering van het contract. Drie essentiële eigenschappen van een smart contract zijn dus:

  • Gecodeerd. De in menselijke taal geschreven clausules die we in een traditioneel contract en in wetteksten vinden zijn in een smart contract vervangen door code.
  • Gedistribueerd. In tegenstelling tot traditionele contracten is er geen, of in elk geval minder, nood aan vertrouwde instanties zoals de wetgever of de notaris. In de plaats daarvan vertrouwen we op het gedistribueerde blockchain netwerk dat correct blijft functioneren, zelfs indien een deel van de netwerk nodes (deelnemers) vals probeert te spelen.
  • Efficiënt. Traditionele contracten vereisen dat de betrokken partijen zelf de in het contract vastgelegde afspraken implementeren, wat extra tijd, energie en geld kost en bovendien gepaard kan gaan met fouten. Smart contracts zijn zelf al die implementatie.

De twee bekendste blockchain platformen zijn Ethereum en Hyperledger. Ze zijn beiden open source en in volle ontwikkeling. Ethereum werd officieel gelanceerd in juli 2015 en is, net zoals Bitcoin, gebaseerd op een unpermissioned blockchain, wat wil zeggen dat iedereen toegang heeft tot de blockchain en kan meewerken aan de creatie van nieuwe blokken. Hyperledger is wat jonger, het bestaat sinds december 2015, en heeft ondersteuning van heel wat bedrijven waaronder IBM. Het is gebaseerd op een permissioned blockchain, wat wil zeggen dat slechts een geselecteerde set van participanten toegang heeft tot de blockchain en kan deelnemen aan het blokcreatieproces. Het blokcreatieproces bij Permissioned blockchains is enerzijds een pak efficiënter, maar anderzijds meer gecentraliseerd.

Een smart contract bestaat uit een aantal functies, waarvan een deel publiek is en zo de interface vormt. De publieke functies kunnen aangeroepen worden door deelnemers in het netwerk. Deze functies zullen typisch de toestand van het contract veranderen. Die toestand bevat de gegevens die nodig zijn voor de correcte uitvoering van het contract. Ten slotte kan een contract ook waarde ontvangen, beheren, en verder transfereren. Deze waarde wordt uitgedrukt in de crypto munteenheid van de onderliggende blockchain. We verduidelijken dit alles aan de hand van een aantal voorbeelden.

Voorbeelden

Een eerste voorbeeld is een crowdfunding campagne, waarbij een bepaald bedrag opgehaald moet worden tegen een vooropgestelde datum. Iedereen kan een storting doen via een contribute() functie in het crowdfunding contract. Samen met deze functie-oproep wordt een bedrag meegegeven. De toestand van het contract houdt onder meer bij wie welk bedrag gestort heeft. Wanneer de crowdfunding campagne afgelopen is, zijn er twee mogelijkheden. 1) Het vooropgestelde bedrag werd gehaald en de begunstigde krijgt door het uitvoeren van de settle() functie al het ingezamelde geld. 2) Het vooropgestelde bedrag werd niet gehaald, en het contract betaalt iedereen terug.

Een tweede voorbeeld is een veiling. Via een smart contract kunnen alle deelnemers bieden via aan bid() functie in het contract, waarbij het geboden bedrag in een crypto munt al direct meegegeven wordt. De toestand van het contract houdt bij wie de hoogste bieder is en het bedrag van het hoogste bod. Pas wanneer iemand je overbiedt, krijg je het door jou geboden bedrag door het contract teruggestort. Op het einde van de veiling gaat het bedrag van de hoogste bieder naar de aanbieder.

Een derde voorbeeld zijn verkiezingen. De toestand van het contract houdt onder meer bij wie stemrecht heeft, wie reeds gestemd heeft en wat de keuzemogelijkheden bij het stemmen zijn. Iedereen kan via een vote() functie zijn stem uitbrengen, waarbij het contract nagaat of de persoon reeds gestemd heeft. Nadat iedereen de kans gehad heeft om te stemmen, kan het resultaat gegeven worden via de getResult() functie, wat de omslachtige procedures voor het stemmen overbodig maakt. Bij dit voorbeeld is privacy erg belangrijk, wat momenteel één van de grote uitdagingen in het blokchain verhaal is.

De term contract moet in deze context dus op een ruime manier geïnterpreteerd worden. Het gaat hier om elke mogelijke overeenkomst tussen meerdere partijen, ook al wordt daarbij in de traditionele context geen apart contract ondertekend.

Werkingsprincipe

Elke node die betrokken is in het blokcreatieproces, kortweg de validating node, verzamelt alle nieuw gecreëerde transacties die bestemd zijn voor een nieuw te creëren blok. De validating node kijkt in de transacties welke functies in welke contracten moeten aangeroepen worden en voert die dan vervolgens lokaal uit, waardoor hij lokaal een nieuwe toestand krijgt voor de betrokken contracten. Een update van die toestand wordt aan het nieuw te creëren blok toegevoegd. Elk blok bevat dus naast een header en een set van transacties ook updates van contracttoestanden.

Op het eerste zicht lijkt het alsof we de validating nodes moeten vertrouwen. Dit is niet het geval gezien ook andere nodes de correctheid van een nieuw blok zullen controleren alvorens het aan de eigen kopie van de blockchain toe te voegen en het verder te verspreiden in het netwerk. Deze nodes gaan dus onder meer na of het toepassen op de vorige contracttoestanden van de transacties in het blok resulteert in de geregistreerde updates. Een validating node die niet de correcte contracttoestanden registreert valt dus door de mand. Bovendien krijgt een validating node doorgaans, zeker op unpermissioned blockchains, een beloning voor het geleverde werk. Indien het door hem gecreëerde blok niet aanvaard wordt, krijgt hij ook geen beloning. Op die manier wordt vertrouwen gedistribueerd over de community en is er niet langer nood aan één centrale autoriteit. We beschikken op deze manier dus over rekenkracht op een blockchain.

Vertrouwde externe bronnen

Er zijn voorbeelden te bedenken waarbij smart contracts informatie nodig hebben van vertrouwde, externe bronnen. Deze bronnen kunnen intelligente IoT toestellen zijn, maar eveneens organisaties die bijvoorbeeld wissel- en beurskoersen doorgeven. We geven twee voorbeelden om dit te verduidelijken.

Stel dat een slager een smart contract gebruikt bij een transport van een bestelling vlees. De slager wil enkel betalen indien de temperatuur in de laadruimte van de koelwagen nooit boven de 8°C gestegen is. Hij stort met de order() functie het gevraagde bedrag naar het smart contract. Er bevindt zich in de koelruimte van de vrachtwagen een IoT-sensor. Deze sensor wordt geregistreerd in het contract en geeft vanaf dan elke 5 minuten de maximum gemeten temperatuur door aan het smart contract via een updateTemperature() functie. De maximum temperatuur wordt in de toestand van het contract bewaard. Bij levering voert de slager de confirmDelivery() functie uit. Indien de temperatuur op een gegeven moment tijdens de rit boven de 8°C gestegen is, krijgt de slager daarmee het gestorte bedrag terugbetaald, indien dit niet het geval is, krijgt de transporteur het volledige bedrag.

Een ander voorbeeld zijn smart electricity meters. Een gezin stort via een pay() functie geregeld bedragen op een smart contract en de smart electricity meter geeft elke dag het verbruik van het gezin door aan het smart contract via een updateConsumption() functie. Het smart contract berekent of het gezin voldoende geld naar het smart contract getransfereerd heeft. Enkel dan laat de smart electricity meter toe dat het gezin meer dan het wettelijk minimum aan elektriciteit verbruikt. Gelijkaardig kunnen we denken aan een intelligent slot in een geleasde wagen, dat de wagen enkel start indien er voldoende op het smart contract gestort werd en de wagen niet als gestolen gesignaleerd staat.

Uitdagingen

De bovenstaande voorbeelden zijn vrij eenvoudig, maar geven wel al een feeling van het potentieel van smart contracts. Toch is er een gevaar dat niet zomaar onder de mat geschoven mag worden. Wanneer traditionele software een bug bevat, kan dit gecorrigeerd worden d.m.v. een patch. Maar een smart contract wordt gepubliceerd op de blockchain, is dus onveranderlijk en kan dus niet gepatcht worden. Een rigoreuze aanpak bij het schrijven en testen van een contract is dus onontbeerlijk, maar zelfs dat is geen garantie.

Dit hebben we kunnen vaststellen met The DAO; een crowdfunding contract dat op 30 april 2016 gepubliceerd werd op het publieke Ethereum netwerk. Op 21 mei had het reeds meer dan 150 miljoen dollar verzameld, afkomstig van meer dan 11000 investeerders. Het werd daarmee de grootste crowdfunding campagne ooit. En hoewel het contract door experts nagekeken was, bevatte het een bug. Op 17 juni 2016 werd het gehackt, waardoor op twee dagen tijd ongeveer één derde van het totale bedrag in handen kwam van de hacker (of hackersgroep). Dit leidde tot twee kampen in de Ethereum community en tot een split van de publieke Ethereum blockchain. Het grootste deel van de community besliste om het meest recente deel van de blockchain tot voor de hack te vergeten door verder te bouwen op een ouder blok i.p.v. het meest recente. Op die manier werd een nieuw heden gecreëerd waarin de hack nooit heeft plaatsgevonden, zoals geïllustreerd in onderstaande figuur. Een deel van de community bleef echter voortbouwen op de oude tak van de blockchain. In de ene tak heeft de hack wel plaatsgevonden, in de andere niet.

Door deze actie van de meerderheid kreeg het vertrouwen in de blockchain als onveranderbare, betrouwbare database natuurlijk een serieuze deuk. Veelal zal een dergelijke interventie gelukkig geen optie zijn. En in een dergelijk situatie is een klassiek wettelijk kader het enige dat nog overblijft om de hacker te vervolgen en de verliezen te recupereren.

Gelieerd daarmee is de vraag hoe mensen zonder programmeerkennis toch, en liefst op een eenvoudige en snelle manier, inzicht kunnen krijgen in de werking van een smart contract, zonder al te veel vertrouwen in autoriteiten zoals experts die het contract reviewden. Smart contracts horen immers de transparantie te vergroten en mogen dus absoluut geen de facto black box worden voor haar gebruikers.

Daarnaast blijven er de meer algemene blockchain uitdagingen. Zo heeft elke gebruiker van een smart contract een eigen private sleutel nodig, die op een voldoende veilige manier beschermd moet worden. Daar waar bij gecentraliseerde databases de beveiliging gecentraliseerd is, verschuift bij blockchain die beveiliging naar bescherming van de sleutels op de end-points.

Daarnaast moeten we absoluut vermijden dat smart contracts gevoelige gegevens en meer specifiek persoonsgegevens lekken naar onbevoegden. Een smart contract voor studentenarbeid zou bijvoorbeeld in de contract status kunnen bijhouden hoeveel een jobstudent dit jaar reeds verdiend heeft, hoeveel dagen hij dit jaar en hoeveel uur hij dit kwartaal al gewerkt heeft. Deze gegevens en elke update staan onvercijferd in de blockchain en zijn dus voor iedereen die toegang heeft tot de blockchain zichtbaar. Het vervangen van identifiers zoals het rijksregisternummer door pseudoniemen (adressen in blockchain terminologie) is hierbij een noodzakelijke maar onvoldoende voorwaarde.

Conclusie

Vandaag pakken bedrijven graag uit met proofs of concept gebaseerd op een blockchain. Operationele systemen blijven nog zeldzaam. Bovendien is een vaak gehoorde opmerking dat er alternatieve, betere maar wel meer gecentraliseerde aanpakken bestaan om tot een applicatie te komen met dezelfde of gelijkaardige eigenschappen. Toch is deze opmerking niet helemaal eerlijk, gezien mature met zeer prille technologie vergeleken wordt. Vandaar dat we nu eerder in een fase van experimenteren zitten.

Volgens sommigen zullen smart contracts qua impact vergelijkbaar zijn met het internet zelf, en zullen nieuwe organisatievormen mogelijk worden. Autonome bedrijven zullen geprogrammeerd kunnen worden als een smart contract en autonoom beslissingen nemen, mede op basis van artificiële intelligentie en het Internet of Things. Een eerste experiment van een dergelijke autonome organisatie was The DAO, die ik reeds eerder vermeldde, waarbij je een soort aandeelhouder wordt door cryptografisch geldt op het contract te storten. Er kunnen projectvoorstellen ingestuurd worden en naarmate een aandeelhouder meer geld gestort heeft, heeft hij een zwaarder gewicht bij het beslissen of er al dan niet geld zal geïnvesteerd worden in het voorgestelde project.

Toch lijkt het niet onlogisch dat in vele gevallen slechts een deel van een traditioneel contract of bedrijfsvoering op een smart contract kan gebeuren. Sommige afspraken en regels zijn niet zomaar in code vast te leggen en kunnen een menselijke beoordeling vereisen.

Blockchains en smart contracts zijn een enorme hype en zullen misschien niet alle verwachtingen kunnen inlossen. Toch heeft dit het voordeel dat er momenteel honderden miljoenen in geïnvesteerd worden, onder meer om de uitdagingen aan te pakken. Daarbij zien we een verhoogde interesse in cryptografische technieken die in de laatste decennia ontwikkeld zijn. Deze technieken maken zaken mogelijk die intuïtief onmogelijk lijken, maar dit gaat wel ten koste van efficiëntie. Denken we maar een homomorfische encryptie. Naarmate de tijd vordert, zullen dus enerzijds de mogelijkheden toenemen, maar zullen ook anderzijds ook fundamentele beperkingen duidelijker naar voor komen.

Smart contracts vergroten het potentieel van blockchains enorm. Daar waar blockchain 1.0 zich beperkte tot gedistribueerde opslag zonder een vertrouwde controlerende partij (autonome opslag), laat blockchain 2.0 ook het uitvoeren van willekeurige code zonder centrale, controlerende partij toe (autonome berekeningen), wat vrij revolutionair is en het huidige model met vertrouwde partijen zwaar door elkaar kan schudden. Volgens Forbes zal blockchain dan ook gezien worden als een mijlpaal in de evolutie weg van gesloten, gecentraliseerde systemen, richting open, gedistribueerde systemen.

Indien u als overheidsinstelling vragen heeft i.v.m. blockchain en smart contracts kunt u mailen naar kristof.verslype [at] smals.be

Bron: Smals Research