Documentation ¶
Index ¶
- type IBFT
- type Instance
- func (i *Instance) BumpRound()
- func (i *Instance) CommittedAggregatedMsg() (*proto.SignedMessage, error)
- func (i *Instance) GetStageChan() chan proto.RoundState
- func (i *Instance) Init()
- func (i *Instance) IsLeader() bool
- func (i *Instance) JustifyPrePrepare(round uint64) (bool, error)
- func (i *Instance) JustifyRoundChange(round uint64) (bool, error)
- func (i *Instance) PreparedAggregatedMsg() (*proto.SignedMessage, error)
- func (i *Instance) ProcessMessage() (processedMsg bool, err error)
- func (i *Instance) RoundLeader(round uint64) uint64
- func (i *Instance) SetStage(stage proto.RoundState)
- func (i *Instance) SignAndBroadcast(msg *proto.Message) error
- func (i *Instance) Stage() proto.RoundState
- func (i *Instance) Start(inputValue []byte) error
- func (i *Instance) StartMainEventLoop()
- func (i *Instance) StartMessagePipeline()
- func (i *Instance) Stop()
- func (i *Instance) Stopped() bool
- func (i *Instance) ThisRoundLeader() uint64
- func (i *Instance) UponPrePrepareMsg() pipeline.Pipeline
- type InstanceOptions
- type InstanceResult
- type StartOptions
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type IBFT ¶
type IBFT interface { // Init should be called after creating an IBFT instance to init the instance, sync it, etc. Init() // StartInstance starts a new instance by the given options StartInstance(opts StartOptions) (chan *InstanceResult, error) // NextSeqNumber returns the previous decided instance seq number + 1 // In case it's the first instance it returns 0 NextSeqNumber() (uint64, error) // GetIBFTCommittee returns a map of the iBFT committee where the key is the member's id. GetIBFTCommittee() map[uint64]*proto.Node // GetIdentifier returns ibft identifier made of public key and role (type) GetIdentifier() []byte }
IBFT represents behavior of the IBFT
type Instance ¶
type Instance struct { State *proto.State 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 NewInstance ¶
func NewInstance(opts InstanceOptions) *Instance
NewInstance is the constructor of Instance
func (*Instance) BumpRound ¶
func (i *Instance) BumpRound()
BumpRound is used to set bump round by 1
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) GetStageChan ¶
func (i *Instance) GetStageChan() chan proto.RoundState
GetStageChan returns a RoundState channel added to the stateChangesChans array
func (*Instance) Init ¶ added in v0.0.5
func (i *Instance) Init()
Init must be called before start can be
func (*Instance) JustifyPrePrepare ¶
JustifyPrePrepare implements: predicate JustifyPrePrepare(hPRE-PREPARE, λi, round, valuei)
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 ¶
JustifyRoundChange see below
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 ¶
ProcessMessage pulls messages from the queue to be processed sequentially
func (*Instance) RoundLeader ¶
RoundLeader checks the round leader
func (*Instance) SetStage ¶
func (i *Instance) SetStage(stage proto.RoundState)
SetStage set the State's round State and pushed the new State into the State channel
func (*Instance) SignAndBroadcast ¶
SignAndBroadcast checks and adds the signed message to the appropriate round state type
func (*Instance) Stage ¶
func (i *Instance) Stage() proto.RoundState
Stage returns the instance message state
func (*Instance) Start ¶
Start implements the Algorithm 1 IBFT 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 ¶ added in v0.0.5
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) Stop ¶
func (i *Instance) Stop()
Stop will trigger a stopped for the entire instance
func (*Instance) ThisRoundLeader ¶
ThisRoundLeader returns the round leader
func (*Instance) UponPrePrepareMsg ¶
UponPrePrepareMsg Algorithm 2 IBFT 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 //Me *proto.Node Network network.Network Queue *msgqueue.MessageQueue ValueCheck valcheck.ValueCheck LeaderSelector leader.Selector Config *proto.InstanceConfig Lambda []byte SeqNumber uint64 }
InstanceOptions defines option attributes for the Instance
type InstanceResult ¶ added in v0.0.5
type InstanceResult struct { Decided bool Msg *proto.SignedMessage Error error }
InstanceResult is a struct holding the result of a single iBFT instance
type StartOptions ¶
type StartOptions struct { Logger *zap.Logger ValueCheck valcheck.ValueCheck PrevInstance []byte SeqNumber uint64 Value []byte Duty *ethpb.DutiesResponse_Duty }
StartOptions defines type for IBFT instance options