Vai al contenuto principale
Change page

Nodi e client

Ultima modifica: , 21 febbraio 2024

Ethereum è una rete distribuita di computer (noti come nodi) che eseguono software che possono verificare i blocchi e i dati delle transazioni. Il software deve essere eseguito sul tuo computer per trasformarlo in un nodo Ethereum. Ci sono due pezzi di software separati (chiamati "client") necessari per formare un nodo.

Prerequisiti

Prima di approfondire ed eseguire la tua istanza di un client Ethereum dovresti comprendere il concetto di rete peer-to-peer e le basi dell'EVM. Consulta la nostra introduzione a Ethereum.

Se sei nuovo al tema dei nodi, consigliamo di leggere prima la nostra introduzione user-friendly su come eseguire un nodo di Ethereum.

Che cosa sono i nodi e i client?

Un "nodo" è qualsiasi istanza del software del client di Ethereum connessa ad altri computer che stanno anch'essi eseguendo il software di Ethereum, così da formare una rete. Un client è un'implementazione di Ethereum che verifica i dati rispetto alle regole del protocollo e mantiene sicura la rete. Un nodo deve eseguire due client: un client di consenso e un client di esecuzione.

  • Il client di esecuzione (noto anche come il Motore di Esecuzione, client EL o, precedentemente, client di Eth1) attende le nuove transazioni trasmesse nella rete, le esegue nell'EVM e detiene l'ultimo stato e database di tutti i dati correnti di Ethereum.
  • Il client di consenso (noto anche come il Nodo Beacon, client CL o, precedentemente, client di Eth2) implementa l'algoritmo di consenso di proof-of-stake, che consente alla rete di raggiungere l'accordo secondo i dati validati dal client di esecuzione. C'è inoltre un terzo pezzo di software, chiamato "validatore" che può essere aggiunto al client di consenso, permettendo al nodo di partecipare alla messa in sicurezza della rete.

I client lavorano assieme per tenere traccia della testa della blockchain Ethereum e permettere agli utenti di interagire con la rete Ethereum. Il design modulare con molteplici pezzi di software che lavorano assieme è chiamato complessità incapsulata(opens in a new tab). Questo approccio ha semplificato l'esecuzione de La Fusione senza problemi, permette di mantenere e sviluppare più facilmente il software client, e consente il riutilizzo di client individuali ad esempio nell'ecosistema di livello 2.

Client di esecuzione e consenso accoppiati Diagramma semplificato di un client di esecuzione e uno di consenso accoppiati.

Diversità dei client

Sia i client di esecuzione che i client di consenso esistono in numerosi linguaggi di programmazione sviluppati da diversi team.

Diverse implementazioni del client possono rafforzare la rete, riducendone la dipendenza da un'unica base di codice. L'obiettivo ideale è raggiungere la diversità senza che nessun client domini la rete, eliminando così eventuali un potenziale punto di errore singolo. La varietà di linguaggi invita inoltre una community di sviluppatori più ampia e consente loro di creare integrazioni nel loro linguaggio preferito.

Scopri di più sulla diversità del client.

Queste implementazioni hanno in comune il fatto di seguire una specifica unica che determina come funziona la rete Ethereum e la blockchain. Ogni dettaglio tecnico è definito e le specifiche si possono trovare come:

Monitorare i nodi nella rete

Diversi tracker offrono una panoramica in tempo reale dei nodi nella rete Ethereum. Si noti che a causa della natura delle reti decentralizzate, questi crawler possono fornire solo una vista limitata della rete e potrebbero riportare risultati differenti.

Tipologie di nodo

Se desideri eseguire il tuo nodo, dovresti capire che ne esistono di diversi tipi che consumano i dati in maniera diversa. I client possono eseguire tre 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 ottengono le informazioni più aggiornate sullo stato di Ethereum.

Nodo completo

I nodi completi fanno una validazione blocco per blocco della blockchain, incluso il download e la verifica del corpo del blocco e i dati di stato per ogni blocco. Ci sono classi differenti di nodo completo - alcune iniziano dal blocco genesi e verificano ogni singolo blocco nell'intera cronologia della blockchain. Altre iniziano la loro verifica da un blocco più recente di cui confidano essere valido (ad es. "sincronizzazione snap" di Geth). Indipendentemente da dove parta la verifica, i nodi completi tengono solo una copia locale di dati relativamente recenti (tipicamente i 128 blocchi più recenti), permettendo di eliminare i dati più vecchi per risparmiare spazio sul disco. I dati più vecchi possono essere rigenerati quando è necessario.

  • Memorizza i dati completi della blockchain (sebbene siano periodicamente ridotti così che un nodo completo non memorizzi tutti i dati dalla genesi)
  • Partecipa alla convalida dei blocchi, verifica tutti i blocchi e gli stati.
  • Tutti gli stati possono essere recuperati dalla memoria locale o rigenerati da "istantanee" da un nodo completo.
  • È al servizio della rete e fornisce dati su richiesta.

Nodo archivio

I nodi archivio sono nodi completi che verificano ogni blocco da quello genesi e non eliminano mai nessuno dei dati scaricati.

  • Memorizza tutto ciò che è presente nel nodo completo e crea un archivio degli stati storici. È necessario se desideri consultare qualcosa come il saldo di un conto al blocco #4.000.000 o testare in modo semplice e affidabile le tue serie di transazioni, senza minarle usando il tracciamento.
  • 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.

Scopri di più sui Nodi archivio.

Nodo leggero

Invece di scaricare ogni blocco, i nodi leggeri scaricano solo le intestazioni dei blocchi. Queste contengono le informazioni sommarie sui contenuti dei blocchi. Ogni altra informazione di cui i nodi leggeri hanno bisogno viene richiesta a un nodo completo. Il nodo leggero può quindi verificare in modo indipendente i dati che riceve rispetto alle radici di stato nelle intestazioni dei blocchi. I nodi leggeri consentono agli utenti di partecipare alla rete Ethereum senza l'hardware potente o l'elevata larghezza di banda necessari per eseguire i nodi completi. Infine, i nodi leggeri potrebbero funzionare su telefoni cellulari o dispositivi embedded. I nodi leggeri non partecipano al consenso (es. non possono essere validatori/miner), ma possono accedere alla blockchain di Ethereum con la stessa sicurezza e avendo le stesse funzioni garantite ai nodi completi.

I client leggeri sono un'area di sviluppo attivo per Ethereum, e ci aspettiamo presto di vedere nuovi client leggeri per i livelli di consenso e i livelli di esecuzione. Esistono anche dei percorsi potenziali per fornire i dati dei client leggeri sulla rete di gossip(opens in a new tab). Questi sono vantaggiosi perché la rete di gossip potrebbe supportare una rete di nodi leggeri senza richiedere ai nodi completi di rispondere alle richieste.

Ethereum non supporta ancora una grande popolazione di nodi leggeri, ma il supporto dei nodi leggeri è un'area in cui si prevede uno sviluppo rapido nel futuro più prossimo. In particolare, client come Nimbus(opens in a new tab), Helios(opens in a new tab), and LodeStar(opens in a new tab) sono attualmente fortemente focalizzati sui nodi leggeri.

Perché si dovrebbe eseguire un nodo Ethereum?

L'esecuzione di un nodo consente di utilizzare Ethereum in modo diretto, affidabile e privato, supportando la rete tenendola più solida e decentralizzata.

Vantaggi per lo sviluppatore

Eseguire un nodo permette di utilizzare Ethereum in modo privato, autosufficiente e senza fiducia. Non devi fidarti della rete, perché puoi verificare i dati da solo col tuo client. "Non fidarti, verifica" è un popolare mantra della blockchain.

  • Il nodo verifica in autonomia tutte le transazioni e i blocchi in base alle regole del consenso. Significa che non si deve fare affidamento su altri nodi della rete né fidarti completamente di loro.
  • Puoi usare un portafoglio Ethereum col tuo nodo. Puoi usare le dapp con maggiore sicurezza e privacy, perché non dovrai comunicare i tuoi indirizzi e saldi a intermediari. Tutto può essere controllato con il tuo client. MetaMask(opens in a new tab), Frame(opens in a new tab)e molti altri portafogli offrono l'importazione RPC, consentendo loro di usare il tuo nodo.
  • Puoi eseguire e hostare tu stesso altri servizi che dipendono dai dati provenienti da Ethereum. Ad esempio, questi potrebbero essere un validatore della Beacon Chain, software come il livello 2, infrastruttura, block explorer, società di servizi di pagamento, ecc.
  • Puoi fornire i tuoi endpoint RPC personalizzati. Potresti anche offrire questi endpoint pubblicamente alla community per aiutarli a evitare i grandi provider centralizzati.
  • Puoi connetterti al tuo nodo usando le Comunicazioni interprecessuali (IPC) o riscrivere il nodo per caricare il tuo programma come plugin. Ciò conferisce una bassa latenza, il che aiuta molto ad esempio quando si elaborano molti dati usando le librerie web3 o quando ti serve sostituire le tue transazioni il più velocemente possibile (frontrunning).
  • Puoi mettere ETH direttamente in staking per proteggere la rete e guadagnare ricompense. Per iniziare, vedi lo staking in autonomia.

Come accedere a Ethereum tramite un'applicazione e i nodi

Vantaggi per la rete

Avere una serie diversificata di nodi è importante per l'integrità, la sicurezza e la resilienza operativa di Ethereum.

  • I nodi completi applicano le regole di consenso 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 validatori potrebbero attaccare la rete.
  • Nel caso di un attacco che superi le difese cripto-economiche del Proof of Stake, può essere eseguito un recupero sociale dai nodi completi che scelgono di seguire la catena onesta.
  • Più nodi sulla rete risultano in una rete più diversificata e robusta, l'obiettivo ultimo della decentralizzazione, che consente un sistema resistente alla censura e affidabile.
  • I nodi completi forniscono accesso ai dati della blockchain per i client leggeri che dipendono da essa. I nodi leggeri non memorizzano l'intera blockchain, bensì verificano i dati attraverso le radici di stato nelle intestazioni dei blocchi. Se ne hanno bisogno, possono richiedere ulteriori informazioni ai nodi completi.

Se si esegue un nodo completo, l'intera rete Ethereum ne beneficia, anche se non si esegue un validatore.

Esecuzione di un nodo proprio

Vorresti eseguire il tuo client di Ethereum?

Per un'introduzione per principianti, visita la nostra pagina eseguire un nodo per saperne di più.

Se sei un utente più tecnico, approfondisci i dettagli e le opzioni su come avviare il tuo nodo.

Alternative

Configurare un nodo può richiedere tempo e risorse e non sempre è necessario eseguire un'istanza propria. In questo caso, puoi usare un provider di API terzo. Per una panoramica sull'uso di questi servizi, dai un'occhiata a nodi come servizi.

Se qualcuno esegue un nodo Ethereum con un'API pubblica nella tua community, puoi puntare i tuoi portafogli 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 di esecuzione

La community di Ethereum mantiene numerosi client di esecuzione open source (precedentemente noti come 'client di Eth1' o semplicemente 'client di Ethereum'), sviluppati da diversi team usando diversi linguaggi di programmazione. Questo rafforza la rete e la rende più diversificata. L'obiettivo ideale è raggiungere la diversità senza che nessun client prevalga, per ridurre eventuali punti di errore singoli.

Questa tabella riepiloga i diversi client. Tutti superano i test dei client(opens in a new tab) e sono mantenuti attivamente per rimanere al passo con gli aggiornamenti di rete.

ClientLinguaggioSistemi operativiRetiStrategie di sincronizzazioneCancellazione dello stato
Geth(opens in a new tab)VaiLinux, Windows, macOSRete Principale, Sepolia, GoerliSnap, CompletaArchiviata, Tagliata
Nethermind(opens in a new tab)C#, .NETLinux, Windows, macOSRete Principale, Sepolia, Goerli e altreSnap (senza servire), Rapida, CompletaArchiviata, Tagliata
Besu(opens in a new tab)JavaLinux, Windows, macOSRete Principale, Sepolia, Goerli e altreSnap, Veloce, CompletoArchiviata, Tagliata
Erigon(opens in a new tab)GoLinux, Windows, macOSRete Principale, Sepolia, Goerli e altreCompletaArchiviata, Tagliata
Reth(opens in a new tab)RustLinux, Windows, macOSRete Principale, Sepolia, Goerli e altreCompletaArchiviata, Tagliata

Per ulteriori informazioni sulle reti supportate, consulta reti Ethereum.

Ogni client ha vantaggi e casi d'uso differenti, 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.

Besu

Hyperledger Besu è un client Ethereum di livello aziendale per le reti pubbliche e autorizzate. Esegue tutte le funzionalità della Rete principale di Ethereum, dal monitoraggio a GraphQL, ha un monitoraggio avanzato ed è supportato da ConsensSys, entrambi in canali aperti della community e tramite SLA commerciali per le imprese. È scritto in Java con licenza Apache 2.0.

L'ampia documentazione(opens in a new tab) di Besu ti guiderà verso tutti i dettagli delle sue funzioni e configurazioni.

Erigon

Erigon, precedentemente noto come Turbo-Geth, è nato come una diramazione di Go Ethereum orientata alla velocità e all'efficienza dello spazio su disco. Erigon è un'implementazione completamente riprogettata di Ethereum, correntemente scritta in Go, ma con implementazioni in altri linguaggi in via di sviluppo. L'obiettivo di Erigon è fornire un'implementazione più veloce, modulare e ottimizzata di Ethereum. Può eseguire una sincronizzazione completa del nodo archivio usando circa 2TB di spazio su disco, in meno di 3 giorni.

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.

Scopri di più su Geth nella sua documentazione(opens in a new tab).

Nethermind

Nethermind è un'implementazione di Ethereum creata con lo stack tecnologico C # .NET, concessa in licenza con LGPL-3.0, 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(opens in a new tab), un efficace supporto per gli sviluppatori, una community online e un supporto disponibile 24 ore al giorno, 7 giorni su 7 per gli utenti premium.

Client di consenso

Esistono diversi client di consenso (precedentemente noti come client di "Eth2") per supportare gli aggiornamenti del consenso. Sono responsabili per tutta la logica collegata al consenso, incluso l'algoritmo di scelta della diramazione, l'elaborazione di attestazioni e la gestione di ricompense e sanzioni proof-of-stake.

ClientLinguaSistemi operativiReti
Lighthouse(opens in a new tab)RustLinux, Windows, macOSBeacon Chain, Goerli, Pyrmont, Sepolia, Ropsten e altre
Lodestar(opens in a new tab)TypeScriptLinux, Windows, macOSBeacon Chain, Goerli, Sepolia, Ropsten e altre
Nimbus(opens in a new tab)NimLinux, Windows, macOSBeacon Chain, Goerli, Sepolia, Ropsten e altre
Prysm(opens in a new tab)GoLinux, Windows, macOSBeacon Chain, Gnosis, Goerli, Pyrmont, Sepolia, Ropsten e altre
Teku(opens in a new tab)JavaLinux, Windows, macOSBeacon Chain, Gnosis, Goerli, Sepolia, Ropsten e altre

Lighthouse

Lighthouse è un'implementazione del client di consenso scritta in Rust sotto la licenza Apache-2.0. È mantenuta da Sigma Prime ed è stabile e pronta alla produzione sin dalla genesi della Beacon Chain. È affidata a varie imprese, pool di staking e singoli individui. Mira a essere sicura, performante e interoperabile in una vasta gamma di ambienti, da PC desktop a distribuzioni automatizzate sofisticate.

La documentazione è consultabile nel Libro su Lighthouse(opens in a new tab)

Lodestar

Lodestar è un'implementazione del client di consenso pronta alla produzione, scritta in Typescript sotto la licenza LGPL-3.0. È mantenuta da ChainSafe Systems ed è il più nuovo dei client di consenso per gli staker in autonomia, gli sviluppatori e i ricercatori. Lodestar consiste in un nodo beacon e un client del validatore, alimentato dalle implementazioni in JavaScript dei protocolli di Ethereum. Lodestar mira a migliorare l'utilizzabilità di Ethereum con client leggeri, espandere l'accessibilità a un gruppo più ampio di sviluppatori e contribuire ulteriormente alla diversità dell'ecosistema.

Maggiori informazioni si possono trovare sul nostro sito web di Lodestar(opens in a new tab)

Nimbus

Nimbus è un'implementazione del client di consenso scritta in Nim sotto la licenza Apache-2.0. È un client pronto alla produzione in uso dagli staker in autonomia e dai pool di staking. Nimbus è progettato per l'efficienza delle risorse, rendendo facile l'esecuzione sui dispositivi con risorse limitate e le infrastrutture aziendali con uguale facilità, senza compromettere la stabilità o ricompensare le prestazioni. Un'impronta di risorse più leggera fa sì che il client abbia un maggiore margine di sicurezza quando la rete è sotto stress.

Scopri di più nella documentazione di Nimbus(opens in a new tab)

Prysm

Prysm è un client di consenso completo e open source scritto in Go sotto la licenza GPL-3.0. Dispone di un'UI webapp facoltativa e da' priorità all'esperienza dell'utente, alla documentazione e alla configurabilità sia per gli utenti di staking domestico che per quelli istituzionali.

Visita la documentazione di Prysm(opens in a new tab) per maggiori informazioni.

Teku

Teku è uno dei client di genesi originali della Beacon Chain. Insieme ai soliti obiettivi (sicurezza, robustezza, stabilità, utilizzabilità, prestazioni), Teku mira specificamente a conformarsi completamente a tutti i vari standard dei client di consenso.

Teku offre opzioni di sviluppo molto flessibili. Il nodo beacon e il client del validatore possono operare insieme come un singolo processo, il che è estremamente conveniente per gli staker in autonomia, o i nodi possono operare separatamente per le operazioni di staking sofisticate. Inoltre, Teku è completamente interoperabile con Web3Signer(opens in a new tab) per firmare la sicurezza della chiave e la protezione dallo slashing.

Teku è scritto in Java ed è sotto licenza Apache 2.0. È sviluppato dal team Protocols di ConsenSys, responsabile anche di Besu e Web3Signer. Scopri di più nella documentazione di Teku(opens in a new tab).

Modalità di sincronizzazione

Per seguire e verificare i dati correnti nella rete, il client di Ethereum deve essere sincronizzato con l'ultimo stato della rete. Ciò avviene scaricando i dati dai pari, verificandone crittograficamente l'integrità e creando un database locale della blockchain.

Le modalità di sincronizzazione rappresentano diversi approcci a questo processo, con vari compromessi. I client variano anche nella loro implementazione degli algoritmi di sincronizzazione. Fai sempre riferimento alla documentazione ufficiale del client scelto per le specifiche sull'implementazione.

Modalità di sincronizzazione del livello di esecuzione

Sincronizzazione completa dell'archivio

La sincronizzazione completa scarica tutti i blocchi (incluse intestazioni, transazioni e ricevute) e genera lo stato della blockchain in modo incrementale eseguendo ogni blocco dalla genesi.

  • Riduce al minimo la fiducia e offre la massima sicurezza verificando ogni transazione.
  • Al crescere del numero di transazioni, possono volerci giorni o persino settimane per elaborare tutte le transazioni.

Sincronizzazione snap completa

La sincronizzazione snap verifica la blockchain blocco per blocco, come una sincronizzazione completa dell'archivio; ma invece di cominciare dal blocco genesi, inizia da un più recente punto di controllo "fidato" che si sa faccia parte della vera blockchain. Il nodo salva punti di controllo periodici mentre elimina dati più vecchi di un certo periodo. Queste istantanee sono utilizzate per rigenerare gli stati dei dati quando necessario, invece che doverli memorizzare tutti per sempre.

  • È la strategia di sincronizzazione più veloce, attualmente quella predefinita nella rete principale di Ethereum
  • Risparmia molto spazio su disco e larghezza di banda di rete senza sacrificare la sicurezza

Maggiori informazioni sulla sincronizzazione snap(opens in a new tab)

Sincronizzazione leggera

La modalità leggera del client scarica tutte le intestazioni e i dati del blocco e ne verifica alcuni casualmente. Sincronizza solo la punta della catena dal punto di controllo attendibile.

  • Ottiene solo l'ultimo stato basandosi sulla fiducia negli sviluppatori e nel meccanismo di consenso.
  • Client pronto all'uso con lo stato corrente della rete in pochi minuti.

NB La sincronizzazione leggera non funziona ancora con Ethereum proof-of-stake - una nuova versione verrà rilasciata presto!

Maggiori informazioni sui client leggeri

Modalità di sincronizzazione del livello di consenso

Sincronizzazione ottimistica

La sincronizzazione ottimistica è una strategia di sincronizzazione successiva alla Fusione, progettata per essere ad accettazione e retrocompatibile, consentendo ai nodi di esecuzione di sincronizzarsi tramite metodi stabiliti. Il motore di esecuzione può importare ottimisticamente i blocchi beacon senza verificarli completamente, trovare l'ultima testa e, poi, avviare la sincronizzazione della catena coi suddetti metodi. Poi, dopo essersi rimesso in pari, il client di esecuzione informerà il client di consenso della validità delle transazioni nella Beacon Chain.

Maggiori informazioni sulla sincronizzazione ottimistica(opens in a new tab)

Sincronizzazione del punto di controllo

La sincronizzazione del punto di controllo, anche nota come sincronizzazione a soggettività debole, crea un'esperienza utente superiore per la sincronizzazione del Nodo Beacon. Si basa sulle ipotesi di soggettività debole che consentono di sincronizzare la Beacon Chain da un punto di controllo a soggettività debole recente invece che dalla genesi. La sincronizzazione del punto di controllo rende significativamente più breve il tempo di sincronizzazione iniziale, con ipotesi di fiducia simili a quelli della sincronizzazione dalla .

In pratica, ciò significa che il tuo nodo si connette a un servizio remoto per scaricare gli stati finalizzati di recente e continua a verificare i dati da quel punto. Le terze parti che forniscono i dati sono affidabili e dovrebbero essere selezionate attentamente.

Maggiori informazioni sulla sincronizzazione del punto di controllo(opens in a new tab)

Letture consigliate

Su internet si trovano molte informazioni sui client Ethereum. Ecco alcune risorse che potrebbero essere utili.

Questo articolo è stato utile?