메인 콘텐츠로 건너뛰기

목적 및 범위

이 문서는 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자 가스 지불 메커니즘
관련 페이지:

트랜잭션 처리 개요

go-stablenet의 트랜잭션 처리는 메시지를 상태 변경 및 영수증으로 변환하는 다단계 파이프라인을 따릅니다. 프로세스는 블록 수준 처리를 위한 StateProcessor와 개별 트랜잭션 실행을 위한 StateTransition에 의해 조정됩니다.

고수준 처리 흐름

다이어그램: 코드 엔티티가 있는 트랜잭션 실행 파이프라인

핵심 컴포넌트

StateProcessor

StateProcessor는 블록 수준 트랜잭션 처리를 처리합니다. 블록의 모든 트랜잭션을 반복하고 순차적으로 적용하며 최종화를 위해 합의 엔진과 조정합니다.
ComponentTypePurpose
config*params.ChainConfigChain configuration for fork rules
bc*BlockChainAccess to canonical chain state
engineconsensus.EngineConsensus engine for rewards and finalization
주요 메서드: Process(block, statedb, cfg) -> (receipts, logs, gasUsed, error) 메서드는 다음을 수행합니다:
  • 헤더 정보가 있는 EVM 블록 컨텍스트 생성
  • 트랜잭션 반복, 각각을 Message로 변환
  • 각 트랜잭션에 대해 applyTransaction() 호출
  • 합의별 로직을 위해 engine.Finalize() 호출

StateTransition

StateTransition 구조체는 현재 상태에 대해 단일 트랜잭션을 실행하는 로직을 캡슐화합니다. 가스 계정, 사전 검사, EVM 호출, 오류 처리를 관리합니다.

트랜잭션 검증 및 사전 검사

실행 전에 트랜잭션은 StateTransition.preCheck() 메서드에서 광범위한 검증을 거칩니다. 이는 상태 변경이 발생하기 전에 합의 규칙이 충족되도록 보장합니다.

주요 검증 검사

CheckMethodPurposeErrors
Noncestate.GetNonce(msg.From)Ensures transaction orderingErrNonceTooLow, ErrNonceTooHigh
Sender Accountstate.GetCode(msg.From)Verifies sender is EOAErrSenderNoEOA
Gas PricingGasFeeCap >= GasTipCap >= BaseFeeValidates EIP-1559ErrFeeCapTooLow, ErrTipAboveFeeCap
Authorization ListValidate EIP-7702Checks signaturesErrAuthorizationInvalidSignature
Gas PurchasebuyGas()Reserves gas upfrontErrInsufficientFunds

가스 관리

StableNet의 가스 관리는 선불 구매, 고유 가스 공제, 실행 후 환불의 세 단계로 구성됩니다.

가스 구매

StateTransition.buyGas()는 선택적 수수료 위임이 있는 선불 가스 지불을 처리합니다.

고유 가스

IntrinsicGas()는 실행 전 기본 가스 비용을 계산합니다.

가스 환불

StateTransition.refundGas()는 사용하지 않은 가스를 환불합니다.

EVM 실행

검증과 가스 구매 후 StateTransition.TransitionDb()는 EVM을 호출해 트랜잭션을 실행합니다.

EVM 구조

FieldTypePurpose
Contextvm.BlockContextBlock metadata
TxContextvm.TxContextTransaction metadata
StateDBvm.StateDBState interface
interpreter*EVMInterpreterBytecode interpreter

StableNet 특화 기능

블랙리스트 적용

Anzeon 활성화 시 블랙리스트 주소는 실행 전·중 차단됩니다.

가스 팁 거버넌스

승인되지 않은 계정에는 거버넌스 기반 최소 가스 팁이 적용됩니다.

수수료 위임

제3자 계정이 가스를 지불할 수 있으며 환불도 해당 계정으로 처리됩니다.

오류 처리

오류는 사전 실행 합의 오류와 실행 중 EVM 오류로 구분됩니다.

성능 고려사항

  • 스택 및 메모리 풀 사용
  • StateDB 스냅샷 기반 롤백
  • 가스 계산 최적화

요약

StableNet의 트랜잭션 처리는 검증 → 가스 구매 → EVM 실행 → 상태 반영 → 환불 → 영수증 생성의 흐름을 따르며, 거버넌스 기반 가스 정책, 수수료 위임, EIP-7702 등 확장 기능을 포함합니다.