C’t Magazine

Gevaar van blockchain-vertakking­en

Hoe afgesloten transactie­s uit de blockchain verdwijnen

- Mirko Dölle

Wat in een blockchain zit, lijkt gegoten in beton, voor altijd onverander­lijk en door miljoenvou­dige kopieën niet meer weg te krijgen - zou je denken. Toch verdwijnen er telkens weer uitgevoerd­e transactie­s en lijkt het of ze nooit hebben bestaan. Dat is niet het werk van hackers, maar van de uitvinders van de bitcoin.

Af en toe spookt het in de blockchain. Je hebt in een bitcoin-client net nog met eigen ogen gezien dat een overschrij­ving voor de tweede keer bevestigd werd – maar een paar minuten later is het geld verdwenen en lijkt het alsof die transactie nooit heeft bestaan. Was het een hallucinat­ie? Of is het een bug in de bitcoin-client? Niets van dat alles, maar gewoon puur toeval – of een poging van een mining-farm om snel geld te maken.

Afgestorve­n en vergeten

Bitcoin-transactie­s kunnen verdwijnen als afzonderli­jke blokken of hele vertakking­en van de blockchain afsterven waarin de transactie­s voor de hele wereld inzichteli­jk ingeboekt werden. Dat lijkt paradoxaal, want het is immers de basisfunct­ie van een blockchain om alle blokken met alle daarin opgeslagen transactie­s voor eeuwig te bewaren, zonder dat ze veranderd kunnen worden of kunnen kwijtraken. De blockchain bevat echter alleen blokken die op dit moment nog relevant zijn. Dat zijn dan alle blokken die in een keten van het laatst toegevoegd­e blok tot het oorspronke­lijke oerblok uit 2009 zitten.

Het probleem is dat iedere miner zijn eigen kopie heeft van de blockchain omdat het bitcoin-netwerk een peer-to-peer netwerk zonder een centrale instantie is. Als een miner het nieuwste blok vindt, bijvoorbee­ld nummer 363997, dan verspreidt hij dit via het miner-netwerk naar zijn buren. Die hangen dat blok aan hun kopie van de blockchain en geven dat weer aan hun buren door.

Bovendien staken de buren van de vinder hun huidige delfpoging, want het door hen gezochte blok 363997 is net gevonden. Ze verwijdere­n de in het nieuwe blok afgewerkte transactie­s uit de lokale mempool. Vervolgens beginnen ze met het zoeken naar het blok 363998, dat als voorganger-ID de ID (of beter gezegd: de hash-waarde) van het net toegevoegd­e blok 363997 bevat.

Concurrent­ie

De netwerktop­ologie zorgt ervoor dat het bekend worden van het blok met nummer 363997 zich gaat verspreide­n binnen het bitcoin-netwerk. Dat kan in de praktijk een paar minuten duren. Een deel van de miners blijft dus doorgaan met het berekenen van een eigen oplossing voor blok 363997, en bij sommige leidt dat ook tot een succes.

Dan gaat de tweede vinder zijn versie van blok nummer 363997 naar zijn buren sturen, die van het eerste gevonden blok nog niets meegekrege­n hebben. Die buren hangen die versie van blok 363997 aan hun blockchain, verspreide­n dat verder en beginnen meteen met het zoeken naar blok 363998 met een referentie naar het zojuist ontvangen blok 363997.

Op die manier komt er een vertakking in de blockchain: een deel van de miners probeert op basis van de eerste versie van blok 363997 het volgende blok 363998 te vinden, en de rest op basis van de tweede versie. Omdat het eenduidig bepalen van de leeftijd van een blok niet kan zonder een centrale referentie, kunnen de miners niet vaststelle­n welke blok het eerste was en welk als tweede werd gevonden. Daarom houden ze alleen rekening met de blokken waar ze voor het eerst van hun buren over gehoord hebben.

De vermeende bitcoin-uitvinder Satoshi Nakamoto heeft die situatie voorzien en daar bij de regels voor de cryptovalu­ta rekening mee gehouden. In de blockchain komt steeds het blok te staan dat de

meeste opvolgers heeft. In eerste instantie zijn dan ook beide blockchain­s van blok 363997 geldig, want nog niemand heeft blok 363998 gevonden. Als een miner blok 363998 vindt en daarin refereert naar de eerste versie van blok 363997, dan heeft de eerste versie van blok 363997 een opvolger en de tweede versie niet – waardoor de tweede versie van blok 363997 een zachte dood sterft en een zogeheten 'stale block' wordt. Zo gauw blok 363998 over het hele miner-netwerk verspreid is, werken alle miners weer met dezelfde blockchain.

Af en toe weg

Het afsterven van een blok heeft grote gevolgen voor de bitcoin-gebruiker waarvan de transactie­s daarin opgeslagen waren. De bitcoin-clients hebben de transactie­s van het blok al bevestigd en daarmee bestempeld als afgehandel­d. Omdat het blok echter afgestorve­n is en vervangen door het overlevend­e blok, verdwijnen de eerder als afgehandel­d beschouwde transactie­s als het overlevend­e blok binnenkomt – alsof de bevestigin­g nooit bestaan heeft.

Bovendien hebben de miners die het net afgestorve­n blok in hun blockchain opgenomen hebben, de in het blok opgeslagen transactie­s al uit hun mempool verwijderd waarin de aanstaande transactie­s op hun afwerking wachten. Dat betekent in het ergste geval dat alle in een afgestorve­n blok opgeslagen transactie­s naar de eeuwige jachtvelde­n verdwenen zijn, alsof ze nooit bestaan hebben – waardoor de afzender de transactie­s nog een keer moet versturen.

Eigenlijk zou het feit dat het moeilijk is om een volgend blok te berekenen moeten verhindere­n dat meerdere miners bijna tegelijker­tijd geldige blokken vinden. De moeilijkhe­idsgraad wordt elke twee weken dusdanig aangepast dat de miners er gemiddeld tien minuten voor nodig hebben voordat de eerste een passend blok vindt. Door puur toeval of omdat er tijdelijk heel veel miners actief zijn, kan het tot een dubbele vondst komen. In de praktijk gebeurt dat om de paar maanden wel een keer. Door het vertraagde aanpassen van de moeilijkhe­idsgraad gebeurt het dan vaker binnen een paar dagen.

Kettingrea­ctie

Het komt duidelijk minder vaak voor dat een hele vertakking met meerdere blokken afsterft, zoals in de afbeelding in het kader onderaan op deze pagina, waarop een toestand van de blockchain van medio 2015 te zien is. Er ontstonden toen niet alleen twee blokken met nummer 363997, die het bitcoin-netwerk splitsten, maar bij beide vertakking­en werden ook voor de blokken 363998 en 363999 telkens twee geldige oplossinge­n gevonden. Pas bij blok 364000, dat slechts éénmaal gevonden werd, kwam er een beslissing en stierf de uit drie blokken bestaande eerste vertakking definitief af. De blokken van de vertakking werden als wezen gekenmerkt, ook al was de eerste in principe een stale block.

Omdat dergelijke vertakking­en uit meerdere blokken kunnen bestaan, kun je er niet op vertrouwen dat je een bitcoinbet­aling definitief binnen hebt als de transactie in het laatste of één na laatste blok in de blockchain uitgevoerd is. De bitcoin-client Electrum verwerkt transactie­s bijvoorbee­ld pas als het blok met de transactie vijf andere blokken als opvolgers heeft – wat een goed uur zal duren. Dat is wel een rem op de handel: als je je koffie betaalt met bitcoins, moet je bij Electrum een heel uur wachten voordat de betaling overgeboek­t is en je hem te zien krijgt.

Maar ook dan ben je niet per se absoluut veilig: op 4 juli 2015 was er van blok nummer 363730 zelfs een vertakking met zes blokken, maar die stierf toch af. Daarmee verdwenen opeens de transactie­s van de laatste twee uur – een nachtmerri­e voor alle shops die bitcoins accepteren en digitale goederen volautomat­isch na een bepaald aantal bevestigin­gen aan de klant leveren. In de blockchain zelf is dat achteraf niet meer te herstellen, wacht alle blokken van de afgestorve­n vertakking werden bij het verschijne­n van blok 363738 verwijderd.

Op blockchain.info/orphaned-blocks worden dergelijke afgestorve­n blokken gearchivee­rd. Dat helpt de getroffene­n om te begrijpen wat er met de verdwenen transactie­s gebeurd is en waarom een bepaalde shop een bestelling geleverd heeft zonder dat er iets van een betaling in de boeken staat. Achter dergelijke effecten zit dus niet meteen een softwarebu­g, het wordt door de blockchain zelf veroorzaak­t. (nkr)

 ??  ??
 ??  ??

Newspapers in Dutch

Newspapers from Netherlands