Skip to main content
本页内容由 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_vaultpc_vault — 池的 SPL Token 金库。按 Serum/OpenBook 约定,cointoken_0(基础),pctoken_1(报价)。
  • coin_decimalspc_decimals — 与铸币相匹配。
  • open_orderstarget_ordersmarket — 旧版参考字段。仍在 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),它们完全跳过这些账户。
当你调用旧版 v1 SwapBaseIn / SwapBaseOutDepositWithdraw 指令时,账户数量必须仍然匹配旧布局(市场账户占据其历史位置),但它们的内容不再被检查 — 不会针对它们发出 CPI。新代码应使用 V2 交换变体,它们根本不接受这些账户。
AMM 的 amm_open_orders 是一个 OpenBook 所有的账户,持有池在此市场上的限价订单状态:活跃订单、已结算余额、推荐人等。amm_target_orders 是 AMM 侧:它持有 AMM 的预期网格(每个订单槽的价格/大小),以便程序可以廉价地与当前发布的内容进行比较,并放置/取消差值。

权限 PDA

整个 AMM v4 程序恰好有一个 amm_authority PDA。其种子很简单(["amm authority"]),其 bump 存储在每个 AmmInfo 上。此权限为所有 AMM v4 池的所有代币操作签名。
有一个单独的池范围权限,每个池派生一个以签署 OpenBook 操作(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_ordersamm_target_ordersamm_withdraw_queuepool_temp_lppool_coin_token_accountpool_pc_token_accountlp_mint。SDK 和 API 为你预计算这些;参见 raydium-sdk-v2Liquidity.getAssociatedPoolKeys 实际上,集成商从 GET https://api-v3.raydium.io/pools/info/ids?ids=<POOL_ID> 或 SDK 读取池的完整账户集。手动派生很少需要。

生命周期快速参考

池及其账户无限期地持续。即使流动性完全提取,AmmInfo 仍然存在。

在哪里读什么

来源: