세 가지 표현
엔진 상태마켓 · 계정 · 포지션 · 오더북 · 클리어링 하우스블록을 넘어 유지 · 재구성
블록 작업 집합마크 · 변경된 계정 · 체결 · 준비된 출력한 블록 동안만 존재 · 기록장
체인 상태버전이 매겨진 키-값, 머클 인증최종 근거
이 구분이 막아 내는 장애메모리에 있는 뷰가 확정된 내용에서 어긋난 엔진은 계속 답을 내놓지만, 그 답은 하나같이 결제 시점에야 드러나는 방식으로 틀려 있습니다.
엔진 상태는 확정된 기록에서 도출될 수 있어야 하며, 그 반대는 성립하지 않음
키
체인 상태는 키로 주소가 매겨집니다. 트레이딩 상태는 이름이 붙고 버전이 명시된 네임스페이스로 묶입니다. 수수료 설정, 무기한 선물 인덱스, 레버리지 등급 표, 관리 역할 목록이 그런 예입니다. 버전 접미사는 장식이 아닙니다. 설정의 형태가 바뀌면 그 키의 새 버전으로 옮겨 가고, 이전 키는 그대로 남습니다. 마이그레이션 중에도 옛 스키마로 기록된 상태를 읽을 수 있어야 하기 때문입니다. 버전 하나를 하드코딩해 두고 다시 확인하지 않는 읽기 측은 마이그레이션 이후 조용히 낡은 설정을 읽게 됩니다. 현재 키를 조회하는 읽기 측은 그렇지 않습니다.설정을 클라이언트 코드에 고정해 두지 말고 체인에서 읽어야 하는 이유가 이것입니다. 수수료 등급 서비스가 매 주기마다 현재 수수료 설정을 읽는 이유도 정확히 같습니다. 클라이언트에 구워 넣은 등급 표는 언젠가 네트워크가 적용하는 표와 어긋나게 됩니다.
버전
확정되는 모든 블록은 버전을 하나 진행시킵니다. 상태 값은 기록된 시점의 버전에 붙어 저장되며, 따라서 저장소는 단순히 “현재 상태”가 아니라 “임의의 버전에서의 상태”입니다. 이 성질 하나가 여러 가지를 동시에 가능하게 합니다.- 증명은 현재뿐 아니라 특정 버전을 대상으로도 만들어 낼 수 있습니다.
- 재실행은 제네시스뿐 아니라 임의의 버전에서 시작할 수 있습니다.
- 읽기는 과거를 대상으로 할 수 있습니다. 포지션의 이력을 재구성하는 인덱서는 로그를 훑는 것이 아니라 옛 버전을 요청합니다.
- 프루닝은 구조적 제약이 아니라 얼마나 과거까지 보관할지에 대한 정책 결정이 됩니다.
최종적으로 확정되는 것
커널 실행은 블록마다 두 가지를 내놓습니다. 각 트랜잭션은 자신에게 묶인 쓰기와 이벤트를 담습니다. 펀딩 흐름, 보험 기금 이동, 블록 단위 카운터처럼 어느 사용자 트랜잭션에도 속하지 않는 효과는 별도의 시스템 채널로 갑니다. 이 둘 사이에서 빠지는 것은 없습니다. 커널 내부의 실행 효과 중 트랜잭션 출력에도 시스템 채널에도 나타나지 않는 것은 없습니다. 이 완전성 덕분에 확정된 기록을 요약본이 아니라 사건의 전부로 다룰 수 있고, 매칭이 배치로 실행된 경우에도 이벤트를 원인이 된 트랜잭션까지 되짚을 수 있습니다.다음으로 읽을 문서
스토리지와 증명
확정된 상태가 물리적으로 어떻게 저장되고, 인증되고, 프루닝되는지 다룹니다.
상태 동기화
체인을 한 번도 본 적 없는 노드가 어떻게 따라잡는지 다룹니다.
IntentionKernel
엔진 상태와 블록 작업 집합이 사는 곳입니다.
인덱서
확정된 상태를 조회 가능한 형태로 바꾸는 일을 다룹니다.