Ukens Fagbok – Mastering Blockchain – 4th edition


Mastering Blockchain er en ganske teknisk bok som oppdateres ca. annethvert år og er en riktig grundig gjennomgang av teknologien og mulighetene helt fra konseptnivå og ned til kodeeksempler, hvis man har lyst til å lage sin egen Bitcoin-variant.

Versjonen som omtales her er ‘Early Access’-varianten av 4. utgave, som ble utgitt mars 2023.

Først; for de som ikke har stor leselyst i dag så gjelder fremdeles følgende flytskjema:

Med andre ord er ikke Blockchain noe vi folk flest trenger å bry oss så mye om enda, men til forskjell fra når 1 utgaven av denne boken kom ut er det kanskje en teknologi der praktiske anvendelser ligger rett rundt hjørnet.

Siden boken ikke er ferdig enda og det både kan komme nye kapitler og rekkefølgen helt sikkert vil endres så lager jeg bare et kort sammendrag av det relevante innholdet. Med ‘relevant’ menes det her at jeg ganske enkelt hopper glatt over alle kodeeksempler og implementasjonsdetaljer og skriver fra et litt mer overordnet ståsted. Målet er vel egentlig at hvis man leser denne ‘bokanmeldelsen’ så er det mulig å konversere noenlunde sammenhengende om blockchain uten å faktisk lese alle detaljene i boken…

Blockchain 101

Blockchain er en løsning på problemet til Bysantinske Generaler (‘The Byzantine Generals problem’);

Et antall generaler planlegger et angrep på en by. For å lykkes må de angripe samtidig. Den eneste måten de kan kommunisere på er med kurerer som løper mellom leirene til generalene.

Problemet blir vanskeligere ved at dette er Bysantinske generaler, så det er intriger ute og går; noen av generalene kan finne på å sende falske meldinger så vi trenger en måte å skille mellom ekte meldinger og falske.

Fienden samarbeider heller ikke helt og prøver å fange så mange av kurerene de kan. Vi ønsker å sikre både at fienden ikke kan lese meldingene de fanger og sørge for at meldingen kommer frem selv om noen kurerer blir fanget.

Problemet ble formulert i 1982 (https://www.microsoft.com/en-us/research/publication/byzantine-generals-problem/) og teoretisk løst i 1999 ved hjelp av PBFT-algoritmen som er en forkortelse for “Practical Byzantine Fault Tolerance”, ved hjelp av krypteringsnøkler og forhandlingsalgoritmer (consensus algorithms).

Det var dog noen problemer som stod i veien for en praktisk nyttig implementasjon; for det første har vi en akutt mangel på Bysantinske generaler som faktisk har et behov, og for det andre hadde vi ikke tilstrekkelig prosessorkraft til å foreta den nødvendige krypteringen.

Ca. 2005 begynte man å få tilstrekkelig regnekraft til å gjøre enkle blockchain implementasjoner, men det var fremdeles en løsning på leting etter et problem. I 2008 kom Bitcoin på banen, som var den første praktiske implementasjonen som var gjort i noen skala. Vi kan diskutere om Bitcoin var et nyttig problem å løse.

Tilbake til det gamle Bysants:
De forskjellige leirene til generalene har hver sin tilstand etter hvilke meldinger de har mottatt og stoler på. Meldinger som går mellom leirene kan endre eller ikke endre denne tilstanden. Det er ikke noen sentral sultan som er en kilde til sannheten, så vi må replikere tilstandene mellom leirene ved hjelp av flere meldinger. Derfor er det best å sende alle meldingene til alle generalene hver gang vi sender en ny.

For at vi skal kunne stole på meldingene må de være verifiserbare slik at vi kan sjekke at innholdet er det samme som ble sendt og vi trenger en måte å ‘stemme’ over innholdet så vi vet om vi er enige eller ikke. Siden alle generalene er likestilt er det ikke viktig hvilken general som er kilden, men det er viktig at vi vet at det er en general og ikke fienden. Siden vi ikke vet hvilken rekkefølge alle generalene får meldingene så ønsker vi heller ikke at en general kan endre på en eksisterende melding, men bare legge til nye. Målet vårt er som kjent at vi skal oppnå samme tilstand hos alle generalene slik at vi kan angripe byen.

I litt mer moderne ord trenger vi en peer-to-peer, distribuert, replikert tilstandsmaskin som har kryptografisk sikret integritet og som tillater tillegg, men hindrer endringer. Altså en Blockchain.

Problemer

Nå har vi altså en måte å bli enige om en tilstand / kontrakt / etc. og utveksle meldinger om samme uten at vi trenger å stole på noen. Ut fra et rent akademisk ståsted er selvfølgelig det riktig fascinerende. I den virkelige verden er det dog slik at de aller fleste klarer å finne noen de kan stole på. Eksempelvis banken.
De eneste som ikke kan stole på noen er de som driver innen organisert kriminalitet, og hvis du har laget en hel teknologi som bare er nyttig for kriminelle, så er du kanskje på galt spor.
Videre har blockchain anno ~2020 noen vesentlige mangler:

  1. Proof of work (POW) er måten man legger til nye elementer i meldingen. Fordi det er basert på faktorering med store primtall (kjent som ‘mining’) så følger regnekraften som trengs for å finne det neste elementet i kjeden en logaritmisk skala; hver ny runde er ~10x vanskeligere / dyrere enn den forrige. Det skalerer direkte dårlig og er grunnen til at Bitcoin i dag bruker mer strøm totalt enn enkelte nasjonalstater. (~0,5% av verdens totale produksjon)
  2. Siden hele historikken over alle meldinger i historien følger med hver eneste nye melding så øker også lagring / kommunikasjon ganske bratt. Kureren som begynte med å springe lett av gårde med en papyrusrull trenger rimelig snart et helt tog med oksekjerrer.
  3. Consensus algorithms – Dersom 50,1 % av generalene rotter seg sammen og blir enige om en alternativ sannhet, så kan de bytte ut den faktiske sannheten. Dette er naturlig nok ikke et problem når en blockchain når en viss størrelse, men har skapt mer enn bare en tanke bråk når det har skjedd på mindre kjeder.

Pkt. 1 er i Bitcoin en feature og ikke en bug. Den økende regnekraften som trengs for å finne nye coins er en ‘garanti’ for at det ikke lages ubegrenset antall og dermed et hinder for klassisk inflasjon. For andre implementasjoner er det ikke like nyttig…

Løsninger

Grunnen til at det ser ut som om mer matnyttig bruk av blockchain er rett rundt hjørnet er at disse problemene ser ut til å løses rimelig fort. De aller fleste løsningene / implementasjonene er fremdeles på forskningsstadiet, men man skal ikke se bort ifra at flere blir ‘produksjonsklare’ ganske snart.

  • “Proof of Work” erstattes med “Proof of Stake” – vi går fra “Jeg har ytt et signifikant bidrag til denne kjeden, så jeg er en general” til “Jeg er en interessent i denne kjeden, så jeg er en general”. Det kreves fremdeles en hel del regnekraft, men den øker lineært med et ganske lite stigningstall slik at man faktisk kan fortsette i det uendelige uten å bruke all elektrisitet i verden. Ethereum 2.0 er et slikt skifte som det var en del blest om i nyhetene i August. (eller kanskje det er bare meg som leser slike nyheter…?)
  • Consensus – det forskes mye på varianter av eksisterende forhandlings-algoritmer om dagen, og det er en rekke lovende forslag ute. Man vil antakelig ende opp med et utvalg som både er sikre og raske i løpet av få år.
  • Trunkeringsalgoritmer; det forskes også på gode løsninger som kan la elementer i en blockchain ‘dø’ etter at de er kvittert ut av alle generalene slik at de ikke lenger blir med på lasset videre.

Muligheter

Så dersom alle de tekniske problemene faktisk blir løst, hva kan vi bruke en blockchain til, som vi faktisk kan ha direkte nytte av? Det er en rekke ting på beta stadiet som fort kan vise seg å være nyttig.

  • Everledger er en applikasjonsspesifikk blockchain som verifiserer / identifiserer ‘gode’ diamanter i motsetning til konfliktdiamanter som vi helst ikke vil handle for mye med.
  • Central Bank Digital Currency (CBDC) – jeg mener å ha lest at Norges Bank er i oppstartsfasen på et slikt prosjekt.
  • Smart Contracts – ved hjelp av en blockchain kan man la kontrakten og betalingen følge hverandre slik at selve teknologien kan erstatte dagens escrow tjenester der man deponerer et beløp hos en tiltrodd tredjepart for å garantere oppgjør. Dette er egentlig det konseptet som ligger til grunn for Ethereum, og nå som den er i 2.0 versjon er det mange implementasjonsmuligheter som ligger ganske nært i tid.
  • Digitale valg; jeg ønsker å kunne dokumentere at jeg leverer inn en gyldig stemme som faktisk definerer hvem jeg stemmer på, men valg er også anonyme, så jeg vil ikke fortelle hvem jeg er. På den annen side må valgstyrelsen vite hvem som har stemt og ikke. Anonyme, sikre valg er relativt enkelt med en blockchain. Både USA og Donbas regionen har vel noe å hente her.
  • Proof Of Work kan brukes til andre ting enn varmeproduksjon; Stanford har et prosjekt der man kan ‘donere’ CPU-tid til kreft, alzheimer eller annen forskning og bli belønnet med blokker av en blockchain der forskningen er POW-elementet.
  • Anonymisering av Internet Of Things – i dag sender robotstøvsugeren din et detaljert kart over huset ditt og alle hindringer den møter på til Amazons skytjeneste, for å forbedre navigeringsalgoritmen i støvsugeren. Noen av oss mener at det ikke er helt greit at Amazon vet når på døgnet vi tusler hvor i slåbroken. Med en blockchain kan man trygt laste opp informasjon for slike formål uten at den kan spores tilbake til deg. Det er tusenvis av tilsvarende tilfeller fra lyspærer til Tesla.
  • Sikring av IOT – Der det i dag er relativt enkelt å hacke en lyspære for å aksessere et hjemmenettverk vil det bli tilnærmet umulig hvis all trafikk i IOT nettet i et smarthjem verifiseres over en ‘intern’ blockchain.
  • Sikring av pasientjournaler etc; man kan sikkert og anonymt oversende slike typer informasjon over en blockchain.
  • DRM – Digital Rights Management – man kan knytte en blockchain til et utvalg digitale elementer, som kan handles med på samme måte som fysiske objekter. Dette har for så vidt allerede tatt av i form av Non-Fungible-Tokens – NFT-er. Som dog har vist seg å ha riktig variabel prisutvikling, men teknologien er robust.

Så: Blockchain er fremdeles ikke noe vi strengt tatt trenger, men om relativt kort tid kan det dukke opp praktiske bruksområder som vil kreve at vi kan teste dem.