목적 및 범위
이 문서는 go-stablenet의 트랜잭션 실행에 대한 포괄적인 개요를 제공하며, RPC 제출부터 검증, EVM 실행, 최종화까지의 전체 파이프라인을 다룹니다. 주요 컴포넌트(StateProcessor, StateTransition, EVM)와 상호 작용을 소개하며, 특정 측면의 상세 내용은 하위 페이지에 위임합니다. 상세 주제(하위 페이지 참조):- Transaction Lifecycle - RPC 제출부터 블록 포함까지의 전체 흐름
- State Transitions and Gas - StateTransition 프로세스, 사전 검사, 가스 구매, 고유 가스, 환불
- EVM Execution - EVM 인스턴스화, 바이트코드 해석, 상태 수정
- Gas Fee Policy - StableNet의 거버넌스 기반 가스 팁 적용
- Fee Delegation - 제3자 가스 지불 메커니즘
- 트랜잭션 풀 관리 및 검증: Transaction Pool
- 트랜잭션 구조 및 직렬화: Transaction Types and Encoding
- 블록 생성 중 트랜잭션 선택: Block Production and Mining
- StateDB 아키텍처 및 저널링: State Management
트랜잭션 처리 개요
go-stablenet의 트랜잭션 처리는 메시지를 상태 변경 및 영수증으로 변환하는 다단계 파이프라인을 따릅니다. 프로세스는 블록 수준 처리를 위한 StateProcessor와 개별 트랜잭션 실행을 위한 StateTransition에 의해 조정됩니다.고수준 처리 흐름
다이어그램: 코드 엔티티가 있는 트랜잭션 실행 파이프라인핵심 컴포넌트
StateProcessor
StateProcessor는 블록 수준 트랜잭션 처리를 처리합니다. 블록의 모든 트랜잭션을 반복하고 순차적으로 적용하며 최종화를 위해 합의 엔진과 조정합니다.| Component | Type | Purpose |
|---|---|---|
config | *params.ChainConfig | Chain configuration for fork rules |
bc | *BlockChain | Access to canonical chain state |
engine | consensus.Engine | Consensus engine for rewards and finalization |
Process(block, statedb, cfg) -> (receipts, logs, gasUsed, error)
메서드는 다음을 수행합니다:
- 헤더 정보가 있는 EVM 블록 컨텍스트 생성
- 트랜잭션 반복, 각각을 Message로 변환
- 각 트랜잭션에 대해
applyTransaction()호출 - 합의별 로직을 위해
engine.Finalize()호출
StateTransition
StateTransition 구조체는 현재 상태에 대해 단일 트랜잭션을 실행하는 로직을 캡슐화합니다. 가스 계정, 사전 검사, EVM 호출, 오류 처리를 관리합니다.트랜잭션 검증 및 사전 검사
실행 전에 트랜잭션은StateTransition.preCheck() 메서드에서 광범위한 검증을 거칩니다. 이는 상태 변경이 발생하기 전에 합의 규칙이 충족되도록 보장합니다.
주요 검증 검사
| Check | Method | Purpose | Errors |
|---|---|---|---|
| Nonce | state.GetNonce(msg.From) | Ensures transaction ordering | ErrNonceTooLow, ErrNonceTooHigh |
| Sender Account | state.GetCode(msg.From) | Verifies sender is EOA | ErrSenderNoEOA |
| Gas Pricing | GasFeeCap >= GasTipCap >= BaseFee | Validates EIP-1559 | ErrFeeCapTooLow, ErrTipAboveFeeCap |
| Authorization List | Validate EIP-7702 | Checks signatures | ErrAuthorizationInvalidSignature |
| Gas Purchase | buyGas() | Reserves gas upfront | ErrInsufficientFunds |
가스 관리
StableNet의 가스 관리는 선불 구매, 고유 가스 공제, 실행 후 환불의 세 단계로 구성됩니다.가스 구매
StateTransition.buyGas()는 선택적 수수료 위임이 있는 선불 가스 지불을 처리합니다.
고유 가스
IntrinsicGas()는 실행 전 기본 가스 비용을 계산합니다.
가스 환불
StateTransition.refundGas()는 사용하지 않은 가스를 환불합니다.
EVM 실행
검증과 가스 구매 후StateTransition.TransitionDb()는 EVM을 호출해 트랜잭션을 실행합니다.
EVM 구조
| Field | Type | Purpose |
|---|---|---|
Context | vm.BlockContext | Block metadata |
TxContext | vm.TxContext | Transaction metadata |
StateDB | vm.StateDB | State interface |
interpreter | *EVMInterpreter | Bytecode interpreter |
StableNet 특화 기능
블랙리스트 적용
Anzeon 활성화 시 블랙리스트 주소는 실행 전·중 차단됩니다.가스 팁 거버넌스
승인되지 않은 계정에는 거버넌스 기반 최소 가스 팁이 적용됩니다.수수료 위임
제3자 계정이 가스를 지불할 수 있으며 환불도 해당 계정으로 처리됩니다.오류 처리
오류는 사전 실행 합의 오류와 실행 중 EVM 오류로 구분됩니다.성능 고려사항
- 스택 및 메모리 풀 사용
- StateDB 스냅샷 기반 롤백
- 가스 계산 최적화

