Due nodi Bitcoin sullo stesso computer.
Non essere asociale.#
Durante lo studio di Bitcoin dalla teoria alla pratica e il relativo video-corso abbiamo fatto un pò di esperimenti.
Uno di questi è far comunicare due o più nodi sullo stesso computer.
Facendo riferimento all’articolo precedente, utilizziamo un nuovo demone e cerchiamo di farli comunicare.
Sappiamo che di default le porte del demone di Bitcoin sono 18444 e la 18443, per quanto riguarda l’ambiente di regtest.
Ambiente: Porta - Porta RPC
Mainnet:8333 - 8332Testnet:18333 - 18332Regtest:18444 - 18443
Quello che dobbiamo fare è creare un altro file di configurazione per il secondo nodo con un datadir differente e far comunicare i due nodi.
Passiamo alla action!
Questo è il mio percorso dove mi posizionerò
$ pwd
/Users/barno/Documents/bizantino
Al suo interno ho due cartelle, una un collegamento alla cartella di default di Bitcoin e l’altra è una cartella vuota pronta ad ospitare il secondo nodo.
$ ls -l
total 0
lrwxr-xr-x 1 barno staff 48 Jan 13 16:30 Bitcoin -> /Users/barno/Library/Application Support/Bitcoin
drwxr-xr-x 4 barno staff 128 Jan 13 17:23 Bitcoin_2
All’interno della cartella Bitcoin_2 creo un file bitcoin_nodo2.conf e inserisco questa configurazione.
datadir=/Users/barno/Documents/bizantino/Bitcoin_2
debug=1
regtest=1
# Options only for mainnet
[main]
# Options only for testnet
[test]
# Options only for regtest
[regtest]
port=28444
rpcport=28443
addnode=localhost:18444
Come vedete sono stati cambiati la porta e la rpcport.
Senza il file di configurazione sarebbe stato molto più prolisso e soggetto ad errori, come si può vedere dall’esempio sotto.
bitcoind -datadir=$PWD/regtest2 -regtest -debug=1 -rpcport=28443 -port=28444 -addnode=localhost:18444
Per avere informazioni sui parametri da utilizzare, potete sempre utilizzare bitcoind -help —
Le porte utilizzabili.
- -port Listen for connections on < port > (default: 8333, testnet: 18333, 18444 regtest)
- -rpcport Listen for JSON-RPC connections on
(default: 8332, testnet: 18332, regtest: 18443) - -conf =
Specify configuration file. Relative paths will be prefixed by datadir location. (default: bitcoin.conf) - -connect =
Connect only to the specified node; -noconnect disables automatic connections (the rules for this peer are the same as for -addnode). This option can be specified multiple times to connect to multiple nodes.
Passeremo al secondo nodo l’informazione necessaria per caricare il file di configurazione desiderato.
-conf=/Users/barno/Documents/bizantino/Bitcoin_2/bitcoin_nodo2.conf
avremo a disposizione due nodi sullo stesso computer.
questo percorso sarà diverso nel vostro computer /Users/barno/Documents/bizantino/Bitcoin_2.
Lanciamo quindi il demone di *default *(quello che abbiamo configurato nel precedente tutorial) e il secondo demone
$ bitcoind $ bitcoind -conf=$PWD/bitcoin_nodo2.conf
NB: utilizzo $PWD perchè sono nella stessa cartella del file bitcoin_nodo2.conf. Per utilizzare il client del secondo demone devo passare sempre il parametro
-conf
Ehi vi vedete?
$ bitcoin-cli -conf=$PWD/bitcoin_nodo2.conf getconnectioncount1
Sì si vedono, infatti il comando che conta le connessioni ha come risultato 1! Adesso facciamo la grande prova, miniamo 101 blocchi sul nodo di default e verifichiamo se sul nodo 2 sono visibili.
Per prima cosa dobbiamo ottenere un address nel nodo di default.
$ ADDR=`bitcoin-cli getnewaddress`
Lo salvo direttamente nella variabile d’ambiente ADDR così da agevolare la scrittura dei comandi successivi.
Per visualizzare il valore di $ADDR, possiamo utilizzare echo
$ echo $ADDR
2N6yRwpVGdFsD1gBBhGTE8ijVmNwiVz6myZ
Miniamo!
$ bitcoin-cli generatetoaddress 101 $ADDR
Otteniamo così un output molto corposo, ovvero 101 block header hash. Per verificare che i blocchi si siano propagati correttamente, conto il numero di blocchi sul secondo nodo.
$ bitcoin-cli -conf=$PWD/bitcoin_nodo2.conf getblockcount
101
Si! Stanno parlando e sono perfettamente sincronizzati.
Dove sono salvate le relative blockchain?
Nel demone di default troviamo i blocchi nel percorso predefinito:
/Users/barno/Library/Application Support/Bitcoin/regtest
Il secondo demone utilizza la -datadir specificata nel file di conf.
/Users/barno/Documents/bizantino/Bitcoin_2/regtest
Potrebbe essere interessante iniziare a fare delle transazioni tra due nodi? Direi di si!
Bitcoin dalla teoria alla pratica