Hvordan fungerer Blockchain?
October 08, 2015Blockchain er en offentlig transaksjonslogg. Det er en logg over alle godkjente transaksjoner som noensinne er utført i Bitcoin-økonomien. Det hjelper å se det for seg som en kjede av blokker. Den vokser stadig ved at nye komplette blokker legges til i enden av kjeden. Her vil hver ny blokk inneholde nylige transaksjoner. Blokkene legges til lineært og kronologisk.
Hver tilknyttet node (dvs "miner") utfører behandling og validering av transaksjonene, og hver node har en oppdatert og full kopi av Blockchain som en del av denne rollen. Det finnes ingen sentral beliggenhet for Blockchain, den er fullstendig distribuert ute hos "minerene". Alle har hver sitt eksemplar. De sjekker jevnlig med hverandre for å sikre at alle har en identisk kopi. Ved uenighet og mismatch voteres det, og flertallet avgjør. Blockchain inneholder en komplett transaksjonshistorikk fra den første blokken noensinne ("Genesis block") frem til den aller nyeste i dag.
Som vi har gått gjennom tidligere er Blockchain et generelt konsept, og trenger ikke bare angå Bitcoin. En kan danne en Blockchain som holder regnskap på andre verdier også. Når det er sagt, så vil jeg i dette eksempelet snakke om Bitcoin sin Blockchain.
Merkle-tre
Bitcoin benytter seg av en hash-metodikk som kalles Merkle-tre. Det rare navnet skyldes oppfinneren, Ralph Merkle, som patenterte metoden i 1979.
"Top hash" på figuren over kalles ofte Merkle-rot, og det er den som blir brukt videre som et unikt fingeravtrykk av dataene som går inn i bunnen. Dataene er de nye transaksjonene. I Blockchain brukes Merkle-roten slik:
Alle blokkene har et eget Merkle-tre, som prosesserer alle transaksjonene (Tx0, Tx1...) i den blokken. I figuren over er kun treet til blokk nummer 11 vist, som en illustrasjon, men dere kan se at de andre blokkene òg har en Tx-root (dvs Merkle-rot av transaksjonene i de blokkene.)
Samtlige blokker inneholder videre også alle transaksjonene sine i klartekst, for det er umulig å reversere Merkle-roten og finne transaksjonene derfra. En hash-algoritme er en absolutt enveisoperasjon. Merkle-roten fungerer derfor kun som et fingeravtrykk eller en sjekksum. Hvis noen prøver å manipulere noen transaksjoner tilhørende en blokk, vil ikke sjekksummen stemme overens med transaksjonene i den blokken. Hver blokk inneholder en Hovedblokk og en Datablokk som er uløselig knyttet pga av Merkle-roten.
Videre ser dere av figuren lengre oppe at hver Hovedblokk har fire deler: hash av forrige blokk, tidsstempel for gjetteforsøk på ny hash, Merkle-roten av tilhørende Datablokk og til slutt et "Nonce". Hva er et "Nonce" da?
Enkelt sagt er et "Nonce" en fri variabel for "minerene". En verdi som varieres for å sikre at hvert gjetteforsøk er unikt. Når en middels "miner" gjerne gjetter på 500 milliarder hash'er i sekundet (500GH/s), så sier det seg selv at både tidsstempelet og transaksjonene som utgjør Merkle-roten vil være uendret i mange påfølgende gjetteforsøk.
"Minere" velger selv fritt startsted for sin "Nonce". Det vanlige er at en begynner på null for hver blokk, og inkrementerer (øker med 1) for hvert gjetteforsøk på hashen for blokken. Men hvor en begynner er helt ubetydelig. Den teller heller ikke veldig høyt opp (størrelsen på et "Nonce" er 32 bits), og den vil begynne på null igjen flere ganger i løpet av 10. minutters runden, og gå rundt og rundt.
Sjansen for å gjette det samme som andre "minere" er dessuten neglisjerbar, for alle vil ha forskjellig Merkle-rot. Grunnen til det er at alle har en egen spesialtransaksjon i Datablokken (aka Coinbase-transaksjonen), og dette er transaksjonen hver har til sin egen mottakeradresse for de nyutstedte bitcoins'ene, om de skulle vinne runden.
Den delen av Hovedblokken som inngår i hash'en inneholder også protokollversjon og vanskelighetsgrad (omtalt som "Target Bits" i figuren under, men ikke vist på den forenklede figuren lengre oppe.)
Det omtalte matematiske problemet som "minere" må løse for å vinne bitcoins, er bestemt av en vanskelighetsgrad. Det matematiske problemet er til for å motivere "minere" til å konkurrere; flere "minere" øker sikkerheten i Blockchain. Og det fungerer sånn at det statistisk sprer vinnersjansen helt likt.
Regelen er sånn: en skal løse det matematiske problemet og ved hjelp av tilfeldighet få et lavt nok tall. Jo høyere vanskelighetsgrad, dess lavere hash-verdi på ny utgangs-hash kreves. Denne regelen er der ikke for noe annet enn å gjøre suksess sjelden nok. Det er lett å regne ut en hash, men ekstremt vanskelig å få den lav nok; pr idag kreves det statistisk sett rundt 500 milliarder milliarder hash-forsøk for å finne en tilstrekkelig lav nok hash.
Den "mineren" som klarer å finne hash'en for den nye blokken, en hash som altså må tilfredstille vanskelighetsgraden, får opprette den nye blokken.
Vanskelighetsgraden varieres ca hver 14. dag (dvs hver 2016. blokk.) Dette er fordi vanskelighetsgraden skal forsøke å holde rundetiden for hver blokk tilnærmet lik 10 minutter.
Fun fact:
Justering av vanskelighetsgraden er basert på en modifisert versjon av Hashcash (i.e. opprinnelig et verktøy for å motarbeide spam, ved å påkreve litt prosessorarbeid for hver sendte e-post. Tanken bak dette er at det vil være helt ubetydelig for de som sender noen få e-poster, men ødeleggende for spammere)
Helt eksakt ser en blokk slik ut:
SHA-256
Den omtalte hash-algoritmen for Bitcoin er en kraftig "fordøyelse" av den inngående dataen. Dataen blir fullstendig ugjenkjennelig og ødelagt etter behandlingen. Forutsetningen for dens funksjon er at den likevel har et eksakt, forutsigbart og spredt utgående resultat. Det er en enveismetode for data.
En kan ved hjelp av resultatet sjekke at riktig data er brukt inn, men en kan aldri komme frem til dataen ved å gå andre veien fra hash-resultatet. Det er fordi det meste av inngangsdataen er borte og resten er ugjenkjennelig! Dette kan sies generelt om alle hash-metoder.
SHA-256 står for "Secure Hash Algorithm, 256 bits", og er en variant av SHA-2. Data som en putter inn i SHA-256 kan være av en hvilken som helst størrelse, men resultatet ut har alltid størrelsen 256 bits.
Det er to steder Bitcoin bruker SHA-256 i formingen av Blockchain:
- Merkle-treet
- og "Hash av Hovedblokk"
Merkle-treet benytter SHA-256 flere ganger pr tre, dvs èn gang for hver transaksjon og også i hvert av sammenslåingsnivåene helt opp til Merkle-roten. Merkle-roten er der for å verifisere at transaksjonene i blokken ikke har blitt tuklet med i etterkant. Det er fingeravtrykket til transaksjonene, dataene.
For å finne "hash av Hovedblokk" kjøres Hovedblokken to ganger gjennom SHA-256. Det vil si at resultatet som en får ut av SHA-256 første gang, med Hovedblokkdata inn, blir selv kjørt gjennom SHA-256 enda en gang, for sikkerhets skyld.
Hash av Hovedblokken kalles "proof-of-work", fordi det er den som beviser at en har løst det vanskelige matematiske problemet. Så når en heldig "miner"klarer å generere en dobbelt-hash av Hovedblokken som har lavere verdi enn det nivået som vanskelighetsgraden har satt, vil han få æren av å lage blokken. Han vil da belønnes med rundens nyutstedte bitcoins, samt alle gebyrer som transaksjonene måtte inneholde.
Gratulerer til deg om du har klart å følge hele denne artikkelen!
Kan du alt dette, så vet du mer om Bitcoin enn 99,99% av befolkningen :)