Innledning
Proof of Work (ofte forkortet til PoW) er en mekanisme som hindrer dobbeltforbruk. De fleste store kryptovalutaer bruker denne som konsensusalgoritme. Det er hva vi kaller metoder som brukes for å sikre en kryptovalutas hovedbok.
Proof of Work var den første konsensusalgoritmen som ble tatt i bruk, og til dags dato er den fortsatt den dominerende. Den ble introdusert av Satoshi Nakamoto i Bitcoin-dokumentasjonen fra 2008, men selve teknologien ble funnet opp lenge før det.
Adam Backs HashCash er et tidlig eksempel på en Proof of Work-algoritme fra tiden før kryptovaluta. Ved å kreve at avsenderne utførte en liten mengde databehandling før de sendte en e-post, kunne det føre til mindre spam for mottakerne. Denne beregningen koster praktisk talt ingenting for en legitim avsender, men det blir fort mye for noen som sender veldig mange e-poster.
Hva er et dobbeltforbruk?
Det oppstår et dobbeltforbruk når de samme pengene brukes mer enn én gang. Begrepet brukes nesten utelukkende i sammenheng med digitale penger – det er jo tross alt ikke så lett å bruke de samme fysiske pengene to ganger. Når du betaler for en kaffe, gir du fra deg kontanter til personen i kassa som sannsynligvis låser dem inn i et kassaapparat. Du kan ikke gå til kafeen på andre siden av veien og betale for en annen kaffe med de samme fysiske pengene.
Men med digitale kontanter er dette faktisk en mulighet. Du har sikkert duplisert en datafil før – du bare kopierer den og limer den inn. Du kan sende den samme filen til ti, tjue eller femti personer.
Ettersom digitale penger bare er data, må du hindre at folk kopierer og bruker de samme enhetene på forskjellige steder. Ellers vil valutaen din kollapse innen kort tid.
For en dypere titt på dobbeltforbruk kan du sjekke ut Dobbeltforbruk forklart.
Hvorfor er Proof of Work nødvendig?
Hvis du har lest vår guide til blokkjedeteknologi, vet du at brukerne kringkaster transaksjonene til nettverket. Men disse transaksjonene anses ikke umiddelbart som gyldige. Det skjer først når de blir lagt til på blokkjeden.
Blokkjeden er en stor database som alle brukere kan se, slik at de kan sjekke om pengene har blitt brukt før. Se for deg: Du og tre venner har en notisblokk. Hver gang en av dere ønsker å overføre betalingsenheten dere bruker, skriver dere det ned – Anne betaler fem enheter til Benjamin, Benjamin betaler to enheter til Caroline osv.
Det er enda en ting som gjør det komplisert – hver gang du foretar en transaksjon, refererer du til transaksjonen der pengene kom fra. Så hvis Benjamin betaler to enheter til Caroline, ville oppføringen faktisk se slik ut: Benjamin betaler to enheter til Caroline fra denne tidligere transaksjonen med Anne.
Nå har vi en måte å spore enhetene på. Hvis Benjamin prøver å foreta en annen transaksjon med de samme enhetene han nettopp sendte til Caroline, ville alle få vite det med en gang. Gruppen ville ikke tillate at transaksjonen ble lagt til i notisblokken.
Dette fungerer kanskje bra i en liten gruppe. Alle kjenner hverandre, så de blir sikkert enige om hvem av vennene som skal skrive inn transaksjonene i notisblokken. Men hva om vi vil ha en gruppe på 10 000 deltakere? Notisblokk-ideen lar seg ikke skalere, fordi ingen stoler på at en fremmed fører inn det han skal.
Det er her Proof of Work kommer inn. Mekanismen passer på at brukerne ikke bruker penger som de ikke har rett til å bruke. Ved å bruke en kombinasjon av spillteori og kryptografi gjør en PoW-algoritme det mulig for hvem som helst å oppdatere blokkjeden i henhold til systemets regler.
Hvordan fungerer PoW?
Notisblokken ovenfor representerer blokkjeden. Men vi legger ikke til transaksjonene én og én – isteden samler vi dem i blokker. Vi kunngjør transaksjonene til nettverket, og så vil brukere som oppretter en blokk, ta dem med i en kandidatblokk. Transaksjonene blir ansett som gyldige først når kandidatblokken blir en bekreftet blokk, noe som betyr at den har blitt lagt til på blokkjeden.
Men det er ikke billig å legge til en blokk. Proof of Work krever at en miner (brukeren som oppretter blokken) bruker sine egne ressurser mot å få dette privilegiet. Denne ressursen er datakraft, som brukes til å hashe blokkens data helt til brukeren finner løsningen på et puslespill.
Hashing av blokkens data betyr at du sender den gjennom en hashfunksjon for å generere en blokkhash. Blokkhashen fungerer som et "fingeravtrykk" – det er en identitet for inndataene dine, og den er unik for hver blokk.
Det er praktisk talt umulig å reversere en blokkhash for å få inndataene. Men når du kjenner inndatene, er det enkelt for deg å bekrefte at hashen er riktig. Du trenger bare sende inndataene gjennom funksjonen og sjekke om utdataene er de samme.
I Proof of Work må du oppgi data der hashen samsvarer med visse betingelser. Men du vet ikke hvordan du skal komme deg dit. Det eneste alternativet er å sende dataene gjennom en hash-funksjon og sjekke om de samsvarer med betingelsene. Hvis de ikke gjør det, må du endre dataene dine litt, for å få en annen hash. Hvis du endrer bare ett tegn i dataene dine, gir det et helt annet resultat, så det er umulig å forutsi hva utdataene blir.
Så hvis du vil lage en blokk, er det rett og slett et gjettespill du driver med. Du tar vanligvis informasjon om alle transaksjonene du vil legge til, sammen med noen andre viktige data, og så hasher du det hele sammen. Men ettersom datasettet ditt ikke endrer seg, må du legge til noe informasjon som er variabel. Ellers får du alltid samme hash som utdata. Disse variable dataene er det vi kaller en nonce. Det er et tall du endrer for hvert forsøk, slik at du får forskjellig hash hver gang. Og dette er det vi kaller mining.
For å oppsummere er mining prosessen med å samle blokkjededata og hashe dem sammen med en nonce helt til du finner en bestemt hash. Hvis du finner en hash som oppfyller betingelsene som er angitt av protokollen, får du rett til å kringkaste den nye blokken til nettverket. På dette tidspunktet oppdaterer de andre deltakerne i nettverket blokkjedene sine slik at de inkluderer den nye blokken.
Store kryptovalutaer i dag har betingelser som er utrolig vanskelige å oppfylle. Jo høyere hashrate på nettverket, jo vanskeligere er det å finne en gyldig hash. Dette gjøres for å sikre at blokkene ikke blir funnet for raskt.
Du kan sikkert tenke deg at det koster mye å prøve å gjette enorme mengder hasher på datamaskinen din. Du forkorter utstyrets levetid og bruker mye strøm. Men protokollen belønner deg med kryptovaluta hvis du finner en gyldig hash.
La oss oppsummere det vi vet så langt:
Mining er dyrt for deg.
Du blir belønnet hvis du produserer en gyldig blokk.
Når en bruker kjenner inndataene, er det enkelt å sjekke hashen – brukere som ikke er minere, kan bekrefte at en blokk er gyldig, uten å bruke noe særlig datakraft.
Greit det. Men hva om du prøver å jukse? Hva er det som hindrer deg i å legge til en haug med falske transaksjoner i blokken og få produsert en gyldig hash?
Det er her kryptografi med offentlig nøkkel kommer inn. Vi skal ikke gå i dybden på det i denne artikkelen, men sjekk ut Hva er kryptografi med offentlig nøkkel? for en omfattende forklaring. Kort sagt benyttes det noen smarte kryptografiske triks som lar en hvilken som helst bruker verifisere om noen har rett til å flytte pengene de prøver å bruke.
Når du oppretter en transaksjon, signerer du den. Alle på nettverket kan sammenligne signaturen din med den offentlige nøkkelen din og sjekke om disse stemmer overens. De sjekker også om du faktisk kan bruke pengene dine, og at summen av inndataene dine er høyere enn summen av utdataene dine (dvs. at du ikke bruker mer enn du har).
Alle blokker som inkluderer en ugyldig transaksjon, blir automatisk avvist av nettverket. Bare det å prøve å jukse er dyrt for deg. Du kaster bort egne ressurser uten å få noe igjen.
Her finner vi det vakre med Proof of Work: Det er dyrt å jukse, men lønnsomt å være ærlig. En rasjonell miner ønsker jo avkastning, så det er derfor sannsynlig at de oppfører seg på en måte som garanterer inntekter.
Proof of Work kontra Proof of Stake
Det finnes mange konsensusalgoritmer, men den det er knyttet mest forventning til, er Proof of Stake (PoS/innsatsbevis). Konseptet går tilbake til 2011 og har blitt implementert i noen mindre protokoller. Men den har ennå ikke blitt tatt i bruk på noen av de store blokkjedene.
I Proof of Stake-systemer erstattes minerne med validatorer. Det er ingen mining inne i bildet og heller ingen kamp om å gjette hasher. Isteden blir brukerne tilfeldig valgt – hvis de blir plukket ut, må de foreslå (eller "smi") en blokk. Hvis blokken er gyldig, får de en belønning som består av gebyrene fra blokkens transaksjoner.
Men det er ikke en hvilken som helst bruker som kan velges – protokollen velger dem basert på mange faktorer. For å bli kvalifisert må deltakerne låse av en staking, som er et forhåndsbestemt beløp i blokkjedens integrerte valuta. Stakingen fungerer ganske likt som kausjon: Akkurat som en som er tiltalt, stiller en stor sum med penger som sikkerhet for å hindre han i å stikke av, låser validatorene av en staking for å motvirke juks. Hvis de er uærlige, blir stakingen (eller en del av den) tatt fra dem.
Proof of Stake har noen fordeler i forhold til Proof of Work. Den kanskje aller viktigste er det mindre karbonavtrykket. Ettersom det ikke er behov for strømslukende mining-farmer i PoS, er strømforbruket bare en brøkdel av det som brukes i PoW.
Når det er sagt, har den ikke på langt nær så god historikk som PoW. Selv om mining kan oppfattes som sløsing, er det den eneste konsensusalgoritmen som beviselig har fungert i stor skala. På bare litt over ti år har den sikret transaksjoner verdt billioner av dollar. For å finne ut helt sikkert om PoS kan konkurrere med denne sikkerheten, må staking testes skikkelig.
Avsluttende tanker
Proof of Work var den opprinnelige løsningen på problemet med dobbeltforbruk og har vist seg å være pålitelig og sikker. Bitcoin beviste at vi ikke trenger sentraliserte enheter for å hindre at de samme pengene blir brukt to ganger. Med smart bruk av kryptografi, hashfunksjoner og spillteori kan deltakere i et desentralisert miljø bli enige om tilstanden til en økonomisk database.