Как прочитать блоки ICRC-3 через обратные вызовы архивов

Один запрос icrc3_get_blocks может пересечь границу архива. Индексатору нужно обработать ссылки на архивные методы вместе с блоками из основного ответа.

Ведите учёт запрошенных индексов

Пусть диапазон начинается с 980 и содержит 40 блоков. Если реестр вернул последние двадцать сразу, для первой части вызовите методы из archived_blocks с указанными в них диапазонами. Перед объединением сопоставьте каждый блок с явно возвращённым индексом.

requested: start 980, length 40
archive callback range: 980..999
inline block IDs: 1000..1019

Сдвигайте позицию по непрерывному диапазону

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

Источники