概述
Metis 是 Jupiter 的低级别 Swap 路由引擎。它对 Swap 交易的每个环节都提供精细控制:路由选择、指令组合、优先费用、计算单元限制、滑点和广播方式。与 Jupiter Ultra 不同,Metis 需要你自行处理这些内容——但作为回报,你获得了对需要 CPI、自定义指令或特定交易广播策略的集成的最大灵活性。 适合使用 Metis 的场景:- 与你自己的链上程序进行 CPI(跨程序调用)
- 在 Swap 前后组合自定义指令
- 完全控制优先费用、计算单元和滑点
- 使用自定义 RPC 或 Jito 广播
- 无需管理滑点、费用或广播,只需端到端执行
- 需要实时滑点估算器(RTSE),仅通过 Ultra 提供
Metis Swap API 通过 OrbitFlare 专用节点的
/jup 路径前缀访问。如需使用 Jupiter 托管的 API,请使用 https://api.jup.ag/swap/v1/... 并携带你的 x-api-key。工作原理
第一步——获取报价
端点:GET /swap/v1/quote
必需参数
| 参数 | 说明 |
|---|---|
inputMint | 输入代币的 mint 地址(例如 SOL 为 So11111111111111111111111111111111111111112) |
outputMint | 输出代币的 mint 地址(例如 USDC 为 EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v) |
amount | 输入代币的原始整数数量(SOL 为 lamports,其他代币为最小单位) |
slippageBps | 最大滑点容忍度,单位为基点(例如 50 = 0.5%) |
示例——获取 1 SOL 兑换 USDC 的报价
示例响应
其他报价选项
restrictIntermediateTokens
restrictIntermediateTokens
设置为
true 可确保路由仅通过高流动性的中间代币。这能减少因流动性差的路径导致的路由失败,提高路由稳定性,但可能略微影响价格。onlyDirectRoutes
onlyDirectRoutes
设置为
true 可限制路由仅通过单个市场(无多跳)。如果不存在直接路由则不返回报价。可能导致不利价格,请谨慎使用。maxAccounts
maxAccounts
限制内部 Swap 指令中的账户总数。当你需要为自定义指令留出空间时很有用。推荐最小值为
64。设置过低会导致路由中移除需要更多账户的 DEX(例如 Meteora DLMM 最多需要 47 个账户)。platformFeeBps
platformFeeBps
向 Swap 添加费用,计入你的
feeAccount。需配合 Swap 请求中的 feeAccount 参数使用。第二步——构建 Swap 交易
端点:POST /swap/v1/swap
将第一步的报价响应与用户公钥一起传入。API 返回已序列化的 base64 交易,可直接签名并发送。
构建带交易上链优化的 Swap 交易
示例响应
优先费用级别
priorityLevel | 百分位数 | 适用场景 |
|---|---|---|
medium | 第 25 百分位 | 低拥堵、非时间敏感 |
high | 第 50 百分位 | 标准交易条件 |
veryHigh | 第 75 百分位 | 竞争激烈、MEV、时间敏感型 Swap |
maxLamports 作为安全上限以防止在费用飙升时多付:
使用 Swap Instructions 接口
如果你需要将 Swap 与自定义指令组合,可使用/swap/v1/swap-instructions 代替 /swap/v1/swap。它接受相同的参数,但返回单独的指令对象而非序列化交易:
第三步——发送 Swap 交易
反序列化、签名并序列化
响应中的swapTransaction 字段是 base64 编码的。将其反序列化为 VersionedTransaction,签名后再转为二进制格式发送:
发送交易
| 选项 | 说明 |
|---|---|
maxRetries | 放弃前的最大重试次数。如果省略,RPC 会一直重试到 blockhash 过期。 |
skipPreflight | 跳过提交前的签名验证和模拟。对速度敏感的 Swap 建议设置为 true。 |
确认交易
通过 Jito 广播
要使用 Jito 获得更快的上链速度和 MEV 保护,将prioritizationFeeLamports 替换为 Jito 小费并提交到 Jito RPC 端点:
高级功能
动态滑点
动态滑点
在 Swap 请求中启用
dynamicSlippage: true。后端会模拟交易,并根据代币类别应用启发式算法来估算合适的滑点值。注意:动态滑点的开发已停止。对于生产用途,Jupiter 建议使用包含实时滑点估算器(RTSE)的 Ultra Swap API——这是一个更准确、响应更快的系统。CPI(跨程序调用)
CPI(跨程序调用)
自 2025 年 1 月起,建议通过 CPI 进行链上程序集成。在你的程序中添加 然后从你的指令处理器调用共享账户路由。完整参考实现请参见 Jupiter CPI 示例。
jupiter-cpi crate:Flash Fill(旧版)
Flash Fill(旧版)
Flash Fill 是早期针对 CPI 账户大小限制的解决方案,使用版本化交易和地址查找表。自 Solana 主网部署 Loosen CPI 限制后,不再推荐使用。历史参考请见 sol-swap-flash-fill。
DEX 账户需求
DEX 账户需求
使用
将
maxAccounts 时,各 DEX 的估计账户数如下(有 ALT 时取最小值,无 ALT 时取最大值):| DEX | 最大账户数 | 最小账户数 |
|---|---|---|
| Meteora DLMM | 47 | 19 |
| Meteora | 45 | 18 |
| Raydium | 45 | 18 |
| Raydium CLMM | 45 | 19 |
| Moonshot | 37 | 15 |
| Raydium CPMM | 37 | 14 |
| Pumpfun AMM | 42 | 17 |
| Pumpfun Bonding Curve | 40 | 16 |
| Orca Whirlpool | 30 | 12 |
| Obric | 30 | 12 |
| Solfi | 22 | 9 |
| Sanctum | 80 | 80 |
| Sanctum Infinity | 80 | 80 |
maxAccounts 设置过低会静默地将 DEX 从路由中排除。请尽量保持较高值,仅在交易超过 1232 字节大小限制时才降低。要求与资源
通过 OrbitFlare 访问 Metis Swap API 仅适用于专用节点。API 可通过专用节点端点的/jup 路径访问,或直接使用 https://api.jup.ag/swap/v1/... 并携带 Jupiter API key。