概述
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。
Metis 官方文档
所有 Metis 端点、参数和响应模式的完整 API 参考。
Metis Binary(GitHub)
Jupiter 出品的可自托管 Metis 二进制文件,用于在自有基础设施上运行路由引擎。
Jito Bundle 模拟
在你的专用节点上提交前模拟和验证 Jito MEV bundle。
专用节点
部署隔离的无限 RPS Solana 基础设施,包含 Metis Swap API 访问权限。