Introduktion
Proof of Work (almindeligvis forkortet til PoW) er en mekanisme til forebyggelse af dobbeltforbrug. De fleste større kryptovalutaer bruger den som deres konsensusalgoritme. Det er netop det, vi kalder en metode til at sikre kryptovalutaens hovedbog.
Proof of Work var den første konsensusalgoritme, der dukkede op, og er til dato stadig den dominerende. Den blev introduceret af Satoshi Nakamoto i Bitcoin-hvidbogen fra 2008, men selve teknologien blev udtænkt længe før det.
Adam Backs HashCash er et tidligt eksempel på en Proof of Work-algoritme i tiden før kryptovaluta. Ved at kræve, at afsendere udfører en lille mængde databehandling, før de sender en e-mail, kan modtagere afbøde spam. Denne beregning ville næsten ikke koste noget for en legitim afsender, men hurtigt løbe op i et større beløb for nogen, der sender e-mails i massevis.
Hvad er et dobbeltforbrug?
Et dobbeltforbrug opstår, når de samme midler bruges mere end én gang. Udtrykket bruges næsten udelukkende i forbindelse med digitale penge – når alt kommer til alt, ville du have svært ved at bruge de samme fysiske kontanter to gange. Når du betaler for en kop kaffe i dag, afleverer du kontanter til en medarbejder ved kassen, der sandsynligvis låser dem i et kasseapparat. Du kan ikke gå til kaffebaren på tværs af vejen og betale for en anden kaffe med den samme regning.
I digitale kontantordninger er der mulighed for, at du kan. Du har helt sikkert duplikeret en computerfil før – du kopierer og indsætter den bare. Du kan e-maile den samme fil til ti, tyve eller halvtreds personer.
Eftersom digitale penge kun er data, skal du forhindre folk i at kopiere og bruge de samme enheder forskellige steder. I modsat fald vil din valuta kollapse på ingen tid.
For et mere dybtgående kig på dobbeltudgifter kan du læse Forklaring af dobbeltudgifter.
Hvorfor er Proof of Work nødvendigt?
Hvis du har læst vores vejledning til blockchain-teknologi, ved du, at brugerne sender transaktioner til netværket. Disse transaktioner betragtes dog ikke umiddelbart som gyldige. Det sker kun, når de bliver føjet til blockchainen.
Blockchainen er en stor database, som enhver bruger kan se, så de kan kontrollere, om midlerne er brugt før. Forestil dig det sådan: du og tre venner har en notesblok. Hver gang én af jer ønsker at foretage en overførsel af de enheder, du bruger, skriver du det ned – Alice betaler Bob fem enheder, Bob betaler Carol to enheder osv.
Der er en anden kompleksitet her – hver gang du foretager en transaktion, henviser du til den transaktion, hvor midlerne kom fra. Så hvis Bob betalte Carol med to enheder, ville posten faktisk se ud som følgende: Bob betaler Carol to enheder fra denne tidligere transaktion med Alice.
Nu har vi en måde at spore enhederne på. Hvis Bob forsøger at foretage en anden transaktion ved hjælp af de samme enheder, som han lige har sendt til Carol, vil alle vide det med det samme. Gruppen tillader ikke, at transaktionen føjes til notesblokken.
Nu fungerer dette måske godt i en lille gruppe. Alle kender hinanden, så de vil sandsynligvis blive enige om, hvilken af vennerne der skal føje transaktioner til notesblokken. Hvad nu, hvis vi ønsker en gruppe på 10.000 deltagere? Notesblokideen skalerer ikke godt, fordi ingen ønsker at stole på en fremmed til at styre den.
Det er her, Proof of Work kommer ind i billedet. Den sikrer, at brugerne ikke bruger penge, som de ikke har ret til at bruge. Ved at bruge en kombination af spilteori og kryptografi gør en PoW-algoritme det muligt for enhver at opdatere blockchainen i henhold til systemets regler.
Hvordan fungerer PoW?
Vores notesblok ovenfor er blockchainen. Men vi tilføjer ikke transaktioner én efter én – i stedet klumper vi dem i blokke. Vi annoncerer transaktionerne til netværket, så brugere, der opretter en blok, inkluderer dem i en kandidatblok. Transaktionerne betragtes kun som gyldige, når deres kandidatblok bliver en bekræftet blok, hvilket betyder, at den er blevet føjet til blockchainen.
Det er dog ikke billigt at tilføje en blok. Proof of Work kræver, at en miner (den bruger, der opretter blokken) bruger nogle af sine egne ressourcer til privilegiet. Denne ressource er computerkraft, som bruges til at hashe blokkens data, indtil der findes en løsning på et puslespil.
Hashing af blokkens data betyder, at du sender dem gennem en hashing-funktion for at generere en blok-hash. Blok-hashen fungerer som et "fingeraftryk" – det er en identitet for dine inputdata og er unik for hver blok.
Det er næsten umuligt at vende en blok-hash for at få inputdataene. Når du kender et input, er det dog trivielt for dig at bekræfte, at hashen er korrekt. Du skal bare indsende inputtet gennem funktionen og kontrollere, om outputtet er det samme.
I Proof of Work skal du angive data, hvis hash matcher visse betingelser. Men du ved ikke, hvordan du kommer derhen. Din eneste mulighed er at videregive dine data gennem en hash-funktion og kontrollere, om de matcher betingelserne. Hvis de ikke gør det, bliver du nødt til at ændre dine data lidt for at få en anden hash. Ændring af bare et enkelt tegn i dine data vil resultere i et helt andet resultat, så der er ingen måde til at forudsige, hvad et output kan være.
Som et resultat spiller du et puslespil, hvis du vil oprette en blok. Du tager typisk oplysninger om alle de transaktioner, du vil tilføje, og nogle andre vigtige data og hasher derefter det hele sammen. Men eftersom dit datasæt ikke ændres, skal du tilføje et stykke information, der er variabelt. I modsat fald vil du altid få den samme hash som output. Disse variable data er det, vi kalder en nonce. Det er et tal, som du ændrer for hvert forsøg, så du får en anden hash hver gang. Og det er det, vi kalder mining.
For at sammenfatte er mining processen med at indsamle blockchain-data og hashe dem sammen med en nonce, indtil du finder en bestemt hash. Hvis du finder en hash, der opfylder betingelserne i protokollen, får du ret til at udsende den nye blok til netværket. På dette tidspunkt opdaterer de andre deltagere i netværket deres blockchains, så de omfatter den nye blok.
For store kryptovalutaer i dag er betingelserne utroligt udfordrende at opfylde. Jo højere hash-hastigheden på netværket er, desto vanskeligere er det at finde en gyldig hash. Dette gøres for at sikre, at blokke ikke findes for hurtigt.
Som du kan forestille dig, kan det være dyrt at prøve at gætte enorme mængder hashes på din computer. Du spilder beregningscyklusser og elektricitet. Men protokollen vil belønne dig med kryptovaluta, hvis du finder en gyldig hash.
Lad os opsummere, hvad vi ved indtil videre:
Det er dyrt for dig at mine.
Du bliver belønnet, hvis du producerer en gyldig blok.
Når man kender et input, kan en bruger nemt kontrollere sin hash – ikke-minere kan kontrollere, om en blok er gyldig uden at bruge meget beregningskraft.
Så langt så godt. Men hvad nu, hvis du prøver at snyde? Hvad skal forhindre dig i at lægge en masse falske transaktioner i blokken og producere en gyldig hash?
Det er her, offentlig nøglekryptografi kommer ind i billedet. Vi vil ikke gå i dybden i denne artikel, men du kan læse Hvad er offentlig nøgle-kryptering? for et omfattende kig på det. Kort sagt bruger vi nogle smarte kryptografiske tricks, der giver enhver bruger mulighed for at kontrollere, om nogen har ret til at flytte de midler, de forsøger at bruge.
Når du opretter en transaktion, underskriver du den. Alle på netværket kan sammenligne din signatur med din offentlige nøgle og kontrollere, om de stemmer overens. De vil også kontrollere, om du rent faktisk kan bruge dine midler, og at summen af dine input er højere end summen af dine output (dvs. at du ikke bruger mere, end du har).
Enhver blok, der indeholder en ugyldig transaktion, afvises automatisk af netværket. Det er dyrt for dig selv at forsøge at snyde. Du spilder dine egne ressourcer uden nogen belønning.
Deri ligger skønheden i Proof of Work: den gør det dyrt at snyde, men rentabelt at handle ærligt. Enhver rationel miner vil søge investeringsafkast, så man kan forvente at de vil opføre sig på en måde, der garanterer indtægter.
Proof of Work versus Proof of Stake
Der er mange konsensusalgoritmer, men én af de mest ventede er Proof of Stake (PoS). Konceptet går tilbage til 2011 og er blevet implementeret i nogle mindre protokoller. Men det har endnu ikke set anvendelse i nogen af de store blockchains.
I Proof of Stake-systemer erstattes minere med validatorer. Der er ingen mining involveret og intet kapløb om at gætte hash. I stedet vælges brugerne tilfældigt. Hvis de vælges, skal de foreslå (eller "smede") en blok. Hvis blokken er gyldig, modtager de en belønning bestående af gebyrerne fra blokens transaktioner.
Det er ikke bare en hvilken som helst bruger, der kan vælges – protokollen vælger dem ud fra en række faktorer. For at være berettiget skal deltagerne låse en stake, som er et forudbestemt beløb af blockchainens tilhørende valuta. Staken fungerer som kaution: Ligesom tiltalte skal lægge en stor sum penge for at afskrække dem fra at blive væk fra retssagen, låser validatorer en stake for at afskrække snyd. Hvis de handler uærligt, vil deres stake (eller en del af den) blive taget.
Proof of Stake har nogle fordele i forhold til Proof of Work. Den mest bemærkelsesværdige er det mindre kulstofaftryk – eftersom der ikke er behov for kraftige miningfarme i PoS, er den brugte elektricitet kun en brøkdel af den, der forbruges i PoW.
Når det er sagt, er den ikke i nærheden af PoW's resultater. Selvom det kan opfattes som spildt, er mining den eneste konsensusalgoritme, der har bevist sit værd i stor skala. På lidt over et årti har den sikret billioner af dollar i transaktioner. For at kunne fastslå om PoS kan konkurrere med sin sikkerhed, skal staking testes på behørig vis af offentligheden.
Sammenfatning
Proof of Work var den oprindelige løsning på problemet med dobbeltforbrug og har vist sig at være pålidelig og sikker. Bitcoin beviste, at vi ikke har brug for centraliserede enheder for at forhindre, at de samme midler bruges to gange. Med smart brug af kryptografi, hash-funktioner og spilteori kan deltagere i et decentraliseret miljø blive enige om tilstanden af en finansiel database.