Rilasciata Bitcoin Core 0.17.0 : scopriamo le novità dell'ultima versione

Bitcoin Core version 0.17.0

Martedì della scorsa settimana è stata rilasciata la nuova versione ufficiale del software di Bitcoin: la versione Bitcoin Core 0.17.0, che è possibile scaricare direttamente da Bitcoincore.org

Questa è la diciassettesima versione del client software originale di Bitcoin lanciato da Satoshi Nakamoto quasi 10 anni fa. Il responsabile di questa ultima release è stato Wladimir van der Laan, con l'aiuto e l'organizzazione di circa 135 sviluppatori nell'arco di circa sette mesi. 

Bitcoin Core è il software di base dal quale è nato Bitcoin. Il suo scopo è quello di gestire i nodi nei quali viene memorizzata l'intera "memoria" della blockchain. In teoria chiunque può sviluppare il proprio software per la gestione di un nodo sulla blockchain: basta rispettare il protocollo Bitcoin. 

Il risultato di questi sette mesi di lavoro, include una serie di miglioramenti delle prestazioni e correzioni di bug, oltre a qualche novità. 

Scopriamo qui di seguito alcuni dei cambiamenti più rilevanti:

Migliorata la coin selection 

Con "coin selection" ci si riferisce all'algoritmo che decide quali bit di dati si uniscono, all'interno della blockchain, per creare una transazione dell'utente. In sostanza, questo metodo replica il processo di dare, ad esempio, una banconota da 10 euro a un cassiere per un articolo di 7 euro e ricevere in cambio 3 euro. 

All'interno di un wallet, ci sono 'blocchi separati ("output di transazione") per ogni pagamento ricevuto. La maggior parte dei blocchi rappresenta spesso importi diversi. Quando un pagamento viene effettuato da un wallet, vengono aggiunti diversi blocchi per ottenere un importo sufficiente per effettuare il pagamento, più la commissione. La somma dei diversi blocchi spesso non corrisponde all'importo esatto necessario, in questo caso viene aggiunto un indirizzo alla transazione e i rimanenti fondi vengono inviati nuovamente al wallet dal quale sono partiti. 

Fino alla versione precedente, venivano aggiunti insieme diversi blocchi. In seguito attraverso un calcolo veniva definita la commissione associata alla transazione. In alcuni casi, l'aggiunta della commissione alla transazione significava che i blocchi aggiunti non rappresentavano più una quantità sufficiente per poter dare il via alla transazione, in questi casi, era necessario includere un altro blocco.  

Bitcoin Core 0.17.0 introduce una modifica dell'algoritmo "Branch and Bound" progettato dall'ingegnere Mark Erhardt che lavora in BitGo. Questa novità offre due miglioramenti concreti. In primis, la commissione per ogni blocco viene calcolata prima che il blocco entri a far parte di una transazione, in questo modo si evita che nuovi blocchi vengano aggiunti successivamente. Secondariamente, l'algoritmo tenta di abbinare diversi blocchi in modo da sommare l'importo esatto necessario per effettuare la transazione, evitando la necessità di "cambiare indirizzi" (dove viene inviata la quantità rimanente). 

In questa versione di Bitcoin Core 0.17.0, c'è anche un miglioramento dell'algoritmo di selezione delle monete che include un miglioramento della privacy. Con Bitcoin è possibile ricevere più pagamenti allo stesso indirizzo Bitcoin. Questa possibilità però è negativa dal punto di vista della privacy perché è possibile risalire al fatto che tutti i pagamenti effettuati dall'indirizzo provengono dallo stesso utente. La situazione peggiora quando le diverse parti di un blocco vengono legate allo stesso indirizzo e utilizzate in transazioni diverse, collegandole a altre parti di blocchi che inizialmente non erano associati a quell'indirizzo. Questa situazione accade molto spesso con indirizzi utilizzati per esempio nelle campagne di donazione.

Per risolvere questo problema, Bitcoin Core 0.17.0 offre agli utenti la possibilità di assegnare priorità alle parti di un blocco aggiunte allo stesso indirizzo in una transazione e di lasciare qualsiasi altra parte fuori dalla transazione, laddove possibile.

Creare e usare nuovi wallet

Dalla versione 0.15.0, è stato possibile creare diversi wallet che operano indipendentemente l'uno dall'altro. Questi wallet hanno tutti i loro indirizzi Bitcoin, chiavi private e fondi separati. Gli utenti possono utilizzare i wallet per scopi diversi; ad esempio, un wallet può essere utilizzato per gli acquisti personali, un altro per la propria attività commerciale e un terzo solo per il trading. Questo rende la contabilità più facile e più conveniente, permettendo agli utenti di trarre vantaggio da una maggiore privacy in quanto i diversi wallet non possono essere collegati tra loro cercando di risalire all'identità dell'utente attraverso l'analisi della blockchain.

Tuttavia, fino ad ora, i nuovi wallet potevano essere creati solo all'avvio del nodo. Bitcoin Core 0.17.0 consente agli utenti di creare nuovi wallet quando lo desiderano e offre questa funzionalità direttamente nella interfaccia grafica del wallet Bitcoin Core.

Come ulteriore vantaggio, Bitcoin Core 0.17.0 introduce una funzionalità chiamata "Scantxoutset". Questa nuova funzionalità permette agli utenti di verificare rapidamente se il loro nuovo wallet include già monete (ad esempio perché le chiavi private sono state importate da un altro portafoglio) controllando le UTXO. Le UTXO sono transazioni che sono state inviate a un utente, ma non sono state spese da quell'utente (in inglese Unspent Transaction Output), invece di spendere molto tempo e dover riscansionare l'intera cronologia delle transazioni.

Aggiornamento a wallet gerarchico deterministico

Mentre le versioni Bitcoin Core precedenti alla 0.13.0 richiedevano che gli utenti eseguissero il backup di tutte le loro chiavi private, tutte le versioni di Bitcoin Core successive hanno offerto wallet gerarchici deterministici, in inglese Hierarchical Deterministic (HD). Gli utenti di un wallet HD devono solo memorizzare un  elenco di parole o una frase come backup.

Tuttavia, gli utenti di Bitcoin Core che hanno aggiornato il proprio sistema a Bitcoin Core 0.13.0 e versioni successive non sono stati in grado di creare nuovi wallet HD. Un'incompatibilità tra wallet non HD e wallet HD significava che alcuni utenti erano ancora obbligati a eseguire il backup di tutte le loro chiavi private.

Bitcoin Core 0.17.0 ora consente anche a questi utenti di eseguire l'aggiornamento al formato HD.

Watch Only Wallet con indirizzi Watch Only

In genere i wallet Bitcoin memorizzano le chiavi private, che consentono agli utenti di spendere le proprie monete. Ma Bitcoin Core supporta anche gli indirizzi "Watch Only" da qualche tempo. Le chiavi private per questo tipo di indirizzi non vengono memorizzate nel wallet, ma è possibile osservare i bitcoin presenti e inviati a quell'indirizzo, senza però poterli trasferire. Ciò consente agli utenti di accettare facilmente i pagamenti e di tenere traccia dei loro fondi mentre, ad esempio, le chiavi private vengono memorizzate offline. 

Bitcoin Core 0.17.0 porta questo concetto ad un altro livello perché consente agli utenti di creare specifici wallet Watch Only nei quali ogni indirizzo è un indirizzo Watch Only. Le conseguenze di questa modifica renderanno più facile per gli utenti l'uso di Bitcoin Core per tenere traccia dei fondi in un hardware wallet o in un wallet di carta.

Transazioni firmate parzialmente

Mentre la maggior parte delle transazioni sono semplici - un utente paga un altro - Bitcoin consente anche tipi più complessi di transazioni. Questi includono, per esempio, transazioni multi firma (multisig) in cui diversi utenti devono firmare per l'invio di fondi,  oltre a transazioni CoinJoin che migliorano la privacy permettendo a diversi utenti di unire le loro transazioni indipendenti in un'unica grande transazione.

Per facilitare meglio questo tipo di transazioni, Bitcoin Core 0.17.0 introduce il framework BIP 174 Bitcoin Transaction (PSBT) progettato da Andrew Chow. Questo framework consente agli utenti di Bitcoin Core di firmare parzialmente una transazione, aggiungendo anche dei metadati a tale transazione parzialmente firmata. Questi metadati possono essere utilizzati da un altro utente per completare la transazione.

PSBT sarà particolarmente utile se diventerà uno standard e verrà adottato da altri wallet. Un caso d'uso potenziale potrebbe essere, ad esempio, quello di consentire a un utente di proteggere i propri fondi bloccandoli in un account multisig in cui una transazione richiederebbe una firma creata dal wallet Bitcoin Core e una firma da un hardware wallet. Oppure potrebbe consentire agli utenti di Bitcoin Core di partecipare a schemi CoinJoin con altri utenti in modo da preservare la loro privacy. 

Per ora, la funzione di transazione parzialmente firmata è solo per gli utenti che gestiscono Bitcoin Core dalla riga di comando o tramite applicazioni connesse.

Potatura dall'interfaccia utente

Sulla blockchain di Bitcoin sono memorizzate tutte le transazioni di Bitcoin, attualmente la blockchain di Bitcoin ha una dimensione di oltre 180 gigabyte e continua a crescere. I nuovi utenti che si avvicinano al mondo Bitcoin e decidono di utilizzare Bitcoin Core devono scaricare e convalidare tutti questi dati.

Grazie a un trucco chiamato "blockchain pruning", una ‘potatura’ dei dati per mettere un limite alla loro crescita, gli utenti non devono necessariamente memorizzare questa mole di dati. Nella modalità di potatura, i nodi dimenticheranno automaticamente i vecchi dati delle transazioni e manterranno solo ciò che è necessario per operare in sicurezza. Fino ad ora, la modalità di potatura poteva essere abilitata solo tramite la riga di comando.

Per la prima volta, Bitcoin Core 0.17.0 offre una comoda interfaccia grafica per abilitare la potatura dal wallet, rendendolo più accessibile per gli utenti di Bitcoin che non hanno una competenza tecnica elevata e che desiderano eseguire un nodo completo sulla blockchain per ottenere un livello di sicurezza ottimale.

Per maggiori dettagli sulle novità in questa ultima versione di Bitcoin Core, è possibile consultare le note sulla versione di Bitcoin Core 0.17.0

Questo post è la traduzione dell'articolo Bitcoin Core 0.17.0 is released: here's what's new