Bitcoin från grunden

Bitcoin blir allt mer debatterad i media, och jag med denna artikel försöka förklara grunderna på ett relativt enkelt sätt så att debatten kring bitcoin blir mer meningsfull. Exempelvis förekommer en del missförstånd där man gärna uttrycker att en viss egenskap i bitcoin borde bytas ut eller göras annorlunda utan att förstå konsekvenserna. Mitt mål är att vända mig till en främst icke-teknisk publik men som gärna vill få en liten djupare förståelse vad som sker under ytan.

Det är min övertygelse att bitcoin är en av de mest spännande uppfinningar som människan någonsin konstruerat, och det kommer att skapa många nya frågor som ”vad är pengar?” eller ”vem har rätten att skapa pengar?”. Den debatten tar vi en annan gång, för nu ska vi titta på hur saker och ting fungerar tekniskt.

Det var en gång...

Betänk världens enklaste databas. Den innehåller en enda rad: "Pelle har 100 kr". Det finns inga andra kronor i hela världen. Nu vill Pelle ge Anna 30 kr, och behålla resten själv (70 kr). Det finns olika sätt att göra detta på, men säg att vi skapar två nya rader i vår databas: "Anna får 30 kr" och "Pelle får 70 kr". I detta ögonblick så har vi använt samtliga kronor från den första raden i vår databas, så vi stryker denna rad.

I detta ögonblick finns det många som ställer sig frågan ”Varför göra så?” Varför inte bara uppdatera raden "Pelle har 100 kr" med "Pelle har 70 kr" och sedan lägga till "Anna har 30 kr"?

Varför vi gör på detta sätt kommer att framgå längre fram, men principen vi försöker följa är att inte förändra någonting i vår databas, utan endast lägga till information.

”Men är inte överstrukna rader en förändring av databasen?” Nej, det behöver inte vara så. Överstrykningen är underförstådd givet att de nya raderna refererar till de gamla raderna som pengarna kommer ifrån.

Och vi fann en grop...

Låt nu Pelle skicka 40 kr till Erik (ny person), 20 kr till Anna och resten till sig själv (10 kr). Även om vi räknar bort alla strukna rader så finner vi att Anna har två rader i databasen. Det ska tolkas så att det totala kapitalet Anna förfogar över är summan av samtliga rader, i detta fall 30+20 = 50 kr. Återigen kan detta kännas lite märkligt, men det hänger ihop med att vi aldrig vill ändra/uppdatera rader i vår databas, utan endast lägga till rader.

...som blev lite djupare.

Slutligen låter vi nu Anna ge sitt totala kapital till Erik. I detta fall har vi två rader (med Anna) som vi stryker, och denna summa (50 kr), ger vi till Erik, som får en ny rad (50 kr). Nu har Anna inga ostrukna rader, vars samlade kapital blir 0 kr. Erik har två ostrukna rader (40 + 50) med summan 90 kr. Pelles kapital har vi inte rört som fortfarande har 10 kr.

Är ni med så långt?

Så långt är det inte allt för svårt. Det enda som kan tyckas lite märkligt är att vi aldrig ändrar på rader; istället väljer vi endast att lägga till nya rader och stryka rader som vi "plockar" kapital från. Alltså får vi en lång tabell som hela tiden växer med tidens riktning.

Inga administratörer!

Om vi inte har någon administratör, så får vi inte heller ha en central skyddad plats där konton skapas med tillhörande lösenord, etc. Hur löser vi nu detta? Det visar sig att det finns en väldigt gammal teknik från 1970-talet som går under benämningen asymmetriska nycklar. Ordet "asymmetrisk" låter jobbigt, så låt oss använda en analogi:

Här har vi bytt ut "Pelle" mot "1ziqkz08c" som vi kallar för postadress; föreställ en postlåda där det står "1ziqkz08c" på brevinkastet. Denna postlåda kan endast låsas upp med nyckeln "1anci39ijdhq0". När postlådan "1ziqkz08c" öppnas med nyckeln "1anci39ijdhq0" så kan vi ta samtliga kuvert (med pengarna) som stoppats in i postlådans öppning. Det viktiga är att ingen utan nyckeln "1anci39ijdhq0" kan öppna denna postlåda. Motsvarande görs för Anna och Erik.

För att tala sanning så är adresserna i bitcoin mycket längre än som illustrerats. En riktig bitcoin-postadress är exempelvis:

1Lp2MKoAP4M1REeW9oU7RJhUNPYVAL4CLx

och en nyckel som passar denna adress är:

5K6jNf3RuSHmmipAS18D8NY1SmevfBG86KBZjnTCLK7zSZz8JbV

En väldigt bra fråga är hur man skapar dessa postlådor med tillhörande nycklar. Det visar sig att det är ganska enkelt att göra det, och billigt dessutom. Detta görs enbart med hjälp av slumpen. Man kan förstås fråga sig hur stor är chansen/risken att man lyckas slumpa fram samma postnummer + postnyckel som någon annan? Den chansen/risken finns förstås, men om du har en bra slumptalsgenerator så är chansen att lyckas med det mindre än 0.000000000000000000000000000000000000000000001%. Eller för att uttrycka det på ett annat sätt: försök att slå en (sexsidig) tärning upprepade gånger och få samma sida 60 ggr i rad!

Eftersom sannolikheten är så otroligt liten, så gör det ingenting att man kan skapa en ny postlåda (med nyckel) varje gång man vill göra en finansiell transaktion. Det blir naturligtvis en hel del postlådor och nycklar att hålla reda på per person, men en nyckel tar i stort sett ingen plats alls i en modern dator. Nycklarna tillsammans med vilka transaktioner (ostrukna rader i databasen) som är relevanta för just dig är vad som brukar benämnas "din plånbok" i bitcoin-sammanhang.

Även om det var lite jobbigt så kanske du fått grepp om att vi lyckats lösa "kontoproblemet", dvs. vi behöver ingen central punkt där en administratör håller reda på alla konton. Vi löste detta genom att vem som helst kan skapa sin egen postlåda och hemlighålla nyckeln för den postlådan. Postlådans adress kan vi avslöja till våra vänner (eller till världen) som vill skicka pengar till oss.

Vilse i nätverket

Men hur hittar vi varandra? Detta görs med ett s.k. peer-to-peer-nätverk; datorer som är uppkopplade mot varandra över hela världen. Varje nod i detta nätverk har exakt samma kopia av databasen (med alla rader). Vidare så följer varje nod i nätverket efter samma uppsättning regler. Skulle en nod bryta mot dessa regler (= protokollet) så blir noden utfryst från nätverket.

Vilka datorer som är med i nätverket är inte fast, utan ändrar sig hela tiden. Nya noder kan tillkomma, och existerande noder kan försvinna. Det finns ca 5000 levande noder idag. Givet att man vet åtminstone en nods IP-adress så kan man fråga sig vidare och få adresslistan för hela nätverket vid varje given tidpunkt.

Vem har "rätt"?

Låt oss leka med tanken att två olika noder i nätverket vill fortsätta databasen på olika sätt. En enkel tanke vore kanske att man skulle låta en majoritet av noderna i nätverket få bestämma. Tyvärr är det ingen bra lösning, eftersom inget hindrar att en illasinnad "hacker" skapar tusentals noder i ett "bot-nät" och på så sätt tvingar sig fram en majoritet. Kom ihåg: Ingen administratör! Så vad göra?

Hej hå, till gruvan vi går

Det visar sig att det finns en ytterst elegant lösning på detta problem. Lösningen heter "proof-of-work" eller på svenska "bevis-på-arbete". Om vi klumpar ihop raderna (= transaktionerna) i block, och för varje block ska ett "svårt" problem lösas. Nätverket är kalibrerat så att det tar ungefär 10 minuter att lösa problemet. Den som löser problemet först "vinner" tävlingen, och får därmed lägga till sitt block i kedjan av block. Dessa "problemlösare" kallas i bitcoin-terminologi för "miners", eller på svenska "gruvarbetare". Varför de har just har denna benämning kommer framgå senare.

Fler gäster i nätverket

Bitcoin-nätverket består nu av olika aktörer. Vi har användare som vill få igenom sina transaktioner, och vi har gruvarbetare som vill skapa block med transaktioner. Det är inte säkert att varje gruvarbetare strävar efter att skapa samma block, men lösningen på att försöka få med blocket i kedjan tar ca 10 minuter. För varje enskild gruvarbetare så kan lösningen ta allt mellan 0 till 60 minuter (eller ännu mer), men kollektivt så blir medeltiden ca 10 minuter.

Hela idén med bevis-på-arbete är att det inte behövs några hemligheter. Principen att lägga till block kräver energi och bra utrustning. Det är en extremt konkurrensutsatt marknad, där de absolut tuffaste företagen tävlar om att skapa dessa block. Dessa aktörer är nödvändiga för att säkerställa vilken "sanning" som är den rätta.

Det är på detta sätt alla deltagare kan lita på nätverket som ett kollektiv. Vem som helst kan delta att antingen producera transaktioner, eller försöka lägga till block med transaktioner. Det finns ingen myndighet, eller institution, eller regering som kontrollerar vem som får delta i detta nätverk eller vilken roll man spelar. Enda sättet att stoppa detta är att stänga ner Internet, vilket är förstås helt orimligt.

Den längsta kedjan vinner

Då det inte förekommer några administratörer i nätverket, så kan vi inte heller låta en enskild bestämma vem som ska fortsätta på blockkedjan. En majoritet av noderna kan inte heller bestämma (kom ihåg den illasinnade hackern som kan skapa tusentals noder och därmed skaffa sig en majoritet). Därför har följande regel skapats: varje nod väljer den längsta kedjan med mest arbete (bakom sig).

När en gruvarbetare har funnit en lösning och ska annonsera det nya blocket, så kan det hända att en annan gruvarbetare redan gjort det och dessutom funnit två block i följd. Således uppstår för ett ögonblick en liten konflikt: Det finns "två" sanningar, men där den ena sanningen blir snabbt förpassad till vara falsk då den andra kedjan blir längre.

I bitcoin-språk blir dessa "falska" block föräldralösa (på engelska orphans). De transaktioner som finns i dessa föräldralösa block kommer så småningom att inkluderas i nya block. Således tar det bara lite längre tid innan transaktionerna kommer med i den längsta kedjan. I värsta fall får man sända om sin transaktion, men detta sker naturligtvis automatiskt av din plånbokshanterare, och ingenting du behöver göra manuellt.

En närmare titt på ett block

Ett block består av ett antal transaktioner, men den första transaktionen i blocket kallas "coinbase" och tillägnas gruvarbetaren själv. Här får gruvarbetaren en belöning (som i skrivandets stund är 25 bitcoin) att välja till en egen postadress. De övriga transaktionerna är vilka gruvarbetaren själv valt ska ingå i blocket. Dessa pengar har alltså ingen tidigare ägare och skapas alltså i just det ögonblicket, eller "inflation" som det heter i penningpolitiska termer.

Det framgår inte i illustrationen, men belöningen (coinbase) till gruvarbetaren är inte bara inflationen av penningmängden (25 bitcoin) utan här ingår även samtliga frivilliga transaktionsavgifter. Därmed finns det ett incitament för en gruvarbetare att välja transaktioner med de högsta transaktionsavgifterna. Exakt vad transaktionsavgiften landar på är någonting som bearbetas på en öppen marknad, men man kan säga att det går i regel fortare att få igenom sin transaktion ju högre din frivilliga avgift är. I praktiken är dessa avgifter väldigt små.

Hur många bitcoin finns det?

Som du nyligen sett så ökas penningmängden i och med varje block som läggs till i kedjan. Belöningen till en gruvarbetare är för närvarande på 25 bitcoin, men den har varit 50 bitcoin då nätverket startades. Belöningen per block halveras ca vart 4:e år. Nästa halvering sker 26:e juli 2016, som då gör att belöningen för varje nytt block skruvas ned till 12.5 bitcoin. Räknar man ihop samtliga halveringar så kommer det totala antalet bitcoin att stanna på 21 miljoner ca år 2140.

Men varför? Vi kan bara spekulera, men det påminner en del om hur guld utvinns ur jordskorpan. Det finns bara en viss mängd guld på jorden (ca 170,000 ton). Och det blir bara svårare att svårare att utvinna guldet, dvs. mängden guld som kan utvinnas ur 1 ton jordskorpa blir lägre och lägre. Upphovsmannen (under pseudonymen Satoshi Nakamoto) till bitcoin har tänkt sig att bitcoin ska räknas som "digitalt guld".

I någon mening så spelar det ingen roll vilken penningmängd vi beslutar oss för. Syftet med belöningen för gruvarbetare är att försöka sprida penningmängden till så många som möjligt. Gruvarbetare måste betala sina elräkningar, och blir därför mer eller mindre tvungna att sälja sina bitcoin på en börs. Endast en mindre del kan de behålla (utan att göra en förlust.) Genom att protokollet medvetet krymper belöningen (vart 4:e år) så ökar värdet per bitcoin. På så sätt ökar också intresset för bitcoin som finansiellt instrument.

Kaninhålet är djupare än så

Här kunde historien om bitcoin ha slutat, men saker och ting är mer komplicerade än så. Likt Alice-i-underlandet så kan man aldrig sluta förundras över hur underligt allting är.

I tidigare illustrationer så lade vi till ibland flera rader för en transaktion, t ex när en person skickar till ett par andra personer (med växeln till sig själv). Så är det inte riktigt i bitcoin. I bitcoin så är varje rad exakt en transaktion och varje transaktion har ett antal ingångar och utgångar. I bitcoin stryks inte en rad (= transaktion) utan endast en/flera utgångar av en tidigare transaktion.

Ingångarna till en transaktion är alltid (såvida inte det är en "coinbase") några tidigare transaktioners utgångar. Ostrukna utgångar (i bitcoin-språk UTXO = unspent transaction output) är pengar som kan spenderas, men utöver beloppet på en utgång så finns också ett litet dataprogram kopplat till utgången.

Hur otroligt det än låter så är det bokstavligen ett halvt dataprogram som finns där. För att "köra" programmet så behövs den andra halvan. Den andra halvan ges bara då man vill "spendera" beloppet vilket är associerad med den utgången. Den halvan kan endast skapas av den som har den rätta nyckeln.

När båda programhalvorna sätts ihop så körs programmet för att se om det svarar OK. Om programmet svarar OK så anses det vara en giltig spendering. Summan av samtliga utgångar blir totalsumman du kan spendera. Spendera på vad? Jo, här skapar man nya programhalvor med nya belopp. Dessa programhalvor kan i sin tur endast göras om till "hela program" av de som har de rätta nycklarna, och så fortsätter det.

Det absolut enklaste dataprogrammet är att postlådans ägare ska identifiera sig med sin nyckel, men det är också möjligt att göra konstruera postlådor där 2-av-3 nycklar kan öppna den. Endast fantasin sätter gränserna på vad som låter sig göras.

Sammanfattning

Bitcoin är ett nätverk, pengar, ett programmeringsspråk, och mycket mer. När Internet var nytt var det många som hade problem att placera det i ett fack: Var det en telefon? En mediaspelare? En digital tidning? Digital post? En avancerad faxmaskin? Internet visade sig vara allt eller inget. Jag tror att bitcoin är precis likadant. Det är så nytt, så innovativt, och kan användas till så många olika saker. För att nämna några tillämpningar:

  • Spamskydd för epost: Tänk "digitala frimärken".
  • Mikrobetalningar för tidningsartiklar: Tänk "vi slipper prenumerera på samtliga tidningar, och tidningarna kan finansiera sig på andra sätt än reklam."
  • Mikrobetalning för strömmande media per tidsenhet.
  • Internationella överföringar. Exempelvis tar Western Union ca 10%.
  • Inflationsskydd: Centralbanker världen över befinner sig i ett globalt valutakrig som resulterar i olika former av devalveringar (t ex genom att öka penningmängden, s.k. kvantitativa lättnader) vilket skadar människors besparingar i form av kontanter.
  • Minska avgifter för transaktioner rent allmänt.

Fundamentet för pengar har genom tiderna representerats med förtroende. Detta förtroende har sedan förvaltats av institutioner (banker, centralbanker, regeringar, ...). Bitcoin vänder upp och ned på dessa begrepp.

Bitcoin bygger sitt förtroende på ett dataprogram med fasta regler. Dessa regler är konstruerade så att dataprogrammet övervakar sig självt. Bitcoin får sedan värde då människor väljer att anförtro sig detta självövervakande datorprogram. Därefter byggs företag ovanpå detta.

Bitcoin är en rörelse som växer allt eftersom människor känner sig bekväma med ett självövervakande datorprogram som inte "fuskar", dvs. ingen enskild människa kan automatiskt berika sig, eller konfiskera andras pengar. Bitcoin är sin egen centralbank. Dess penningpolitik är ristad i sten. Vi behöver inte hålla andan för vad centralbanksdirektionen väntas göra: Sänka räntan? Höja räntan? Ändra penningmängden? Trycka nya pengar och ge dem till en bank? Inget av detta är något vi behöver ta hänsyn till. Skulle bitcoin bli stort så blir penningpolitiken oerhört tråkig. Däremot skulle finanspolitiken bli desto mer intressant.

Datavetaren