ibft

package
v0.1.12 Latest Latest
Warning

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

Go to latest
Published: Apr 12, 2022 License: GPL-3.0 Imports: 34 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func CommitMsgValidationPipelineV0 added in v0.1.5

func CommitMsgValidationPipelineV0(identifier []byte, seq uint64, share *storage.Share) pipeline.Pipeline

CommitMsgValidationPipelineV0 is version 0 of commit message validation

func NewInstance

func NewInstance(opts *InstanceOptions) ibft.Instance

NewInstance is the constructor of Instance

func NewInstanceWithState

func NewInstanceWithState(state *proto.State) ibft.Instance

NewInstanceWithState used for testing, not PROD!

func ProcessLateCommitMsg

func ProcessLateCommitMsg(msg *proto.SignedMessage, ibftStorage collections.Iibft, share *storage.Share) (*proto.SignedMessage, error)

ProcessLateCommitMsg tries to aggregate the late commit message to the corresponding decided message

Types

type Instance

type Instance struct {
	ValidatorShare *storage.Share

	ValueCheck     valcheck.ValueCheck
	LeaderSelector leader.Selector
	Config         *proto.InstanceConfig

	Logger *zap.Logger

	// messages
	MsgQueue            *msgqueue.MessageQueue
	PrePrepareMessages  msgcont.MessageContainer
	PrepareMessages     msgcont.MessageContainer
	CommitMessages      msgcont.MessageContainer
	ChangeRoundMessages msgcont.MessageContainer
	// contains filtered or unexported fields
}

Instance defines the instance attributes

func (*Instance) BumpRound

func (i *Instance) BumpRound()

BumpRound is used to set bump round by 1

func (*Instance) ChangeRoundMsgPipeline

func (i *Instance) ChangeRoundMsgPipeline() pipeline.Pipeline

ChangeRoundMsgPipeline - the main change round msg pipeline

func (*Instance) ChangeRoundMsgPipelineV0

func (i *Instance) ChangeRoundMsgPipelineV0() pipeline.Pipeline

ChangeRoundMsgPipelineV0 - genesis version 0

func (*Instance) ChangeRoundMsgValidationPipeline

func (i *Instance) ChangeRoundMsgValidationPipeline() pipeline.Pipeline

ChangeRoundMsgValidationPipeline - the main change round msg validation pipeline

func (*Instance) ChangeRoundMsgValidationPipelineV0

func (i *Instance) ChangeRoundMsgValidationPipelineV0() pipeline.Pipeline

ChangeRoundMsgValidationPipelineV0 - genesis version 0

func (*Instance) ChangeRoundPartialQuorumMsgPipeline

func (i *Instance) ChangeRoundPartialQuorumMsgPipeline() pipeline.Pipeline

ChangeRoundPartialQuorumMsgPipeline returns the pipeline which handles partial change ronud quorum

func (*Instance) CommitMsgPipeline

func (i *Instance) CommitMsgPipeline() pipeline.Pipeline

CommitMsgPipeline - the main commit msg pipeline

func (*Instance) CommitMsgPipelineV0

func (i *Instance) CommitMsgPipelineV0() pipeline.Pipeline

CommitMsgPipelineV0 - genesis version 0

func (*Instance) CommitMsgValidationPipeline

func (i *Instance) CommitMsgValidationPipeline() pipeline.Pipeline

CommitMsgValidationPipeline is the main commit msg pipeline

func (*Instance) CommitMsgValidationPipelineV0

func (i *Instance) CommitMsgValidationPipelineV0() pipeline.Pipeline

CommitMsgValidationPipelineV0 is version 0

func (*Instance) CommittedAggregatedMsg

func (i *Instance) CommittedAggregatedMsg() (*proto.SignedMessage, error)

CommittedAggregatedMsg returns a signed message for the state's committed value with the max known signatures

func (*Instance) DecidedMsgPipeline

func (i *Instance) DecidedMsgPipeline() pipeline.Pipeline

DecidedMsgPipeline is the main pipeline for decided msgs

func (*Instance) DecidedMsgPipelineV0

func (i *Instance) DecidedMsgPipelineV0() pipeline.Pipeline

DecidedMsgPipelineV0 is version 0

func (*Instance) ForceDecide

func (i *Instance) ForceDecide(msg *proto.SignedMessage)

ForceDecide will attempt to decide the instance with provided decided signed msg.

func (*Instance) GetLastChangeRoundMsg

func (i *Instance) GetLastChangeRoundMsg() *proto.SignedMessage

GetLastChangeRoundMsg returns the latest broadcasted msg from the instance

func (*Instance) GetStageChan

func (i *Instance) GetStageChan() chan proto.RoundState

GetStageChan returns a RoundState channel added to the stateChangesChans array

func (*Instance) HighestPrepared

func (i *Instance) HighestPrepared(round uint64) (notPrepared bool, highestPrepared *proto.ChangeRoundData, err error)

HighestPrepared is slightly changed to also include a returned flag to indicate if all change round messages have prj = ⊥ ∧ pvj = ⊥

func (*Instance) Init

func (i *Instance) Init()

Init must be called before start can be

func (*Instance) IsLeader

func (i *Instance) IsLeader() bool

IsLeader checks and return true for round leader, false otherwise

func (*Instance) JustifyPrePrepare

func (i *Instance) JustifyPrePrepare(round uint64, preparedValue []byte) error

JustifyPrePrepare implements: predicate JustifyPrePrepare(hPRE-PREPARE, λi, round, value)

return
	round = 1
	∨ received a quorum Qrc of valid <ROUND-CHANGE, λi, round, prj , pvj> messages such that:
		∀ <ROUND-CHANGE, λi, round, prj , pvj> ∈ Qrc : prj = ⊥ ∧ prj = ⊥
		∨ received a quorum of valid <PREPARE, λi, pr, value> messages such that:
			(pr, value) = HighestPrepared(Qrc)

func (*Instance) JustifyRoundChange

func (i *Instance) JustifyRoundChange(round uint64) error

JustifyRoundChange see below

func (*Instance) PrePrepareMsgPipeline

func (i *Instance) PrePrepareMsgPipeline() pipeline.Pipeline

PrePrepareMsgPipeline is the main pre-prepare msg pipeline

func (*Instance) PrePrepareMsgPipelineV0

func (i *Instance) PrePrepareMsgPipelineV0() pipeline.Pipeline

PrePrepareMsgPipelineV0 is version 0

func (*Instance) PrepareMsgPipeline

func (i *Instance) PrepareMsgPipeline() pipeline.Pipeline

PrepareMsgPipeline is the main prepare msg pipeline

func (*Instance) PrepareMsgPipelineV0

func (i *Instance) PrepareMsgPipelineV0() pipeline.Pipeline

PrepareMsgPipelineV0 is the v0 version

func (*Instance) PreparedAggregatedMsg

func (i *Instance) PreparedAggregatedMsg() (*proto.SignedMessage, error)

PreparedAggregatedMsg returns a signed message for the state's prepared value with the max known signatures

func (*Instance) ProcessMessage

func (i *Instance) ProcessMessage() (processedMsg bool, err error)

ProcessMessage pulls messages from the queue to be processed sequentially

func (*Instance) ProcessStageChange

func (i *Instance) ProcessStageChange(stage proto.RoundState)

ProcessStageChange set the state's round state and pushed the new state into the state channel

func (*Instance) RoundLeader

func (i *Instance) RoundLeader(round uint64) uint64

RoundLeader checks the round leader

func (*Instance) SignAndBroadcast

func (i *Instance) SignAndBroadcast(msg *proto.Message) error

SignAndBroadcast checks and adds the signed message to the appropriate round state type

func (*Instance) Start

func (i *Instance) Start(inputValue []byte) error

Start implements the Algorithm 1 IBFTController pseudocode for process pi: constants, state variables, and ancillary procedures procedure Start(λ, value)

λi ← λ
ri ← 1
pri ← ⊥
pvi ← ⊥
inputV aluei ← value
if leader(hi, ri) = pi then
	broadcast ⟨PRE-PREPARE, λi, ri, inputV aluei⟩ message
	set timer to running and expire after t(ri)

func (*Instance) StartMainEventLoop

func (i *Instance) StartMainEventLoop()

StartMainEventLoop start the main event loop queue for the iBFT instance which iterates events in the queue, if non found it will wait before trying again.

func (*Instance) StartMessagePipeline

func (i *Instance) StartMessagePipeline()

StartMessagePipeline - the iBFT instance is message driven with an 'upon' logic. each message type has it's own pipeline of checks and actions, called by the networker implementation. Internal chan monitor if the instance reached decision or if a round change is required.

func (*Instance) State

func (i *Instance) State() *proto.State

State returns instance state

func (*Instance) Stop

func (i *Instance) Stop()

Stop will trigger a stopped for the entire instance

func (*Instance) Stopped

func (i *Instance) Stopped() bool

Stopped is stopping queue work

func (*Instance) ThisRoundLeader

func (i *Instance) ThisRoundLeader() uint64

ThisRoundLeader returns the round leader

func (*Instance) UponPrePrepareMsg

func (i *Instance) UponPrePrepareMsg() pipeline.Pipeline

UponPrePrepareMsg Algorithm 2 IBFTController pseudocode for process pi: normal case operation upon receiving a valid ⟨PRE-PREPARE, λi, ri, value⟩ message m from leader(λi, round) such that:

JustifyPrePrepare(m) do
	set timer i to running and expire after t(ri)
	broadcast ⟨PREPARE, λi, ri, value⟩

type InstanceOptions

type InstanceOptions struct {
	Logger         *zap.Logger
	ValidatorShare *storage.Share
	// Me             *proto.Node
	Network        network.Network
	Queue          *msgqueue.MessageQueue
	ValueCheck     valcheck.ValueCheck
	LeaderSelector leader.Selector
	Config         *proto.InstanceConfig
	Lambda         []byte
	SeqNumber      uint64
	// RequireMinPeers flag to require minimum peers before starting an instance
	// useful for tests where we want (sometimes) to avoid networking
	RequireMinPeers bool
	// Fork sets the current fork to apply on instance
	Fork   forks.Fork
	Signer beacon.Signer
}

InstanceOptions defines option attributes for the Instance

Jump to

Keyboard shortcuts

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