Обзор
Metis — это низкоуровневый движок маршрутизации свопов Jupiter. Он предоставляет детальный контроль над каждым аспектом своп-транзакции: выбор маршрута, компоновка инструкций, комиссии за приоритет, лимиты вычислительных единиц, slippage и трансляция. В отличие от Jupiter Ultra, Metis требует управлять этим самостоятельно — но взамен даёт максимальную гибкость для интеграций, которым нужен CPI, пользовательские инструкции или специфическая стратегия трансляции транзакций. Используйте Metis, когда вам нужно:- CPI (Cross Program Invocation) с вашей собственной программой на блокчейне
- Компоновка пользовательских инструкций вокруг свопа
- Полный контроль над комиссиями за приоритет, вычислительными единицами и slippage
- Собственный RPC или трансляция через Jito
- Вам нужно сквозное исполнение без управления slippage, комиссиями или трансляцией
- Вам нужен Real-Time Slippage Estimator (RTSE), доступный только через Ultra
Доступ к Metis Swap API через OrbitFlare доступен на Dedicated Nodes через путь
/jup на эндпоинте вашего узла. Для размещённого Jupiter API используйте https://api.jup.ag/swap/v1/... с вашим x-api-key.Как это работает
Получить котировку
Вызовите
GET /swap/v1/quote с входным минтом, выходным минтом, суммой и slippage, чтобы получить лучший маршрут от движка маршрутизации Metis.Создать своп-транзакцию
Отправьте ответ с котировкой на
POST /swap/v1/swap. API возвращает сериализованную транзакцию, готовую к подписанию, с опциональной оценкой комиссии за приоритет, динамическими лимитами вычислительных единиц и динамическим slippage.Шаг 1 — Получить котировку
Эндпоинт:GET /swap/v1/quote
Обязательные параметры
| Параметр | Описание |
|---|---|
inputMint | Адрес минта входного токена (например, So11111111111111111111111111111111111111112 для SOL) |
outputMint | Адрес минта выходного токена (например, EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v для USDC) |
amount | Целочисленная сумма входных токенов до десятичного знака (lamports для SOL, атомарные единицы для остальных) |
slippageBps | Максимально допустимый slippage в basis points (например, 50 = 0,5%) |
Пример — Котировка 1 SOL в USDC
Пример ответа
Дополнительные параметры котировки
restrictIntermediateTokens
restrictIntermediateTokens
Установите значение
true, чтобы маршрутизация проходила только через высоколиквидные промежуточные токены. Это снижает сбои маршрутизации из-за неликвидных путей и повышает стабильность маршрута с незначительной потенциальной потерей в цене.onlyDirectRoutes
onlyDirectRoutes
Установите значение
true, чтобы ограничить маршрутизацию одним рынком (без мультихопа). Возвращает пустую котировку, если прямого маршрута нет. Может давать невыгодные цены — используйте с осторожностью.maxAccounts
maxAccounts
Ограничивает общее количество аккаунтов во внутренних инструкциях свопа. Полезно, когда нужно оставить место для собственных инструкций. Рекомендуемый минимум —
64. Слишком низкое значение исключает DEX, требующие большего числа аккаунтов (например, Meteora DLMM требует до 47).platformFeeBps
platformFeeBps
Добавьте комиссию к свопу, которая зачисляется на ваш
feeAccount. Комбинируйте с feeAccount в запросе свопа.Шаг 2 — Создать своп-транзакцию
Эндпоинт:POST /swap/v1/swap
Передайте ответ с котировкой из шага 1 вместе с публичным ключом пользователя. API возвращает сериализованную base64-транзакцию, готовую к подписанию и отправке.
Создание транзакции с оптимизацией подтверждения
Пример ответа
Уровни комиссий за приоритет
priorityLevel | Перцентиль | Случай использования |
|---|---|---|
medium | 25-й | Низкая нагрузка, не чувствительные ко времени операции |
high | 50-й | Стандартные торговые условия |
veryHigh | 75-й | Конкурентные условия, MEV, чувствительные ко времени свопы |
maxLamports как предохранительный ограничитель для предотвращения переплаты во время скачков комиссий:
Использование инструкций свопа вместо транзакции
Если вам нужно скомпоновать своп с вашими собственными инструкциями, используйте/swap/v1/swap-instructions вместо /swap/v1/swap. Принимает те же параметры, но возвращает отдельные объекты инструкций, а не сериализованную транзакцию:
Шаг 3 — Отправить своп-транзакцию
Десериализация, подпись и сериализация
ПолеswapTransaction в ответе закодировано в base64. Десериализуйте его в VersionedTransaction, подпишите, затем конвертируйте обратно в бинарный формат для отправки:
Отправка транзакции
| Параметр | Описание |
|---|---|
maxRetries | Максимальное количество повторных попыток перед отказом. Если не указан, RPC повторяет попытки до истечения срока действия blockhash. |
skipPreflight | Пропустить проверку подписи и симуляцию перед отправкой. Рекомендуется true для чувствительных ко времени свопов. |
Подтверждение транзакции
Трансляция через Jito
Чтобы использовать Jito для более быстрого включения и защиты от MEV, заменитеprioritizationFeeLamports чаевыми Jito и отправьте на эндпоинт Jito RPC:
Расширенные возможности
Динамический Slippage
Динамический Slippage
Включите
dynamicSlippage: true в запросе свопа. Бэкенд симулирует транзакцию и применяет эвристику на основе категории токена для оценки подходящего значения slippage.Примечание: Разработка Dynamic Slippage прекращена. Для использования в продакшене Jupiter рекомендует Ultra Swap API, включающий Real-Time Slippage Estimator (RTSE) — значительно более точную и реактивную систему.CPI (Cross Program Invocation)
CPI (Cross Program Invocation)
Начиная с января 2025 года, Jupiter Swap через CPI является рекомендуемым методом интеграции с программами на блокчейне. Добавьте крейт Затем вызовите маршрут общих аккаунтов из обработчика инструкции. Полный пример реализации смотрите в примере Jupiter CPI.
jupiter-cpi в вашу программу:Flash Fill (устаревший)
Flash Fill (устаревший)
Flash Fill был более ранним обходным решением для ограничений размера аккаунтов CPI с использованием Versioned Transactions и Address Lookup Tables. Больше не рекомендуется, поскольку ослабление ограничений CPI активно на мейннете Solana. Смотрите sol-swap-flash-fill для исторической справки.
Требования к аккаунтам DEX
Требования к аккаунтам DEX
При использовании
Слишком низкое значение
maxAccounts, вот приблизительное количество аккаунтов для каждого DEX (минимум применяется при наличии 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 байта.Требования и ресурсы
Доступ к Metis Swap API через OrbitFlare доступен только на Dedicated Nodes. API доступен через путь/jup на эндпоинте вашего выделенного узла или напрямую по адресу https://api.jup.ag/swap/v1/... с ключом Jupiter API.
Официальная документация Metis
Полный справочник API для всех эндпоинтов, параметров и схем ответов Metis.
Бинарный файл Metis (GitHub)
Саморазмещаемый бинарный файл Metis от Jupiter для запуска движка маршрутизации на вашей собственной инфраструктуре.
Симуляция Jito Bundle
Симулируйте и проверяйте MEV-бандлы Jito на вашем выделенном узле перед отправкой.
Dedicated Nodes
Разверните изолированную инфраструктуру Solana с неограниченным RPS и включённым доступом к Metis Swap API.