Синхронизация ноды
Синхронизация ноды — это процесс, в котором нода получает актуальное состояние блокчейна и подтверждённую историю, начиная с известной стартовой точки. На практике это означает, что нода загружает и применяет данные сети так, чтобы локальная БД и рабочие компоненты соответствовали текущей цепочке.
Холодный старт
Холодный старт — это первичная инициализация ноды. В этом состоянии у ноды нет сохраненного состояния, поэтому она начинает синхронизацию с первого блока сети.
Для старта синхронизации ноде нужна информация о zerostate сети и список публичных узлов, к которым можно подключиться, чтобы получить данные для синхронизации.
Эта информация берётся из глобальной конфигурации сети, где указан zerostate и набор стартовых публичных узлов (bootstrap peers).
Порядок холодного старта и дальнейшей синхронизации с сетью:
- Из глобальной конфигурации извлекается информация о
zerostateиbootstrap peers. Нода подключается к публичномуoverlayи запрашивает данные у соседей. - Загружается
zerostateи сохраняются состояния мастерчейна и рабочих цепочек, указанных вzerostate. - Загружается цепочка ключевых блоков мастерчейна, чтобы быстро пройти историческую часть сети, проверяя переходы между наборами валидаторов.
- После загрузки ключевого блока загружается устойчивое состояние (
persistent state) — верифицированный снимок состояния сети на момент выпуска этого блока. - После этого нода докачивает все блоки, выпущенные после устойчивого состояния, и применяет их по порядку. Для ускорения синхронизации блоки скачиваются архивами. Архив содержит упакованный и сжатый набор блоков.
- Самые свежие блоки докачиваются последовательно.
Тёплый старт
Тёплый старт — это сценарий, когда нода уже работала с сетью и имеет локальную БД с ранее загруженными данными. В таком случае она может опираться на уже сохраненное состояние и стартовать синхронизацию не с нуля. Часть шагов из алгоритма холодного старта можно пропустить, это зависит от актуальности имеющихся данных.
Ключевые особенности
Эти механизмы позволяют быстро догонять сеть и не применять всю историю блоков с самого начала.
- ключевые блоки — это блоки мастерчейна, которые ссылаются на предыдущий ключевой блок и содержат информацию о текущем наборе валидаторов. Это позволяет верифицировать цепочку изменений набора валидаторов без необходимости загружать и применять все блоки сети.
- устойчивое состояние (
persistent state) — это полное состояние сети, привязанное к ключевому блоку. По сути это снимок состояния блокчейна, который ноды формируют примерно раз в два дня. Новые участники могут поднимать ноду, используя этот снимок, а его корректность проверяется через цепочку ключевых блоков. - Архив блоков — это файл, в который ноды упаковывают и сжимают диапазон блоков. Скачивание и применение блоков из архива обычно существенно быстрее, чем последовательная загрузка. Это помогает новым нодам быстрее догонять актуальное состояние даже при высокой нагрузке в сети.