履歴のプルーニング
すべてのブロックを永久に保持するチェーンは、すべてのノードにその履歴全体を保存する費用を負わせます。ZooBC のノードは代わりにプルーニングを行います。スナップショットに結び付いた境界より下で、古いブロック、トランザクション、台帳の行、レシート、置き換えられたレコードの版を削除します。残高、レジストリの席、データセットの行などの現在の状態は、この方法でプルーニングされることはありません。削除されるのは古い履歴だけです。mainnet の稼働中のノードは、30 日から 60 日分のブロックを保持しています。
境界
mainnet では 172,800 ブロック(約 30 日)ごとに、各ノードが状態のスナップショットを書き出します(スナップショットとファストシンク)。プルーニングの境界は、最新の 2 つのスナップショットの参照の高さのうち古い方です。スナップショットが 1 つしかない場合は、その高さから 1 間隔を引いたもので、スナップショットのマニフェストが存在するまでは何もプルーニングされません。バージョン 0.5.8 以降、境界は、すべてのノードが共有する純粋な式より先に進むことは決してありません。
horizon(h) = floor(h ÷ interval) × interval − interval
間隔が 172,800 ブロックなら、境界は先端から 1 から 2 間隔遅れてついていきます。たとえば高さ 500,000 では境界は最大 172,800 なので、ノードは少なくとも最新の 327,200 ブロック、約 57 日分を保持します。次のスナップショット(518,400)の後、境界は 1 間隔上がり、約 30 日分が残ります。
さらに 2 つの制限によって、プルーニングは穏やかに行われます。境界がどうであれ、最新の 1,440 ブロック(6 時間)は決してプルーニングされません。そしてノードはブロックごとにテーブルあたり最大 500 行しか削除しないため、作業は分散されます。
境界より下でも残るもの
どれだけ古くても保持されるブロックがあります。
- ブロック 0
- データ保持のための支払い(ロンジェビティ) のレコードがまだお金を持っているトランザクションを運ぶすべてのブロック。そのトランザクションとともに保持されます。
- 最新のスナップショットの時点で資金拠出されているトランザクション。スナップショットがそれを運べるよう、1 間隔長く保持されます。
スナップショットは、それらの資金拠出されたトランザクションとそのブロックのヘッダーを運ぶため、スナップショットから参加したノードもそれらを保持します。
他の時計
時間の幅を持つルールはプルーニングだけではなく、数値を混同しやすくなっています。
| 何が | mainnet での長さ |
|---|---|
| 稼働中のノード上のブロック | 30 日から 60 日(スナップショットの間隔 1 つから 2 つ) |
| 決してプルーニングされないブロック | 最新の 1,440(6 時間) |
| レシート | 518,400 ブロック、約 90 日(レシートとネットワークトポロジー) |
| トランザクション ID | 少なくとも 25 時間。最長 1 日の有効期限の時間枠より長い(有効期限とタイムスタンプ) |
| ロールバック制限 | 720 ブロック、3 時間(ファイナリティとロールバック) |
ロールバック制限は、チェーンがどこまで遡って再編成できるかを示すもので、何も削除しません。
より多くを保持する
- 運用者は node.conf で
keep_all_historyを設定して、プルーニングされる履歴をローカルに保持できます。これはローカルな選択であって、既定ではありません。 - 誰でも データ保持のための支払い(ロンジェビティ) のデポジットによって、1 つのトランザクションを保持するために支払うことができます。
- アーカイブノードは、ノードの横でインデックス作成のサービスを動かし、エクスプローラーを提供します(エクスプローラーとアーカイブノード)。
- 分散ストレージはブロック 0 以降のすべてのスナップショットを保持し、各スナップショットのチャンクは抽選で選ばれた 5 つの登録済みノードが持ちます。そのため、どのノードもすべてのブロックを保持することなく、過去の任意のスナップショットの時点の状態を再構築できます(アーカイブと過去の読み取り)。
状態はレントで整理される
履歴のプルーニングは、現在の状態には手を付けません。状態は別の方法、つまりレントによって縮小します。アカウントレントとプルーニング を支払えないアカウントはプルーニングされ、レントが支払われないデータセットの行は無効化され、デポジットが尽きた保存ファイルはプルーニングされます。いずれの場合も残ったお金はロンジェビティプールに入り、ZBC が失われることはありません。