Tre store
Blocco consolidato
Ledger storetransazioni · output · eventi · write set · accumulatori · metadati del blocco
Replay e audit
State KV storevalori correnti e storici, 16 shard, stato caldo in un livello proprio
Query ed esecuzione
State Merkle storealbero di Merkle sparso versionato, più gli indici dei nodi soppiantati
Verifica — prove
Chi legge solo un valore non paga la traversata dell’albero, e una prova non va ricostruita da uno store ottimizzato per letture puntuali.
Autenticazione
Due strutture di Merkle fanno lavori diversi.Albero di Merkle sparso versionato
Accumulatori
La tua chiave e il suo valore
hash fratello
hash fratello
Radice dello stato consolidata dal consenso
La tua transazione, o un evento
Accumulatore transazioni · accumulatore eventiciascuno vincola tutto quanto incluso finora, nell’ordine
Radice del ledger consolidata dal consenso
L’albero prova quale fosse un valore; gli accumulatori provano che cosa è successo e in che ordine. Insieme rendono dimostrabile «questa transazione è nella catena in questa posizione» senza avere la catena.
Stato speculativo
I risultati di un blocco esistono prima di essere consolidati. Invece di scriverli nell’albero durevole e disfare tutto se il blocco non viene consolidato, lo stato non consolidato è tenuto in un overlay di Merkle sparso in memoria sopra l’ultima versione consolidata. L’esecuzione legge attraverso l’overlay e vede una vista coerente. Se il blocco viene consolidato, l’overlay viene materializzato. Se non lo è, l’overlay viene scartato e nulla di durevole è mai stato toccato. È questo che impedisce all’esecuzione speculativa di lasciare detriti nell’archiviazione.Caching
I nodi dell’albero sono messi in cache su due livelli: una cache consapevole delle versioni, che tiene indirizzabili quelle recenti, e sotto una cache least-recently-used. Lo schema di accesso di una catena di negoziazione — un piccolo insieme di chiavi calde toccate a ogni blocco, contro una coda lunga toccata di rado — è esattamente lo scenario per cui queste cache esistono.Pruning
Conservare per sempre ogni versione è una scelta, non un obbligo. Tre pruner indipendenti girano sui tre store, ciascuno con la propria policy di conservazione: uno sul ledger, uno sui valori di stato, uno sui nodi di Merkle. I pruner di Merkle e dei valori di stato sono guidati da indici di obsolescenza scritti insieme ai dati. Quando una versione soppianta un nodo o un valore, la voce soppiantata viene registrata come obsoleta a quella versione. Il pruning diventa così una scansione per intervalli su un indice invece di una caccia alla spazzatura: chi ha scritto ha già detto che cosa sarebbe diventato raccoglibile e quando.La conservazione è una decisione dell’operatore, con conseguenze reali. Un nodo sottoposto a pruning aggressivo serve lo stato corrente in modo efficiente e non può rispondere a query storiche né servire la sincronizzazione dello stato a un nodo che parte da più indietro. Un nodo di archivio tiene tutto e lo paga. Vedi Gestire un nodo.
Backup e ripristino
Gli store possono essere sottoposti a backup e ripristinati indipendentemente dal nodo in esecuzione: è questo che rende possibile mettere in piedi un nodo da uno snapshot invece di rieseguire dal genesis, e verificare lo stato di un nodo ripristinato rispetto alle radici consolidate invece di fidarsi del backup.Dove proseguire
Sincronizzazione dello stato
Come un nodo si mette in pari con la catena senza rieseguirla tutta.
Modello di stato
Che cosa viene archiviato, e quale rappresentazione fa fede.
Indexer
Ricostruire lo storico dai registri consolidati.
Gestire un nodo
I ruoli dei nodi, e come chiedere di gestirne uno.