XRP Ledger Apex is back in Amsterdam

Register Now
Last updated
Edit

NFTokenAcceptOffer

[ソース]

NFTokenAcceptOfferトランザクションはNFTokenの購入または売却のオファーを受け入れるために使用されます。トランザクションは次のいずれかになります。

  • 1つのオファーを受け入れます。これは ダイレクト モードと呼ばれます。
  • 2つの異なるオファー(NFTokenの購入オファーと同じNFTokenに対するの売却オファー)をアトミックに受け入れます。これは ブローカー モードと呼ばれます。

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

NFTokenAcceptOffer JSONの例

{
  "Account": "r9spUPhPBfB6kQeF6vPhwmtFwRhBh2JUCG",
  "Fee": "12",
  "LastLedgerSequence": 75447550,
  "Memos": [
    {
      "Memo": {
        "MemoData": "61356534373538372D633134322D346663382D616466362D393666383562356435386437"
      }
    }
  ],
  "NFTokenSellOffer": "68CD1F6F906494EA08C9CB5CAFA64DFA90D4E834B7151899B73231DE5A0C3B77",
  "Sequence": 68549302,
  "TransactionType": "NFTokenAcceptOffer"
}

トランザクションの例を確認 >

ブローカー vs. ダイレクト モード

トランザクションが動作するモードは、トランザクションのNFTokenSellOfferフィールドとNFTokenBuyOfferフィールドの存在によって決まります。

NFTokenSellOfferNFTokenBuyOfferMode
✔️✔️ブローカー
✔️Xダイレクト
X✔️ダイレクト

もしこれらのフィールドがどちらも指定されていない場合、トランザクションは不正で、temクラスのエラーを発生させます。

ブローカーモードの意味合いは、ダイレクト・モードのそれとは若干異なります。トランザクションを送信するアカウントはブローカーとして機能し、2つのオファーをまとめてマッチングさせますが、関係するNFTokenの所有権を取得することはなく、トランザクションが成功すれば、販売者から購入者に直接転送されます。

実行内容

トランザクションが成功した場合

  • 既存のownerNFTokenPageからトークンが削除され、新しいownerNFTokenPageに追加されます。
  • NFTokenOfferで指定された通り、購入者から販売者に資金が移動します。対応するNFTokenのオファーにTransferFeeが指定されている場合、issuerは指定されたパーセンテージを受け取り、残りはNFTokenの販売者に送られます。

以下の場合、トランザクションはtecコードで失敗します。

  • 購入者が既にNFTokenを所有している。
  • 販売者が現在NFTokenの所有者でない。
  • 取引のオファーの一方または両方の期限が失効している。
  • 売却オファーが特定の宛先アカウントを指定しており、トランザクションの送信者がそのアカウントでない。
  • トランザクションの送信者が購入または売却のオファーを所有している。

フィールド

NFTokenAcceptOffer フィールド

共通フィールドに加えて、NFTokenAcceptOfferトランザクションは以下のフィールドを使用します。

フィールドJSONの型内部の型説明
NFTokenSellOffer文字列Hash256(省略可) NFTokenの売却を提案するNFTokenOfferの識別情報です。
NFTokenBuyOffer文字列Hash256(省略可) NFTokenの購入を提案するNFTokenOfferの識別情報です。
NFTokenBrokerFee通貨額Amount(省略可) このフィールドはブローカーモードでのみ有効であり、2つのオファーをまとめるための手数料としてブローカーが保持する金額を指定します。残りの金額はNFTokenの販売者に送られます。指定する場合、発行者が課す送金手数料を考慮する前に、販売者が受け取る金額が少なくとも売却オファーで示された金額になるように手数料を設定しなければなりません。

ダイレクトモードでは、NFTokenSellOfferまたはNFTokenBuyOfferフィールドのいずれかを指定する必要があります。ブローカーモードでは、両方のフィールドを指定する必要があります。

この機能は、NFTokenの所有者が第三者のブローカーにトークンの売却を提案し、ブローカーがNFTokenを所有したり資金を預けることなく、より高額でNFTokenを売却することを可能にするものです。

両方のオファーが同じ資産に対するものである場合、資金が転送される順序によって、本来成功するはずの取引が、資金不足のために失敗する可能性があります。決定論的なトランザクション実行を保証し、成功の可能性を最大化するために、NFTokenを購入しようとするアカウントから先に資金が引き落とされます。ブローカーに支払われる資金は、販売者に入金される前に入金されます。

ブローカーモードでは、NFTokenBuyOfferNFTokenSellOfferの両方が同じNFTokenIDを指定する必要があります。

エラーケース

すべてのトランザクションで発生する可能性のあるエラーに加えて、NFTokenAcceptOfferトランザクションでは、次のトランザクション結果コードが発生する可能性があります。

エラーコード説明
temDISABLEDNonFungibleTokensV1 Amendmentは有効ではありません。
temMALFORMEDトランザクションのフォーマットが正しくありません。たとえば、NFTokenSellOfferNFTokenBuyOfferのどちらも指定されていないか、NFTokenBrokerFeeに負の値が指定されています。
tecCANT_ACCEPT_OWN_NFTOKEN_OFFER購入者と販売者が同じアカウントになっています。
tecEXPIREDトランザクションで指定されたオファーの有効期限が既に切れています。
tecINSUFFICIENT_FUNDS購入者が申し出た金額を全額持っていない。購入額がXRPで指定されている場合、所有者準備金が原因である可能性があります。購入額がトークンである場合、トークンが凍結 されていることが原因と考えられます。
tecINSUFFICIENT_PAYMENTブローカーモードにおいて、提示された購入額は、BrokerFee および NFTokenの売却コストを支払うには十分な額ではありません。
tecOBJECT_NOT_FOUNDトランザクションで指定されたオファーがレジャーに存在しません。
tecNFTOKEN_BUY_SELL_MISMATCHブローカーモードにおいて、2つのオファーが有効なマッチングではありません。例えば、販売者が購入者の提示額よりも高い金額を提示している、購入と売却のオファーが異なる通貨で提示されている、販売者が購入者や ブローカーとは異なる販売先を指定している、などです。
tecNFTOKEN_OFFER_TYPE_MISMATCHNFTokenBuyOfferで識別されるオブジェクトが実際には購入オファーでない、またはNFTokenSellOfferで識別されるオブジェクトが実際には売却オファーでない場合です。
tecNO_PERMISSION販売者が売却するNFTokenを所有していません。または、マッチングオファーが、オファーを受け入れるアカウントとは異なるDestinationアカウントを指定しています。