Перейти к содержанию

Обзор

У 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 (абсолютный путь или относительно каталога данных приложения).