메인 콘텐츠로 건너뛰기

목적 및 범위

이 문서는 StableNet 노드의 초기화 시퀀스 및 라이프사이클 관리를 설명합니다. 명령줄 호출부터 완전한 종료까지의 과정을 다루며, 구성 로딩, 제네시스 설정, 컴포넌트 초기화, 서비스 조정, 정상 종료 절차를 포함합니다. 관련 문서:

전체 초기화 시퀀스

노드 초기화는 CLI 플래그 파싱부터 완전히 실행 중인 노드까지 다음 순서를 따릅니다:
CLI 플래그 파싱 → 구성 로드 → node.Node 생성
→ eth.Ethereum 백엔드 초기화 (DB, 체인, 풀, 마이너)
→ API/프로토콜 등록 → 서비스 시작 → 런타임 모니터링

구성 단계

플래그 파싱 및 데이터 디렉터리 설정

노드는 시작 시 내부 기본값을 초기화한 후, 네트워크 설정, 설정 파일, 명령줄 플래그 순으로 설정을 적용하여 최종 실행 구성을 결정합니다. 후속 단계의 설정은 이전 단계에서 설정된 값을 덮어씁니다.
적용 단계구성 소스설명
4명령줄 플래그실행 시점에 지정되는 최종 오버라이드 값
3TOML 설정 파일사용자가 정의한 영구 설정
2네트워크 사전 설정Mainnet / Testnet 등 네트워크별 기본 설정
1하드코딩된 기본값코드에 정의된 초기 기본값
데이터 디렉터리를 별도로 지정하지 않을 경우 내부 기본 디렉터리를 사용합니다.

제네시스 블록 초기화

제네시스 블록은 블록체인의 초기 상태를 설정합니다. 노드는 기존 제네시스를 데이터베이스에서 로드하거나, 없는 경우 새로 초기화합니다. Anzeon/WBFT 네트워크의 경우 제네시스 초기화에는 다음과 같은 추가 작업이 포함됩니다:
  1. BLS 공개 키를 포함한 초기 검증자 세트 구성
  2. 시스템 컨트랙트 배포 (GovValidator, NativeCoinAdapter 등)
  3. WBFT 전용 Extra 데이터 인코딩
  4. 초기 가스 팁 파라미터 설정

노드 및 백엔드 생성

노드 컨테이너

node.Node는 서비스 조정자 역할을 합니다. P2P 서버, RPC 엔드포인트, 등록된 서비스를 관리하며, RegisterLifecycle()RegisterAPIs()를 통해 하위 서비스를 등록받습니다.

Ethereum 백엔드 초기화

eth.Ethereum은 전체 프로토콜을 구현하는 주요 서비스입니다. eth.New() 생성자는 다음 순서로 초기화를 수행합니다:
  1. 데이터베이스 설정: ancient/freezer 저장소를 포함한 chaindata 데이터베이스 열기
  2. 상태 스키마 선택: 해시 기반 또는 경로 기반 상태 저장소 구성
  3. 합의 엔진 생성: 체인 설정에 따라 WBFT, Clique 또는 Ethash 선택
  4. Etherbase 설정: Anzeon 네트워크의 경우 노드 키에서 파생된 주소로 자동 설정
  5. BlockChain 생성: 제네시스 로드, 캐시 및 스냅샷 구성
  6. 트랜잭션 풀 설정: legacypool과 blobpool 초기화
  7. 프로토콜 핸들러 생성: P2P 동기화 및 전파 로직 구성
  8. 마이너 생성: 블록 조립 워커 초기화
  9. API 및 라이프사이클 등록: RPC API, P2P 프로토콜, 서비스 라이프사이클 등록

트랜잭션 풀 초기화

트랜잭션 풀은 두 개의 하위 풀로 구성됩니다:
  • legacypool: 표준 트랜잭션 및 StableNet 전용 트랜잭션 처리
  • blobpool: EIP-4844 blob 트랜잭션 처리
Anzeon 네트워크에서는 최소 가스 팁이 GovValidator 컨트랙트에서 초기화되어 마이너와 트랜잭션 풀에 반영됩니다.

마이너 및 합의 통합

Worker는 다음 네 가지 주요 goroutine을 실행합니다:
  • mainLoop: 작업 요청 및 트랜잭션 이벤트 처리
  • newWorkLoop: 새 블록 생성 트리거 (WBFT: 합의 라운드 이벤트 기반)
  • taskLoop: 봉인 작업 관리 (engine.Seal() 호출)
  • resultLoop: 봉인된 블록 처리 및 체인 삽입

서비스 등록 및 라이프사이클 관리

API 등록

백엔드는 다음 RPC API 네임스페이스를 노출합니다:
  • eth: 핵심 Ethereum RPC 메서드
  • miner: 블록 생성 제어
  • admin: 노드 및 피어 관리 기능
  • debug: 트레이싱 및 진단 유틸리티
  • net: 네트워크 정보
  • 합의 엔진 전용 API (WBFT 관리 함수 등)

프로토콜 등록

P2P 프로토콜은 피어 간 통신을 담당합니다:
  • eth: 블록 및 트랜잭션 전파
  • snap: 상태 스냅샷 동기화 (활성화된 경우)
  • wbft: WBFT 합의 메시지 교환

노드 시작 및 런타임

StartNode()가 호출되면 stack.Start()를 통해 서비스가 등록 순서대로 시작되며, 이후 런타임 모니터링이 활성화됩니다.

디스크 공간 모니터링

노드는 디스크 공간 부족으로 인한 데이터 손상을 방지하기 위해 주기적인 모니터링을 수행합니다.
  • --datadir.minfreedisk가 설정된 경우 해당 임계값을 사용합니다
  • 설정되지 않은 경우 내부 기본 임계값을 사용합니다
  • 값이 0이면 모니터링이 비활성화됩니다

정상 종료 시퀀스

종료 신호를 수신하거나 디스크 공간 부족이 감지되면 노드는 순차적으로 종료를 수행합니다. 종료 특성:
  • 서비스는 시작 순서의 역순으로 정상 종료됩니다
  • 반복 신호 수신 시 강제 종료가 가능합니다
  • 종료 과정은 추적되며 로그로 기록됩니다
  • 모든 대기 중인 상태 변경은 디스크에 플러시됩니다

종료 추적기

종료 추적기(shutdowncheck)는 비정상 종료를 감지합니다:
  • 시작 시 종료 마커 기록
  • 정상 종료 시 마커 제거
  • 마커가 남아 있는 경우 이전 비정상 종료로 판단하여 경고 로그 출력
이를 통해 데이터베이스 손상 가능성을 조기에 인지할 수 있습니다.

합의별 초기화

WBFT 합의 시작

Anzeon/WBFT 네트워크에서는 다음과 같은 추가 초기화가 수행됩니다:
  1. Etherbase 자동 설정: 노드 키에서 파생된 주소로 강제 설정
  2. 가스 팁 초기화: GovValidator 컨트랙트에서 네트워크 전역 값 로드
  3. WBFT 엔진 기동: 합의 라운드 콜백 등록과 함께 엔진 시작
  4. Worker WBFT 모드 활성화: 합의 이벤트 기반 블록 생성 루프 사용

컴포넌트 요약

컴포넌트초기화 함수주요 책임
Nodenode.New()서비스 조정, P2P 서버, RPC 엔드포인트
Ethereum Backendeth.New()전체 프로토콜 구현 및 컴포넌트 연결
Blockchaincore.NewBlockChain()정식 체인 관리 및 검증
Transaction Pooltxpool.New()대기 트랜잭션 관리
Minerminer.New()블록 생성 조정
WorkernewWorker()트랜잭션 선택 및 블록 조립
Consensus Engineethconfig.CreateConsensusEngine()블록 검증 및 봉인
Protocol HandlernewHandler()블록·트랜잭션 전파
Downloaderdownloader.New()체인 동기화
P2P Serverp2p.Server피어 연결 및 프로토콜 멀티플렉싱