Bitcoin gaf ons een gedecentraliseerde digitale munt en Ethereum was het eerste grote platform voor gedecentraliseerde applicaties. Ondertussen zijn er heel wat van dit soort platforms ontstaan die internettoepassingen kunnen draaien zonder af te hangen van één partij.

denkwerkKoen Vervloesem

 Zowat alle internettoepassingen hebben tegenwoordig een gecentraliseerde architectuur. Als je op Facebook een bericht post, staat dit op de servers van Facebook. Dat heeft heel wat nadelen. Dat ene centrale systeem is uiteraard een gewild doelwit voor cybercriminelen. Als zij hierin inbreken, hebben ze onmiddellijk toegang tot de data van de miljoenen (en in het geval van Facebook miljarden) gebruikers. 
Dit laatste is ook een probleem voor Facebook. Omdat Facebook persoonsgegevens opslaat, is het bedrijf wettelijk aansprakelijk als die door een inbraak of een configuratiefout in de verkeerde handen vallen. En met zoveel persoonsgegevens onder controle van één bedrijf, is de kans groot dat er ooit iets fout gaat. Bovendien moet je als gebruiker ook beseffen dat Facebook heel veel van je weet door alle informatie die je in je profiel deelt, en dat het ook gewoon kan bepalen wat je te zien krijgt. Wil je dat één bedrijf zoveel van je weet en zoveel controle over je heeft? 
Deze gecentraliseerde architectuur zien we niet alleen bij Facebook, maar bij zowat alle hedendaagse diensten op internet. Toch is er een andere manier van werken: gedecentraliseerde apps (dapps). Daarbij valt een app zoals een sociaal netwerk niet onder de controle van één bedrijf, maar draait het verspreid op servers van diverse partijen, in het ideale geval op computers van de gebruikers zélf. Maar als we het over dapps willen hebben, moeten we eerst een stapje terug nemen en beginnen bij Bitcoin. 

1.1 architecture comparison 2

BLOKKETEN 
Bitcoin (bitcoin.org) is een gedecentraliseerde digitale munt: er is geen centrale bank die geld uitgeeft en die uiteindelijk de waarde van het geld bepaalt. Er is geen gecentraliseerd netwerk van banken die transacties kunnen tegenhouden. Gebruikers kunnen rechtstreeks tussen elkaar bitcointransacties uitvoeren en die transacties worden geverifieerd door het Bitcoin-netwerk, dat bestaat uit talloze computers van iedereen. Er is geen centrale server, geen centrale opslag, geen centrale autoriteit. Je hoeft aan niemand verantwoording af te leggen om transacties uit te voeren. 

Bitcoin was de eerste toepassing van een blokketen (blockchain), uitgevonden door Satoshi Nakamoto in 2008 en gepubliceerd in de Bitcoin-whitepaper (bitcoin.org/bitcoin.pdf). Elk blok bevat enkele transacties en bevat ook een cryptografische hashwaarde van het vorige blok. Door die verwijzing naar het vorige blok bouw je dus een keten van blokken op, tot helemaal in het begin naar het eerste blok, het genesisblok genoemd. Als er op het netwerk een nieuw blok wordt gepubliceerd, kan iedereen de hashwaarde van het vorige blok berekenen en vergelijken met de hashwaarde die in het nieuwe blok wordt vermeld. Op die manier wordt gewaarborgd dat niemand een blok na het publiceren kan aanpassen zonder alle erop volgende blokken te moeten aanpassen. Het publiceren en verifiëren van nieuwe blokken gebeurt niet door een centrale server, maar gedecentraliseerd.   

blokketen 2
In een blokketen verwijst elk blok via een hashwaarde naar het vorige blok

SLIMME CONTRACTEN IN ETHEREUM 
Het duurde niet lang voordat mensen ook het potentieel van de blokketen zagen voor andere toepassingen dan digitaal geld. In 2013 werkte Vitalik Buterin dit idee uit en publiceerde hij de Ethereum-whitepaper (ethereum.org/en/ whitepaper/). Hij wilde met Ethereum een nieuw gedecentraliseerd platform ontwikkelen met een robuuste scripttaal voor wat hij slimme contracten (smart contracts) noemde. In 2015 ging het Ethereum-netwerk live. Een slim contract is eenvoudigweg een programma dat op de Ethereum-blokketen draait. Het is een van de twee types Ethereum-accounts. Je hebt accounts die door een gebruiker gecontroleerd worden en accounts die door code gecontroleerd worden. Een slim contract is dat laatste type. Een slim contract kan dus transacties op het netwerk sturen en een balanstotaal hebben. Gebruikers kunnen ook transacties naar een adres van een slim contract sturen om dan de code van het contract te laten uitvoeren. Naast code bevat een slim contract ook data. 

solidity contract 2
Een eenvoudig slim contract op het Ethereum-netwerk, geschreven in de  programmeertaal Solidity

AUTOMATISCH REGELS AFDWINGEN 
Op die manier kun je regels opstellen zoals in een echt juridisch contract en die regels automatisch afdwingen met de code van het slimme contract. En dat alles zonder dat je afhankelijk bent van een notaris of andere centrale instantie. Zo kunnen twee personen die elkaar niet vertrouwen, afspraken maken, zonder dat ze een derde hoeven te vertrouwen. 
Zodra een slim contract op het Ethereum-netwerk draait, kun je het niet meer veranderen: het wordt dan volledig door de code gecontroleerd. Het slimme contract wordt in Ethereums virtuele machine uitgevoerd op Ethereum-clients. Iedereen kan een slim contract ontwikkelen in een programmeertaal zoals Solidity (soliditylang.org) en dit uitrollen op het Ethereum-netwerk. 

FRONT-END 
Met een slim contract alleen ben je er in veel gevallen nog niet. Een slim contract is immers de back-end, die op de Ethereum-blockchain draait. Maar zoals bij elke toepassing heb je ook een front-end nodig: de gebruikersinterface waarmee je als gebruiker te maken krijgt. En dat noemen we een gedecentraliseerde app (of dapp): die bestaat enerzijds uit een (vaak web)interface als front-end en anderzijds uit een slim contract als back-end. Om volledig gedecentraliseerd te blijven, kan de front-end ook op een gedecentraliseerde opslag draaien, zoals IPFS (ipfs.io). 
Een populair type dapps is te vinden in het domein van DeFi (decentralized finance). Het gaat hier om apps die je in staat stellen om allerlei financiële transacties te doen die veel verder gaan dan eenvoudige betalingen zoals bij Bitcoin. Zo heb je DeFi-dapps die je toestaan om digitale munten te lenen, om long of short te gaan, te handelen tussen verschillende cryptomunten of om rente te verdienen op een soort spaarrekeningen met digitale munten. En dat alles zonder gecentraliseerde partij zoals een bank.  

GEDECENTRALISEERDE APPS 
Zo is Uniswap (uniswap.org) een DeFi-protocol dat slimme contracten gebruikt om cryptotokens op de Ethereum-blokketen te verhandelen. Het is dan ook een gedecentraliseerde beurs (decentralized exchange, DEX), in tegenstelling tot gecentraliseerde beurzen zoals Binance, Coinbase of Bitvavo. En met Aave (aave.com) leen je Ethereum-tokens uit tegen een rente. Maar ook buiten het domein van DeFi heb je allerlei dapps op het Ethereum-netwerk. Zo is OpenSea (opensea.io) een marktplaats voor NFT’s (non-fungible tokens), er zijn allerlei gedecentraliseerde games zoals CryptoKitties (cryptokitties. co), de Ethereum Name Service (ens.domains) geeft namen aan Ethereum-adressen of websites en webbrowser Brave beloont je voor het bezoeken van websites met het Basic Attention Token (brave.com/brave-rewards/). 

opensea 2
OpenSea is een marktplaats voor NFT’s,  die gebruikmaakt van het Ethereum-netwerk

HOLOCHAIN 
Een blokketen is niet de enige technologie om gedecentraliseerde apps op te bouwen. Een andere technologie is Holochain (holochain.org). Het verschil tussen Holochain en een blokketen is nog het eenvoudigst uit te leggen als kijkt naar de reikwijdte van de toestanden die je opslaat. 
Bij een blokketen komen alle deelnemende clients overeen over de globale toestand van data (bijvoorbeeld transacties), doordat alle clients een kopie hebben van dezelfde data. Zo heeft iedere volwaardige Bitcoin-client een kopie van alle transacties in de hele geschiedenis van Bitcoin. Maar omdat al die clients dezelfde data moeten opslaan, zijn de transacties traag: Bitcoin kan enkele transacties per seconde verwerken, Ethereum enkele tientallen. Als je dan ook wacht op bevestiging van een transactie om zeker te zijn, moet je minuten tot soms een uur wachten. Blokketens worden dan ook vooral toegepast voor toepassingen die maar een lage doorvoersnelheid nodig hebben.   

LOKALE DATA 
Holochain is geen blokketen, maar werkt fundamenteel anders en heeft ook een andere aanpak voor gedecentraliseerde apps. Het basisidee is dat iedereen zijn eigen data opslaat in plaats van deze over alle clients te kopiëren. Elke Holochain-gebruiker heeft op zijn eigen computer een bronketen (source chain). Deze bevat een cryptografisch ondertekende registratie van alles wat je hebt gedaan in Holochain-apps. Elk opgeslagen element is voorzien van een cryptografische vingerafdruk (een hash). 
Je deelt je data alleen met het netwerk wanneer dat nodig is. Data die je met het netwerk moet delen (bijvoorbeeld om met anderen te communiceren), publiceer je op een gedistribueerde hashtabel (distributed hash table, DHT). En elke gebruiker die een Holochain-app draait, slaat niet alleen zijn eigen data voor die app op, maar ook een klein deeltje van de DHT van die app. De code van een Holochain-app wordt DNA genoemd. In die code staan dus ook de regels voor het delen van data. Elke gebruiker van een app slaat ook een kopie van het DNA op. En zo kan elke gebruiker valideren of data die gedeeld worden met zijn deel van de DHT wel de regels van de app volgen. 

INTEGRITEIT VAN DE DATA 
Als iedereen toch zijn eigen bronketen heeft, wat houdt iemand dan tegen om andere data te delen dan die in de bronketen? Gelukkig wordt in Holochain net als bij een blokketen de integriteit van de data ook beschermd: je kunt niet liegen over de data in je eigen bronketen. Hoe kan dat zonder gebruik te maken van een gedeelde opslag? De bronketen bestaat niet alleen uit data, maar ook uit headers, die timestamps en hashwaardes bevatten van de data. Die headers van de bronketens worden ook gedeeld met de DHT van Holochain. Iedereen krijgt dus de digitale  vingerafdrukken te zien van wat je in je eigen bronketen publiceert. Als je data van je bronketen met iemand anders deelt, kan de betreffende app dan ook in de DHT verifiëren of je die data niet hebt gemanipuleerd. In Holochain wordt ook elke actie door een willekeurig gekozen verzameling clients gecontroleerd. Als die manipulaties merken, sturen ze een waarschuwing uit. Clients die de regels niet volgen, kunnen op deze manier ook uit het netwerk worden gestoten. 

holochain 2
Holochain is een peer-to-peer platform voor gedecentraliseerde apps

SCHAALBAARHEID 
Vergeleken met een blokketen is Holochain schaalbaarder, omdat er geen noodzaak is om alle clients tot consensus te laten komen over alle data. Er is dus minder rekenwerk en minder communicatie nodig. Bovendien bevat een blokketen alle data van alle toepassingen; in Holochain heeft elke app zijn eigen DHT voor opslag. Als je gebruiker bent van een sociaal netwerk dat op Holochain draait, hoef je dus geen data op te slaan van de DHT’s van andere apps. 
Bovendien ligt er bij blokketens zoals Bitcoin en Ethereum heel wat macht bij de miners. Bij Holochain gebeurt alles bij de gebruikers zelf: de clients slaan niet alleen alle data op, maar draaien ook de applicatiecode. Als je bij Ethereum gebruikers toevoegt terwijl het aantal miners hetzelfde blijft, krijgen de miners steeds meer werk te doen. Als je bij Holochain gebruikers toevoegt, krijgt het netwerk meer capaciteit: elke gebruiker neemt een deel van het werk op zich. Holochain is dus meer peer-to-peer dan de blokketen. 

NFT’S 
Een van de toepassingen die goed geschikt is voor Holochain, zijn de al genoemde NFT’s (non-fungible tokens, zie ook PC-Active 318). Een NFT is een eigendomscertificaat voor een uniek fysiek of digitaal goed. In blokketens worden NFT’s geïmplementeerd als slim contract. Maar in Holochain kan een NFT eenvoudiger geïmplementeerd worden. Omdat elk stukje data in Holochain met zijn bron geassocieerd is, is de combinatie van data en broninformatie inherent uniek. Je maakt er dan een NFT van met een dapp die dit ‘token’ eenvoudigweg van de ene persoon naar de andere kan overdragen. In Holochain is een NFT dus gewoon een overdrachtsprotocol. 
Bij een blokketen-gebaseerde NFT wordt het digitale werk doorgaans niet op de blokketen zelf opgeslagen. Als je een NFT verkoopt, draag je dus het eigendomscertificaat over. Maar met Holochain kun je digitale werken zoals foto’s ook gewoon op je eigen bronketen opslaan. Je publiceert het eigenaarschap over dat werk op de DHT, zodat anderen dit kunnen zien, eventueel samen met een versie in lagere resolutie van de foto. Wanneer je dan de NFT verkoopt, draag je de foto uit je bronketen over naar de bronketen van de koper. Je hoeft daarvoor het werk niet te delen met de hele wereld. 

EN VERDER 
De wereld van de gedecentraliseerde apps is nog nieuw en er komen dagelijks talloze nieuwe projecten bij. Welke het halen, is moeilijk te voorspellen. Het is ook een kwestie van gebruikers winnen. Als je Facebook verlaat en je vrienden gaan niet mee, dan verlies je het netwerkeffect. Maar als we allemaal gecentraliseerde diensten de rug toekeren, kunnen dapps wel eens een mooie toekomst hebben.