Skip to main content

Доступные эндпоинты

Jetstream доступен во всех регионах OrbitFlare. Подключитесь к ближайшему к вашей инфраструктуре региону для минимальной задержки.
Jetstream использует обычный http:// (не https://) для gRPC-соединений. gRPC согласовывает собственную безопасность транспорта через HTTP/2. Используйте https:// только если ваш выделенный узел явно этого требует.

Аутентификация

Укажите ваш API-ключ в gRPC-заголовке метаданных x-token или используйте аутентификацию по белому списку IP. Подробнее см. в разделе Аутентификация.

Спецификация Protocol Buffer

Этот документ описывает спецификацию Protocol Buffer (protobuf), используемую OrbitFlare Jetstream. Полную спецификацию можно найти в нашем репозитории на GitHub — скачайте там jetstream_v2.proto, чтобы сгенерировать ваш клиент, или используйте определение, воспроизведённое ниже. Пакет protobuf называется jetstream.v2.

Определение сервиса

Сообщения запросов

SubscribeTransactions — это двунаправленный поток. Клиент отправляет последовательность сообщений запросов — каждое несёт ровно одну полезную нагрузку — чтобы управлять своей подпиской, пока поток открыт.

SubscribeTransactionsRequest

Добавление фильтров

Фильтры добавляются динамически, пока поток открыт. Каждый фильтр несёт выбранный клиентом filter_id, который возвращается в каждой совпавшей транзакции и в подтверждении валидации.
Фильтр должен указывать хотя бы один из account_include / account_exclude / account_required. Пустые (совпадающие со всем) фильтры отклоняются — см. FilterResult.

Удаление фильтров

Сообщения ответов

SubscribeTransactionsResponse

Каждое сообщение в потоке несёт серверную временную метку и монотонно возрастающий номер sequence (на поток), чтобы клиенты могли обнаруживать пропуски. Устанавливается ровно одна полезная нагрузка.

Валидация фильтров

После каждого AddFilters / RemoveFilters сервер возвращает один FilterResult на каждый фильтр, подтверждая принятие или объясняя отклонение.

Heartbeat

Отфильтрованная транзакция

Каждая совпавшая транзакция перечисляет значения filter_id, с которыми она совпала, за которыми следует сама транзакция.

Общие типы

Версии транзакций (SIMD-0385)

В Solana три формата транзакций: legacy, v0 и v1 (SIMD-0385). Поле config (23) и поле priority_fee_lamports (24) были добавлены для транзакций v1 и являются аддитивными — клиент, сгенерированный из более старой копии этого определения, пропускает их как неизвестные поля и декодирует все остальные поля в обычном режиме.
«Transaction v1» — это не «Jetstream v1». Transaction v1 — это формат транзакций Solana (SIMD-0385), который полностью поддерживает текущий протокол Jetstream. «Jetstream v1» относится к отдельному, теперь устаревшему протоколу Jetstream. Текущий Jetstream — это тот, который несёт транзакции v1.
Определяйте версию по двум полям. Сначала проверяйте config, потому что versioned истинно и для v0, и для v1:
Ранжирование по комиссии: используйте priority_fee_lamports (поле 24), а не compute_unit_price (поле 17). Поле 17 — это микролампорты за единицу вычислений, считываемые из инструкции SetComputeUnitPrice — у транзакции v1 нет такой инструкции, поэтому поле 17 отсутствует для каждой транзакции v1, и сортировка только по нему ставит весь трафик v1 в конец. Поле 24 — это общее количество лампортов, и оно заполнено для всех трёх версий (оба поля 23 и 24 выдаются только при обогащении для производного значения; сам config всегда отправляется для v1).

Потоковая передача слотов

SubscribeSlots — это серверный поток событий жизненного цикла слотов. Он не принимает параметров — откройте поток и получайте события по мере продвижения слотов.

Нестриминговые методы

Использование протокола

Типичный клиент:
  1. Сгенерируйте клиентский код из определения jetstream.v2 выше.
  2. Откройте двунаправленный поток SubscribeTransactions и аутентифицируйтесь (заголовок x-token или белый список IP).
  3. Отправьте запрос AddFilters с одним или несколькими элементами TxFilter, каждый с уникальным filter_id.
  4. Прочитайте подтверждения FilterResult, затем поток сообщений FilteredTransaction.
  5. Добавляйте или удаляйте фильтры в любой момент без повторного открытия потока.
  6. Отслеживайте sequence для обнаружения пропусков и рассматривайте закрытие соединения как сигнал к переподключению.
  7. При необходимости откройте SubscribeSlots (отдельный поток) для событий жизненного цикла слотов.

Генерация кода

Для TypeScript/JavaScript:
Для Rust:

Лучшие практики

  1. Фильтрация
    • Всегда задавайте хотя бы одно ограничение по аккаунту; пустые фильтры отклоняются.
    • Используйте стабильный, уникальный filter_id для каждого фильтра, чтобы вы могли сопоставлять совпадения и удалять фильтры позже.
  2. Обогащение
    • Держите include_enrichment выключенным, если вам не нужны дополнительные поля — экономный вывод меньше. Его включение не добавляет задержки; единственная цена — умеренно больший размер сообщения.
    • Обогащение действует на всю подписку: его включение на любом одном фильтре обогащает каждую транзакцию, которую получает сессия.
  3. Последовательность и переподключение
    • Отслеживайте номер sequence для обнаружения потерянных сообщений.
    • Реализуйте автоматическое переподключение; при переподключении повторно отправляйте ваш AddFilters.
  4. Живость
    • Используйте Heartbeat и Ping/Pong, чтобы подтвердить, что поток исправен, и измерять задержку.

Смотрите также

Обзор Jetstream

Модель потоковой передачи, обогащение, события слотов и начало работы.

Справочник Jetstream v1 (устаревший)

Устаревшая спецификация Protocol Buffer для v1.

Поддержка

По техническим вопросам о протоколе или деталях реализации присоединяйтесь к нашему сообществу в Discord.