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