[JA] AMMWithdraw

This commit is contained in:
develoQ
2023-02-28 18:19:13 +09:00
parent 5bbffe6f09
commit 8207500805
2 changed files with 127 additions and 2 deletions

View File

@@ -0,0 +1,125 @@
---
html: ammwithdraw.html
parent: transaction-types.html
blurb: LPTokenを自動マーケットメーカーに返却し、プールが保有する資産の一部と引き換える。
labels:
- AMM
status: not_enabled
---
# AMMWithdraw
[[Source]](https://github.com/gregtatcam/rippled/blob/amm-core-functionality/src/ripple/app/tx/impl/AMMWithdraw.cpp "Source")
<!-- TODO: Update source link to merged version when available -->
{% include '_snippets/amm-disclaimer.md' %}
AMMの流動性プロバイダトークンLPトークンを返すことで、[自動マーケットメーカー](automated-market-makers.html)(AMM)インスタンスから資産を引き出します。
## {{currentpage.name}} JSONの例
```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"
}
```
{% include '_snippets/tx-fields-intro.md' %}
| フィールド | JSONの型 | [内部の型][] | 必須? | 説明 |
|:-------------|:-----------|:-----------|:------|:------------|
| `Asset` | オブジェクト | STIssue | はい | AMMのプールにある資産の一つを定義します。JSONでは、`currency``issuer`フィールドを持つオブジェクトになりますXRPの場合は`issuer`を省略します)。 |
| `Asset2` | オブジェクト | STIssue | はい | AMMのプールにあるもう一つの資産を定義します。JSONでは、`currency``issuer`フィールドを持つオブジェクトです(XRPの場合は`issuer`を省略)。|
| `Amount` | [通貨額][] | Amount | いいえ | AMMから引き出す1つの資産の量。これは、AMMのプールにある資産の1つトークンまたはXRPと一致する必要があります。 |
| `Amount2` | [通貨額][] | Amount | いいえ | AMMから引き出す他の資産の量。存在する場合、これはAMMのプール内の他の資産と一致する必要があり、`Amount`と同じにすることはできません。 |
| `EPrice` | [通貨額][] | Amount | いいえ | 引き出しに必要な、資産の1単位あたりに支払う最低有効価格LPトークンの返却単位。 |
| `LPTokenIn` | [通貨額][] | Amount | いいえ | AMMのLPトークンの引き替え数。 |
**注記:** ダブルアセット出金の場合、`Asset1``Amount1`または`Amount2`が対応していれば、`Asset2`はもう一方に対応することが可能です。しかし、両者を一致させることをお勧めします(つまり、`Amount2``Asset2`で定義されたアセットの金額です)。その方が混乱を招きにくくなります。
### AMMWithdrawモード
このトランザクションには、指定するフラグによって、いくつかのモードがあります。それぞれのモードは、特定のフィールドの組み合わせを必要とし、以下の2つのカテゴリーに分類されます。
- **ダブルアセット出金**: AMMのプールから両方の資産を、その残高と同じ割合で受け取ります。これらの引き出しには手数料はかかりません。
- **シングルアセット出金**, AMMのプールから1つの資産を受け取ります。AMMは、あなたの引き出しによってプール内の資産残高がどれだけ変動するかによって手数料を設定します。引き出しのモードによって、手数料の額は、支払われたLPトークンの量から差し引かれるか、引き出される資産の量から差し引かれるか決まります。
以下の項目の組み合わせは、**ダブルアセット出金**について示しています。
| フラグ名 | フラグ値 | 指定フィール | 意味 |
|-----------------|--------------|---------------- ----|---------|
| `tfLPToken` | `0x00010000` | `LPTokenIn`のみ | 指定された量のLPトークンを返還し、AMMのプールから、LPトークンの発行総数に対する返還されたトークンの割合に基づく金額の両資産を受 け取ります。 |
| `tfWithdrawAll` | `0x00020000` | なし | LPトークンを _全て_ 返還し、AMMのプールにある両資産を最大限受け取ります。 |
| `tfTwoAsset` | `0x00100000` | `Amount``Amount2` | AMMの資産を、指定した金額を上限として、両方とも引き出します。実際に受け取る金額は、AMMのプールの資産残高の割合と同じになります。 |
以下の項目の組み合わせは、**シングルアセット出金**について示しています。
| フラグ名 | フラグ値 | 指定フィールド | 意味 |
|-------------------------|--------------|-----------------------|---------|
| `tfSingleAsset` | `0x00080000` | `Amount`のみ | LPトークンを必要な数だけ返還し、1つの資産を指定した量だけ出金する。 |
| `tfOneAssetWithdrawAll` | `0x00040000` | `Amount`のみ | LPトークンを全て返還することで、1つの資産を指定した金額以上引き出します。指定された金額以上を受け取ることができない場合は失敗します。指定する金額は0でもかまいません。この場合、少しでも正の金額を引き出せば成功します。 |
| `tfOneAssetLPToken` | `0x00200000` | `Amount``LPTokenIn` | 指定した量のLPトークンを返還することで、1つの資産を指定した量まで引き出します。 |
| `tfLimitLPToken` | `0x00400000` | `Amount``EPrice` | 指定した1つの資産の量を上限として出金しますが、受け取る資産の一単位あたりのLPトークンで指定した有効価格より高い金額を支払うことはありません。 |
これら以外のフィールドとフラグの組み合わせは無効です。
### シングルアセット出金手数料
シングルアセット出金にかかる手数料は、ダブルアセット出金を行い、AMMを使用してもう一方の資産を全て引き出しにかかる資産と交換した場合と同じになるように計算されます。取引手数料は、取引に必要な金額に適用されますが、残りの引き出し分には適用されません。
<!-- TODO: add a formula and example calculation(s) of single-asset withdrawal fees -->
### AMMWithdrawフラグ
AMMWithdrawタイプのトランザクションは、以下のように[`Flags`フィールド](transaction-common-fields.html#Flagsフィールド)の値を追加でサポートしています。
| フラグ名 | 16進数値 | 10進数値 | 説明 |
|:------------------------|:-------------|:--------------|:----------------------|
| `tfLPToken` | `0x00010000` | 65536 | 指定された額のLPトークンを返還する、ダブルアセット出金を行います。 |
| `tfWithdrawAll` | `0x00020000` | 131072 | LPトークンをすべて返還する、ダブルアセット出金を行います。 |
| `tfOneAssetWithdrawAll` | `0x00040000` | 262144 | 全てのLPトークンを返還する、シングルアセット出金を行います。 |
| `tfSingleAsset` | `0x00080000` | 524288 | 引き出す資産を指定して、シングルアセット出金を行います。|
| `tfTwoAsset` | `0x00100000` | 1048576 | 両資産の金額を指定して、ダブルアセット出金を行います。 |
| `tfOneAssetLPToken` | `0x00200000` | 2097152 | シングルアセット出金を行い、指定された額のLPトークンを受け取ります。 |
| `tfLimitLPToken` | `0x00400000` | 4194304 | 有効価格を指定して、シングルアセット出金を行います。 |
これらのフラグのうちの **1つのみ** と、任意の[グローバルフラグ](transaction-common-fields.html#グローバルフラグ)を指定する必要があります。
## エラーケース
すべてのトランザクションで発生する可能性のあるエラーに加えて、{{currentpage.name}}トランザクションでは、次の[トランザクション結果コード](transaction-results.html)が発生する可能性があります。
| エラーコード | 説明 |
|:-------------------------|:---------------------------------------------|
| `tecFROZEN` | トランザクションは[凍結](freeze.html)されたトークンを引き出そうとしました。 |
| `tecAMM_BALANCE` | トランザクションによって、プールから1つの資産をすべて引き出そうとしている、もしくは`tfWithdrawAll`の場合に端数処理によって0以外の金額が残ってしまっています。 |
| `tecAMM_FAILED_WITHDRAW` | 例えば、`EPrice`フィールドに指定された有効価格が低過ぎる場合など、引き出しに関する条件が成立しませんでした。 |
| `tecAMM_INVALID_TOKENS` | トークンペアのAMMが存在しないか、計算の結果、引き出し額がゼロに丸められました。 |
| `tecINSUF_RESERVE_LINE` | トランザクションの送信者は、このトランザクションを処理するための[準備金要件](reserves.html)の増加に対応できません。おそらく、引き出される資産の1つを保持するために少なくとも1つの新しいトラストラインが必要ですが、新しいトラストラインのための追加の所有者準備金分のXRPを持っていないためでしょう。 |
| `tecNO_AUTH` | 送信者は、引き出し資産のいずれかを保有する権限を有していません。 |
| `temBAD_AMM_OPTIONS` | トランザクションで無効なフィールドの組み合わせが指定されました。[AMMWithdrawモード](#ammwithdrawモード)を参照してください。 |
| `temBAD_AMM_TOKENS` | 例えば、`issuer`がAMMの関連するAccountRootアドレスでない、`currency`がこのAMMのLPトークンの通貨コードでない、またはトランザクションがこのAMMのLPトークンをAssetフィールドの1つに指定した、などです。 |
| `terNO_AMM` | トランザクションで指定した資産ペアの自動マーケットメーカーインスタンスが存在しません。 |
<!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %}
{% include '_snippets/tx-type-links.md' %}
{% include '_snippets/rippled_versions.md' %}

View File

@@ -50,7 +50,7 @@ Withdraw assets from an [Automated Market Maker](automated-market-makers.html) (
| `EPrice` | [Currency Amount][] | Amount | No | The minimum effective price, in LP Token returned, to pay per unit of the asset to withdraw. |
| `LPTokenIn` | [Currency Amount][] | Amount | No | How many of the AMM's LP Tokens to redeem. |
**Note:** For a two-asset withdrawal, it is possible for `Asset` to correspond to _either_ `Amount` or `Amount2` as long as `Asset2` corresponds to the other one. It is recommended to match them (that is, `Amount2` is an amount of the asset defined in `Asset2`) because it is less confusing that way.
**Note:** For a double-asset withdrawal, it is possible for `Asset` to correspond to _either_ `Amount` or `Amount2` as long as `Asset2` corresponds to the other one. It is recommended to match them (that is, `Amount2` is an amount of the asset defined in `Asset2`) because it is less confusing that way.
### AMMWithdraw Modes
@@ -59,7 +59,7 @@ This transaction has several modes, depending on which flags you specify. Each m
- **Double-asset withdrawals**, in which you receive both assets from the AMM's pool in proportions that match their balances there. These withdrawals are not subject to a fee.
- **Single-asset withdrawals**, in which you receive one asset from the AMM's pool. The AMM charges a fee based on how much your deposit shifts the balance of assets in the pool. Depending on the withdraw mode, the amount of the fee can be added to the amount of LP Tokens paid in, or debited from the amount of the asset paid out.
The following modes are for a **double-asset withdrawal**:
The following combinations of fields indicat a **double-asset withdrawal**:
| Flag Name(s) | Flag Value | Fields Specified | Meaning |
|-----------------|--------------|------------------------|---------|