engine_controller

package
v1.19.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 25, 2026 License: MIT Imports: 13 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrNoEngineClient = errors.New("engine client not initialized")
	ErrNoRollupConfig = errors.New("rollup config not available")
)
View Source
var (
	ErrRewindNilTarget                  = errors.New("rewind requires a non-nil target payload")
	ErrRewindTargetMismatch             = errors.New("rewind target payload inconsistent with rollup config")
	ErrRewindComputeTargetsFailed       = errors.New("failed to compute rewind targets")
	ErrRewindInsertSyntheticFailed      = errors.New("failed to insert synthetic payload")
	ErrRewindSyntheticPayloadRejected   = errors.New("synthetic payload rejected by engine")
	ErrRewindReinsertCanonicalFailed    = errors.New("failed to re-insert canonical payload")
	ErrRewindCanonicalPayloadRejected   = errors.New("canonical payload rejected by engine on re-insert")
	ErrRewindFCUSyntheticFailed         = errors.New("failed to FCU to synthetic block")
	ErrRewindFCUTargetFailed            = errors.New("failed to FCU to target block")
	ErrRewindFCURejected                = errors.New("forkchoice update rejected by engine")
	ErrRewindTimestampToBlockConversion = errors.New("failed to convert timestamp to block number")
	ErrRewindOverFinalizedHead          = errors.New("cannot rewind over finalized head")
	ErrRewindFCUHeadMismatch            = errors.New("FCU head did not converge to expected value")
	ErrRewindCurrentUnsafeFailed        = errors.New("failed to get current unsafe block")
)

Functions

This section is empty.

Types

type EngineController

type EngineController interface {
	// L2BlockRefByLabel returns the L2 block reference for the given block label.
	L2BlockRefByLabel(ctx context.Context, label eth.BlockLabel) (eth.L2BlockRef, error)
	// L2BlockRefByNumber returns the L2 block reference for the given block number.
	L2BlockRefByNumber(ctx context.Context, num uint64) (eth.L2BlockRef, error)
	// OutputV0AtBlockNumber returns the output preimage for the given L2 block number.
	OutputV0AtBlockNumber(ctx context.Context, num uint64) (*eth.OutputV0, error)
	// OutputV0ByBlockHash returns the output preimage for the given L2 block
	// hash. Returns ethereum.NotFound if the EL no longer has the block at
	// that hash on its canonical chain.
	OutputV0ByBlockHash(ctx context.Context, blockHash common.Hash) (*eth.OutputV0, error)
	// PayloadByHash returns the execution payload envelope for the given block hash. Used by
	// build paths to capture the canonical target payload before recording a rewind operation
	// in the WAL.
	PayloadByHash(ctx context.Context, hash common.Hash) (*eth.ExecutionPayloadEnvelope, error)
	// PayloadByNumber returns the canonical execution payload envelope for the given block number.
	PayloadByNumber(ctx context.Context, number uint64) (*eth.ExecutionPayloadEnvelope, error)
	// Rewind rewinds the L2 execution layer to the supplied target block. The target payload
	// must come from durable storage (the supernode WAL) — the engine controller does not
	// consult the live EL to discover the target.
	Rewind(ctx context.Context, target *eth.ExecutionPayloadEnvelope) error
	// FetchReceipts fetches the receipts for a given block by hash.
	FetchReceipts(ctx context.Context, blockHash common.Hash) (eth.BlockInfo, types.Receipts, error)
	// Close releases any underlying RPC resources.
	Close() error
}

EngineController abstracts access to the L2 execution layer

func NewEngineControllerFromConfig

func NewEngineControllerFromConfig(ctx context.Context, log gethlog.Logger, vncfg *opnodecfg.Config) (EngineController, error)

NewEngineControllerFromConfig builds an engine client from the op-node L2 endpoint config. This creates a separate connection (not passed as an override to op-node).

The connection is dialed lazily: setup never touches the network, so the controller is usable even when the L2 engine is unreachable at startup. The underlying client dials on first use and reconnects on demand, which is what lets interop recover once the EL comes up without restarting the virtual node. Lazy is applied to a copy of the endpoint config so the virtual node, which shares vncfg.L2, keeps its eager-dial behavior.

func NewEngineControllerWithL2

func NewEngineControllerWithL2(l2 l2Provider) EngineController

NewEngineControllerWithL2 wraps an existing L2 provider.

func NewEngineControllerWithL2AndRollup

func NewEngineControllerWithL2AndRollup(l2 l2Provider, rollup *rollup.Config) EngineController

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL