context.slot: он определяет границы диапазона, пропущенного во время разрыва соединения. В этом руководстве объясняется, почему соединения закрываются, как корректно переподключаться и как использовать этот диапазон.
Почему соединения закрываются
При каждом закрытии соединения передаётся код закрытия WebSocket, который указывает, что произошло и что делать дальше:
Сервер отправляет пинг каждые 15 секунд, поэтому даже исправное, но неактивное соединение продолжает передавать трафик. Если более минуты нет вообще никаких данных — ни уведомлений, ни пингов, — считайте соединение разорванным и переподключитесь, не дожидаясь сигнала от сокета.
Узкие фильтры и тайм-аут простоя
Если фильтр настолько узкий, что совпадений обоснованно может не быть в течение 10 минут, ожидайте, что сервер закроет соединение с кодом 1000. Обрабатывайте это как любое другое закрытие: переподключитесь, возобновите подписки и восполните пропуск, как описано ниже.Переподключение и обнаружение пропуска
1
Reconnect with Backoff
При любом закрытии — ожидаемом или нет — переподключайтесь с экспоненциальной задержкой. Идентификаторы подписок не сохраняются после переподключения, поэтому повторно отправьте
parsedTransactionSubscribe для каждого ранее открытого фильтра.2
Track context.slot Across Disconnects
Сохраните последнее значение
context.slot, полученное перед разрывом соединения. Промежуток между этим слотом и первым слотом, полученным после переподключения, точно соответствует пропущенному диапазону — не больше и не меньше.3
Backfill if You Need To
Если приложение не допускает пропусков, восполните данные за этот диапазон слотов через RPC: используйте
getSignaturesForAddress, чтобы перечислить транзакции в диапазоне, а затем getTransaction, чтобы получить каждую из них. Это ручной этап сверки — сами разобранные потоки не воспроизводят данные повторно.context.slot сохраняет актуальность после переподключения: отслеживайте наибольший слот, полностью обработанный до разрыва соединения, и считайте всё после него диапазоном для восполнения данных.
Обработка ошибок JSON-RPC
Неудачные запросы возвращают ошибку JSON-RPC вместо результата, поэтому логику обработки можно ветвить поerror.code:
Ошибки
-32602 и -32000 означают, что сам запрос составлен неправильно: исправьте фильтр и не повторяйте запрос без изменений. Ошибки -32001 и -32002 временные; повторите запрос с той же задержкой, которую используете при переподключении.
Дальнейшие действия
Quickstart
Полное описание протокола: методы, поля фильтров и ограничения.
Track Jupiter Swaps
Создайте фильтр, на который можно подписаться через это соединение.