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

# Stable AMM 指令

> 当前可调用的指令集 — Deposit、Withdraw、SwapBaseIn、SwapBaseOut、WithdrawPnl — 以及在 2026-06-22 升级中移除的指令。

<Info>
  **本页内容由 AI 自动翻译，所有内容以英文版本为准。**

  [查看英文版 →](/products/stable/instructions)
</Info>

<Info>
  Stable AMM 是一个**独立程序**，拥有自己的程序 ID。它**不是** AMM v4 程序的一种模式，也不是通过 AMM v4 进行交易 — 它是单独部署、升级和调用的。它仅在费用和账户布局约定上与 AMM v4 相似。
</Info>

<Warning>
  **2026-06-22 升级 — 移除已弃用的 OpenBook（市场）代码。** Stable AMM **很久以前就停止向 OpenBook 发布订单**；订单簿做市路径已经闲置多年。此升级删除了剩余的市场相关账户和代码 — 它**不会**改变实时交易行为。

  对集成者的两个影响：

  1. **更小的账户布局。** `SwapBaseIn` / `SwapBaseOut`（**18 → 9**）、`Deposit`（**14 → 12**）和 `Withdraw`（**21/22 → 12**）移除了已弃用的 Serum/市场账户。旧布局仍可解析以保持向后兼容性。`WithdrawPnl`（**16 → 10**）是**硬性破坏性变更，没有兼容性路径**（仅限管理员）。
  2. **大多数指令已移除。** 仅 `SwapBaseIn`、`SwapBaseOut`、`Deposit`、`Withdraw` 和 `WithdrawPnl` 保持可调用。所有其他指令不再可调用。

  更新日志：[`reference/changelog`](/zh/reference/changelog)。
</Warning>

## 指令清单

### 可调用

| 指令            | 类别  | 说明                                        |
| ------------- | --- | ----------------------------------------- |
| `Deposit`     | 流动性 | 添加流动性，接收 LP。新的 12 账户布局；旧的 14 账户布局仍兼容。     |
| `Withdraw`    | 流动性 | 销毁 LP，接收两种代币。新的 12 账户布局；旧的 21/22 账户布局仍兼容。 |
| `SwapBaseIn`  | 交换  | 精确输入交换。新的 9 账户布局；旧的 18 账户布局仍兼容。           |
| `SwapBaseOut` | 交换  | 精确输出交换。新的 9 账户布局；旧的 18 账户布局仍兼容。           |
| `WithdrawPnl` | 管理员 | 提取累积的协议费用。新的 10 账户布局（**硬性破坏 — 无旧布局兼容性**）。 |

### 已移除（不再可调用）

这些在 2026-06-22 升级中被移除，不再可调用。参见[已移除的指令](#已移除的指令)。

| 指令                | 原类别   | 原用途                    |
| ----------------- | ----- | ---------------------- |
| `Initialize`      | 生命周期  | 创建池。                   |
| `PreInitialize`   | 生命周期  | 旧版预分配辅助工具。             |
| `InitModelData`   | 模型设置  | 创建并初始化查找表。             |
| `UpdateModelData` | 模型设置  | 每次调用填充最多 5 个表元素。       |
| `MonitorStep`     | Crank | 结算 OpenBook 成交，重新发布订单。 |
| `SetParams`       | 管理员   | 更改池参数。                 |
| `WithdrawSrm`     | 旧版    | 提取 SRM 费用折扣返利。         |
| `SimulateInfo`    | 诊断    | 只读报价辅助工具。              |

## `Deposit`

添加流动性，接收 LP 代币。

**参数**

```
max_coin_amount: u64
max_pc_amount: u64
base_side: u64          // 0 = base on coin, 1 = base on pc
```

**账户** — 新布局，12 个账户（可写 `W`，签名者 `S`）

| #  | 名称                   | W | S | 说明            |
| -- | -------------------- | - | - | ------------- |
| 0  | `token_program`      |   |   | SPL Token。    |
| 1  | `amm`                | W |   | 池的 `AmmInfo`。 |
| 2  | `amm_authority`      |   |   | 程序级 PDA。      |
| 3  | `amm_target_orders`  | W |   |               |
| 4  | `amm_lp_mint`        | W |   | LP 铸币。        |
| 5  | `amm_coin_vault`     | W |   | 池 coin 金库。    |
| 6  | `amm_pc_vault`       | W |   | 池 pc 金库。      |
| 7  | `model_data_account` |   |   | **只读查找表。**    |
| 8  | `user_source_coin`   | W |   | 用户的 coin 输入。  |
| 9  | `user_source_pc`     | W |   | 用户的 pc 输入。    |
| 10 | `user_dest_lp`       | W |   | 用户的 LP ATA。   |
| 11 | `user_source_owner`  |   | S | 交易签名者。        |

**兼容性**：`amm_open_orders`（旧 #3）和 `serum_market`（旧 #9）已移除。当传递**14**个账户时，指令使用旧的 14 账户布局解析；Serum 账户被忽略。

**数学** — 使用查找表计算比率的标准按比例分配。SDK 计算所需 LP 数量的 coin/pc 对，并检查最大上限。

## `Withdraw`

销毁 LP，按比例接收两种代币。

**参数**

```
amount: u64            // 要销毁的 LP 代币
```

**账户** — 新布局，12 个账户（可写 `W`，签名者 `S`）

| #  | 名称                   | W | S | 说明            |
| -- | -------------------- | - | - | ------------- |
| 0  | `token_program`      |   |   | SPL Token。    |
| 1  | `amm`                | W |   | 池的 `AmmInfo`。 |
| 2  | `amm_authority`      |   |   | 程序级 PDA。      |
| 3  | `amm_target_orders`  | W |   |               |
| 4  | `amm_lp_mint`        | W |   | LP 铸币。        |
| 5  | `amm_coin_vault`     | W |   | 池 coin 金库。    |
| 6  | `amm_pc_vault`       | W |   | 池 pc 金库。      |
| 7  | `model_data_account` |   |   | **只读查找表。**    |
| 8  | `user_source_lp`     | W |   | 用户的 LP 来源。    |
| 9  | `user_dest_coin`     | W |   | 用户的 coin 输出。  |
| 10 | `user_dest_pc`       | W |   | 用户的 pc 输出。    |
| 11 | `user_lp_owner`      |   | S | 交易签名者。        |

**兼容性**：九个 Serum 账户（`amm_open_orders`、`serum_program`、`serum_market`、`serum_coin_vault`、`serum_pc_vault`、`serum_vault_signer`、`serum_event_q`、`serum_bids`、`serum_asks`）已移除。旧的**21 个**或**22 个**账户布局仍被接受。但是，**第 22 个可选 `referrer_pc_wallet` 账户的推荐费逻辑已被移除** — 它仍可传递但不再生效。

**前置条件**

* `user_source_lp` 至少持有 `amount`。

**后置条件**

* `amount` LP 代币被销毁。
* 用户根据当前按比例分配接收 coin 和 pc 数量，已调整费用。

## `SwapBaseIn`

使用查找表进行定价的精确输入交换。

**参数**

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

**账户** — 新布局，9 个账户（可写 `W`，签名者 `S`）

| # | 名称                       | W | S | 说明            |
| - | ------------------------ | - | - | ------------- |
| 0 | `spl_token program`      |   |   | SPL Token。    |
| 1 | `amm`                    | W |   | 池的 `AmmInfo`。 |
| 2 | `amm_authority`          |   |   | 程序级 PDA。      |
| 3 | `amm_coin_vault`         | W |   | 池 coin 金库。    |
| 4 | `amm_pc_vault`           | W |   | 池 pc 金库。      |
| 5 | `model_data_account`     |   |   | **只读查找表。**    |
| 6 | `user_source_token`      | W |   | 用户的输入代币账户。    |
| 7 | `user_destination_token` | W |   | 用户的输出代币账户。    |
| 8 | `user_source_owner`      |   | S | 用户（交易签名者）。    |

**兼容性**：九个 OpenBook 账户（`amm_open_orders`、`serum_program`、`serum_market`、`serum_bids`、`serum_asks`、`serum_event_queue`、`serum_coin_vault`、`serum_pc_vault`、`serum_vault_signer`）已移除。如果传递的账户数**不是 9**，指令使用旧的**18 账户**布局解析；Serum 账户必须仍占据其位置，但其内容不再被验证或使用。

**前置条件**

* `amm.status` 允许交换。
* `user_source_token` 持有 ≥ `amount_in`。

**后置条件**

* 用户失去 `amount_in`，获得 `amount_out ≥ minimum_amount_out`。
* 池费用增加 `need_take_pnl_*` 计数器。

**数学** — 如[`products/stable/math`](/zh/products/stable/math)中所述的查找表插值。

## `SwapBaseOut`

精确输出交换（`SwapBaseIn` 的反向）。相同的 9 账户布局，不同的数学方向。

**参数**

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

## `WithdrawPnl`

仅限管理员。从 `need_take_pnl_*` 提取累积的协议费用到指定的 PnL 账户。

<Warning>
  **硬性破坏性变更 — 无兼容性路径。** 此指令**没有**旧布局的解析。发送旧布局会因账户错位而失败，出现验证错误如 `InvalidTokenCoin`（旧 #3 是 `open_orders`）。调用 `WithdrawPnl` 的管理员工具**必须**更新到新的 10 账户布局。
</Warning>

**参数** — 无（状态驱动）。

**账户** — 新布局，固定 10 个账户，仅限管理员（可写 `W`，签名者 `S`）

| # | 名称                  | W | S | 说明                  |
| - | ------------------- | - | - | ------------------- |
| 0 | `spl_token program` |   |   | SPL Token。          |
| 1 | `amm`               | W |   | 池的 `AmmInfo`。       |
| 2 | `amm_authority`     |   |   | 程序级 PDA。            |
| 3 | `amm_coin_vault`    | W |   | 池 coin 金库。          |
| 4 | `amm_pc_vault`      | W |   | 池 pc 金库。            |
| 5 | `amm_target_orders` | W |   |                     |
| 6 | `model_data`        |   |   | 查找表。                |
| 7 | `user_coin`         | W |   | 管理员的 coin 账户（接收费用）。 |
| 8 | `user_pc`           | W |   | 管理员的 pc 账户（接收费用）。   |
| 9 | `amm_admin`         |   | S | 池管理员（签名者）。          |

**逻辑变更**：当池的可用资金不足以提取累积的 PnL 时，池**不再**进入 `CancelAllOrdersState` / `Disabled`；指令直接返回 `TakePnlError`。可选的 `referrer_pc_wallet` 也已被移除。

**前置条件**

* `amm_admin` 必须被授权。

**后置条件**

* `need_take_pnl_coin` 和 `need_take_pnl_pc` 被转移到管理员的账户。
* 计数器被清零。

## 已移除的指令

以下指令在 2026-06-22 升级中被移除，**不再可调用**。此处记录它们仅是为了让集成者在历史交易和 SDK 中识别它们。

* **`Initialize`** — 原用于引导新的 Stable AMM 池。已移除。
* **`PreInitialize`** — 旧版预分配辅助工具。已移除。
* **`InitModelData`** — 原用于创建并初始化 `ModelDataInfo` 查找表。已移除。
* **`UpdateModelData`** — 原用于每次调用填充最多 5 个查找表元素。已移除。
* **`MonitorStep`** — 结算成交并重新发布订单网格的 OpenBook crank。在池停止向 OpenBook 发布后已长期闲置；现已移除。
* **`SetParams`** — 管理员参数更改（状态、费用、所有者、模型数据密钥等）。已移除。
* **`WithdrawSrm`** — 从早期 Serum 时代的池中提取 SRM 费用折扣返利。已移除。
* **`SimulateInfo`** — 只读报价辅助工具。已移除；使用 SDK 的链下稳定曲线辅助工具进行报价（参见[代码演示](/zh/products/stable/code-demos)）。

## 后续步骤

* [账户](/zh/products/stable/accounts) — 账户字段布局和大小。
* [数学](/zh/products/stable/math) — 查找表插值逻辑。
* [代码演示](/zh/products/stable/code-demos) — 了解如何从 SDK 调用这些。

来源：

* `raydium-stable/program/src/instruction.rs`（枚举和 pack/unpack）
* `raydium-stable/program/src/processor.rs`（执行逻辑）
