Skip to main content

Обзор

OrbitFlare Jetstream — высокопроизводительный gRPC-сервис для потоковой передачи транзакций Solana в реальном времени. Он доставляет поток с минимальной задержкой через богатый и гибкий протокол, позволяя вам изменять подписку на лету и получать предварительно вычисленные метаданные транзакций, чтобы ваш клиент выполнял меньше работы.

Ключевые особенности

  • Динамические фильтры — добавляйте и удаляйте фильтры, пока поток открыт, каждый с выбранным клиентом filter_id, который возвращается в каждой совпавшей транзакции. Переподключение не требуется, и каждое изменение подтверждается через FilterResult.
  • Опциональное обогащение — запрашивайте fee_payer, writable_accounts, program_ids, compute_unit_price (цена вычислительной единицы, микро-лампорты/CU, а не общая комиссия), compute_limit, tx_size и разрешённые адреса из таблиц поиска адресов прямо в каждой транзакции, вместо того чтобы выводить их на стороне клиента.
  • Потоковая передача жизненного цикла слотов — отдельный поток SubscribeSlots выдаёт события ALIVE / COMPLETE / DEAD по каждому слоту, с текущим лидером и родительским слотом.
  • Встроенный контроль живости — каждое сообщение несёт монотонный номер sequence для обнаружения пропусков, а сервер отправляет Heartbeat при простое потока транзакций.
  • Обогащение по запросу — транзакция по умолчанию представляет собой одно плоское сообщение с основными полями; включайте обогащение для каждой подписки, чтобы добавить дополнительные поля, когда они вам нужны.

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

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

Подключение

  1. Выберите эндпоинт региона, ближайший к вашей инфраструктуре.
  2. Сгенерируйте клиент из protobuf-определения jetstream.v2 — см. Генерация кода в справочнике.
  3. Аутентифицируйтесь с помощью вашего API-ключа x-token (или с IP из белого списка) и откройте поток.

Как работает потоковая передача

SubscribeTransactions — это двунаправленный поток: вы управляете своей подпиской через то же соединение, по которому получаете данные:
  1. Откройте поток и отправьте запрос AddFilters, содержащий один или несколько фильтров. Каждому фильтру нужен хотя бы один из account_include / account_exclude / account_required. (Пустые фильтры, совпадающие со всем, отклоняются.) account_required работает по принципу любой-из — транзакция совпадает, если она ссылается хотя бы на один из перечисленных аккаунтов, а не на все из них.
  2. Сервер отвечает FilterResult по каждому фильтру (accepted или rejection_reason).
  3. Совпавшие транзакции приходят как сообщения FilteredTransaction, каждое из которых перечисляет значения filter_id, с которыми оно совпало.
  4. Отправляйте AddFilters / RemoveFilters в любой момент, чтобы изменить то, что вы получаете, без переподключения.
  5. При простое потока транзакций сервер отправляет сообщения Heartbeat; используйте их (а также Ping/Pong) для подтверждения живости.
  6. Отслеживайте номер sequence, чтобы обнаружить любой пропуск, и переподключайтесь (повторно отправляя ваши фильтры), если поток закрывается.
Чтобы получать обогащённые транзакции, установите include_enrichment: true в фильтре.
Обогащение действует на всю подписку: если хотя бы один из ваших активных фильтров устанавливает include_enrichment, каждая транзакция, которую получает сессия, обогащается. Включайте его для подписки всякий раз, когда вам нужны дополнительные поля — это не добавляет задержки потоку; единственное отличие — умеренно больший размер сообщения.

События слотов

Откройте SubscribeSlots (отдельный серверный потоковый RPC, без параметров), чтобы получать SlotEvent для каждого перехода слота:
  • ALIVE — получен первый шред слота.
  • COMPLETE — получен последний шред слота.
  • DEAD — слот был пропущен или вытеснен более поздними слотами без завершения.
Каждое событие включает current_leader (32-байтовый pubkey, когда текущий лидер доступен) и parent_slot.

Миграция с v1

Более ранний протокол Jetstream v1 устарел, но по-прежнему доступен для существующих интеграций. Если вы используете v1, оба сервиса работают бок о бок на одних и тех же эндпоинтах, поэтому миграция — это изменение протокола на стороне клиента без сетевых изменений. См. Миграцию с v1 для пошагового сопоставления полей или обзор устаревшего v1.

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

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

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

Миграция с v1

Пошаговое сопоставление полей v1 и Jetstream и то, что даёт каждая возможность.

Справочник протокола

Полная спецификация Protocol Buffer, эндпоинты и генерация кода.

Jetstream v1 (устаревший)

Обзор устаревшего v1, примеры клиентов и руководство по фильтрации.

Yellowstone gRPC

Потоковая передача на основе Geyser с полной точностью, внутренними инструкциями и полными метаданными.

Поддержка

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