영구 상태
노드는 주기적으로 블록체인 상태의 스냅샷을 저장합니다. 각 상태는 일부 마스터체인 블록에서 생성되며 일부 TTL이 있습니다. 블록과 TTL은 다음 알고리즘을 사용하여 선택됩니다:
키 블록만 선택할 수 있습니다. 블록에는 타임스탬프 ts
가 있습니다. 2^17초(대략 최대 1.5일) 길이의 기간이 있습니다. 타임스탬프
ts가 있는 블록의 기간은
x = floor(ts / 2^17)`입니다. 각 기간의 첫 번째 키 블록이 선택되어 영구 상태를 생성합니다.
주기 x
에서 상태의 TTL은 2^(18 + ctz(x))
와 같으며, 여기서 ctz(x)
는 x
의 이진 표현에서 후행 0의 수(즉, x
를 2^y
로 나눌 수 있는 가장 큰 y
)를 나타냅니다.
즉, 영구 상태는 1.5일마다 생성되며, 그 중 절반은 '2^18초(3일), 나머지 상태의 절반은 '2^19
초(6일) 등의 TTL을 갖습니다.
2024년에는 다음과 같은 장기(최소 3개월) 지속 상태가 있습니다:
블록 시퀀스 번호 | 블록 시간 | 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에 구현되어 있습니다.
노드는 초기화 블록부터 시작하여 모든 최신 키 블록을 다운로드합니다. 위의 공식을 사용하여 영구 상태가 아직 존재하는 가장 최근의 키 블록을 선택한 다음, 모든 샤드(또는 이 노드에 필요한 샤드만)에 해당하는 마스터체인 상태와 상태를 다운로드합니다.