Trois magasins
Bloc entériné
Magasin du registretransactions · sorties · événements · écritures · accumulateurs · métadonnées
Rejeu et audit
Magasin KV d’étatvaleurs courantes et historiques, seize partitions, état chaud à part
Requêtes et exécution
Magasin Merkle d’étatun arbre de Merkle creux versionné, plus les index des nœuds remplacés
Vérification — preuves
Une lecture qui ne veut qu’une valeur ne paie pas le parcours d’un arbre, et une preuve ne vient pas d’un magasin optimisé pour les accès ponctuels.
Authentification
Deux structures de Merkle font des travaux différents.Arbre de Merkle creux versionné
Accumulateurs
Votre clé et sa valeur
hash frère
hash frère
Racine d’état, entérinée par consensus
Votre transaction ou un événement
Accumulateur de transactions · d’événementschacun engage tout ce qui précède, dans l’ordre
Racine du registre entérinée
L’arbre prouve ce qu’une valeur était ; les accumulateurs, ce qui s’est passé et dans quel ordre. Ensemble ils rendent prouvable « cette transaction est dans la chaîne à cette position » sans détenir la chaîne.
État spéculatif
Les résultats d’un bloc existent avant d’être entérinés. Plutôt que de les écrire dans l’arbre durable puis de défaire cette écriture si le bloc n’est pas entériné, l’état non entériné est maintenu dans une surcouche de Merkle creuse en mémoire, posée sur la dernière version entérinée. L’exécution lit à travers la surcouche et voit une vue cohérente. Si le bloc est entériné, la surcouche est matérialisée. Sinon, elle est abandonnée et rien de durable n’a jamais été touché. C’est ce qui empêche l’exécution spéculative de laisser des résidus dans le stockage.Mise en cache
Les nœuds de l’arbre sont mis en cache à deux niveaux : un cache conscient des versions, qui garde les versions récentes adressables, et sous lui un cache par éviction du moins récemment utilisé. Le schéma d’accès d’une chaîne de trading — un petit ensemble de clés chaudes touchées à chaque bloc, face à une longue traîne rarement touchée — est exactement la forme à laquelle ces caches répondent.Élagage
Conserver toutes les versions à jamais est un choix, pas une obligation. Trois élagueurs indépendants travaillent sur les trois magasins, chacun avec sa propre politique de rétention : un sur le registre, un sur les valeurs d’état, un sur les nœuds de Merkle. Les élagueurs Merkle et de valeurs d’état sont pilotés par des index de péremption écrits en même temps que les données. Quand une version remplace un nœud ou une valeur, l’entrée remplacée est enregistrée comme périmée à cette version. L’élagage devient alors un parcours de plage sur un index plutôt qu’une recherche de déchets — celui qui écrit a déjà dit ce qui deviendrait collectable, et quand.La rétention est une décision d’opérateur qui a de vraies conséquences. Un nœud élagué agressivement sert efficacement l’état courant et ne peut ni répondre aux requêtes historiques, ni fournir la synchronisation d’état à un nœud qui démarre de plus loin. Un nœud d’archive garde tout, et le paie. Voir Faire tourner un nœud.
Sauvegarde et restauration
Les magasins peuvent être sauvegardés et restaurés indépendamment du nœud en fonctionnement, ce qui permet de monter un nœud à partir d’un instantané plutôt que de rejouer depuis la genèse, et de vérifier l’état d’un nœud restauré contre les racines entérinées plutôt que de faire confiance à la sauvegarde.Pour aller plus loin
Synchronisation d’état
Comment un nœud rattrape la chaîne sans la rejouer en entier.
Modèle d’état
Ce qui est stocké, et quelle représentation fait autorité.
Indexeur
Reconstruire l’historique à partir des enregistrements entérinés.
Faire tourner un nœud
Les rôles de nœud, et comment demander à en opérer un.