영구 상태
노드는 주기적으로 블록체인 상태의 스냅샷을 저장합니다. 각 상태는 특정 마스 터체인 블록에서 생성되며 일정 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일)의 TTL을 가지고, 나머지 상태의 절반은 2^19
초(6일)의 TTL을 가지는 식입니다.
2024년에는 다음과 같은 장기(최소 3개월) 영구 상태가 있습니다:
블록 seqno | 블록 시간 | 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에서 구현되어 있습니다.
초기 블록부터 시작하여 노드는 모든 새로운 키 블록을 다운로드합니다. 아직 존재하는 영구 상태(위 공식 사용)를 가진 가장 최근의 키 블록을 선택한 다음, 해당 마스터체인 상태와 모든 샤드(또는 이 노드에 필요한 샤드만)의 상태를 다운로드합니다.