# AMMBid

[[ソース]](https://github.com/XRPLF/rippled/blob/master/src/xrpld/app/tx/detail/AMMBid.cpp)

AMM
[自動マーケットメーカー](/ja/docs/concepts/tokens/decentralized-exchange/automated-market-makers)のオークションスロットに入札することができます。落札されると、競り落とされるか24時間が経過するまで、割引料金でAMMと取引することができます。24時間が経過する前に競り落とされた場合、残り時間に応じて落札価格の一部が払い戻されます。AMMの取引手数料が0の場合、入札は可能ですが、入札スロットは取引手数料が変更されるまでメリットをもたらしません。

AMMのLPトークンを使って落札すると、落札に利用したLPトークンはAMMに返され、LPトークンの残高が減ります。

##  JSONの例


```json
{
    "Account" : "rJVUeRqDFNs2xqA7ncVE6ZoAhPUoaJJSQm",
    "Asset" : {
        "currency" : "XRP"
    },
    "Asset2" : {
        "currency" : "TST",
        "issuer" : "rP9jPyP5kyvFRb6ZiRghAGw5u8SGAmU4bd"
    },
    "AuthAccounts" : [
        {
          "AuthAccount" : {
              "Account" : "rMKXGCbJ5d8LbrqthdG46q3f969MVK2Qeg"
          }
        },
        {
          "AuthAccount" : {
              "Account" : "rBepJuTLFJt3WmtLXYAxSjtBWAeQxVbncv"
          }
        }
    ],
    "BidMax" : {
        "currency" : "039C99CD9AB0B70B32ECDA51EAAE471625608EA2",
        "issuer" : "rE54zDvgnghAoPopCgvtiqWNq3dU5y836S",
        "value" : "100"
    },
    "Fee" : "10",
    "Flags" : 2147483648,
    "Sequence" : 9,
    "TransactionType" : "AMMBid"
}
```

##  フィールド

[共通フィールド](/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`を省略します）。 |
| `BidMin` | [通貨額](/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 | いいえ | スロットに支払う最小の金額。この値を高く設定すると、他の人から競り落とされにくくなります。省略された場合は、落札に必要な最低額を支払います。 |
| `BidMax` | [通貨額](/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 | いいえ | スロットに支払う最大の金額。落札するためのコストがこの金額より高い場合、取引は失敗します。省略された場合は、落札に必要な金額を支払います。 |
| `AuthAccounts` | 配列 | Array | いいえ | 割引料金で取引を許可する最大4つの追加のアカウントのリスト。これには、トランザクション送信者のアドレスは含めることはできません。これらのオブジェクトはそれぞれ[Auth Accountオブジェクト](#auth-account%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88)である必要があります。. |


### Auth Accountオブジェクト

`AuthAccounts` 配列の各メンバーは、以下のフィールドを持つオブジェクトである必要があります。

| フィールド | JSONの型 | [内部の型](/ja/docs/references/protocol/binary-format) | 必須? | 説明 |
|  --- | --- | --- | --- | --- |
| `Account` | 文字列 | AccountID | はい | 認可するアカウントのアドレス。 |


配列に現れる他の「内部オブジェクト」と同様に、これらのオブジェクトのJSON表現は、オブジェクトタイプ`AuthAccount`のみをキーとするオブジェクトにラップされています。

## オークションスロットの価格

落札された場合、トランザクションは自動的に前のスロット所有者を競り落とし、送信者のLPトークンから落札価格が引き落とされます。落札価格は、72分ずつ20回に区切られた時間経過とともに減少します。もし送信者が落札するのに十分なLPトークンを持っていなかったり、入札価格がトランザクションの`BidMax`値より高い場合、トランザクションは`tecAMM_FAILED_BID`という結果で失敗します。

- オークションスロットが現在空であったり、期限切れ、または最後のインターバルである場合、**最低入札価格**は次のように定義されます。

```text
M = L * F / 25
```
  - `M`: 最低入札価格。
  - `L`: AMMによって現在発行されているLPトークンの総数。
  - `F`: 取引手数料。小数で表されます。
- それ以外の場合、現在の保有者に落札価格は、以下の式で計算されます。

```
P = B × 1.05 × (1 - t^60) + M
```
  - `P`: 落札価格。単位はLPトークン。
  - `B`: 現在の入札価格。単位はLPトークン。
  - `t`: 現在の24時間枠で経過した時間の割合。0.05の倍数に切り捨てられる。
  - `M`: Mは上記で定義された**最低入札価格**。
落札コストには、2つの特殊なケースがあります。誰かが落札してから**最初の時間枠**では、その落札価格は、最低入札価格+既存の入札価格の5%アップとなります。

```
P = B × 1.05 + M
```
スロットの**最後の時間枠**では、落札コストは最低入札額のみです。

```
P = M
```


レジャーを作成する際に、ネットワーク上のすべてのサーバが同じ結果になるように、時間の計測は前回のレジャーの[正規の閉鎖時刻](/ja/docs/concepts/ledgers/ledger-close-times)に基づいており、これはおおよその目安の時間です。

## 払い戻し

有効なオークションスロットを落札した場合、AMMは以下の計算式で前ホルダーに価格の一部を払い戻します。


```text
R = B × (1 - t)
```

- `R`: は返金する金額。単位はLPトークン。
- `B`: 払い戻しの対象となる前回の入札の価格。単位はLPトークン。
- `t`: 現在の24時間枠で経過した時間の割合。0.05の倍数に切り捨てられる。


特殊なケースとして、オークションスロットの最終（20番目）区間では、払い戻し額は0となる。

XRP Ledgerの時刻と同様に、トランザクション処理では *前回の* レジャーの[正規の閉鎖時刻](/ja/docs/concepts/ledgers/ledger-close-times)を使用するため、実時間と最大で約10秒の差が生じる場合があります。

## エラーケース

すべてのトランザクションで発生する可能性のあるエラーに加えて、トランザクションでは、次の[トランザクション結果コード](/ja/docs/references/protocol/transactions/transaction-results)が発生する可能性があります。

| エラーコード | 説明 |
|  --- | --- |
| `tecAMM_EMPTY` | AMMのプールに資産がありません。この状態では、AMMを削除するか、新しい入金を行い資金を供給することしかできません。 |
| `tecAMM_FAILED` | このトランザクションでは、送信者が必要な入札額を支払うために十分なLPトークンを保有していないか、落札価格がトランザクションで指定された`BidMax`値より高いため、落札できませんでした。 |
| `tecAMM_INVALID_TOKENS` | このトランザクションの送信者は、スロット価格に見合うだけのLPトークンを保有していません。 |
| `temBAD_AMM_TOKENS` | 指定された`BidMin`または`BidMax`は、このAMMの正しいLPトークンではありません。 |
| `temDISABLED` | このネットワークでは、AMM機能が有効ではありません。 |
| `temMALFORMED` | トランザクションが無効なオプションを指定しました。例えば、`AuthAccounts`のリストが長すぎるなど。 |
| `terNO_ACCOUNT` | このリクエストで指定されたアカウントのいずれかが存在しません。 |
| `terNO_AMM` | このトランザクションの資産ペアの自動マーケットメーカーのインスタンスが存在しません。 |