controller

package
v0.3.2-rc.1 Latest Latest
Warning

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

Go to latest
Published: Sep 20, 2022 License: GPL-3.0 Imports: 36 Imported by: 0

Documentation

Index

Constants

View Source
const (
	NotStarted uint32 = iota
	InitiatedHandlers
	SyncedChangeRound
	WaitingForPeers
	FoundPeers
	Ready
	Forking
)

set of states for the controller

View Source
const (
	StateSleep = iota
	StateRunning
	StateTimeout
)

set of timer states.

Variables

View Source
var ErrAlreadyRunning = errors.New("already running")

ErrAlreadyRunning is used to express that some process is already running, e.g. sync

Functions

func ReportIBFTStatus

func ReportIBFTStatus(pk string, finished, errorFound bool)

ReportIBFTStatus reports the current iBFT status

Types

type Controller

type Controller struct {
	Ctx context.Context

	Logger                 *zap.Logger
	InstanceStorage        qbftstorage.InstanceStore
	ChangeRoundStorage     qbftstorage.ChangeRoundStore
	Network                p2pprotocol.Network
	InstanceConfig         *qbft.InstanceConfig
	ValidatorShare         *beaconprotocol.Share
	Identifier             []byte
	Fork                   forks.Fork
	Beacon                 beaconprotocol.Beacon
	KeyManager             spectypes.KeyManager
	HigherReceivedMessages map[spectypes.OperatorID]specqbft.Height

	// lockers
	CurrentInstanceLock *sync.RWMutex // not locker interface in order to avoid casting to RWMutex
	ForkLock            sync.Locker

	// signature
	SignatureState SignatureState

	// config
	SyncRateLimit time.Duration
	MinPeers      int

	// state
	State uint32

	// flags
	ReadMode bool

	Q msgqueue.MsgQueue

	DecidedFactory  *factory.Factory
	DecidedStrategy strategy.Decided
	// contains filtered or unexported fields
}

Controller implements IController interface

func (*Controller) ConsumeQueue

func (c *Controller) ConsumeQueue(handler MessageHandler, interval time.Duration) error

ConsumeQueue consumes messages from the msgqueue.Queue of the controller it checks for current state

func (*Controller) GetCurrentInstance added in v0.3.0

func (c *Controller) GetCurrentInstance() instance.Instancer

GetCurrentInstance returns current instance if exist. if not, returns nil

func (*Controller) GetHeight added in v0.3.2

func (c *Controller) GetHeight() specqbft.Height

GetHeight return current ctrl height

func (*Controller) GetIBFTCommittee

func (c *Controller) GetIBFTCommittee() map[spectypes.OperatorID]*beaconprotocol.Node

GetIBFTCommittee returns a map of the iBFT committee where the key is the member's id.

func (*Controller) GetIdentifier

func (c *Controller) GetIdentifier() []byte

GetIdentifier returns ibft identifier made of public key and role (type)

func (*Controller) GetNodeMode added in v0.3.0

func (c *Controller) GetNodeMode() strategy.Mode

GetNodeMode return node type

func (*Controller) Init

func (c *Controller) Init() error

Init sets all major processes of iBFT while blocking until completed. if init fails to sync

func (*Controller) MessageHandler added in v0.3.0

func (c *Controller) MessageHandler(msg *spectypes.SSVMessage) error

MessageHandler process message from queue,

func (*Controller) NextHeightNumber added in v0.3.2

func (c *Controller) NextHeightNumber() (specqbft.Height, error)

NextHeightNumber returns the previous decided instance seq number + 1 In case it's the first instance it returns 0

func (*Controller) OnFork

func (c *Controller) OnFork(forkVersion forksprotocol.ForkVersion) error

OnFork called upon fork, it will make sure all decided messages were processed before clearing the entire msg queue. it also recreates the fork instance and decided strategy with the new fork version

func (*Controller) PostConsensusDutyExecution

func (c *Controller) PostConsensusDutyExecution(logger *zap.Logger, decidedValue []byte, signaturesCount int, role spectypes.BeaconRole) error

PostConsensusDutyExecution signs the eth2 duty after iBFT came to consensus and start signature state

func (*Controller) ProcessChangeRound added in v0.3.0

func (c *Controller) ProcessChangeRound(msg *specqbft.SignedMessage) error

ProcessChangeRound check basic pipeline validation than check if height or round is higher than the last one. if so, update

func (*Controller) ProcessLateCommitMsg

func (c *Controller) ProcessLateCommitMsg(logger *zap.Logger, msg *specqbft.SignedMessage) (*specqbft.SignedMessage, error)

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

func (*Controller) ProcessMsg

func (c *Controller) ProcessMsg(msg *spectypes.SSVMessage) error

ProcessMsg takes an incoming message, and adds it to the message queue or handle it on read mode

func (*Controller) ProcessPostConsensusMessage added in v0.3.0

func (c *Controller) ProcessPostConsensusMessage(msg *specssv.SignedPartialSignatureMessage) error

ProcessPostConsensusMessage aggregates partial signature messages and broadcasting when quorum achieved

func (*Controller) SetCurrentInstance added in v0.3.2

func (c *Controller) SetCurrentInstance(instance instance.Instancer)

SetCurrentInstance set the current instance

func (*Controller) StartInstance

func (c *Controller) StartInstance(opts instance.ControllerStartInstanceOptions, getInstance func(instance instance.Instancer)) (res *instance.Result, err error)

StartInstance - starts an ibft instance or returns error

func (*Controller) StartQueueConsumer added in v0.3.0

func (c *Controller) StartQueueConsumer(handler MessageHandler)

StartQueueConsumer start ConsumeQueue with handler

func (*Controller) UponExistingInstanceMsg added in v0.3.2

func (c *Controller) UponExistingInstanceMsg(logger *zap.Logger, msg *specqbft.SignedMessage) (bool, error)

UponExistingInstanceMsg run instance process flow. if no instance running, check if commit

func (*Controller) ValidateChangeRoundMsg added in v0.3.0

func (c *Controller) ValidateChangeRoundMsg(msg *specqbft.SignedMessage) error

ValidateChangeRoundMsg - validation for read mode change round msg validating - basic validation, signature, changeRound data

func (*Controller) ValidateDecidedMsg

func (c *Controller) ValidateDecidedMsg(msg *specqbft.SignedMessage) error

ValidateDecidedMsg - the main decided msg pipeline

type Controllers

type Controllers map[spectypes.BeaconRole]IController

Controllers represents a map of controllers by role.

func (Controllers) ControllerForIdentifier

func (c Controllers) ControllerForIdentifier(identifier []byte) IController

ControllerForIdentifier returns a controller by its identifier.

type IController

type IController interface {
	// Init should be called after creating an IController instance to init the instance, sync it, etc.
	Init() error

	// StartInstance starts a new instance by the given options
	StartInstance(opts instance.ControllerStartInstanceOptions, getInstance func(instance instance.Instancer)) (*instance.Result, error)

	// NextHeightNumber returns the previous decided instance seq number + 1
	// In case it's the first instance it returns 0
	NextHeightNumber() (specqbft.Height, error)

	// GetIBFTCommittee returns a map of the iBFT committee where the key is the member's id.
	GetIBFTCommittee() map[spectypes.OperatorID]*beaconprotocol.Node

	// GetIdentifier returns ibft identifier made of public key and role (type)
	GetIdentifier() []byte

	ProcessMsg(msg *spectypes.SSVMessage) error

	// ProcessPostConsensusMessage aggregates partial signature messages and broadcasting when quorum achieved
	ProcessPostConsensusMessage(msg *specssv.SignedPartialSignatureMessage) error

	// PostConsensusDutyExecution signs the eth2 duty after iBFT came to consensus and start signature state
	PostConsensusDutyExecution(logger *zap.Logger, decidedValue []byte, signaturesCount int, duty spectypes.BeaconRole) error

	// OnFork called when fork occur.
	OnFork(forkVersion forksprotocol.ForkVersion) error

	// GetCurrentInstance returns current instance if exist. if not, returns nil TODO for mapping, need to remove once duty runner implemented
	GetCurrentInstance() instance.Instancer
}

IController represents behavior of the IController

func New

func New(opts Options) IController

New is the constructor of Controller

type MessageHandler

type MessageHandler func(msg *spectypes.SSVMessage) error

MessageHandler process the msg. return error if exist

type NewDecidedHandler added in v0.3.0

type NewDecidedHandler func(msg *specqbft.SignedMessage)

NewDecidedHandler handles newly saved decided messages. it will be called in a new goroutine to avoid concurrency issues

type Options

type Options struct {
	Context           context.Context
	Role              spectypes.BeaconRole
	Identifier        []byte
	Logger            *zap.Logger
	Storage           qbftstorage.QBFTStore
	Network           p2pprotocol.Network
	InstanceConfig    *qbft.InstanceConfig
	ValidatorShare    *beaconprotocol.Share
	Version           forksprotocol.ForkVersion
	Beacon            beaconprotocol.Beacon
	KeyManager        spectypes.KeyManager
	SyncRateLimit     time.Duration
	SigTimeout        time.Duration
	MinPeers          int
	ReadMode          bool
	FullNode          bool
	NewDecidedHandler NewDecidedHandler
}

Options is a set of options for the controller

type SignatureState

type SignatureState struct {
	SignatureCollectionTimeout time.Duration
	// contains filtered or unexported fields
}

SignatureState represents the signature state.

type TimerState

type TimerState int

TimerState is the state of the timer.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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