Skip to content

Курсор и replay

Каждое событие несёт курсор. Сохраняйте последний обработанный курсор и передавайте его при повторной подписке после разрыва. Пропущенные события проигрываются до перехода подписки в live-поток.

Формат курсора

text
slot:transactionIndexInBlock:eventIndexInTransaction

Пример:

text
436312304:15:0

Три компонента однозначно идентифицируют одно событие. Клиенты всё равно должны считать полное значение непрозрачной строкой: сохраняйте и сравнивайте её, не собирая новые курсоры.

Возобновление подписки

cursor принадлежит конверту команды рядом с stream, а не внутри params:

json
{
  "op": "subscribe",
  "id": 1,
  "stream": "token_trades",
  "cursor": "436312304:15:0",
  "params": { "mint": "DD9e..." }
}

Опущенный курсор, пустая строка и "0" означают «начать с live».

Окно replay

ПланОкно replay
FreeНет replay
Starter20 секунд
Pro60 секунд
Scale60 секунд

Replay — восстановление после короткого разрыва, а не историческое хранилище. События вне окна недоступны.

Порядок

Replay и live-события могут приходить вперемешку. Восстанавливайте порядок по курсору; не предполагайте, что порядок прибытия по WebSocket отделяет replay от live-доставки.

Лимиты частоты

Ключ может запросить replay шесть раз в час, не более трёх подряд. Когда лимит исчерпан:

  1. подписка всё равно открывается,
  2. отправляется notice replay_rate_limited,
  3. доставка начинается с live-событий.

Если курсор старше доступного окна, подписка также открывается с live и отправляет notice gap.

Realtime Solana data API