Nodo archivio di Ethereum
Un nodo archivio è un'istanza di un client Ethereum configurato per creare un archivio di tutti gli stati storici. È uno strumento utile per determinati casi d'uso, ma potrebbe essere più complesso da eseguire rispetto a un nodo completo.
Prerequisiti
Dovresti comprendere il concetto di nodo Ethereum, la sua architettura, le strategie di sincronizzazione, le pratiche per eseguirli e utilizzarli.
Cos'è un nodo archivio
Per cogliere l'importanza di un nodo archivio, chiariamo il concetto di "stato". Ethereum può essere definito come una macchina a stati basata sulle transazioni. È costituito da account e applicazioni che eseguono transazioni che ne modificano lo stato. I dati globali con le informazioni su ogni account e contratto sono archiviati in un database trie chiamato stato. Questo è gestito dal client del livello di esecuzione (EL) e include:
- Saldi e nonce degli account
- Codice e archiviazione dei contratti
- Dati relativi al consenso, ad es. il contratto di deposito di staking (Staking Deposit Contract)
Per interagire con la rete, verificare e produrre nuovi blocchi, i client Ethereum devono stare al passo con le modifiche più recenti (la punta della catena) e quindi con lo stato attuale. Un client del livello di esecuzione configurato come nodo completo verifica e segue l'ultimo stato della rete, ma memorizza nella cache solo gli ultimi stati, ad es. lo stato associato agli ultimi 128 blocchi, in modo da poter gestire le riorganizzazioni della catena e fornire un rapido accesso ai dati recenti. Lo stato recente è ciò di cui tutti i client hanno bisogno per verificare le transazioni in entrata e utilizzare la rete.
Puoi immaginare lo stato come un'istantanea momentanea della rete in un dato blocco e l'archivio come una riproduzione della cronologia.
Gli stati storici possono essere tranquillamente eliminati (pruning) perché non sono necessari per il funzionamento della rete e sarebbe inutilmente ridondante per il client conservare tutti i dati obsoleti. Gli stati esistenti prima di un blocco recente (ad es. 128 blocchi prima della testa) vengono di fatto scartati. I nodi completi conservano solo i dati storici della blockchain (blocchi e transazioni) e occasionali istantanee storiche che possono utilizzare per rigenerare stati più vecchi su richiesta. Lo fanno rieseguendo le transazioni passate nell'EVM, il che può essere computazionalmente impegnativo quando lo stato desiderato è lontano dall'istantanea più vicina.
Tuttavia, questo significa che l'accesso a uno stato storico su un nodo completo consuma molta potenza di calcolo. Il client potrebbe dover eseguire tutte le transazioni passate e calcolare uno stato storico dalla genesi. I nodi archivio risolvono questo problema memorizzando non solo gli stati più recenti, ma ogni stato storico creato dopo ogni blocco. Fondamentalmente, si tratta di un compromesso che richiede uno spazio su disco maggiore.
È importante notare che la rete non dipende dai nodi archivio per conservare e fornire tutti i dati storici. Come accennato in precedenza, tutti gli stati intermedi storici possono essere derivati su un nodo completo. Le transazioni sono archiviate da qualsiasi nodo completo (attualmente meno di 400 GB) e possono essere riprodotte per costruire l'intero archivio.
Casi d'uso
L'uso regolare di Ethereum, come l'invio di transazioni, la distribuzione di contratti, la verifica del consenso, ecc., non richiede l'accesso agli stati storici. Gli utenti non hanno mai bisogno di un nodo archivio per un'interazione standard con la rete.
Il vantaggio principale dell'archivio di stato è un rapido accesso alle query sugli stati storici. Ad esempio, un nodo archivio restituirebbe prontamente risultati come:
- Qual era il saldo in ETH dell'account 0x1337... al blocco 15537393?
- Qual è il saldo del token 0x nel contratto 0x al blocco 1920000?
Come spiegato sopra, un nodo completo dovrebbe generare questi dati tramite l'esecuzione dell'EVM, che utilizza la CPU e richiede tempo. I nodi archivio vi accedono sul disco e forniscono le risposte immediatamente. Questa è una funzionalità utile per alcune parti dell'infrastruttura, ad esempio:
- Fornitori di servizi come i block explorer
- Ricercatori
- Analisti di sicurezza
- Sviluppatori di applicazioni decentralizzate (dapp)
- Revisione e conformità
Esistono vari servizi gratuiti che consentono anche l'accesso ai dati storici. Poiché è più impegnativo eseguire un nodo archivio, questo accesso è per lo più limitato e funziona solo per un accesso occasionale. Se il tuo progetto richiede un accesso costante ai dati storici, dovresti prendere in considerazione l'idea di eseguirne uno tu stesso.
Implementazioni e utilizzo
In questo contesto, per nodo archivio si intendono i dati forniti dai client del livello di esecuzione rivolti all'utente, in quanto gestiscono il database di stato e forniscono endpoint JSON-RPC. Le opzioni di configurazione, il tempo di sincronizzazione e le dimensioni del database possono variare a seconda del client. Per i dettagli, fai riferimento alla documentazione fornita dal tuo client.
Prima di avviare il tuo nodo archivio, informati sulle differenze tra i client e in particolare sui vari requisiti hardware. La maggior parte dei client non è ottimizzata per questa funzionalità e i loro archivi richiedono più di 12 TB di spazio. Al contrario, implementazioni come Erigon possono archiviare gli stessi dati in meno di 3 TB, il che le rende il modo più efficace per eseguire un nodo archivio.
Pratiche consigliate
Oltre alle raccomandazioni generali per l'esecuzione di un nodo, un nodo archivio potrebbe essere più esigente in termini di hardware e manutenzione. Considerando le funzionalità chiave (opens in a new tab) di Erigon, l'approccio più pratico è utilizzare l'implementazione del client Erigon.
Hardware
Assicurati sempre di verificare i requisiti hardware per una determinata modalità nella documentazione di un client. Il requisito principale per i nodi archivio è lo spazio su disco. A seconda del client, varia da 3 TB a 12 TB. Anche se gli HDD potrebbero essere considerati una soluzione migliore per grandi quantità di dati, la sincronizzazione e l'aggiornamento costante della testa della catena richiederanno unità SSD. Le unità SATA (opens in a new tab) sono sufficienti, ma dovrebbero essere di qualità affidabile, almeno TLC (opens in a new tab). I dischi possono essere inseriti in un computer desktop o in un server con slot sufficienti. Tali dispositivi dedicati sono ideali per eseguire un nodo con un tempo di attività elevato. È assolutamente possibile eseguirlo su un laptop, ma la portabilità avrà un costo aggiuntivo.
Tutti i dati devono risiedere in un unico volume, pertanto i dischi devono essere uniti, ad es. con RAID0 (opens in a new tab) o LVM. Potrebbe valere la pena prendere in considerazione anche l'utilizzo di ZFS (opens in a new tab) in quanto supporta il "Copy-on-write", che garantisce che i dati vengano scritti correttamente sul disco senza errori di basso livello.
Per una maggiore stabilità e sicurezza nel prevenire la corruzione accidentale del database, specialmente in una configurazione professionale, prendi in considerazione l'utilizzo della memoria ECC (opens in a new tab) se il tuo sistema la supporta. In genere si consiglia che la dimensione della RAM sia la stessa di un nodo completo, ma una maggiore quantità di RAM può aiutare ad accelerare la sincronizzazione.
Durante la sincronizzazione iniziale, i client in modalità archivio eseguiranno ogni transazione dalla genesi. La velocità di esecuzione è per lo più limitata dalla CPU, quindi una CPU più veloce può aiutare con il tempo di sincronizzazione iniziale. Su un computer consumer medio, la sincronizzazione iniziale può richiedere fino a un mese.
Letture consigliate
- Nodo completo vs nodo archivio di Ethereum (opens in a new tab) - QuickNode, settembre 2022
- Costruire il proprio nodo archivio di Ethereum (opens in a new tab) - Thomas Jay Rush, agosto 2021
- Come configurare Erigon, l'RPC di Erigon e TrueBlocks (scrape e API) come servizi (opens in a new tab) – Magnus Hansson, aggiornato a settembre 2022