Kryptoskolan del 2 – Konsensus? – Proof of Work Explained
Distribuerad förtroendelös konsensus (engelska: trustless consensus), anses vara ett av de stora genombrotten med Blockkedje-teknologin. Denna artikel kommer att fokusera på en av dessa konsensusmekanismer som används i dag av Bitcoin och Ethereum nätverket för att uppnå just ”distribuerad förtroendelös konsensus”, specifikt Proof Of Work.
Vad är distribuerad förtroendelös konsensus?
Termen distribuerad förtroendelös konsensus beskriver det sätt som noderna i en Blockchain synkroniserar sin data och når en överenskommelse (konsensus) om transaktioner som händer på nätverket.
Så vad menas med förtroendelös konsensus? Man kallar det förtroendelöst av två anledningar:
A) Då systemet inte bygger på förtroende för någon tredje part, till exempel banker, utan man har förtroendet inbakat som en del av teknologin som får allt att fungera.
B) Det inte existerar något förtroende för enskilda noder i nätverket.
För att förklara detta på ett enklare sätt använder vi oss av följande exempel på en transaktion som sker:
Bob mottager 10 BTC (Bitcoin) från sin vän Alice.
Majoriteten av noderna på nätverket måste nu nå ett samförstånd (konsensus) innan denna transaktion skrivs till den distribuerade databasen som varje nod har en kopia av, även mer känt som ”huvudbok” (engelska: ledger).
Det är först när majoriteten av noderna når en enighet (konsensus) och skrivs till samtliga noders databas som transaktionen anses vara ”immutable” (omöjlig att ändra).
Bildkälla: https://www.ybrikman.com/
För att detta ska fungera så finns det ett antal sanningar som måste säkerställs för att nå konsensus:
Transaktionens skapare (i vårt exempel Alice) är i ägandeskap av medlen som ska överföras till Bob.
Transaktionens skapare har fått ägandeskap av medlen (mynten) på korrekt väg.
Resultatet av transaktionen gör att mottagaren (Bob i vårt exempel) erkänns, av alla (noder), som den nya ägaren av medlen i transaktionen.
Resultatet av transaktionen gör att medlenas tidigare ägare (Alice) inte längre ska kunna identifiera sig som ägare av medlena.
Så nu när vi har en bättre förståelse om vad distribuerad förtroendelös konsensus är, kan vi gå vidare och prata om konsensusmekanismen Proof of Work som används för att uppnå detta.
Proof of Work
Bildkälla: https://softwareengineeringdaily.com/tag/proof-of-work/
Proof of Work är inte något nytt koncept som myntades (hehe) i samband med Bitcoin, tvärtom har begreppet funnits länge i IT-världen.
Idén nämndes ursprungligen redan 1992 i en artikel av Cynthia Dwork, Moni Naor och Eli Ponyatovskiav vid namn ”Pricing via Processing or Combatting Junk Mail”.
Där är syftet att skydda datorer och nätverk från Spam och Denial of Service (DoS) attacker genom att få klienter att svara på vissa beräkningsfrågor för att få access till/av servern.
Detta gör att potentiella attackerare behöver ta i beakt denna kostnad vid ett angrepp och därmed görs tröskeln lite högre för att attackera denna typ av nätverk/system.
Hashcash var även det ett exempel på ett sådant proof of work system som myntades av Adam Back år 1997.
Satoshi Nakamoto, skaparen/skaparna bakom Bitcoin, introducerade i Bitcoins whitepaper hur man använder Proof Of Work (PoW) för att skapa distribuerad konsensus och lösa en mängd problem, däribland ”Double spend” utmaningen.
Denna sårbarhet tacklades av Satoshi genom att kombinera Proof of Work med andra befintliga koncept – såsom kryptografiska signaturer, Merkle-kedjor och P2P-nätverk till ett fullt fungerande distribuerat konsensussystem, där kryptovalutor som Bitcoin är den första och grundläggande applikationen.
Proof of Work används för att verifiera transaktioner och skapa nya block i kedjan. Denna huvudbok (ledger) av tidigare transaktioner kallar man blockkedjan, eftersom det är en kedja av block (youdontsay.jpeg).
Blockkedjans syfte är alltså (återigen) att bekräfta transaktioner som ägt rum, till resten av nätverket.
Varför? Jo, för att noderna använder blockkedjan för att skilja legitima transaktioner från försök att återanvända mynt för betalning som redan har spenderats någon annanstans.
”Double spend” är en attack där man försöker använda samma mynt som betalningsmedel i mer än en transaktion. Detta går till genom att man skickar två motstridiga transaktioner i snabb följd till Bitcoin-nätverket.
För Proof of Work är ”Mining” väsentligt, det är processen där nya mynt skapas och transaktioner skickas över nätverket. Både de människor som engagerar sig i det och de datorer som utför miningen kallas ”miners”.
Under miningprocessen utför datorerna så kallad ”hashing” som man de-facto kan kalla självaste beviset på arbetet (zing!), alltså Proof of Work. Hashing innebär att de tar en serie slumpmässigt genererade strängar av indata och tillämpar en specifik kryptografisk funktion på den (SHA-256 (SHA-2) i Bitcoins fall och ETHash för Ethereum). Resultatet av varje beräkning kommer alltid att vara samma ”hash”, som är unik för en viss indata, men dess exakta värde kan inte förutsägas förrän den faktiska beräkningen utförs. Hur snabbt som en dator beräknar hashen kallas ”hashrate” och mäts i Megahash Per sekund (MH/s).
Nätverket har ett övergripande målvärde (target value), och så fort en av alla minersfår en hash som är i linje med målvärdet får denne miner rätten att registrera alla transaktioner som ägde rum på nätverket sedan sista blocket blev funnet, paketera dessa till ett block, lägga till blocket i slutet av kedjan samt belöna en viss mängd mynt till sitt eget konto för den beräkningskraft som denne spenderade på att beräkna hashen. Desto starkare hårdvara du har, desto högre hashrate, desto högre hashrate du har ökar din möjlighet att hitta nästa block och få belöning för mödan.
Vem som helst kan ladda ner en Bitcoin eller Ethereum klient och sätta upp sin egna miner, dock är det inte längre lönsamt att göra det med sin typiska hemdator. Detta då Bitcoinminingen idag domineras av ASICs (Application-Specific Integrated Circuit) maskiner i Bitcoins fall, specialiserade för detta ändamål.
På Ethereumfronten krävs ett större antal GPU:er för att nå någon ansenlig lönsamhet vid mining men då beräkningssvårigheten ökar så krävs det allt mer beräkningskraft för att nå lönsamhet.
För att motverka detta så finns det numer ”mining pools” där flera datorer tillsammans går ihop, gör jobbet samt delar på belöningen om en av datorerna i mining poolen hittar nästa block. Detta gör givetvis belöningen mindre för den enskilde minern, dock vägs det hela upp av garantin man har. Värt att tillägga är att även här är ens hashrate avgörande för hur snabbt du får belöning.
Då efterfrågan på GPU:er har varit sanslöst hög i denna mininghysteri så har det också gjort mining till ett hatobjekt för många gamers som efterfrågar GPU:er för annat ändamål än mining. Något som undertecknad sympatiserar med.
GTX 1080 Ti har en hashrate på ca 36 MH/s
Sammanfattning
Man kan alltså kortfattat beskriva Proof of Work i fem steg:
Transaktioner paketeras samman I form av block på en kedja
Noderna verifierar transaktionerna inom blocken som legitima.
Miners löser sedan ett matematiskt problem som kallas proof-of-work. Detta görs via hashing.
En belöning ges sedan till den datorn som först lyckas lösa problemet.
De verifierade transaktionerna lagras i den offentliga blockkedjan, även kallad ledgern i detta fall, som varje nod har en kopia på.
Bonusfråga: Vad är skillnaden mellan en Nod och en Miner?
En fullständig nod har en komplett kopia av blockkedjan och kan verifiera alla transaktioner från blockkedjans skapelse. Bitcoins blockkedja kräver cirka 149 GB diskutrymme (storlek December 2017)
En Miner å andra sidan skapar blocken som noderna lagrar. I grund och botten arbetar minern med att komma med den bästa kombinationen (hash) för att lagra denna information. Miners spenderar ca 10 minuter på att arbeta med ett problem, men noder lagrar resultatet för alltid i sin databas och verifierar det med andra noder. Minern har inget behov eller nytta av att veta om tidigare block.
// OBS. Då artikeln skulle bli tok för lång för att även nämna Proof of Stake så kommer jag skriva en separat artikel där jag går igenom för och nackdelar med Proof of Work kontra Proof of Stake, samt att jag kortfattat även vidrör ”proof of elapsed time” som används av Hyperledgerprotokollet Sawtooth för att nå konsensus. //
Detta sammanfattar del två av kryptoskolan! I nästa inlägg går vi igenom konsensusmekanismen Proof of Stake (PoS). Jag kan också nämna att jag pararellt jobbar med ett introduktionsinlägg för Ripple.
Mvh
CPU: Ryzen 9 5950x - NXZT Kraken Z73 (white sleeved) GPU: Gamerock 3080Ti
RAM: 128GB Trident Z Royal Gold DDR4 3600 CL16
MB: ASUS B550-A Gaming Silver/White Screen:55" LG OLED B9 (4k 120Hz @4:4:4)
Case: ASUS Rog Strix Helios White
HiFi Desktop: Sennheiser HD800S AMP: Cayin HA-1A MK2 DAC: Moon Neo 390