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

Установка

Сборка клиента

URL берётся из переменной окружения ORBITFLARE_JETSTREAM_URL. Все методы билдера идентичны gRPC-клиенту - те же значения по умолчанию и поведение (Retry, Timeout, Keepalive, PingInterval, MaxMissedPongs, ChannelCapacity, Logger).

Построение подписки

JetStream поддерживает фильтры транзакций (без слотов, блоков и commitment - это специфично для Yellowstone). Каждый TransactionFilter предоставляет AccountInclude, AccountExclude и AccountRequired.

Чтение потока

Subscribe возвращает *jetstream.Stream. Вызовите Next(ctx):
Закрытие, несколько потоков, переподключение и ping/pong работают точно так же, как у gRPC-клиента.

Полный пример

Поток, отслеживающий свопы Raydium AMM и печатающий слот каждой транзакции.

JetStream v2

JetStream v2 (github.com/orbitflare/orbitflare-sdk-go/jetstream/v2) работает на тех же эндпоинтах и аутентификации, что и v1, и полностью аддитивен: v1 продолжает работать без изменений. Что добавляет v2:
  • Фильтры, управляемые во время работы - добавление и удаление фильтров на активном потоке без переподключения.
  • Порядковые номера у каждого сообщения - каждый ответ несёт монотонный Sequence, что позволяет обнаруживать пропущенные сообщения.
  • Опциональное обогащение - запрос плательщика комиссии, id программ, цены compute unit, лимита вычислений, разрешённых адресов из таблиц адресов и др. на каждую транзакцию.
  • События жизненного цикла слота - отдельный серверный поток событий слота alive/complete/dead.
Клиент v2 находится в jetstream/v2. Билдер идентичен v1 (те же методы, значения по умолчанию, переменная окружения ORBITFLARE_JETSTREAM_URL и отказоустойчивость):

Построение типизированных фильтров

Каждый фильтр - это TransactionFilter с выбранным клиентом id (через .WithID()). Этот id возвращается на каждой совпавшей транзакции и в подтверждении валидации фильтра, чтобы вы могли сопоставлять совпадения и позже удалить фильтр.
Фильтр должен задавать хотя бы один из AccountInclude, AccountExclude или AccountRequired; пустые (совпадающие со всем) фильтры отклоняются. IncludeEnrichment необязателен (по умолчанию выключен) и применяется ко всей подписке: если хотя бы один активный фильтр его включает, каждая получаемая транзакция обогащается.

Подписка на транзакции

Управление фильтрами на активном потоке

Возьмите у потока хендл и добавляйте или удаляйте фильтры без переподключения. Удаление ссылается на id фильтра, заданный через .WithID().
stream.AddFilters(...) и stream.RemoveFilters(...) - сокращения для того же. Каждый возвращает ошибку, если поток закрыт.

События жизненного цикла слота

SubscribeSlots() - это отдельный серверный поток, он не принимает фильтров.

Проверки состояния

GetVersion(ctx) и Ping(ctx, count) - унарные вызовы с той же отказоустойчивостью, что и у потоков.
Полную спецификацию protobuf, формы сообщений, поля обогащения и статусы слотов см. в справочнике протокола JetStream v2.