Долгосрочные состояния
Эта страница переведена сообществом на русский язык, но нуждается в улучшениях. Если вы хотите принять участие в переводе свяжитесь с @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, узел загружает все новые ключевые блоки. Он выбирает самый последний ключевой блок с долгосрочным состоянием, которое еще существует (используя приведенную выше формулу), а затем загружает соответствующее состояние мастерчейна для всех шардов (или только те шарды, которые требуются для этого узла).