Se avete chiaro il funzionamento di Bitcoin saprete che i bitcoin, intesi come unità informatica, non esistono; quando ci si scambia dei bitcoin si aggiorna in realtà un registro pubblico che certifica la proprietà degli stessi (la blockchain), firmando le transazioni con la nostra chiave privata, l’unico dato informatico realmente in nostro possesso. Quindi, non spostiamo bitcoin ma ne aggiorniamo la proprietà.
Per eseguire queste transazioni abbiamo bisogno di un portafoglio, in inglese wallet. Esistono diversi wallet, il più delle volte open source e gratuiti, ma possiamo distinguerne sostanzialmente due tipologie: i full node wallet e i wallet SPV (Simplified Payment Verification).
Il primo wallet in assoluto, che ancora oggi gira sulla maggior parte dei nodi Bitcoin online, è il Bitcoin Core wallet, anche detto Satoshi Wallet, perché sviluppato direttamente da Satoshi Nakamoto. Potete scaricarlo direttamente dal sito web bitcoin.org o dalla repository Github di Bitcoin.
Il Bitcoin Core è un wallet di tipo full node: per utilizzarlo appieno è necessario scaricare l’intera blockchain di Bitcoin, che attualmente pesa circa 200 Gb. La blockchain può essere scaricata in due modalità differenti: con il txindex disabilitato o abilitato (txindex=1).
Cosa significa txindex abilitato?
Se scarichiamo il wallet Bitcoin Core e nel file di configurazione inseriamo il parametro txindex=1 scaricheremo l’intera blockchain di Bitcoin, comprendente tutte le transazioni svolte dai membri della rete. Tutte quante! Scaricare tutta la blockchain di Bitcoin ci dà un’esperienza utente completa e perfettamente in linea con la filosofia alla base del protocollo: possibilità di verificare in modo completo e indipendente tutte le transazioni, senza dover riporre fiducia in un altro nodo o altro sistema di verifica. Tutto ciò è utile ad esempio per evitare di accettare transazioni “doppie” (double spending) nel caso il sistema sia stato sottoposto a un double spending attack e dunque a un fork nascosto.
Per l’utente medio si può trattare di una precauzione eccessiva, che rasenta la paranoia, ma per una società operante nel settore (come ad esempio Coinbase) o per coloro che vogliono attivare un nodo Lightning network, è fondamentale avere nodi Bitcoin sempre aggiornati e contenenti la completa storia del network.
Con il txindex disabilitato (txindex=0 è il valore di default quando si avvia Bitcoin Core) il software scaricherà solo lo storico delle transazioni che riguardano gli indirizzi pubblici di cui l’utente conserva le chiavi private. Di conseguenza il peso sarà decisamente inferiore.
Esistono anche altri wallet full node, come ad esempio Bitcoin Knots, Libbitcoin o bitcoinj, proprio come esistono diversi software per la gestione della rete torrent.
Come abbiamo visto un wallet full node può arrivare a pesare anche diversi Gb (fino a 200Gb e oltre per un wallet full node completo) quindi era necessario sviluppare delle soluzioni che permettessero anche a chi ha delle risorse limitate, quali ad esempio bassa capacità di memoria o scarsa connessione Internet per il download dei blocchi, o dispositivi mobili, di poter gestire le transazioni bitcoin in autonomia e senza “custodia” delle chiavi private da parte di terzi.
A questo scopo vennero sviluppati i wallet SPV (Simplified Payment Verification) detti anche lightweight clients. A differenza di un full node wallet, che come detto scarica tutta la blockchain o quantomeno tutte le transazioni dei nostri indirizzi e le tiene in memoria, un client SPV scarica solamente le intestazioni (gli header) dei blocchi, non la parte di dati che riguarda le transazioni.
Se non vi è molto chiara la struttura di un blocco ve la illustro brevemente qui.
Un blocco è diviso in quattro grandi sezioni: Block Size, Block Header (le intestazioni), Transaction Counter e Transactions (le transazioni). Per il momento vi basti sapere che il “peso” del blocco sulla blockchain è principalmente dovuto alle transazioni e, in misura nettamente minore, al Block Header. Transaction Counter e Block Size occupano insieme dai 5 ai 15 byte, una cifra trascurabile. Considerando che mediamente in un blocco ci sono circa 1500 transazioni (fonte https://www.blockchain.com/charts/n-transactions-per-block) il cui peso è di circa 500 byte ciascuna, mentre l’intestazione del blocco occupa circa 80 byte, se ne deduce che, evitando di scaricare le transazioni, si ha un risparmi di spazio considerevole, minore di circa 1000 volte!
Quando ne ha bisogno, il client SPV verifica le transazioni appoggiandosi a dei full node. Abbiamo detto che il risparmio in termini di spazio è considerevole, ma questo minor consumo di risorse comporta anche una problematica: il wallet SPV deve infatti “fidarsi” di un nodo esterno, sperando che il nodo sia aggiornato e che il sistema non abbia subito un double spending attack. Il wallet SPV non può verificare in autonomia tutte le transazioni e di conseguenza non può verificare che una transazione bitcoin non sia stata effettuata due volte dallo stesso indirizzo.
Allo stato attuale un attacco double spending è una possibilità molto remota: comporterebbe un costo sostenibile solo da una grosso attore (uno Stato o una grossa azienda) e la sua attuazione ne vanificherebbe gli scopi, perché il valore del singolo bitcoin subirebbe una caduta vertiginosa, lasciando all’attaccante un pugno di mosche, o meglio, un pugno di bit.
Per questo motivo la tipologia di wallet più diffusa al giorno d’oggi è proprio quella SPV, complice anche il crescente utilizzo di smartphone per la gestione dei propri hot wallet bitcoin.
Quale wallet SPV scaricare?
Esistono tanti wallet SPV, più o meno completi, in un numero decisamente superiore a quelli full node.
Ne elencherò qualcuno ma questo elenco è del tutto incompleto e non considera gli hardware wallet.
Desktop Wallet
Electrum: il più noto client desktop SPV. Recentemente una versione malware di Electrum ha spinto degli utenti a esporre le loro chiavi private, quindi scaricate il wallet sempre da fonti attendibili (il sito web di Electrum) e diffidate delle imitazioni.
Wasabi: client sviluppato al fine di incrementare sostanzialmente la privacy delle transazioni e quindi la fungibilità di bitcoin. Wasabi wallet utilizza una tecnica chiamata CoinJoin, che combina tante transazioni provenienti da indirizzi differenti in un’unica grande transazione, e questo rende estremamente difficile collegare i mittenti ai destinatari.
Exodus Wallet: un multicurrency wallet con un’interfaccia molto user friendly. Anche Exodus permette l’esportazione delle chiavi private come Electrum e Wasabi.
Mobile Wallet
Edge Wallet: multicurrency wallet di cui ho curato la traduzione in italiano, quindi, in pieno conflitto d’interessi, lo consiglio vivamente. Scherzi a parte, è anch’esso un wallet non custodial, permette dunque di esportare ma anche importare le chiavi private, e queste non vengono gestite e neanche viste da Edge (zero knowledge system). Con Edge è anche possibile impostare dei nodi Bitcoin personalizzati, che verranno usati dall’applicazione per il download degli Header. Potete anche usare il nodo che avete sul PC.
Samurai Wallet: mobile wallet privacy oriented per Bitcoin, con una funzione molto interessante: la possibilità di inviare bitcoin offline, utilizzando un sistema open source di incapsulamento delle transazioni all’interno degli sms e dei messaggi inviati sulla rete mesh di txTenna.
________
Questo articolo ti è piaciuto?
Mandami qualche satoshi! BTC: 335Prmr6aTtWtWs5KGhtFqARzmdeG7BKx
Non vuoi inviarmi dei BTC? Offrimi un lavoro! Sto cercando un lavoro supplementare, possibilmente in ambito crypto, come articolista o traduttore dall’inglese all’italiano di app o articoli crypto oriented per supportare la mia famiglia. Se hai qualcosa da offrire scrivimi su info@davidcoen.it. Grazie!