Miners, Blocktijd en Orphans, een drie-eenheid.

Aat de Kwaasteniet
9 min readMay 6, 2019

--

(Click here for english version)

In dit artikel wil ik een poging doen om de relatie tussen blocktijd en het ontstaan van orphan/stale blocks uit te leggen. Het is in feite een uitbreiding van een alinea in een vorig artikel dat ik geschreven heb “Welke crypto wordt het nieuwe betaalmiddel” in het hoofdstuk over technische bruikbaarheid. Maar ook in “De hype van TPS (transacties per seconde)” wordt het al enigszins behandeld.
In dit artikel gaan we dit fenomeen uitdiepen. Stale blocks en Orphan blocks zijn verschillend aan elkaar maar ontstaan in principe door hetzelfde fenomeen en omdat het in de volksmond allemaal Orphan blocks genoemd worden zal ook ik alleen deze term gebruiken.
Ik zal proberen het niet te technisch te maken zodat de minder technisch onderlegde lezers onder ons het ook kunnen begrijpen. Maar enig begrip over zaken binnen de cryptowereld moet wel aanwezig zijn.

Hoe werkt een “Blockchain” eigenlijk

Zoals de meesten wel weten is een blockchain een vorm van database die in de bitcoinwereld, en andere crypto munten, gebruikt wordt. Maar ik leg in het kort toch even uit wat een blockchain in wezen is.
In de blockchain worden de crypto transacties tussen gebruikers opgeslagen op een zeer specifieke manier. De data van verschillende transacties worden verzameld in een datapakket, een zogenaamd block en de blocks worden serieel opgeslagen waarbij elk block gekoppeld is aan het voorgaande block via een controle getal (“Hash” in vaktermen) wat deel uitmaakt van elk pakket. Het toegevoegde controle getal bewaakt de integriteit van de data in het block. Omdat de blocks aan elkaar gekoppeld zijn als een ketting d.m.v. dat controle getal noemt men het geheel een blockchain.

Elke volledige gebruiker (Full node) van het Bitcoinnetwerk of een andere cryptomunt heeft een kopie van de desbetreffende blockchain op zijn computer staan. En al die gebruikers staan in contact met elkaar via een netwerk. Als nu onverhoopt de data in een block verminkt wordt, moedwillig of anderszins, zal het controle getal van dat verminkte block gaan afwijken en daardoor in alle daaropvolgende blocks ook. Door simpelweg het laatste controle getal van alle gebruikers te vergelijken kan men zien of blockchain van een gebruiker goed of corrupt is. Een goede video-uitleg voor beginners van wat blockchain is kan je ook hier vinden.

Hoe ontstaan Blocks

Een transactie van gebruiker A naar gebruiker B wordt aan het Netwerk aangeboden en in eerste instantie opgeslagen in de Mempool. En miners gaan aan de gang met “Hashen”, het uitrekenen (het is meer raden trouwens dan uitrekenen) van het nieuwe controle getal. Hierbij concurreren de miners met elkaar om als eerste het juiste controle getal te vinden. De miner die het eerste de oplossing vindt heeft gewonnen en wordt beloond voor zijn werk met de mining reward. Daarna wordt het block door de miner uitgezonden via het netwerk naar alle andere gebruikers. Maar dat uitzenden naar de rest van het netwerk kost tijd. Een gebruiker heeft meestal contact met een paar andere gebruikers binnen het blockchain netwerk en dus niet met allemaal tegelijk. Het kan dus zijn dat een bericht van A naar B via verschillende tussenliggende andere gebruikers moet lopen. Dat wil zeggen dat het enige tijd duurt voordat alle gebruikers op de hoogte zijn van de nieuwe staat van de blockchain. Het is een decentraal netwerk, alle verbonden computers (nodes in netwerk jargon) zijn gelijkwaardig en hebben even veel rechten en plichten. Een node kan een normale gebruiker zijn maar het kan ook een miner zijn. Een node is meestal verbonden met slechts 8 andere nodes. Een versimpelde schematische presentatie kan er als volgt uit zien:

In het plaatje zijn de nodes verbonden met hun dichtsbijzijnde buren maar dat is in werkelijkheid niet zo. Een gebruiker hoeft niet verbonden te zijn met zijn geografische naaste buur maar kan net zo goed verbinding hebben met iemand in Japan, Argentinië en Alaska enzovoort. Maar dan werd het plaatje te ingewikkeld om te tekenen.

Verspreiding van Blocks over het netwerk

Wat gebeurd er nu als Miner A een block gevonden heeft en die uitzendt naar alle andere nodes. Hoe lang duurt het dan dat voordat Node C op de hoogte is van dat nieuwe block? Hoeveel tijd dat kost is afhankelijke van veel factoren zoals:

  • De gemiddelde internetsnelheid op het netwerk
  • De snelheid van de gebruikte computer waar de blockchain op draait.
  • De grootte van het block
  • De hoeveelheid nodes in het netwerk
  • De opbouw van het netwerk.

Laten we een rekenvoorbeeld geven. We gaan daarbij van de volgende getallen uit: De gemiddelde internetsnelheid is 10Mbits/sec (niet iedereen heeft glasvezel bij de voordeur.) De block grootte is 100kbyte. De verwerkingsnelheid op de computer is 50 milliseconde voor de echte verwerking en 50 milliseconde voor de internet toegang (Ping time).

De kortste verbinding van Miner A naar Node C is via 5 Nodes en 6 internetverbindingen. Dan kunnen we uitrekenen dat het 5 x (50mS+50mS) + 6 x 0,1 seconde = 1,1 seconde duurt voordat Node C te horen krijgt dat er een nieuw block is toegevoegd aan de blockchain. We noemen die tijd de “propagation delay” binnen het netwerk. Je zou zeggen: nou dat valt mee maar als je nu eens de block grootte veranderd naar 1Megabyte dan is de propagation delay ineens 6,5 seconde.

Als een cryptocurrency een groot netwerk heeft van meer dan 1000 nodes zal 50% van de nodes binnen 6,5 seconden helemaal up to date zijn maar in ongunstige gevallen kan 5% na 40 seconden nog niet op de hoogte zijn van het nieuwste block. Dit is allemaal berekend en uitgedacht via Onderzoek van Christian Decker en Roger Wattenhofer.

Propagation delay is verder niet erg maar is wel een gegeven waar de ontwerpers van het blockchain netwerk rekening mee moeten houden. Want wat gebeurt er als twee of meer miners de puzzel tegelijkertijd of bijna gelijktijdig oplossen? Twee verschillende blokken die volledig geldig zijn om het volgende blok in de blokketen te zijn.
Maar er kan slechts één blok worden geaccepteerd en het andere blok moet worden weggegooid. Het hangt allemaal af van wie het volgende blok mined

Botsing

Miner A en Miner B proberen onafhankelijk van elkaar het volgend block te minen en ze komen praktisch tegelijkertijd met een oplossing. Miner A en miner B beginnen hun block rond te zenden. Miner X wordt het eerste bereikt door het block van Miner A, terwijl Node C het eerste met het Block van miner B wordt geconfronteerd. Het block van van miner B komt even later aan bij Miner X maar wordt daar niet meer geaccepteerd omdat de blockchain op Miner X al een block met hetzelfde nummer heeft toegevoegd.

De blockchain heeft dan twee verschijningsvormen in het netwerk die beide allebei goed zijn in principe:

Bij Node C: > N1,N2……..Block van Miner B
Bij Miner X:> N1,N2,…….Block van Miner A

Het volgende blok wordt door Miner X gemined en Miner X zal dus zijn nieuwe block aan koppelen aan de bij hem bekende blockchain. Die er dus als volgt uit ziet:

N1,N2…….Block van Miner A, Block van Miner X

Miner X zal deze rond gaan zenden. Op een gegeven moment komt het via de paarse pijlen in het plaatje aan bij Node C en deze ziet dat deze blockchain volgorde anders is dan bij hem en ook dat hij langer is. Nu gaat regel één in werking van de blockchain wetten en dat is dat de langste chain wint, die vertegenwoordigd de goede waarde. Node C zal dus zijn laatste block (Block van miner B) verwijderen en de block van miner A en het block van miner X toevoegen. Het voormalige block van Miner B wordt een zogenaamd Orphan block. Dit proces gebeurd bij alle Nodes zodat het gehele netwerk weer met dezelfde Blockchain zal werken.

Dit is in het kort en versimpeld hoe het één en ander werkt. In werkelijkheid werkt het gecompliceerder met meer communicatie tussen de nodes onderling.

Hoe groot is het orphaning “probleem”

Orphaning is inherent aan een gedecentraliseerd netwerk met een blockchain techniek en dat is geen ramp. Het moet echter niet de spuigaten uitlopen. Als een netwerk erg gemakkelijk orphans genereert is het ook gemakkelijk dat er ongewenste forken in de chain ontstaan. Dat kan per ongeluk zijn maar kan ook door kwaadwillende express gedaan worden waardoor er fraude op het netwerk kan plaatsvinden door middel van zogenaamde “double spend”. Het voert te ver om daar nu op in te gaan maar er is genoeg te vinden op internet over dit fenomeen.

Ik heb een onderzoek gedaan naar verschillende crypto munten en hoeveel orphans die produceren. Het optreden van orphans in het netwerk is dus afhankelijk van de propagation delay maar in grotere mate door de blocktijd die een bepaalde cryptomunt hanteert. Als de gemiddelde propagation delay 6 seconden bedraagt en de bloktijd is 600 seconden, zoals bij bitcoin, treden orphans bijna niet op en heeft het netwerk voldoende tijd om optredende dubbele blocks te detecteren en te verhelpen. Maar als de blocktijd erg kort en de propagation delay hoog is, door een grote hoeveelheid transacties waardoor grote blokken ontstaan, kan het netwerk de dubbele blocks niet op tijd herstellen en ontstaan er problemen.
Zeker als de propagation delay toeneemt tot langer dan de blocktijd, dan loopt de blockchain gewoon vast. Het is dus zaak om de blocktijd en de maximale block grootte met zorg gekozen wordt. Te grote blocktijd heeft een negatief effect op de confirmatie tijd (De tijd dat een transactie onherroepelijk is geworden) en een te lage blocktijd heeft bovenstaande effecten tot gevolg.

In hun streven om een zo groot mogelijke aantal transacties per seconde te kunnen verwerken hebben verschillende crypto munten hun blocktijd drastisch korter gemaakt dan die van Bitcoin. Daarnaast hebben sommige de maximale block grootte ook opgerekt naar 4MB en soms nog veel hoger. Een gevaarlijk combinatie.

Hieronder een lijst met blocktijden zoals ik ze kon vinden voor de verschillende cryptomunten met hun prestatie op het gebied van orphaning. U heeft grote kans dat in de lijst uw favoriete munt ontbreekt want lang niet alle munten laten zien hoeveel orphaning optreedt in hun netwerk. Toch is van de overgebleven munten wel een goed beeld samen te stellen wat de relatie tussen blocktijd en orphaning is.

Het is vermeldenswaard dat de meeste munten geen orphan blocks laten zien als ze weten dat ze orphan zijn. Niet alle orphans zullen dus de explorer bereiken, voor het blok dat hen orphans maakt. Dus in de meeste gevallen zal het aantal orphans in het netwerk een stukje hoger zijn dan wat de explorer meldt.
Hoe groter het netwerk en hoe sneller de blocktijd, hoe minder % van de werkelijke orphans door de explorer zal worden gezien.

We zien dat oude bekenden als Bitcoin, Litecoin, Dash goed presteren met weinig Orphaning. Maar ook Groestlcoin presteert buiten verwachting met hun snelle Blocktijd van 60 seconde en toch maar gemiddeld 1 orphan per dag. Dit is de uitzondering op de regel. Alle crypto’s met een lagere blocktijd dan 100 seconden presteren niet best.

Ik heb de waarden ook even in een grafiek uitgezet.

Digibyte loopt gemiddeld 6 orphans per dag op en lijkt daarmee goed weg te komen met de enorm lage blocktijd van 15 seconde. Dat het goed afloopt is trouwens de vraag als het aantal transacties, en daarmee de block grootte, toeneemt. Want op dit moment ogenblik zit in elk DGB block slechts 1 transactie en dat neemt niet veel ruimte in maar de block grootte van DGB kan nu max. 4MB bedragen en dan is een verstopping van het netwerk onherroepelijk een feit. Je zou een vergelijking kunnen maken met Ethereum, omdat, die met dezelfde block tijd als Digibyte zeer slecht scoort omdat die wel een groot aantal transacties verwerkt. Dat is dus ook het voorland van Digibyte.
Ethereum balanceert op het randje van wat nog mogelijk is. 11,26% van alle blokken die gemined worden leveren een orphan op, hoewel Ethereum dat “Uncles” noemt omdat zij de miners die Orphan/Uncles minen wel een reward geven.

Wat opvalt in de lijst is dat alleen Ethereum, Bitcoin, Litecoin en Dash meer dan 1 transactie per block bezitten. Crypto staat nog echt in de kinderschoenen wat dat betreft.

Conclusie

Orphaning is geen “bug” maar is inherent aan het gebruik van decentrale netwerk en blockchain techniek. Het levert normaal gesproken geen problemen op behalve als dat vaak gaat optreden. De frequentie van optereden is afhankelijk van de blocktijd en de grootte van de blocks. Als algemene stelregel kan gezegd worden dat een blocktijd groter dan 100 seconden geen noemenswaardige problemen op zal leveren. En dat blocktijden kleiner dan 60 seconden in de gevarenzone zitten.

Tot zover de uitleg, ik hoop dat u er wat aan heeft.

--

--