跳转到主要内容
本页内容由 AI 自动翻译,所有内容以英文版本为准。查看英文版 →
Stable AMM 是一个独立程序,拥有自己的程序 ID。它不是 AMM v4 程序的一种模式,也不是通过 AMM v4 进行交易 — 它是单独部署、升级和调用的。它仅在费用和账户布局约定上与 AMM v4 相似。
2026-06-22 升级 — 移除已弃用的 OpenBook(市场)代码。 Stable AMM 很久以前就停止向 OpenBook 发布订单;订单簿做市路径已经闲置多年。此升级删除了剩余的市场相关账户和代码 — 它不会改变实时交易行为。对集成者的两个影响:
  1. 更小的账户布局。 SwapBaseIn / SwapBaseOut18 → 9)、Deposit14 → 12)和 Withdraw21/22 → 12)移除了已弃用的 Serum/市场账户。旧布局仍可解析以保持向后兼容性。WithdrawPnl16 → 10)是硬性破坏性变更,没有兼容性路径(仅限管理员)。
  2. 大多数指令已移除。SwapBaseInSwapBaseOutDepositWithdrawWithdrawPnl 保持可调用。所有其他指令不再可调用。
更新日志:reference/changelog

指令清单

可调用

指令类别说明
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 个表元素。
MonitorStepCrank结算 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
#名称WS说明
0token_programSPL Token。
1ammW池的 AmmInfo
2amm_authority程序级 PDA。
3amm_target_ordersW
4amm_lp_mintWLP 铸币。
5amm_coin_vaultW池 coin 金库。
6amm_pc_vaultW池 pc 金库。
7model_data_account只读查找表。
8user_source_coinW用户的 coin 输入。
9user_source_pcW用户的 pc 输入。
10user_dest_lpW用户的 LP ATA。
11user_source_ownerS交易签名者。
兼容性amm_open_orders(旧 #3)和 serum_market(旧 #9)已移除。当传递14个账户时,指令使用旧的 14 账户布局解析;Serum 账户被忽略。 数学 — 使用查找表计算比率的标准按比例分配。SDK 计算所需 LP 数量的 coin/pc 对,并检查最大上限。

Withdraw

销毁 LP,按比例接收两种代币。 参数
amount: u64            // 要销毁的 LP 代币
账户 — 新布局,12 个账户(可写 W,签名者 S
#名称WS说明
0token_programSPL Token。
1ammW池的 AmmInfo
2amm_authority程序级 PDA。
3amm_target_ordersW
4amm_lp_mintWLP 铸币。
5amm_coin_vaultW池 coin 金库。
6amm_pc_vaultW池 pc 金库。
7model_data_account只读查找表。
8user_source_lpW用户的 LP 来源。
9user_dest_coinW用户的 coin 输出。
10user_dest_pcW用户的 pc 输出。
11user_lp_ownerS交易签名者。
兼容性:九个 Serum 账户(amm_open_ordersserum_programserum_marketserum_coin_vaultserum_pc_vaultserum_vault_signerserum_event_qserum_bidsserum_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
#名称WS说明
0spl_token programSPL Token。
1ammW池的 AmmInfo
2amm_authority程序级 PDA。
3amm_coin_vaultW池 coin 金库。
4amm_pc_vaultW池 pc 金库。
5model_data_account只读查找表。
6user_source_tokenW用户的输入代币账户。
7user_destination_tokenW用户的输出代币账户。
8user_source_ownerS用户(交易签名者)。
兼容性:九个 OpenBook 账户(amm_open_ordersserum_programserum_marketserum_bidsserum_asksserum_event_queueserum_coin_vaultserum_pc_vaultserum_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中所述的查找表插值。

SwapBaseOut

精确输出交换(SwapBaseIn 的反向)。相同的 9 账户布局,不同的数学方向。 参数
max_amount_in: u64
amount_out: u64

WithdrawPnl

仅限管理员。从 need_take_pnl_* 提取累积的协议费用到指定的 PnL 账户。
硬性破坏性变更 — 无兼容性路径。 此指令没有旧布局的解析。发送旧布局会因账户错位而失败,出现验证错误如 InvalidTokenCoin(旧 #3 是 open_orders)。调用 WithdrawPnl 的管理员工具必须更新到新的 10 账户布局。
参数 — 无(状态驱动)。 账户 — 新布局,固定 10 个账户,仅限管理员(可写 W,签名者 S
#名称WS说明
0spl_token programSPL Token。
1ammW池的 AmmInfo
2amm_authority程序级 PDA。
3amm_coin_vaultW池 coin 金库。
4amm_pc_vaultW池 pc 金库。
5amm_target_ordersW
6model_data查找表。
7user_coinW管理员的 coin 账户(接收费用)。
8user_pcW管理员的 pc 账户(接收费用)。
9amm_adminS池管理员(签名者)。
逻辑变更:当池的可用资金不足以提取累积的 PnL 时,池不再进入 CancelAllOrdersState / Disabled;指令直接返回 TakePnlError。可选的 referrer_pc_wallet 也已被移除。 前置条件
  • amm_admin 必须被授权。
后置条件
  • need_take_pnl_coinneed_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 的链下稳定曲线辅助工具进行报价(参见代码演示)。

后续步骤

  • 账户 — 账户字段布局和大小。
  • 数学 — 查找表插值逻辑。
  • 代码演示 — 了解如何从 SDK 调用这些。
来源:
  • raydium-stable/program/src/instruction.rs(枚举和 pack/unpack)
  • raydium-stable/program/src/processor.rs(执行逻辑)