Configurare un nodo di bootstrap per la nostra blockchain privata

3 minute read Published:

Connettività alla nostra blockchain privata ethereum

Connettività della rete blockchain

Abbiamo visto come creare la nostra blockchain privata e abbiamo visto come aggiungere i nodi che vogliamo facciano parte della nostra blockchain privata: è sufficiente che tutti siano inizializzati con lo stesso file di genesi.

Per fare in modo che altri nodi trovino la nostra blockchain privata e trovarsi tra di loro è necessario avviare un nodo di bootstrap (o bootnode) che altri possono utilizzare per trovare l’altro nella rete e / o su Internet.

Installazione su MacOSX

Nel momento in cui scrivo (31 Ottobre 2017) il comando per avviare un nodo non è stato compilato nella ricetta di brew per macOSX (potete facilmente verificarlo scrivendo bootnode e vedere se il comando viene trovato). Ecco quello che accade nel mio caso:

bootnode
-bash: bootnode: command not found

Allora ho scritto un brevissimo post per illustrare come compilare il progetto go-ethereum su macOSX e avere a disposizione il comando bootnode

Se lo avete letto e seguito sono passati circa 20 minuti e siamo pronti per andare avanti.

Creiamo il nostro nodo di bootstrap, usando il percorso completo al comando appena compilato. Nel mio caso:

$ ./go-ethereum-project/go-ethereum/build/bin/bootnode 
Fatal: Use -nodekey or -nodekeyhex to specify a private key

Come si può vedere il bootnode chiede una chiave. Ogni nodo, incluso un bootnode, viene identificato da un identificatore di enode. Questi identificatori sono derivati da una chiave. Quindi dobbiamo dare al bootnode la chiave. Poiché attualmente non ne abbiamo una, possiamo istruire il bootnode per generare una chiave (e archiviarlo in un file) prima di iniziare:

$ ./go-ethereum-project/go-ethereum/build/bin/bootnode --genkey=boot.key
$ ./go-ethereum-project/go-ethereum/build/bin/bootnode --nodekey=boot.key
INFO [10-31|18:15:20] UDP listener up                          
self=enode://5546e5056542d25cb4de0d5fb6ed78855d797995383c59913466f8651ae94b1dd0c69174db8a9299fd037d50f0824d6ee821f2e9a2e64e57c6164d17470889fe@[::]:30301

Ora abbiamo il nostro nodo di bootstrap online.

Con il bootnode on-line, avremo l’URL enode che gli altri nodi possono utilizzare per connettersi e scambiare informazioni.

Come già visto in precedenza, assicuriamoci di sostituire le informazioni dell’indirizzo IP visualizzate (nel mio caso [::]) l’IP accessibile esternamente in modo da ottenere l’URL utilizzabile da altri peer.

Installazione su GNU/Linux

Visto che in molti me l’hanno chiesto, ho deciso di installare anche un bootnode pubblico, in modo che anche altri entusiasti e curiosi possano collegarsi alla blockchain privata che ho creato e minare questi “ethereum privati”, testare contratti o scambi.

Visto che nel mio caso siamo su Debian e non ho trovato pacchetti precompilati, procederò come fatto per l’installazione del bootnode su macOSX:

$ sudo apt-get install golang
$ mkdir go-ethereum-project
$ cd go-ethereum-project
$ git clone https://github.com/ethereum/go-ethereum
$ cd go-ethereum/
$ make all

Dopo un po’ di tempo dovremmo avere tutti i file compilati.

A questo punto avviamo il nostro nodo, come fatto in precedenza:

$ cd /home/franz
$ ./go-ethereum-project/go-ethereum/build/bin/bootnode --genkey=boot.key
$  ./go-ethereum-project/go-ethereum/build/bin/bootnode --nodekey=boot.key
INFO [11-01|12:48:46] UDP listener up                          self=enode://876d37de9f48d8f075a9e4affb191d9d8eefa0a2463c66a139212d3ea22dc922846695107727b01669efeac8110ef335a7c484a6e0b2d71cb17dd9c27c582bea@[::]:30301

Abbiamo il nodo up. Proviamo a collegare i nostri nodi di mining: l’indirizzo pubblico a cui collegarsi è: enode://876d37de9f48d8f075a9e4affb191d9d8eefa0a2463c66a139212d3ea22dc922846695107727b01669efeac8110ef335a7c484a6e0b2d71cb17dd9c27c582bea@46.101.249.170:30301

Avviare i nodi di mining sulle macchine e connetersi

Ora sulla macchina di casa avvieremo un nodo (in questo caso ho diminuito la potenza di calcolo dedicando solo 1 thread) che si collegherà al bootnode:

$ geth --mine --minerthreads=1 --rpc --rpcaddr 0.0.0.0 --rpccorsdomain "*" --networkid 1999 --datadir /Users/casa/ethereum-2/datadir/ --bootnodes "enode://876d37de9f48d8f075a9e4affb191d9d8eefa0a2463c66a139212d3ea22dc922846695107727b01669efeac8110ef335a7c484a6e0b2d71cb17dd9c27c582bea@46.101.249.170:30301"

Farò lo stesso sul portatile

$ geth --mine --minerthreads=1 --rpc --rpcaddr 0.0.0.0 --rpccorsdomain "*" --networkid 1999 --datadir /Users/franz/Desktop/GNULINUX/ethereum-test1/datadir/ --bootnodes "enode://876d37de9f48d8f075a9e4affb191d9d8eefa0a2463c66a139212d3ea22dc922846695107727b01669efeac8110ef335a7c484a6e0b2d71cb17dd9c27c582bea@46.101.249.170:30301"
comments powered by Disqus