Nodi e client
Affinché Ethereum funzioni in modo decentralizzato, serve una rete distribuita di nodi in grado di verificare i dati dei blocchi e delle transazioni. Serve un'applicazione, detta client, sul dispositivo che "esegua" un nodo.
Prerequisiti
È necessario conoscere il concetto di rete decentralizzata prima di approfondire le informazioni ed eseguire un'istanza di un client Ethereum. Consulta la nostra introduzione a Ethereum.
Che cosa sono i nodi e i client?
Il termine "nodo" si riferisce a un software noto come client. Un client è una implementazione di Ethereum che verifica tutte le transazioni presenti in un blocco, facendo in modo che la rete rimanga sicura e i dati siano accurati.
Puoi avere una panoramica in tempo reale della rete Ethereum dando un'occhiata a questa mappa dei nodi.
Molte implementazioni dei client Ethereum sono disponibili in una varietà di lingue. Hanno in comune il fatto di seguire una specifica ufficiale che determina come funziona la rete Ethereum e la blockchain.
Diagramma semplificato delle caratteristiche di un client Ethereum.
Tipologie di nodo
Se vuoi eseguire un nodo, devi sapere che esistono diverse tipologie di nodi, che utilizzano i dati in modo diverso. I client possono eseguire 3 diversi tipi di nodi: leggero, completo e archivio. Esistono anche diverse strategie di sincronizzazione per velocizzare i tempi. La sincronizzazione è la velocità con cui si ottiene lo stato più aggiornato di Ethereum.
Nodo completo
- Memorizza tutti i dati della blockchain.
- Partecipa alla convalida dei blocchi, verifica tutti i blocchi e gli stati.
- Tutti gli stati possono essere derivati da un nodo completo.
- È al servizio della rete e fornisce dati su richiesta.
Nodo leggero
- Memorizza la catena di intestazione e richiede tutto il resto.
- Può verificare la validità dei dati in base alle radici dello stato nelle intestazioni dei blocchi.
- Utile per dispositivi a bassa capacità, come dispositivi embedded o telefoni cellulari, che non possono permettersi di memorizzare gigabyte di dati della blockchain.
Nodo archivio
- Memorizza tutto ciò che è presente nel nodo completo e crea un archivio degli stati storici. Necessario se si desidera eseguire interrogazioni, ad esempio del saldo di un account al blocco numero 4.000.000.
- Si tratta di terabyte e terabyte di dati, che rendono i nodi archivio meno attraenti per gli utenti medi, ma possono essere utili per servizi come block explorer, fornitori di portafogli e analisi della catena.
La sincronizzazione dei client in qualsiasi modalità diversa dall'archivio comporterà l'eliminazione dei dati della blockchain. Significa che non rimarrà un archivio di tutti gli stati storici, ma il nodo completo è in grado di ricostruirli su richiesta.
Perché si dovrebbe eseguire un nodo Ethereum?
L'esecuzione di un nodo consente di utilizzare Ethereum in modo affidabile e privato, supportando l'ecosistema.
Vantaggi per lo sviluppatore
Eseguire un nodo permette di utilizzare Ethereum in modo veramente privato, autosufficiente e affidabile. Non è necessario affidarsi alla rete perché è possibile verificare i dati da soli con il proprio client. "Non fidarti, verifica" è un mantra noto per la blockchain.
- Il nodo verifica in autonomia tutte le transazioni e i blocchi in base alle regole del consenso. Significa che non devi fare affidamento su altri nodi della rete o fidarti completamente di loro.
- Non dovrai comunicare i tuoi indirizzi e saldi a nodi casuali. Tutto può essere controllato con il proprio client.
- La dapp che si sviluppa può essere più sicura e privata se si utilizza un nodo personale. Metamask, MyEtherWallet e altri portafogli possono essere facilmente impostati per puntare al nodo locale.
Vantaggi per la rete
Avere una serie diversificata di nodi è importante per la salute, la sicurezza e la resilienza operativa di Ethereum.
- I nodi forniscono accesso ai dati della blockchain per i client leggeri che dipendono da essa. In caso di picchi di utilizzo, per agevolare la sincronizzazione dei nodi leggeri, è necessario che i nodi completi siano in quantità sufficiente. I nodi ridotti non memorizzano l'intera blockchain, ma verificano i dati attraverso le radici di stato nelle intestazioni dei blocchi. Se ne hanno bisogno, possono richiedere ulteriori informazioni ai blocchi.
- I nodi completi applicano le regole di consenso Proof of Work e quindi non possono essere ingannati ad accettare blocchi che non li seguono. Questo fornisce ulteriore sicurezza nella rete, perché se tutti i nodi fossero leggeri, cioè non effettuassero una verifica completa, i miner potrebbero attaccare la rete e, ad esempio, creare blocchi con ricompense più elevate.
Se si esegue un nodo completo, l'intera rete di Ethereum ne beneficia.
Esecuzione di un nodo proprio
Progetti
Seleziona un client e segui le istruzioni
ethnode - Esecuzione di un nodo Ethereum (Geth o Parity) per lo sviluppo locale
DAppNode - Sistema operativo per l'esecuzione di nodi Web3, inclusa Ethereum, su un computer dedicato.
Risorse
- Running Ethereum Full Nodes: A Complete Guide Nov 7, 2019 - Justin Leroux
- Node Configuration Cheat Sheet Jan 5, 2019 - Afri Schoeden
- How To Install & Run a Geth Node Oct 4, 2020 - Sahil Sen
- How To Install & Run a OpenEthereum (fka. Parity) Node Sept 22, 2020 - Sahil Sen
Alternative
Eseguire un nodo può essere difficile e non sempre è necessario eseguire un'istanza propria. In questo caso, è possibile utilizzare un provider di API terzo, come Infura, Alchemy o QuikNode. In alternativa, ArchiveNode è un nodo archivio finanziato dalla community che spera di portare i dati di archivio sulla blockchain Ethereum a sviluppatori indipendenti che altrimenti non potrebbero permetterselo.
Se qualcuno esegue un nodo Ethereum con un'API pubblica nella tua community, puoi puntare i tuoi portafogli leggeri (come MetaMask) a un nodo della community tramite RPC personalizzato e ottenere più privacy rispetto a terze parti casuali affidabili.
D'altro canto, se esegui un client, puoi condividerlo con i amici che potrebbero averne bisogno.
Client
Ethereum è progettato per offrire client diversi, sviluppati da team diversi, utilizzando linguaggi di programmazione diversi. Questo rende la rete più forte e diversificata. L'obiettivo ideale è raggiungere la diversità senza che nessun client prevalga, per ridurre eventuali punti di errore singoli.
Questa tabella riassume i diversi client. Tutti sono attivi, gestiti e hanno superato test dei client.
Client | Linguaggio | Sistemi operativi | Reti | Strategie di sincronizzazione | Cancellazione dello stato |
---|---|---|---|---|---|
Geth | Go | Linux, Windows, macOS | Mainnet, Görli, Rinkeby, Ropsten | Fast, Full | Archive, Pruned |
OpenEthereum | Rust | Linux, Windows, macOS | Mainnet, Kovan, Ropsten e altre | Warp, Full | Archive, Pruned |
Nethermind | C#, .NET | Linux, Windows, macOS | Mainnet, Görli, Ropsten, Rinkeby e altre | Fast, Full | Archive, Pruned |
Besu | Java | Linux, Windows, macOS | Mainnet, Rinkeby, Ropsten e Görli | Fast, Full | Archive, Pruned |
Trinity | Python | Linux, macOS | Mainnet, Görli, Ropsten e altre | Full, Beam, Fast/Header | Archive |
Per ulteriori informazioni sulle reti supportate, consulta reti Ethereum.
Vantaggi delle diverse implementazioni
Ogni client ha vantaggi e casi d'uso unici, quindi è necessario sceglierne uno in base alle proprie preferenze. La diversità consente implementazioni in base alle diverse caratteristiche e al pubblico di utenti. È consigliabile scegliere un client in base a funzionalità, supporto, linguaggio di programmazione o licenze.
Go Ethereum
Go Ethereum (abbreviato Geth) è una delle implementazioni originali del protocollo Ethereum. Attualmente, è il client più diffuso con la più grande base di utenti e varietà di strumenti per utenti e sviluppatori. È scritto in Go, completamente open source e concesso in licenza con GNU LGPL v3.
OpenEthereum
OpenEthereum è un client Ethereum veloce, ricco di funzionalità e avanzato basato su CLI. È creato per assicurare fornire l'infrastruttura essenziale per servizi veloci e affidabili che richiedono una rapida sincronizzazione e massimi tempi di attività. L'obiettivo di OpenEthereum è quello di essere il client Ethereum più veloce, leggero e sicuro. Fornisce una base di codice pulita e modulare per:
- personalizzazione facile.
- integrazione leggera in servizi o prodotti.
- memoria e impronta di archiviazione minime.
OpenEthereum è sviluppato utilizzando l'innovativo linguaggio di programmazione Rust e concesso in licenza con GPLv3.
Nethermind
Nethermind è un'implementazione di Ethereum creata con lo stack tecnologico C # .NET, in esecuzione su tutte le principali piattaforme, incluso ARM. Offre prestazioni eccellenti con:
- una macchina virtuale ottimizzata
- accesso allo stato
- networking e funzionalità avanzate come dashboard Prometheus/Graphana, supporto per la registrazione aziendale seq, tracciamento RPC JSON e plug-in di analisi.
Inoltre, Nethermind vanta una documentazione dettagliata, un efficace supporto per gli sviluppatori, una community online e un supporto disponibile 7 giorni su 7, 24 ore al giorno per gli utenti premium.
Besu
Hyperledger Besu è un client Ethereum di livello enterprise per reti pubbliche e autorizzate. Dispone di tutte le caratteristiche della rete Ethereum principale, dal tracciamento a GraphQL, assicura monitoraggio avanzato ed è supportato da ConsenSys, sia nei canali della community aperti che attraverso contratti di assistenza commerciali per le imprese. È scritto in Java con licenza Apache 2.0.
Modalità di sincronizzazione
- Completa – scarica tutti i blocchi (comprese intestazioni, transazioni e ricevute) e genera lo stato della blockchain in modo incrementale eseguendo ogni blocco.
- Veloce (predefinita) – scarica tutti i blocchi (comprese intestazioni, transazioni e ricevute), verifica tutte le intestazioni, scarica lo stato e lo verifica in base alle intestazioni.
- Leggera – scarica tutte le intestazioni dei blocchi, i dati dei blocchi e ne verifica alcuni in modo casuale.
- Sincronizzazione Warp – ogni 5.000 blocchi, i nodi acquisiranno un'istantanea critica consensuale dello stato di quel blocco. Qualsiasi nodo può recuperare queste istantanee attraverso la rete, attivando una sincronizzazione veloce. Ulteriori informazioni su Warp
- Sincronizzazione Beam – modalità di sincronizzazione che consente maggiore velocità. Non richiede lunghe attese per la sincronizzazione, perché recupera i dati nel tempo. Maggiori informazioni su Beam
- Sincronizzazione delle intestazioni – è possibile utilizzare un checkpoint attendibile per iniziare la sincronizzazione da un'intestazione recente e quindi affidarsi a un processo in background per colmare le lacune nel tempo
Il tipo di sincronizzazione viene definito durante la configurazione, in questo modo:
Impostazione della sincronizzazione leggera in GETH
geth --syncmode "light"
Impostazione della sincronizzazione delle intestazioni in Trinity
trinity --sync-from-checkpoint eth://block/byhash/0xa65877df954e1ff2012473efee8287252eee956c0d395a5791f1103a950a1e21?score=15,835,269,727,022,672,760,774
Hardware
I requisiti hardware differiscono in base al client, ma in genere non sono così elevati dal momento che il nodo deve solo rimanere sincronizzato. Non va confuso con il mining, che invece richiede molta più potenza di calcolo. Il tempo di sincronizzazione e le prestazioni naturalmente migliorano con hardware più potente. A seconda delle esigenze e dei desideri, Ethereum può essere eseguita sul computer, su un server domestico, un computer a scheda singola o su server privati virtuali nel cloud.
Un modo semplice per eseguire un nodo è utilizzare soluzioni 'plug and play' come DAppNode, che fornisce hardware per l'esecuzione di client e applicazioni, con un'interfaccia utente semplice.
Requisiti
Prima di installare qualsiasi client, assicurati che il tuo computer abbia abbastanza risorse per eseguirlo. I requisiti minimi e raccomandati sono indicati di seguito, ma la parte più importante è lo spazio su disco. Sincronizzare la blockchain Ethereum richiede molte risorse in ingresso/uscita. La cosa migliore è avere un disco a stato solido (SSD). Per eseguire un client Ethereum su HDD, servono almeno 8 GB di RAM da usare come cache.
Requisiti minimi
- CPU con 2+ core
- Minimo 4 GB di RAM con un SSD, 8 GB+ se si dispone di un HDD
- Larghezza banda 8 MBit/s
Specifiche raccomandate
- CPU veloce con 4+ core
- 16 GB+ RAM
- SSD veloce con almeno 500 GB di spazio libero
- Larghezza di banda 25+ MBit/s
A seconda di quale software e modalità di sincronizzazione si utilizzerà, sono necessarie centinaia di GB di spazio su disco. I numeri approssimativi e la crescita sono indicati di seguito.
Client | Dimensione disco (sincronizzazione veloce) | Dimensione disco (archivio completo) |
---|---|---|
Geth | 400 GB+ | 4,7 TB+ |
OpenEthereum | 280 GB+ | 4,6 TB+ |
Nethermind | 200 GB+ | 3 TB+ |
Besu | 750 GB+ | 4 TB+ |
Da questi grafici si capisce che i requisiti di archiviazione cambiano in continuazione. Per i dati più aggiornati per Geth e Parity, consulta i dati per la sincronizzazione completa e i dati per la sincronizzazione archivio.
Ethereum su un computer a scheda singola
Il modo più conveniente ed economico di eseguire un il nodo Ethereum è quello di utilizzare un computer a scheda singola con architettura ARM come Raspberry Pi. Ethereum su ARM fornisce immagini di client Geth, Parity, Nethermind e Besu. Ecco un semplice tutorial che spiega come come realizzare e configurare un client ARM.
Dispositivi piccoli, convenienti ed efficienti come questi sono ideali per eseguire un nodo a casa.
Client Eth2
Ci sono nuovi client per supportare gli upgrade a Eth2. Eseguiranno la beacon chain e supporteranno il nuovo meccanismo di consenso Proof of Stake.
Letture consigliate
Ci sono moltissime istruzioni e informazioni sui client Ethereum in Internet, ne elenchiamo alcune che potrebbero essere utili.
- Ethereum 101 - Part 2 - Understanding Nodes – Wil Barnes, 13 February 2019
- Running Ethereum Full Nodes: A Guide for the Barely Motivated – Justin Leroux, 7 November 2019
- Running an Ethereum Node – ETHHub, updated often
- Analyzing the hardware requirements to be an Ethereum full validated node – Albert Palau, 24 September 2018
- Running a Hyperledger Besu Node on the Ethereum Mainnet: Benefits, Requirements, and Setup – Felipe Faraggi, 7 May 2020
Argomenti correlati
Tutorial correlati
- Running a Node with Geth – Come scaricare, installare ed eseguire Geth. Si parla di modalità di sincronizzazione, console Javascript e altro.
- Turn your Raspberry Pi 4 into an Eth 1.0 or Eth 2.0 node just by flashing the MicroSD card – Installation guide – Esegui il flashing del tuo Raspberry Pi 4, collega un cavo Ethernet, collega il disco SSD e accendi il dispositivo per trasformare il Raspberry Pi 4 in un nodo Ethereum 1.0 completo o in un nodo Ethereum 2.0 (beacon chain/validatore).