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 - 8332
Testnet:18333 - 18332
Regtest: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 <port> (default: 8332, testnet: 18332, regtest: 18443)
  • -conf=<file> Specify configuration file. Relative paths will be prefixed by datadir location. (default: bitcoin.conf)
  • -connect=<ip>
    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 getconnectioncount
1

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!