Trois représentations
État du moteurmarchés · comptes · positions · carnets · chambre de compensationvit entre les blocs · une reconstruction
Ensemble de travailmarquages · comptes touchés · exécutions · sortievit le temps d’un bloc · un journal
État de la chaîneclé-valeur versionné, authentifié Merklel’autorité
La défaillance évitéeUn moteur dont la vue en mémoire a dérivé de ce qui a été entériné continue de servir des réponses, toutes fausses d’une façon qui n’apparaît qu’au règlement.
l’état du moteur doit être dérivable du registre entériné, jamais l’inverse
Clés
L’état de la chaîne est adressé par clé. L’état de trading est regroupé dans des espaces de noms identifiés et explicitement versionnés — par exemple la configuration des frais, l’index des contrats perpétuels, la table des paliers de levier, la liste des rôles administratifs. Le suffixe de version n’est pas décoratif. Quand la forme d’une configuration change, elle passe à une nouvelle version de sa clé, et la clé précédente est conservée pour que l’état écrit sous l’ancien schéma reste lisible pendant la migration. Un lecteur qui code une version en dur et ne revérifie jamais lira silencieusement une configuration périmée après une migration ; un lecteur qui résout la clé courante, non.C’est pourquoi la configuration devrait être lue sur la chaîne plutôt que figée dans le code client. Le service de paliers de frais lit la configuration des frais en direct à chaque cycle exactement pour cette raison — une table de paliers figée dans un client est une table qui finira par diverger de celle que le réseau applique.
Versions
Chaque bloc entériné fait avancer une version. Les valeurs d’état sont stockées avec la version à laquelle elles ont été écrites, ce qui signifie que le magasin n’est pas seulement « l’état courant » mais « l’état à n’importe quelle version ». Cette propriété rend plusieurs choses possibles à la fois :- Les preuves peuvent être produites contre une version précise, et pas seulement contre le présent.
- Le rejeu peut partir de n’importe quelle version, pas seulement de la genèse.
- Les lectures peuvent être historiques — un indexeur qui reconstruit l’historique d’une position demande d’anciennes versions, il ne parcourt pas un journal.
- L’élagage devient une décision de politique sur la profondeur à conserver, plutôt qu’une limite structurelle.
Ce qui finit entériné
L’exécution du noyau produit deux choses par bloc. Chaque transaction porte ses propres écritures et événements, qui lui sont liés. Les effets qui n’appartiennent à aucune transaction utilisateur en particulier — flux de financement, mouvements du fonds d’assurance, compteurs au niveau du bloc — vont vers un canal système distinct. Entre les deux, rien n’est perdu. Il n’existe pas d’effet d’exécution à l’intérieur du noyau qui soit absent à la fois de la sortie d’une transaction et du canal système. Cette exhaustivité est ce qui permet de traiter le registre entériné comme l’histoire complète plutôt que comme un résumé, et c’est la raison pour laquelle un événement peut être rattaché à la transaction qui l’a causé, même quand l’appariement s’est fait par lots.Pour aller plus loin
Stockage et preuves
Comment l’état entériné est physiquement stocké, authentifié et élagué.
Synchronisation d’état
Comment un nœud qui n’a jamais vu la chaîne la rattrape.
IntentionKernel
Où vivent l’état du moteur et l’ensemble de travail du bloc.
Indexeur
Transformer l’état entériné en quelque chose d’interrogeable.