本页内容由 AI 自动翻译,所有内容以英文版本为准。查看英文版 →
一句话总结
AMM v4 是 Raydium 推出时的程序。它维持恒定乘积不变量(x · y = k)。它最初被设计为混合 AMM:每个池都建立在 OpenBook(原 Serum)限价订单簿市场之上,并将其曲线的部分作为限价单镜像到该簿上,因此用户和聚合器可以直接针对池交换(AMM 路径)或针对池在 OpenBook 上拥有的限价单交换(CLOB 路径)。OpenBook 依赖已从程序中移除 — 池不再在 OpenBook 上发布或维护订单,所有当前交换流量都通过仅 AMM 的 V2 交换入口点流动。不支持 Token-2022。AMM v4 仍然作为恒定乘积 AMM 完全可运行 — 每个池继续交易,费用继续累积,LP 继续赚取收益 — 但 UI 和 SDK 默认将新池创建为 CPMM,因为 CPMM 更便宜且支持更多铸币类型。
混合历史(背景)
在推出时,在 Serum 订单簿旁建立池存在分散流动性的风险。混合设计将 AMM 的曲线作为限价单发布到簿上,因此订单簿路由器可以免费看到池的深度。在 2022 年末 OpenBook 从 Serum 分叉后,该程序继续针对 OpenBook 工作,改动最少。随着 CPMM 和链上聚合器的成熟,订单簿端的优势消退,AMM v4 的 OpenBook 集成最终被关闭 — 曲线现在是池的唯一执行表面。AMM v4 提供的功能(CPMM 没有)
- 主要交易对的深度流动性。 具有大量 AMM v4 TVL 的主要交易对(SOL-USDC、mSOL-USDC 等)仍然是这些交易最深的场所。
AMM v4 不提供的功能
- Token-2022。 不支持。AMM v4 在 Token-2022 存在之前编写;其账户布局假设经典 SPL Token。
- v1 交换上的低账户数。 旧版
SwapBaseIn/SwapBaseOut布局仍然将 OpenBook 市场账户作为位置占位符(它们被接受但不再验证或使用)。使用SwapBaseInV2/SwapBaseOutV2来删除它们并缩小交易。 - 低计算使用量。 即使是 V2 交换的成本也比 CPMM 交换高。
- 默认新池流程。 新池使用
Initialize2创建(旧版Initialize/PreInitialize入口点已被移除,现在调用时会回滚)。Raydium UI、SDK 和api-v3.raydium.io不再显示”创建 AMM v4 池”按钮 — 新池的默认路径是 CPMM。
AMM v4 与 CPMM 的区别
更多费用详情:
products/amm-v4/fees 和 reference/fee-comparison。
心智模型
今天的 AMM v4 池是一个恒定乘积x · y = k AMM。两个金库都完全可用于曲线 — 没有部分被提交给 OpenBook 订单,因为 OpenBook 集成已被移除。操作是交换(用户 ↔ 池,通过 SwapBaseInV2 / SwapBaseOutV2)和存入 / 提取(LP 操作)。旧的 crank(MonitorStep)已被移除,现在调用时会回滚。
历史心智模型(停用前): 每个金库的一部分被托管为开放簿订单;已填充订单的结算发生在交换和 LP 操作期间;路由交换可以针对池自己的 OpenBook 订单填充。这些都不再运行。
为什么 CPMM 是推荐的默认选择
CPMM 消除了 OpenBook 依赖。权衡如下:- CPMM 交易的计算成本便宜 2×–3×。
- CPMM 支持 Token-2022 铸币。
- 聚合器现在通过 Raydium SDK 直接集成 CPMM,因此订单簿可见性的优势在很大程度上已过时。
- 运营风险:历史上 OpenBook 中断或暂停可能会降低 AMM v4 池的性能(陈旧订单)。由于 OpenBook 依赖现已从程序中移除,该耦合已消除 — 但 CPMM 仍然是推荐的、成本更低的默认选择。
protocol-overview/versions-and-migration 了解迁移指导。
何时选择 AMM v4
- 你正在路由交换,候选池之一是具有最佳价格的 AMM v4 池。
- 你正在现有 AMM v4 池中提供或管理流动性 — 迁移是一个选择,不是必需的;池继续作为纯 AMM 运行。
- 你维护针对 AMM v4 构建的集成,没有理由迁移。
后续步骤
- 账户 — AMM 的账户,加上现在已过时的 OpenBook 参考字段。
- 数学 — 具有 AMM v4 费用约定的恒定乘积交换数学。
- 指令 — 指令表面:
Initialize2、Swap(v1 / V2)、Deposit、Withdraw、WithdrawPnl、SetParams。 - 费用 — 0.25% 的分割及其收集方式。
- 代码演示 — 交换和 LP 流程的 TypeScript 示例。
reference/program-addresses获取规范程序 ID- OpenBook 程序存储库获取本页引用的对方账户

