consensus

package
v1.16.20 Latest Latest
Warning

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

Go to latest
Published: Dec 4, 2025 License: GPL-3.0, LGPL-3.0 Imports: 11 Imported by: 6

Documentation

Overview

Package consensus implements different Ethereum consensus engines.

Index

Constants

This section is empty.

Variables

View Source
var (
	// ErrUnknownAncestor is returned when validating a block requires an ancestor
	// that is unknown.
	ErrUnknownAncestor = errors.New("unknown ancestor")

	// ErrPrunedAncestor is returned when validating a block requires an ancestor
	// that is known, but the state of which is not available.
	ErrPrunedAncestor = errors.New("pruned ancestor")

	// ErrFutureBlock is returned when a block's timestamp is in the future according
	// to the current node.
	ErrFutureBlock = errors.New("block in the future")

	// ErrInvalidNumber is returned if a block's number doesn't equal its parent's
	// plus one.
	ErrInvalidNumber = errors.New("invalid block number")
)

Functions

func GetChainID added in v0.8.8

func GetChainID(ctx context.Context) ids.ID

GetChainID retrieves the chain ID from the context

func GetNetworkID added in v0.8.8

func GetNetworkID(ctx context.Context) uint32

GetNetworkID retrieves the network ID from the context

func GetSubnetID added in v0.8.8

func GetSubnetID(ctx context.Context) ids.ID

GetSubnetID retrieves the subnet ID from the context

func GetValidator added in v0.8.8

GetValidator retrieves the validator state from the context Delegates to the external consensus context package for consistency

func WithChainID added in v0.8.8

func WithChainID(ctx context.Context, chainID ids.ID) context.Context

WithChainID adds a chain ID to the context

func WithNetworkID added in v0.8.8

func WithNetworkID(ctx context.Context, networkID uint32) context.Context

WithNetworkID adds a network ID to the context

func WithSubnetID added in v0.8.8

func WithSubnetID(ctx context.Context, subnetID ids.ID) context.Context

WithSubnetID adds a subnet ID to the context

func WithValidatorState added in v0.8.8

func WithValidatorState(ctx context.Context, state consensuscontext.ValidatorState) context.Context

WithValidatorState adds a validator state to the context Delegates to the external consensus context package for consistency

func WithWarpSigner added in v0.8.8

func WithWarpSigner(ctx context.Context, signer WarpSigner) context.Context

WithWarpSigner adds a warp signer to the context

Types

type ChainHeaderReader

type ChainHeaderReader interface {
	// Config retrieves the blockchain's chain configuration.
	Config() *params.ChainConfig

	// CurrentHeader retrieves the current header from the local chain.
	CurrentHeader() *types.Header

	// GetHeader retrieves a block header from the database by hash and number.
	GetHeader(hash common.Hash, number uint64) *types.Header

	// GetHeaderByNumber retrieves a block header from the database by number.
	GetHeaderByNumber(number uint64) *types.Header

	// GetHeaderByHash retrieves a block header from the database by its hash.
	GetHeaderByHash(hash common.Hash) *types.Header

	// GetFeeConfigAt retrieves the fee config and last changed block number at block header.
	GetFeeConfigAt(parent *types.Header) (commontype.FeeConfig, *big.Int, error)

	// GetCoinbaseAt retrieves the configured coinbase address at [parent].
	// If fee recipients are allowed, returns true in the second return value and a predefined address in the first value.
	GetCoinbaseAt(parent *types.Header) (common.Address, bool, error)
}

ChainHeaderReader defines a small collection of methods needed to access the local blockchain during header verification.

type ChainReader

type ChainReader interface {
	ChainHeaderReader

	// GetBlock retrieves a block from the database by hash and number.
	GetBlock(hash common.Hash, number uint64) *types.Block
}

ChainReader defines a small collection of methods needed to access the local blockchain during header and/or uncle verification.

type Engine

type Engine interface {
	// Author retrieves the Ethereum address of the account that minted the given
	// block, which may be different from the header's coinbase if a consensus
	// engine is based on signatures.
	Author(header *types.Header) (common.Address, error)

	// VerifyHeader checks whether a header conforms to the consensus rules of a
	// given engine.
	//
	// NOTE: VerifyHeader does not validate the correctness of fields that rely
	// on the contents of the block (as opposed to the current and/or parent
	// header).
	VerifyHeader(chain ChainHeaderReader, header *types.Header) error

	// VerifyUncles verifies that the given block's uncles conform to the consensus
	// rules of a given engine.
	VerifyUncles(chain ChainReader, block *types.Block) error

	// Prepare initializes the consensus fields of a block header according to the
	// rules of a particular engine. The changes are executed inline.
	Prepare(chain ChainHeaderReader, header *types.Header) error

	// Finalize runs any post-transaction state modifications (e.g. block rewards)
	// but does not assemble the block.
	//
	// Note: The block header and state database might be updated to reflect any
	// consensus rules that happen at finalization (e.g. block rewards).
	Finalize(chain ChainHeaderReader, block *types.Block, parent *types.Header, state *state.StateDB, receipts []*types.Receipt) error

	// FinalizeAndAssemble runs any post-transaction state modifications (e.g. block
	// rewards) and assembles the final block.
	//
	// Note: The block header and state database might be updated to reflect any
	// consensus rules that happen at finalization (e.g. block rewards).
	FinalizeAndAssemble(chain ChainHeaderReader, header *types.Header, parent *types.Header, state *state.StateDB, txs []*types.Transaction,
		uncles []*types.Header, receipts []*types.Receipt) (*types.Block, error)

	// CalcDifficulty is the difficulty adjustment algorithm. It returns the difficulty
	// that a new block should have.
	CalcDifficulty(chain ChainHeaderReader, time uint64, parent *types.Header) *big.Int

	// Close terminates any background threads maintained by the consensus engine.
	Close() error
}

Engine is an algorithm agnostic consensus engine.

type WarpSigner added in v0.8.8

type WarpSigner interface {
	PublicKey() *bls.PublicKey
	Sign(msg []byte) (*bls.Signature, error)
	SignProofOfPossession(msg []byte) (*bls.Signature, error)
}

WarpSigner is an interface for signing warp messages

func GetWarpSigner added in v0.8.8

func GetWarpSigner(ctx context.Context) WarpSigner

GetWarpSigner retrieves the warp signer from the context

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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