l2

package
v1.18.1 Latest Latest
Warning

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

Go to latest
Published: May 14, 2026 License: MIT, MIT Imports: 35 Imported by: 0

Documentation

Index

Constants

View Source
const (
	HintL2BlockHeader     = "l2-block-header"
	HintL2Transactions    = "l2-transactions"
	HintL2Receipts        = "l2-receipts"
	HintL2Code            = "l2-code"
	HintL2StateNode       = "l2-state-node"
	HintL2Output          = "l2-output"
	HintL2BlockData       = "l2-block-data"
	HintAgreedPrestate    = "agreed-pre-state"
	HintL2AccountProof    = "l2-account-proof"
	HintL2PayloadWitness  = "l2-payload-witness"
	HintL2BlockHashLookup = "l2-block-hash-lookup"
)

Variables

View Source
var (
	ErrInvalidHeader         = errors.New("invalid header")
	ErrUnsupportedAPIVersion = errors.New("unsupported api version")
	ErrUnknownLabel          = errors.New("unknown label")
)
View Source
var (
	ErrUnsupportedL2Output = errors.New("unsupported l2 output version")
	ErrUnexpectedBlockHash = errors.New("unexpected block hash")
)
View Source
var ErrInvalidKeyLength = errors.New("pre-images must be identified by 32-byte hash keys")

Functions

This section is empty.

Types

type AccountProofHint

type AccountProofHint struct {
	BlockHash common.Hash
	Address   common.Address
	ChainID   eth.ChainID
}

func (AccountProofHint) Hint

func (l AccountProofHint) Hint() string

type AgreedPrestateHint

type AgreedPrestateHint common.Hash

func (AgreedPrestateHint) Hint

func (l AgreedPrestateHint) Hint() string

type BlockByHashFn

type BlockByHashFn func(hash common.Hash) *types.Block

type BlockHashLookupHint

type BlockHashLookupHint struct {
	BlockNumber   uint64
	HeadBlockHash common.Hash
	ChainID       eth.ChainID
}

func (BlockHashLookupHint) Hint

func (b BlockHashLookupHint) Hint() string

func (BlockHashLookupHint) String

func (b BlockHashLookupHint) String() string

type BlockHeaderHint

type BlockHeaderHint HashAndChainID

func (BlockHeaderHint) Hint

func (l BlockHeaderHint) Hint() string

type CachingOracle

type CachingOracle struct {
	// contains filtered or unexported fields
}

func NewCachingOracle

func NewCachingOracle(oracle Oracle) *CachingOracle

func (*CachingOracle) BlockByHash

func (o *CachingOracle) BlockByHash(blockHash common.Hash, chainID eth.ChainID) *types.Block

func (*CachingOracle) BlockDataByHash

func (o *CachingOracle) BlockDataByHash(agreedBlockHash, blockHash common.Hash, chainID eth.ChainID) *types.Block

func (*CachingOracle) CodeByHash

func (o *CachingOracle) CodeByHash(codeHash common.Hash, chainID eth.ChainID) []byte

func (*CachingOracle) Hinter

func (o *CachingOracle) Hinter() l2Types.OracleHinter

func (*CachingOracle) NodeByHash

func (o *CachingOracle) NodeByHash(nodeHash common.Hash, chainID eth.ChainID) []byte

func (*CachingOracle) OutputByRoot

func (o *CachingOracle) OutputByRoot(root common.Hash, chainID eth.ChainID) eth.Output

func (*CachingOracle) ReceiptsByBlockHash

func (o *CachingOracle) ReceiptsByBlockHash(blockHash common.Hash, chainID eth.ChainID) (*types.Block, types.Receipts)

func (*CachingOracle) TransitionStateByRoot

func (o *CachingOracle) TransitionStateByRoot(root common.Hash) *interopTypes.TransitionState

type CanonicalBlockHeaderOracle

type CanonicalBlockHeaderOracle struct {
	// contains filtered or unexported fields
}

func NewCanonicalBlockHeaderOracle

func NewCanonicalBlockHeaderOracle(head *types.Header, blockByHashFn BlockByHashFn) *CanonicalBlockHeaderOracle

func (*CanonicalBlockHeaderOracle) CurrentHeader

func (o *CanonicalBlockHeaderOracle) CurrentHeader() *types.Header

func (*CanonicalBlockHeaderOracle) GetHeaderByNumber

func (o *CanonicalBlockHeaderOracle) GetHeaderByNumber(n uint64) *types.Header

GetHeaderByNumber walks back from the current head to the requested block number

func (*CanonicalBlockHeaderOracle) SetCanonical

func (o *CanonicalBlockHeaderOracle) SetCanonical(head *types.Header) common.Hash

type CodeHint

type CodeHint HashAndChainID

func (CodeHint) Hint

func (l CodeHint) Hint() string

type FastCanonicalBlockHeaderOracle

type FastCanonicalBlockHeaderOracle struct {
	// contains filtered or unexported fields
}

func NewFastCanonicalBlockHeaderOracle

func NewFastCanonicalBlockHeaderOracle(
	head *types.Header,
	blockByHashFn BlockByHashFn,
	chainCfg *params.ChainConfig,
	stateOracle StateOracle,
	kvdb KeyValueStore,
	fallback *CanonicalBlockHeaderOracle,
) *FastCanonicalBlockHeaderOracle

func (*FastCanonicalBlockHeaderOracle) CurrentHeader

func (o *FastCanonicalBlockHeaderOracle) CurrentHeader() *types.Header

func (*FastCanonicalBlockHeaderOracle) GetHeaderByNumber

func (o *FastCanonicalBlockHeaderOracle) GetHeaderByNumber(n uint64) *types.Header

func (*FastCanonicalBlockHeaderOracle) SetCanonical

func (o *FastCanonicalBlockHeaderOracle) SetCanonical(head *types.Header) common.Hash

type HashAndChainID

type HashAndChainID struct {
	Hash    common.Hash
	ChainID eth.ChainID
}

func (HashAndChainID) Marshal

func (h HashAndChainID) Marshal() []byte

type KeyValueStore

type KeyValueStore interface {
	ethdb.KeyValueReader
	ethdb.Batcher
	// Put inserts the given value into the key-value data store.
	Put(key []byte, value []byte) error
}

KeyValueStore is a subset of the ethdb.KeyValueStore interface that's required for block processing.

type L2BlockDataHint

type L2BlockDataHint struct {
	AgreedBlockHash common.Hash
	BlockHash       common.Hash
	ChainID         eth.ChainID
}

func (L2BlockDataHint) Hint

func (l L2BlockDataHint) Hint() string

type L2OutputHint

type L2OutputHint HashAndChainID

func (L2OutputHint) Hint

func (l L2OutputHint) Hint() string

type LegacyBlockHeaderHint

type LegacyBlockHeaderHint common.Hash

func (LegacyBlockHeaderHint) Hint

func (l LegacyBlockHeaderHint) Hint() string

type LegacyCodeHint

type LegacyCodeHint common.Hash

func (LegacyCodeHint) Hint

func (l LegacyCodeHint) Hint() string

type LegacyL2OutputHint

type LegacyL2OutputHint common.Hash

func (LegacyL2OutputHint) Hint

func (l LegacyL2OutputHint) Hint() string

type LegacyStateNodeHint

type LegacyStateNodeHint common.Hash

func (LegacyStateNodeHint) Hint

func (l LegacyStateNodeHint) Hint() string

type LegacyTransactionsHint

type LegacyTransactionsHint common.Hash

func (LegacyTransactionsHint) Hint

func (l LegacyTransactionsHint) Hint() string

type Oracle

type Oracle interface {
	StateOracle

	// BlockByHash retrieves the block with the given hash.
	BlockByHash(blockHash common.Hash, chainID eth.ChainID) *types.Block

	OutputByRoot(root common.Hash, chainID eth.ChainID) eth.Output

	// BlockDataByHash retrieves the block, including all data used to construct it.
	BlockDataByHash(agreedBlockHash, blockHash common.Hash, chainID eth.ChainID) *types.Block

	TransitionStateByRoot(root common.Hash) *interopTypes.TransitionState

	ReceiptsByBlockHash(blockHash common.Hash, chainID eth.ChainID) (*types.Block, types.Receipts)
}

Oracle defines the high-level API used to retrieve L2 data. The returned data is always the preimage of the requested hash.

type OracleBackedL2Chain

type OracleBackedL2Chain struct {
	// contains filtered or unexported fields
}

func NewOracleBackedL2Chain

func NewOracleBackedL2Chain(
	logger log.Logger,
	oracle Oracle,
	precompileOracle engineapi.PrecompileOracle,
	chainCfg *params.ChainConfig,
	l2OutputRoot common.Hash,
	db KeyValueStore,
) (*OracleBackedL2Chain, error)

func NewOracleBackedL2ChainFromHead

func NewOracleBackedL2ChainFromHead(
	logger log.Logger,
	oracle Oracle,
	precompileOracle engineapi.PrecompileOracle,
	chainCfg *params.ChainConfig,
	head *types.Block,
	db KeyValueStore,
) *OracleBackedL2Chain

func (*OracleBackedL2Chain) AssembleAndInsertBlockWithoutSetHead

func (o *OracleBackedL2Chain) AssembleAndInsertBlockWithoutSetHead(processor *engineapi.BlockProcessor) (*types.Block, error)

func (*OracleBackedL2Chain) Config

func (o *OracleBackedL2Chain) Config() *params.ChainConfig

func (*OracleBackedL2Chain) CurrentFinalBlock

func (o *OracleBackedL2Chain) CurrentFinalBlock() *types.Header

func (*OracleBackedL2Chain) CurrentHeader

func (o *OracleBackedL2Chain) CurrentHeader() *types.Header

func (*OracleBackedL2Chain) CurrentSafeBlock

func (o *OracleBackedL2Chain) CurrentSafeBlock() *types.Header

func (*OracleBackedL2Chain) Engine

func (o *OracleBackedL2Chain) Engine() consensus.Engine

func (*OracleBackedL2Chain) GetBlock

func (o *OracleBackedL2Chain) GetBlock(hash common.Hash, number uint64) *types.Block

func (*OracleBackedL2Chain) GetBlockByHash

func (o *OracleBackedL2Chain) GetBlockByHash(hash common.Hash) *types.Block

func (*OracleBackedL2Chain) GetCanonicalHash

func (o *OracleBackedL2Chain) GetCanonicalHash(n uint64) common.Hash

func (*OracleBackedL2Chain) GetHeader

func (o *OracleBackedL2Chain) GetHeader(hash common.Hash, u uint64) *types.Header

func (*OracleBackedL2Chain) GetHeaderByHash

func (o *OracleBackedL2Chain) GetHeaderByHash(hash common.Hash) *types.Header

func (*OracleBackedL2Chain) GetHeaderByNumber

func (o *OracleBackedL2Chain) GetHeaderByNumber(n uint64) *types.Header

func (*OracleBackedL2Chain) GetReceiptsByBlockHash

func (o *OracleBackedL2Chain) GetReceiptsByBlockHash(hash common.Hash) types.Receipts

func (*OracleBackedL2Chain) GetTd

func (o *OracleBackedL2Chain) GetTd(hash common.Hash, number uint64) *big.Int

func (*OracleBackedL2Chain) GetVMConfig

func (o *OracleBackedL2Chain) GetVMConfig() *vm.Config

func (*OracleBackedL2Chain) HasBlockAndState

func (o *OracleBackedL2Chain) HasBlockAndState(hash common.Hash, number uint64) bool

func (*OracleBackedL2Chain) Hinter

func (*OracleBackedL2Chain) InsertBlockWithoutSetHead

func (o *OracleBackedL2Chain) InsertBlockWithoutSetHead(ctx context.Context, block *types.Block, makeWitness bool) (*stateless.Witness, error)

func (*OracleBackedL2Chain) SetCanonical

func (o *OracleBackedL2Chain) SetCanonical(head *types.Block) (common.Hash, error)

func (*OracleBackedL2Chain) SetFinalized

func (o *OracleBackedL2Chain) SetFinalized(header *types.Header)

func (*OracleBackedL2Chain) SetSafe

func (o *OracleBackedL2Chain) SetSafe(header *types.Header)

func (*OracleBackedL2Chain) StateAt

func (o *OracleBackedL2Chain) StateAt(root common.Hash) (*state.StateDB, error)

type OracleEngine

type OracleEngine struct {
	// contains filtered or unexported fields
}

func NewOracleEngine

func NewOracleEngine(rollupCfg *rollup.Config, logger log.Logger, backend engineapi.CachingEngineBackend, hinter l2Types.OracleHinter) *OracleEngine

func (*OracleEngine) ForkchoiceUpdate

func (*OracleEngine) GetPayload

func (o *OracleEngine) GetPayload(ctx context.Context, payloadInfo eth.PayloadInfo) (*eth.ExecutionPayloadEnvelope, error)

func (*OracleEngine) L2BlockRefByHash

func (o *OracleEngine) L2BlockRefByHash(ctx context.Context, l2Hash common.Hash) (eth.L2BlockRef, error)

func (*OracleEngine) L2BlockRefByLabel

func (o *OracleEngine) L2BlockRefByLabel(ctx context.Context, label eth.BlockLabel) (eth.L2BlockRef, error)

func (*OracleEngine) L2BlockRefByNumber

func (o *OracleEngine) L2BlockRefByNumber(ctx context.Context, n uint64) (eth.L2BlockRef, error)

func (*OracleEngine) L2OutputAtBlockHash

func (o *OracleEngine) L2OutputAtBlockHash(blockHash common.Hash) (*eth.OutputV0, error)

L2OutputAtBlockHash returns the L2 output at the specified block hash

func (*OracleEngine) L2OutputRoot

func (o *OracleEngine) L2OutputRoot(l2ClaimBlockNum uint64) (common.Hash, eth.Bytes32, error)

L2OutputRoot returns the block hash and output root at the specified block number

func (*OracleEngine) NewPayload

func (o *OracleEngine) NewPayload(ctx context.Context, payload *eth.ExecutionPayload, parentBeaconBlockRoot *common.Hash) (*eth.PayloadStatusV1, error)

func (*OracleEngine) PayloadByHash

func (o *OracleEngine) PayloadByHash(ctx context.Context, hash common.Hash) (*eth.ExecutionPayloadEnvelope, error)

func (*OracleEngine) PayloadByNumber

func (o *OracleEngine) PayloadByNumber(ctx context.Context, n uint64) (*eth.ExecutionPayloadEnvelope, error)

func (*OracleEngine) SystemConfigByL2Hash

func (o *OracleEngine) SystemConfigByL2Hash(ctx context.Context, hash common.Hash) (eth.SystemConfig, error)

type OracleKeyValueStore

type OracleKeyValueStore struct {
	// contains filtered or unexported fields
}

func NewOracleBackedDB

func NewOracleBackedDB(kv KeyValueStore, oracle StateOracle, chainID eth.ChainID) *OracleKeyValueStore

func (*OracleKeyValueStore) Close

func (o *OracleKeyValueStore) Close() error

func (*OracleKeyValueStore) Compact

func (o *OracleKeyValueStore) Compact(start []byte, limit []byte) error

func (*OracleKeyValueStore) Delete

func (o *OracleKeyValueStore) Delete(key []byte) error

func (*OracleKeyValueStore) DeleteRange

func (o *OracleKeyValueStore) DeleteRange(start, end []byte) error

func (*OracleKeyValueStore) Get

func (o *OracleKeyValueStore) Get(key []byte) ([]byte, error)

func (*OracleKeyValueStore) Has

func (o *OracleKeyValueStore) Has(key []byte) (bool, error)

func (*OracleKeyValueStore) NewBatch

func (o *OracleKeyValueStore) NewBatch() ethdb.Batch

func (*OracleKeyValueStore) NewBatchWithSize

func (o *OracleKeyValueStore) NewBatchWithSize(size int) ethdb.Batch

func (*OracleKeyValueStore) NewIterator

func (o *OracleKeyValueStore) NewIterator(prefix []byte, start []byte) ethdb.Iterator

func (*OracleKeyValueStore) Put

func (o *OracleKeyValueStore) Put(key []byte, value []byte) error

func (*OracleKeyValueStore) Stat

func (o *OracleKeyValueStore) Stat() (string, error)

func (*OracleKeyValueStore) SyncKeyValue

func (o *OracleKeyValueStore) SyncKeyValue() error

type PayloadWitnessHint

type PayloadWitnessHint struct {
	ParentBlockHash   common.Hash            `json:"parentBlockHash"`
	PayloadAttributes *eth.PayloadAttributes `json:"payloadAttributes"`
	ChainID           *eth.ChainID           `json:"chainID,omitempty"`
}

func (PayloadWitnessHint) Hint

func (l PayloadWitnessHint) Hint() string

type PreimageOracle

type PreimageOracle struct {
	// contains filtered or unexported fields
}

PreimageOracle implements Oracle using by interfacing with the pure preimage.Oracle to fetch pre-images to decode into the requested data.

func NewPreimageOracle

func NewPreimageOracle(raw preimage.Oracle, hint preimage.Hinter, hintL2ChainIDs bool) *PreimageOracle

func (*PreimageOracle) BlockByHash

func (p *PreimageOracle) BlockByHash(blockHash common.Hash, chainID eth.ChainID) *types.Block

func (*PreimageOracle) BlockDataByHash

func (p *PreimageOracle) BlockDataByHash(agreedBlockHash, blockHash common.Hash, chainID eth.ChainID) *types.Block

func (*PreimageOracle) CodeByHash

func (p *PreimageOracle) CodeByHash(codeHash common.Hash, chainID eth.ChainID) []byte

func (*PreimageOracle) Hinter

func (p *PreimageOracle) Hinter() l2Types.OracleHinter

func (*PreimageOracle) LoadTransactions

func (p *PreimageOracle) LoadTransactions(blockHash common.Hash, txHash common.Hash, chainID eth.ChainID) []*types.Transaction

func (*PreimageOracle) NodeByHash

func (p *PreimageOracle) NodeByHash(nodeHash common.Hash, chainID eth.ChainID) []byte

func (*PreimageOracle) OutputByRoot

func (p *PreimageOracle) OutputByRoot(l2OutputRoot common.Hash, chainID eth.ChainID) eth.Output

func (*PreimageOracle) ReceiptsByBlockHash

func (p *PreimageOracle) ReceiptsByBlockHash(blockHash common.Hash, chainID eth.ChainID) (*types.Block, types.Receipts)

func (*PreimageOracle) TransitionStateByRoot

func (p *PreimageOracle) TransitionStateByRoot(root common.Hash) *interopTypes.TransitionState

type PreimageOracleHinter

type PreimageOracleHinter struct {
	// contains filtered or unexported fields
}

func NewPreimageHinter

func NewPreimageHinter(hint preimage.Hinter) *PreimageOracleHinter

func (*PreimageOracleHinter) HintBlockExecution

func (p *PreimageOracleHinter) HintBlockExecution(parentBlockHash common.Hash, attr eth.PayloadAttributes, chainID eth.ChainID)

func (*PreimageOracleHinter) HintBlockHashLookup

func (p *PreimageOracleHinter) HintBlockHashLookup(blockNumber uint64, headBlockHash common.Hash, l2ChainID eth.ChainID)

func (*PreimageOracleHinter) HintWithdrawalsRoot

func (p *PreimageOracleHinter) HintWithdrawalsRoot(blockHash common.Hash, chainID eth.ChainID)

HintWithdrawalsRoot hints that we're about to fetch the storage root of the L2ToL1MessagePasser contract.

type ReceiptsHint

type ReceiptsHint HashAndChainID

func (ReceiptsHint) Hint

func (l ReceiptsHint) Hint() string

type StateNodeHint

type StateNodeHint HashAndChainID

func (StateNodeHint) Hint

func (l StateNodeHint) Hint() string

type StateOracle

type StateOracle interface {
	// NodeByHash retrieves the merkle-patricia trie node pre-image for a given hash.
	// Trie nodes may be from the world state trie or any account storage trie.
	// Contract code is not stored as part of the trie and must be retrieved via CodeByHash
	NodeByHash(nodeHash common.Hash, chainID eth.ChainID) []byte

	// CodeByHash retrieves the contract code pre-image for a given hash.
	// codeHash should be retrieved from the world state account for a contract.
	CodeByHash(codeHash common.Hash, chainID eth.ChainID) []byte

	// Hinter provides an optional interface to provide proactive hints.
	Hinter() l2Types.OracleHinter
}

StateOracle defines the high-level API used to retrieve L2 state data pre-images The returned data is always the preimage of the requested hash.

type TransactionsHint

type TransactionsHint HashAndChainID

func (TransactionsHint) Hint

func (l TransactionsHint) Hint() string

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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