最終更新:
編集

DirectoryNode

[ソース]

DirectoryNodeオブジェクトタイプは、レジャーの状態ツリー内の他オブジェクトへのリンクのリストを提供します。概念上の1つの ディレクトリ は、1つ以上の各DirectoryNodeオブジェクトが含まれる二重リンクリストの形式になっています。各DirectoryNodeオブジェクトには、他オブジェクトのIDが最大32個まで含まれています。1番目のオブジェクトはディレクトリのルートと呼ばれ、ルートオブジェクト以外のオブジェクトはすべて必要に応じて自由に追加または削除できます。

ディレクトリには3種類があります。

  • 所有者ディレクトリ は、RippleState(トラストライン)エントリやOfferエントリなどアカウントが所有するその他のエントリの一覧です。
  • オファーディレクトリ は、分散型取引所(DEX)で利用可能なオファーの一覧です。1つのオファーディレクトリには、同一トークン(通貨コードと発行者)に同一の取引レートが設定されているすべてのオファーが含まれます。
  • NFTオファーディレクトリ は、NFTの買いオファーと売りオファーの一覧です。各NFTには、買いオファー用と売りオファー用の2つのディレクトリがあります。

DirectoryNodeのJSONの例

{
  "ExchangeRate": "4e133c40576f7c00",
  "Flags": 0,
  "Indexes": [
    "353E55E7A0B0E82D16DF6E748D48BDAFE4C56045DF5A8B0ED723FF3C38A4787A"
  ],
  "LedgerEntryType": "DirectoryNode",
  "PreviousTxnID": "0F79E60C8642A23658ECB29D939499EA0F28D804077B7EE16613BE0C813A2DD6",
  "PreviousTxnLgrSeq": 91448326,
  "RootIndex": "79C54A4EBD69AB2EADCE313042F36092BE432423CC6A4F784E133C40576F7C00",
  "TakerGetsCurrency": "0000000000000000000000000000000000000000",
  "TakerGetsIssuer": "0000000000000000000000000000000000000000",
  "TakerPaysCurrency": "0000000000000000000000005553440000000000",
  "TakerPaysIssuer": "2ADB0B3959D60A6E6991F729E1918B7163925230",
  "index": "79C54A4EBD69AB2EADCE313042F36092BE432423CC6A4F784E133C40576F7C00"
}

DirectoryNodeのフィールド

名前JSONの型内部の型必須?説明
ExchangeRate数値UInt64いいえ(オファーディレクトリのみ)廃止予定。使用しないでください。
Flags数値UInt32はいこのディレクトリに対して有効になっているブール値フラグのビットマップ。現在、プロトコルではDirectoryNodeオブジェクトのフラグは定義されていません。
Indexes配列Vector256はいこのディレクトリの内容: 他のオブジェクトのIDの配列。
IndexNext数値UInt64いいえ(省略可)このディレクトリに複数のページが含まれている場合、このIDはチェーン内の次のオブジェクトにリンクし、末尾でラップアラウンドします。
IndexPrevious数値UInt64いいえ(省略可)このディレクトリに複数のページが含まれている場合、このIDはチェーン内の前のオブジェクトにリンクし、先頭でラップアラウンドします。
LedgerEntryType文字列UInt16はい値が0x0064(文字列DirectoryNodeにマッピング)の場合は、このオブジェクトがディレクトリの一部であることを示します。
NFTokenID文字列Hash256いいえ(NFTオファーディレクトリのみ) 購入または売却オファーに紐づくNFTのID。.
Owner文字列AccountIDいいえ(所有者ディレクトリのみ)このディレクトリ内のオブジェクトを所有するアカウントのアドレス。
PreviousTxnID文字列Hash256いいえこのエントリを最後に変更したトランザクションの識別ハッシュ。fixPreviousTxnID amendmentにより追加されました。)
PreviousTxnLgrSeq数値UInt32いいえこのエントリを最後に変更したトランザクションが含まれるレジャーインデックスfixPreviousTxnID amendmentにより追加されました。)
RootIndex文字列Hash256はいこのディレクトリのルートオブジェクトのID。
TakerGetsCurrency文字列Hash160いいえ(オファーディレクトリのみ)このディレクトリのオファーのTakerGetsの額の通貨コード。
TakerGetsIssuer文字列Hash160いいえ(オファーディレクトリのみ)このディレクトリのオファーのTakerGetsの額のイシュアー。
TakerPaysCurrency文字列Hash160いいえ(オファーディレクトリのみ)このディレクトリのオファーのTakerPaysの額の通貨コード。
TakerPaysIssuer文字列Hash160いいえ(オファーディレクトリのみ)このディレクトリのオファーのTakerPaysの額のイシュアー。

DirectoryNodeのフラグ

DirectoryNode エントリは以下のフラグを持つことができます。

フラグ名16進数値10進数値説明
lsfNFTokenBuyOffers0x000000011このディレクトリにはNFTの購入オファーが含まれます。
lsfNFTokenSellOffers0x000000022このディレクトリにはNFTの売却オファーが含まれます。

オファーディレクトリと所有者ディレクトリはフラグを使用しません。それらのFlagsの値は常に0です。

DirectoryNodeの準備金

DirectoryNodeエントリは準備金が不要です。

ディレクトリ IDのフォーマット

DirectoryNodeのIDを作成するときには、DirectoryNodeが以下のどのページを表しているかに応じて3種類の方式があります。

  • 所有者ディレクトリまたはNFTオファーディレクトリの1番目のページ(ルートとも呼ばれます)
  • オファーディレクトリの1番目のページ
  • いずれかのディレクトリの以降のページ

所有者ディレクトリまたはNFTオファーディレクトリの1番目のページのIDは、以下の値がこの順序で連結されているSHA-512ハーフです。

  • 所有者ディレクトリのスペースキー(0x004F
  • OwnerフィールドのAccountID。

オファーディレクトリの1番目のページには特殊なIDがあります。このIDの上位192ビットはオーダーブックを定義し、それ以降の64ビットはこのディレクトリ内のオファーの為替レートを定義します。(IDはビッグエンディアンであるため、最初に位置する上位ビットにブックが含まれ、後に位置する下位ビットにクオリティが含まれます。)これにより、最適なオファーから最低のオファーへの順にオーダーブックを反復できます。具体的には、先頭192ビットとは、以下の値がこの順序で連結されているSHA-512ハーフの先頭192ビットです。

  • ブックディレクトリのスペースキー(0x0042
  • TakerPaysCurrencyの160ビットの通貨コード
  • TakerGetsCurrencyの160ビットの通貨コード
  • TakerPaysIssuerのAccountID
  • TakerGetsIssuerのAccountID

オファーディレクトリのIDの下位64ビットは、そのディレクトリ内のオファーのTakerPaysの額をTakerGetsの額で割った結果を、XRP Ledgerの内部金額フォーマットの64ビット数値で表したものです。

DirectoryNodeがディレクトリの1番目のページではない場合、DirectoryNodeのIDは、以下の値をこの順序で連結したSHA-512ハーフです。

  • DirectoryNodeスペースキー(0x0064
  • ルートDirectoryNodeのID
  • このオブジェクトのページ番号(ルートDirectoryNodeは0であるため、この値は1以上の整数値です。)