Hur SHA256 och gruvdrift skyddar Bitcoin-nätverket PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Hur SHA256 och gruvdrift skyddar Bitcoin-nätverket

Hur försvaras Bitcoin av energi? Och vad är en nonce? Dessa frågor och fler besvaras inom!

Hur gruvdrift fungerar är fascinerande. När jag förklarar det för människor, tycker jag om att se deras ansikte i samma ögonblick som deras sinne är blåst. Jag ska förklara det här, men vet bara, jag föreställer mig alla dina ansikten när dina sinnen blåser!

Jag måste börja med hashfunktioner. Utan hashfunktioner skulle Bitcoin inte vara möjligt. Låt mig först förklara vad de är, inte bara så att du kan låta cool på fester, utan också för att det är grundläggande för att förstå hur Bitcoin fungerar – särskilt gruvdrift men även transaktioner – under huven.

Du behöver inte förstå hur Bitcoin fungerar för att dra nytta av det, precis som hur du inte behöver förstå hur TCP/IP fungerar för att använda internet. Men fortsätt, för det är ganska intressant och jag ska göra det lätt att förstå, jag lovar.

Hash-funktioner

Låt oss börja med ett schema som jag kommer att förklara nedan...

Hur SHA256 och gruvdrift skyddar Bitcoin-nätverket PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.
(Grafisk/@jirols_btc)

Till vänster är ingången, mitten är funktionen och till höger är utgången. Ingången kan vara vilken data som helst, så länge den är digital. Det kan vara av vilken storlek som helst, förutsatt att din dator klarar det. Data skickas till SHA256-funktionen. Funktionen tar data och beräknar ett slumpmässigt tal, men med speciella egenskaper (diskuteras senare).

Den första Secure Hash Algorithm (SHA) var ursprungligen utvecklat av NSA och det finns många olika versioner nu (Bitcoin använder SHA256). Det är en uppsättning instruktioner för hur man blandar ihop data på ett mycket komplicerat men specificerat sätt. Instruktionerna är ingen hemlighet och det är till och med möjligt att göra det för hand, men det är väldigt tråkigt.

För SHA256 är utdata ett 256-bitars nummer (inte en slump).

Ett 256-bitars nummer betyder ett binärt tal på 256 siffror. Binärt betyder att värdet representeras med två symboler, antingen 0 eller 1. Binära tal kan konverteras till vilket annat format som helst, till exempel decimaltal, som är vad vi är bekanta med.

Även om funktionen returnerar ett 256-siffrigt binärt tal, uttrycks värdet vanligtvis i hexadecimalt format, 64 siffror långt.

Hexadecimal betyder att istället för 10 möjliga symboler som vi är vana vid med decimal (0 till 9), har vi 16 symboler (de tio vi är vana vid, 0-9, plus bokstäverna a, b, c, d, e, och f; som har värdena 11 till 15). Som ett exempel, för att representera värdet på decimal 15 i hexadecimal, skriver vi bara "f" och det är samma värde. Det finns massor av information tillgänglig online med en snabb Google-sökning om du behöver mer fördjupning.

För att demonstrera SHA256 i aktion kan jag ta siffran 1 och köra den genom en online hash-kalkylator, och fick denna utdata (i hexadecimal):

Hur SHA256 och gruvdrift skyddar Bitcoin-nätverket PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Den översta rutan är ingången, den nedre rutan är den resulterande utgången.

Observera att alla datorer i världen kommer att producera samma utdata, förutsatt att ingången är densamma och SHA256-funktionen används.

Det hexadecimala numret, om det konverteras till decimalt, är (märk på att det krävs fler siffror för att skriva):

48,635,463,943,209,834,798,109,814,161,294,753,926,839,975,257,569,795,305,637,098,542,720,658,922,315

Och omvandlat till binärt är det:

11010111000011010110010011100111111111100110100111111001110000110011101011010111000000001001110111111110101101000111111010101110100011110101101101001001110101010100010001011110001110101001001110000000001111001010010110111011011011110000111010110110100101111010111001101011100110101110011010111001101011100110101110011010111001101011100111

Bara av intresse, här är samma värde i bas 64.

1w1k5/5p+cM61wCd/rR+ro9bSdVEXjqTgDylu28OtpY=

Observera att det minsta möjliga värdet SHA256 kan returnera är noll, men LENGTH är fortfarande 256 bitar. Så här representeras noll:

0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

Och det största möjliga värdet är:

1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111

I decimal är det:

115,792,089,237,316,195,423,570,985,008,687,907,853,269,984,665,640,564,039,457,584,007,913,129,639,935

I hexadecimal är det:

FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

Observera att det finns exakt 64 F.

Noll i hexadecimal kan helt enkelt skrivas som en enda nolla, men för hash-utdata är det 64 av dem för att hålla sig till kravet på en utdata med fast storlek:

0000000000000000000000000000000000000000000000000000000000000000

Här är en sammanfattning av några fakta om hashfunktionen som är viktiga att uppskatta:

  • Ingången kan inte bestämmas från utgången
  • Ingången kan vara vilken längd som helst
  • Utgången är alltid lika lång
  • Utdata kommer alltid att återges identiskt om du ger samma input.
  • Varje förändring av ingången, oavsett hur liten, kommer att orsaka en oförutsägbar och helt annorlunda utdata
  • Utgången är till synes slumpmässig, men är faktiskt deterministisk (vilket betyder att den är beräknad och reproducerbar)
  • Utgången kan inte förutsägas. Det kan bara beräknas och detta kräver en mätbar mängd arbete av en dator (och timmar med penna och papper! Gör det inte.)

Nu när du förstår grundkonceptet för vad en hash är, kan du förstå förklaringen av hur Bitcoin-brytning fungerar.

Men innan du går vidare rekommenderar jag att du går till en hash-kalkylator online och leker lite med den och testar själv vad jag har sagt om hashfunktioner. Jag gillar den här.

Gruvdrift

Jag kommer att börja med att demonstrera ett arbetskoncept, det är där "proof-of-work" i Bitcoin kommer ifrån.

Gå till hash-kalkylatorn online och skriv "Jag skapar 50 bitcoins och betalar mig själv detta belopp."

Skriv det exakt, skiftlägeskänsligt, inklusive punkt. Du bör få denna utdata:

Hur SHA256 och gruvdrift skyddar Bitcoin-nätverket PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Nu, låt oss skapa en regel som säger att för att detta betalningsmeddelande ska vara giltigt behöver vi hashen för att börja med en nolla. För att göra det måste vi ändra ingången på något sätt. Men, som du har lärt dig, är det inte förutsägbart vad resultatet skulle vara för en given ingång. Vilken ändring kan vi göra för att säkerställa en hash som börjar med noll?

Vi måste lägga till data med hjälp av trial-and-error. Men vi vill inte heller ändra innebörden av inmatningsmeddelandet. Så, låt oss skapa ett fält (en allokerad sektion) som kallas en "nonce" som kommer att innehålla ett nonsensvärde.

Ordet "Nonce" ska härledas från "nummer som bara används en gång", men jag ser det inte.

Lägg märke till nedan hur bara att lägga till "Nonce:" som en extra fältrubrik ändrar hash-utdata.

Hur SHA256 och gruvdrift skyddar Bitcoin-nätverket PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Utgången börjar fortfarande inte med en "0", så låt oss lägga till lite nonsens (jag lade till ett meningslöst "x"):

Hur SHA256 och gruvdrift skyddar Bitcoin-nätverket PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Det börjar fortfarande inte med en nolla. Jag försökte några fler tecken tills hashen började med en nolla:

Hur SHA256 och gruvdrift skyddar Bitcoin-nätverket PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Där går vi. Nu, enligt de godtyckliga reglerna jag satte för denna låtsasversion av Bitcoin, är texten i inmatningsfönstret ett giltigt block med en enda transaktion som ger mig 50 bitcoin.

Observera att Bitcoin-block i huvudsak är sidor i en reskontra. Varje block är numrerat och skapar nya bitcoin, tillsammans med en lista över transaktionerna mellan användare. Det här rekordet är där bitcoin bor.

Nu en ny regel. För nästa block måste hashen för det föregående blocket inkluderas. Jag ska lägga till lite komplexitet och lägga till några fler fält för att närma mig vad ett riktigt Bitcoin-block har.

Hur SHA256 och gruvdrift skyddar Bitcoin-nätverket PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Hashen börjar med ett "f" inte "0", så jag måste prova några värden i nonce-fältet:

Hur SHA256 och gruvdrift skyddar Bitcoin-nätverket PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Den här gången hade jag mer tur och hittade en passande nonce efter bara fyra försök. Kom ihåg att det tog 22 försök för det första blocket. Det finns en viss slumpmässighet här, men i allmänhet är det inte så svårt att hitta en giltig hash om allt vi försöker få är en nolla. Det finns 16 möjliga värden för den första hash-siffran så jag har en chans på 1 på 16 att alla ändringar jag gör i inmatningsfältet kommer att resultera i att den första hash-siffran är "0".

Observera att Bitcoins fält är så här, men det finns fler detaljer som jag inte har lagt till. Detta är bara för att illustrera en poäng, inte nödvändigtvis för att detaljera exakt hur ett Bitcoin-block ser ut.

Jag kommer att lägga till ett tidsfält till nästa block eftersom jag behöver det för att förklara "svårighetsjusteringen" nästa:

Hur SHA256 och gruvdrift skyddar Bitcoin-nätverket PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Ovan är block nummer tre. Det inkluderar föregående blocks hash och nu har jag även börjat ta med tiden. Det jag hittade lyckades få hashen att börja med en nolla (jag fortsatte bara att skriva en "1" tills hashmålet nåddes).

Det finns tillräckligt här nu för att jag kan börja förklara några intressanta koncept om Bitcoin blockchain och gruvdrift.

Vinner ett block

Gruvprocessen är konkurrenskraftig. Den som först producerar ett giltigt block får betala sig själv en fast blockbelöning. En gruvarbetare som producerar samma blocknummer lite senare får ingenting - det blocket avvisas. Att förklara varför det kommer att orsaka för mycket avledning nu, så jag ska förklara det i bilagan.

Efter att block tre har hittats och sänts till alla (alla Bitcoin-noder), slutar alla gruvarbetare att arbeta på vad som skulle ha varit deras version av block tre. De börjar bygga ovanpå det framgångsrika block tre (genom att dra dess blockhash framåt till ett nytt block) och börjar arbeta med att hitta en lämplig nonce för block fyra. Vinnaren publicerar resultatet och sedan börjar alla jobba på block fem osv.

Med varje block skapas nya bitcoin som tillsammans utgör det totala utbudet hittills. Om det finns många gruvarbetare, så bör vi statistiskt räkna med att block kommer att produceras snabbare, och därför kommer bitcoin att skapas snabbare. Problem, eller hur?

Satoshi Nakamoto sökte ett begränsat utbud av bitcoin med en förutsägbar emission över tid och tänkte på detta problem och introducerade en negativ återkopplingsslinga för att hålla blockproduktionen med 10-minutersintervaller i genomsnitt. Hur? Se om du kan komma på ett sätt. Pausa en stund och begrunda — se om du kan komma på samma geniala lösning och läs vidare när du ger upp.

NODER: Jag nämner "giltiga" block. Än sen då? Vem kollar? Bitcoin-noderna är. En Bitcoin-nod behåller en kopia av blockkedjan hittills och följer en uppsättning regler för att kontrollera att nya block är inom reglerna och förkasta de som inte är det. Var finns reglerna? I koden. En dator som laddar ner Bitcoin-koden är en nod.

Svårighetsjusteringen

Den genomsnittliga tiden för att skapa nya Bitcoin-block beräknas av varje nod var 2016:e block (det är därför tidsfältet behövs). Detta är en del av protokollet och reglerna som noderna följer. En formel används för att justera antalet nollor varje blockhash måste börja med för att vara giltig.

Rent strikt är det inte antalet nollor som justeras utan ett målvärde som hashen måste ligga under, men att tänka på inledande nollor är enklare att förklara.

Om block produceras för snabbt, så justeras hash-målet enligt fördefinierade regler som alla noder följer identiskt (det finns i deras kod).

För att hålla det enkelt för mitt exempel, låt oss säga att andra människor konkurrerar med mig, blockeringar sker för snabbt, och nu behöver det fjärde blocket två nollor istället för en, enligt en tänkt beräkning.

Det kommer att ta mig lite längre tid att få två nollor, men vi föreställer oss att det finns många andra som konkurrerar med mig så den totala tiden det tar för någon att hitta ett block hålls till ett mål.

Här är nästa block:

Hur SHA256 och gruvdrift skyddar Bitcoin-nätverket PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Lägg märke till tiden. Det har gått mer än 10 minuter sedan föregående block (jag tog precis upp tiden för att demonstrera). 10-minutersmålet är probabilistiskt; det är aldrig känt exakt när nästa block kommer att hittas.

Jag busade på tangentbordet i en minut tills två nollor dök upp. Detta var exponentiellt svårare än att hitta en enda nolla. Chansen att hitta två nollor i rad är 1 på 162, eller en chans på 1 på 256.

Om fler människor skulle vara med i gruvdriften och konkurrensen om nya bitcoin, så kommer det så småningom att krävas tre nollor.

Jag letade precis upp det sista riktiga Bitcoin-blocket, som innehåller hashen från det föregående blocket. Hashen var:

000000000000000000084d31772619ee08e21b232f755a506bc5d09f3f1a43a1

Det är 19 nollor! Det är 1 på 1619 chans att hitta ett sådant block vid varje försök. Bitcoin-gruvarbetare gör många, många försök per sekund, tillsammans över hela världen.

Antalet försök per sekund kallas "hashhastigheten". För närvarande är den uppskattade hashhastigheten i världen strax under 200 miljoner terahashes per sekund (en terahash är en biljon hash). Med så många försök per sekund hittas ett block med en hash som börjar med 19 nollor ungefär var tionde minut.

I framtiden, när fler gruvarbetare ansluter sig, kommer hashhastigheten att gå upp, block kommer att hittas snabbare och Bitcoins svårighetsgrad kommer att anpassa sig till att kräva 20 nollor, vilket kommer att pressa blockproduktionen tillbaka till cirka 10 minuter.

Halvningen

När Bitcoin först startade producerades 50 bitcoin med varje block. Reglerna för Bitcoin blockchain specificerar att efter varje 210,000 10 block kommer belöningen att halveras. Detta ögonblick är känt som "halveringen" och inträffar ungefär vart fjärde år. Halveringen, i kombination med svårighetsjusteringen att hålla blocken i 2140-minutersintervaller, innebär att runt år 0.00000001 kommer blockbelöningen att vara 1, eller 21 satoshi, den minsta enheten i en bitcoin, och kan inte halveras längre. Mining kommer inte att sluta, men blockbelöningen kommer att vara noll. Från det ögonblicket kommer inga nya bitcoin att skapas framöver och antalet bitcoin är matematiskt beräkningsbart och nära nog XNUMX miljoner mynt. Det är så det totala utbudet är känt — det är programmatiskt inställt.

Även med blockbelöningen på noll kommer gruvarbetarna fortfarande att få incitament att fortsätta arbeta för att tjäna transaktionsavgifter.

Hur exakt halveras blockbelöningen? Det finns i koden som innehas av noderna. De vet att avvisa alla nya block efter 210,000 25 där en gruvarbetare betalar sig själv över 420,000 bitcoin. Och sedan att avvisa eventuella blockeringar efter 12.5 XNUMX där en gruvarbetare betalar sig själv över XNUMX bitcoin, och så vidare.

Transaktionsavgifter

Hittills har jag bara visat imaginära block med en enda transaktion - transaktionen där gruvarbetaren får en belöning. Detta kallas "myntbastransaktionen."

Det är inte uppkallat efter företaget Conbase, jag menar Coinbase. Företaget döpte sig efter myntbastransaktionen, inte tvärtom. Bli inte förvirrad.

Utöver myntbastransaktionen finns det transaktioner med personer som betalar varandra. Här är ett tänkt exempel:

Hur SHA256 och gruvdrift skyddar Bitcoin-nätverket PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Jag brydde mig inte om att hitta en riktig hash den här gången (det är faktiskt den riktiga hashen som rapporterats i block 200,001 XNUMX). Jag hittade bara på för skojs skull, men märk att ett meddelande kan bäddas in där.

Satoshis inkluderade berömt orden "Chancellor on Brink of Second Bailout for Banks" i det första Bitcoin-blocket (The Genesis Block), efter dagens tidningsrubrik.

Hur SHA256 och gruvdrift skyddar Bitcoin-nätverket PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Poängen här är att det ingår 132 transaktioner (inte alla visade). Titta på transaktion #132 – 2.3 bitcoin från en adress betalar 2.1 bitcoin till en annan adress och även till en andra adress beloppet 0.1 bitcoin (jag har använt prickar för att förkorta adressens längd).

Så en källa på 2.3 bitcoin betalar totalt 2.2 bitcoin (2.2 + 0.1 = 2.2). Saknas det 0.1 bitcoin? Nej, skillnaden hävdas av gruvarbetaren, som jag ska förklara.

Gruvarbetaren får betala sig själv 25 bitcoin som blockbelöning (eftersom 210,000 50 block har passerat så belöningen har halverats från 25 till 27.33880022). Men om du tittar så är myntbastransaktionen 2.33880022. De extra 132 bitcoin kommer från de andra XNUMX transaktionerna i blocket – ingångarna kommer alla att vara något större än summan av utdata. Så gruvarbetaren får göra anspråk på denna "övergivna" bitcoin som betalning till sig själv. Dessa anses vara transaktionsavgifter som betalas till gruvarbetaren.

Blockutrymmet är begränsat. När Bitcoin var nytt kunde användare skicka transaktioner utan avgift och gruvarbetarna skulle inkludera transaktionen i blocket. Men nu finns det fler användare och eftersom det är konkurrenskraftigt att ta sig till nästa block, inkluderar användare en avgift i transaktionen för att locka gruvarbetaren att välja sin transaktion framför andras.

Så när blockbelöningen stadigt sjunker, halveras vart fjärde år och så småningom till noll, får gruvarbetare fortfarande betalt på detta sätt.

Vissa har föreslagit att en dag kommer belöningen till gruvarbetare inte att räcka och kommer att få Bitcoin att misslyckas. Denna oro har grundligt avlivats och jag kommer inte att upprepa den här.

Kan ett block skrivas om?

Detta är extremt osannolikt och det är värt att förstå varför. Du kommer då att förstå varför Bitcoin-transaktioner är oföränderliga (oföränderliga).

Jag förklarade tidigare att hashen från det föregående blocket ingår i det aktuella blocket. Det betyder att all redigering av transaktioner i ett gammalt block ändrar hashen för det redigerade blocket. Men den hashen registreras i nästa block, så det betyder att nästa block måste uppdateras också. Men om du ändrar hash som registreras i nästa block, måste dess hash ändras, och så vidare.

Observera att varje gång en hash ändras förlorar du alla dessa vackra nollor och kommer bara att ha en hash som ser slumpmässigt ut – och måste göra allt arbete igen för att få tillbaka nollorna. Om du gör det för blocket du försökte redigera, måste du göra om arbetet för nästa block, och nästa hela vägen till det senaste blocket. Du kan inte bara stanna vid det gamla blocket, eftersom reglerna för Bitcoin är sådana att den längsta kedjan av block är den verkliga Bitcoin-posten. Om du går tillbaka och redigerar ett block för 10 block sedan har du inte längre den längsta kedjan. Du måste lägga till 10 block till och sedan lite mer eftersom när du skapade de 10 blocken blev den riktiga kedjan förmodligen lite längre. Du måste tävla för att köra om den riktiga kedjan. Om den lyckas blir den nya versionen den riktiga versionen.

Att upprepa hela världens kollektiva hashingsatsning från det redigerade blocket till det senaste blocket är hindret för att redigera Bitcoin. Energin gick åt för att skapa dessa hash med alla de osannolika nollorna och den energiförbrukningen måste upprepas för att redigera Bitcoin. Det är därför energi som används för att bryta Bitcoin inte är "slösad"; den är till för att försvara Bitcoin från redigeringar, för att göra redovisningen oföränderlig utan att behöva lita på en central myndighet.

Vad händer om två gruvarbetare hittar ett block samtidigt?

Detta händer faktiskt då och då, och det ordnar sig alltid på följande sätt:

Varje nod kommer att ta emot antingen ett av de nya nästan samtidiga blocken först och kommer att acceptera det och avvisa det som anländer bara några ögonblick senare. Detta resulterar i en splittring av nätverket, men det är tillfälligt.

För att illustrera, låt oss kalla ett av blocken blått och det andra rött (de har ingen färg, bara tål mig).

Gruvarbetare arbetar sedan på nästa block, men det kommer att uppstå en splittring om vilket block de förlänger kedjan från.

Låt oss säga att den vinnande gruvarbetaren hittade ett block med den blå kedjan. De kommer att skicka det nya blocket till alla noder och den längsta kedjan kommer att synas. Noderna som hade accepterat den röda kedjan kommer sedan att släppa den och anta den blå kedjan.

Alla gruvarbetare som arbetade på den röda kedjan kommer att sluta och kommer nu att arbeta på den längre kedjan, som är den blå kedjan. Den röda kedjan är död.

Appendix

Varför en Runner Up Miner's Block är ogiltigt

Anta att block 700,000 700,000 precis bröts av MINER-A. Trettio sekunder senare skapade MINER-B också en annan version av block 30 700,001. När MINER-B sänder detta alternativ kommer varje nod att avvisa det eftersom de redan har sett och accepterat blocket av MINER-A. Vad mer är, låt oss på de 700,000 sekunderna säga att MINER-C hittade block 700,001 XNUMX. Med tanke på att MINER-B:s konkurrerande XNUMX XNUMX:e block inte förlänger den nuvarande kedjan (som är upp till XNUMX XNUMX) så avvisas det också av den anledningen.

Ännu mer intressant är att om MINER-B hade arbetat på block 700,001 700,000 istället för en konkurrerande version på 700,001 700,000, skulle de ha haft lika stor chans att bryta ett giltigt block XNUMX XNUMX som de skulle behöva hitta ett alternativt block XNUMX XNUMX. Så fort någon gruvarbetare ser ett nytt block bör de sätta sin insats på nästa block.

Om däremot Miner-B hittade block 700,000 XNUMX en sekund efter att MINER-A gjorde det, är det möjligt att vissa noder ser MINER-A:s block först medan andra ser MINER-B:s block först, beroende på geografiska platser och internethastigheter. I så fall finns det en tillfällig gaffel, och vissa gruvarbetare kommer att arbeta med att förlänga den ena versionen medan andra gruvarbetare kommer att arbeta med att förlänga den andra. Som förklarats tidigare med deskriptorerna "blå kedja" och "röd kedja", kommer så småningom en av versionerna att sträcka sig längre före den andra och bli den giltiga versionen enhälligt.

Detta är ett gästinlägg av Arman The Parman. Åsikter som uttrycks är helt deras egna och återspeglar inte nödvändigtvis de från BTC Inc Bitcoin Magazine.

Tidsstämpel:

Mer från Bitcoin Magazine