본문으로 건너뛰기

영구 상태

노드는 주기적으로 블록체인 상태의 스냅샷을 저장합니다. 각 상태는 특정 마스터체인 블록에서 생성되며 일정 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일)의 TTL을 가지고, 나머지 상태의 절반은 2^19 초(6일)의 TTL을 가지는 식입니다.

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

블록 seqno블록 시간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에서 구현되어 있습니다.

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