Documentation ¶
Index ¶
- Constants
- Variables
- func Factory(params *consensus.ConsensusParams) (consensus.Consensus, error)
- func PutIbftExtra(h *types.Header, istanbulExtra *IstanbulExtra) error
- type BaseConsensusMechanism
- type ConsensusMechanism
- type ConsensusMechanismFactory
- type HookType
- type IBFTFork
- type Ibft
- func (i *Ibft) Close() error
- func (i *Ibft) GetBlockCreator(header *types.Header) (types.Address, error)
- func (i *Ibft) GetEpoch(number uint64) uint64
- func (i *Ibft) GetSyncProgression() *progress.Progression
- func (i *Ibft) Initialize() error
- func (i *Ibft) IsLastOfEpoch(number uint64) bool
- func (i *Ibft) PreStateCommit(header *types.Header, txn *state.Transition) error
- func (i *Ibft) Start() error
- func (i *Ibft) VerifyHeader(parent, header *types.Header) error
- type IbftState
- type IstanbulExtra
- type MechanismType
- type MsgType
- type PoAMechanism
- type PoSMechanism
- type Snapshot
- type ValidatorSet
- func (v *ValidatorSet) Add(addr types.Address)
- func (v *ValidatorSet) CalcProposer(round uint64, lastProposer types.Address) types.Address
- func (v *ValidatorSet) Del(addr types.Address)
- func (v *ValidatorSet) Equal(vv *ValidatorSet) bool
- func (v *ValidatorSet) Includes(addr types.Address) bool
- func (v *ValidatorSet) Index(addr types.Address) int
- func (v *ValidatorSet) Len() int
- func (v *ValidatorSet) MaxFaultyNodes() int
- type Vote
Constants ¶
const (
DefaultEpochSize = 100000
)
const IbftKeyName = "validator.key"
Variables ¶
var ( // IstanbulDigest represents a hash of "Istanbul practical byzantine fault tolerance" // to identify whether the block is from Istanbul consensus engine IstanbulDigest = types.StringToHash("0x63746963616c2062797a616e74696e65206661756c7420746f6c6572616e6365") // IstanbulExtraVanity represents a fixed number of extra-data bytes reserved for proposer vanity IstanbulExtraVanity = 32 // IstanbulExtraSeal represents the fixed number of extra-data bytes reserved for proposer seal IstanbulExtraSeal = 65 )
var ( ErrInvalidHookParam = errors.New("invalid IBFT hook param passed in") ErrInvalidMechanismType = errors.New("invalid consensus mechanism type in params") ErrMissingMechanismType = errors.New("missing consensus mechanism type in params") )
var (
ErrInvalidNonce = errors.New("invalid nonce specified")
)
Functions ¶
func Factory ¶
func Factory( params *consensus.ConsensusParams, ) (consensus.Consensus, error)
Factory implements the base consensus Factory method
func PutIbftExtra ¶
func PutIbftExtra(h *types.Header, istanbulExtra *IstanbulExtra) error
PutIbftExtra sets the extra data field in the header to the passed in istanbul extra data
Types ¶
type BaseConsensusMechanism ¶ added in v0.3.0
type BaseConsensusMechanism struct { // Available periods From uint64 To *uint64 // contains filtered or unexported fields }
func (*BaseConsensusMechanism) GetHookMap ¶ added in v0.3.0
func (base *BaseConsensusMechanism) GetHookMap() map[HookType]func(interface{}) error
GetHookMap implements the ConsensusMechanism interface method
func (*BaseConsensusMechanism) GetType ¶ added in v0.3.0
func (base *BaseConsensusMechanism) GetType() MechanismType
GetType implements the ConsensusMechanism interface method
func (*BaseConsensusMechanism) IsInRange ¶ added in v0.3.0
func (base *BaseConsensusMechanism) IsInRange(blockNumber uint64) bool
IsInRange returns indicates if the given blockNumber is between from and to
type ConsensusMechanism ¶
type ConsensusMechanism interface { // GetType returns the type of IBFT consensus mechanism (PoA / PoS) GetType() MechanismType // GetHookMap returns the hooks registered with the specific consensus mechanism GetHookMap() map[HookType]func(interface{}) error // IsAvailable returns whether the corresponding hook is available IsAvailable(hook HookType, height uint64) bool // ShouldWriteTransactions returns whether transactions should be written to a block // from the TxPool ShouldWriteTransactions(blockNumber uint64) bool // contains filtered or unexported methods }
func PoAFactory ¶
func PoAFactory(ibft *Ibft, params *IBFTFork) (ConsensusMechanism, error)
PoAFactory initializes the required data for the Proof of Authority mechanism
func PoSFactory ¶
func PoSFactory(ibft *Ibft, params *IBFTFork) (ConsensusMechanism, error)
PoSFactory initializes the required data for the Proof of Stake mechanism
type ConsensusMechanismFactory ¶
type ConsensusMechanismFactory func(ibft *Ibft, params *IBFTFork) (ConsensusMechanism, error)
ConsensusMechanismFactory is the factory function to create a consensus mechanism
type HookType ¶ added in v0.3.0
type HookType string
const ( // VerifyHeadersHook defines additional checks that need to happen // when verifying the headers VerifyHeadersHook HookType = "VerifyHeadersHook" // ProcessHeadersHook defines additional steps that need to happen // when processing the headers ProcessHeadersHook HookType = "ProcessHeadersHook" // InsertBlockHook defines additional steps that need to happen // when inserting a block into the chain InsertBlockHook HookType = "InsertBlockHook" // CandidateVoteHook defines additional steps that need to happen // when building a block (candidate voting) CandidateVoteHook HookType = "CandidateVoteHook" // AcceptStateLogHook defines what should be logged out as the status // from AcceptState AcceptStateLogHook HookType = "AcceptStateLogHook" // VerifyBlockHook defines the additional verification steps for the PoS mechanism VerifyBlockHook HookType = "VerifyBlockHook" // PreStateCommitHook defines the additional state transition injection PreStateCommitHook HookType = "PreStateCommitHook" // CalculateProposerHook defines what is the next proposer // based on the previous CalculateProposerHook = "CalculateProposerHook" )
type IBFTFork ¶ added in v0.3.0
type IBFTFork struct { Type MechanismType `json:"type"` Deployment *common.JSONNumber `json:"deployment,omitempty"` From common.JSONNumber `json:"from"` To *common.JSONNumber `json:"to,omitempty"` }
IBFT Fork represents setting in params.engine.ibft of genesis.json
func GetIBFTForks ¶ added in v0.3.0
GetIBFTForks returns IBFT fork configurations from chain config
type Ibft ¶
type Ibft struct { Grpc *grpc.Server // gRPC configuration // contains filtered or unexported fields }
Ibft represents the IBFT consensus mechanism object
func (*Ibft) GetBlockCreator ¶
GetBlockCreator retrieves the block signer from the extra data field
func (*Ibft) GetSyncProgression ¶
func (i *Ibft) GetSyncProgression() *progress.Progression
GetSyncProgression gets the latest sync progression, if any
func (*Ibft) IsLastOfEpoch ¶
IsLastOfEpoch checks if the block number is the last of the epoch
func (*Ibft) PreStateCommit ¶ added in v0.3.0
PreStateCommit a hook to be called before finalizing state transition on inserting block
type IstanbulExtra ¶
IstanbulExtra defines the structure of the extra field for Istanbul
func (*IstanbulExtra) MarshalRLPTo ¶
func (i *IstanbulExtra) MarshalRLPTo(dst []byte) []byte
MarshalRLPTo defines the marshal function wrapper for IstanbulExtra
func (*IstanbulExtra) MarshalRLPWith ¶
func (i *IstanbulExtra) MarshalRLPWith(ar *fastrlp.Arena) *fastrlp.Value
MarshalRLPWith defines the marshal function implementation for IstanbulExtra
func (*IstanbulExtra) UnmarshalRLP ¶
func (i *IstanbulExtra) UnmarshalRLP(input []byte) error
UnmarshalRLP defines the unmarshal function wrapper for IstanbulExtra
func (*IstanbulExtra) UnmarshalRLPFrom ¶
UnmarshalRLPFrom defines the unmarshal implementation for IstanbulExtra
type MechanismType ¶
type MechanismType string
const ( // PoA defines the Proof of Authority IBFT type, // where the validator set is changed through voting / pre-set in genesis PoA MechanismType = "PoA" // PoS defines the Proof of Stake IBFT type, // where the validator set it changed through staking on the Staking SC PoS MechanismType = "PoS" )
func ParseType ¶ added in v0.3.0
func ParseType(mechanism string) (MechanismType, error)
ParseType converts a mechanism string representation to a MechanismType
func (MechanismType) String ¶
func (t MechanismType) String() string
String is a helper method for casting a MechanismType to a string representation
type PoAMechanism ¶
type PoAMechanism struct {
BaseConsensusMechanism
}
PoAMechanism defines specific hooks for the Proof of Authority IBFT mechanism
func (*PoAMechanism) IsAvailable ¶ added in v0.3.0
func (poa *PoAMechanism) IsAvailable(hookType HookType, height uint64) bool
IsAvailable returns indicates if mechanism should be called at given height
func (*PoAMechanism) ShouldWriteTransactions ¶
func (poa *PoAMechanism) ShouldWriteTransactions(blockNumber uint64) bool
ShouldWriteTransactions indicates if transactions should be written to a block
type PoSMechanism ¶
type PoSMechanism struct { BaseConsensusMechanism // Params ContractDeployment uint64 // The height when deploying staking contract }
PoSMechanism defines specific hooks for the Proof of Stake IBFT mechanism
func (*PoSMechanism) IsAvailable ¶ added in v0.3.0
func (pos *PoSMechanism) IsAvailable(hookType HookType, height uint64) bool
IsAvailable returns indicates if mechanism should be called at given height
func (*PoSMechanism) ShouldWriteTransactions ¶
func (pos *PoSMechanism) ShouldWriteTransactions(blockNumber uint64) bool
ShouldWriteTransactions indicates if transactions should be written to a block
type Snapshot ¶
type Snapshot struct { // block number when the snapshot was created Number uint64 // block hash when the snapshot was created Hash string // votes casted in chronological order Votes []*Vote // current set of validators Set ValidatorSet }
Snapshot is the current state at a given point in time for validators and votes
func (*Snapshot) Count ¶
Count returns the vote tally. The count increases if the callback function returns true
func (*Snapshot) RemoveVotes ¶
RemoveVotes removes votes from the snapshot, based on the passed in callback
type ValidatorSet ¶
func (*ValidatorSet) Add ¶
func (v *ValidatorSet) Add(addr types.Address)
Add adds a new address to the validator set
func (*ValidatorSet) CalcProposer ¶
CalcProposer calculates the address of the next proposer, from the validator set
func (*ValidatorSet) Del ¶
func (v *ValidatorSet) Del(addr types.Address)
Del removes an address from the validator set
func (*ValidatorSet) Equal ¶
func (v *ValidatorSet) Equal(vv *ValidatorSet) bool
Equal checks if 2 validator sets are equal
func (*ValidatorSet) Includes ¶
func (v *ValidatorSet) Includes(addr types.Address) bool
Includes checks if the address is in the validator set
func (*ValidatorSet) Index ¶
func (v *ValidatorSet) Index(addr types.Address) int
Index returns the index of the passed in address in the validator set. Returns -1 if not found
func (*ValidatorSet) Len ¶
func (v *ValidatorSet) Len() int
Len returns the size of the validator set
func (*ValidatorSet) MaxFaultyNodes ¶
func (v *ValidatorSet) MaxFaultyNodes() int
MaxFaultyNodes returns the maximum number of allowed faulty nodes (F), based on the current validator set