# AMMDeposit [[ソース]](https://github.com/XRPLF/rippled/blob/master/src/xrpld/app/tx/detail/AMMDeposit.cpp) [自動マーケットメーカー](/ja/docs/concepts/tokens/decentralized-exchange/automated-market-makers)(AMM)インスタンスに資金を預け、AMMの流動性プロバイダートークン( *LPトークン* )を受け取ります。AMMのプールにある資産の一方または両方を預けることができます。 トランザクションが成功すると、LPトークンを保持するためにAMMアカウント(リミット0)に[トラストライン](/ja/docs/concepts/tokens/fungible-tokens)が作成されます。 注記 次の場合、いずれの資産もAMMに預けることはできません。 - AMMのプールにある資産の一方または両方がトークン発行者によって[フリーズ](/ja/docs/concepts/tokens/fungible-tokens/freezes)されている - AMMのプールにある資産の一方または両方を保有する権限がない AMM ## 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" } ``` ## フィールド [共通フィールド](/ja/docs/references/protocol/transactions/common-fields)に加えて、トランザクションは以下のフィールドを使用します。 | フィールド | JSONの型 | [内部の型](/ja/docs/references/protocol/binary-format) | 必須? | 説明 | | --- | --- | --- | --- | --- | | `Asset` | オブジェクト | STIssue | はい | AMMのプールにある資産の一つを定義します。JSONでは、`currency`と`issuer`フィールドを持つオブジェクトになります(XRPの場合は`issuer`を省略します)。 | | `Asset2` | オブジェクト | STIssue | はい | AMMのプールにあるもう一つの資産を定義します。JSONでは、`currency`と`issuer`フィールドを持つオブジェクトになります(XRPの場合は`issuer`を省略します)。 | | `Amount` | [通貨額](/ja/docs/references/protocol/data-types/basic-data-types#%E9%80%9A%E8%B2%A8%E9%A1%8D%E3%81%AE%E6%8C%87%E5%AE%9A) | Amount | いいえ | AMMに預ける1つの資産の量を指定します。存在する場合、これはAMMのプールにある資産の一つ(トークンまたはXRP)と一致する必要があります。 | | `Amount2` | [通貨額](/ja/docs/references/protocol/data-types/basic-data-types#%E9%80%9A%E8%B2%A8%E9%A1%8D%E3%81%AE%E6%8C%87%E5%AE%9A) | Amount | いいえ | AMMに追加する別の資産の量を指定します。存在する場合、これはAMMのプール内の他の資産と一致する必要があり、`Amount`と同じ資産にすることはできません。 | | `EPrice` | [通貨額](/ja/docs/references/protocol/data-types/basic-data-types#%E9%80%9A%E8%B2%A8%E9%A1%8D%E3%81%AE%E6%8C%87%E5%AE%9A) | Amount | いいえ | 受け取った各LPトークンに支払う、預け入れ資産の最大有効価格です。 | | `LPTokenOut` | [通貨額](/ja/docs/references/protocol/data-types/basic-data-types#%E9%80%9A%E8%B2%A8%E9%A1%8D%E3%81%AE%E6%8C%87%E5%AE%9A) | Amount | いいえ | AMMのLPトークンの購入数量。 | | `TradingFee` | 数値 | UInt16 | いいえ | AMMプールの取引手数料を1/100,000の単位で投票します。1は0.001%に相当します。最大値は1000で、1%の手数料を示します。 | ### AMMDepositモード このトランザクションには5つのモードがあり、どのフラグを指定するかで定義されます。それぞれのモードは、特定のフィールドの組み合わせを必要とし、次の2つのカテゴリに分類されます。 - **ダブルアセット入金**: AMMのプールにある両方(2つ)の資産を、既存の資産の残高に比例して預けます。この預け入れでは手数料は徴収されません。 - **シングルアセット入金**: AMMの2つの資産のうち1つだけを預けます。AMMは、この預け入れによってプール内の資産残高がどれだけ変化したかによって、対価として支払われるLPトークンから差し引く手数料を設定します。 以下の項目の組み合わせは、**ダブルアセット入金**について示しています。 | フラグ名 | フラグ値 | 指定フィールド | 意味 | | --- | --- | --- | --- | | `tfLPToken` | `0x00010000` | `LPTokenOut`のみ | 指定された量のLPトークンを受け取るようにこのAMMの2つの資産を預けます。預ける金額は、AMMの保有する2つの資産の割合と等しくなります。 | | `tfTwoAsset` | `0x00100000` | `Amount`と`Amount2` | このAMMの両資産を指定した金額まで預けます。実際に預ける金額は、AMMがすでに保有している資産と同じ割合を維持する必要があるため、どちらか一方の預け入れ金額が指定金額より少なくてもかまいません。得られるLPトークンの金額は、預けた金額の合計から算出されます。 | | `tfTwoAssetIfEmpty` | `0x00800000` | `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トークンを受け取る数は、以下の計算式で算出できます。 [](/assets/amm-single-asset-deposit-formula.f518ac233e7e1f55156b443491f4b69c444f392f8c3975b25bdff2264e469873.ac57e6ef.svg) - `L`: 受け取るLPトークンの量 - `T`: 預け入れ前のLPトークンの残高合計 - `B`: 預け入れ資産の額 - `F`: 取引手数料 - `W`: プール内の預金資産の重みです。これはすべてのAMMプールで0.5と定義されています(50/50の分割を意味します)ので、Wによる累乗は平方根を取ることと同一です。 - `P`: 預け入れ前のプール内の預金資産の合計額 ### 空のAMMの場合の特殊なケース 場合によっては、プール内に資産がない状態で AMM が存在することがあります。このような状態の AMM には通常の入金を行うことができません。なぜなら資産間の比率が未定義 (0/0) だからです。その代わりに、フラグ `tfTwoAssetIfEmpty` と両方の資産の正確な金額を指定した“空AMM”への特殊な入金を行うことができます。これはAMMを作成する[AMMCreateトランザクション](/ja/docs/references/protocol/transactions/types/ammcreate)が行うのと同じように、資産間の比率を直接設定します。ダブルアセット入金と同様に、これは手数料を徴収されません。 AMMが空の場合のみ、「空のAMM」への特別な入金を行うことができます。 ### AMMDepositのフラグ AMMDepositトランザクションは、以下のような[`Flags`フィールド](/ja/docs/references/protocol/transactions/common-fields#flags%E3%83%95%E3%82%A3%E3%83%BC%E3%83%AB%E3%83%89)の値をサポートしています。 | フラグ名 | 16進数値 | 10進数値 | 説明 | | --- | --- | --- | --- | | `tfLPToken` | `0x00010000` | 65536 | ダブルアセット入金を行い、指定された額のLPトークンを受け取ります。 | | `tfSingleAsset` | `0x00080000` | 524288 | 預け入れる資産を指定して、シングルアセット入金を行います。 | | `tfTwoAsset` | `0x00100000` | 1048576 | 両資産を指定金額で預けるダブルアセット入金を行います。 | | `tfOneAssetLPToken` | `0x00200000` | 2097152 | シングルアセット入金を行い、指定された額のLPトークンを受け取ります。 | | `tfLimitLPToken` | `0x00400000` | 4194304 | 有効価格を指定して、シングルアセット入金を行います。 | | `tfTwoAssetIfEmpty` | `0x00800000` | 8388608 | 空のプールを持つAMMに特別なダブルアセット入金を行います。 | これらのフラグのうちの**1つのみ**と、任意の[グローバルフラグ](/ja/docs/references/protocol/transactions/common-fields#%E3%82%B0%E3%83%AD%E3%83%BC%E3%83%90%E3%83%AB%E3%83%95%E3%83%A9%E3%82%B0)を指定する必要があります。 ## エラーケース すべてのトランザクションで発生する可能性のあるエラーに加えて、トランザクションでは、次の[トランザクション結果コード](/ja/docs/references/protocol/transactions/transaction-results)が発生する可能性があります。 | エラーコード | 説明 | | --- | --- | | `tecAMM_EMPTY` | 現在、AMM は資産を保有していないため、通常の入金はできません。代わりに、空のAMMの場合の特殊な入金を行う必要があります。 | | `tecAMM_NOT_EMPTY` | トランザクションで`tfTwoAssetIfEmpty`が指定されましたが、AMMは空ではありませんでした。 | | `tecAMM_FAILED` | 預け入れの条件が成立しませんでした。例えば、`EPrice`フィールドに指定された実効価格が低すぎる場合など。 | | `tecFROZEN` | トランザクションは[フリーズ](/ja/docs/concepts/tokens/fungible-tokens/freezes)されているトークンを預けようとした、またはプール内の資産の少なくとも1つがフリーズされています。 | | `tecINSUF_RESERVE_LINE` | このトランザクションの送信者は、この処理による[準備金要件](/ja/docs/concepts/accounts/reserves)の増加の対象であり、LPトークンを保持するための新しいトラストラインが必要で、そのための追加の所有者準備金分のXRPを保有していないためと思われます。 | | `tecUNFUNDED_AMM` | 送信者の残高が、指定された預け入れを行うのに十分な量ではありません。 | | `temBAD_AMM_TOKENS` | トランザクションでLPトークンを指定しましたが、`issuer`がAMMに紐づくAccountアドレスではない、または`currency`がこのAMMのLPトークンの通貨コードではない、またはトランザクションでこのAMMのLPトークンをAssetフィールドのいずれかに指定しました。 | | `temBAD_AMOUNT` | トランザクションで指定された金額が無効です。例えば、金額がマイナスなど。 | | `temBAD_FEE` | トランザクションで指定された手数料の値が無効です。例えば、取引手数料が許容範囲外など。 | | `temMALFORMED` | トランザクションで無効なフィールドの組み合わせが指定されました。詳細は、[AMMDepositモード](#ammdeposit%E3%83%A2%E3%83%BC%E3%83%89)をご覧ください。 | | `terNO_ACCOUNT` | リクエストで参照されたいずれかのアカウントが存在しません。 | | `terNO_AMM` | このトランザクションの資産ペアの自動マーケットメーカーインスタンスが存在しません。 |