Bitcoin Core 0.13.0, den trettonde generationen av Bitcoins referensklient som först lanserades av Satoshi Nakamoto för nästan åtta år sedan, har nu taggats för release. Detta är ett av de sista stegen i mjukvaruversionsprocessen och initierar Gitian-byggprocessen.

Bitcoin Core 0.13.0 utvecklades av cirka 100 bidragsgivare under en period av cirka fem månader. Och medan mycket av utvecklingsinsatsen under denna tid också har fokuserats på Segregated Witness, som bara kommer att aktiveras i en framtida mindre version av programvaran, innehåller Bitcoin Core 0.13.0 ungefär ett dussin anmärkningsvärda förbättringar jämfört med Bitcoin Core 0.12.0.

Dessa är de viktigaste förändringarna.

Barn betalar för förälder

Antalet transaktioner i Bitcoin-nätverket har ökat stadigt över tiden. Som ett resultat har fler block fyllts och gruvarbetare tar vanligtvis högre avgifter för att inkludera transaktioner i block. Transaktioner som inte inkluderar tillräckliga avgifter tar vanligtvis längre tid att bekräfta eller kanske till och med aldrig bekräfta alls. Detta har visat sig vara något problematiskt, särskilt i perioder där så kallade “stresstester” genomfördes i nätverket, med ökningar i det totala antalet transaktioner i nätverket och stora transaktionsförseningar..

Enskilda användare kan lösa detta problem genom att inkludera en högre avgift i sina transaktioner, vilket uppmuntrar gruvarbetare att prioritera dessa transaktioner. Detta är möjligt även efter att en transaktion har skickats med Opt-in Replace-by-Fee (RBF); dock inte många plånböcker inkluderar detta alternativ än. Dessutom är RBF bara ett alternativ för avsändaren av en transaktion. Hittills hade mottagaren inget sätt att stöta avgiften för en inkommande transaktion för att påskynda bekräftelsen.

Detta problem löses effektivt med ett trick som heter “Child Pays for Parent” (CPFP). CPFP är en policy som används av gruvarbetare för att välja vilka transaktioner som ska ingå i block. Med CPFP väljer gruvarbetare inte nödvändigtvis de mest betalande (och giltiga) transaktionerna utan väljer de mest lönsamma uppsättning av transaktioner. Med andra ord: de kommer att välja en lågavgiftstransaktion om en efterföljande transaktion det förlitar på lågavgiftstransaktionen erbjuder en tillräckligt hög avgift för att kompensera. Gruvarbetaren kommer att inkludera båda samtidigt.

I praktiken betyder detta att mottagaren av en lågavgiftstransaktion kan “bifoga” en högavgiftstransaktion och spendera samma mynt till sig själv. Incitrerad av den nya transaktionen med hög avgift kommer en gruvarbetare att inkludera uppsättningen transaktioner. Som sådan behöver inte mottagaren vänta så länge på en bekräftelse, medan gruvarbetaren kan öka sin inkomst.

Kompakt blockstöd

Bitcoins peer-to-peer-protokoll är för närvarande något ineffektivt. Noder skickar varandra de flesta transaktionsdata två gånger: en gång som en transaktion eftersom den ursprungligen skickas över nätverket och en gång som en del av ett block när transaktionen bekräftas.

Detta har vissa nackdelar. För det första krävs det mer bandbredd för att skicka transaktionsdata två gånger än vad det egentligen borde, vilket ökar kostnaden för att köra Bitcoin Core. För det andra, och kanske viktigare, att vidarebefordra nya block till flera kamrater samtidigt kan orsaka betydande utgående bandbreddspikar. Detta stör potentiellt internetanvändningen varje gång ett nytt block hittas, vilket är potentiellt irriterande för användarna. Och kanske, ännu viktigare, det kan också sakta ner blockeringsutbredningen över nätverket. Långsam blockutbredning kan i sin tur gynna större gruvpooler och därigenom stimulera ett mer centraliserat gruvlandskap.

Kompakta block (BIP 152), utvecklat av Bitcoin Core och Blockstream utvecklaren Matt Corallo, är utformade för att minska överskott av dataöverföring. När ett nytt block hittas kommunicerar noder initialt endast mycket kompakta hashtransaktionsdata. Eftersom noder redan har fått fullständig transaktionsdata när den ursprungligen skickades över nätverket kan de använda dessa hash för att räkna ut vilka transaktioner som ingår i blocket och rekonstruera själva blocket.

Detta trick fungerar dock inte alltid perfekt. Om en nod ännu inte fick den ursprungliga transaktionen innan den fick hash, kan den noden naturligtvis inte välja transaktionen. Dessutom, i sällsynta fall a fel transaktion kan hash till en rätt hash, lurar noden till att tro att den fick rätt transaktion tills den försöker rekonstruera blocket och finner att det inte lägger till.

I båda dessa fall av fel begär noden helt enkelt den specifika transaktionsdata. Även med bara några kompletta transaktioner i dem kommer Compact Blocks att sändas över nätverket mycket snabbare och kräver betydligt mindre bandbredd.

Hierarkisk deterministisk nyckelgenerering

Hittills genererade Bitcoin Core ett nytt och helt slumpmässigt offentligt och privat nyckelpar för varje ny Bitcoin-adress. Även om detta är viktigt av säkerhets- och sekretessskäl kan det också vara lite av en börda för användarna. För att säkra alla privata nycklar mot förlust måste de göra regelbundna säkerhetskopior.

Hierarkisk deterministisk (HD) nyckelgenerering (BIP 32), ett kryptografiskt trick som utvecklats under 2012 och 2013 av Bitcoin Core-utvecklarna Gregory Maxwell och Dr. Pieter Wuille, och Armory-utvecklaren Alan Reiner, löser detta problem. Med HD-nyckelgenerering skapar Bitcoin Core ett helt nytt nyckelpar för varje ny adress, men alla dessa nycklar härrör från ett enda 12-ords utsäde. Så länge användare kommer ihåg det här ordet på 12 ord kan de generera alla privata nycklar på nytt och få tillgång till alla sina medel.

Det bör noteras att HD Key Generation inte är en ny funktion i Bitcoin-världen. Många plånböcker inkluderade redan alternativet i flera år. Det existerade bara aldrig i Bitcoins referensklient – tills nu.

Prestanda & säkerhet

Och naturligtvis introducerar Bitcoin Core 0.13.0 en betydande lista över prestanda och säkerhetsuppgraderingar. Hela omfattningen av dessa förbättringar ligger utanför denna artikel (se Bitcoin Core 0.13.0 release-anteckningar för alla detaljer), men kort sagt …

Databasens cacheminne har ökats, vilket gör det möjligt för noder att påskynda transaktionsvalidering och mer. Bitcoin-kommandoradsverktyget tillåter nu användare att interaktivt skriva lösenfraser och annan känslig information, vilket förbättrar säkerheten genom att inte lagra denna information i klartext. Programvaran uppdateras för att använda C ++ 11 och Python 3, nyare versioner av programmeringsspråken, som möjliggör kraftfullare funktioner. ARM (en specifik mikroprocessorarkitektur) binärer för Linux är nu en del av utgåvan, så användare behöver inte kompilera detta för sig själva. Data om vilka transaktioner i en mempool som är beroende av varandra (som används med CPFP) kan kommuniceras till externa program. Noder i nätverket kan begära att endast få transaktioner som uppfyller en viss avgiftströskel för att förhindra DoS-attacker. Och slutligen har det gjorts många förbättringar på låg nivå av peer-to-peer, fjärrproceduresamtal och ZMQ-protokoll.

Tack vare Bitcoin Core huvudansvarig Wladimir van der Laan och Bitcoin Core utvecklare och Ciphrex VD Eric Lombrozo för information och feedback.

Obs! Bitcoin Core 0.13.0 släpptes officiellt den 23 augusti; den ursprungliga titeln på denna artikel, som meddelade att den släpptes den 22 augusti, var felaktig. Det hade taggats för släpp, vilket vanligtvis betyder att det kommer att släppas inom ett par dagar. Bitcoin Core 0.13.0 kan nu laddas ner på bitcoincore.org och bitcoin.org. (Men notera detta innan du laddar ner det säkerhetsvarning på bitcoin.org.)