最終更新:
編集

NFTokenPage

NFTokenPageオブジェクトは、同じアカウントが所有するNFTのコレクションを表します。一つのアカウントは複数のNFTokenPageエントリを持つことができ、それらは双方向リストを形成します。

(NonFungibleTokensV1_1 amendmentにより追加されました)

NFTokenPageのJSONの例

{
  "LedgerEntryType": "NFTokenPage",
  "PreviousPageMin":
    "8A244DD75DAF4AC1EEF7D99253A7B83D2297818B2297818B70E264D2000002F2",
  "NextPageMin":
    "8A244DD75DAF4AC1EEF7D99253A7B83D2297818B2297818BE223B0AE0000010B",
  "PreviousTxnID":
    "95C8761B22894E328646F7A70035E9DFBECC90EDD83E43B7B973F626D21A0822",
  "PreviousTxnLgrSeq":
    42891441,
  "NFTokens": [
    {
      "NFToken": {
        "NFTokenID":
          "000B013A95F14B0044F78A264E41713C64B5F89242540EE208C3098E00000D65",
        "URI": "697066733A2F2F62616679626569676479727A74357366703775646D37687537367568377932366E6634646675796C71616266336F636C67747179353566627A6469"
      }
    },
    /* 更に多くのオブジェクト */
  ]
}

NFTokenPageのフィールド

共通フィールドに加えて、NFTokenPageエントリは以下のフィールドを使用します。

名前JSONの型内部の型必須?説明
LedgerEntryType文字列UInt16はいレジャーオブジェクトのタイプを識別文字列です。予約されているレジャーの種類は、0x0050です。
NextPageMin文字列Hash256いいえ次のページの位置情報(もしあれば)。このフィールドの使用方法は、NFTokenオブジェクトの追加の項に記載しています。
NFTokensオブジェクトTOKENはいこのNFTokenPageオブジェクトに含まれるNFTokenオブジェクトのコレクション。本仕様では、1ページあたり32のNFTokenオブジェクトを上限としています。オブジェクトは、NFTokenIDをソートパラメータとして使用して、低いものから高いものへとソートされた順序で格納されています。
PreviousPageMin文字列Hash256いいえ前のページの位置情報(もしあれば)。このフィールドの使用方法は、NFTokenオブジェクトの追加の項に記載しています。
PreviousTxnID文字列HASH256いいえこのNFTokenPageオブジェクトを最も最近変更したトランザクションのトランザクションIDの情報を示します。
PreviousTxnLgrSeq数値UInt32いいえこのNFTokenPageオブジェクトを最も最近変更したトランザクションを含むレジャーのシーケンスを示します。

NFTokenPage IDのフォーマット

NFTokenPage識別子は、NFTokensに最適で、より効率的なページング構造を採用できるように特別に構築されています。

NFTokenPageの識別子は、そのページの所有者の160ビットのAccountIDと、そのページに特定のNFTokenIDが含まれるかどうかを示す96ビットの値を連結して得られます。

具体的には、関数low96(x)が256ビットの値の下位96ビットを返すと仮定すると、NFTokenID A のNFTはNFTokenPageID Bのページに含めることができるのはlow96(A) >= low96(B)の場合のみとなります。

例えば、000B013A95F14B0044F78A264E41713C64B5F89242540EE208C3098E00000D65というIDを持つ先ほどのNFTにlow96関数を適用すると、42540EE208C3098E00000D65が返されます。

この不思議な構造は、SHAMapの構造を利用して、NFTokenPagesの二重リンクされたリストを反復することなく、個々のNFTokenオブジェクトを効率的に検索できるようにするものです。

NFTokenオブジェクトの検索

特定のNFTokenを検索するには、上記のように所有者のアカウントとトークンのNFTokenIDを使用してNFTokenPageIDを計算します。識別子がその値以下であるレジャーの項目を検索します。そのエントリが存在しないか、NFTokenPageでない場合、NFTokenは与えられたアカウントによって保持されていません。

NFTokenオブジェクトの追加

NFTokenオブジェクトを追加するには、そのオブジェクトが含まれるべきNFTokenPageを見つけ(NFTokenオブジェクトを検索するのと同じテクニックを使用します)、そのページに追加します。NFTokenPageが一杯である場合、前後のページを検索し、その3ページでバランスをとりながら、必要に応じて新しいNFTokenPageを挿入します。

NFTokenオブジェクトの削除

NFTokenの削除も追加と同じように動作します。ページ内のNFTokenの数がある閾値を下回ると、サーバはそのページを前後のページと統合して準備金を取り戻そうとします。

NFTokenPageの準備金

NFTokenPageごとに、所有者アカウントに追加で準備金の費用がかかります。つまり、複数のNFTを保有するアカウントでは、NFTあたりの 実効 準備金コストは R /32( R は準備金増分)と低くすることが可能です。

準備金の実例

ページの分割と結合が機能するため、1ページあたりのNFTokenオブジェクトの実際の数はやや予測不可能で、関係する実際のNFTokenID値に依存します。実際には、大量のNFTをミントまたは受領した後、各ページには16個のアイテムしかないこともあれば、32個のアイテムしかないこともあります。

以下の表は、様々なシナリオの下で、様々な数のNFTを所有した場合の所有準備金の合計を示したものです。

所有NFTの数最良のケース一般最悪のケース
32以下0.2 XRP0.2 XRP0.2 XRP
500.4 XRP0.6 XRP0.8 XRP
2001.4 XRP1.8 XRP2.6 XRP
10006.4 XRP8.4 XRP12.6 XRP

これらの数字は推定であり、実際の数字とは異なる場合があります。