Долгосрочные состояния
Эта страница переведена сообществом на русский язык, но нуждается в улучшениях. Если вы хотите принять участие в переводе свяжитесь с @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 seqno | Block time | TTL | Срок действия |
---|---|---|---|
8930706 | 2021-01-14 15:08:40 | 12427 дней | 2055-01-24 08:45:44 |
27747086 | 2023-03-02 05:08:11 | 1553 дня | 2027-06-02 19:50:19 |
32638387 | 2023-09-12 09:27:36 | 388 дней | 2024-10-04 18:08:08 |
34835953 | 2023-12-18 11:37:48 | 194 дня | 2024-06-29 15:58:04 |
35893070 | 2024-02-05 00:42:50 | 97 дней | 2024-05-12 02:52:58 |
36907647 | 2024-03-24 13:47:57 | 776 дней | 2026-05-10 07:09:01 |
Когда узел запускается впервые, ему нео бходимо загрузить долгосрочное состояние. Это реализовано в файле validator/manager-init.cpp.
Начиная с блока init, узел загружает все новые ключевые блоки. Он выбирает самый последний ключевой блок с долгосрочным состоянием, которое еще существует (используя приведенную выше формулу), а затем загружает соответствующее состояние мастерчейна для всех шардов (или только те шарды, которые требуются для этого узла).