kona-engine crate provides a modular execution engine implementation for the OP Stack rollup node. It serves as the bridge between the rollup protocol and the execution layer (EL), managing Engine API interactions through a sophisticated task queue system.
Architecture Overview
The execution engine is built around several key components:- Engine Task Queue: A priority-ordered queue that manages Engine API operations
- Trait Abstractions: Extensible interfaces for tasks, errors, and state management
- Engine Client: HTTP client for communicating with the execution layer
- Actor Integration: Service layer integration through the
EngineActor
Core Trait Abstractions
EngineTaskExt
TheEngineTaskExt trait defines the interface for all engine tasks:
- Atomic operations over the
EngineState - Extensible task implementation for custom operations
- Async execution with proper error handling
EngineTaskError
TheEngineTaskError trait provides sophisticated error handling with severity levels:
Task Queue System
The engine uses a priority-based task queue where tasks are ordered according to OP Stack synchronization requirements:Task Priority (Highest to Lowest)
- ForkchoiceUpdate - Synchronizes forkchoice state
- Build - Builds new blocks (sequencer mode)
- Insert - Inserts unsafe blocks from gossip
- Consolidate - Advances safe chain via derivation
- Finalize - Finalizes L2 blocks
Task Types
SynchronizeTask
Updates the execution layer’s forkchoice state:- Forkchoice synchronization without payload attributes
- Payload building initiation with attributes
- EL sync status management
BuildTask
Builds new blocks in sequencer mode:- Payload building with
engine_forkchoiceUpdated - Payload retrieval with version-specific
engine_getPayloadcalls - Payload insertion and canonicalization
InsertTask
Inserts unsafe blocks received from gossip:ConsolidateTask
Advances the safe chain through derivation:FinalizeTask
Finalizes L2 blocks:Engine State Management
TheEngineState tracks the current state of the execution engine:
Integration with kona-node
Thekona-node service layer integrates the engine through the EngineActor:
Actor Pattern
TheEngineActor implements the NodeActor trait:
Communication Channels
TheEngineActor receives input through multiple channels:
- attributes_rx: Payload attributes from derivation
- unsafe_block_rx: Unsafe blocks from gossip
- reset_request_rx: Reset requests
- inbound_queries: Engine state queries
- runtime_config_rx: Runtime configuration updates
- build_request_rx: Block building requests (sequencer mode only)
Engine Queries
The engine supports queries for:Usage Patterns
Basic Engine Setup
Adding Tasks
Draining the Queue
Error Handling and Recovery
The engine provides robust error handling through:Severity-Based Recovery
- Temporary errors: Automatically retried
- Critical errors: Propagated to the actor
- Reset errors: Trigger derivation pipeline reset
- Flush errors: Trigger derivation pipeline flush
State Consistency
Tasks operate atomically on theEngineState, ensuring consistency even during error conditions.
Version Support
The engine automatically selects appropriate Engine API versions based on hardfork activation:- Pre-Ecotone: Uses
engine_newPayloadV2andengine_getPayloadV2 - Post-Ecotone: Uses
engine_newPayloadV3andengine_getPayloadV3 - Post-Isthmus: Uses
engine_newPayloadV4andengine_getPayloadV4
Metrics and Observability
When themetrics feature is enabled, the engine provides comprehensive metrics for:
- Task execution times
- Error rates by task type
- Engine state transitions
- API call latencies
Extensibility
The trait-based architecture allows for:- Custom task implementations via
EngineTaskExt - Custom error handling via
EngineTaskError - Custom state management extensions
- Testing and mocking support