LedgerHashes

[ソース]

(レジャーバージョンを一意に示す「ledger hash」文字列データ型と混同しないでください。このセクションでは、LedgerHashesレジャーオブジェクトタイプについて説明します。)

LedgerHashesオブジェクトタイプには、このレジャーバージョン以前のレジャーの履歴がハッシュの形式で含まれています。このレジャータイプのオブジェクトは、レジャーの閉鎖処理の過程で自動的に変更されます。(このときに限り、レジャーの「状態」ツリーはトランザクションまたは疑似トランザクションなしで変更されます。)LedgerHashesオブジェクトの目的は、現行レジャーバージョンのみを指定して過去のレジャーのハッシュを検索できるようにすることです。過去のレジャーバージョンを最大で1回検索できます。

2種類のLedgerHashesオブジェクトがあります。2種類のオブジェクトのフィールドは同一です。各レジャーバージョンの内容は以下のとおりです。

  • 「最近の履歴」のLedgerHashesオブジェクト(1つのみ)
  • 現在のレジャーインデックス(レジャー履歴の長さ)に基づく正確な数の「過去の履歴」のLedgerHashesオブジェクト。具体的には、XRP Ledgerでは65536個のレジャーバージョンごとに新しい「過去の履歴」オブジェクトが1つ追加されます。

注記: 例外として、新しいジェネシスレジャーにはレジャー履歴がないため、LedgerHashesオブジェクトが含まれていません。

LedgerHashesオブジェクトの例(一部省略しています):

{
 "LedgerEntryType": "LedgerHashes",
 "Flags": 0,
 "FirstLedgerSequence": 2,
 "LastLedgerSequence": 33872029,
 "Hashes": [
   "D638208ADBD04CBB10DE7B645D3AB4BA31489379411A3A347151702B6401AA78",
   "254D690864E418DDD9BCAC93F41B1F53B1AE693FC5FE667CE40205C322D1BE3B",
   "A2B31D28905E2DEF926362822BC412B12ABF6942B73B72A32D46ED2ABB7ACCFA",
   "AB4014846DF818A4B43D6B1686D0DE0644FE711577C5AB6F0B2A21CCEE280140",
   "3383784E82A8BA45F4DD5EF4EE90A1B2D3B4571317DBAC37B859836ADDE644C1",
   ... (up to 256 ledger hashes) ...
 ],
 "index": "B4979A36CDC7F3D3D5C31A4EAE2AC7D7209DDA877588B9AFC66799692AB0D66B"
}

LedgerHashesオブジェクトのフィールドは次のとおりです。

名前 JSONの型 内部の型 説明
LedgerEntryType 文字列 UInt16 0x0068が文字列LedgerHashesにマッピングされている場合は、このオブジェクトがレジャーハッシュのリストであることを示します。
FirstLedgerSequence 数値 UInt32 廃止予定 使用しないでください。(本番環境のXRP Ledgerの「最近のハッシュ」オブジェクトでは、このフィールドの値は2です。これは、以前のrippledソフトウェアによるものです。この値は「最近のハッシュ」オブジェクトの更新に伴い持ち越されます。このフィールドは新しい「過去の履歴」オブジェクトには含まれていません。また、新しいバージョンのrippledで導入された並列ネットワークの「最近のハッシュ」オブジェクトにも含まれていません。)
LastLedgerSequence 数値 UInt32 このオブジェクトのHashes配列の最後の要素のレジャーインデックス
Hashes 文字列の配列 STI_VECTOR256 最大256個のレジャーハッシュからなる配列。その内容は、これがLedgerHashesオブジェクトのどのサブタイプであるかに応じて異なります。
Flags 数値 UInt32 このオブジェクトのブールフラグのビットマップ。このタイプではフラグは定義されていません。

最近の履歴のLedgerHashes

ジェネシスレジャー以降、各レジャーには「最近の履歴」サブタイプのLedgerHashesオブジェクトが1つだけ存在します。このオブジェクトでは、最近の256個のレジャーバージョン(または、レジャー履歴に記録されたレジャーの数が256未満の場合は256未満)を識別するハッシュがHashes配列に含まれています。新しいレジャーを閉鎖するたびに、閉鎖処理の過程の一部で「最近の履歴」オブジェクトが、このレジャーバージョンの生成元である前のレジャーバージョン(このレジャーバージョンの 親レジャー )のハッシュで更新されます。ハッシュ数が256を超えると、最も古いハッシュが削除されます。

特定のレジャーの「最近の履歴」LedgerHashesオブジェクトを使用して、その特定のレジャーバージョンより古い256個のレジャーバージョンから、任意のレジャーインデックスのハッシュを取得できます。

過去の履歴のLedgerHashes

「過去の履歴」のLedgerHashesのエントリーには、レジャー履歴全体の256個ごとのレジャーバージョン(フラッグレジャー)のハッシュがまとめて含まれています。フラッグレジャーの子が閉鎖すると、最も新しい「過去の履歴」LedgerHashesオブジェクトのHashes配列にフラッグレジャーのハッシュが追加されます。65536個のレジャーごとに、rippledは新しいLedgerHashesオブジェクトを作成します。これにより、各「過去の履歴」オブジェクトには256個のフラッグレジャーのハッシュが含まれます。

注記: 最も古い「過去の履歴」LedgerHashesオブジェクトのエントリー数は255です。これは、ジェネシスレジャーのレジャーインデックスが0ではなく1であるためです。

「過去の履歴」LedgerHashesオブジェクトはスキップリスト として機能するので、任意の履歴フラッグレジャーのハッシュをそのインデックスから取得できます。さらに、フラッグレジャーの「最近の履歴」オブジェクトを使用してその他のレジャーのハッシュを取得できます。

LedgerHashes IDのフォーマット

[ソース]

LedgerHashesオブジェクトIDには2種類のフォーマットがあります。これは、オブジェクトのサブタイプが「最近の履歴」と「過去の履歴」のいずれであるかに応じて決まります。

「最近の履歴」 LedgerHashesオブジェクトのIDは、LedgerHashesスペースキー(0x0073)のSHA-512ハーフです。つまり「最近の履歴」のIDは常にB4979A36CDC7F3D3D5C31A4EAE2AC7D7209DDA877588B9AFC66799692AB0D66Bです。

「過去の履歴」LedgerHashesオブジェクトのIDは、以下の値がこの順序で連結されているSHA-512ハーフです。

  • LedgerHashesスペースキー(0x0073
  • オブジェクトのHashes配列のフラッグレジャーの32ビットレジャーインデックスを65536で割った値。

    ヒント: 65536で割ることで最上位16ビットが維持されます。これは、「過去の履歴」オブジェクトに含まれているすべてのフラッグレジャーでのみ同一です。この点を踏まえて、フラッグレジャーのハッシュが含まれているLedgerHashesオブジェクトを検索できます。