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

# 2026-06-22 — Stable AMM：移除已弃用的 OpenBook（市场）代码

> Stable AMM 移除其已停用的 OpenBook 做市账户和代码：更小的 Swap/Deposit/Withdraw 布局、一项重大的 WithdrawPnl 变更，以及简化的池资产公式。

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

  [查看英文版 →](/reference/changelog/2026-06-22-stable-amm-openbook-cleanup)
</Info>

Stable AMM 是一个**独立程序**（拥有自己的程序 ID——不通过 AMM v4 程序交易）。它**很久以前就停止向 OpenBook 发送订单**；OpenBook 做市路径已经闲置多年。此次升级是清理工作：它**从指令布局中移除现已失效的市场相关账户和代码**。它**不会**改变任何实时交易行为——没有遗留的 OpenBook 订单需要停止发送。

## 集成者速览

* **Swap / Deposit / Withdraw 继续工作，无需更改。** 使用旧账户布局构建的交易仍然可以执行——被移除的 Serum/市场账户会被忽略。你**不需要**发布客户端更新来保持现有流程正常运行。
* **但你应该尽快迁移到新的、更小的布局。** 新布局移除了已失效的市场账户，减少交易大小：`SwapBaseIn` / `SwapBaseOut` 从 **18 → 9** 个账户，`Deposit` **14 → 12**，`Withdraw` **21（+1 可选）→ 12**。兼容性路径将在未来版本中移除。
* **`WithdrawPnl` 是一项重大破坏性变更（仅限管理员）。** 它从 **16（+1 可选）→ 10** 个账户，**没有兼容性解析**。发送旧布局会因账户错位而失败，出现 `InvalidTokenCoin` 等验证错误（旧的 #3 是 `open_orders`）。任何调用 `WithdrawPnl` 的管理员工具都必须更新。
* **`Withdraw` 和 `WithdrawPnl` 上移除了推荐费。** 可选的 `referrer_pc_wallet` 账户仍可在 `Withdraw` 的旧布局上传递以保持向后兼容，但它不再生效。
* **池资产会计已简化。** 总池资产现在为 `保险库余额 − 待结 PnL`；OpenBook 挂单项——实际上已经为零——从公式中移除。仍然添加 OpenOrders 项的索引器和报价代码应该移除它。
* **大多数指令已被移除。** 只有 `SwapBaseIn`、`SwapBaseOut`、`Deposit`、`Withdraw` 和 `WithdrawPnl` 仍可调用。`Initialize`、`PreInitialize`、`InitModelData`、`UpdateModelData`、`MonitorStep`、`SetParams`、`WithdrawSrm` 和 `SimulateInfo` 不再可调用。

## 为什么这很重要（对交易者、LP 和集成者）

* **交易者**在交换行为或定价形状上看不到任何变化——查找表曲线保持不变。新布局交换成本更低，因为交易携带的账户少了九个。
* **LP** 保持相同的存取经济学。流动性长期以来完全位于池保险库中，所以池价值完全在链上；此升级仅删除了陈旧的市场管道。
* **集成者**获得更小、更简单的交易和一个少了一个（已经是残留的）项的报价模型。现有集成不会中断（除了管理员 `WithdrawPnl`），但兼容性垫片是临时的——在移除前按你的方便进行迁移。

## 指令级变更

### `SwapBaseIn` / `SwapBaseOut` — 18 → 9 个账户（旧布局仍兼容）

九个 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 账户必须仍占据其位置，但其内容不再被验证或使用。

### `Deposit` — 14 → 12 个账户（旧布局仍兼容）

`amm_open_orders`（旧的 #3）和 `serum_market`（旧的 #9）被移除。当传递 14 个账户时，旧布局被解析以保持兼容性。

### `Withdraw` — 21（+1 可选）→ 12 个账户（旧布局仍兼容）

九个 Serum 账户被移除。旧的 21 或 22 账户布局仍被接受，**但第 22 个可选 `referrer_pc_wallet` 的推荐费逻辑已被移除**——账户仍可传递但不再生效。

### `WithdrawPnl` — 16（+1 可选）→ 10 个账户（⚠️ 无兼容性路径，重大破坏性变更）

固定 10 账户、仅限管理员的布局。**没有**旧布局的兼容性解析；发送它会因账户错位而失败，出现 `InvalidTokenCoin` 等错误。**逻辑变更**：当池的可用资金不足以提取累积的 PnL 时，池不再进入 `CancelAllOrdersState` / `Disabled`；指令直接返回 `TakePnlError`。可选的 `referrer_pc_wallet` 同样已被移除。

## 池资产计算变更

历史上该公式添加了池在其 OpenBook OpenOrders 账户中作为挂单持有的资金。该项自池停止发送订单以来一直为零；此升级从公式中完全删除它，仅保留保险库计算：

|   | 公式                                                                         |
| - | -------------------------------------------------------------------------- |
| 旧 | `保险库余额 + 挂单资金（native_coin_total / native_pc_total）− 待结 PnL（need_take_pnl）` |
| 新 | `保险库余额 − 待结 PnL（need_take_pnl）`                                            |

## 更新的页面

* `products/stable/overview` — 纯 AMM 模型，移除 OpenBook 依赖，更新了比较和账户计数表。
* `products/stable/index` — "它是什么"和关键事实表不再声称 OpenBook 依赖。
* `products/stable/accounts` — OpenBook 账户从清单中移除；`AmmInfo` Serum/挂单字段标记为已弃用/未使用；添加了池资产说明。
* `products/stable/instructions` — 新的 Swap / Deposit / Withdraw / WithdrawPnl 账户表，带有兼容性标注；所有其他指令（`Initialize`、`PreInitialize`、`InitModelData`、`UpdateModelData`、`MonitorStep`、`SetParams`、`WithdrawSrm`、`SimulateInfo`）标记为已移除/不再可调用。
* `products/stable/math` — 池资产公式更新；`MonitorStep` / OpenBook 部分重新表述为长期已弃用。
* `products/stable/fees` — "来自 OpenBook 的 PnL"部分已弃用；收集流程不再结算 OpenBook 成交。
* `products/stable/code-demos` — 账户计数指导已更新；SDK 仍然抽象布局选择。

**验证对象**：

* `raydium-stable` 程序源代码（升级后的 `instruction.rs` / `processor.rs`）。
* Solana mainnet-beta 上的链上 Stable AMM 程序部署。
