Nethermind è un "execution client" per Ethereum, scritto in C#, che può essere utilizzato per scaricare la blockchain, realizzare dApp o attivare un validatore per svolgere l'attività di staking e incassare così le ricompense previste. Si pone dunque come alternativa al più popolare Go Ethereum, con il quale rimane comunque pienamente interoperabile. In questa guida vedremo proprio come installare e configurare Nethermind su un qualsiasi PC
Configurare un nodo Ethereum con Nethermind: cosa serve
Chiunque può partecipare alla rete Ethereum installando un client compatibile. È sufficiente disporre di:
- un computer da dedicare a questa attività
- un minimo di manualità con la linea di comando in ambiente Linux
- un collegamento veloce a Internet (almeno 10 megabit in download e 2 megabit in upload), senza limitazione al volume di dati
Per tutti i dettagli, ti invito a consultare la mia guida allo staking di Ethereum: i requisiti di sistema, infatti, sono gli stessi.
Configurare un nodo Ethereum: quale programma scegliere
Il programma necessario per trasformare il PC in un nodo Ethereum è detto "client Ethereum". Ne esistono molteplici, tutti compatibili fra loro.
Nel corso della presente guida, configureremo Nethermind
Configurare un nodo Ethereum: testnet e mainnet
La rete Ethereum "reale", chiamata mainnet, è affiancata da molteplici reti di prova, chiamate testnet. Ogni rete ha le proprie monete (chiamate Ether, con simbolo ETH), con la differenza che solo quelle della mainnet hanno un controvalore economico reale. Le altre reti utilizzano "soldi del Monopoli", senza alcun valore e "spendibili" solo per transazioni di test.
L'altra differenza fondamentale da tenere presente è la dimensione delle rispettive blockchain:
- la blockchain della mainnet si aggira, a settembre 2024, attorno a 1.2 TB (in rapidissima crescita)
- le blockchain delle testnet contengono invece pochi gigabyte
Se desideri attivare un nodo Ethereum devi quindi scegliere subito se partecipare alla mainnet oppure ad una testnet. Raccomando vivamente di prendere dimestichezza dapprima con una testnet, non fosse altro per la quantità significativa di spazio su disco occupata dalla blockchain mainnet e, di conseguenza, dei lunghi tempi necessari per scaricare i dati in locale e diventare operativi.
Configurare un nodo Ethereum con Nethermind, passo 1: Preparare il sistema
Per iniziare è necessario seguire i seguenti passi che ho dettagliato nella guida allo staking di Ethereum:
- Installare Ubuntu
- Avviare il Terminale
- Aggiornamento completo
- Accesso SSH (opzionale)
- Diventare root
Prima di proseguire, assicurati quindi di essere davanti al Terminale del sistema sul quale installeremo Nethermind e, lo ripeto!, di avere i privilegi di root
Configurare un nodo Ethereum con Nethermind, passo 2: Installare i pre-requisiti
Procediamo installando gli altri pacchetti di utilità che impiegheremo di seguito:
apt install curl libsnappy-dev software-properties-common -y
Configurare un nodo Ethereum con Nethermind, passo 3: Installare Nethermind
Procediamo aggiungendo il Personal Package Archive (PPA) ufficiale di Nethermind:
add-apt-repository ppa:nethermindeth/nethermind
Ora sfruttiamolo per installare il software vero e proprio:
apt update && apt install nethermind -y
Configurare un nodo Ethereum con Nethermind, passo 4: Creare l'utente per Nethermind
Creiamo ora una nuova utenza con privilegi minimi: sarà quella che eseguirà materialmente l'applicazione. Allo scopo, impartiamo i comandi seguenti per creare l'utente di nome nethermind
, la cartella /var/lib/nethermind
e concedergli pieno accesso alla stessa:
useradd --create-home --home /home/nethermind --shell /bin/false nethermind
mkdir -p /var/lib/nethermind
chown -R nethermind:nethermind /var/lib/nethermind
chmod u=rwx,g=rx,o= /var/lib/nethermind -R
I comandi indicati poco fa non mostrano alcun messaggio, se tutto va bene.
Se però vogliamo verificarlo puntualmente, assicuriamoci che la cartella sia stata creata e che abbia il proprietario e i permessi attesi impartendo:
ls -la /var/lib/ | grep nethermind
Per controllare che l'utente esista, invece:
cat /etc/passwd | grep nethermind
Configurare un nodo Ethereum con Nethermind, passo 5: Eseguire Nethermind come servizio
Per eseguire Nethermind come servizio ad ogni avvio del PC dobbiamo creare un file di configurazione. Il modo più facile per raggiungere l'obbiettivo è di scaricare quello già pronto.
Per la testnet:
curl -Lo /etc/systemd/system/nethermind.service https://turbolab.it/scarica/460
Per la mainnet:
curl -Lo /etc/systemd/system/nethermind.service https://turbolab.it/scarica/459
Ispezioniamo poi il suo contenuto:
cat /etc/systemd/system/nethermind.service
[ nota tecnica: la configurazione qui proposta espone sia il WebSocket, sia il tradizionale endpoint HTTP. Può quindi essere utilizzato anche per lo staking con i vari client dedicati ]
[ seconda nota tecnica: il servizio esegue Nethermind lanciando direttamente /usr/share/nethermind/nethermind
. Questo permette di aggirare un bug che impedirebbe agli utenti non-root di lanciare il programma ]
Configurare un nodo Ethereum con Nethermind, passo 6: Eseguire Nethermind automaticamente all'avvio
Ora che abbiamo preparato il servizio, facciamo in modo che parta automaticamente all'avvio del computer:
systemctl enable nethermind
Per sincerarcene, riavviamo il sistema:
reboot
Terminato il riavvio, assicuriamoci di ri-acquisire i privilegi di root (sudo -s
), poi visualizziamo lo stato del servizio:
service nethermind status
La schermata dovrebbe mostrare il messaggio active (running)
Battere Q
sulla tastiera per uscire.
Nel frattempo, la ventola del PC sarà partita con irruenza: digitiamo top
e scopriamo che il responsabile è il processo di nome nethermind
, che utilizza intensamente la CPU e sta scaricando la blockchain dagli altri nodi della rete
È una situazione assolutamente normale mentre il nodo si sincronizza con la rete, e potrebbe durare parecchie ore: non so dire esattamente "quante", perché io ho lasciato il PC a lavorare tutta notte e l'indomani aveva terminato. Questo vale per le testnet: lavorando con la mainnet, invece, saranno necessari parecchi giorni, forse persino una settimana.
Configurare un nodo Ethereum con Nethermind, passo 7: Blindare il server con il firewall
Generalmente, ritengo superfluo l'uso del firewall su Linux. Tuttavia, in questa circostanza, faccio un'eccezione. Attiviamo dunque il firewall e apriamo solo le porte strettamente indispensabili.
Chi interagisca con il PC sul quale è in esecuzione Nethermind via SSH, e non con tastiera, mouse e schermo collegati direttamente, deve innanzitutto lasciar passare il traffico SSH:
ufw allow 22/tcp
Per essere assolutamente chiari: il comando appena segnalato NON è necessario per chi utilizzi la tastiera, il mouse e lo schermo collegati direttamente al PC che esegue Nethermind.
In ogni caso, invece, dobbiamo aprire le porte proprie di Nethermind:
ufw allow 30303/tcp && ufw allow 30303/udp && ufw --force enable
Visualizziamo la situazione aggiornata con ufw status
Per maggiori informazioni:
Configurare un nodo Ethereum con Nethermind, passo 8: Aprire le porte sul router
In questo momento, il nostro nodo non sta funzionando in modo ottimale: dobbiamo infatti "aprire" le relative porte sul router. Più precisamente: dobbiamo svolgere il port forwarding dal router verso il PC che ospita il nodo Ethereum. Allo scopo, seguiamo questa guida:
» Leggi: Come aprire le porte sul router/modem: la guida definitiva al port forwarding (inoltro delle porte)
Le specifiche porte da aprire sono le seguenti:
30303 TCP
30303 UDP
Dopo aver svolto la configurazione, verifichiamo esplicitamente che sia andata a buon fine tramite Shields Up!. Il link diretto è il seguente:
» Vedi: test porta 30303
Il servizio deve riportare la dicitura OPEN!
» Leggi anche: Come testare se una porta del router/firewall è aperta? guida al Port scan con Shields Up!
Configurare un nodo Ethereum con Nethermind, passo 9: Installare un "consensus client"
Arrivati a questo punto, la nostra installazione di Nethermind è perfettamente funzionante. Ispezionando i log, però, noteremo la presenza di avvisi simili a questo:
No incoming messages from the consensus client that is required for sync.
Questo dipende dal fatto che dobbiamo ora affiancare a Nethermind un secondo programma, chiamato consensus client. Ne esistono molteplici: Lighthouse, Lodestar, Teku, Nimbus, Prysm. In particolare, ho proposto la guida all'installazione di Nimbus nel già ricordato articolo sullo staking di Ethereum.
Addendum: Mantenere aggiornato il sistema
Periodicamente, dovremo aggiornare tutto il sistema. Il comando zzupdate torna sicuramente utile allo scopo, poiché aggiorna il sistema operativo e i pacchetti installati tramite apt... fra i quali c'è anche Nethermind, che verrà dunque aggiornato insieme al resto.
È importante farlo periodicamente, poiché le nuove versioni includono correzioni di sicurezza, oppure modifiche indispensabili per continuare a operare in seguito ai frequenti hard fork, ovvero le modifiche più profonde al protocollo, che rendono incompatibili i vecchi client.
Conclusioni, fonti e riferimenti
In questa guida abbiamo visto come configurare un nodo Ethereum con Nethermind. La procedura è sicuramente un po' articolata, ma è una buona occasione per tutti noi smanettoni di provare in prima persona come funziona Ethereum, ed è un componente indispensabile per chi si stia avvicinando al mondo della programmazione su blockchain.
Questo articolo è frutto della mia esperienza diretta con la sola testnet, poiché non dispongo di un SSD abbastanza capiente da ospitare tutta la blockchain della mainnet. Ogni feedback da chiunque abbia attivato Nethermind su mainnet è dunque particolarmente gradito.