L’archive et la lecture du passé
Les nœuds ZooBC ordinaires ne conservent que l’historique récent : 30 à 60 jours de blocs et leurs trois instantanés les plus récents. L’archive répond aux questions sur le passé lointain, comme le solde d’un compte il y a trois ans : chaque instantané depuis le bloc 0, réparti dans le stockage décentralisé plutôt que conservé sur une seule machine, et vérifiable octet par octet par rapport à la chaîne dorsale.
Ce que conserve chaque nœud
Tous les 172 800 blocs (environ 30 jours) sur le mainnet, chaque nœud écrit un instantané : l’état complet de la chaîne, chaque solde, chaque siège du registre et chaque enregistrement, tel qu’il était 760 blocs sous cette hauteur. Les nœuds échelonnent ce travail, mais les octets sont identiques sur chaque nœud. Un instantané est un unique document CBOR, découpé en segments de 102 400 octets nommés par leur hachage SHA3-256. Son manifeste, avec le hachage du fichier entier, le hachage de chaque segment et la hauteur de référence, est publié dans un bloc de la chaîne dorsale, la chaîne lente de blocs quotidiens cosignés par les deux tiers des sièges enregistrés.
Rien dans un instantané n’est signé. Son autorité lui vient du bloc dorsal cosigné qui le désigne, si bien qu’un instantané est authentique quel que soit celui qui le sert, tant que ses octets correspondent aux hachages du manifeste. Les instantanés sont aussi ce qui permet à un nouveau nœud de rejoindre rapidement le réseau (instantanés et synchronisation rapide).
Chaque nœud ne garde sur son propre disque que ses trois générations d’instantanés les plus récentes. C’est tout ce dont un nœud a besoin pour aider les autres à rejoindre le réseau, et conserver sur chaque nœud tous les instantanés jamais pris coûterait chaque mois davantage d’espace disque à chaque opérateur. Les anciens blocs sont également élagués (élagage de l’historique).
L’archive
À partir de la version 0.5.8, c’est le stockage décentralisé, et non chaque nœud, qui conserve chaque instantané depuis le bloc 0. Les segments de chaque instantané sont détenus par cinq nœuds enregistrés tirés au sort (storage_replication), comme les fragments de tout fichier stocké (stockage décentralisé). Chaque nœud ne garde que ses trois derniers instantanés ; aucun nœud ne les garde tous.
Aucune machine ne détient à elle seule l’historique, donc aucun opérateur ne peut à lui seul le perdre ou le retenir. Un serveur d’archive géré par une seule organisation, fût-ce la ZooBC Foundation, serait précisément ce point unique. Rien n’est jeté non plus : l’archive remonte jusqu’au tout premier instantané.
Détenir des segments de l’archive fait partie du devoir de stockage d’un nœud enregistré. À chaque époque de stockage, 10 % du fonds de longévité sont versés à parts égales aux nœuds qui prouvent les segments échantillonnés (fonds).
Lire le passé
Un lecteur qui veut l’état à un moment passé remonte la dorsale jusqu’à l’instantané pris à ce moment-là et lit son manifeste. Il récupère les segments de l’instantané auprès de leurs détenteurs et vérifie chacun par rapport à son hachage dans le manifeste, si bien qu’un détenteur ne peut pas glisser un faux segment. Il réassemble ensuite l’instantané, vérifie le hachage de l’ensemble et reconstruit l’état à cette hauteur : chaque solde, chaque siège et chaque enregistrement de ce moment-là. Aucun nœud ne détient à lui seul l’historique, et aucun nœud d’archivage n’est nécessaire.
Ces vérifications n’exigent aucune confiance envers les détenteurs : la dorsale est cosignée par les sièges, et ses manifestes fixent le hachage de chaque segment, si bien qu’un faux segment se repère immédiatement.
Autres façons de voir le passé
- Un dépôt de longévité conserve une transaction choisie, et son bloc, sur chaque nœud aussi longtemps que dure le dépôt (payer pour conserver des données (longévité)).
- Un opérateur peut conserver tout l’historique sur son propre nœud avec
keep_all_history; c’est un choix local, pas le comportement par défaut. - Les nœuds d’archivage font tourner un service d’indexation à côté d’un nœud et alimentent la recherche et les statistiques de l’explorateur (explorateur et les nœuds d’archivage).