レジャーの構成要素
XRP Ledgerはブロックチェーンであり、データブロックの履歴を順番に並べたものです。XRP Ledgerブロックチェーンのブロックは、 レジャーバージョン または略して レジャー と呼ばれます。
コンセンサスプロトコルは、以前のレジャーバージョンを起点として、次に適用するトランザクションのセットについてバリデータ間の合意を形成し、それらのトランザクションを適用することで全員が同じ結果を得たことを確認します。これが成功すると、結果として新しいレジャーバージョンが作成されます。そこから、次のレジャーバージョンを構築するプロセスが繰り返されます。
各レジャーバージョンには、 状態データ 、 トランザクションセット 、メタデータを含む ヘッダー が含まれます。
状態データ
状態データ とは、そのレジャーバージョンにおけるすべてのアカウント、残高、設定、その他の情報のスナップショットを表します。サーバがネットワークに接続すると、最初に行うことの1つは、新しいトランザクションを処理し、現在の状態に関するクエリに答えることができるように、現在の状態データの完全なセットをダウンロードすることです。ネットワーク内のすべてのサーバが状態データの完全なコピーを持っているため、すべてのデータは公開され、どのコピーも同じように有効です。
状態データは レジャーエントリ と呼ばれる個別のオブジェクトで構成され、ツリー形式で保存されます。各レジャーエントリには一意の256ビットのIDがあり、それを使用して状態ツリーから検索することができます。
トランザクションセット
レジャーに加えられたすべての変更は、トランザクションの結果です。各レジャーバージョンには、特定の順序で新たに適用されたトランザクションのグループである トランザクションセット が含まれています。あるレジャーのトランザクションセットを前のレジャーバージョンの状態データに適用すると、結果としてそのレジャーの状態データが得られます。
レジャーのトランザクションセット内のすべてのトランザクションは、以下の両方の要素を持ちます。
- 送信者がレジャーに何を指示したかを示す トランザクションの内容 。
- トランザクションがどのように処理され、レジャーの状態データにどのような影響を与えたかを正確に示す トランザクションのメタデータ 。
レジャーヘッダー
レジャーヘッダー は、レジャーバージョンの概略を示すデータのブロックです。レポートの表紙のように、レジャーバージョンを一意に識別し、その内容を記載し、他の注意事項とともに作成時刻を表しています。レジャーヘッダーには以下の情報が含まれます。
- チェーン内でのレジャーの位置を示す レジャーインデックス 。レジャーは、1つ小さいインデックスを持つレジャーの上に構築され、 ジェネシスレジャー として知られるスタート地点に戻ります。これは、すべてのトランザクションと結果の公開履歴を形成します。
- レジャーの内容を一意に識別する レジャーハッシュ 。ハッシュは、レジャーバージョンの内容が変更された場合、ハッシュが完全に異なるものになるように計算されます。これは、レジャーのデータが消失、変更、破損していないことを示すチェックサムのようなものでもあります。
- 親レジャーのハッシュ。レジャーバージョンは、その前の 親レジャー との違いによって定義されることが多く、ヘッダーには親レジャーの一意なハッシュも含まれます。
- このレジャーの内容が確定した正式なタイムスタンプとなる 閉鎖時刻 。この数値は秒数(一の位)が四捨五入され、通常は10です。
- このレジャーの状態データのチェックサムとして機能する 状態データのハッシュ 。
- このレジャーのトランザクションセットのデータのチェックサムとして機能する トランザクションセットのハッシュ。
- その他、存在するXRPの総量や、閉鎖時刻が四捨五入された値など、いくつかのメモがあります。
レジャーのトランザクションセットと状態データのサイズは無制限ですが、レジャーヘッダーは常に固定サイズです。レジャーヘッダーの正確なデータとバイナリ形式については、レジャーヘッダーをご覧ください。
バリデーションの状況
サーバの Unique Node List のバリデータのコンセンサスがレジャーバージョンの内容に合意すると、そのレジャーバージョンは検証済みであり、変更不可であるとみなされます。レジャーの内容は、後続のトランザクションが新しいレジャーバージョンを作成し、チェーンを更新することによってのみ変更できます。
レジャーバージョンが新しく作成された時点では、まだ未検証です。候補となるトランザクションが異なるサーバに到着するタイミングが異なるため、ネットワークはチェーンの次のステップとなる複数の異なるレジャーバージョンを構築し、提案する可能性があります。コンセンサスプロトコルは、そのうちのどれを有効化するかを決定します。(検証済みのレジャーバージョンに存在しなかったトランザクション候補は、通常、次のレジャーバージョンのトランザクションセットに含まれます)。
レジャーインデックスとレジャーハッシュ
レジャーバージョンを識別する方法には、 レジャーインデックス と レジャーハッシュ の2種類があります。この2つのフィールドはどちらもレジャーを識別しますが、その目的は異なります。レジャーインデックスはチェーン内でのレジャーの位置を表し、レジャーハッシュはレジャーの内容を表します。
異なるチェーンのレジャーは、レジャーインデックスは同じでもハッシュが異なることがあります。また、検証されていないレジャーバージョンを扱う場合、インデックスが同じでも内容が異なるため、ハッシュが異なる複数のレジャー候補が存在する可能性があります。
同じレジャーハッシュを持つ2つのレジャーは、常に完全に同一です。