Back to

package consensusfsm

Latest Go to latest
Published: May 14, 2020 | License: Apache-2.0 | Module:



const (

	// BackdoorEvent indicates a backdoor event type
	BackdoorEvent fsm.EventType = "E_BACKDOOR"

	// InitState refers the initial state of the consensus fsm
	InitState = sPrepare


var (
	// ErrEvtCast indicates the error of casting the event
	ErrEvtCast = errors.New("error when casting the event")
	// ErrMsgCast indicates the error of casting to endorsed message
	ErrMsgCast = errors.New("error when casting to endorsed message")
	// ErrEvtConvert indicates the error of converting the event from/to the proto message
	ErrEvtConvert = errors.New("error when converting the event from/to the proto message")
	// ErrEvtType represents an unexpected event type error
	ErrEvtType = errors.New("error when check the event type")
	// ErrOldCalibrateEvt indicates the error of ignoring old calibrate event
	ErrOldCalibrateEvt = errors.New("ignore old calibrate event")

type ConsensusConfig

type ConsensusConfig interface {
	EventChanSize() uint
	UnmatchedEventTTL(uint64) time.Duration
	UnmatchedEventInterval(uint64) time.Duration
	AcceptBlockTTL(uint64) time.Duration
	AcceptProposalEndorsementTTL(uint64) time.Duration
	AcceptLockEndorsementTTL(uint64) time.Duration
	CommitTTL(uint64) time.Duration
	BlockInterval(uint64) time.Duration
	Delay(uint64) time.Duration

ConsensusConfig defines a set of time durations used in fsm

func NewConsensusConfig

func NewConsensusConfig(cfg config.Config) ConsensusConfig

NewConsensusConfig creates a ConsensusConfig out of config.

type ConsensusEvent

type ConsensusEvent struct {
	// contains filtered or unexported fields

ConsensusEvent defines the event used in the fsm

func NewConsensusEvent

func NewConsensusEvent(
	eventType fsm.EventType,
	data interface{},
	height uint64,
	round uint32,
	creationTime time.Time,
) *ConsensusEvent

NewConsensusEvent creates a new consensus event

func (*ConsensusEvent) Data

func (e *ConsensusEvent) Data() interface{}

Data returns the data of the event

func (*ConsensusEvent) Height

func (e *ConsensusEvent) Height() uint64

Height is the height of the event

func (*ConsensusEvent) Round

func (e *ConsensusEvent) Round() uint32

Round is the round of the event

func (*ConsensusEvent) Timestamp

func (e *ConsensusEvent) Timestamp() time.Time

Timestamp is the creation time of the event

func (*ConsensusEvent) Type

func (e *ConsensusEvent) Type() fsm.EventType

Type returns the event type

type ConsensusFSM

type ConsensusFSM struct {
	// contains filtered or unexported fields

ConsensusFSM wraps over the general purpose FSM and implements the consensus logic

func NewConsensusFSM

func NewConsensusFSM(ctx Context, clock clock.Clock) (*ConsensusFSM, error)

NewConsensusFSM returns a new fsm

func (*ConsensusFSM) BackToPrepare

func (m *ConsensusFSM) BackToPrepare(delay time.Duration) (fsm.State, error)

BackToPrepare produces an ePrepare event after delay

func (*ConsensusFSM) Calibrate

func (m *ConsensusFSM) Calibrate(height uint64)

Calibrate calibrates the state if necessary

func (*ConsensusFSM) CurrentState

func (m *ConsensusFSM) CurrentState() fsm.State

CurrentState returns the current state

func (*ConsensusFSM) NumPendingEvents

func (m *ConsensusFSM) NumPendingEvents() int

NumPendingEvents returns the number of pending events

func (*ConsensusFSM) ProduceReceiveBlockEvent

func (m *ConsensusFSM) ProduceReceiveBlockEvent(block interface{})

ProduceReceiveBlockEvent produces an eReceiveBlock event after delay

func (*ConsensusFSM) ProduceReceiveLockEndorsementEvent

func (m *ConsensusFSM) ProduceReceiveLockEndorsementEvent(vote interface{})

ProduceReceiveLockEndorsementEvent produces an eReceiveLockEndorsement event right away

func (*ConsensusFSM) ProduceReceivePreCommitEndorsementEvent

func (m *ConsensusFSM) ProduceReceivePreCommitEndorsementEvent(vote interface{})

ProduceReceivePreCommitEndorsementEvent produces an eReceivePreCommitEndorsement event right away

func (*ConsensusFSM) ProduceReceiveProposalEndorsementEvent

func (m *ConsensusFSM) ProduceReceiveProposalEndorsementEvent(vote interface{})

ProduceReceiveProposalEndorsementEvent produces an eReceiveProposalEndorsement event right away

func (*ConsensusFSM) Start

func (m *ConsensusFSM) Start(c context.Context) error

Start starts the fsm and get in initial state

func (*ConsensusFSM) Stop

func (m *ConsensusFSM) Stop(_ context.Context) error

Stop stops the consensus fsm

type Context

type Context interface {
	Active() bool
	IsStaleEvent(*ConsensusEvent) bool
	IsFutureEvent(*ConsensusEvent) bool
	IsStaleUnmatchedEvent(*ConsensusEvent) bool

	Logger() *zap.Logger
	Height() uint64

	NewConsensusEvent(fsm.EventType, interface{}) *ConsensusEvent
	NewBackdoorEvt(fsm.State) *ConsensusEvent


	Prepare() error
	IsDelegate() bool
	Proposal() (interface{}, error)
	WaitUntilRoundStart() time.Duration
	PreCommitEndorsement() interface{}
	NewProposalEndorsement(interface{}) (interface{}, error)
	NewLockEndorsement(interface{}) (interface{}, error)
	NewPreCommitEndorsement(interface{}) (interface{}, error)
	Commit(interface{}) (bool, error)

Context defines the context of the fsm

type EndorsedMessage

type EndorsedMessage interface {
	Endorsement() *endorsement.Endorsement
	Message() interface{}

EndorsedMessage defines a message with endorsement

Documentation was rendered with GOOS=linux and GOARCH=amd64.

Jump to identifier

Keyboard shortcuts

? : This menu
f or F : Jump to identifier