Курсор и replay
Каждое событие несёт курсор. Сохраняйте последний обработанный курсор и передавайте его при повторной подписке после разрыва. Пропущенные события проигрываются до перехода подписки в live-поток.
Формат курсора
slot:transactionIndexInBlock:eventIndexInTransactionПример:
436312304:15:0Три компонента однозначно идентифицируют одно событие. Клиенты всё равно должны считать полное значение непрозрачной строкой: сохраняйте и сравнивайте её, не собирая новые курсоры.
Возобновление подписки
cursor принадлежит конверту команды рядом с stream, а не внутри params:
{
"op": "subscribe",
"id": 1,
"stream": "token_trades",
"cursor": "436312304:15:0",
"params": { "mint": "DD9e..." }
}Опущенный курсор, пустая строка и "0" означают «начать с live».
Окно replay
| План | Окно replay |
|---|---|
| Free | Нет replay |
| Starter | 20 секунд |
| Pro | 60 секунд |
| Scale | 60 секунд |
Replay — восстановление после короткого разрыва, а не историческое хранилище. События вне окна недоступны.
Порядок
Replay и live-события могут приходить вперемешку. Восстанавливайте порядок по курсору; не предполагайте, что порядок прибытия по WebSocket отделяет replay от live-доставки.
Лимиты частоты
Ключ может запросить replay шесть раз в час, не более трёх подряд. Когда лимит исчерпан:
- подписка всё равно открывается,
- отправляется notice
replay_rate_limited, - доставка начинается с live-событий.
Если курсор старше доступного окна, подписка также открывается с live и отправляет notice gap.