Ge­vaar van block­chain-ver­tak­kin­gen

Hoe af­ge­slo­ten trans­ac­ties uit de block­chain ver­dwij­nen

C’t Magazine - - Inhoud - Mir­ko Dö­l­le

Wat in een block­chain zit, lijkt ge­go­ten in be­ton, voor al­tijd on­ver­an­der­lijk en door mil­joen­vou­di­ge ko­pie­ën niet meer weg te krij­gen - zou je den­ken. Toch ver­dwij­nen er tel­kens weer uit­ge­voer­de trans­ac­ties en lijkt het of ze nooit heb­ben be­staan. Dat is niet het werk van hac­kers, maar van de uit­vin­ders van de bit­coin.

Af en toe spookt het in de block­chain. Je hebt in een bit­coin-client net nog met ei­gen ogen ge­zien dat een over­schrij­ving voor de twee­de keer be­ves­tigd werd – maar een paar mi­nu­ten la­ter is het geld ver­dwe­nen en lijkt het als­of die trans­ac­tie nooit heeft be­staan. Was het een hal­lu­ci­na­tie? Of is het een bug in de bit­coin-client? Niets van dat al­les, maar ge­woon puur toe­val – of een po­ging van een mi­ning-farm om snel geld te ma­ken.

Af­ge­stor­ven en ver­ge­ten

Bit­coin-trans­ac­ties kun­nen ver­dwij­nen als af­zon­der­lij­ke blok­ken of he­le ver­tak­kin­gen van de block­chain af­ster­ven waar­in de trans­ac­ties voor de he­le we­reld in­zich­te­lijk in­ge­boekt wer­den. Dat lijkt pa­ra­doxaal, want het is im­mers de ba­sis­func­tie van een block­chain om al­le blok­ken met al­le daar­in op­ge­sla­gen trans­ac­ties voor eeu­wig te be­wa­ren, zon­der dat ze ver­an­derd kun­nen wor­den of kun­nen kwijt­ra­ken. De block­chain be­vat ech­ter al­leen blok­ken die op dit mo­ment nog re­le­vant zijn. Dat zijn dan al­le blok­ken die in een ke­ten van het laatst toe­ge­voeg­de blok tot het oor­spron­ke­lij­ke oer­blok uit 2009 zit­ten.

Het pro­bleem is dat ie­de­re mi­ner zijn ei­gen ko­pie heeft van de block­chain om­dat het bit­coin-net­werk een peer-to-peer net­werk zon­der een cen­tra­le in­stan­tie is. Als een mi­ner het nieuw­ste blok vindt, bij­voor­beeld num­mer 363997, dan ver­spreidt hij dit via het mi­ner-net­werk naar zijn bu­ren. Die han­gen dat blok aan hun ko­pie van de block­chain en ge­ven dat weer aan hun bu­ren door.

Bo­ven­dien sta­ken de bu­ren van de vin­der hun hui­di­ge delf­po­ging, want het door hen ge­zoch­te blok 363997 is net ge­von­den. Ze ver­wij­de­ren de in het nieu­we blok af­ge­werk­te trans­ac­ties uit de lo­ka­le mem­pool. Ver­vol­gens be­gin­nen ze met het zoe­ken naar het blok 363998, dat als voor­gan­ger-ID de ID (of be­ter ge­zegd: de hash-waar­de) van het net toe­ge­voeg­de blok 363997 be­vat.

Con­cur­ren­tie

De net­werk­t­o­po­lo­gie zorgt er­voor dat het be­kend wor­den van het blok met num­mer 363997 zich gaat ver­sprei­den bin­nen het bit­coin-net­werk. Dat kan in de prak­tijk een paar mi­nu­ten du­ren. Een deel van de mi­ners blijft dus door­gaan met het be­re­ke­nen van een ei­gen op­los­sing voor blok 363997, en bij som­mi­ge leidt dat ook tot een suc­ces.

Dan gaat de twee­de vin­der zijn ver­sie van blok num­mer 363997 naar zijn bu­ren stu­ren, die van het eer­ste ge­von­den blok nog niets mee­ge­kre­gen heb­ben. Die bu­ren han­gen die ver­sie van blok 363997 aan hun block­chain, ver­sprei­den dat ver­der en be­gin­nen met­een met het zoe­ken naar blok 363998 met een re­fe­ren­tie naar het zo­juist ont­van­gen blok 363997.

Op die ma­nier komt er een ver­tak­king in de block­chain: een deel van de mi­ners pro­beert op ba­sis van de eer­ste ver­sie van blok 363997 het vol­gen­de blok 363998 te vin­den, en de rest op ba­sis van de twee­de ver­sie. Om­dat het een­dui­dig be­pa­len van de leef­tijd van een blok niet kan zon­der een cen­tra­le re­fe­ren­tie, kun­nen de mi­ners niet vast­stel­len wel­ke blok het eer­ste was en welk als twee­de werd ge­von­den. Daar­om hou­den ze al­leen re­ke­ning met de blok­ken waar ze voor het eerst van hun bu­ren over ge­hoord heb­ben.

De ver­meen­de bit­coin-uit­vin­der Sa­to­shi Na­kamo­to heeft die si­tu­a­tie voor­zien en daar bij de re­gels voor de crypt­ova­lu­ta re­ke­ning mee ge­hou­den. In de block­chain komt steeds het blok te staan dat de

mees­te op­vol­gers heeft. In eer­ste in­stan­tie zijn dan ook bei­de block­chains van blok 363997 gel­dig, want nog nie­mand heeft blok 363998 ge­von­den. Als een mi­ner blok 363998 vindt en daar­in re­fe­reert naar de eer­ste ver­sie van blok 363997, dan heeft de eer­ste ver­sie van blok 363997 een op­vol­ger en de twee­de ver­sie niet – waar­door de twee­de ver­sie van blok 363997 een zach­te dood sterft en een zo­ge­he­ten 'sta­le block' wordt. Zo gauw blok 363998 over het he­le mi­ner-net­werk ver­spreid is, wer­ken al­le mi­ners weer met de­zelf­de block­chain.

Af en toe weg

Het af­ster­ven van een blok heeft gro­te ge­vol­gen voor de bit­coin-ge­brui­ker waar­van de trans­ac­ties daar­in op­ge­sla­gen wa­ren. De bit­coin-clients heb­ben de trans­ac­ties van het blok al be­ves­tigd en daar­mee be­stem­peld als af­ge­han­deld. Om­dat het blok ech­ter af­ge­stor­ven is en ver­van­gen door het over­le­ven­de blok, ver­dwij­nen de eer­der als af­ge­han­deld be­schouw­de trans­ac­ties als het over­le­ven­de blok bin­nen­komt – als­of de be­ves­ti­ging nooit be­staan heeft.

Bo­ven­dien heb­ben de mi­ners die het net af­ge­stor­ven blok in hun block­chain op­ge­no­men heb­ben, de in het blok op­ge­sla­gen trans­ac­ties al uit hun mem­pool ver­wij­derd waar­in de aan­staan­de trans­ac­ties op hun af­wer­king wach­ten. Dat be­te­kent in het erg­ste ge­val dat al­le in een af­ge­stor­ven blok op­ge­sla­gen trans­ac­ties naar de eeu­wi­ge jacht­vel­den ver­dwe­nen zijn, als­of ze nooit be­staan heb­ben – waar­door de af­zen­der de trans­ac­ties nog een keer moet ver­stu­ren.

Ei­gen­lijk zou het feit dat het moei­lijk is om een vol­gend blok te be­re­ke­nen moe­ten ver­hin­de­ren dat meer­de­re mi­ners bij­na te­ge­lij­ker­tijd gel­di­ge blok­ken vin­den. De moei­lijk­heids­graad wordt el­ke twee we­ken dus­da­nig aan­ge­past dat de mi­ners er ge­mid­deld tien mi­nu­ten voor no­dig heb­ben voor­dat de eer­ste een pas­send blok vindt. Door puur toe­val of om­dat er tij­de­lijk heel veel mi­ners ac­tief zijn, kan het tot een dub­be­le vondst ko­men. In de prak­tijk ge­beurt dat om de paar maan­den wel een keer. Door het ver­traag­de aan­pas­sen van de moei­lijk­heids­graad ge­beurt het dan va­ker bin­nen een paar da­gen.

Ket­ting­re­ac­tie

Het komt dui­de­lijk min­der vaak voor dat een he­le ver­tak­king met meer­de­re blok­ken af­sterft, zo­als in de af­beel­ding in het ka­der on­der­aan op de­ze pa­gi­na, waar­op een toe­stand van de block­chain van me­dio 2015 te zien is. Er ont­ston­den toen niet al­leen twee blok­ken met num­mer 363997, die het bit­coin-net­werk split­sten, maar bij bei­de ver­tak­kin­gen wer­den ook voor de blok­ken 363998 en 363999 tel­kens twee gel­di­ge op­los­sin­gen ge­von­den. Pas bij blok 364000, dat slechts éé­n­maal ge­von­den werd, kwam er een be­slis­sing en stierf de uit drie blok­ken be­staan­de eer­ste ver­tak­king de­fi­ni­tief af. De blok­ken van de ver­tak­king wer­den als we­zen ge­ken­merkt, ook al was de eer­ste in prin­ci­pe een sta­le block.

Om­dat der­ge­lij­ke ver­tak­kin­gen uit meer­de­re blok­ken kun­nen be­staan, kun je er niet op ver­trou­wen dat je een bit­coin­be­ta­ling de­fi­ni­tief bin­nen hebt als de trans­ac­tie in het laat­ste of één na laat­ste blok in de block­chain uit­ge­voerd is. De bit­coin-client Elec­trum ver­werkt trans­ac­ties bij­voor­beeld pas als het blok met de trans­ac­tie vijf an­de­re blok­ken als op­vol­gers heeft – wat een goed uur zal du­ren. Dat is wel een rem op de han­del: als je je kof­fie be­taalt met bit­coins, moet je bij Elec­trum een heel uur wach­ten voor­dat de be­ta­ling over­ge­boekt is en je hem te zien krijgt.

Maar ook dan ben je niet per se ab­so­luut vei­lig: op 4 ju­li 2015 was er van blok num­mer 363730 zelfs een ver­tak­king met zes blok­ken, maar die stierf toch af. Daar­mee ver­dwe­nen op­eens de trans­ac­ties van de laat­ste twee uur – een nacht­mer­rie voor al­le shops die bit­coins ac­cep­te­ren en di­gi­ta­le goe­de­ren vol­au­to­ma­tisch na een be­paald aan­tal be­ves­ti­gin­gen aan de klant le­ve­ren. In de block­chain zelf is dat ach­ter­af niet meer te her­stel­len, wacht al­le blok­ken van de af­ge­stor­ven ver­tak­king wer­den bij het ver­schij­nen van blok 363738 ver­wij­derd.

Op block­chain.in­fo/orp­ha­ned-blocks wor­den der­ge­lij­ke af­ge­stor­ven blok­ken ge­ar­chi­veerd. Dat helpt de ge­trof­fe­nen om te be­grij­pen wat er met de ver­dwe­nen trans­ac­ties ge­beurd is en waar­om een be­paal­de shop een be­stel­ling ge­le­verd heeft zon­der dat er iets van een be­ta­ling in de boe­ken staat. Ach­ter der­ge­lij­ke ef­fec­ten zit dus niet met­een een soft­wa­re­bug, het wordt door de block­chain zelf ver­oor­zaakt. (nkr)

Newspapers in Dutch

Newspapers from Netherlands

© PressReader. All rights reserved.