L’élagage de l’historique
Une chaîne qui conserve chaque bloc pour toujours fait payer à chaque nœud le stockage de tout son historique. Les nœuds ZooBC, eux, élaguent : sous un horizon lié aux instantanés, ils suppriment les anciens blocs, les transactions, les écritures du grand livre, les reçus et les versions remplacées des enregistrements. L’état courant, comme les soldes, les sièges du registre et les lignes de jeu de données, n’est pas élagué de cette façon ; seul l’ancien historique l’est. Un nœud en fonctionnement sur le mainnet conserve 30 à 60 jours de blocs.
L’horizon
Tous les 172 800 blocs (environ 30 jours) sur le mainnet, chaque nœud écrit un instantané de l’état (instantanés et synchronisation rapide). L’horizon d’élagage est la plus ancienne des deux hauteurs de référence d’instantané les plus récentes. Avec un seul instantané, c’est cette hauteur moins un intervalle, et rien n’est élagué tant qu’aucun manifeste d’instantané n’existe. À partir de la version 0.5.8, l’horizon ne peut jamais dépasser une formule pure que tous les nœuds partagent :
horizon(h) = floor(h ÷ interval) × interval − interval
Avec un intervalle de 172 800 blocs, l’horizon suit le sommet de la chaîne avec un retard d’un à deux intervalles. À la hauteur 500 000, par exemple, l’horizon est au plus à 172 800 : le nœud conserve donc au moins les 327 200 blocs les plus récents, soit environ 57 jours. Après l’instantané suivant, à 518 400, l’horizon avance d’un intervalle et il reste environ 30 jours.
Deux autres limites rendent l’élagage progressif. Les 1 440 blocs les plus récents (6 heures) ne sont jamais élagués, quoi qu’indique l’horizon, et un nœud retire au plus 500 lignes par table et par bloc, si bien que le travail est étalé.
Ce qui reste sous l’horizon
Certains blocs sont conservés quel que soit leur âge :
- le bloc 0 ;
- chaque bloc qui porte une transaction dont l’enregistrement de longévité détient encore de l’argent, conservé avec cette transaction ;
- les transactions financées au moment de l’instantané le plus récent, gardées un intervalle de plus pour que l’instantané puisse les transporter.
Les instantanés transportent ces transactions financées ainsi que les en-têtes de leurs blocs, si bien qu’un nœud qui rejoint la chaîne à partir d’un instantané les détient également.
Les autres horloges
L’élagage n’est pas la seule règle liée à une durée, et les chiffres se confondent facilement :
| Quoi | Durée, sur le mainnet |
|---|---|
| Blocs sur un nœud en fonctionnement | 30 à 60 jours (un à deux intervalles d’instantané) |
| Blocs jamais élagués | les 1 440 plus récents (6 heures) |
| Reçus | 518 400 blocs, environ 90 jours (reçus et la topologie du réseau) |
| Identifiants de transaction | au moins 25 heures, plus que la plus longue fenêtre d’expiration, qui est d’un jour (expiration et horodatages) |
| Limite de retour arrière | 720 blocs, 3 heures (finalité et retour arrière) |
La limite de retour arrière indique jusqu’où la chaîne peut se réorganiser ; elle ne supprime rien.
Conserver davantage
- Un opérateur peut activer
keep_all_historydans node.conf pour conserver localement l’historique qui serait sinon élagué. C’est un choix local, pas le comportement par défaut. - N’importe qui peut payer pour conserver une transaction grâce à un dépôt de longévité.
- Les nœuds d’archivage font tourner un service d’indexation à côté d’un nœud et alimentent l’explorateur (explorateur et les nœuds d’archivage).
- Le stockage décentralisé conserve chaque instantané depuis le bloc 0, les segments de chaque instantané étant détenus par cinq nœuds enregistrés tirés au sort, afin que l’état à n’importe quel instantané passé puisse être reconstruit sans qu’aucun nœud ne conserve tous les blocs (archive et la lecture du passé).
Le loyer allège l’état
L’élagage de l’historique ne touche pas à l’état courant. L’état diminue d’une autre façon : par le loyer. Un compte qui ne peut pas payer son loyer de compte est élagué, les lignes de jeu de données dont le loyer reste impayé sont désactivées, et un fichier stocké dont le dépôt s’épuise est élagué. Dans chaque cas, l’argent restant va au fonds de longévité, et aucun ZBC n’est perdu.