Установка
Сборка клиента
ORBITFLARE_JETSTREAM_URL. Все методы билдера идентичны gRPC-клиенту - те же значения по умолчанию и поведение (Retry, Timeout, Keepalive, PingInterval, MaxMissedPongs, ChannelCapacity, Logger).
Построение подписки
JetStream поддерживает фильтры транзакций (без слотов, блоков и commitment - это специфично для Yellowstone). КаждыйTransactionFilter предоставляет AccountInclude, AccountExclude и AccountRequired.
Чтение потока
Subscribe возвращает *jetstream.Stream. Вызовите Next(ctx):
Полный пример
Поток, отслеживающий свопы Raydium AMM и печатающий слот каждой транзакции.JetStream v2
JetStream v2 (github.com/orbitflare/orbitflare-sdk-go/jetstream/v2) работает на тех же эндпоинтах и аутентификации, что и v1, и полностью аддитивен: v1 продолжает работать без изменений. Что добавляет v2:
- Фильтры, управляемые во время работы - добавление и удаление фильтров на активном потоке без переподключения.
- Порядковые номера у каждого сообщения - каждый ответ несёт монотонный
Sequence, что позволяет обнаруживать пропущенные сообщения. - Опциональное обогащение - запрос плательщика комиссии, id программ, цены compute unit, лимита вычислений, разрешённых адресов из таблиц адресов и др. на каждую транзакцию.
- События жизненного цикла слота - отдельный серверный поток событий слота alive/complete/dead.
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) - унарные вызовы с той же отказоустойчивостью, что и у потоков.