Как выгрузить большое состояние контракта 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== даст четыре других байта. Фиксируйте данные страницы и курсор вместе, чтобы при сбое курсор не опередил записанные строки.

Источники