NFTokenPage

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

(NonFungibleTokensV1_1 amendmentが必要です)

NFTokenPage JSONの例

{
  "LedgerEntryType": "NFTokenPage",
  "PreviousTokenPage":
    "598EDFD7CF73460FB8C695d6a9397E907378C8A841F7204C793DCBEF5406",
  "PreviousTokenNext":
    "598EDFD7CF73460FB8C695d6a9397E9073781BA3B78198904F659AAA252A",
  "PreviousTxnID":
    "95C8761B22894E328646F7A70035E9DFBECC90EDD83E43B7B973F626D21A0822",
  "PreviousTxnLgrSeq":
    42891441,
  "NFTokens": [
    {
      "NFTokenID":
          "000B013A95F14B0044F78A264E41713C64B5F89242540EE208C3098E00000D65",
        "URI": "697066733A2F2F62616679626569676479727A74357366703775646D37687537367568377932366E6634646675796C71616266336F636C67747179353566627A6469"
    },
    /* 更に多くのオブジェクト */
  ]
}

ページのサイズを最小にし、ストレージを最適化するために、Ownerフィールドは存在しません。なぜなら、それはオブジェクトのレジャー識別子の一部としてエンコードされているからです。

NFTokenPage フィールド

NFTokenPage オブジェクトは、以下の必須フィールドと任意フィールドを持つことができます。

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

TokenPage 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 オブジェクトを検索するのと同じテクニックを使用します)、そのページに追加します。NFToken を追加した後にページがオーバーフローした場合は、 nextprevious ページを探し (もしあれば)、その 3 ページでバランスをとりながら、必要に応じて新しいページを挿入します。

NFToken オブジェクトの削除

NFToken は同じ手法で削除することもできます。ページ内の NFToken の数がある閾値を下回ると、サーバーはそのページを前後のページと統合して準備金を取り戻そうとします。

NFTokenPage オブジェクトの準備金

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

準備金の実例

増分準備金の値は、この記事の執筆時点では 2 XRP です。下の表は、あるページが1、8、16、32のNFTを含む場合、トークンごとの _実効_準備金がどの程度になるかを示しています。

増分準備金 1 NFToken 8 NFTokens 16 NFTokens 32 NFTokens 64 NFTokens
5 XRP 5 XRP 0.625 XRP 0.3125 XRP 0.15625 XRP 0.07812 XRP
2 XRP 2 XRP 0.25 XRP 0.125 XRP 0.0625 XRP 0.03125 XRP
1 XRP 1 XRP 0.125 XRP 0.0625 XRP 0.03125 XRP 0.01562 XRP