エクスプローラーとアーカイブノード
ZooBC のエクスプローラーでは、誰でもブロック、トランザクション、アカウント、ノードを閲覧し、古いトランザクションのメッセージを検索し、日ごとの統計を読むことができます。そのほとんどは通常のノードからではなく、アーカイブのサービスから来ています。これは登録済みノードの横で動き、チェーンの履歴の検索可能なインデックスを保持する別のプログラムです。
通常のノードが保持するもの
通常のノードは、現在の状態(残高、レコード、レジストリ)と、最近のブロックの範囲を保持します。スナップショット期間 1 つから 2 つ分で、mainnet では 30 日から 60 日です。それはチェーンを検証し、新しいノードがスナップショットから参加するのを手伝うには十分です(スナップショットとファストシンク)。それより古いブロック、トランザクション、レシートはプルーニングされ(履歴のプルーニング)、それによってノードは軽く保たれます。プルーニングされる履歴をローカルに保持したい運用者は、node.conf で keep_all_history を設定できます。
その結果、ノードだけでは「ブロック 0 以降のすべてのトランザクション」にも、メッセージに対する全文検索にも答えられません。
アーカイブのサービス
その隙間を埋めるのが、アーカイブのサービス zoobc-archival-api です。運用者が archival_node = true を設定したノードがそれを起動し、監視します。このサービスはノード自身の SQLite データベースを読み、ブロックとトランザクションのインデックスを MySQL のストアに保持するため、履歴、アカウントのタイムライン、統計、検索に答えることができます。通常のルートのアーカイブ版に加えて、独自のルートも提供します。
| ルート | 答えるもの |
|---|---|
/search/transactions | メッセージを含むトランザクションの検索 |
/stats/… | ネットワークの統計 |
/spine/blocks | スパインチェーン のブロック |
/network/map | ネットワークの地図 |
/archive/stats | アーカイブ自体についての統計 |
答えを比較する開発者にとって重要な細部が 1 つあります。アーカイブのサービスは 16 進の値を大文字で書き、ノードは小文字で書きます。
チェーン上での宣言
登録済みノードのオーナーは、RegisterArchival(タイプ 46)でアーカイブのサービスを宣言します。指定するノード鍵は、送信者が所有する登録済みノードのものでなければなりません。ステークはロックされず、UnregisterArchival(タイプ 47)でエントリーを取り下げます。宣言されたサービスは誰でも GET /api/v1/registry/archivals で一覧でき、ウェブウォレット はゲートウェイが応答しないときにその一覧を読みます。
エクスプローラー
エクスプローラーは ゲートウェイ が提供するウェブページです。アーカイブのルートの上に作られており、ブロック、トランザクション、アカウント、ノード、スパイン、統計、検索を扱います。ゲートウェイは API の各読み取りをまずアーカイブのサービスに送り、アーカイブのサービスにないルートについてはノードへ回します。エクスプローラーは各ノードのソフトウェアのバージョンも表示するため、運用者や観察者は誰が更新したかを確認できます(リリースとアップデート)。
そのすべてが公開されたチェーンのデータです。チェーン上で行動するには鍵が必要ですが、見るだけなら決して必要ありません(ノード API)。
過去を読む唯一の方法ではない
アーカイブのサービスは便利な道具であって、チェーンの記憶ではありません。
ブロック 0 以降のすべてのスナップショットは、すべてのノードではなく分散ストレージが保持します。そのため誰でも、スパインチェーンをある時点のスナップショットまで遡り、どのアーカイブノードにも頼らずにその時点の状態を再構築できます(アーカイブと過去の読み取り)。
アーカイブのサービスがしないこと:ブロックを作ることはしません。それをするのは登録済みノードだけです。また、ノードが報告を送る ZooBC Foundation の中央データベースもありません。リレーが運ぶのはウォレット間の通話であって、トランザクションではありません(リレー)。