本页内容由 AI 自动翻译,所有内容以英文版本为准。查看英文版 →
自 2026-07 升级以来,AMM v4 的 OpenBook / Serum 依赖已被移除 — 任何指令都不再读写 OpenBook 状态。下面的市场账户仅作为旧版 v1 指令布局上的位置占位符(被接受但忽略)以及
AmmInfo 上的参考字段保留。请使用 V2 交换入口点,它们完全省略了这些账户。本页仍将账户分为”池所有”和”OpenBook(旧版)“两部分,以便阅读较早的交易。清单
AMM v4 池在创建时在AmmInfo 上记录一个绑定的市场。完整情况如下:
注意:“serum” 前缀在 AMM v4 的 IDL 和字段名中保留以保持向后兼容性。OpenBook 移除后,这些账户不再起作用。
AmmInfo
池的根状态账户。体积较大(约 752 字节),因为它内联携带池和 OpenBook 引用。
结构体布局未变(字节兼容),因此现有的反序列化器继续工作,但在 OpenBook 移除后,上面标记为
已弃用的字段不再被写入 — swap_* 交易量计数器在其最后值处冻结。对于交易量分析,请使用交易日志而不是这些字段。只有 need_take_pnl_* 和 pool_open_time 被主动维护。coin_vault、pc_vault— 池的 SPL Token 金库。按 Serum/OpenBook 约定,coin是token_0(基础),pc是token_1(报价)。coin_decimals、pc_decimals— 与铸币相匹配。open_orders、target_orders、market— 旧版参考字段。仍在AmmInfo上,仍在 v1 指令布局上按位置传递,但程序不再读取或验证它们。V2 交换入口点省略了它们。fees.swap_fee_numerator / swap_fee_denominator— 合并的交易费。默认25 / 10_000 = 0.25%。status— 位掩码,控制操作。通过AdminSetStatus由管理员设置。state_data.need_take_pnl_*— 累积总费用与已清扫费用之间的差值。TakePnl将其清零。
OpenBook 接线
已移除。 OpenBook / Serum 依赖已从程序中删除(2026-07 升级)。本部分描述的账户不再被验证或使用。它们作为参考字段保留在
AmmInfo 上,作为位置占位符保留在旧版 v1 指令布局上。使用V2 交换入口点(SwapBaseInV2 / SwapBaseOutV2),它们完全跳过这些账户。SwapBaseIn / SwapBaseOut、Deposit 或 Withdraw 指令时,账户数量必须仍然匹配旧布局(市场账户占据其历史位置),但它们的内容不再被检查 — 不会针对它们发出 CPI。新代码应使用 V2 交换变体,它们根本不接受这些账户。
amm_open_orders 是一个 OpenBook 所有的账户,持有池在此市场上的限价订单状态:活跃订单、已结算余额、推荐人等。amm_target_orders 是 AMM 侧:它持有 AMM 的预期网格(每个订单槽的价格/大小),以便程序可以廉价地与当前发布的内容进行比较,并放置/取消差值。
权限 PDA
整个 AMM v4 程序恰好有一个amm_authority PDA。其种子很简单(["amm authority"]),其 bump 存储在每个 AmmInfo 上。此权限为所有 AMM v4 池的所有代币操作签名。
amm_authority 在此程序的设计中实际上涵盖两者;不同版本使用不同的派生,因此在代码中检查特定池的 AmmInfo.nonce)。
金库
池的 SPL Token 金库是标准代币账户,其所有者是 amm_authority。不是 ATA — 它们的地址是在 Initialize 时使用 ["amm_associated_seed", coin_mint_or_pc_mint, market, amm_id] 种子派生的特定 PDA。地址存储在 AmmInfo 上;派生是一次性的好奇心。
不支持 Token-2022。程序为所有金库操作硬编码 SPL Token 的程序 ID。尝试将 AMM v4 池绑定到 Token-2022 铸币在 Initialize 时失败。
LP 铸币
一个经典的 SPL Token 铸币,其权限是amm_authority。总供应量跟踪 LP 对池的所有权;燃烧 LP 按比例从两个金库返回代币。因为 AMM v4 早于 CPMM,池状态中没有 lp_supply 镜像 — 直接读取铸币的链上供应量。
状态位掩码
AmmInfo.status 控制操作。位(位置可能因程序版本而异 — 通过源代码确认):
Raydium 多签通过
SetParams(使用 param = Status)设置这些。(AdminCancelOrders 已被移除。)
观察 / 预言机
AMM v4 没有专用的观察账户。 需要链上 TWAP 的其他协议通常间接消费 OpenBook 的账本交叉或读取链下数据。如果你需要具有程序支持的 Raydium TWAP,请使用 CPMM 或 CLMM。从头开始派生池的账户
因为 AMM v4 不是为确定性的每对 PDA 设计的(它早于该 Solana 约定),规范的amm_id 是一个有种子的密钥对,派生方式如下:
amm_open_orders、amm_target_orders、amm_withdraw_queue、pool_temp_lp、pool_coin_token_account、pool_pc_token_account 和 lp_mint。SDK 和 API 为你预计算这些;参见 raydium-sdk-v2 的 Liquidity.getAssociatedPoolKeys。
实际上,集成商从 GET https://api-v3.raydium.io/pools/info/ids?ids=<POOL_ID> 或 SDK 读取池的完整账户集。手动派生很少需要。
生命周期快速参考
池及其账户无限期地持续。即使流动性完全提取,
AmmInfo 仍然存在。
在哪里读什么
- 数学和费用算术:
products/amm-v4/math。 - 费用分割以及它与 CPMM/CLMM 的比较:
products/amm-v4/fees。 - 指令账户列表:
products/amm-v4/instructions。 - OpenBook 账户派生:OpenBook 程序文档(
github.com/openbook-dex/program)。
- Raydium AMM 程序 —
raydium-io/raydium-amm reference/program-addresses用于规范程序 ID- OpenBook / Serum 协议用于对方账户

