Перейти к основному содержанию

Обзор

Metis — это низкоуровневый движок маршрутизации свопов Jupiter. Он предоставляет детальный контроль над каждым аспектом своп-транзакции: выбор маршрута, компоновка инструкций, комиссии за приоритет, лимиты вычислительных единиц, slippage и трансляция. В отличие от Jupiter Ultra, Metis требует управлять этим самостоятельно — но взамен даёт максимальную гибкость для интеграций, которым нужен CPI, пользовательские инструкции или специфическая стратегия трансляции транзакций. Используйте Metis, когда вам нужно:
  • CPI (Cross Program Invocation) с вашей собственной программой на блокчейне
  • Компоновка пользовательских инструкций вокруг свопа
  • Полный контроль над комиссиями за приоритет, вычислительными единицами и slippage
  • Собственный RPC или трансляция через Jito
Рассмотрите Ultra вместо Metis, если:
  • Вам нужно сквозное исполнение без управления 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.

Как это работает

1

Получить котировку

Вызовите GET /swap/v1/quote с входным минтом, выходным минтом, суммой и slippage, чтобы получить лучший маршрут от движка маршрутизации Metis.
2

Создать своп-транзакцию

Отправьте ответ с котировкой на POST /swap/v1/swap. API возвращает сериализованную транзакцию, готовую к подписанию, с опциональной оценкой комиссии за приоритет, динамическими лимитами вычислительных единиц и динамическим slippage.
3

Подписать и отправить

Десериализуйте base64-транзакцию, подпишите её вашим кошельком и транслируйте через connection.sendRawTransaction() или через Jito.

Шаг 1 — Получить котировку

Эндпоинт: GET /swap/v1/quote

Обязательные параметры

Пример — Котировка 1 SOL в USDC

Пример ответа

outAmount — лучший возможный результат на момент котировки. slippageBps не влияет на это значение — он управляет otherAmountThreshold, то есть минимумом, который вы готовы принять.

Дополнительные параметры котировки

Установите значение true, чтобы маршрутизация проходила только через высоколиквидные промежуточные токены. Это снижает сбои маршрутизации из-за неликвидных путей и повышает стабильность маршрута с незначительной потенциальной потерей в цене.
Установите значение true, чтобы ограничить маршрутизацию одним рынком (без мультихопа). Возвращает пустую котировку, если прямого маршрута нет. Может давать невыгодные цены — используйте с осторожностью.
Ограничивает общее количество аккаунтов во внутренних инструкциях свопа. Полезно, когда нужно оставить место для собственных инструкций. Рекомендуемый минимум — 64. Слишком низкое значение исключает DEX, требующие большего числа аккаунтов (например, Meteora DLMM требует до 47).
Добавьте комиссию к свопу, которая зачисляется на ваш feeAccount. Комбинируйте с feeAccount в запросе свопа.

Шаг 2 — Создать своп-транзакцию

Эндпоинт: POST /swap/v1/swap Передайте ответ с котировкой из шага 1 вместе с публичным ключом пользователя. API возвращает сериализованную base64-транзакцию, готовую к подписанию и отправке.

Создание транзакции с оптимизацией подтверждения

Пример ответа

Уровни комиссий за приоритет

Установите maxLamports как предохранительный ограничитель для предотвращения переплаты во время скачков комиссий:

Использование инструкций свопа вместо транзакции

Если вам нужно скомпоновать своп с вашими собственными инструкциями, используйте /swap/v1/swap-instructions вместо /swap/v1/swap. Принимает те же параметры, но возвращает отдельные объекты инструкций, а не сериализованную транзакцию:

Шаг 3 — Отправить своп-транзакцию

Десериализация, подпись и сериализация

Поле swapTransaction в ответе закодировано в base64. Десериализуйте его в VersionedTransaction, подпишите, затем конвертируйте обратно в бинарный формат для отправки:

Отправка транзакции

Подтверждение транзакции

Трансляция через Jito

Чтобы использовать Jito для более быстрого включения и защиты от MEV, замените prioritizationFeeLamports чаевыми Jito и отправьте на эндпоинт Jito RPC:
Чаевые Jito должны быть отправлены на эндпоинт Jito RPC, чтобы вступить в силу. Отправка на стандартный RPC не будет маршрутизирована через блок-движок Jito.

Расширенные возможности

Включите dynamicSlippage: true в запросе свопа. Бэкенд симулирует транзакцию и применяет эвристику на основе категории токена для оценки подходящего значения slippage.Примечание: Разработка Dynamic Slippage прекращена. Для использования в продакшене Jupiter рекомендует Ultra Swap API, включающий Real-Time Slippage Estimator (RTSE) — значительно более точную и реактивную систему.
Начиная с января 2025 года, Jupiter Swap через CPI является рекомендуемым методом интеграции с программами на блокчейне. Добавьте крейт jupiter-cpi в вашу программу:
Затем вызовите маршрут общих аккаунтов из обработчика инструкции. Полный пример реализации смотрите в примере Jupiter CPI.
Flash Fill был более ранним обходным решением для ограничений размера аккаунтов CPI с использованием Versioned Transactions и Address Lookup Tables. Больше не рекомендуется, поскольку ослабление ограничений CPI активно на мейннете Solana. Смотрите sol-swap-flash-fill для исторической справки.
При использовании maxAccounts, вот приблизительное количество аккаунтов для каждого DEX (минимум применяется при наличии ALT, максимум — без них):Слишком низкое значение 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.