This project is maintained by valerio-vaccaro
Avere un nodo Bitcoin è fondamentale in quanto consente con la massima privacy di:
Un vecchio computer può essere riciclato come nodo, in caso di laptop si consiglia di rimuovere la batteria che, posta sempre sotto carica, potrebbe costituire un rischio. Il grande vantaggio è dato dal costo pari a zero o limitato solo al disco più capiente.
Raspberry pi è una scheda ARM molto utilizzata per la realizzazione di sistemi IoT e nodi, il costo eccessivo e la necessità di un disco su presa USB tuttavia la rendono non la migliore delle scelte possibili in termini di performance e di stabilità.
Odroid-M1 è una scheda ARM performante e con uno slot interno per l’aggiunta di memoria di massa aggiuntiva.
Con un budget molto ridotto 30-100 euro è possibile acquistare un Thin Client usato (su ebay) che associa bassi consumi a performance sufficienti a far girare il nodo.
Come esempi di Thin Client sono stati testati i seguenti modelli:
Installare meno software possibile su di un nodo limita i possibili attacchi e rende il sistema più semplice da mantenere.
Online si trovano soluzioni preconfezionate (Umbrel, Mynode, …) che mascherano i check di sicurezza ed aggiungono software e script (ad esempio docker) di difficile controllo. In queste lezioni porremo l’attenzione sulla creazione di un nodo a mano ovvero installando manualmente tutti i software necessari.
La prima scelta da fare è il sistema operativo, il consiglio è di utilizzare Linux in una versione LTS ovvero in cui sia garantito supporto per un numero sufficientemente lungo di anni. La mia personale scelta ricade su Debian 12.
Il sistema operativo scelto va quindi installato sul computer e vanno aggiornati tutti i pacchetti (l’aggiornamento è qualcosa che ci seguirà durante tutta la vita del nodo).
Si consiglia anche di installare tor ( e/o altra VPN se necessaria) ed ssh così da permettere la manutenzione remota del nodo.
Un gruppo di continuità infine potrebbe salvare il nodo da bruschi cali di corrente evitando di lasciare bitcoin e gli altri software in uno stato inconsistente.
Scarichiamo core, gli hash e le firme.
wget https://bitcoincore.org/bin/bitcoin-core-28.0/bitcoin-28.0-x86_64-linux-gnu.tar.gz
wget https://bitcoincore.org/bin/bitcoin-core-28.0/SHA256SUMS
wget https://bitcoincore.org/bin/bitcoin-core-28.0/SHA256SUMS.asc
In caso si utilizzi una board dotata di architettura arm il pacchetto andrà corretto in bitcoin-28.0-aarch64-linux-gnu.tar.gz
ovvero nel medesimo pacchetto ma compilato per l’architettura arm a 64 bit (aarch64) che è proprio quella utilizzata da odroid.
A questo punto possiamo controllare che uno degli hash in SHA256SUM corrisponda all’archivio scaricato.
sha256sum --ignore-missing --check SHA256SUMS
Il risultato ci segnala che è stata trovata una corrispondenza per l’archivio scaricato.
bitcoin-28.0-x86_64-linux-gnu.tar.gz: OK
Verifichiamo ora le firme del file SHA256SUM, prima se necessario procuriamoci le chiavi ed importiamole.
git clone https://github.com/bitcoin-core/guix.sigs
gpg --import guix.sigs/builder-keys/*
Ed infine verifichiamo le firme.
gpg --verify SHA256SUMS.asc
Se vedremo parecchie volte la scritta gpg: Good signature from ...
vuol dire che abbiamo trovato delle firme valide.
Procediamo allo scompattamento e all’installazione
tar xzvf bitcoin-28.0-x86_64-linux-gnu.tar.gz
sudo install -m 0755 -o root -g root -t /usr/local/bin bitcoin-28.0/bin/*
E ci siamo, ora abbiamo bitcoind
, bitcoin-cli
e le altre utilità pronte per essere lanciate.
Per ora lanciamo bitcoind
e vedremo un po di log. Bitcoin incomincia a sincronizzarsi ed ora sarà present una directory con la blockchain e tutte le configurazioni in ~/.bitcoin/
.
Da un altro terminale possiamo controllare il funzionamento di bitcoind lanciando il comando tail -f ~/.bitcoin/debug.log
.
Come abbiamo già visto precedentemente la directory in cui Bitcoin core salva le configurazioni e la blockchain è directory ~/.bitcoin/
per quanto riguarda il sistema operativo Linux, nel caso si volesse cambiare la posizione di salvataggio si possono usare differenti approcci:
ln -s
,datadir
specificando la directory di destinazione.Bitcoin Core supporta tre tipologie diverse di reti a cui connettersi:
mainnet
, questa è la classica rete a cui tutti siamo abituati ed è il default per core,testnet
, questa rete è analoga a mainnet ma i token non hanno alcun valore, il mining viene sempre effettuato ma in caso di assenza di blocchi per 20 minuti la difficoltà viene fatta precipitare (soffre di reorg spesso importanti),regtest
, in questa modalità si ha una piccola blockchain privata che parte sempre da zero ed in cui è possibile minare a difficoltà minima (serve per test locali).Un altro comando utile è daemon
che, se settato, non mantiene il log di bitcoin core collegato alla console attuale, per vedere il funzionamento sarà sempre possibile usare il comando tail -f ~/.bitcoin/debug.log
.
Tutte le configurazioni possono essere lanciate da linea di comando o tramite il file ~/.bitcoin/bitcoin.conf
, un file compatibile con un setup casalingo (ovvero in cui voglio mantenere il consumo di risorse al minimo) potrebbe essere il seguente.
file di configurazione
daemon=1
blocksonly=1
maxconnections=20
maxuploadtarget=500
txindex=1
blockfilterindex=1
In cui il:
daemon=1
blocksonly=1
txindex=1
maxuploadtarget=500
txindex=1
blockfilterindex=1
L’elenco completo delle funzionalità si può trovate su https://jlopp.github.io/bitcoin-core-config-generator
Si può anche fare tutto con un singolo comando da terminale.
cat >bitcoin.conf <<EOL
daemon=1
blocksonly=1
maxconnections=20
maxuploadtarget=500
txindex=1
blockfilterindex=1
EOL
Qualora si abbia a disposizione un altro nodo già sincronizzato si puo usare l’opzione connect
per collegarsi SOLO ED ESCLUSIVAMENTE a questo nodo, se tale nodo è in rete locale si guadagna tempo e banda con questa semplice configurazione.
Dalla release 26 core supporta crittazione delle comunicazioni tra i nodi con l’opzione v2transport
.
Tutte le configuarazioni mostrate sono relative a clearnet, le configurazioni per tor saranno oggetto di un’altra lezione.
Installiamo Electrs
che è un electrum server basato su Rust
, il primo step è quindi installare tale linguaggio.
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
Installiamo anche clang ed il pacchetto build-essential.
apt update
apt install clang cmake build-essential -y
Scarichiamo l’ultima versione (attualmente la 0.10.5) da Github.
VERSION="0.10.5"
git clone --branch v$VERSION https://github.com/romanz/electrs.git
cd electrs
Importiamo la chiave dello sviluppatore di Electrs
e verifichiamo la firma dei commit Github.
curl https://romanzey.de/pgp.txt | gpg --import
git verify-tag v$VERSION
Se la firma è corretta possiamo passare alla compilazione …
cargo build --locked --release
e poi all’installazione.
sudo install -m 0755 -o root -g root -t /usr/local/bin ./target/release/electrs
Per configurare Electrs
creiamo il file config.toml
con il seguente contenuto.
# bitcoin core configuration
auth = "username:password"
daemon_rpc_addr = "127.0.0.1:8332"
daemon_p2p_addr = "127.0.0.1:8333"
# electrs configuration
db_dir = ".electrum"
network = "bitcoin"
electrum_rpc_addr = "127.0.0.1:50001"
log_filters = "INFO"
Si può anche fare tutto con un singolo comando da terminale.
cat >config.toml <<EOL
# bitcoin core configuration
auth = "username:password"
daemon_rpc_addr = "127.0.0.1:8332"
daemon_p2p_addr = "127.0.0.1:8333"
# electrs configuration
db_dir = ".electrum"
network = "bitcoin"
electrum_rpc_addr = "127.0.0.1:50001"
log_filters = "INFO"
EOL
Possiamo lanciare Elects con il comando
electrs --conf config.toml
e aspettare che electrs finisca di indicizzare tutti i blocchi.
TBD
TBD
Un utile rete per impratichirsi è testnet
che differisce da mainnet
in quanto:
Molti wallet (green, electrum, specter, sparrow, …) supportano testnet e possono essere usati per:
Alcuni tool utili (autopromozione) per testnet:
Ci sono molto altri tool e siti web che supportano testnet oltre ai più importanti block explorer.
Bitcoin-cli è l’utilità a line di comando per interagire con Bitcoin Core.
I comandi hanno il formato:
bitcoin-cli [options] <command> [params]
e si può sempre usare help
per avere la lista dei comandi o informazioni su di uno specifico comando.
Un corso completo sull’uso di Bitcoin da linea di comandi si può trovare all’indirizzo Learning-Bitcoin-from-the-Command-Line.
L’installazione del nodo è divisa su più lezioni, qui un elenco di quelle già tenute:
Data | Note |
---|---|
240108-2100 | Selezione dell’hardware |
240115-2200 | Installazione di core e verifica firme |
240122-2200 | Configurazione minimale |
240129-2200 | Testnet |
240205-2200 | bitcoind-cli |
240711-2200 | electrs |