Как выгрузить большое состояние контракта NEAR на одном блоке
За время между чтением двух страниц контракт может изменить ключи. Для целостной выгрузки нужны одновременно курсор и фиксированный блок.
Запишите первую страницу и её блок
Возьмите узел с поддержкой постраничного view_state (nearcore 2.13.0 или новее). Подставьте аккаунт контракта. Пустой префикс выбирает все ключи, непустой задаёт начальные байты ключа в base64.
{
"jsonrpc": "2.0",
"id": 1,
"method": "query",
"params": {
"request_type": "view_state",
"finality": "final",
"account_id": "ledger.testnet",
"prefix_base64": "",
"limit": 100
}
}
Передайте курсор из ответа
Запишите значения и block_hash. Если ответ содержит last_key, передайте его без изменений как after_key_base64. В следующих запросах замените finality на block_id с сохранённым хешем. Не меняйте аккаунт и префикс до окончания выдачи.
Например, курсор Yg== представляет один байт b. Повторное кодирование текста Yg== даст четыре других байта. Фиксируйте данные страницы и курсор вместе, чтобы при сбое курсор не опередил записанные строки.