> ## 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.

# CPMM instructions

> CPMM プログラムのすべてのインストラクション、引数、アカウントリスト、事前・事後条件、戻されるエラーの参照。

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

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

## インストラクション概要

| ディスクリミネータ名                 | 署名者                               | 動作                                                                                                                                                                                                                                                                                                                             |
| -------------------------- | --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `Initialize`               | プール作成者                            | 2つのミント と `AmmConfig` から新しい CPMM プールを作成します。パーミッションレス。新しいプールで `enable_creator_fee = false` がハードコードされます。`pool_state` アカウントは正規 PDA またはランダムキーペア（Initialize アカウント参照）です。                                                                                                                                                              |
| `InitializeWithPermission` | ペイヤー + `Permission` PDA の保有者      | `Initialize` の許可版。呼び出し者（ペイヤー）は自身の公開鍵から導出された `Permission` PDA を所有する必要があります。プール作成をゲートする必要があるプラットフォームで使用（例：LaunchLab 卒業）。呼び出し者が `creator_fee_on` を固定でき、新しいプールで `enable_creator_fee = true` に強制されます。`pool_state` の `creator` フィールドはペイヤーではなく別途渡される `creator` アカウントに設定されます。`pool_state` の正規 PDA またはランダムキーペアの柔軟性は `Initialize` と同じです。 |
| `Deposit`                  | LP                                | 両トークンで流動性を追加。LP トークンを受け取ります。                                                                                                                                                                                                                                                                                                   |
| `Withdraw`                 | LP                                | LP トークンをバーン。両方の基礎となるトークンを按分で受け取ります。                                                                                                                                                                                                                                                                                            |
| `SwapBaseInput`            | スワップ実行者                           | 確定入力スワップ（`amount_in` をイン、≥ `minimum_amount_out` をアウト）。                                                                                                                                                                                                                                                                         |
| `SwapBaseOutput`           | スワップ実行者                           | 確定出力スワップ（≤ `maximum_amount_in` をイン、`amount_out` をアウト）。                                                                                                                                                                                                                                                                         |
| `CollectProtocolFee`       | `protocol_owner` (`AmmConfig` より) | ボルトから蓄積したプロトコルフィーを回収します。                                                                                                                                                                                                                                                                                                       |
| `CollectFundFee`           | `fund_owner` (`AmmConfig` より)     | ボルトから蓄積したファンドフィーを回収します。                                                                                                                                                                                                                                                                                                        |
| `CollectCreatorFee`        | `pool_creator`                    | 蓄積したクリエイターフィーを回収（クリエイターフィーが有効な場合）。                                                                                                                                                                                                                                                                                             |
| `UpdatePoolStatus`         | `admin`                           | ビットマスクを使用してプール上の特定の操作を一時停止・再開します。                                                                                                                                                                                                                                                                                              |
| `UpdateAmmConfig`          | `admin`                           | `AmmConfig` のフィー率またはプロトコル/ファンド所有者を変更します。                                                                                                                                                                                                                                                                                       |
| `CreateAmmConfig`          | `admin`                           | 新しいフィーティア（新しい `AmmConfig` アカウント）を作成します。                                                                                                                                                                                                                                                                                        |
| `CreatePermissionPda`      | `admin`                           | 特定の権限が `InitializeWithPermission` を呼び出すことを許可する `Permission` PDA をミント。                                                                                                                                                                                                                                                          |
| `ClosePermissionPda`       | `admin`                           | 以前発行された `Permission` PDA を取り消します。                                                                                                                                                                                                                                                                                              |

ステータスビットマスク：各プールの `status` は `u8` で、ビット 0 = デポジット無効、ビット 1 = 引出無効、ビット 2 = スワップ無効（プログラムの `PoolStatusBitIndex { Deposit, Withdraw, Swap }` など）。クリアビットは操作が許可されたことを意味し、セットビットは一時停止されたことを意味します。`UpdatePoolStatus` は生の `u8` を受け取り、既存値を上書きします。

以降のセクションでは詳細に説明します。アカウント順序は CPMM IDL に従い、SDK および `raydium-cp-swap/programs/cp-swap/src/instructions` の Rust クライアントがこの順序に合わせます。

## `Initialize`

新しい CPMM プールを作成します。

**引数**

```
init_amount_0: u64
init_amount_1: u64
open_time:     u64   // Unix タイムスタンプ。これ以前のスワップは拒否されます
```

**アカウント** (W = 書き込み可能、S = 署名者)

| #  | 名前                         | W | S   | 注記                                                                                                                                                                                                                                                                                                 |
| -- | -------------------------- | - | --- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 1  | `creator`                  | W | S   | レント払い。`pool_state.pool_creator` として記録されます。                                                                                                                                                                                                                                                         |
| 2  | `amm_config`               |   |     | 選択されたフィーティア。                                                                                                                                                                                                                                                                                       |
| 3  | `authority`                |   |     | CPMM グローバルオーソリティ PDA。                                                                                                                                                                                                                                                                              |
| 4  | `pool_state`               | W | S\* | ここで `init`。**正規 PDA** `["pool", amm_config, token_0_mint, token_1_mint]` **または** ランダムキーペア — 正規 PDA でない場合、プログラムは `pool_state` に署名を要求（`require_eq!(pool_account_info.is_signer, true)`）。ランダムキーペアパスは作成者が正規 PDA での前走行動作を回避できます。下流 PDA（`lp_mint`、ボルト、`observation_state`）は `pool_state.key()` から導出されます。 |
| 5  | `token_0_mint`             |   |     | ソート：`token_0_mint < token_1_mint`。                                                                                                                                                                                                                                                                 |
| 6  | `token_1_mint`             |   |     |                                                                                                                                                                                                                                                                                                    |
| 7  | `lp_mint`                  | W |     | ここで `init`。オーソリティを `authority` に設定。                                                                                                                                                                                                                                                                |
| 8  | `creator_token_0`          | W |     | `init_amount_0` のソース ATA。                                                                                                                                                                                                                                                                          |
| 9  | `creator_token_1`          | W |     | `init_amount_1` のソース ATA。                                                                                                                                                                                                                                                                          |
| 10 | `creator_lp_token`         | W |     | LP の宛先（欠落時に作成）。                                                                                                                                                                                                                                                                                    |
| 11 | `token_0_vault`            | W |     | ここで `init`。`authority` が所有。                                                                                                                                                                                                                                                                        |
| 12 | `token_1_vault`            | W |     |                                                                                                                                                                                                                                                                                                    |
| 13 | `create_pool_fee`          | W |     | 作成者が支払う `create_pool_fee` の宛先 ATA。                                                                                                                                                                                                                                                                 |
| 14 | `observation_state`        | W |     | ここで `init`。                                                                                                                                                                                                                                                                                        |
| 15 | `token_program`            |   |     | SPL Token（LP ミント用）。                                                                                                                                                                                                                                                                                |
| 16 | `token_0_program`          |   |     | SPL Token または Token-2022。                                                                                                                                                                                                                                                                          |
| 17 | `token_1_program`          |   |     | SPL Token または Token-2022。                                                                                                                                                                                                                                                                          |
| 18 | `associated_token_program` |   |     |                                                                                                                                                                                                                                                                                                    |
| 19 | `system_program`           |   |     |                                                                                                                                                                                                                                                                                                    |
| 20 | `rent`                     |   |     |                                                                                                                                                                                                                                                                                                    |

`*` `pool_state` はランダムキーペアパスでのみ署名します。正規 PDA パスは `pool_state` なしで実行されます。

**事前条件**

* ミントがソート済み（バイト順で `token_0_mint < token_1_mint`）。
* どちらのミントも CPMM許可リスト外の拡張を使用していない（`TransferFeeConfig`、`MetadataPointer`、`TokenMetadata`、`InterestBearingConfig`、`ScaledUiAmount`） — [`/ja/products/cpmm/accounts`](/ja/products/cpmm/accounts#vaults-and-token-2022) 参照。プログラム内の小さいミント単位の許可リストは個別サポートのチェックをバイパス。
* `creator` は各 ATA に `init_amount_0` および `init_amount_1` を持つ。
* `amm_config.disable_create_pool == false`。

**事後条件**

* `pool_state` が `lp_supply = sqrt(init_amount_0 * init_amount_1) − LOCKED_LP` で存在。
* `LOCKED_LP`（LP トークン 100 ラムポート）の LP スターターが永続的にロック — `pool_state.lp_supply` は `liquidity − 100` を記録しつつ、100 LP ユニットは流通外のまま、プールが完全にドレイン・ゼロ除算を防止。
* `observation_state` 初期化；`observation_index = 0` および `pool_id = pool_state.key()`。
* `create_pool_fee` ラムポートは作成者から受信者に転送され、ネイティブ SOL（wSOL ATA）として同期。
* プールのステータスビットマスクは `0`（デポジット・引出・スワップすべて有効）。
* `enable_creator_fee = false` および `creator_fee_on = BothToken`。`Initialize` はクリエイターフィー有効化をサポート**しません** — そのパスは `InitializeWithPermission`。
* `open_time` は呼び出し者が `<= block_timestamp` の値を渡した場合 `block_timestamp + 1` に引き上げられます。スワップは `open_time` 前に拒否；デポジット・引出は即座に動作。

**一般的エラー** （完全リストは [`/ja/reference/error-codes`](/ja/reference/error-codes) で）

* `InvalidInput` — ミント非ソート、または同一ミント。
* `NotSupportMint` — ブロック Token-2022 拡張。
* `ExceededSlippage` — 稀に；`init_amount_0/1` が小数点不一致で 0 LP になった場合。

## `Deposit`

プールに比例する両トークンで流動性を追加。

**引数**

```
lp_token_amount:   u64   // LP にミントする LP トークン数
maximum_token_0:   u64
maximum_token_1:   u64
```

**アカウント**

| #  | 名前                   | W | S |
| -- | -------------------- | - | - |
| 1  | `owner`              |   | S |
| 2  | `authority`          |   |   |
| 3  | `pool_state`         | W |   |
| 4  | `owner_lp_token`     | W |   |
| 5  | `token_0_account`    | W |   |
| 6  | `token_1_account`    | W |   |
| 7  | `token_0_vault`      | W |   |
| 8  | `token_1_vault`      | W |   |
| 9  | `token_program`      |   |   |
| 10 | `token_program_2022` |   |   |
| 11 | `vault_0_mint`       |   |   |
| 12 | `vault_1_mint`       |   |   |
| 13 | `lp_mint`            | W |   |

**数学**

```
needed_token_0 = ceil(lp_token_amount * vault_0 / lp_supply)
needed_token_1 = ceil(lp_token_amount * vault_1 / lp_supply)
require(needed_token_0 <= maximum_token_0, "ExceededSlippage")
require(needed_token_1 <= maximum_token_1, "ExceededSlippage")
```

`k` の比例性に変化なし — ボルトと `lp_supply` は同一要素でスケール。

**事後条件**

* `lp_supply += lp_token_amount`。
* `vault_0 += needed_token_0`（入力時 Token-2022 転送フィー差引後）。
* `vault_1 += needed_token_1`（入力時 Token-2022 転送フィー差引後）。

**一般的エラー** — `ExceededSlippage`、`ZeroTradingTokens`、デポジット一時停止時 `InvalidStatus`。

## `Withdraw`

LP トークンをバーン、両基礎トークンを按分で受け取ります。

**引数**

```
lp_token_amount:   u64
minimum_token_0:   u64
minimum_token_1:   u64
```

**アカウント**

| #  | 名前                   | W | S |
| -- | -------------------- | - | - |
| 1  | `owner`              |   | S |
| 2  | `authority`          |   |   |
| 3  | `pool_state`         | W |   |
| 4  | `owner_lp_token`     | W |   |
| 5  | `token_0_account`    | W |   |
| 6  | `token_1_account`    | W |   |
| 7  | `token_0_vault`      | W |   |
| 8  | `token_1_vault`      | W |   |
| 9  | `token_program`      |   |   |
| 10 | `token_program_2022` |   |   |
| 11 | `vault_0_mint`       |   |   |
| 12 | `vault_1_mint`       |   |   |
| 13 | `lp_mint`            | W |   |

（`Deposit` と同一；`lp_mint` は LP トークンがバーンされるため書き込み可能）

**数学**

```
out_token_0 = floor(lp_token_amount * vault_0 / lp_supply)
out_token_1 = floor(lp_token_amount * vault_1 / lp_supply)
require(out_token_0 >= minimum_token_0, "ExceededSlippage")
require(out_token_1 >= minimum_token_1, "ExceededSlippage")
```

**事後条件**

* `lp_supply -= lp_token_amount`。
* ボルトが `out_token_0` / `out_token_1` を送信（総額；ユーザーは Token-2022 転送フィー差引後を受取）。

## `SwapBaseInput`

確定入力スワップ。

**引数**

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

**アカウント**

| #  | 名前                     | W | S |
| -- | ---------------------- | - | - |
| 1  | `payer`                |   | S |
| 2  | `authority`            |   |   |
| 3  | `amm_config`           |   |   |
| 4  | `pool_state`           | W |   |
| 5  | `input_token_account`  | W |   |
| 6  | `output_token_account` | W |   |
| 7  | `input_vault`          | W |   |
| 8  | `output_vault`         | W |   |
| 9  | `input_token_program`  |   |   |
| 10 | `output_token_program` |   |   |
| 11 | `input_token_mint`     |   |   |
| 12 | `output_token_mint`    |   |   |
| 13 | `observation_state`    | W |   |

順序は **入力 → 出力** で、プールの正規 `token_0 / token_1` ではなくユーザー方向。プログラムはミントを照合してボルトを判定。

**数学** — [`/ja/products/cpmm/math`](/ja/products/cpmm/math) 参照。

**事前条件**

* `open_time <= now`。
* `pool_status` がスワップを許可。
* このオーソリティに対してミント一時停止・フリーズなし。
* `amount_in > 0`。

**一般的エラー**

* `ExceededSlippage` — `amount_out < minimum_amount_out`。
* `ZeroTradingTokens` — トレードが 0 に丸める。
* `NotApproved` — `UpdatePoolStatus` でプールがスワップ一時停止。
* `InvalidInput` — ミントがプールボルトのいずれとも一致しない。

## `SwapBaseOutput`

確定出力スワップ。

**引数**

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

**アカウント** — `SwapBaseInput` と同じ。

**数学** — 逆曲線（シーリング付き）、[`/ja/products/cpmm/math`](/ja/products/cpmm/math) 参照。

**一般的エラー** — `ExceededSlippage`（`gross_in > max_amount_in`）、`ZeroTradingTokens`、`InvalidInput`、`NotApproved`。

## `CollectProtocolFee`

ボルトから蓄積したプロトコルフィーを回収。

**引数** — なし。

**アカウント**

| #  | 名前                          | W | S |                                      |
| -- | --------------------------- | - | - | ------------------------------------ |
| 1  | `owner`                     |   | S | `amm_config.protocol_owner` に一致する必要。 |
| 2  | `authority`                 |   |   |                                      |
| 3  | `pool_state`                | W |   |                                      |
| 4  | `amm_config`                |   |   |                                      |
| 5  | `token_0_vault`             | W |   |                                      |
| 6  | `token_1_vault`             | W |   |                                      |
| 7  | `vault_0_mint`              |   |   |                                      |
| 8  | `vault_1_mint`              |   |   |                                      |
| 9  | `recipient_token_0_account` | W |   |                                      |
| 10 | `recipient_token_1_account` | W |   |                                      |
| 11 | `token_program`             |   |   |                                      |
| 12 | `token_program_2022`        |   |   |                                      |

**エフェクト**

```
transfer pool_state.protocol_fees_token0 from vault_0 to recipient_0
transfer pool_state.protocol_fees_token1 from vault_1 to recipient_1
pool_state.protocol_fees_token0 = 0
pool_state.protocol_fees_token1 = 0
```

曲線の有効バランスに変化なし（蓄積フィーはすでに除外）。

**一般的エラー** — 署名者が `protocol_owner` でない場合 `NotApproved`。

## `CollectFundFee`

`CollectProtocolFee` と同じ形だが、`fund_owner` が署名、`fund_fees_*` カウンタをゼロ化。

## `CollectCreatorFee`

同じ形、`pool_state.pool_creator` が署名。プールが非ゼロクリエイターフィー率で初期化された場合のみ転送を発行。

## `UpdatePoolStatus`

プール上の個別操作を一時停止・再開。`status` フィールドはビットマスク：

| ビット | フラグ                 | セット時の効果                                 |
| --- | ------------------- | --------------------------------------- |
| 0   | `DEPOSIT_DISABLED`  | `Deposit` が `NotApproved` で拒否。          |
| 1   | `WITHDRAW_DISABLED` | `Withdraw` が拒否。                         |
| 2   | `SWAP_DISABLED`     | `SwapBaseInput` / `SwapBaseOutput` が拒否。 |

**引数**

```
status: u8      // 新しいビットマスク
```

**アカウント**

| # | 名前           | W | S |                          |
| - | ------------ | - | - | ------------------------ |
| 1 | `authority`  |   | S | CPMM プログラムのアドミン鍵に一致する必要。 |
| 2 | `pool_state` | W |   |                          |

アドミン鍵は CPMM プログラムのアップグレード権限 — 実際には Raydium マルチシグ。[`/ja/security/admin-and-multisig`](/ja/security/admin-and-multisig) 参照。

## `CreateAmmConfig`

新しいフィーティアを作成。

**引数**

```
index:             u16
trade_fee_rate:    u64
protocol_fee_rate: u64
fund_fee_rate:     u64
create_pool_fee:   u64
```

**アカウント**

| # | 名前               | W | S |             |
| - | ---------------- | - | - | ----------- |
| 1 | `owner`          | W | S | アドミン。       |
| 2 | `amm_config`     | W |   | ここで `init`。 |
| 3 | `system_program` |   |   |             |

**事前条件**

* 同じ `index` の既存 `AmmConfig` なし。
* `protocol_fee_rate + fund_fee_rate <= FEE_RATE_DENOMINATOR_VALUE`。

## `UpdateAmmConfig`

既存 `AmmConfig` でフィー率またはオーナーシップを変更。`param: u8`（更新フィールドディスクリミネータ）と `value: u64` を受け取ります。パラメータあたりの値セマンティクスはソースに；一般的には：

* `param = 0` → `trade_fee_rate`
* `param = 1` → `protocol_fee_rate`
* `param = 2` → `fund_fee_rate`
* `param = 3` → `new_protocol_owner`（`Pubkey` バイトを再解釈として渡す）
* `param = 4` → `new_fund_owner`
* `param = 5` → `create_pool_fee`
* `param = 6` → `disable_create_pool`

変更はアドミンが署名、この `AmmConfig` にバインドされた **すべてのプール** に次のスワップで影響。マイグレーションなし；プールは単に新値を読み込み。

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

| インストラクション                  | `lp_supply` | ボルトバランス               | 蓄積フィーフィールド                                         | `observation` |
| -------------------------- | ----------- | --------------------- | -------------------------------------------------- | ------------- |
| `Initialize`               | + init LP   | + `init_amount_{0,1}` | 0                                                  | init          |
| `InitializeWithPermission` | + init LP   | + `init_amount_{0,1}` | 0                                                  | init          |
| `Deposit`                  | +           | + both                | —                                                  | —             |
| `Withdraw`                 | −           | − both                | —                                                  | —             |
| `SwapBaseInput`            | —           | + in, − out           | + `trade_fee` をプロトコル/ファンドに分割；有効な場合 + `creator_fee` | + （インターバル経過時） |
| `SwapBaseOutput`           | —           | + in, − out           | + `trade_fee` をプロトコル/ファンドに分割；有効な場合 + `creator_fee` | + （インターバル経過時） |
| `CollectProtocolFee`       | —           | −（プロトコルバケット分）         | `protocol_*` → 0                                   | —             |
| `CollectFundFee`           | —           | −（ファンドバケット分）          | `fund_*` → 0                                       | —             |
| `CollectCreatorFee`        | —           | −（クリエイターバケット分）        | `creator_*` → 0                                    | —             |
| `UpdatePoolStatus`         | —           | —                     | —                                                  | —             |

## 次へ進む

* [`/ja/products/cpmm/code-demos`](/ja/products/cpmm/code-demos) — 上記の実行可能 TypeScript サンプル。
* [`/ja/reference/error-codes`](/ja/reference/error-codes) — 完全 Anchor エラーテーブル。
* [`/ja/products/cpmm/fees`](/ja/products/cpmm/fees) — `CollectProtocolFee` / `CollectFundFee` / `CollectCreatorFee` が回収するフィー蓄積モデル。

ソース：

* [`raydium-io/raydium-cp-swap` — instructions](https://github.com/raydium-io/raydium-cp-swap/tree/master/programs/cp-swap/src/instructions)
* [Raydium SDK v2 — `@raydium-io/raydium-sdk-v2`](https://github.com/raydium-io/raydium-sdk-V2)
