Due modi per mettersi in pari
Il bootstrap — arrivare alla versione corrente partendo da zero — si può fare in due modi radicalmente diversi. Rieseguire lo storico. Si parte dal genesis e si va avanti, rieseguendo ogni transazione oppure applicando gli output che l’esecuzione ha già prodotto. Il risultato è un nodo che detiene l’intero storico: ogni versione, ogni prova, ogni transazione. È anche lento, e diventa più lento ogni giorno che la catena resta in funzione. Scaricare lo stato corrente. Si salta lo storico e si prendono chiavi e valori di stato come stanno all’ultima versione, verificati rispetto alla radice consolidata. Il nodo è aggiornato in una frazione del tempo, e non sa nulla di come la catena ci sia arrivata.Un nuovo nodo
Modalità di bootstrap
Rieseguire lo storicoriesecuzione o applicazione degli output, dal genesislento, e più lento ogni giorno di catena
Scaricare lo stato correntechiavi e valori all’ultima versione, verificati sulla radice consolidataaggiornato in una frazione di tempo
Versione correntesincronizzazione continua
I due percorsi non sono equivalentiUn nodo che ha scaricato lo stato corrente non può servire query storiche né dire come una posizione sia arrivata dov’è. A un nodo che alimenta un indexer o un audit serve lo storico saltato.
Questa è una decisione operativa, non un default da accettare senza pensarci. Un nodo che ha scaricato lo stato corrente non può servire query storiche né rispondere a domande su come una posizione sia arrivata dov’è: non ha storico da leggere. A un nodo che alimenta un indexer o un processo di audit serve lo storico che ha saltato.
Restare aggiornati
Arrivato alla versione corrente, un nodo si mantiene in pari consumando i blocchi consolidati man mano che arrivano, di nuovo eseguendo le transazioni oppure applicando gli output, con lo stesso compromesso fra forza della verifica e velocità. La differenza rispetto al bootstrap è che il divario è piccolo e costante, invece che grande e in riduzione. Un nodo che accumula troppo ritardo rientra nel percorso di bootstrap, invece di provare a colmare un divario arbitrario in modo incrementale.Come si muovono i dati
La sincronizzazione non è un nodo che chiede a un altro un intervallo di blocchi. Si divide in livelli, così che nessun singolo peer sia una dipendenza e nessun singolo guasto fermi l’avanzamento.
La conseguenza da capire: un nodo che si sincronizza non si fida di un peer. Ogni chunk arriva con una prova rispetto a una radice che la rete ha consolidato, e un peer che serve qualcosa di incoerente viene rifiutato invece che creduto. La scelta dei peer è una decisione di prestazioni, non di fiducia.
Verifica
Nella sincronizzazione dello stato nulla viene accettato in base a chi lo ha inviato. I valori di stato sono verificati rispetto alla radice dello stato consolidata. Transazioni e output sono verificati rispetto agli accumulatori. Un nodo che finisce il bootstrap ha uno stato la cui radice coincide con ciò che un quorum di validatori ha firmato. È questo a rendere sicuro il percorso veloce: scaricare lo stato corrente salta lo storico, ma non salta la verifica.Dove proseguire
Archiviazione e prove
Le strutture che rendono verificabile la sincronizzazione.
Gestire un nodo
I ruoli dei nodi, e come chiedere di gestirne uno.
Topologia della rete
Con quale livello di nodo parla un peer che si sincronizza.
Indexer
Le domande a cui risponde lo storico e a cui lo stato corrente non può rispondere.