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.
本页内容由 AI 自动翻译,所有内容以英文版本为准。查看英文版 →
AMM v4 的账户数量远多于 CPMM 或 CLMM,因为每项操作都涉及 OpenBook 状态。本页将账户分为”池拥有”和”OpenBook 拥有”两部分,方便集成者快速判断各类账户。
账户清单
AMM v4 池在创建时绑定到恰好一个 OpenBook 市场。完整的实时图景如下:| 类别 | 账户 | 所有者 | 用途 |
|---|---|---|---|
| 池 | AmmInfo | AMM v4 程序 | 池状态:已累积手续费、状态、指向金库和 OpenBook 市场的引用 |
| 池 | amm_authority | AMM v4 程序 | 程序拥有的 PDA,对金库操作进行签名。在所有 AMM v4 池间共享 |
| 池 | amm_open_orders | OpenBook | 池在该市场的 OpenBook OpenOrders 账户 |
| 池 | amm_target_orders | AMM v4 程序 | 池端目标限价订单网格,用于回发至 OpenBook |
| 池 | pool_coin_token_account | SPL Token | 池的币端金库(amm_authority 的 ATA) |
| 池 | pool_pc_token_account | SPL Token | 池的法币端金库 |
| 池 | lp_mint | SPL Token | 可互换的 LP 代币 |
| 池 | pool_withdraw_queue | AMM v4 程序 | 延迟提取的历史队列;保持为零长度 |
| 池 | pool_temp_lp | AMM v4 程序 | Initialize 中使用的辅助 LP 账户 |
| 市场 (OpenBook) | serum_market | OpenBook | 市场本身(基础/报价代币、金库签名者等) |
| 市场 | serum_bids, serum_asks | OpenBook | 买单和卖单队列 |
| 市场 | serum_event_queue | OpenBook | 待处理事件(成交、撤单) |
| 市场 | serum_coin_vault, serum_pc_vault | SPL Token | OpenBook 的市场级金库 |
| 市场 | serum_vault_signer | OpenBook | 市场级 PDA,对 serum_*_vault 操作进行签名 |
AmmInfo
池的根状态账户。体积较大(约 752 字节),因为同时携带池和 OpenBook 引用。
coin_vault、pc_vault— 池的 SPL Token 金库。按 Serum/OpenBook 惯例,coin是token_0(基础资产),pc是token_1(报价资产)。coin_decimals、pc_decimals— 与代币小数位数一致。open_orders、target_orders、market— 必须传递给每个 swap/deposit/withdraw 指令。fees.swap_fee_numerator / swap_fee_denominator— 总交易手续费。默认25 / 10_000 = 0.25%。status— 位掩码,控制操作的启用/禁用。由管理员通过AdminSetStatus设置。state_data.need_take_pnl_*— 已累积手续费总额与已提取额之间的差额。TakePnl将其清零。
OpenBook 接线
已停用。 AMM v4 池不再与 OpenBook 共享流动性 — 限价订单网格已被停用。本节描述的 OpenBook 账户仍然存在于每个池的
AmmInfo 中,并由 V1 swap 入口点验证(以及由 Initialize、Deposit、Withdraw 验证),以保持向后兼容性。但实际上它们引用的链上状态为空。请使用 V2 swap 入口点 (SwapBaseInV2 / SwapBaseOutV2),它们完全跳过这些账户,代表当今的规范执行路径。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 金库是标准代币账户,其owner 是 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 控制操作。各位(位置可能因程序版本而异 — 请通过源代码确认):
| 位 | 标志 | 效果 |
|---|---|---|
| 0 | SWAP_DISABLED | Swap* 被拒绝 |
| 1 | DEPOSIT_DISABLED | Deposit 被拒绝 |
| 2 | WITHDRAW_DISABLED | Withdraw 被拒绝 |
| 3 | CLMM_LIKE_MIGRATE | 运维使用的迁移门控标志 |
AdminCancelOrders、AdminSetParams 等设置这些位。
观察/预言机
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 读取池的完整账户集合。手动推导很少需要。
生命周期快速参考
| 事件 | 创建的账户 | 销毁的账户 |
|---|---|---|
Initialize2 | amm_info、amm_open_orders、amm_target_orders、金库、lp_mint、pool_withdraw_queue、pool_temp_lp | — |
Deposit | —(可能创建用户 LP ATA) | — |
Withdraw | — | — |
SwapBaseIn / SwapBaseOut | —(可能创建用户 ATA) | — |
TakePnl | — | — |
MonitorStep(crank) | — | — |
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 协议用于对方账户


