跳转到主要内容
本页内容由 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 账户。

交换(基础输入)

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

交换(基础输出)

添加流动性

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 的账户列表。最小示例:
AMM v4 不提供用于 CPI 的 Anchor crate。上面的示例使用手动构造的 Instruction
上面的 CPI 示例使用旧版 v1 SwapBaseIn 布局(标签 9,17 个账户)来读取/重现现有交易。自 2026-07 升级以来,市场账户被接受但被忽略。对于新代码,优先使用 SwapBaseInV2 / SwapBaseOutV2(标签 16 / 17),它们完全删除了市场账户(和 amm_open_orders)——仅传递 8 个账户:token_programammamm_authority、两个池保险库、两个用户代币账户和 user_owner

常见陷阱

  • v1 交换上的账户数量错误。 旧版 SwapBaseIn / SwapBaseOut 仍然需要完整的 17 个账户(或 18 个账户)列表——不匹配的数量会以 WrongAccountsNumber 回滚。市场账户的内容不再被验证,但你仍然必须占用它们的槽位。优先使用 V2 入口点以避免这种情况。
  • 读取原始保险库余额。 储备现在仅限于保险库;减去应计 PnL(need_take_pnl_*)。SDK 报价或 api-v3.raydium.io/pools/info/ids 会为你处理这个问题。
  • 调用已删除的指令。 MonitorStepMigrateToOpenBookWithdrawSrmSimulateInfoAdminCancelOrders 和旧版 Initialize / PreInitialize 现在会回滚。使用 Initialize2 进行池创建;没有 crank 可调用。
  • Token-2022 mint。 不支持。AMM v4 池不能针对 Token-2022 mint 创建;任何 Token-2022 交易对应该在 CPMM 或 CLMM 上。

后续步骤

来源: