engine

package
v1.10.2 Latest Latest
Warning

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

Go to latest
Published: Jan 29, 2021 License: MIT Imports: 12 Imported by: 1

Documentation

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 it's parent's
	// plus one.
	ErrInvalidNumber = errors.New("invalid block number")

	// ErrViewIDNotMatch is returned if the current viewID is not equal message's viewID
	ErrViewIDNotMatch = errors.New("viewID not match")

	// ErrInvalidConsensusMessage is returned is the consensus message received is invalid
	ErrInvalidConsensusMessage = errors.New("invalid consensus message")
)

Functions

This section is empty.

Types

type ChainReader

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

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

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

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

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

	// ShardID returns shardID
	ShardID() uint32

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

	// ReadShardState retrieves sharding state given the epoch number.
	// This api reads the shard state cached or saved on the chaindb.
	// Thus, only should be used to read the shard state of the current chain.
	ReadShardState(epoch *big.Int) (*shard.State, error)

	// ReadValidatorList retrieves the list of all validators
	ReadValidatorList() ([]common.Address, error)

	// Methods needed for EPoS committee assignment calculation
	committee.StakingCandidatesReader
	// Methods for reading right epoch snapshot
	staking.ValidatorSnapshotReader

	//ReadBlockRewardAccumulator is the block-reward given for block number
	ReadBlockRewardAccumulator(uint64) (*big.Int, error)

	// ReadValidatorStats retrieves the running stats for a validator
	ReadValidatorStats(addr common.Address) (*staking.ValidatorStats, error)

	// SuperCommitteeForNextEpoch calculates the next epoch's supper committee
	// isVerify flag is to indicate which stage
	// to call this function: true (verification stage), false(propose stage)
	SuperCommitteeForNextEpoch(
		beacon ChainReader, header *block.Header, isVerify bool,
	) (*shard.State, error)
}

ChainReader defines a collection of methods needed to access the local blockchain during header and/or uncle verification. Note this reader interface is still in process of being integrated with the BFT consensus.

type Engine

type Engine interface {
	// VerifyHeader checks whether a header conforms to the consensus rules of a
	// given engine. Verifying the seal may be done optionally here, or explicitly
	// via the VerifySeal method.
	VerifyHeader(chain ChainReader, header *block.Header, seal bool) error

	// Similiar to VerifyHeader, which is only for verifying the block headers of one's own chain, this verification
	// is used for verifying "incoming" block header against commit signature and bitmap sent from the other chain cross-shard via libp2p.
	// i.e. this header verification api is more flexible since the caller specifies which commit signature and bitmap to use
	// for verifying the block header, which is necessary for cross-shard block header verification. Example of such is cross-shard transaction.
	// (TODO) For now, when doing cross shard, we need recalcualte the shard state since we don't have shard state of other shards
	VerifyHeaderWithSignature(
		chain ChainReader, header *block.Header,
		commitSig, commitBitmap []byte, reCalculate bool,
	) error

	// VerifyHeaders is similar to VerifyHeader, but verifies a batch of headers
	// concurrently. The method returns a quit channel to abort the operations and
	// a results channel to retrieve the async verifications (the order is that of
	// the input slice).
	VerifyHeaders(
		chain ChainReader, headers []*block.Header, seals []bool,
	) (chan<- struct{}, <-chan error)

	// VerifySeal checks whether the crypto seal on a header is valid according to
	// the consensus rules of the given engine.
	VerifySeal(chain ChainReader, header *block.Header) error

	// VerifyShardState verifies the shard state during epoch transition is valid
	VerifyShardState(chain ChainReader, beacon ChainReader, header *block.Header) error

	// Beaconchain provides the handle for Beaconchain
	Beaconchain() ChainReader

	// SetBeaconchain sets the beaconchain handler on engine
	SetBeaconchain(ChainReader)

	// Finalize 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).
	// sigsReady signal indicates whether the commit sigs are populated in the header object.
	// Finalize() will block on sigsReady signal until the first value is send to the channel.
	Finalize(
		chain ChainReader, header *block.Header,
		state *state.DB, txs []*types.Transaction,
		receipts []*types.Receipt, outcxs []*types.CXReceipt,
		incxs []*types.CXReceiptsProof, stks staking.StakingTransactions,
		doubleSigners slash.Records, sigsReady chan bool, viewID func() uint64,
	) (*types.Block, reward.Reader, error)
}

Engine is an algorithm agnostic consensus engine. Note this engine interface is still in process of being integrated with the BFT consensus.

Jump to

Keyboard shortcuts

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