Перейти к основному содержимому

Долгосрочные состояния

warning

Эта страница переведена сообществом на русский язык, но нуждается в улучшениях. Если вы хотите принять участие в переводе свяжитесь с @alexgton.

Узлы регулярно сохраняют снимки состояний блокчейна. Каждое состояние создается на определенном блоке мастерчейна и имеет некоторые сроки действия (TTL). Блок и TTL выбираются с использованием следующего алгоритма:

Можно выбрать только ключевые блоки. Блок имеет некоторую временную метку ts. Существуют периоды времени длиной 2^17 секунд (приблизительно до 1,5 дней). Период блока с временной меткой ts равен x = floor(ts / 2^17). Для создания долгосрочного состояния выбирается первый ключевой блок из каждого периода.

Срок действия (TTL) состояния из периода x равен 2^(18 + ctz(x)), где ctz(x) - это количество конечных нулей в двоичном представлении x (т.е. наибольшее y такое, что x делится на 2^y).

Это означает, что долгосрочные состояния создаются каждые 1,5 дня, половина из них имеет TTL в 2^18 секунд (3 дня), половина оставшихся состояний имеет TTL в 2^19 секунд (6 дней) и так далее.

В 2024 году следующие долгосрочные состояния будут действовать на протяжении минимум трех месяцев:

Block seqnoBlock timeTTLСрок действия
89307062021-01-14 15:08:4012427 дней2055-01-24 08:45:44
277470862023-03-02 05:08:111553 дня2027-06-02 19:50:19
326383872023-09-12 09:27:36388 дней2024-10-04 18:08:08
348359532023-12-18 11:37:48194 дня2024-06-29 15:58:04
358930702024-02-05 00:42:5097 дней2024-05-12 02:52:58
369076472024-03-24 13:47:57776 дней2026-05-10 07:09:01

Когда узел запускается впервые, ему необходимо загрузить долгосрочное состояние. Это реализовано в файле validator/manager-init.cpp.

Начиная с блока init, узел загружает все новые ключевые блоки. Он выбирает самый последний ключевой блок с долгосрочным состоянием, которое еще существует (используя приведенную выше формулу), а затем загружает соответствующее состояние мастерчейна для всех шардов (или только те шарды, которые требуются для этого узла).