跳转到主要内容
本页内容由 AI 自动翻译,所有内容以英文版本为准。查看英文版 →

版本信息

  • SDK: @raydium-io/raydium-sdk-v2@0.2.42-alpha
  • 网络: mainnet-beta
  • Router 程序 ID: routeUGWgWzqBWFcrCfv8tritsqukccJPu3q5GPP3xS
  • 验证: 2026 年 4 月

示例 1:SDK 驱动的路由

源代码:src/trade/routeSwap.ts Raydium SDK 抽象了路由构建逻辑。使用 SDK 的交易函数来组合多跳路由,并通过路由器自动执行。

设置

构建多跳交换

@raydium-io/raydium-sdk-v2 中,路由通过 raydium.tradeV2 公开。端到端流程——获取池数据、计算路由、按输出排序和构建交换交易——如下所示;这与 raydium-sdk-V2-demo/src/trade/routeSwap.ts 中的规范示例相符。

预期行为

SDK 处理以下事项:
  • 跨 AMM v4、CPMM、CLMM 和 Stable AMM 的路由发现。
  • 账户衍生(池状态、金库、观察账户、ATA 预创建)。
  • 当路由是多跳时为路由器程序(Router)进行指令打包,或在单个池已给出最佳价格时进行直接池交换。
  • 通过 getAllRouteComputeAmountOut 上的 slippage 参数实施滑点保护。
raydium.tradeV2.swap 可能返回多个 transaction——第一个通常初始化中间 ATA,第二个执行交换本身。始终向 execute() 传递 sequentially: true,以便它们按顺序确认。

示例 2:原始指令构建(Rust 类伪代码)

如果你需要更好的控制或正在构建一个 CPI 到路由器的程序,请手动构建指令。下面的示例使用标签 8(SwapBaseIn——推荐的当前变体——并通过用户拥有的 ATA 进行路由。

场景:USDC → SOL (CPMM) → mSOL (CPMM)

步骤 1:衍生用户的 ATA

步骤 2:为每个跳点收集账户

跳点 1 是 CPMM 上的 USDC/SOL。跳点 2 是 CPMM 上的 SOL/mSOL。

步骤 3:构建指令

步骤 4:发送交易


示例 3:错误处理

常见错误及其恢复方式:

ExceededSlippage

输出小于 minimum_amount_out。使用更高的滑点容限重试或重新报价路由。

SqrtPriceX64 (CLMM)

CLMM 跳点的价格偏离了 limit_prices 边界。更新边界并重试。

InvalidOwner

中间或输出 ATA 不由调用者拥有。路由器验证每个槽上的所有权;确保你传递的每个 ATA 都从用户的钱包衍生而来(不是从任何其他权限)。

提示和最佳实践

预创建中间 ATA

在第一次通过新中间代币进行路由之前,创建用户的 ATA,以便路由不会验证失败:
对于 wSOL,优先选择 CreateSyncNative(标签 5)——它创建 ATA、转移 SOL 并在一条指令中同步。

执行前引用报价

在构建指令之前,始终查询池并计算预期输出:

使用较新的指令变体(8–9)

标签 8 和 9(SwapBaseInSwapBaseOut)对 limit_prices 更宽容。如果不需要 CLMM 价格验证,优先选择它们而不是旧版变体。

后续阅读

源代码: