Обзор
У nodeos есть варианты воспроизведения блоков цепочки. Это полезно, например, если узел скачал blocks.log (быстрее, чем полная синхронизация по P2P) и нужно догнать сеть, или если нужно состояние цепочки в конкретные моменты времени.
Воспроизведение возможно двумя способами:
-
Из файла
blocks.log:
Вblocks.logхранятся все необратимые транзакции. Каждыйnodeosдописывает необратимые блоки вblocks.logв каталогеdata/blocksотносительно данныхnodeos. Реплей поblocks.logпересоздаёт локально всю историю без лишней нагрузки на сеть. -
Из файла снимка (snapshot):
Снимок создаётся с работающегоnodeosи содержит состояние цепочки на блоке, с которого он снят. Рекомендуется использовать снимки с необратимых блоков. Реплей со снимка быстро поднимаетnodeosс корректным состоянием на заданном номере блока, но без полной истории транзакций до этого блока. Далее узел работает в обычном режиме.
Практические инструкции¶
- Как сформировать журнал блоков
- Как создать снимок
- Как воспроизвести цепочку из журнала блоков
- Как воспроизвести цепочку из снимка
Опции, связанные со снимками и реплеем¶
Команда nodeos --help выводит все опции. Касающиеся снимков и реплея:
-
--force-all-checks
Если источникblocks.logне доверен, при первом реплее можно запуститьnodeosс--replay-blockchain --force-all-checks, чтобы не пропускать проверки блоков. -
--disable-replay-opts
По умолчанию при реплееnodeosне строит стек дельт состояния (он нужен для отката состояния по обратимым блокам) — это ускоряет реплей. Данная опция отключает эту оптимизацию. Дляstate_history_pluginона обязательна. -
--replay-blockchain
Очистить состояние цепочки и воспроизвести все блоки изblocks.logв каталогеdata/blocks. -
--hard-replay-blockchain
Сделать резервную копию текущегоblocks.log, очистить состояние и воспроизвести блоки из журнала. Предполагается, что в резервной копииblocks.logмогут быть повреждённые блоки:nodeosвоспроизводит максимум возможного из резервной копи, а при первом повреждённом блоке досинхронизируется по P2P. -
--delete-all-blocks
Очистить локальное состояние цепочки и локальныйblocks.log. Для последующей синхронизации по P2P нужен корректныйgenesis.json. Опция не рекомендуется. -
--truncate-at-block
Аргумент по умолчанию=0; если задан ненулевой, при реплее воспроизведение останавливается на указанном номере блока. Работает только вместе с--hard-replay-blockchain. Локальный процессnodeosбудет иметь состояние на этом блоке. Удобно для проверок в тестах; для узла, синхронизированного с сетью, не предназначено. -
--snapshot
Путь к файлу снимка для восстановления состояния без реплеяblocks.log. Полной истории транзакций до снимка у экземпляраnodeosне будет. -
--snapshots-dir
Каталог файлов снимков (абсолютный путь или относительно каталога данных приложения). -
--blocks-dir
Каталог сblocks.log(абсолютный путь или относительно каталога данных приложения).