最終更新:
編集

AMMWithdraw

[ソース]

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

AMMの流動性プロバイダトークン(LPトークン)を返却することで、自動マーケットメーカー(AMM)インスタンスから資産を引き出します。

AMMWithdraw JSONの例

{
    "Account" : "rJVUeRqDFNs2xqA7ncVE6ZoAhPUoaJJSQm",
    "Amount" : {
        "currency" : "TST",
        "issuer" : "rP9jPyP5kyvFRb6ZiRghAGw5u8SGAmU4bd",
        "value" : "5"
    },
    "Amount2" : "50000000",
    "Asset" : {
        "currency" : "TST",
        "issuer" : "rP9jPyP5kyvFRb6ZiRghAGw5u8SGAmU4bd"
    },
    "Asset2" : {
        "currency" : "XRP"
    },
    "Fee" : "10",
    "Flags" : 1048576,
    "Sequence" : 10,
    "TransactionType" : "AMMWithdraw"
}

AMMWithdraw フィールド

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

フィールドJSONの型内部の型必須?説明
AssetオブジェクトSTIssueはいAMMのプールにある資産の一つを定義します。JSONでは、currencyissuerフィールドを持つオブジェクトになります(XRPの場合はissuerを省略します)。
Asset2オブジェクトSTIssueはいAMMのプールにあるもう一つの資産を定義します。JSONでは、currencyissuerフィールドを持つオブジェクトです(XRPの場合はissuerを省略)。
Amount通貨額AmountいいえAMMから引き出す1つの資産の量。これは、AMMのプールにある資産の1つ(トークンまたはXRP)と一致する必要があります。
Amount2通貨額AmountいいえAMMから引き出す他の資産の量。存在する場合、これはAMMのプール内の他の資産と一致する必要があり、Amountと同じにすることはできません。
EPrice通貨額Amountいいえ引き出しに必要な、資産の1単位あたりに支払う最低有効価格(LPトークンの返却単位)。
LPTokenIn通貨額AmountいいえAMMのLPトークンの引き替え数。

注記
ダブルアセット出金の場合、Asset1Amount1またはAmount2が対応していれば、Asset2はもう一方に対応することが可能です。しかし、両者を一致させることをお勧めします(つまり、Amount2Asset2で定義されたアセットの金額です)。その方が混乱を招きにくくなります。

AMMWithdrawモード

このトランザクションには、指定するフラグによっていくつかのモードがあります。それぞれのモードは、特定のフィールドの組み合わせを必要とし、以下の2つのカテゴリに分類されます。

  • ダブルアセット出金: AMMのプールから両方の資産をその残高と同じ割合で受け取ります。この出金には手数料はかかりません。
  • シングルアセット出金: AMMのプールから1つの資産を受け取ります。AMMは、出金によりプール内の資産残高がどれだけ変動するかによって手数料を算出します。出金のモードによって、手数料が支払われたLPトークンの量から差し引かれるか、出金する資産の量から差し引かれるか決まります。

以下の項目の組み合わせは、ダブルアセット出金について示しています。

| フラグ名 | フラグ値 | 指定フィール | 意味 | |-----------------|--------------|---------------- ----|---------| | tfLPToken | 0x00010000 | LPTokenInのみ | 指定された量のLPトークンを返却し、LPトークンの発行総数に対する返却されたトークンの割合に基づく金額の両方の資産を受け取ります。 | | tfWithdrawAll | 0x00020000 | なし | LPトークンを 全て 返却し、AMMのプールにある両方の資産を最大限受け取ります。 | | tfTwoAsset | 0x00100000 | AmountAmount2 | 指定した金額を上限として、AMMの資産の両方を出金します。実際に受け取る金額は、AMMのプールの資産残高の割合と同じになります。 |

以下の項目の組み合わせは、シングルアセット出金について示しています。

フラグ名フラグ値指定フィールド意味
tfSingleAsset0x00080000AmountのみLPトークンを指定した数だけ返却し、1つの資産を指定した量だけ出金します。
tfOneAssetWithdrawAll0x00040000AmountのみLPトークンを全て返却することで、1つの資産を指定した金額以上出金します。指定された金額以上を受け取ることができない場合は失敗します。指定する金額は0でもかまいません。この場合、少しでも正の金額を出金できれば成功します。
tfOneAssetLPToken0x00200000AmountLPTokenIn指定した量のLPトークンを返却することで、1つの資産を指定した量まで出金します。
tfLimitLPToken0x00400000AmountEPrice指定した1つの資産の量を上限として出金しますが、受け取る資産の一単位あたりのLPトークンで指定した有効価格より高い金額を支払うことはありません。

これら以外のフィールドとフラグの組み合わせは無効です。

シングルアセット出金手数料

シングルアセット出金にかかる手数料は、ダブルアセット出金を行い、AMMを使用して指定しない方の資産を全て交換する場合と同じになるように計算されます。取引手数料は、交換に必要な金額に適用されますが、残りの出金分には適用されません。

AMMの削除

トランザクションがAMMに存在する全ての資産を出金すると、AMMは関連するすべてのトラストラインとともに自動的に削除されます。ただし、1回のトランザクションで削除できるトラストラインの数には制限があります。トラストラインが多すぎる場合、AMMは空の状態でレジャーに残ります。これはAMMDeleteトランザクションで削除するか、「空のAMM」に対する特別なダブルアセット入金(AMMDepositトランザクション)で補充することができます。AMMが空の間は、そのAMMに対する他の操作は無効です。

AMMWithdrawのフラグ

AMMWithdrawトランザクションは、以下のようにFlagsフィールドの値をサポートしています。

フラグ名16進数値10進数値説明
tfLPToken0x0001000065536指定された額のLPトークンを返還する、ダブルアセット出金を行います。
tfWithdrawAll0x00020000131072LPトークンをすべて返還する、ダブルアセット出金を行います。
tfOneAssetWithdrawAll0x00040000262144全てのLPトークンを返還する、シングルアセット出金を行います。
tfSingleAsset0x00080000524288引き出す資産を指定して、シングルアセット出金を行います。
tfTwoAsset0x001000001048576両資産の金額を指定して、ダブルアセット出金を行います。
tfOneAssetLPToken0x002000002097152シングルアセット出金を行い、指定された額のLPトークンを受け取ります。
tfLimitLPToken0x004000004194304有効価格を指定して、シングルアセット出金を行います。

これらのフラグのうちの 1つのみ と、任意のグローバルフラグを指定する必要があります。

エラーケース

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

エラーコード説明
tecAMM_EMPTYAMMのプールに資産がありません。この状態では、AMMを削除するか、新しい入金を行い資金を供給することしかできません。
tecAMM_BALANCEトランザクションによって、プールから1つの資産をすべて引き出そうとしている、もしくはtfWithdrawAllの場合に端数処理によって0以外の金額が残ってしまっています。
tecAMM_FAILED例えば、EPriceフィールドに指定された有効価格が低過ぎる場合など、出金に関する条件が成立しませんでした。
tecAMM_INVALID_TOKENSトークンペアのAMMが存在しないか、計算の結果、引き出し額がゼロに丸められました。
tecFROZENトランザクションは凍結されたトークンを引き出そうとしました。
tecINSUF_RESERVE_LINEトランザクションの送信者は、このトランザクションを処理するための準備金要件の増加に対応できません。おそらく、引き出される資産の1つを保持するために少なくとも1つの新しいトラストラインが必要ですが、新しいトラストラインのための追加の所有者準備金分のXRPを持っていないためでしょう。
tecNO_AUTH送信者は、引き出し資産のいずれかを保有する権限を有していません。
temMALFORMEDトランザクションで無効なフィールドの組み合わせが指定されました。AMMWithdrawモードをご覧ください。
temBAD_AMM_TOKENS例えば、issuerがAMMの関連するAccountRootアドレスでない、currencyがこのAMMのLPトークンの通貨コードでない、またはトランザクションがこのAMMのLPトークンをAssetフィールドの1つに指定した、などです。
terNO_AMMトランザクションで指定した資産ペアの自動マーケットメーカーインスタンスが存在しません。