”Bevis för arbete” (Proof of Work – PoW) är en mekanism som syftar till att förhindra så kallad ”double-spending” (dubbelutgift) inom kryptovalutor. För de flesta moderna kryptovalutor används denna mekanism som en konsensusmetod för att säkra den offentligt distribuerade blockchain-ledgern. PoW introducerades först av Satoshi Nakamoto i sin whitepaper för Bitcoin 2008, men själva tekniken hade utvecklats långt innan dess. Ett tidigt exempel på användningen av PoW är HashCash, skapat av Adam Back, vilket krävde att e-postförfattare genomförde en viss mängd beräkningar innan de skickade sina meddelanden. Detta skulle potentiellt minska problemet med spam, eftersom det inte skulle kosta mycket för en legitim användare att skicka ett meddelande, medan någon som skickar massiva mängder e-post skulle snabbt få en betydande kostnad.

Vad är double-spending (dubbelutgift)?

Double-spending inträffar när samma pengar spenderas mer än en gång. Detta begrepp används uteslutande inom digitala pengar – det skulle vara svårt att spendera samma fysiska kontanter två gånger. När du till exempel betalar kontant i en butik överlämnar du mynt och sedlar av motsvarande värde till försäljaren, som låser in dem i kassan. Du kan inte genast gå till en annan butik och betala med samma specifika mynt och sedlar eftersom de logiskt sett fortfarande är låsta i den tidigare butikens kassa. I ett digitalt kontantsystem är dock denna möjlighet tillgänglig. Eftersom digitala pengar i grunden bara är data måste det förhindras att oärliga personer kopierar och spenderar samma enheter av kryptovaluta på olika platser. Om detta inte hindras skulle hela systemet för kryptovalutan snabbt kollapsa.

 

information om Proof of Work för bitcoin

 

Varför är Proof of Work nödvändigt?

Om du förstår blockchain vet du att användarna skickar sina transaktioner till nätverket. Dessa transaktioner betraktas emellertid inte omedelbart som giltiga. De anses vara giltiga först efter att de har verifierats och lagts till i blockchainen. Blockchain är i grunden en enorm databas som varje nätverksanvändare kan se. Tänk dig att du och tre av dina vänner har anteckningsblock. Varje gång någon av er vill överföra en viss mängd av de enheter ni använder skriver ni helt enkelt upp det – till exempel Anna ger två enheter till Fillip, och Fillip använder dem för att betala Monica. Varje gång du genomför en transaktion hänvisar du till källan där pengarna kommer ifrån. Så om Fillip betalar Monica med två enheter skulle posten se ut ungefär så här: Fillip betalar Monica med två enheter som han fick från en tidigare transaktion med Anna. Det ger oss i grund och botten ett sätt att följa dessa enheter och deras historia. Om Fillip försökte genomföra en transaktion med de två enheterna han just skickade till Monica skulle vi alla omedelbart upptäcka det, anklaga Fillip för bedrägeri och vägra att godkänna transaktionen som giltig. I en sådan liten grupp där alla känner varandra skulle det förmodligen vara relativt enkelt att komma överens, men vad händer om gruppen har till exempel 1 000 000 deltagare? Idén med anteckningsblocket är inte en bra lösning eftersom den inte är centraliserad (en person skulle alltid ha blocket hos sig och kunna göra vad de vill med det). Här kommer PoW in i bilden, vilket förhindrar användare från att spendera pengar som de inte äger. Genom att kombinera ”spelteknik” och kryptografi möjliggör PoW-algoritmen att blockchainen uppdateras när som helst, förutsatt att det är enligt reglerna.

Hur fungerar det exakt?

I den tidigare delen av artikeln pratade vi om en slags anteckningsblock där transaktionerna registreras. Som du förmodligen redan förstår representerar detta anteckningsblock i själva verket blockchainen. Till skillnad från en vanlig anteckningsbok skriver vi dock inte in transaktioner i den i ordning, utan samlar dem i vad vi kallar ”block” (vanliga, inte anteckningsblock). Användaren som skapar blocket lägger sedan till det i ”tävlingsblocket”. Transaktionerna inuti tävlingsblocket betraktas som giltiga först när blocket har framgångsrikt verifierats. Därefter läggs det till i blockchainen. PoW kräver att gruvarbetaren använder sina egna resurser för att skapa ett block. Med resurser menar vi beräkningskraften som krävs för att hasha data till blocket tills en lösning på den kryptografiska pusselhämtningen hittas. Blockets hash kan tänkas som ett digitalt ”fingeravtryck”. Genom hashen kan ett block identifieras entydigt och pålitligt. På samma sätt som med fingeravtryck kan aldrig två block ha exakt samma hash.

I PoW måste vi ange data vars hash matchar vissa villkor. Vi vet dock inte hur vi kan åstadkomma det. Det enda sättet är att låta data passera genom en hashfunktion och sedan kontrollera om den matchar villkoren. Om så inte är fallet måste vi ändra datan något för att få en annorlunda hash med förhoppningen att den matchar. Genom att ändra bara en tecken inom datan får vi ett helt slumpmässigt resultat, och därför finns det ingen möjlighet att förutsäga vilken hash det kan bli.

I PoW måste vi utföra en ”gissningslek”. Vanligtvis tar vi information om alla transaktioner som vi vill lägga till, tillsammans med några andra viktiga uppgifter, och sedan kombinerar vi dem med hjälp av hashfunktionen. Eftersom data fortfarande är densamma och inte förändras måste vi lägga till någon variabel information för att undvika att få samma hash varje gång. Denna variabla information kallas ”nonce”. Det är i grunden ett nummer som vi ändrar vid varje försök för att få en helt annorlunda hash varje gång. Hela denna komplicerade process kallas gruvdrift. Gruvdrift är egentligen processen att samla blockchain-data och sedan hasha dem tillsammans med noncen tills vi hittar en specifik hash som vi letar efter och som är giltig. Om vi hittar den blir blocket verifierat och klart att bli en del av blockchainen. När blocket kommer ut i nätverket uppdaterar andra användare sina versioner av blockchainen för att inkludera det nya blocket.

För dagens stora kryptovalutor som Bitcoin och Ethereum är det extremt svårt att hitta rätt hash eftersom ju högre hashhastigheten i nätverket är, desto svårare blir vår gissningslek och därmed dyrare. Anledningen till att hashhastigheterna i dessa nätverk är så höga är för att förhindra att block hittas för snabbt. Som jag nämnde tidigare är det mycket kostsamt att försöka hitta rätt hash i dessa nätverk. Med varje försök slösar du cykler och framför allt elektricitet. Men om du ändå hittar en giltig hash belönar PoW-protokollet dig med nätverkets inbyggda kryptovaluta som du bryter.

Vad händer om du försöker lura systemet?

Här kommer asymmetrisk kryptografi in i bilden. Förenklat kan man säga att denna kryptografi används för att varje användare ska kunna verifiera om en användare som försöker spendera valutan för en transaktion faktiskt har rätt att göra det. När en transaktion skapas signerar dess ”skapare” den digitalt. Alla andra användare i nätverket kan jämföra denna digitala signatur med transaktionsskaparens publika nyckel och kontrollera om de matchar. De kontrollerar också om den mängd tokens du försöker spendera verkligen tillhör dig och om summan av dina insatser är större än summan av dina utgångar (det vill säga att du inte spenderar mer än du äger). Varje block som innehåller en ogiltig transaktion kommer automatiskt att avvisas av nätverket. Försöka lura systemet skulle faktiskt vara dyrare än vanlig gruvdrift, och du skulle vara nästan 100% misslyckad.
Det är precis här skönheten med PoW ligger. Bedrägeri är mycket dyrt, medan gruvdrift är lönsamt. En kunnig gruvarbetare kommer att söka efter avkastning på investeringen, så förvänta dig att de kommer att bete sig på ett sätt som är fördelaktigt för dem.

Av Karl