[JA] ammdeposit

This commit is contained in:
develoQ
2023-02-28 14:34:40 +09:00
parent d620d184dd
commit 5bbffe6f09

View File

@@ -0,0 +1,136 @@
---
html: ammdeposit.html
parent: transaction-types.html
blurb: LPTokenと引き換えに、自動マーケットメーカーに資金を預けます。
labels:
- AMM
status: not_enabled
---
# AMMDeposit
[[Source]](https://github.com/gregtatcam/rippled/blob/amm-core-functionality/src/ripple/app/tx/impl/AMMDeposit.cpp "Source")
<!-- TODO: Update source link to merged version when available -->
{% include '_snippets/amm-disclaimer.md' %}
[自動マーケットメーカー](automated-market-makers.html)AMMインスタンスに資金を預け、引き換えにAMMの流動性プロバイダートークン _LPトークン_ を受け取ります。AMMのプールにある資産の一方または両方を預けることができます。
トランザクションが成功すると、LPトークンを保持するためにAMMアカウント(リミット0)に[トラストライン](trust-lines-and-issuing.html)が作成されます。
## {{currentpage.name}} JSONの例
```json
{
"Account" : "rJVUeRqDFNs2xqA7ncVE6ZoAhPUoaJJSQm",
"Amount" : {
"currency" : "TST",
"issuer" : "rP9jPyP5kyvFRb6ZiRghAGw5u8SGAmU4bd",
"value" : "2.5"
},
"Amount2" : "30000000",
"Asset" : {
"currency" : "TST",
"issuer" : "rP9jPyP5kyvFRb6ZiRghAGw5u8SGAmU4bd"
},
"Asset2" : {
"currency" : "XRP"
},
"Fee" : "10",
"Flags" : 1048576,
"Sequence" : 7,
"TransactionType" : "AMMDeposit"
}
```
{% 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のプールにある資産の一つトークンまたはXRPと一致する必要があります。 |
| `Amount2` | [通貨額][] | Amount | いいえ | AMMに追加する別の資産の量を指定します。存在する場合、これはAMMのプール内の他の資産と一致する必要があり、`Amount`と同じ資産にすることはできません。 |
| `EPrice` | [通貨額][] | Amount | いいえ | 受け取った各LPトークンに支払う、預け入れ資産の最大有効価格です。 |
| `LPTokenOut` | [通貨額][] | Amount | いいえ | AMMのLPトークンの購入数量。 |
### AMMDepositモード
このトランザクションには5つのモードがあり、どのフラグを指定するかで定義されます。それぞれのモードは、特定のフィールドの組み合わせを必要とし、次の2つのカテゴリーに分類さ れます。
- **ダブルアセットデポジット**: AMMのプールにある両方(2つ)の資産を、既存の資産の残高に比例して預けます。この預け入れは手数料の対象外です。
- **シングルアセットデポジット**, AMMの2つの資産のうち1つだけを預けます。AMMは、この預け入れによってプール内の資産残高がどれだけ変化したかによって、対価として支払われるLPトークンから差し引く手数料を設定します。
以下の項目の組み合わせは、**ダブルアセットデポジット**について示しています。
| フラグ名 | フラグ値 | 指定フィールド | 意味 |
|--------------|--------------|------------------------|---------|
| `tfLPToken` | `0x00010000` | `LPTokenOut`のみ | 指定された量のLPトークンを受け取るように計算された金額の、このAMMの両資産を預けます。預ける金額は、AMMの保有する2つの資産の割合と等しくなります。 |
| `tfTwoAsset` | `0x00100000` | `Amount``Amount2` | このAMMの両資産を指定された金額まで預けます。実際に預ける金額は、AMMがすでに保有している資産と同じ割合を維持する必要があるため、どちらか一方の預け入れ金額が指定金額より少なくてもかまいません。引き換えに得られるLPトークンの金額は、預けた金額の合計に基づきます。 |
以下の項目の組み合わせは、**シングルアセットデポジット**について示しています。
| フラグ名 | フラグ値 | 指定フィールド | 意味 |
|---------------------|--------------|------------------------|---------|
| `tfSingleAsset` | `0x00080000` | `Amount`のみ | 指定の資産を指定の量だけ預け、その結果得られたプールのシェアに応じた量のLPトークンを受け取ります。手数料を差し引いた金額 |
| `tfOneAssetLPToken` | `0x00200000` | `Amount``LPTokenOut` | 1つの資産を指定された上限額まで預け、対価として指定金額分のLPトークンを受け取ります。手数料を差し引いた金額 |
| `tfLimitLPToken` | `0x00400000` | `Amount``EPrice` | 1つの資産を指定された金額まで預けますが、LPトークン1つにつき指定された有効価格手数料差引後を超えて預けることはありません。 |
これ以外のフィールドとフラグの組み合わせは無効です。
### シングルアセットデポジット手数料
シングルアセットデポジットの手数料は、AMMを使って預け入れ金額の一部を他の資産と交換し、ダブルアセットデポジットを行った場合と同じになるように計算されます。AMMの取引手数料は、取引に必要な金額には適用されますが、残りの預け入れ金額には適用されません。 _例えば、AMMの資産プールがUSDとEURで完全に均等に分割されている場合、100USDを預けようとすると、受け取るLPトークンの量は、50EUR+50USDを預けた場合よりもわずかに少なくなります。_
ダブルアセットデポジットの場合、LPトークンを受け取る数は、以下の計算式で算出できます。
{{ include_svg("img/amm-single-asset-deposit-formula.svg", "L = T × ( (( 1 + (B - (F × (1 - W) × B)) ÷ P)^W) - 1)") }}
<!-- TODO: improve graphic -->
- `L`: 受け取るLPトークンの量
- `T`: 預け入れ前のLPトークンの残高合計
- `B`: 預け入れ資産の額
- `F`: 取引手数料
- `W`: プール内の預金資産の重みです。これはすべてのAMMプールで0.5と定義されています50/50の分割を意味しますので、Wによる累乗は平方根を取ることと同一です。
- `P`: 預け入れ前のプール内の預金資産の合計額
### AMMDepositフラグ
AMMDepositタイプのトランザクションは、以下のように[`Flags`フィールド](transaction-common-fields.html#Flagsフィールド)の値を追加でサポートしています。
| フラグ名 | 16進数値 | 10進数値 | 説明 |
|:--------------------|:-------------|:--------------|:----------------------|
| `tfLPToken` | `0x00010000` | 65536 | ダブルアセットデポジットを行い、指定された額のLPトークンを受け取ります。 |
| `tfSingleAsset` | `0x00080000` | 524288 | 預け入れる資産を指定して、シングルアセットデポジットを行います。 |
| `tfTwoAsset` | `0x00100000` | 1048576 | 両資産を指定金額で預けるダブルアセットデポジットを行います。 |
| `tfOneAssetLPToken` | `0x00200000` | 2097152 | シングルアセットデポジットを行い、指定された額のLPトークンを受け取ります。 |
| `tfLimitLPToken` | `0x00400000` | 4194304 | 有効価格を指定して、シングルアセットデポジットを行います。 |
これらのフラグのうちの **1つのみ** と、任意の[グローバルフラグ](transaction-common-fields.html#グローバルフラグ)を指定する必要があります。
## エラーケース
すべてのトランザクションで発生する可能性のあるエラーに加えて、{{currentpage.name}}トランザクションでは、次の[トランザクション結果コード](transaction-results.html)が発生する可能性があります。
| エラーコード | 説明 |
|:------------------------|:---------------------------------------------|
| `temBAD_AMM_OPTIONS` | トランザクションで無効なフィールドの組み合わせが指定されました。詳細は、[AMMDepositモード](#ammdepositモード)を参照してください。 |
| `tecFROZEN` | トランザクションは[凍結](freeze.html)されてトークンを預けようとしました。 |
| `tecAMM_BALANCE` | AMMが預け入れを行うのに十分な量の資産を保有していないたとえば、シングルアセットデポジットに必要な残高を保有していない、または送信者が指定されたトークンを十分に保有していない場合など。 |
| `temBAD_AMM_TOKENS` | トランザクションでLPトークンが正しく指定されています。例えば、`issuer`がAMMのAccountRootアドレスでない、`currency`がこのAMMのLPトークンの通貨コードでない、またはトランザクションがAssetフィールドのいずれかにこのAMMのLPトークンを指定した、など。 |
| `tecAMM_FAILED_DEPOSIT` | 預け入れの条件が成立しませんでした。例えば、`EPrice`フィールドに指定された実効価格が低すぎる場合など。 |
| `tecAMM_INVALID_TOKENS` | このトークンペアのAMMが存在しないか、計算の結果、預け入れ金額がゼロに丸められました。 |
| `tecINSUF_RESERVE_LINE` | このトランザクションの送信者は、この処理による[準備金要件](reserves.html)の増加の対象であり、LPトークンを保持するための新しいトラストラインが必要で、そのための追加の所有者準備金分のXRPを保有していないためと思われます。 |
| `tecNO_AUTH` | 送信者は、預け入れ資産のいずれかを保有する権限を持っ ていません。 |
| `tecNO_LINE` | 送信者が預け入れ資産のうち1つに対し、トラストラインを保有していません。 |
| `tecUNFUNDED_AMM` | 送信者の残高が、指定された預け入れを行うのに十分な量ではありません。 |
| `terNO_ACCOUNT` | リクエストで参照されたいずれかのアカウントが存在しません。 |
| `terNO_AMM` | このトランザクションの資産ペアの自動マーケットメーカーインスタンスが存在しません。 |
<!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %}
{% include '_snippets/tx-type-links.md' %}
{% include '_snippets/rippled_versions.md' %}