Как это работает

Синхронизация ноды

Синхронизация ноды — это процесс, в котором нода получает актуальное состояние блокчейна и подтверждённую историю, начиная с известной стартовой точки. На практике это означает, что нода загружает и применяет данные сети так, чтобы локальная БД и рабочие компоненты соответствовали текущей цепочке.

Холодный старт

Холодный старт — это первичная инициализация ноды. В этом состоянии у ноды нет сохраненного состояния, поэтому она начинает синхронизацию с первого блока сети.

Для старта синхронизации ноде нужна информация о zerostate сети и список публичных узлов, к которым можно подключиться, чтобы получить данные для синхронизации. Эта информация берётся из global config, в котором указан zerostate и набор bootstrap peers.

Порядок холодного старта и дальнейшей синхронизации с сетью:

  1. Из global config извлекается информация о zerostate и bootstrap peers. Нода подключается к публичному overlay и запрашивает информацию у соседей.
  2. Загружается zerostate и сохраняются состояния masterchain и шардов, указанных в zerostate.
  3. Загружается цепочка key blocks мастерчейна, чтобы быстро пройти историческую часть сети, проверяя переходы между наборами валидаторов.
  4. После загрузки key block загружается persistent state, это верифицированный снимок состояний сети на момент выпуска key block.
  5. После этого нода докачивает все блоки, выпущенные после persistent state, и применяет их по порядку. Для ускорения синхронизации блоки скачиваются архивами. Архив содержит упакованный и сжатый набор блоков.
  6. Самые свежие блоки докачиваются последовательно.

Тёплый старт

Тёплый старт — это сценарий, когда нода уже работала с сетью и имеет локальную БД с ранее загруженными данными. В таком случае она может опираться на уже сохраненное состояние и стартовать синхронизацию не с нуля. Часть шагов из алгоритма холодного старта можно пропустить, это зависит от актуальности имеющихся данных.

Ключевые особенности

Эти механизмы позволяют быстро догонять сеть и не применять всю историю блоков с самого начала.

  • key blocks — это блоки мастерчейна, которые ссылаются на предыдущий key block мастерчейна и содержат информацию о текущем наборе валидаторов. Это позволяет верифицировать цепочку изменений validator set без необходимости загружать и применять все блоки сети.
  • persistent state — это полное состояние сети, привязанное к key block. По сути это бэкап состояния блокчейна, который ноды формируют примерно раз в два дня. Новые участники могут поднимать ноду, используя этот бэкап, а его корректность проверяется через цепочку key blocks.
  • Архив блоков — это файл, в который ноды упаковывают и сжимают диапазон блоков. Скачивание и применение блоков из архива обычно существенно быстрее, чем последовательная загрузка. Это помогает новым нодам быстрее догонять актуальное состояние даже при высокой нагрузке в сети.