本页内容由 AI 自动翻译,所有内容以英文版本为准。查看英文版 →
版本说明。 所有示例针对
@raydium-io/raydium-sdk-v2@0.2.42-alpha,在 Solana mainnet-beta 上验证,时间为 2026-04。程序 ID:675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8(参见 reference/program-addresses)。本文不涉及新池创建。 Raydium UI 不再提供 AMM v4 池创建功能——新交易对默认使用 CPMM。AMM v4 程序本身仍然接受链上的
Initialize2;只是这不再是推荐的方式。下面的示例涵盖每个集成者仍需的实时池操作:交换、存入、提取。设置
按 ID 获取池
poolKeys 是指令构建器使用的结构体。它按程序期望的顺序包含每个 AMM v4 和 OpenBook 账户。
交换(基础输入)
交换(基础输出)
添加流动性
fixedSide: "a" 告诉 SDK 你提供了精确的 amountInA,而 amountInB 应该最多为 maxAnotherAmount。池的链上流动性在按比例数学之前结算,因此存入比率与最新的储备相匹配。
移除流动性
计算单位 / 优先费用调整
AMM v4 交换在计算上很重,因为每条指令都验证完整的 OpenBook 状态。典型的交换使用 180k–250k CU,具体取决于需要在过程中结算多少个开放订单。始终传递计算单位限制:computeBudgetConfig,SDK 可能仍会使用自己的默认值;检查 innerTransactions 以确认。参见 integration-guides/priority-fee-tuning。
直接 Rust CPI
如果你必须从自己的 Anchor 程序 CPI 到 AMM v4,你需要逐字模拟SwapBaseIn 的账户列表。最小示例:
Instruction。
上面的 CPI 示例使用旧版 v1
SwapBaseIn 布局(标签 9,17 个账户)来读取/重现现有交易。自 2026-07 升级以来,市场账户被接受但被忽略。对于新代码,优先使用 SwapBaseInV2 / SwapBaseOutV2(标签 16 / 17),它们完全删除了市场账户(和 amm_open_orders)——仅传递 8 个账户:token_program、amm、amm_authority、两个池保险库、两个用户代币账户和 user_owner。常见陷阱
- v1 交换上的账户数量错误。 旧版
SwapBaseIn/SwapBaseOut仍然需要完整的 17 个账户(或 18 个账户)列表——不匹配的数量会以WrongAccountsNumber回滚。市场账户的内容不再被验证,但你仍然必须占用它们的槽位。优先使用 V2 入口点以避免这种情况。 - 读取原始保险库余额。 储备现在仅限于保险库;减去应计 PnL(
need_take_pnl_*)。SDK 报价或api-v3.raydium.io/pools/info/ids会为你处理这个问题。 - 调用已删除的指令。
MonitorStep、MigrateToOpenBook、WithdrawSrm、SimulateInfo、AdminCancelOrders和旧版Initialize/PreInitialize现在会回滚。使用Initialize2进行池创建;没有 crank 可调用。 - Token-2022 mint。 不支持。AMM v4 池不能针对 Token-2022 mint 创建;任何 Token-2022 交易对应该在 CPMM 或 CLMM 上。
后续步骤
products/amm-v4/instructions— 这些示例背后的指令级接口。user-flows/migrate-amm-v4-to-cpmm— 如果你是考虑迁移的 LP。integration-guides/priority-fee-tuning— 重型 AMM v4 交换的优先费用调整。

