I dag 24. november 2019 markeres den offisielle utgivelsen av Bitcoin Core 0.19.0, den 19. store utgivelsen av Bitcoins opprinnelige programvareklient lansert av Satoshi Nakamoto for nesten 11 år siden, og fremdeles den dominerende Bitcoin-implementeringen på nettverket i dag. (Skjønt på grunn av et problem som dukket opp i et sent stadium av Bitcoin Core 0.19.0-utgivelsesprosessen, er versjonen som ble utgitt for nedlasting faktisk 0.19.0.1.) Overvåket av Bitcoin Core hovedansvarlig Wladimir van der Laan, ble denne siste store utgivelsen utviklet av over hundre bidragsytere over et spenn på omtrent seks måneder..

Resultatet av 550 sammenslåtte trekkforespørsler, Bitcoin Core 0.19.0 inkluderer en rekke ytelsesforbedringer, moderniseringer og feilrettinger, samt andre endringer.

Her er en oversikt over noen av disse endringene.

Bech32 adresser som standard i GUI

Adresseformatet “bech32” (BIP 173) hadde allerede blitt introdusert i Bitcoin Core 0.16.0, utgitt tidlig i 2018, men er nå for første gang satt som standardalternativ i Bitcoin Core lommebok Grafisk brukergrensesnitt (GUI).

Bech32-adresser er adressene som begynner med “bc1” (i motsetning til adresser som begynner med en 1 eller en 3.) Disse adressene er også litt lengre, men bruker færre forskjellige tegn enn gjeldende adresseformat, da det ikke lenger er noen forskjell mellom små og store bokstaver. (Dette reduserer potensialet for menneskelige feil, for eksempel når en adresse leses høyt.) Bech32-adresser er også designet for å begrense feil forårsaket av skrivefeil..

I tillegg tilbyr bech32 fordeler i sammenheng med SegWit. Noen lommebøker som tilbyr SegWit – inkludert Bitcoin Core-lommeboken som standard til nå – gjør det ved å “pakke” den inn i P2SH-utganger (med adresser som begynner med “3”). For å bruke bitcoin fra en slik adresse, må brukerne avsløre et stykke kode – “innløs skriptet” – for å vise at bitcoin virkelig var låst i en SegWit-utgang. Med de nye bech32-adressene kan dette trinnet hoppes over, noe som betyr at utgifter fra en SegWit-utgang vil kreve at litt mindre data overføres over Bitcoin-nettverket og inkluderes i blockchain. Dette gjør transaksjoner fra en bech32-utgang enda billigere enn SegWit-transaksjoner fra en P2SH-utgang.

Siden ikke alle bitcoin-lommebøker støtter sending til bech32-adresser ennå, vil Bitcoin Core 0.19.0-brukere fremdeles kunne generere en PS2H-mottaksadresse i stedet, ved å slå i GUI.

To blokkerte utgående tilkoblinger ekstra som standard

Bitcoin-noder kobles til flere andre Bitcoin-noder, sammen danner peer-to-peer-nettverket. Over dette nettverket deler nodene blokkeringer, transaksjoner og noen ekstra transaksjonsdata.

Men peer-to-peer-nettverket kan være utsatt for angrep, for eksempel “partisjonsangrep.” Hvis en angriper kontrollerer et stort nok antall Bitcoin-noder, kan det potensielt “kutte av” visse deler av Bitcoin-nettverket (eller til og med bestemte noder) ved å fange opp all trafikk til det. Den partisjonerte delen av nettverket kunne da for eksempel lure seg til å akseptere en minoritetskjede – ikke den lengste kjeden – som gyldig, noe som igjen kunne åpne for å bruke dobbeltangrep..

Et partisjonsangrep motvirkes hvis en node i den partisjonerte delen av nettverket til og med bare har en forbindelse til en ærlig node i hovednettverket. Det ville da motta og videreformidle alle transaksjoner og blokkeringer og avvise minoritetskjeden til fordel for majoritetskjeden.

En måte å forstå dette på, og å gjøre partisjonsangrep vanskeligere å trekke, er å få noder til å etablere flere forbindelser til hverandre. Flere tilkoblinger har imidlertid mer krav til minne og båndbredde; det er en avveining.

Bitcoin Core 0.19.0 øker standardverdien for utgående forbindelser med to, men – smart – disse to ekstra tilkoblingene brukes bare til å videresende blokker – de videresender ikke transaksjoner eller ytterligere transaksjonsdata. Dette øker kravene til ekstra båndbredde minimalt, mens det fortsatt blir vanskeligere å partisjonere angrep.

Bloom-filtre utdatert

Bitcoin Core er en full implementering av noder, noe som betyr at den laster ned og verifiserer alle Bitcoin-blokker. Selv om dette er optimalt sikkert, gjør det det ikke veldig godt egnet for databehandlingsenheter med lite ressurs, som mobiltelefoner. Mobile lommebøker (samt noen stasjonære lommebøker) er derfor vanligvis “lette klienter”: disse laster bare ned transaksjoner og (deler av) blokker som berører dem spesifikt.

En måte å gjøre dette på er med Bloom Filters, som brukes av et par lommebøker i dag. Kort sagt, Bloom Filters er et kryptografisk triks som brukes av lette klienter for å be om relevante data fra mer eller mindre tilfeldige fullnoder på nettverket. Dessverre har det imidlertid blitt klart gjennom årene at Bloom-filtre er ganske uvennlige for personvern: De avslører i hovedsak alle adressene sine til hele noden. I tillegg kommer støtte til Bloom Filter-forespørsel til en kostnad i CPU og diskplass for full noder – uten direkte fordel for selve hele noden.

Spesielt av sistnevnte grunn støtter ikke Bitcoin Core 0.19.0 lenger Bloom Filter-forespørsler som standard. Brukere kan fortsatt bytte standard for å støtte Bloom Filters hvis de ønsker det.

Det er også verdt å merke seg at Bitcoin-nettverket som helhet nesten helt sikkert vil fortsette å støtte Bloom-filtre i årene som kommer, selv om ingen bytter til standardinnstillingene, ganske enkelt fordi eldre Bitcoin Core-noder vanligvis fortsetter å være i bruk i årevis etter at nye versjoner har blitt blitt løslatt.

Mer støtte for kompakt blokkeringsfiltrering på klientsiden

Et alternativ til Bloom Filters er en nyere løsning som kalles “kompakt blokkeringsfiltrering på klientsiden” (BIP 158). Kompakt blokkeringsfiltrering på klientsiden vender i hovedsak Bloom Filter-trikset på hodet. I stedet for lette lommebøker som lager filtre for å sende til fulle noder, lager fulle noder filtre for hver blokk. Lette klienter kan deretter bruke disse filtrene til å finne ut om transaksjoner som er relevante for dem, kan ha skjedd i en blokk. I så fall vil den lette lommeboken hente hele blokken og velge relevant transaksjonsdata ut av den.

Bitcoin Core 0.19.0 fortsetter å bevege seg mot å støtte kompakt blokkfiltrering på klientsiden. Bitcoin Core-noder kan allerede lage filtre lokalt, men Bitcoin Core 0.19.0-brukere kan nå også gjøre dem tilgjengelige gjennom en RPC (Remote Procedure Call) for applikasjoner som kjører på toppen av noden (som en lommebok).

Filtrene er imidlertid ennå ikke tilgjengelige over peer-to-peer-nettverket. Dette betyr at en Bitcoin Core 0.19.0-node ikke automatisk sender filtre til andre Bitcoin-brukeres lommebøker. Denne funksjonen kan legges til i en fremtidig Bitcoin Core-utgivelse – eller Bitcoin Core 0.19.0-brukere kan velge å tilby funksjonen gjennom et tilpasset program som kjører på toppen av deres Bitcoin Core-node..

Betalingsprotokollstøtte deaktivert fra GUI

Betalingsprotokollen (BIP 70) ble designet for flere år siden for å forbedre Bitcoins betalingsopplevelse. På toppen av den vanlige betalingen som sendes til Bitcoin-nettverket, vil en bruker og en selger kommunisere ytterligere detaljer om en betaling, for eksempel en menneskelig lesbar destinasjonsadresse (navnet på selgeren) og en refusjonsadresse i tilfelle noe skulle gå galt med kjøpet.

Mens Bitcoin Core integrerte Betalingsprotokollen i GUI, ble standarden aldri allment vedtatt. I stedet bruker de fleste lommebøker fortsatt den mer grunnleggende URI-ordningen (BIP 21) for å motta betalinger: Den klikkbare lenken eller det skannbare QR-kodeformatet som for eksempel kommuniserer betalingsadressen og beløpet. (Det eneste bemerkelsesverdige unntaket i dag er betalingsbehandler BitPay, som ikke støtter URI-ordningen, men bruker en modifisert versjon av BIP 70.)

Kanskje enda viktigere enn mangelen på adopsjon, har BIP 70 betalingsprotokollen lidd en rekke sikkerhets- og personvernproblemer i løpet av årene. Noen lommebøker har derfor aktivt avvist å implementere protokollen. Bitcoin Core hadde også planlagt å avskaffe BIP 70 i noen tid, ettersom vedlikehold av det ikke ble ansett som verdt innsatsen – men BitPays vedtakelse av det stoppet denne prosessen.

I Bitcoin Core 0.19.0 er BIP 70 fjernet fra GUI som standard. Bitcoin Core 0.19.0-brukere må kompilere noden sin med en spesiell konfigurasjon for fortsatt å bruke funksjonen.

Annen…

I tillegg til endringene nevnt ovenfor, kommer Bitcoin Core 0.19.0 med en lang liste med mindre forbedringer og moderniseringer. 

Det er nå mulig å starte en beskåret node umiddelbart fra installasjonen, for eksempel som lar brukere med liten diskplass enkelt starte en ny Bitcoin-node. Bitcoin Core 0.19.0 inkluderer også nye funksjoner for PSBT-protokollen (Partially Signed Bitcoin Transactions), som er nyttig for multisignatur- og CoinJoin-transaksjoner. På samme måte er det flere forbedringer i domenet til lommebokbeskrivere, noe som er spesielt nyttig for programmerere som jobber med Bitcoin-applikasjoner. Bitcoin Core 0.19.0-noder vil også akseptere og videresende transaksjoner som bruker en fremtidig SegWit-versjon for å sikre at kommende oppgraderinger vil gå greit.

For en mer omfattende liste over oppgraderinger, se også Utgivelsesmerknader for Bitcoin Core 0.19.0.1.

Takk til Sjors Provoost for tilbakemelding på denne artikkelen.