📸Cosmos SDK State Sync

Для чего нужен. Как создать. Как использовать.

Snapshot-ы делаются на базе State-syncarrow-up-right - это встроенная в Cosmos SDK функция, которая дает валидаторам возможность быстро засинхронизироваться, скачав снимок состояния сети с RPC ноды.

Преимущество State Sync синхронизации заключается в том, что снимок очень мало весит, по сравнению с базой данных полностью синхронизированного блокчейна. Синхронизации с помощью снимка состояния синхронизации сокращает до нескольких минут время, необходимое валидатору или sentry nodes, чтобы засинхронизироваться с сетью. К тому же, этот метод экономит очень много места на диске. Синхронизируясь с сетью с помощью state-sync, узел избегает прохождения всех процедур обновления и может синхронизироваться только с самым последним обновлением бинарного файла.

Для синхронизации в папке data должен быть только один файл private-validator-state.json. Снимки состояния не рекомендуется производить на ноде с валидатором, так как для snapshots требуется работа узла в публичной сети блокчейна, тогда как Валидатора это подвергает опасности DDoS атак. Дополнительный RPC с поддержкой snapshots - это самое приемлимое решение для промощи комьюнити.

Минус такого варианта синхронизации, в том, что вместо полной истории транзакций, имеется снимок последнего состояния сети, которое сохранил RPC с включенным state-sync. Поэтому для нод, запущенных для передачи данных сайтам и dapps, в которых требуется информация о всех транзакциях, синхронизация с помощью Snapshot не подходит.

Официальные ресурсы:

Настройка параметров RPC для State-sync snapshots

circle-check

Настройка app.toml

Надо поменять определенные параметры, которые требуется для создания Snapshot. Их мы зададим в файле app.toml

Snapshot-interval and snapshot-keep-recent

Для создания снепшотов, надо установить параметр snapshot-interval . Это параметр, который задаёт интервал блоков, через который будут создаваться снимки.

К примеру, установим его равным 1000. Спускаемся в конец файла в раздел State Sync Configuration. Выставляем значения ниже:

Рекомендуется сохранять как минимум 2 последних снэпшота, чтобы снэпшот не удалялся нодой-донором, в то время, пока нода-приемник пытается скачать файл снэпшота. Для этого ставим snapshot-keep-recent=2.

circle-info

snapshot-interval должен быть кратным параметру pruning-keep-every чтобы защитить снэпшот от того, что в момент записи снимка произойдет prunning и в snapshot запишется не верная высота блока.

Pruning

Если раньше вы уже настраивали pruning для экономии места на диске, то теперь надо изменить, подставив pruning-keep-every = "1000" ( так как snapshot-interval = 1000):

Настройка config.toml

circle-check

Порт и ip

и поменяем параметр как написано ниже

Настройка laddr = "tcp://0.0.0.0:26657" позволяет слушать все адреса с порта 26657

Настройка видимого RPC

circle-check

Открываем конфиг:

выставляем параметр для разрешения нашей RPC работать в публичной сети

Теперь наша RPC является открытой и с неё могут подгружаться другие ноды?

Вопрос остается открытым!

Restart и ожидание

circle-check

Теперь перезапускаем ноду, чтобы изменения вступили в силу.

Ждем производства snapshots. По настройкой выше, снапшоты будут производиться один раз в каждые 1000 блоков.

Снепшоты будут сохраняться в директорию ~/.axelar/data/snapshots/

Применение

Теперь, когда снапшот произведен на другой ноде проверим результат:

В строчке BLOCK_HEIGHT=$((LATEST_HEIGHT - 1000)); \ надо подставить вместо 1000 число равное snapshot-interval, если этот параметр на RPC выставлен по другому.

Last updated