Как выгрузить ключи карты Substrate из одного состояния
Полная карта System.Account может не поместиться в один допустимый ответ провайдера. Постраничная выгрузка ключей ограничивает размер запроса и позволяет продолжить после сбоя.
Получите префикс из метаданных runtime
Подключите polkadot-js к сети с system.account и запросите короткую страницу. Для определения структуры хранилища используйте runtime выбранного снимка. Сохраните исходный порядок ключей: следующий курсор принимает именно ключ хранилища.
const hash = await api.rpc.chain.getFinalizedHead()
const prefix = api.query.system.account.keyPrefix()
const keys = await api.rpc.state.getKeysPaged(prefix, 100, null, hash)
console.log(hash.toHex(), keys.map(key => key.toHex()))
Продолжайте от последнего полученного ключа
Передайте последний ключ первой страницы как startKey следующего getKeysPaged с прежним префиксом и хешем. Адрес аккаунта в пользовательском формате не заменяет кодированный ключ хранилища. Значения также читайте на сохранённом хеше. Завершайте на пустой странице и отмечайте курсор, который перестал двигаться.
Зафиксируйте страницу до продвижения контрольной точки. Если состояние было удалено во время долгой выгрузки, продолжите на архивном узле либо начните отдельную выгрузку с новым хешем.