Om bitcoins

Hvis du er ligesom undertegnede, er du lige nu rimelig sur over, at du ikke i januar 2017 solgte pladespilleren og satte børneopsparingen i Bitcoins og så cashede ud lige før Black Friday. "Der er intet til at få sindet i kog som en god boble", har Albert Einstein vist en gang sagt. Og løsningen er naturligvis at blive klog på emnet, så man kan lyde bedrevidende og spytte lidt i whiskyen på sine DTU-venner, der har tjent kassen i mellemtiden.

Disclaimer: Måske er der fejl nedenfor. Måske er al viden forkert. Måske virker matematik slet ikke. Men det er stensikkert, at nogle detaljer ikke sidder helt i skabet. Der er budt op til dans i kommentarsporet, som så samtidig kan bidrage til bevisbyrden for/imod Goodwin’s law.

For at få en hyggelig aften godt på vej, kan du jo starte med at slå ham din nyrige og bedre-til-java-end-dig DTU-ven i hovedet med, at der på globalt plan anslås at bruge lige så meget energi årligt på at mine bitcoins, som Danmark bruger totalt. Allerede der kan man stoppe med at spise hakket plantekød og stadig være i klimaplus. https://arstechnica.com/tech-policy/2017/12/bitcoins-insane-energy-consumption-explained/

Men for rigtig at få det til at gøre ondt på en DTU’er, skal man ramme der, hvor det gør ondt. Så vi må op i andet gear.

Bitcoinsystemet består af en distribueret liste, kaldet dens “blockchain”, som indeholder en komplet log af alle transaktioner af bitcoins. Cirka hver 10. minut kommer der en ny “block” af transaktioner med i blockchainen, og alle kan “validere”, at den nye bloc er autentisk.Man kan tænke på en blok som nogle rækker i et kontoudtog. Den samlede blockchain er rygraden i designet af bitcoinsystemet. Det er en fælles, meget lang fil, som alle er enige om.

Hver block kommer også med nogle nye bitcoins. Disse tilfalder den “miner”, som ”vandt” den pågældende block. Hver gang en block bliver offentliggjort, kan minere begynde at prøve at vinde den næste block. Når man vinder en blok, får man tre ting: for det første bestemmer man, hvilke transaktioner, der skal med i blokken. En transaktion består af en overførsel af bitcoins fra en person til en anden, samt af et ”bud” i form af et gebyr, som den afsendende person vil betale til mineren for at komme med i blokken. For det andet får mineren retten til at vælge, hvem der skal med i blokken (men der må maksimalt være for 1 MB transaktioner per blok). Der er et fornuftigt incitament til at vælge de transaktioner, der betaler højest fee. For det tredje følger der nye bitcoins med hver blok, som mineren må bestemme, hvem skal have (ofte nok ham selv, men det er ikke et krav, og der var en gang en, der glemte at tage alle de coins, han kunne – bare ærgerligt). Lige nu følger der 12,5 bitcoins med en blok, men det tal kommer til at aftage. Det aftager med en sådan rate, at den samlede mængde bitcoins aldrig kommer til at overstige 21 mio. Det er et pengepolitisk commitment, der vil noget – hardcoded ind i DNAen af systemet.

Minere kan gå sammen i karteller (kaldet ”pools” - det er vel computernørder, der har designet systemet), hvor de samarbejder om at vinde blokken. Så deles fortjenesten proportionelt med indsatsen i kartellet. Der kan dog også være andre gevinster ved at opnå markedsmagt på denne måde. Eksempelvis kan man vælge at lade en tom blok gå gennem (faktisk var 23,7% af blokkene mellem 2009 og 2015 tomme, https://news.bitcoin.com/reason-bitcoin-miners-empty-blocks/)... formentlig med undtagelsen af de første 12,5 bitcoins, men jeg er måske også bare neoklassisk.

Hvis ingen transaktioner inkluderer et gebyr, er mineren indifferent mellem at tage dem med eller ej og kan lave en tom blok for at ”straffe” forbrugerne gratis. Dvs. alle bør sætte et gebyr på epsilon > 0 (mmhhh, spilteori). Hvis der er meget høj aktivitet, kan der være så mange ønskede transaktioner, at man rammer kapacitetsbegrænsningen, som er på 1 MB for en blok (hvorfor der er en kapacitetsgrænse kan man så spekulere lidt over). I så fald opstår der en ligevægt, hvor man må byde efter sit behov for at få fortjenesten med i næste blok.Allerede nu har vi fået sagt ligevægt og epsilon, så whiskyen skulle gerne smage lidt surt i DTU’erens beskidte mund.

Et fundamentalt problem i Bitcoin-designet er, at der er “wasteful competition”. Ligevægtsniveauet af aktive minere bestemmes af prisen på hardware og elektricitet (og lige nu er der vist leveringsrestancer på hardware). Men outcomet bliver hverken bedre eller hurtigere af, at der kommer flere aktører. Når der kommer flere aktører, sættes sværhedsgraden for at vinde en blok bare op tilsvarende, så det i forventning kommer til at tage 10min cirka per blok. En graf af tiden per blok til at smøre salt i såret: https://data.bitcoinity.org/bitcoin/block_time/5y?f=m10&t=l

Givet den astronomiske mængde strøm brugt på mining globalt (på niveau med Danmark, det har jeg allerede nævnt højere oppe, følg med!), er det ret trist. Det er ikke helt klart, hvordan man kan løse dette problem. Man kan ikke rigtig lade det være helt demokratisk efter headcount, så laver folk bare falske accounts, eller Kina får alle sine borgere til at registrere sig som minere. Men lidt trist for polarbjørnene er udgangspunktet da.

Når der nogle år ude i fremtiden ikke følger (nok) nye bitcoins med en blok når man vinder en blok (i 2140 er der slet ingen), men kun transaktionsgebyrerne, så bliver det interessant at se, hvad der kommer til at ske med markedet for minere. Vil almindelige agenter, der ønsker at overføre bitcoins til hinanden være interesserede i at byde et højt nok gebyr sammen med sin overførsel til, at det bliver rentabelt? Heldigvis er markedet jo udstyret med den automatiske dæmpning af sværhedsgraden ved at “vinde” en blok. Så hvis nok minere forlader markedet, vil det blive nemmere og dermed potentielt stadig rentabelt.Men så kan man være lidt bekymret for, at de tilbageværende minere vil opnå markedsmagt og vil kunne lave ubehageligheder såsom *suspense * et 51% attack (se neden for).

I et alternativt design, kunne man have lavet en “double auction”, hvor man som miner kunne lægge et bud på at få blokkens tilhørende bud - agenterne ville stadig på den anden side også lægge bud ind i form af gebyrer for deres transaktion. Så kunne man som miner konkurrere i bud på at få blokken.Det ville givetvis reducere antallet af minere og give mindre sved på panden af polarbjørnene.

Det lidt deprimerende ved det nuværende markedsdesign er nemlig, at der ikke “vindes” noget for samfundet ved at mine en blok. Det er spildt aktivitet, som der ikke kommer noget godt ud af. Man løser ikke et kompliceret videnskabeligt problem, som så bagefter er anvendeligt for videnskaben, fx (selvom der er en alternativ blockchain, hvor det er et element i designet, nemlig primtalsfaktorisering). Så snart en block er “fundet”, er arbejdet spildt. Se flere detaljer i bunden af denne endeløse blogpost.

Nå, nu har du læst så langt. Nu kommer belønningen. Nu skal vi snakke om det, der kan få alle kræmmerne op på mærkerne: hvordan får vi den nuværende boble til at briste?

Måske med et såkaldt “51% attacks”.

Basalt set kan man, hvis man som miner opnår dominans i regnekraft lave ”double spending”, hvor man bruger sine penge to gange. Først laver man en masse transaktioner, hvor man køber andre varer eller valutaer for sine bitcoins. Modparten venter på verifikation af transaktionerne (inklusion i blockchainen), før de sender én valuta eller varer, og det er så fint nok.

Men i hemmelighed (og formentlig i en mørk kælder) går man i gang med at arbejde på en alternativ blockchain, som man ikke submitter til communitiet. Fordi man har overlegen regnekraft, kan man nå at “finde” blokke hurtigere end resten af markedet. Man kan så dukke op nogle perioder senere og sige “bøh! her er en ny blockchain, som er længere og løst korrekt”. De andre i markedet vil så sige “what? Hvorfor submittede du den ikke noget før? Oh well, det ser ud til, at det hele stemmer og at du har løst det matematiske problem for hver blok i din gren af blockchainen, så din kæde er korrekt og længere.” Den vil så overskrive den eksisterende blockchain (længere kæder vinder), og i den gamle blockchain vil alle transaktioner så blive ugyldige (gisp) - inklusive de bitcoins man sendte afsted i starten (gisp gisp). Det betyder så, at man nu åbenbart stadig har de bitcoins, man startede med, men man har også modtaget de andre varer eller valuta for den, som man nåede at få. Det kaldes “double spending”. Et sådant angreb ville utvivlsomt ryste tilliden til Bitcoins, hvilket er det eneste, dens værdi beror på.Og være rimeligt nedern for den person, man handlede med. Men der er lissom ikke rigtig nogen at klage til. Det er et kollektiv, ikke en virksomhed eller regering.

Et 51% attack har været succesfuldt mod andre etherium-baserede cryptovalutaer, men aldrig mod bitcoins. Der har dog været nær-dominans (over 40%) for bitcoin minere af en gruppe af minere kaldet “Ghash.io” i 2014, hvilket skabte en hel del bekymring.

Givet at langt de fleste pools af minere er placerede i Kina, kunne man godt være bekymret for something something Chinese government something something financial crisis.

For at forstå et 51% attack helt, og for at være rigtig sej for alvor, må man forstå mekanismen bag at ”vinde” en blok en smule bedre. Så nu kommer der lige lidt detaljer om, hvordan man som miner egentlig vinder en blok. Spænd hjelmen lille Timmy, nu skifter vi lige til tredje gear.

Måden man “vinder” en blok på er ved, at man bruger forrige blok som input til en matematisk funktion, kaldet en “hash funktion” (SHA256d for at være præcis), og så prøver at få outputtet til at opnå et tilfredsstillende niveau.

En hash funktion er lige som en random number generator med et seed: man får det samme output ud, hver gangman bruger det samme input, men man har ingen mulighed for at forudsige f(x+1) ud fra f(x). Så selvom x giver et output, der er næsten nok til at vinde, så er der ingen information om, at x+1 eller x-1 vil være gode kandidater.

Det er ligesom en random number generator med et seed, med den forskel at både input og output af en hash funktion er tekst: input kan have en vilkårlig længde, men output har altid den samme længde (256 bytes for SHA256d). Inputtet til hash-funktionen er så bare kontoudskriften fra sidste blok: så gælder det bare om at sætte nogle efterstillede tal på den (kaldet “nonce”’en), og så få det bedst mulige output af hash-funktionen. Konkret skal man finde et output, der mindst har X foranstillede nuller (hvor X er sværhedsgraden på problemet, som justeres løbende).

Dermed svarer problemet til det følgende, alternative problem: at der hver periode offentliggøres et tal Y mellem 0 og 1, og man skal så finde det seed til en random number generator, som giver et outcome, der kommer inden for en tolerance på fx 0,0001 af Y. For eksempel kunne målet være Y = 0,67. Jeg prøver i Matlab med et seed på 1337 (“rng(1337)”) og får tallet 0,26 (ved at skrive “rand”). Ikke så tæt på. Så prøver jeg 1338 og får 0,61. Bedre, men stadig ikke tæt nok på (den er 0,06 fra, som ikke er under 0,0001). Jeg bliver ved med at prøve forskellige seeds, indtil jeg kommer inden for 0,0001 af Y. På den måde er der givetvis uendeligt mange seeds, der løser problemet (der findes uendeligt mange tal i intervallet [Y-0,0001; Y+0,0001](. Det gælder bare om at komme først og så få lagt sin block ud, så andre kommer til at følge den. Og jeg kan ikke forudsige, hvad næste periodes “mål” kommer til at blive (så jeg kan ikke starte før tid).Til gengæld er det nemt at udregne sandsynligheden for at jeg vinder: den afhænger bare af antallet af gange, jeg kan nå at trække et tilfældigt tal ud fra et seed. Der er 0,02% sandsynlighed hver gang. Det er det samme for bitcoins: her er det bare hashfunktioner (og man bruger specialdesignet hardware, som kun kan evaluere hashfunktioner, men gør det over 5000 gange hurtigere end en almindelig computer) og ikke random number generators.

Udfordringen, som ligger til grund for 51% attack’et, er at to personer kan “løse problemet” samtidig (fordi man bare skal have *mindst* X foranstillede nuller - det er så ikke bedre at have flere eller færre, begge har “løst” problemet). Hvordan afgør man så, hvem der skal have blokken? Begge minere vil forsøge at få deres blok spredt gennem netværket og få netværket til at acceptere deres blok. Ret hurtigt vil der blive fortsat på én af kæderne, og den længste vil så blive accepteret, når andre minere bliver konfronterede med to konkurrerende blockchains. Derfor vil den ene ret hurtigt blive længere end den anden. Men dette skaber naturligvis en lidt akavet situation, hvor der kunne være en fordel i at have mange venner i netværket, som ville acceptere éns blockchain og arbejde videre på den. Man kunne forestille sig, at man kunne skubbe små spillere helt ud af markedet på denne måde.

På denne måde er der noget demokratisk i blockchain, i og med at de andre markedsdeltagere skal “acceptere” at “bruge” en blockchain, før den fortsætter. Men der er ikke noget til hinder for, at en gruppe pludselig begynder at blive enige om en alternativ kæde. Der er i sagens natur ikke nogen dommer, som i sidste instans kan gå ind og have sidste ord i sagen, hvis der opstår for meget splid mellem markedsdeltagere.

Denne form for demokratisk opbygning kan være lidt bekymrende, hvis der kan være tendens til, at nogen rotter sig sammen. Og det gør minerne. Karteller af minere (kaldet pools) bliver ret store. Og fordi sandsynligheden for at vinde bare er proportional med mængden af computer kraft (antallet af gange, man kan evaluere SHA256d hashfunktionen i sekundet, målt i tusinder), så kan man sikre en meget mere glat indkomststrøm ved at være med i en pool, hvilket er grunden til (angiveligt) at folk gør det. Men poolen kan så potentielt bruge sin markedsmagt…

For eksempel er der en hel del “tomme blokke”, der bliver minet (godt en fjerdedel… det har jeg altså sagt før). En enkelt agent ville aldrig være interesseret i at mine en tom blok. Han vil altid prøve at få de transaktionsgebyrer, han kan. Men en pool kan have andre bekymringer. Den kan være interesseret i at sende et signal til investorer om, at man bliver nødt til at give et ordentligt gebyr, hvis man vil igennem.

Derudover kan man blive bekymret for, at en pool med markedsmagt kan blive bestukket til at ignorere bestemte transaktioner. På den måde kan man fastfryse en enkelt agents aktiver.

Her er nogle flere links til at mætte interessen og lysten til at føle sig uforstående for datalogi:

Partnervirksomheder

Stort tak til alle virksomheder i ALT ANDET LIGEs partnerprogram. Hør mere om programmet, skriv til partner@altandetlige.dk