> ## Documentation Index
> Fetch the complete documentation index at: https://docs.orbitflare.com/llms.txt
> Use this file to discover all available pages before exploring further.

# OrbitFlare Jetstream v2

> gRPC-стриминг нового поколения для Solana — обогащение, события слотов и динамические фильтры

<Success>
  Jetstream v2 — это следующее поколение потока транзакций OrbitFlare: тот же поток с низкой
  задержкой, но с **опциональным обогащением каждой транзакции**, **событиями жизненного цикла
  слотов** и **динамическими фильтрами**, которые можно менять без переподключения.
</Success>

## Обзор

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](/ru/data-streaming/jetstream-v2-vs-v1).

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

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

## Подключение

1. Выберите [эндпоинт региона](/ru/data-streaming/jetstream-v2-reference#available-endpoints),
   ближайший к вашей инфраструктуре (те же хосты, что и у v1).
2. Сгенерируйте клиент из protobuf-определения `jetstream.v2` — см.
   [Генерация кода](/ru/data-streaming/jetstream-v2-reference#code-generation) в справочнике.
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` в фильтре.

<Note>
  Обогащение действует **на всю подписку**: если хотя бы один из ваших активных фильтров устанавливает
  `include_enrichment`, каждая транзакция, которую получает сессия, обогащается. Включайте его для
  подписки всякий раз, когда вам нужны дополнительные поля — это **не добавляет задержки** потоку;
  единственное отличие — умеренно больший размер сообщения.
</Note>

## События слотов

Откройте `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` для обнаружения зависшего соединения.

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

<CardGroup cols={3}>
  <Card title="Что нового в v2" icon="code-compare" href="/ru/data-streaming/jetstream-v2-vs-v1">
    Полное сравнение v1 и v2 и то, что даёт каждая возможность.
  </Card>

  <Card title="Справочник протокола v2" icon="book" href="/ru/data-streaming/jetstream-v2-reference">
    Полная спецификация Protocol Buffer для v2, эндпоинты и генерация кода.
  </Card>

  <Card title="Jetstream (v1)" icon="bolt" href="/ru/data-streaming/jetstream">
    Обзор v1, примеры клиентов и руководство по фильтрации.
  </Card>

  <Card title="Yellowstone gRPC" icon="wave-pulse" href="/ru/data-streaming/yellowstone">
    Потоковая передача на основе Geyser с полной точностью, внутренними инструкциями и полными
    метаданными.
  </Card>
</CardGroup>

## Поддержка

По вопросам технической поддержки или о Jetstream v2 обратитесь в нашу службу поддержки или
присоединяйтесь к нашему [сообществу в Discord](https://discord.gg/orbitflare).
