메인 콘텐츠로 건너뛰기

목적 및 범위

이 문서는 StableNet이 블록체인 상태, 블록, 영수증을 유지하기 위해 사용하는 영구 및 메모리 저장소 아키텍처를 설명합니다.
고수준 StateDB 캐싱 레이어부터 원시 데이터베이스 백엔드까지의 계층형 저장소 구조를 다루며, Merkle Patricia Trie, 캐싱 전략, 스냅샷 시스템을 포함합니다.
상태 전환 및 EVM 실행에 대한 내용은 State Transitions and Gas를 참고하세요.
블록체인 관리 및 정식 체인 유지에 대한 내용은 Blockchain Management를 참고하세요.
고대 저장소와 데이터 라이프사이클에 대한 상세 설명은 Ancient Store and Data Lifecycle을 참고하세요.

저장소 레이어 계층

StableNet의 저장소 아키텍처는 각기 다른 추상화 수준과 성능 최적화를 제공하는 여러 레이어로 구성됩니다.

StateDB: 상태 캐싱 레이어

StateDB는 블록체인 상태를 조회하고 수정하기 위한 핵심 인터페이스입니다.
저널링 기반의 원자성 보장과 스냅샷을 이용한 롤백 기능을 제공하는 고급 캐싱 레이어입니다.

StateDB 구조

ComponentTypePurpose
dbDatabaseTrie 데이터베이스 인터페이스
trieTrie계정 트라이 루트
snaps*snapshot.Tree빠른 접근을 위한 스냅샷 트리
snapsnapshot.Snapshot현재 활성 스냅샷
stateObjectsmap[common.Address]*stateObject활성 계정 객체
stateObjectsPendingmap[common.Address]struct{}최종화되었으나 커밋되지 않은 객체
stateObjectsDirtymap[common.Address]struct{}실행 중 수정된 객체
stateObjectsDestructmap[common.Address]*types.StateAccount소멸된 객체
accountsmap[common.Hash][]byte수정된 계정 데이터
storagesmap[common.Hash]map[common.Hash][]byte수정된 저장소 슬롯
accountsOriginmap[common.Address][]byte원본 계정 값
storagesOriginmap[common.Address]map[common.Hash][]byte원본 저장소 값
journal*journal상태 변경 로그
validRevisions[]revision스냅샷 리비전
refunduint64가스 환불 카운터

상태 객체 관리

각 계정은 기본 types.StateAccount를 래핑한 stateObject로 관리되며, 실행 중 변경 사항을 추적합니다.
FieldTypePurpose
addresscommon.Address계정 주소
addrHashcommon.HashKeccak256(address)
origin*types.StateAccount원본 계정 데이터
datatypes.StateAccount현재 계정 데이터
trieTrie저장소 트라이
codeCode컨트랙트 바이트코드
originStorageStorage원본 저장소
pendingStorageStorage커밋 대기 저장소
dirtyStorageStorage실행 중 변경된 저장소
dirtyCodebool코드 변경 여부
selfDestructedbool소멸 표시
deletedbool삭제 표시
createdbool현재 트랜잭션에서 생성

저널링 및 스냅샷

StateDB는 모든 상태 변경을 저널에 기록하여 롤백 가능성을 보장합니다.
각 저널 항목은 revert() 메서드를 구현하며 다음과 같은 변경 유형을 포함합니다.
  • balanceChange
  • nonceChange
  • storageChange
  • codeChange
  • extraChange
  • createObjectChange
  • selfDestructChange
  • touchChange
  • addLogChange

Merkle Patricia Trie 구현

Merkle Patricia Trie(MPT)는 상태를 저장하는 핵심 암호화 데이터 구조입니다.
StableNet은 해시 기반 스키마와 경로 기반 스키마를 모두 지원합니다.

Trie 노드 타입

Node TypePurposeStructure
fullNode16개 자식 분기Children [17]node
shortNode경로 압축Key []byte, Val node
valueNode리프 값[]byte
hashNode해시 참조[]byte

저장소 스키마: Hash vs Path

StableNet은 두 가지 trie 저장 방식을 지원합니다.
SchemeKey FormatPurpose
Hash Scheme노드 해시콘텐츠 주소 기반
Path Scheme트라이 경로히스토리 및 프루닝 지원
경로 스키마는 상태 히스토리, 효율적인 프루닝, 과거 상태 조회를 지원합니다.
해시 스키마는 단순하지만 히스토리를 내장하지 않습니다.

BlockChain 캐싱 전략

BlockChain은 다수의 LRU 캐시를 사용해 데이터베이스 접근을 최소화합니다.
CacheSizePurpose
bodyCache256블록 본문
blockCache256전체 블록
receiptsCache32영수증
txLookupCache1024트랜잭션 조회
headerCache512블록 헤더
tdCache1024총 난이도
numberCache2048해시 → 블록 번호

스냅샷 시스템

스냅샷은 상태 트라이를 순회하지 않고 계정과 저장소에 빠르게 접근하기 위한 평면화된 뷰를 제공합니다.

스냅샷 레이어

LayerPurposeStorage
difflayer최근 변경메모리
disklayer기준 상태디스크
스냅샷 접근 순서는 diff → disk → trie 폴백입니다.

스냅샷 구성

FieldDefaultPurpose
SnapshotLimit256MB스냅샷 캐시
SnapshotNoBuildfalse백그라운드 생성 비활성화
SnapshotWaittrue시작 시 대기

상태 커밋 및 최종화

상태 변경은 수정 → 최종화 → 트라이 업데이트 → 커밋 단계를 거칩니다.
최종 결과는 새로운 상태 루트 해시로 반환됩니다.

원시 데이터베이스 및 고대 저장소

저수준에서는 키-값 데이터베이스를 사용하며, 오래된 데이터는 고대 저장소로 이동됩니다.

고대 저장소 특징

  • 데이터베이스 크기 감소
  • 과거 데이터의 빠른 순차 접근
  • 활성 DB 프루닝 가능
  • Era1 아카이브 생성 지원

캐시 구성 요약

ConfigurationDefaultPurpose
TrieCleanLimit256MBClean trie 캐시
TrieDirtyLimit256MBDirty trie 캐시
TrieTimeLimit5분플러시 지연
SnapshotLimit256MB스냅샷 캐시
StateHistory0상태 히스토리
bodyCacheLimit256블록 본문
blockCacheLimit256전체 블록
receiptsCacheLimit32영수증
txLookupCacheLimit1024트랜잭션 조회