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

Обзор

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

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

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

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

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

Подключение

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

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

SubscribeTransactions — это двунаправленный поток: вы управляете своей подпиской через то же соединение, по которому получаете данные:
  1. Откройте поток и отправьте запрос AddFilters, содержащий один или несколько фильтров. Каждому фильтру нужен хотя бы один из account_include / account_exclude / account_required. (Пустые фильтры, совпадающие со всем, отклоняются.) account_required работает по принципу любой-из — транзакция совпадает, если она ссылается хотя бы на один из перечисленных аккаунтов (так же, как account_include, и так же, как в v1), а не на все из них.
  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 и v2

v2 — рекомендуемый протокол для новых интеграций: именно здесь находятся обогащение, события слотов и динамическая фильтрация. v1 остаётся доступным и поддерживаемым; если у вас есть существующий v1-клиент, принудительной миграции пока нет. Оба сервиса работают бок о бок на одних и тех же эндпоинтах.

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

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

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

Что нового в v2

Полное сравнение v1 и v2 и то, что даёт каждая возможность.

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

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

Jetstream (v1)

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

Yellowstone gRPC

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

Поддержка

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