Обзор
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. Подробнее о настройке см. в разделе Аутентификация.
Подключение
- Выберите эндпоинт региона, ближайший к вашей инфраструктуре.
- Сгенерируйте клиент из protobuf-определения
jetstream.v2— см. Генерация кода в справочнике. - Аутентифицируйтесь с помощью вашего API-ключа
x-token(или с IP из белого списка) и откройте поток.
Как работает потоковая передача
SubscribeTransactions — это двунаправленный поток: вы управляете своей подпиской через то же
соединение, по которому получаете данные:
- Откройте поток и отправьте запрос
AddFilters, содержащий один или несколько фильтров. Каждому фильтру нужен хотя бы один изaccount_include/account_exclude/account_required. (Пустые фильтры, совпадающие со всем, отклоняются.)account_requiredработает по принципу любой-из — транзакция совпадает, если она ссылается хотя бы на один из перечисленных аккаунтов, а не на все из них. - Сервер отвечает
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
Более ранний протокол Jetstream v1 устарел, но по-прежнему доступен для существующих интеграций. Если вы используете v1, оба сервиса работают бок о бок на одних и тех же эндпоинтах, поэтому миграция — это изменение протокола на стороне клиента без сетевых изменений. См. Миграцию с v1 для пошагового сопоставления полей или обзор устаревшего v1.Лучшие практики
- Фильтрация — всегда задавайте хотя бы одно ограничение по аккаунту и используйте стабильный
уникальный
filter_idдля каждого фильтра, чтобы вы могли сопоставлять совпадения и удалять фильтры позже. - Обогащение — держите его выключенным, если вам не нужны дополнительные поля; оно применяется ко всей подписке.
- Переподключение — отслеживайте
sequenceна предмет пропусков и переподключайтесь автоматически, повторно отправляя ваши фильтры. - Живость — полагайтесь на
Heartbeat/Pingдля обнаружения зависшего соединения.
Смотрите также
Миграция с v1
Пошаговое сопоставление полей v1 и Jetstream и то, что даёт каждая возможность.
Справочник протокола
Полная спецификация Protocol Buffer, эндпоинты и генерация кода.
Jetstream v1 (устаревший)
Обзор устаревшего v1, примеры клиентов и руководство по фильтрации.
Yellowstone gRPC
Потоковая передача на основе Geyser с полной точностью, внутренними инструкциями и полными
метаданными.