Как продолжить выгрузку истории адреса Solana после сбоя

Если обработчик запоминает только номер слота, при продолжении выгрузки он может пропустить часть транзакций из этого слота. Подпись на границе страницы задаёт точную позицию для следующего запроса.

Начните с короткой страницы

Отправьте POST-запрос с этим телом на HTTP RPC Solana. На активном кластере по адресу Vote Program легко увидеть порядок записей. Для своей выгрузки подставьте адрес, который отслеживаете.

{"jsonrpc":"2.0","id":1,"method":"getSignaturesForAddress","params":["Vote111111111111111111111111111111111111111",{"commitment":"finalized","limit":3}]}

Читайте массив result сверху вниз. Если подписи идут в порядке A, B, C, запись A самая свежая. Чтобы получить более ранние записи, добавьте в объект параметров before с полной подписью C в base58. Сохраните прежние адрес, кластер и уровень подтверждения.

Сохраняйте записи и курсор вместе

В одной транзакции БД запишите всю страницу и её последнюю подпись как курсор. Для уникальности строки учитывайте кластер, отслеживаемый адрес и подпись. Если процесс остановится между получением ответа и фиксацией транзакции БД, повторный запрос той же страницы будет безопасен.

Что означает конец выдачи

Пустая страница завершает доступную на этом узле выдачу. Для архивной выгрузки сравните самый ранний полученный слот с требуемой глубиной и отметьте непроверенный интервал. Строка означает, что транзакция ссылалась на адрес. Чтобы классифицировать её как перевод, изучите инструкции, результат исполнения и изменения балансов.

Документация Solana