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 net. 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 dnet 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 net'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.
Click to show internal directories.
Click to hide internal directories.