> ## Documentation Index
> Fetch the complete documentation index at: https://docs.raydium.io/llms.txt
> Use this file to discover all available pages before exploring further.

# AMM v4 命令

> すべてのAMM v4命令、その引数、プールとOpenBookアカウント、各命令の前提条件と後続条件。

<Info>
  **このページは AI による自動翻訳です。すべての内容は英語版を正とします。**

  [英語版を表示 →](/products/amm-v4/instructions)
</Info>

<Info>
  AMM v4命令は、**プール側**（AMM v4プログラムアカウント）と**マーケット側**（バインドされたマーケット用のOpenBookアカウント）の両方を均一に想定しています。いずれかのセットを省略またはミスマッチするとリバートします。以下のアカウントリストは、Raydium SDKのフィールド名を使用して明確にしています。基盤となるIDLでは、`serum_*`プレフィックスを使用する場合があります。
</Info>

## 命令インベントリ

| グループ        | 命令                    | 注記                                                |
| ----------- | --------------------- | ------------------------------------------------- |
| プールのライフサイクル | `Initialize2`         | 現在のプール作成命令（まだ機能していますが、UIは新しいプールをCPMMにデフォルト設定）。    |
| リクイディティ     | `Deposit`             | リクイディティを追加し、LPを受け取ります。                            |
| リクイディティ     | `Withdraw`            | LPをバーン、両方のサイドを比例配分で受け取ります。                        |
| スワップ        | `SwapBaseIn`          | 正確な入力スワップ（フルパス：ボールト + OpenBook）。                  |
| スワップ        | `SwapBaseOut`         | 正確な出力スワップ（フルパス）。                                  |
| スワップ        | `SwapBaseInV2`        | OpenBookをバイパスする正確な入力スワップ — ボールトのみ、アカウント数が少なくなります。 |
| スワップ        | `SwapBaseOutV2`       | OpenBookをバイパスする正確な出力スワップ。                         |
| メンテナンス      | `SetParams`           | 管理者：プールのパラメータを変更。                                 |
| メンテナンス      | `WithdrawPnl`         | 発生したプロトコルPnLを所有者アカウントに転送。                         |
| メンテナンス      | `CreateConfigAccount` | 管理者：プログラムレベルの`AmmConfig` PDAを初期化。                 |
| メンテナンス      | `UpdateConfigAccount` | 管理者：プログラムレベルの設定パラメータを変更。                          |

SDKはユーザーが使用する命令のビルダーのみを公開します。メンテナンス命令は通常、Raydiumキーパーが呼び出します。

## `Initialize2`

既存のOpenBookマーケットにバインドされた新しいAMM v4プールをブートストラップします。

**引数**

```
nonce:        u8
open_time:    u64
init_pc_amount:   u64
init_coin_amount: u64
```

**アカウント**（書き込み可能 `W`、署名者 `S`）

| #  | 名前                           | W | S | 注記                           |
| -- | ---------------------------- | - | - | ---------------------------- |
| 1  | `token_program`              |   |   | SPL Token。                   |
| 2  | `system_program`             |   |   |                              |
| 3  | `rent`                       |   |   |                              |
| 4  | `amm`                        | W |   | `AmmInfo`アカウント（シード化されたキー）。   |
| 5  | `amm_authority`              |   |   | プログラムPDA。                    |
| 6  | `amm_open_orders`            | W |   | OpenBook `OpenOrders`（シード化）。 |
| 7  | `lp_mint`                    | W |   |                              |
| 8  | `coin_mint`                  |   |   |                              |
| 9  | `pc_mint`                    |   |   |                              |
| 10 | `pool_coin_token_account`    | W |   |                              |
| 11 | `pool_pc_token_account`      | W |   |                              |
| 12 | `pool_withdraw_queue`        | W |   |                              |
| 13 | `pool_target_orders_account` | W |   |                              |
| 14 | `pool_lp_token_account`      | W |   | 作成者のLP ATA。                  |
| 15 | `pool_temp_lp_token_account` | W |   | スクラッチアカウント。                  |
| 16 | `market_program`             |   |   | OpenBookプログラム。               |
| 17 | `market`                     |   |   | OpenBookマーケット。               |
| 18 | `user_wallet`                | W | S | 作成者。レント代を支払い、初期デポジットを提供。     |
| 19 | `user_token_coin`            | W |   |                              |
| 20 | `user_token_pc`              | W |   |                              |

**後続条件**

* `lp_supply = sqrt(init_coin_amount × init_pc_amount) − INIT_BURN`。ここで`INIT_BURN` ≈ 100 LP単位が流通から除外されます。
* OpenBookオーダーはまだ掲示されていません。最初の`MonitorStep`が初期グリッドを掲示します。

**一般的なエラー** — `InvalidInput`（小数点不一致、ソート未実施）、`NotApproved`、OpenBook側の`InvalidMarketState`。

## `Deposit`

リクイディティを追加します。

**引数**

```
max_coin_amount: u64
max_pc_amount:   u64
base_side:       u64    // 0 = coinにベース, 1 = pcにベース
// (SDK のいくつかのバリアントは other_amount_min も受け入れます)
```

**アカウント**（省略版）

| #  | 名前                        | W | S |
| -- | ------------------------- | - | - |
| 1  | `token_program`           |   |   |
| 2  | `amm`                     | W |   |
| 3  | `amm_authority`           |   |   |
| 4  | `amm_open_orders`         |   |   |
| 5  | `amm_target_orders`       | W |   |
| 6  | `lp_mint`                 | W |   |
| 7  | `pool_coin_token_account` | W |   |
| 8  | `pool_pc_token_account`   | W |   |
| 9  | `market`                  |   |   |
| 10 | `user_coin_token_account` | W |   |
| 11 | `user_pc_token_account`   | W |   |
| 12 | `user_lp_token_account`   | W |   |
| 13 | `user_owner`              |   | S |

**数学** — 標準的な比例配分。プールの*有効*リザーブ（ボールト+オンボック）を使用して、SDKは指定されたLP量をもたらすcoin/pcペアを計算し、`max_*`に照らして検証します。いずれかのサイドが上限を超える場合は`ExceededSlippage`でリバート。

## `Withdraw`

LP をバーン、両方のサイドを受け取ります。

**引数**

```
amount: u64    // バーンするLP
```

**アカウント** — `Deposit`と同じですが、方向が逆です。`lp_mint`はバーン用に書き込み可能で、ユーザーATAは受信者です。`MonitorStep`に似たOpenBookからのセットルステップが内部で発生するため、返済は新しいリザーブを使用します。

## `SwapBaseIn`

正確な入力スワップ。常に**AMMパス**スワップ（OpenBookマッチングを通じてルーティングされません）。

<Note>
  **新しいコードにはV2バリアントを使用してください。** AMM v4は不要になったため、OpenBookと流動性を共有しなくなり、V1エントリーポイント（`SwapBaseIn`、`SwapBaseOut`）— マーケット側の検証のためにOpenBookアカウントの完全なセットを必要とするもの — は機能的に冗長です。新しい統合は[`SwapBaseInV2` / `SwapBaseOutV2`](#swapbaseinv2-swapbaseoutv2)を使用すべきです。これらは大幅に小さいアカウントリストを取り、今日の標準的な実行パスを表します。V1形式は、完全性のため、および既存のオンチェーン取引を読むためにここに記載されています。
</Note>

**引数**

```
amount_in:            u64
minimum_amount_out:   u64
```

**アカウント**（省略版）

| #  | 名前                          | W | S |
| -- | --------------------------- | - | - |
| 1  | `token_program`             |   |   |
| 2  | `amm`                       | W |   |
| 3  | `amm_authority`             |   |   |
| 4  | `amm_open_orders`           | W |   |
| 5  | `amm_target_orders`         | W |   |
| 6  | `pool_coin_token_account`   | W |   |
| 7  | `pool_pc_token_account`     | W |   |
| 8  | `market_program`            |   |   |
| 9  | `market`                    | W |   |
| 10 | `market_bids`               | W |   |
| 11 | `market_asks`               | W |   |
| 12 | `market_event_queue`        | W |   |
| 13 | `market_coin_vault`         | W |   |
| 14 | `market_pc_vault`           | W |   |
| 15 | `market_vault_signer`       |   |   |
| 16 | `user_source_token_account` | W |   |
| 17 | `user_dest_token_account`   | W |   |
| 18 | `user_owner`                |   | S |

**数学** — [`products/amm-v4/math`](/ja/products/amm-v4/math)を参照してください。

**前提条件**

* `amm.status`がスワップを許可（ステータスビットマスクのビット0が設定されていない）。
* `amm.state_data.pool_open_time <= now`。
* `amount_in > 0`。
* `user_source_token_account`は少なくとも`amount_in`を保有。

**後続条件**

* ユーザーはソーストークンから`amount_in`を失い、デストトークンから`amount_out ≥ minimum_amount_out`を獲得します。
* `state_data.swap_*_in_amount`と`swap_*_out_amount`がインクリメント（分析用）。
* `need_take_pnl_*`がプロトコル手数料シェアでインクリメント。

**一般的なエラー** — `ExceededSlippage`、`InvalidInput`、`InvalidStatus`、`InvalidMarket`。

## `SwapBaseOut`

正確な出力。`SwapBaseIn`の逆数。アカウントは同じ。

**引数**

```
max_amount_in: u64
amount_out:    u64
```

## `SwapBaseInV2` / `SwapBaseOutV2`

**OpenBookアカウント全体をスキップする**バリアントスワップエントリーポイント。数学はV1パスと同じですが、アカウントリストはAMM側のみに縮小します。

| # | 名前                          | W | S |
| - | --------------------------- | - | - |
| 1 | `token_program`             |   |   |
| 2 | `amm`                       | W |   |
| 3 | `amm_authority`             |   |   |
| 4 | `amm_open_orders`           |   |   |
| 5 | `pool_coin_token_account`   | W |   |
| 6 | `pool_pc_token_account`     | W |   |
| 7 | `user_source_token_account` | W |   |
| 8 | `user_dest_token_account`   | W |   |
| 9 | `user_owner`                |   | S |

プールの有効リザーブは依然としてOpenBookに掲示されたトークンを考慮しているため、クォート数学は変わりません。計算を節約し、同じトランザクション内でOpenBookクランクが必要ない場合にマーケットアカウントを渡すのを避けるためにV2を使用します。Raydiumルーターは常にAMM v4を通じてルーティングする際にV2形式を使用します。

引数はV1形式と同じです（`SwapBaseInV2`の場合`amount_in / minimum_amount_out`、`SwapBaseOutV2`の場合`max_amount_in / amount_out`）。

## `MonitorStep`（レガシー / 無効）

<Note>
  **クランクされなくなりました。** AMM v4は不要になったため、OpenBookと流動性を共有しなくなり、`MonitorStep`は何もすることがありません — プールにはOpenBookに掲示されたオーダーがありません。命令は下位互換性のためにオンチェーンプログラムに残っていますが、Raydiumキーパーはもはや呼び出しません。手動で呼び出すことは実質的にノーオプ（ゼロ化されたステート更新以外）であり、統合者には必要ありません。
</Note>

元々、この命令はプールのOpenBook相互作用をクランクしていました。

**引数**

```
plan_order_limit:   u16
place_order_limit:  u16
cancel_order_limit: u16
```

**アカウント** — スワップ上記のすべて、プラス管理OpenBookアカウント。

**元の効果**（実践ではもはや関連性がありません）：

* 満たされたすべてのオーダーを決済（その収益はOpenBook CPIを通じて`market_coin_vault`/`market_pc_vault`からプールのボールトに移動）。
* 価格またはサイズが`target_orders`に一致しなくなった古いオーダーをキャンセル。
* `target_orders`と`amm_open_orders`の間のギャップを埋めるための新しいオーダーを掲示。

パーミッションレス。任意のアカウントが呼び出すことができました。歴史的にはRaydiumキーパーがそれを定期的に行っていました。

## `WithdrawPnl` / `TakePnl`

発生したプロトコル手数料の管理者スイープ。

**引数**

* `WithdrawPnl`は引数を取りません。`need_take_pnl_*`を読み、その正確な額を移動します。

**アカウント**（省略版）

| #  | 名前                        | W | S |                     |
| -- | ------------------------- | - | - | ------------------- |
| 1  | `token_program`           |   |   |                     |
| 2  | `amm`                     | W |   |                     |
| 3  | `amm_authority`           |   |   |                     |
| 4  | `amm_config`              |   |   |                     |
| 5  | `amm_open_orders`         | W |   |                     |
| 6  | `pool_coin_token_account` | W |   |                     |
| 7  | `pool_pc_token_account`   | W |   |                     |
| 8  | `pnl_coin_token_account`  | W |   | 受取人。`AmmConfig`に保存。 |
| 9  | `pnl_pc_token_account`    | W |   |                     |
| 10 | `pnl_owner`               |   | S | 管理マルチシグ。            |
| 11 | `market_program`          |   |   |                     |
| 12 | `market`                  | W |   |                     |
| 13 | `market_event_queue`      | W |   |                     |
| 14 | `market_coin_vault`       | W |   |                     |
| 15 | `market_pc_vault`         | W |   |                     |
| 16 | `market_vault_signer`     |   |   |                     |

**効果**

* `need_take_pnl_coin`を`pool_coin_token_account`から`pnl_coin_token_account`に転送します。
* pcの場合も同様。
* `need_take_pnl_coin`と`need_take_pnl_pc`をゼロ化。

発生したPnLがすでに不変量から除外されているため、リザーブに変更はありません。

## `SetParams`

管理者パラメータ変更：ステータスビットマスク、オーダーグリッドの深さ、量の波、手数料（稀）など。Raydiumマルチシグによって呼び出されます。引数はCPMMの`UpdateAmmConfig`に類似した、`param: u8`タグ+ペイロード。

## 状態変化マトリックス

| 命令            | `lp_mint`供給  | ボールト                                    | PnLカウンタ   | OpenBook     |
| ------------- | ------------ | --------------------------------------- | --------- | ------------ |
| `Initialize2` | 初期供給は作成者にミント | `+ init_coin_amount`、`+ init_pc_amount` | 0         | OpenOrders作成 |
| `Deposit`     | +            | 両方とも+                                   | —         | 満たされたオーダーの決済 |
| `Withdraw`    | −            | 両方とも−                                   | —         | 満たされたオーダーの決済 |
| `SwapBaseIn`  | —            | + 入力、− 出力                               | + pnl シェア | グリッド再掲示の可能性  |
| `SwapBaseOut` | —            | + 入力、− 出力                               | + pnl シェア | グリッド再掲示の可能性  |
| `MonitorStep` | —            | 満たされたオーダーの決済                            | —         | キャンセル / 掲示   |
| `WithdrawPnl` | —            | −（pnl スイープ）                             | 0         | —            |
| `SetParams`   | —            | —                                       | —         | —            |

## 次のステップ

* [`products/amm-v4/code-demos`](/ja/products/amm-v4/code-demos) — スワップとLPフローのTypeScriptの例。
* [`products/amm-v4/fees`](/ja/products/amm-v4/fees) — `WithdrawPnl`の詳細と手数料分割。
* [`reference/error-codes`](/ja/reference/error-codes) — 前方参照テーブル（AMM v4エラーはそのページに記載）。

ソース：

* [Raydium AMM program — `raydium-io/raydium-amm`](https://github.com/raydium-io/raydium-amm)
* Raydium SDK v2 `Liquidity`モジュール
* OpenBookプログラム — マーケット側のアカウント検証
