본문으로 건너뛰기

영구 상태

노드는 주기적으로 블록체인 상태의 스냅샷을 저장합니다. 각 상태는 일부 마스터체인 블록에서 생성되며 일부 TTL이 있습니다. 블록과 TTL은 다음 알고리즘을 사용하여 선택됩니다:

키 블록만 선택할 수 있습니다. 블록에는 타임스탬프 ts가 있습니다. 2^17초(대략 최대 1.5일) 길이의 기간이 있습니다. 타임스탬프 ts가 있는 블록의 기간은 x = floor(ts / 2^17)`입니다. 각 기간의 첫 번째 키 블록이 선택되어 영구 상태를 생성합니다.

주기 x에서 상태의 TTL은 2^(18 + ctz(x))와 같으며, 여기서 ctz(x)x의 이진 표현에서 후행 0의 수(즉, x2^y로 나눌 수 있는 가장 큰 y)를 나타냅니다.

즉, 영구 상태는 1.5일마다 생성되며, 그 중 절반은 '2^18초(3일), 나머지 상태의 절반은 '2^19초(6일) 등의 TTL을 갖습니다.

2024년에는 다음과 같은 장기(최소 3개월) 지속 상태가 있습니다:

블록 시퀀스 번호블록 시간TTL만료일
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에 구현되어 있습니다.

노드는 초기화 블록부터 시작하여 모든 최신 키 블록을 다운로드합니다. 위의 공식을 사용하여 영구 상태가 아직 존재하는 가장 최근의 키 블록을 선택한 다음, 모든 샤드(또는 이 노드에 필요한 샤드만)에 해당하는 마스터체인 상태와 상태를 다운로드합니다.