Hvem bestemmer reglerne i en decentral teknologi? - Sådan tilføjes nye blokke til kæden
Godt.
Nu har du måske fået en forståelse for, hvorfor blockchain er en revolutionerende teknologi, og hvad den kan bruges til. Du har måske også fået manet nogle af dine bekymringer om sikkerheden ved teknologien til jorden.
Så nu skal vi kigge lidt nærmere på selve teknologien. Hvordan fungerer den egentlig, når nu der ikke er en central styring af den? Alle kan være med - men hvem laver reglerne?
En blockchain består af en kæde af blokke. Deraf navnet.
Vi kan også blive i handelsverdenen og kalde det en kæde af transaktioner.
Det, at der kan tilføjes nye transaktioner i kæden, er en ret central del af, hvordan en blockchain er bygget op. Uden nye transaktioner ville det kun være et historisk arkiv over transaktioner. Nogle mener derfor, at det lige præcis er den del, bitcoin har løst, der er det revolutionerende, og at det faktisk er endnu vigtigere end selve den decentrale transaktionsliste.
Men hvordan tilføjes nye transaktioner, når der ikke er en central enhed til at kontrollere det, der tilføjes eller i hvilken rækkefølge, det tilføjes?
Og hvordan gør man det, når alle, der tilføjer transaktioner, i bund og grund ikke stoler på hinanden? Der skal jo som bekendt ikke mere end et råddent æble til at ødelægge hele kurven - og i bitcoin-verdenen er der en ret stor motivation for at fuske med transaktionerne, hvis man ikke har rent mel i posen.
For at forstå hvordan nye blokke tilføjes, skal vi se lidt dybere på, hvordan en blok er bygget op.
Kan du huske denne her? Fra Den Magiske Maskine.
Hjertet i blockchain er selve opbygningen af blokkene og deres indbyrdes uforanderlighed. Men hjernen - det er det digitale demokrati i form af konsensusalgoritmen, der træder i kraft, når nye transaktioner tilføjes. Dén skal vi kigge lidt nærmere på nu.
For som i din egen krop, kan hjerte ikke undvære hjerne. Der skal være en tæt sammenhæng for at få systemet til at fungere.
Men først skal du lige høre en lille historie...
Historien om Generalernes Dilemma
Hvis jeg sir’ Byzantine fault tolerance, så sir’ du yeah. Byzantine fault tolerance - [yeah]. Byzantine fault tolerance… Okay, det er nok en tand for tidligt, men når du har læst historien om Generalernes Dilemma, vil du forstå.
Vi skal tilbage til romertiden. Tænk Asterix og Obelix, viadukter og gladiatorer. Tænk på den romerske hær og det store imperium.
Heromkring levede en general, der med sine tre løjtnanter og hver deres delinger, var på krigstogt og havde omringet en vigtig by med nogle genstridige indbyggere.
Den eneste måde for dem at indtage byen på var, hvis alle tre delinger angreb samtidigt. Ellers var slaget tabt.
De skulle altså koordinere tidspunktet for deres angreb og få alle til at bekræfte, at deres deling ville angribe der. For ellers ville de blive massakreret.
Men for at gøre opgaven ekstra kompleks, var der en forræder iblandt dem, som var ude på at forpurre angrebet ved at sende falske informationer rundt.
Forræderen havde en ret stor magt over hæren.
Lad mig prøve illustrere.
Hvis nu løjtnanterne blot tog imod ordrer og sendte videre, ville det være meget let for en forræder at ødelægge kommandovejen. I tilfældet her ville første løjtnant tro, at de angriber, og han ville blive slagtet.
Så den kloge general gik lidt i tænkeboks for at tygge på problemet.
Det, de havde brug for, var en sikker måde at opnå enighed - eller konsensus, som det også hedder - om der angribes eller ej. En måde, som alle kunne være sikre på, var korrekt, og som de vidste, at der var ⅔ enighed om.
Hans absolut vigtigste formål var at sikre, at de ikke ville blive overvundet af byens hær. Det var derfor ikke vigtigt, hvad de opnåede konsensus om, men at de endte med at gøre det samme.
Altså angreb eller ej.
Derfor ændrede han kommandovejen.
Nu vidste generalen, at alle løjtnanterne ville sende besked videre rundt til de andre løjtnanter således, at hver løjtnant ville modtage tre ordrer, inklusive den fra generalen.
Det koordinerede angreb så derfor således ud.
- 1. Løjtnant modtog: Angrib, Angrib, Bliv
- 2. Løjtnant (forræderen) modtog: Angrib, Angrib, Angrib
- 3. Løjtnant modtog: Angrib, Angrib, Bliv
Og da generalen havde beskrevet, at det blot krævede ⅔ enighed for at opnå konsensus, så kunne de loyale løjtnanter være sikre på, at de ville være nok til at overvinde byen.
Og således gik det til, at den stride by blev overvundet af et koordineret, decentralt angreb med en ussel forræder i midten.
Hvordan hænger det sammen med blockchain?
Når jeg lige syntes, at du skulle have en historie om generaler og løjtnanter først, skyldes det, at problemstillingen beskrevet i historien har lagt navn til et begreb, der hedder “Byzantine fejl tolerance”. Det er dybest set en teknik til at sikre systemer, hvor der ikke må opstå fejl, hverken bevidst eller ved uheld. Eksempelvis i fly, rumfærger, atomreaktorer - og ja - bitcoin.
Byzantine generalernes problem er en matematisk problemstilling beskrevet tilbage i starten af 80’erne - der findes mange udgaver af den og ikke mindst mange forklaringer på den. Min historie er en simplificeret udgave med henblik på at forstå sammenhængen overordnet. Jeg synes selv, at denne artikel har en god teknisk dybde i forklaringen.
Altså et system, hvor man som udgangspunkt bygger det ud fra devisen, at INGEN enheder (løjtnanterne) stoler på hinanden. I et fly betyder det, at ingen sensorer stoler på de andre uden konsensus, og det er samme princip i andre systemer bygget med denne form for fejltolerance.
Når der tilføjes flere enheder - eller løjtnanter - til et systemet øges kompleksiteten eksponentielt - men princippet er det samme.
Bitcoin, og den blockchain protokol, den bygger på, er i sin natur bygget op ud fra en forudsætning om, at INGEN kan stoles på. KUN hvis flertallet er enige, er det en sandhed.
Sådan skabes konsensus i en blockchain
Konsensusalgoritmen bag bitcoin og de fleste andre kryptovaluta i dag er den, der kaldes “proof-of-work”, og den er intet mindre end en genistreg fra Bitcoins opfinder Satoshi Nakomoto.
I min gennemgang bruger jeg Bitcoins Proof-of-Work algoritme til at forklare konsensusalgoritmen - blockchain teknologierne udvikler sig så hurtigt, at der er op til flere andre metoder i gang - eller på tegnebrættet - til at skabe konsensus, men det er dog stadigvæk Bitcoins PoW, der har revolutioneret området og er den mest brugte model.
For at forstå logikken bag skal vi tilbage til de to grundelementer i blockchain, som jeg tidligere har introduceret i indlægget om opbygningen af en blockchain.
En blok består jo af en række metadata og så, ikke mindst, en række transaktioner. Hvis den samlede blockchain er at sammenligne med en regnskabsbog, så er de enkelte blokke at sammenligne med sider i bogen. Når først de er skrevet, kan de ikke ændres igen.
Da indholdet af alle nye blokke næsten er givet på forhånd på grund af den tidligere blocks hash og andre metadata, er den unikke del primært de transaktioner, der medtages i den enkelte block. Men da der ikke er en central enhed til at beslutte hvilke transaktioner, der skal medtages, er løsningen at dele dem op i blokke, og så lade alle konkurrere om hvilke transaktioner, der skal med.
Det er her begrebet “mining” kommer ind.
Alle minere har adgang til en stor fælles transaktionspool, hvor alle, der ønsker at gennemføre en transaktion, tilføjer sit ønske samt det medfølgende gebyr, de er villige til at betale.
Den miner, som får sin block tilføjet til den samlede kæde, er også den, der modtager alle transaktionsgebyrerne. Derfor er det naturligt nok dem, der er villige til at betale det største gebyr, der behandles først.
Det er altså sådan den enkelte miner vælger hvilke transaktioner, der medtages - men hvordan besluttes det så hvilken block, der tilføjes kæden? Svaret ligger i den famøse Proof-of-Work.
Har du lagt mærke til denne her:
Det er en simpel måde at illustrere, at hver block kræver, at der løses et lille puslespil.
Det lille puslespil er “kodet” til hele tiden at blive justeret i sværhedsgrad, så det altid i gennemsnit tager 10 minutter at løse. Er der mange, der miner på samme tid, bliver det sværere, og er der få, bliver det lettere.
Kan du huske, at resultatet fra krypteringsmaskinen altid var lige store kasser med forskellige mønstre - det er faktisk koblingen til puslespillet.
Puslespillet, man skal løse, gives nemlig ved, at alle i forvejen ved, at det mønster, der kommer ud, skal starte med en bestemt sekvens. Sværheden defineres af hvor stor en del af mønsteret, der er kendt i forvejen.
I bitcoin er det antallet af 0 i den hash, der kommer ud, som definerer sværheden. Det bliver mange gange sværere for hvert 0, der tilføjes, og den aktuelle sværhed er gemt i hver eneste block, således at man altid kan se hvor svær, den var at skabe konsensus om - og indirekte hvor sikker, den konsensus er. Det er også den samlede sværhed, der definerer den længste kæde.
Da resultatet fra maskinen altid vil være helt tilfældigt, er der ikke andre metoder til at ramme et bestemt mønster end ved god, gammeldags knofedt - for en computer omsættes det til regnekraft.
For at ramme mønsteret skal blockens indhold ændres, køres igennem maskinen igen og testes mod facit. Rammer den ikke, gennemføres processen igen og igen og igen og…
Det gøres igen og igen, til man rammer det rigtige mønster, og det kan tage 1000-vis af forsøg, før man gør det.
Forsøgene måles i hvor mange, man kan gennemføre pr. sekund, altså hvor mange SHA256 operationer, der kan gennemføres pr. sekund. I skrivende stund består bitcoin netværkets samlede kapacitet af over 25 millioner Terra hashes pr. sekund, hvilket oversættes til 25.000 milliarder hashes pr. sekund. Se også den aktuelle rate her. Teknisk set hedder det tal, der skal findes for hver block for “nounce”.
På et tidspunkt rammer man jackpot.
Så snart der er en miner, der rammer det magiske tal, som giver et rigtigt facit, bliver blokken “lukket”, og alle går i gang med at producere den næste block.
Det, der i gennemsnit tager 10 minutter om at beregne for tusindvis af computere, tager i alt sin enkelthed en brøkdel af et sekund at bekræfte for alle, der producerer blokkene, og de er derfor hurtigt videre og ved at samle og validere den næste block.
Det er den miner, der rammer det rigtige tal - og altså genererer den block, der bliver tilføjet til kæden - som får en lille bonus i form af helt friske bitcoins samt de gebyrer, der betales.
Og det er samtidigt sådan, at nye mønter introduceres i systemet.
Begrebet “miner” kommer faktisk fra, at hele processen minder lidt om Westens vilde guldgravere, der også kunne grave guld op af den tomme jord, hvis de havde heldet med sig.
Men hvad sker der så, hvis der er 2, der ramme jackpot samtidigt?
Hvem bestemmer så?
Jo altså. Da blokkene genereres helt decentralt og er baseret på rent tilfælde i forhold til hvad, der skal til for at ramme de rigtige nr., kan det faktisk godt lade sig gøre, at flere minere rammer tallet næsten samtidigt, og det sker relativt ofte.
Alle blokke har jo et nummer (= højden på blokken), og det er det unikke nummer, der er flere, der kan ramme på samme tid. Se dobbelte blokke her.
Heldigvis er selve protokollen bygget op til at tage højde for den problemstilling, både når det sker som et matematisk tilfælde, men også for at undgå svindel med transaktionerne.
Her kommer konsensusalgoritmen fra den kære general i romertiden ind igen.
Det, der sker, når en miner finder en block, er nemlig, at den sendes ud i netværket. Men med et netværk, der spænder hele kloden, kan der være forskel på hvilken blok, man modtager.
Det betyder, at de minere, der modtager version A, arbejder videre med en kæde, der består af A-blokken, mens dem, der modtager version B, arbejder med en kæde, der består af B blokken.
Den indbyggede incitamentsstruktur gør, at minere kun får nye bitcoins, hvis deres blokke bliver tilføjet til den længste kæde. Det er den længste kæde, der vinder, og det betyder også, at så snart man finder ud af, at den kæde, man arbejder på, er den korteste, så skifter man i stedet over til den længste.
På den måde sikres, at kæden ikke splittes op ved en fejl.
Bitcoin protokollen definerer desuden, at det først er efter 100 nye blokke, man som miner kan bruge den gevinst, man får ved at have ramt jackpot. Herved sikres, at der ikke bruges gevinster, der ikke er en del af den længste kæde.
Det er en udbredt tro, at Bitcoin mining har til formål at skabe nye bitcoins til brug, men i virkeligheden er det faktisk et biprodukt og et incitament for at validere transaktioner.
Med dette sidste indlæg i min introduktion til Bitcoin og Blockchain generelt håber jeg du har fået smag for at følge med. De to andre introduktionsindlæg er Hvorfor er blockchain en revolutionerende teknologi? og Sådan er en blockchain opbygget - og derfor kan du stole på den!