Обзор
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 по умолчанию представляет собой одно плоское сообщение с основными полями; включайте обогащение для каждой подписки, чтобы добавить дополнительные поля, когда они вам нужны.
Аутентификация
Аутентификация такая же, как в v1: укажите ваш API-ключ в gRPC-заголовке метаданныхx-token или
используйте аутентификацию по белому списку IP. Подробнее о настройке см. в разделе
Аутентификация.
Подключение
- Выберите эндпоинт региона, ближайший к вашей инфраструктуре (те же хосты, что и у v1).
- Сгенерируйте клиент из protobuf-определения
jetstream.v2— см. Генерация кода в справочнике. - Аутентифицируйтесь с помощью вашего API-ключа
x-token(или с IP из белого списка) и откройте поток.
Как работает потоковая передача
SubscribeTransactions — это двунаправленный поток: вы управляете своей подпиской через то же
соединение, по которому получаете данные:
- Откройте поток и отправьте запрос
AddFilters, содержащий один или несколько фильтров. Каждому фильтру нужен хотя бы один изaccount_include/account_exclude/account_required. (Пустые фильтры, совпадающие со всем, отклоняются.)account_requiredработает по принципу любой-из — транзакция совпадает, если она ссылается хотя бы на один из перечисленных аккаунтов (так же, какaccount_include, и так же, как в v1), а не на все из них. - Сервер отвечает
FilterResultпо каждому фильтру (acceptedилиrejection_reason). - Совпавшие транзакции приходят как сообщения
FilteredTransaction, каждое из которых перечисляет значенияfilter_id, с которыми оно совпало. - Отправляйте
AddFilters/RemoveFiltersв любой момент, чтобы изменить то, что вы получаете, без переподключения. - При простое потока транзакций сервер отправляет сообщения
Heartbeat; используйте их (а такжеPing/Pong) для подтверждения живости. - Отслеживайте номер
sequence, чтобы обнаружить любой пропуск, и переподключайтесь (повторно отправляя ваши фильтры), если поток закрывается.
include_enrichment: true в фильтре.
Обогащение действует на всю подписку: если хотя бы один из ваших активных фильтров устанавливает
include_enrichment, каждая транзакция, которую получает сессия, обогащается. Включайте его для
подписки всякий раз, когда вам нужны дополнительные поля — это не добавляет задержки потоку;
единственное отличие — умеренно больший размер сообщения.События слотов
ОткройтеSubscribeSlots (отдельный серверный потоковый RPC, без параметров), чтобы получать
SlotEvent для каждого перехода слота:
ALIVE— получен первый шред слота.COMPLETE— получен последний шред слота.DEAD— слот был пропущен или вытеснен более поздними слотами без завершения.
current_leader (32-байтовый pubkey, когда текущий лидер доступен) и
parent_slot.
Выбор между v1 и v2
v2 — рекомендуемый протокол для новых интеграций: именно здесь находятся обогащение, события слотов и динамическая фильтрация. v1 остаётся доступным и поддерживаемым; если у вас есть существующий v1-клиент, принудительной миграции пока нет. Оба сервиса работают бок о бок на одних и тех же эндпоинтах.Лучшие практики
- Фильтрация — всегда задавайте хотя бы одно ограничение по аккаунту и используйте стабильный
уникальный
filter_idдля каждого фильтра, чтобы вы могли сопоставлять совпадения и удалять фильтры позже. - Обогащение — держите его выключенным, если вам не нужны дополнительные поля; оно применяется ко всей подписке.
- Переподключение — отслеживайте
sequenceна предмет пропусков и переподключайтесь автоматически, повторно отправляя ваши фильтры. - Живость — полагайтесь на
Heartbeat/Pingдля обнаружения зависшего соединения.
Смотрите также
Что нового в v2
Полное сравнение v1 и v2 и то, что даёт каждая возможность.
Справочник протокола v2
Полная спецификация Protocol Buffer для v2, эндпоинты и генерация кода.
Jetstream (v1)
Обзор v1, примеры клиентов и руководство по фильтрации.
Yellowstone gRPC
Потоковая передача на основе Geyser с полной точностью, внутренними инструкциями и полными
метаданными.