Skip to main content
本页内容由 AI 自动翻译,所有内容以英文版本为准。查看英文版 →
版本说明。 所有示例针对 Solana mainnet-beta 上的 @raydium-io/raydium-sdk-v2@0.2.64-alpha,已于 2026-09-09 验证 —— 下面每一个构建器名称、参数名称和参数类型都对照该版本的源码以及 raydium-sdk-V2-demo/src/amm 做过核对。程序 ID:675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8(见 reference/program-addresses)。 大多数首次集成都会踩的两个坑:computeAmountOut 的 slippage 是普通的数字(0.005 = 0.5%),不是 Percent;并且 liquidity.swap 要求 inputMint 为 base58 字符串。
版本说明。 所有示例针对 @raydium-io/raydium-sdk-v2@0.2.64-alpha,在 Solana mainnet-beta 上验证,时间为 2026-04。程序 ID:675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8(参见 reference/program-addresses)。
本文不涉及新池创建。 Raydium UI 不再提供 AMM v4 池创建功能——新交易对默认使用 CPMM。AMM v4 程序本身仍然接受链上的 Initialize2;只是这不再是推荐的方式。下面的示例涵盖每个集成者仍需的实时池操作:交换、存入、提取。

设置

按 ID 获取池

poolKeys 是指令构建器使用的结构体。它按程序期望的顺序包含每一个 AMM v4 账户,外加当前程序仍按位置接受但不再读取的旧版市场字段。

交换(基础输入)

SDK 通过 V2 入口点路由 AMM v4 交换,这些入口点不包含 OpenBook 账户。(在 2026-07 升级后,市场账户即使在旧版 v1 路径上也不再被验证。)

交换(基础输出)

添加流动性

fixedSide: "a" 告诉 SDK 你提供了精确的 amountInA,而 amountInB 应该最多为 maxAnotherAmount。按比例的数学直接基于金库余额减去累积的 PnL 运行 —— 不再有需要先结算的挂单簿部分。

移除流动性

滑点最小值可防止池状态在你的预报价和交易确认之间发生变化。

计算单位 / 优先费用调整

自从移除 OpenBook 之后,AMM v4 交换不再验证任何市场状态,因此 V1 的 SwapBaseIn 明显比过去便宜 —— 而 SwapBaseInV2(8 个账户,没有市场占位符)还要更便宜。请测量你自己的路径,而不要按历史数字做预算,并且始终传递明确的计算单位限制:
如果你省略 computeBudgetConfig,SDK 可能仍会使用自己的默认值;检查返回的 transaction 以确认。参见 integration-guides/priority-fee-tuning。

直接 Rust CPI

如果你必须从自己的 Anchor 程序 CPI 到 AMM v4,你需要逐字模拟 SwapBaseIn 的账户列表。最小示例:
AMM v4 不提供用于 CPI 的 Anchor crate。上面的示例使用手动构造的 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 上。

后续步骤

来源: