Vad är bevis på arbete (PoW)?
Hem
Artiklar
Vad är bevis på arbete (PoW)?

Vad är bevis på arbete (PoW)?

Avancerad
Publicerad Dec 6, 2018Uppdaterad Dec 12, 2022
8m

Introduktion

Bevis på arbete (vanligtvis förkortat till PoW) är en mekanism för att förhindra dubbla utgifter. De flesta större kryptovalutorna använder detta som sin konsensusalgoritm. Det är helt enkelt vad vi kallar en metod för att säkra kryptovalutans orderbok.

Bevis på arbete var den första konsensusalgoritmen som togs fram och hittills är det den som fortfarande dominerar. Den introducerades av Satoshi Nakamoto i Bitcoin White Paper 2008, men själva tekniken var uttänkt långt innan dess. 

Adam Backs HashCash är ett tidigt exempel på en bevis på arbete-algoritm under dagarna före kryptovaluta. Genom att kräva att avsändaren utför en liten mängd beräkningar innan hen skickar ett e-postmeddelande kan mottagaren få mindre spam. Den här beräkningen skulle praktiskt taget inte kosta något för en legitim avsändare, men det skulle snabbt bli stora summor för någon som skickar massor av e-post.


Vad är en dubbelutgift?

En dubbelutgift uppstår när samma tillgångar spenderas mer än en gång. Termen används nästan uteslutande i samband med digitala pengar – trots allt skulle det vara svårt att spendera samma fysiska pengar två gånger. När du betalar för en kaffe idag lämnar du över kontanter till en kassörska som förmodligen låser in dem i kassan. Du kan inte gå till kaféet tvärs över gatan och betala för en till kaffe med samma räkning.

I digitala kontantsystem finns möjligheten att du kan göra detta. Du har säkert kopierat en datorfil förut – du bara kopierar och klistrar in den. Du kan e-posta samma fil till tio, tjugo eller femtio personer. 

Eftersom digitala pengar bara är data, måste du förhindra att människor kopierar och spenderar samma enheter på olika platser. Annars kommer din valuta att kollapsa på nolltid. 

För en mer djupgående inblick i dubbla utgifter kan du kolla in Vi förklarar dubbla uppgifter.


Varför krävs bevis på arbete?

Om du har läst vår guide till blockkedjeteknologi vet du att användare sänder transaktioner till nätverket. Dessa transaktioner anses dock inte vara giltiga direkt. Det sker bara när de läggs till blockkedjan. 
Blockkedjan är en stor databas som alla användare kan se, så att de kan kontrollera om tillgångarna har spenderats tidigare. Föreställ dig att du och tre vänner har ett anteckningsblock. Varje gång någon av er vill göra en överföring av de enheter ni använder skriver ni ned detta – Alice betalar Bob fem enheter, Bob betalar Carol två enheter osv.
Det finns ett annat krångel här – varje gång du gör en transaktion hänvisar du till transaktionen där pengarna kom ifrån. Så om Bob betalade Carol med två enheter, skulle posten faktiskt se ut så här: Bob betalar Carol två enheter från denna tidigare transaktion med Alice.

Nu har vi ett sätt att spåra enheterna. Om Bob försöker göra en annan transaktion med samma enheter som han just skickade till Carol, kommer alla att veta om det direkt. Gruppen tillåter inte att denna transaktion läggs till i anteckningsblocket.

Det här fungerar bra i en liten grupp. Alla känner varandra, så de kommer förmodligen överens om vem av vännerna som ska lägga till transaktionerna i anteckningsblocket. Vad händer om vi vill ha en grupp på 10 000 personer? Anteckningsblocksidén kan inte skalas så bra, eftersom ingen vill lita på att en främling hanterar den.

Det är här bevis på arbete kommer in i bilden. Det säkerställer att användarna inte spenderar pengar som de inte har rätt att spendera. Genom att använda en kombination av spelteori och kryptografi gör PoW-algoritmen det möjligt för vem som helst att uppdatera blockkedjan enligt systemets regler.


Hur fungerar PoW?

Vårt anteckningsblock ovan är blockkedja. Men vi lägger inte till transaktioner en efter en – istället klumpar vi ihop dem i block. Vi tillkännager transaktionerna till nätverket, sedan kommer användaren som skapar ett block att inkludera det i ett kandidatblock. Transaktionerna kommer bara att anses giltiga när dess kandidatblock blir ett bekräftat block, vilket betyder att det har lagts till i blockkedjan.

Att lägga till ett block är dock inte billigt. Bevis på arbete kräver att en miner (användaren som skapar blocket) använder några av sina egna resurser för privilegiet. Den resursen är datorkraft, som används för att hasha blockets data tills lösningen på ett pussel hittas.
Hashing av blockets data innebär att du skickar den genom en hashfunktion för att generera en blockhash. Blockhashen fungerar som ett "fingeravtryck" – det är en identitet för din indata och är unik för varje block.

Det är praktiskt taget omöjligt att vända en blockhash för att få indata. När du känner till indata är det dock enkelt för dig att bekräfta att hashen är korrekt. Du behöver bara skicka in indata via funktionen och kontrollera om utgången är densamma.

I bevis på arbete måste du tillhandahålla data vars hash matchar vissa villkor. Men du vet inte hur du ska ta dig dit. Ditt enda alternativ är att skicka dina data genom en hashfunktion och kontrollera om de matchar villkoren. Om de inte gör detta måste du ändra dina data något för att få en annan hash. Att ändra bara ett tecken i dina data kommer att resultera i ett helt annat resultat, så det finns inget sätt att förutsäga vad utdata kan vara.

Om du vill skapa ett block spelar du därför ett gissningsspel. Du tar vanligtvis information om alla transaktioner som du vill lägga till och en del annan viktiga data och hashar sedan ihop allt. Men eftersom din datauppsättning inte ändras, måste du lägga till en information som är variabel. Annars skulle du alltid få samma hash som utdata. Denna variabla data är vad vi kallar en nonce. Det är ett nummer som du ändrar för varje försök, så du får en annan hash varje gång. Och det här är vad vi kallar utvinning.

Sammanfattningsvis är utvinningsprocessen att samla blockkedjedata och hasha dessa tillsammans med en nonce tills du hittar en viss hash. Om du hittar en hash som uppfyller villkoren i protokollet får du rätt att sända det nya blocket till nätverket. Vid denna tidpunkt uppdaterar de andra deltagarna i nätverket sina blockkedjor för att inkludera det nya blocket.

För stora kryptovalutor idag är villkoren otroligt utmanande att uppfylla. Ju högre hashfrekvens på nätverket desto svårare är det att hitta en giltig hash. Detta görs för att säkerställa att block inte hittas för snabbt.

Som du kanske kan tänka dig kan det bli dyrt att försöka gissa enorma mängder hash på din dator. Du slösar bort beräkningscykler och elektricitet. Protokollet kommer dock att belöna dig med kryptovaluta om du hittar en giltig hash.

Låt oss sammanfatta vad vi lärt oss hittills:

  • Det är dyrt för dig att utvinna.
  • Du belönas om du skapar ett giltigt block.
  • Genom att känna till indata kan en användare enkelt kontrollera dess hash – användare som inte arbetar med utvinning kan verifiera att ett block är giltigt utan att förbruka mycket beräkningskraft.

Än så länge låter allt bra. Men vad händer om du försöker fuska? Vad hindrar dig från att lägga till ett gäng falska transaktioner i blocket och producera en giltig hash?

Det är där kryptografi med en offentlig nyckel kommer in. Vi går inte in på djupet om detta i den här artikeln, men kolla in Vad är kryptografi med offentlig nyckel? för en komplett titt på detta. Kort sagt använder vi några snygga kryptografiska knep som gör att alla användare kan verifiera om någon har rätt att flytta tillgångarna de försöker spendera.
När du skapar en transaktion signerar du den. Vem som helst i nätverket kan jämföra din signatur med din offentliga nyckel och kontrollera om de matchar. De kommer också att kontrollera om du faktiskt kan spendera dina tillgångar och att summan av dina insatser är högre än summan av dina utgångar (det vill säga att du inte spenderar mer än du har).

Varje block som inkluderar en ogiltig transaktion avvisas automatiskt av nätverket. Det blir dyrt för dig att ens försöka fuska. Du kommer att slösa bort dina egna resurser utan någon belöning.

Däri ligger styrkan med bevis på arbete: det gör det dyrt att fuska, men lönsamt att agera ärligt. Alla rationella miners kommer att söka avkastning på investeringen, så de kan förväntas bete sig på ett sätt som garanterar intäkter.



Vill du komma igång med kryptovaluta? Köp bitcoin på Binance!



Bevis på arbete kontra bevis på insats

Det finns många konsensusalgoritmer, men en av de mest efterlängtade är bevis på insats (PoS). Konceptet går tillbaka till 2011 och har implementerats i flera mindre protokoll. Men det har ännu inte introducerats i någon av de stora blockkedjorna.
I bevis på arbete-system ersätts miners med validerare. Det finns ingen utvinning inblandad och ingen kapplöpning för att gissa en hash. Istället väljs användare slumpmässigt – om de väljs ut måste de föreslå (eller "smida") ett block. Om blocket är giltigt får de en belöning som består av avgifterna från blockets transaktioner.
Men inte vilken användare som helst kan väljas – protokollet väljer dem baserat på ett antal faktorer. För att vara berättigade måste deltagarna låsa en insats, vilket är ett förutbestämt belopp av blockkedjans egen valuta. Insatsen fungerar som borgen: precis som att åtalade lägger upp en stor summa pengar för att hindra dem från att hoppa över rättegången, låser validerare en insats för att motverka fusk. Om de agerar oärligt kommer deras insats (eller en del av den) att tas ifrån dem.
Bevis på insats har vissa fördelar jämfört med bevis på arbete. Det mest anmärkningsvärda är det mindre koldioxidavtrycket – eftersom det inte finns något behov av kraftfulla utvinningsfarmar i PoS är den el som förbrukas bara en bråkdel av den som förbrukas i PoW. 

Med detta sagt har det inte alls samma meritlista som PoW. Även om det kan uppfattas som slösaktigt, är utvinningen den enda konsensusalgoritmen som har visat sig fungera i stor skala. På drygt ett decennium har det säkrat transaktioner till ett värde av biljontals dollar. För att med säkerhet säga om PoS kan konkurrera med dess säkerhet måste insatsen testas ordentligt i praktiken. 


Sammanfattningsvis

Bevis på arbete var den ursprungliga lösningen på problemet med dubbla utgifter och har visat sig vara pålitligt och säkert. Bitcoin visade att vi inte behöver centraliserade enheter för att förhindra att samma tillgångar spenderas två gånger. Med smart användning av kryptografi, hashfunktioner och spelteori kan deltagarna i en decentraliserad miljö komma överens om tillståndet för en finansiell databas.