Documentation ¶
Index ¶
- Constants
- Variables
- func GetConsensusTopicIDFromShardCoordinator(shardCoord sharding.Coordinator) string
- func NewRoundConsensus(eligibleNodes map[string]struct{}, consensusGroupSize int, selfId string) *roundConsensus
- func NewRoundState() *roundState
- func NewRoundStatus() *roundStatus
- func NewRoundThreshold() *roundThreshold
- func ValidateConsensusCore(container ConsensusCoreHandler) error
- type ConsensusCore
- func (cc *ConsensusCore) BlockProcessor() process.BlockProcessor
- func (cc *ConsensusCore) Blockchain() data.ChainHandler
- func (cc *ConsensusCore) BootStrapper() process.Bootstrapper
- func (cc *ConsensusCore) BroadcastMessenger() consensus.BroadcastMessenger
- func (cc *ConsensusCore) Chronology() consensus.ChronologyHandler
- func (cc *ConsensusCore) EpochStartRegistrationHandler() epochStart.RegistrationHandler
- func (cc *ConsensusCore) GetAntiFloodHandler() consensus.P2PAntifloodHandler
- func (cc *ConsensusCore) Hasher() hashing.Hasher
- func (cc *ConsensusCore) IsInterfaceNil() bool
- func (cc *ConsensusCore) Marshalizer() marshal.Marshalizer
- func (cc *ConsensusCore) MultiSigner() crypto.MultiSigner
- func (cc *ConsensusCore) NodesCoordinator() sharding.NodesCoordinator
- func (cc *ConsensusCore) PrivateKey() crypto.PrivateKey
- func (cc *ConsensusCore) Rounder() consensus.Rounder
- func (cc *ConsensusCore) ShardCoordinator() sharding.Coordinator
- func (cc *ConsensusCore) SingleSigner() crypto.SingleSigner
- func (cc *ConsensusCore) SyncTimer() ntp.SyncTimer
- type ConsensusCoreArgs
- type ConsensusCoreHandler
- type ConsensusService
- type ConsensusState
- func (cns *ConsensusState) AddReceivedHeader(headerHandler data.HeaderHandler)
- func (cns *ConsensusState) CanDoSubroundJob(currentSubroundId int) bool
- func (cns *ConsensusState) CanProcessReceivedMessage(cnsDta *consensus.Message, currentRoundIndex int64, currentSubroundId int) bool
- func (rcns ConsensusState) ComputeSize(subroundId int) int
- func (rcns ConsensusState) ConsensusGroup() []string
- func (rcns ConsensusState) ConsensusGroupIndex(pubKey string) (int, error)
- func (rcns ConsensusState) ConsensusGroupSize() int
- func (cns *ConsensusState) GenerateBitmap(subroundId int) []byte
- func (cns *ConsensusState) GetData() []byte
- func (cns *ConsensusState) GetLeader() (string, error)
- func (cns *ConsensusState) GetNextConsensusGroup(randomSource []byte, round uint64, shardId uint32, ...) ([]string, error)
- func (cns *ConsensusState) GetReceivedHeaders() []data.HeaderHandler
- func (cns *ConsensusState) IsBlockBodyAlreadyReceived() bool
- func (cns *ConsensusState) IsConsensusDataEqual(data []byte) bool
- func (cns *ConsensusState) IsConsensusDataSet() bool
- func (cns *ConsensusState) IsHeaderAlreadyReceived() bool
- func (cns *ConsensusState) IsJobDone(node string, currentSubroundId int) bool
- func (rcns ConsensusState) IsNodeInConsensusGroup(node string) bool
- func (rcns ConsensusState) IsNodeInEligibleList(node string) bool
- func (cns *ConsensusState) IsNodeLeaderInCurrentRound(node string) bool
- func (cns *ConsensusState) IsNodeSelf(node string) bool
- func (cns *ConsensusState) IsSelfJobDone(currentSubroundId int) bool
- func (cns *ConsensusState) IsSelfLeaderInCurrentRound() bool
- func (cns *ConsensusState) IsSubroundFinished(subroundID int) bool
- func (rcns ConsensusState) JobDone(key string, subroundId int) (bool, error)
- func (cns *ConsensusState) ProcessingBlock() bool
- func (cns *ConsensusState) ResetConsensusState()
- func (rcns ConsensusState) ResetRoundState()
- func (rstatus ConsensusState) ResetRoundStatus()
- func (rcns ConsensusState) SelfConsensusGroupIndex() (int, error)
- func (rcns ConsensusState) SelfJobDone(subroundId int) (bool, error)
- func (rcns ConsensusState) SelfPubKey() string
- func (rcns ConsensusState) SetConsensusGroup(consensusGroup []string)
- func (rcns ConsensusState) SetConsensusGroupSize(consensusGroudpSize int)
- func (rcns ConsensusState) SetEligibleList(eligibleList map[string]struct{})
- func (rcns ConsensusState) SetJobDone(key string, subroundId int, value bool) error
- func (cns *ConsensusState) SetProcessingBlock(processingBlock bool)
- func (rcns ConsensusState) SetSelfJobDone(subroundId int, value bool) error
- func (rcns ConsensusState) SetSelfPubKey(selfPubKey string)
- func (rstatus ConsensusState) SetStatus(subroundId int, subroundStatus SubroundStatus)
- func (rthr ConsensusState) SetThreshold(subroundId int, threshold int)
- func (rstatus ConsensusState) Status(subroundId int) SubroundStatus
- func (rthr ConsensusState) Threshold(subroundId int) int
- type HeaderIntegrityVerifier
- type PoolAdder
- type RandSeedVerifier
- type Subround
- func (sr *Subround) AppStatusHandler() core.AppStatusHandler
- func (sr *Subround) ChainID() []byte
- func (rcns Subround) ComputeSize(subroundId int) int
- func (sr *Subround) ConsensusChannel() chan bool
- func (rcns Subround) ConsensusGroup() []string
- func (rcns Subround) ConsensusGroupIndex(pubKey string) (int, error)
- func (rcns Subround) ConsensusGroupSize() int
- func (sr *Subround) Current() int
- func (sr *Subround) DoWork(rounder consensus.Rounder) bool
- func (sr *Subround) EndTime() int64
- func (sr *Subround) IsInterfaceNil() bool
- func (rcns Subround) IsNodeInConsensusGroup(node string) bool
- func (rcns Subround) IsNodeInEligibleList(node string) bool
- func (rcns Subround) JobDone(key string, subroundId int) (bool, error)
- func (sr *Subround) Name() string
- func (sr *Subround) Next() int
- func (sr *Subround) Previous() int
- func (rcns Subround) ResetRoundState()
- func (rstatus Subround) ResetRoundStatus()
- func (rcns Subround) SelfConsensusGroupIndex() (int, error)
- func (rcns Subround) SelfJobDone(subroundId int) (bool, error)
- func (rcns Subround) SelfPubKey() string
- func (sr *Subround) SetAppStatusHandler(ash core.AppStatusHandler) error
- func (rcns Subround) SetConsensusGroup(consensusGroup []string)
- func (rcns Subround) SetConsensusGroupSize(consensusGroudpSize int)
- func (rcns Subround) SetEligibleList(eligibleList map[string]struct{})
- func (rcns Subround) SetJobDone(key string, subroundId int, value bool) error
- func (rcns Subround) SetSelfJobDone(subroundId int, value bool) error
- func (rcns Subround) SetSelfPubKey(selfPubKey string)
- func (rstatus Subround) SetStatus(subroundId int, subroundStatus SubroundStatus)
- func (rthr Subround) SetThreshold(subroundId int, threshold int)
- func (sr *Subround) StartTime() int64
- func (rstatus Subround) Status(subroundId int) SubroundStatus
- func (rthr Subround) Threshold(subroundId int) int
- type SubroundStatus
- type SubroundsFactory
- type Worker
- func (wrk *Worker) AddReceivedHeaderHandler(handler func(data.HeaderHandler))
- func (wrk *Worker) AddReceivedMessageCall(messageType consensus.MessageType, ...)
- func (wrk *Worker) Close() error
- func (wrk *Worker) DisplayStatistics()
- func (wrk *Worker) ExecuteStoredMessages()
- func (wrk *Worker) Extend(subroundId int)
- func (wrk *Worker) GetConsensusStateChangedChannel() chan bool
- func (wrk *Worker) IsInterfaceNil() bool
- func (wrk *Worker) ProcessReceivedMessage(message p2p.MessageP2P, fromConnectedPeer p2p.PeerID) error
- func (wrk *Worker) ReceivedHeader(headerHandler data.HeaderHandler, _ []byte)
- func (wrk *Worker) RemoveAllReceivedMessagesCalls()
- func (wrk *Worker) SetAppStatusHandler(ash core.AppStatusHandler) error
- func (wrk *Worker) StartWorking()
- type WorkerArgs
- type WorkerHandler
Constants ¶
const MaxThresholdPercent = 95
MaxThresholdPercent specifies the max allocated time percent for doing Job as a percentage of the total time of one round
Variables ¶
var ErrEmptyConsensusGroup = errors.New("consensusGroup is empty")
ErrEmptyConsensusGroup is raised when an operation is attempted with an empty consensus group
var ErrInvalidBodySize = errors.New("invalid body size")
ErrInvalidBodySize signals that an invalid body size has been received from consensus topic
var ErrInvalidCacheSize = errors.New("invalid cache size")
ErrInvalidCacheSize signals an invalid size provided for cache
var ErrInvalidChainID = errors.New("invalid chain ID in consensus")
ErrInvalidChainID signals that an invalid chain ID has been provided
var ErrInvalidHeader = errors.New("header is invalid")
ErrInvalidHeader is raised when header is invalid
var ErrInvalidHeaderHashSize = errors.New("invalid header hash size")
ErrInvalidHeaderHashSize signals that an invalid header hash size has been received from consensus topic
var ErrInvalidHeaderSize = errors.New("invalid header size")
ErrInvalidHeaderSize signals that an invalid header size has been received from consensus topic
var ErrInvalidKey = errors.New("map key is invalid")
ErrInvalidKey is raised when an invalid key is used with a map
var ErrInvalidMessage = errors.New("invalid message")
ErrInvalidMessage signals that an invalid message has been received from consensus topic
var ErrInvalidMessageType = errors.New("invalid message type")
ErrInvalidMessageType signals that an invalid message type has been received from consensus topic
var ErrInvalidMetaHeader = errors.New("meta header is invalid")
ErrInvalidMetaHeader is raised when an invalid meta header was provided
var ErrInvalidPublicKeyBitmapSize = errors.New("invalid public key bitmap size")
ErrInvalidPublicKeyBitmapSize signals that an invalid public key bitmap size has been received from consensus topic
var ErrInvalidPublicKeySize = errors.New("invalid public key size")
ErrInvalidPublicKeySize signals that an invalid public key size has been received from consensus topic
var ErrInvalidSignature = errors.New("signature is invalid")
ErrInvalidSignature is raised when signature is invalid
var ErrInvalidSignatureSize = errors.New("invalid signature size")
ErrInvalidSignatureSize signals that an invalid signature size has been received from consensus topic
var ErrMessageForFutureRound = errors.New("message is for future round")
ErrMessageForFutureRound is raised when message is for future round
var ErrMessageForPastRound = errors.New("message is for past round")
ErrMessageForPastRound is raised when message is for past round
var ErrMessageFromItself = errors.New("message is from itself")
ErrMessageFromItself is raised when a message from itself is received
var ErrNilAntifloodHandler = errors.New("nil antiflood handler")
ErrNilAntifloodHandler signals that a nil antiflood handler has been provided
var ErrNilAppStatusHandler = errors.New("nil AppStatusHandler")
ErrNilAppStatusHandler defines the error for setting a nil AppStatusHandler
var ErrNilBlockChain = errors.New("blockchain is nil")
ErrNilBlockChain is raised when a valid blockchain is expected but nil used
var ErrNilBlockProcessor = errors.New("block processor is nil")
ErrNilBlockProcessor is raised when a valid block processor is expected but nil used
var ErrNilBlsPrivateKey = errors.New("BLS private key should not be nil")
ErrNilBlsPrivateKey is raised when the bls private key is nil
var ErrNilBlsSingleSigner = errors.New("BLS single signer should not be nil")
ErrNilBlsSingleSigner is raised when a message from itself is received
var ErrNilBody = errors.New("body is nil")
ErrNilBody is raised when an expected body is nil
var ErrNilBootstrapper = errors.New("bootstrapper is nil")
ErrNilBootstrapper is raised when a valid block processor is expected but nil used
var ErrNilBroadcastMessenger = errors.New("broadcast messenger is nil")
ErrNilBroadcastMessenger is raised when a valid broadcast messenger is expected but nil used
var ErrNilChannel = errors.New("channel is nil")
ErrNilChannel is raised when a valid channel is expected but nil used
var ErrNilChronologyHandler = errors.New("chronology handler is nil")
ErrNilChronologyHandler is raised when a valid chronology handler is expected but nil used
var ErrNilConsensusCore = errors.New("consensus core is nil")
ErrNilConsensusCore is raised when a valid ConsensusCore is expected but nil used
var ErrNilConsensusData = errors.New("consensus data is nil")
ErrNilConsensusData is raised when valid consensus data was expected but nil was received
var ErrNilConsensusGroup = errors.New("consensusGroup is null")
ErrNilConsensusGroup is raised when an operation is attempted with a nil consensus group
var ErrNilConsensusService = errors.New("consensus service is nil")
ErrNilConsensusService is raised when a valid ConsensusService is expected but nil used
var ErrNilConsensusState = errors.New("consensus state is nil")
ErrNilConsensusState is raised when a valid consensus is expected but nil used
var ErrNilDataToProcess = errors.New("nil data to process")
ErrNilDataToProcess signals that nil data was provided
var ErrNilExecuteStoredMessages = errors.New("executeStoredMessages is nil")
ErrNilExecuteStoredMessages is raised when a valid executeStoredMessages function is expected but nil used
var ErrNilForkDetector = errors.New("fork detector is nil")
ErrNilForkDetector is raised when a valid fork detector is expected but nil used
var ErrNilHasher = errors.New("hasher is nil")
ErrNilHasher is raised when a valid hasher is expected but nil used
var ErrNilHeader = errors.New("header is nil")
ErrNilHeader is raised when an expected header is nil
var ErrNilHeaderHash = errors.New("header hash is nil")
ErrNilHeaderHash is raised when a nil header hash is provided
var ErrNilHeaderIntegrityVerifier = errors.New("nil header integrity verifier")
ErrNilHeaderIntegrityVerifier signals that a nil header integrity verifier has been provided
var ErrNilHeaderSigVerifier = errors.New("nil header sig verifier")
ErrNilHeaderSigVerifier signals that a nil header sig verifier has been provided
var ErrNilHeadersSubscriber = errors.New("headers subscriber is nil")
ErrNilHeadersSubscriber is raised when a valid headers subscriber is expected but nil is provided
var ErrNilKeyGenerator = errors.New("key generator is nil")
ErrNilKeyGenerator is raised when a valid key generator is expected but nil was used
var ErrNilMarshalizer = errors.New("marshalizer is nil")
ErrNilMarshalizer is raised when a valid marshalizer is expected but nil used
var ErrNilMessage = errors.New("nil message")
ErrNilMessage signals that a nil message has been received
var ErrNilMessenger = errors.New("messenger is nil")
ErrNilMessenger is raised when a valid messenger is expected but nil used
var ErrNilMetaHeader = errors.New("meta header is nil")
ErrNilMetaHeader is raised when an expected meta header is nil
var ErrNilMultiSigner = errors.New("multiSigner is nil")
ErrNilMultiSigner is raised when a valid multiSigner is expected but nil used
var ErrNilNetworkShardingCollector = errors.New("nil network sharding collector")
ErrNilNetworkShardingCollector defines the error for setting a nil network sharding collector
var ErrNilNodesCoordinator = errors.New("validator group selector is nil")
ErrNilNodesCoordinator is raised when a valid validator group selector is expected but nil used
var ErrNilPoolAdder = errors.New("nil pool adder")
ErrNilPoolAdder signals that a nil pool adder has been provided
var ErrNilPrivateKey = errors.New("private key is nil")
ErrNilPrivateKey is raised when a valid private key was expected but nil was used
var ErrNilPublicKey = errors.New("public key is nil")
ErrNilPublicKey is raised when a valid public key was expected but nil was used
var ErrNilRoundState = errors.New("round state is nil")
ErrNilRoundState is raised when a valid round state is expected but nil used
var ErrNilRounder = errors.New("rounder is nil")
ErrNilRounder is raised when a valid rounder is expected but nil used
var ErrNilShardCoordinator = errors.New("shard coordinator is nil")
ErrNilShardCoordinator is raised when a valid shard coordinator is expected but nil used
var ErrNilSignature = errors.New("signature is nil")
ErrNilSignature is raised when a valid signature was expected but nil was used
var ErrNilSingleSigner = errors.New("singleSigner is nil")
ErrNilSingleSigner is raised when a valid singleSigner is expected but nil used
var ErrNilSubround = errors.New("subround is nil")
ErrNilSubround is raised when a valid subround is expected but nil used
var ErrNilSyncTimer = errors.New("sync timer is nil")
ErrNilSyncTimer is raised when a valid sync timer is expected but nil used
var ErrNilWorker = errors.New("worker is nil")
ErrNilWorker is raised when a valid Worker is expected but nil used
var ErrNilWorkerArgs = errors.New("worker args is nil")
ErrNilWorkerArgs signals that nil a workerArgs has been provided
var ErrNodeIsNotInEligibleList = errors.New("node is not in eligible list")
ErrNodeIsNotInEligibleList is raised when a node is not in eligible list
var ErrNotFoundInConsensus = errors.New("self not found in consensus group")
ErrNotFoundInConsensus is raised when self expected in consensus group but not found
var ErrRoundCanceled = errors.New("round is canceled")
ErrRoundCanceled is raised when round is canceled
Functions ¶
func GetConsensusTopicIDFromShardCoordinator ¶
func GetConsensusTopicIDFromShardCoordinator(shardCoord sharding.Coordinator) string
GetConsensusTopicIDFromShardCoordinator will construct and return the topic ID based on shard coordinator
func NewRoundConsensus ¶
func NewRoundConsensus( eligibleNodes map[string]struct{}, consensusGroupSize int, selfId string, ) *roundConsensus
NewRoundConsensus creates a new roundConsensus object
func NewRoundStatus ¶
func NewRoundStatus() *roundStatus
NewRoundStatus creates a new roundStatus object
func NewRoundThreshold ¶
func NewRoundThreshold() *roundThreshold
NewRoundThreshold creates a new roundThreshold object
func ValidateConsensusCore ¶
func ValidateConsensusCore(container ConsensusCoreHandler) error
ValidateConsensusCore checks for nil all the container objects
Types ¶
type ConsensusCore ¶
type ConsensusCore struct {
// contains filtered or unexported fields
}
ConsensusCore implements ConsensusCoreHandler and provides access to common functionality
for the rest of the consensus structures
func NewConsensusCore ¶
func NewConsensusCore( args *ConsensusCoreArgs, ) (*ConsensusCore, error)
NewConsensusCore creates a new ConsensusCore instance
func (*ConsensusCore) BlockProcessor ¶
func (cc *ConsensusCore) BlockProcessor() process.BlockProcessor
BlockProcessor gets the BlockProcessor stored in the ConsensusCore
func (*ConsensusCore) Blockchain ¶
func (cc *ConsensusCore) Blockchain() data.ChainHandler
Blockchain gets the ChainHandler stored in the ConsensusCore
func (*ConsensusCore) BootStrapper ¶
func (cc *ConsensusCore) BootStrapper() process.Bootstrapper
BootStrapper gets the Bootstrapper stored in the ConsensusCore
func (*ConsensusCore) BroadcastMessenger ¶
func (cc *ConsensusCore) BroadcastMessenger() consensus.BroadcastMessenger
BroadcastMessenger gets the BroadcastMessenger stored in the ConsensusCore
func (*ConsensusCore) Chronology ¶
func (cc *ConsensusCore) Chronology() consensus.ChronologyHandler
Chronology gets the ChronologyHandler stored in the ConsensusCore
func (*ConsensusCore) EpochStartRegistrationHandler ¶ added in v1.0.102
func (cc *ConsensusCore) EpochStartRegistrationHandler() epochStart.RegistrationHandler
EpochStartRegistrationHandler returns the epoch start registration handler
func (*ConsensusCore) GetAntiFloodHandler ¶
func (cc *ConsensusCore) GetAntiFloodHandler() consensus.P2PAntifloodHandler
GetAntiFloodHandler will return the antiflood handler which will be used in subrounds
func (*ConsensusCore) Hasher ¶
func (cc *ConsensusCore) Hasher() hashing.Hasher
Hasher gets the Hasher stored in the ConsensusCore
func (*ConsensusCore) IsInterfaceNil ¶
func (cc *ConsensusCore) IsInterfaceNil() bool
IsInterfaceNil returns true if there is no value under the interface
func (*ConsensusCore) Marshalizer ¶
func (cc *ConsensusCore) Marshalizer() marshal.Marshalizer
Marshalizer gets the Marshalizer stored in the ConsensusCore
func (*ConsensusCore) MultiSigner ¶
func (cc *ConsensusCore) MultiSigner() crypto.MultiSigner
MultiSigner gets the MultiSigner stored in the ConsensusCore
func (*ConsensusCore) NodesCoordinator ¶
func (cc *ConsensusCore) NodesCoordinator() sharding.NodesCoordinator
NodesCoordinator gets the NodesCoordinator stored in the ConsensusCore
func (*ConsensusCore) PrivateKey ¶
func (cc *ConsensusCore) PrivateKey() crypto.PrivateKey
PrivateKey returns the BLS private key stored in the ConsensusStore
func (*ConsensusCore) Rounder ¶
func (cc *ConsensusCore) Rounder() consensus.Rounder
Rounder gets the Rounder stored in the ConsensusCore
func (*ConsensusCore) ShardCoordinator ¶
func (cc *ConsensusCore) ShardCoordinator() sharding.Coordinator
ShardCoordinator gets the Coordinator stored in the ConsensusCore
func (*ConsensusCore) SingleSigner ¶
func (cc *ConsensusCore) SingleSigner() crypto.SingleSigner
SingleSigner returns the bls single signer stored in the ConsensusStore
func (*ConsensusCore) SyncTimer ¶
func (cc *ConsensusCore) SyncTimer() ntp.SyncTimer
SyncTimer gets the SyncTimer stored in the ConsensusCore
type ConsensusCoreArgs ¶
type ConsensusCoreArgs struct { BlockChain data.ChainHandler BlockProcessor process.BlockProcessor Bootstrapper process.Bootstrapper BroadcastMessenger consensus.BroadcastMessenger ChronologyHandler consensus.ChronologyHandler Hasher hashing.Hasher Marshalizer marshal.Marshalizer BlsPrivateKey crypto.PrivateKey BlsSingleSigner crypto.SingleSigner MultiSigner crypto.MultiSigner Rounder consensus.Rounder ShardCoordinator sharding.Coordinator NodesCoordinator sharding.NodesCoordinator SyncTimer ntp.SyncTimer EpochStartRegistrationHandler epochStart.RegistrationHandler AntifloodHandler consensus.P2PAntifloodHandler }
ConsensusCoreArgs store all arguments that are needed to create a ConsensusCore object
type ConsensusCoreHandler ¶
type ConsensusCoreHandler interface { // Blockchain gets the ChainHandler stored in the ConsensusCore Blockchain() data.ChainHandler // BlockProcessor gets the BlockProcessor stored in the ConsensusCore BlockProcessor() process.BlockProcessor // BootStrapper gets the Bootstrapper stored in the ConsensusCore BootStrapper() process.Bootstrapper // BroadcastMessenger gets the BroadcastMessenger stored in ConsensusCore BroadcastMessenger() consensus.BroadcastMessenger // Chronology gets the ChronologyHandler stored in the ConsensusCore Chronology() consensus.ChronologyHandler // GetAntiFloodHandler returns the antiflood handler which will be used in subrounds GetAntiFloodHandler() consensus.P2PAntifloodHandler // Hasher gets the Hasher stored in the ConsensusCore Hasher() hashing.Hasher // Marshalizer gets the Marshalizer stored in the ConsensusCore Marshalizer() marshal.Marshalizer // MultiSigner gets the MultiSigner stored in the ConsensusCore MultiSigner() crypto.MultiSigner // Rounder gets the Rounder stored in the ConsensusCore Rounder() consensus.Rounder // ShardCoordinator gets the Coordinator stored in the ConsensusCore ShardCoordinator() sharding.Coordinator // SyncTimer gets the SyncTimer stored in the ConsensusCore SyncTimer() ntp.SyncTimer // NodesCoordinator gets the NodesCoordinator stored in the ConsensusCore NodesCoordinator() sharding.NodesCoordinator // EpochStartRegistrationHandler gets the RegistrationHandler stored in the ConsensusCore EpochStartRegistrationHandler() epochStart.RegistrationHandler // PrivateKey returns the private key stored in the ConsensusStore used for randomness and leader's signature generation PrivateKey() crypto.PrivateKey // SingleSigner returns the single signer stored in the ConsensusStore used for randomness and leader's signature generation SingleSigner() crypto.SingleSigner // IsInterfaceNil returns true if there is no value under the interface IsInterfaceNil() bool }
ConsensusCoreHandler encapsulates all needed Data for the Consensus
type ConsensusService ¶
type ConsensusService interface { //InitReceivedMessages initializes the MessagesType map for all messages for the current ConsensusService InitReceivedMessages() map[consensus.MessageType][]*consensus.Message //GetStringValue gets the name of the messageType GetStringValue(consensus.MessageType) string //GetSubroundName gets the subround name for the subround id provided GetSubroundName(int) string //GetMessageRange provides the MessageType range used in checks by the consensus GetMessageRange() []consensus.MessageType //CanProceed returns if the current messageType can proceed further if previous subrounds finished CanProceed(*ConsensusState, consensus.MessageType) bool //IsMessageWithBlockBodyAndHeader returns if the current messageType is about block body and header IsMessageWithBlockBodyAndHeader(consensus.MessageType) bool //IsMessageWithBlockBody returns if the current messageType is about block body IsMessageWithBlockBody(consensus.MessageType) bool //IsMessageWithBlockHeader returns if the current messageType is about block header IsMessageWithBlockHeader(consensus.MessageType) bool //IsMessageWithSignature returns if the current messageType is about signature IsMessageWithSignature(consensus.MessageType) bool //IsMessageWithFinalInfo returns if the current messageType is about header final info IsMessageWithFinalInfo(consensus.MessageType) bool //IsMessageTypeValid returns if the current messageType is valid IsMessageTypeValid(consensus.MessageType) bool //IsSubroundSignature returns if the current subround is about signature IsSubroundSignature(int) bool //IsSubroundStartRound returns if the current subround is about start round IsSubroundStartRound(int) bool // GetMaxMessagesInARoundPerPeer returns the maximum number of messages a peer can send per round GetMaxMessagesInARoundPerPeer() uint32 // IsInterfaceNil returns true if there is no value under the interface IsInterfaceNil() bool }
ConsensusService encapsulates the methods specifically for a consensus type (bls, bn) and will be used in the sposWorker
type ConsensusState ¶
type ConsensusState struct { // hold the data on which validators do the consensus (could be for example a hash of the block header // proposed by the leader) Data []byte Body data.BodyHandler Header data.HeaderHandler RoundIndex int64 RoundTimeStamp time.Time RoundCanceled bool ExtendedCalled bool // contains filtered or unexported fields }
ConsensusState defines the data needed by spos to do the consensus in each round
func NewConsensusState ¶
func NewConsensusState( roundConsensus *roundConsensus, roundThreshold *roundThreshold, roundStatus *roundStatus, ) *ConsensusState
NewConsensusState creates a new ConsensusState object
func (*ConsensusState) AddReceivedHeader ¶
func (cns *ConsensusState) AddReceivedHeader(headerHandler data.HeaderHandler)
AddReceivedHeader append the provided header to the inner received headers list
func (*ConsensusState) CanDoSubroundJob ¶
func (cns *ConsensusState) CanDoSubroundJob(currentSubroundId int) bool
CanDoSubroundJob method returns true if the job of the subround can be done and false otherwise
func (*ConsensusState) CanProcessReceivedMessage ¶
func (cns *ConsensusState) CanProcessReceivedMessage(cnsDta *consensus.Message, currentRoundIndex int64, currentSubroundId int) bool
CanProcessReceivedMessage method returns true if the message received can be processed and false otherwise
func (ConsensusState) ComputeSize ¶
ComputeSize method returns the number of messages received from the nodes belonging to the current jobDone group related to this subround
func (ConsensusState) ConsensusGroup ¶
func (rcns ConsensusState) ConsensusGroup() []string
ConsensusGroup returns the consensus group ID's
func (ConsensusState) ConsensusGroupIndex ¶
ConsensusGroupIndex returns the index of given public key in the current consensus group
func (ConsensusState) ConsensusGroupSize ¶
func (rcns ConsensusState) ConsensusGroupSize() int
ConsensusGroupSize returns the consensus group size
func (*ConsensusState) GenerateBitmap ¶
func (cns *ConsensusState) GenerateBitmap(subroundId int) []byte
GenerateBitmap method generates a bitmap, for a given subround, in which each node will be marked with 1 if its job has been done
func (*ConsensusState) GetData ¶
func (cns *ConsensusState) GetData() []byte
GetData gets the Data of the consensusState
func (*ConsensusState) GetLeader ¶
func (cns *ConsensusState) GetLeader() (string, error)
GetLeader method gets the leader of the current round
func (*ConsensusState) GetNextConsensusGroup ¶
func (cns *ConsensusState) GetNextConsensusGroup( randomSource []byte, round uint64, shardId uint32, nodesCoordinator sharding.NodesCoordinator, epoch uint32, ) ([]string, error)
GetNextConsensusGroup gets the new consensus group for the current round based on current eligible list and a random source for the new selection
func (*ConsensusState) GetReceivedHeaders ¶
func (cns *ConsensusState) GetReceivedHeaders() []data.HeaderHandler
GetReceivedHeaders returns the received headers list
func (*ConsensusState) IsBlockBodyAlreadyReceived ¶
func (cns *ConsensusState) IsBlockBodyAlreadyReceived() bool
IsBlockBodyAlreadyReceived method returns true if block body is already received and false otherwise
func (*ConsensusState) IsConsensusDataEqual ¶
func (cns *ConsensusState) IsConsensusDataEqual(data []byte) bool
IsConsensusDataEqual method returns true if the consensus data for the current round is the same with the given one and false otherwise
func (*ConsensusState) IsConsensusDataSet ¶
func (cns *ConsensusState) IsConsensusDataSet() bool
IsConsensusDataSet method returns true if the consensus data for the current round is set and false otherwise
func (*ConsensusState) IsHeaderAlreadyReceived ¶
func (cns *ConsensusState) IsHeaderAlreadyReceived() bool
IsHeaderAlreadyReceived method returns true if header is already received and false otherwise
func (*ConsensusState) IsJobDone ¶
func (cns *ConsensusState) IsJobDone(node string, currentSubroundId int) bool
IsJobDone method returns true if the node job for the current subround is done and false otherwise
func (ConsensusState) IsNodeInConsensusGroup ¶
IsNodeInConsensusGroup method checks if the node is part of consensus group of the current round
func (ConsensusState) IsNodeInEligibleList ¶
IsNodeInEligibleList method checks if the node is part of the eligible list
func (*ConsensusState) IsNodeLeaderInCurrentRound ¶
func (cns *ConsensusState) IsNodeLeaderInCurrentRound(node string) bool
IsNodeLeaderInCurrentRound method checks if the given node is leader in the current round
func (*ConsensusState) IsNodeSelf ¶
func (cns *ConsensusState) IsNodeSelf(node string) bool
IsNodeSelf method returns true if the message is received from itself and false otherwise
func (*ConsensusState) IsSelfJobDone ¶
func (cns *ConsensusState) IsSelfJobDone(currentSubroundId int) bool
IsSelfJobDone method returns true if self job for the current subround is done and false otherwise
func (*ConsensusState) IsSelfLeaderInCurrentRound ¶
func (cns *ConsensusState) IsSelfLeaderInCurrentRound() bool
IsSelfLeaderInCurrentRound method checks if the current node is leader in the current round
func (*ConsensusState) IsSubroundFinished ¶
func (cns *ConsensusState) IsSubroundFinished(subroundID int) bool
IsSubroundFinished method returns true if the current subround is finished and false otherwise
func (ConsensusState) JobDone ¶
JobDone returns the state of the action done, by the node represented by the key parameter, in subround given by the subroundId parameter
func (*ConsensusState) ProcessingBlock ¶
func (cns *ConsensusState) ProcessingBlock() bool
ProcessingBlock gets the state of block processing
func (*ConsensusState) ResetConsensusState ¶
func (cns *ConsensusState) ResetConsensusState()
ResetConsensusState method resets all the consensus data
func (ConsensusState) ResetRoundState ¶
func (rcns ConsensusState) ResetRoundState()
ResetRoundState method resets the state of each node from the current jobDone group, regarding to the consensus validatorRoundStates
func (ConsensusState) ResetRoundStatus ¶
func (rstatus ConsensusState) ResetRoundStatus()
ResetRoundStatus method resets the state of each subround
func (ConsensusState) SelfConsensusGroupIndex ¶
SelfConsensusGroupIndex returns the index of self public key in current consensus group
func (ConsensusState) SelfJobDone ¶
SelfJobDone returns the self state of the action done in subround given by the subroundId parameter
func (ConsensusState) SelfPubKey ¶
func (rcns ConsensusState) SelfPubKey() string
SelfPubKey returns selfPubKey ID
func (ConsensusState) SetConsensusGroup ¶
func (rcns ConsensusState) SetConsensusGroup(consensusGroup []string)
SetConsensusGroup sets the consensus group ID's
func (ConsensusState) SetConsensusGroupSize ¶
func (rcns ConsensusState) SetConsensusGroupSize(consensusGroudpSize int)
SetConsensusGroupSize sets the consensus group size
func (ConsensusState) SetEligibleList ¶
func (rcns ConsensusState) SetEligibleList(eligibleList map[string]struct{})
SetEligibleList sets the eligible list ID's
func (ConsensusState) SetJobDone ¶
SetJobDone set the state of the action done, by the node represented by the key parameter, in subround given by the subroundId parameter
func (*ConsensusState) SetProcessingBlock ¶
func (cns *ConsensusState) SetProcessingBlock(processingBlock bool)
SetProcessingBlock sets the state of block processing
func (ConsensusState) SetSelfJobDone ¶
SetSelfJobDone set the self state of the action done in subround given by the subroundId parameter
func (ConsensusState) SetSelfPubKey ¶
func (rcns ConsensusState) SetSelfPubKey(selfPubKey string)
SetSelfPubKey sets selfPubKey ID
func (ConsensusState) SetStatus ¶
func (rstatus ConsensusState) SetStatus(subroundId int, subroundStatus SubroundStatus)
SetStatus sets the status of the given subround id
func (ConsensusState) SetThreshold ¶
SetThreshold sets the threshold of agreements needed in the given subround id
func (ConsensusState) Status ¶
func (rstatus ConsensusState) Status(subroundId int) SubroundStatus
Status returns the status of the given subround id
type HeaderIntegrityVerifier ¶ added in v1.0.117
type HeaderIntegrityVerifier interface { Verify(header data.HeaderHandler) error IsInterfaceNil() bool }
HeaderIntegrityVerifier encapsulates methods useful to check that a header's integrity is correct
type PoolAdder ¶ added in v1.0.102
type PoolAdder interface { Put(key []byte, value interface{}, sizeInBytes int) (evicted bool) IsInterfaceNil() bool }
PoolAdder adds data in a key-value pool
type RandSeedVerifier ¶
type RandSeedVerifier interface { VerifyRandSeed(header data.HeaderHandler) error IsInterfaceNil() bool }
RandSeedVerifier encapsulates methods that are check if header rand seed is correct
type Subround ¶
type Subround struct { ConsensusCoreHandler *ConsensusState Job func() bool // method does the Subround Job and send the result to the peers Check func() bool // method checks if the consensus of the Subround is done Extend func(subroundId int) // method is called when round time is out // contains filtered or unexported fields }
Subround struct contains the needed data for one Subround and the Subround properties. It defines a Subround with it's properties (it's ID, next Subround ID, it's duration, it's name) and also it has some handler functions which should be set. Job function will be the main function of this Subround, Extend function will handle the overtime situation of the Subround and Check function will decide if in this Subround the consensus is achieved
func NewSubround ¶
func NewSubround( previous int, current int, next int, startTime int64, endTime int64, name string, consensusState *ConsensusState, consensusStateChangedChannel chan bool, executeStoredMessages func(), container ConsensusCoreHandler, chainID []byte, ) (*Subround, error)
NewSubround creates a new SubroundId object
func (*Subround) AppStatusHandler ¶
func (sr *Subround) AppStatusHandler() core.AppStatusHandler
AppStatusHandler method returns the appStatusHandler instance
func (Subround) ComputeSize ¶
ComputeSize method returns the number of messages received from the nodes belonging to the current jobDone group related to this subround
func (*Subround) ConsensusChannel ¶ added in v1.0.111
ConsensusChannel method returns the consensus channel
func (Subround) ConsensusGroup ¶
func (rcns Subround) ConsensusGroup() []string
ConsensusGroup returns the consensus group ID's
func (Subround) ConsensusGroupIndex ¶
ConsensusGroupIndex returns the index of given public key in the current consensus group
func (Subround) ConsensusGroupSize ¶
func (rcns Subround) ConsensusGroupSize() int
ConsensusGroupSize returns the consensus group size
func (*Subround) DoWork ¶
DoWork method actually does the work of this Subround. First it tries to do the Job of the Subround then it will Check the consensus. If the upper time limit of this Subround is reached, the Extend method will be called before returning. If this method returns true the chronology will advance to the next Subround.
func (*Subround) IsInterfaceNil ¶
IsInterfaceNil returns true if there is no value under the interface
func (Subround) IsNodeInConsensusGroup ¶
IsNodeInConsensusGroup method checks if the node is part of consensus group of the current round
func (Subround) IsNodeInEligibleList ¶
IsNodeInEligibleList method checks if the node is part of the eligible list
func (Subround) JobDone ¶
JobDone returns the state of the action done, by the node represented by the key parameter, in subround given by the subroundId parameter
func (Subround) ResetRoundState ¶
func (rcns Subround) ResetRoundState()
ResetRoundState method resets the state of each node from the current jobDone group, regarding to the consensus validatorRoundStates
func (Subround) ResetRoundStatus ¶
func (rstatus Subround) ResetRoundStatus()
ResetRoundStatus method resets the state of each subround
func (Subround) SelfConsensusGroupIndex ¶
SelfConsensusGroupIndex returns the index of self public key in current consensus group
func (Subround) SelfJobDone ¶
SelfJobDone returns the self state of the action done in subround given by the subroundId parameter
func (Subround) SelfPubKey ¶
func (rcns Subround) SelfPubKey() string
SelfPubKey returns selfPubKey ID
func (*Subround) SetAppStatusHandler ¶
func (sr *Subround) SetAppStatusHandler(ash core.AppStatusHandler) error
SetAppStatusHandler method sets appStatusHandler
func (Subround) SetConsensusGroup ¶
func (rcns Subround) SetConsensusGroup(consensusGroup []string)
SetConsensusGroup sets the consensus group ID's
func (Subround) SetConsensusGroupSize ¶
func (rcns Subround) SetConsensusGroupSize(consensusGroudpSize int)
SetConsensusGroupSize sets the consensus group size
func (Subround) SetEligibleList ¶
func (rcns Subround) SetEligibleList(eligibleList map[string]struct{})
SetEligibleList sets the eligible list ID's
func (Subround) SetJobDone ¶
SetJobDone set the state of the action done, by the node represented by the key parameter, in subround given by the subroundId parameter
func (Subround) SetSelfJobDone ¶
SetSelfJobDone set the self state of the action done in subround given by the subroundId parameter
func (Subround) SetSelfPubKey ¶
func (rcns Subround) SetSelfPubKey(selfPubKey string)
SetSelfPubKey sets selfPubKey ID
func (Subround) SetStatus ¶
func (rstatus Subround) SetStatus(subroundId int, subroundStatus SubroundStatus)
SetStatus sets the status of the given subround id
func (Subround) SetThreshold ¶
SetThreshold sets the threshold of agreements needed in the given subround id
func (Subround) Status ¶
func (rstatus Subround) Status(subroundId int) SubroundStatus
Status returns the status of the given subround id
type SubroundStatus ¶
type SubroundStatus int
SubroundStatus defines the type used to refer the state of the current subround
const ( // SsNotFinished defines the un-finished state of the subround SsNotFinished SubroundStatus = iota // SsFinished defines the finished state of the subround SsFinished )
type SubroundsFactory ¶
SubroundsFactory encapsulates the methods specifically for a subrounds factory type (bls, bn) for different consensus types
type Worker ¶
type Worker struct {
// contains filtered or unexported fields
}
Worker defines the data needed by spos to communicate between nodes which are in the validators group
func NewWorker ¶
func NewWorker(args *WorkerArgs) (*Worker, error)
NewWorker creates a new Worker object
func (*Worker) AddReceivedHeaderHandler ¶
func (wrk *Worker) AddReceivedHeaderHandler(handler func(data.HeaderHandler))
AddReceivedHeaderHandler adds a new handler function for a received header
func (*Worker) AddReceivedMessageCall ¶
func (wrk *Worker) AddReceivedMessageCall(messageType consensus.MessageType, receivedMessageCall func(cnsDta *consensus.Message) bool)
AddReceivedMessageCall adds a new handler function for a received messege type
func (*Worker) DisplayStatistics ¶
func (wrk *Worker) DisplayStatistics()
DisplayStatistics logs the consensus messages split on proposed headers
func (*Worker) ExecuteStoredMessages ¶
func (wrk *Worker) ExecuteStoredMessages()
ExecuteStoredMessages tries to execute all the messages received which are valid for execution
func (*Worker) GetConsensusStateChangedChannel ¶
GetConsensusStateChangedChannel gets the channel for the consensusStateChanged
func (*Worker) IsInterfaceNil ¶
IsInterfaceNil returns true if there is no value under the interface
func (*Worker) ProcessReceivedMessage ¶
func (wrk *Worker) ProcessReceivedMessage(message p2p.MessageP2P, fromConnectedPeer p2p.PeerID) error
ProcessReceivedMessage method redirects the received message to the channel which should handle it
func (*Worker) ReceivedHeader ¶
func (wrk *Worker) ReceivedHeader(headerHandler data.HeaderHandler, _ []byte)
ReceivedHeader process the received header, calling each received header handler registered in worker instance
func (*Worker) RemoveAllReceivedMessagesCalls ¶
func (wrk *Worker) RemoveAllReceivedMessagesCalls()
RemoveAllReceivedMessagesCalls removes all the functions handlers
func (*Worker) SetAppStatusHandler ¶
func (wrk *Worker) SetAppStatusHandler(ash core.AppStatusHandler) error
SetAppStatusHandler sets the status metric handler
func (*Worker) StartWorking ¶ added in v1.0.116
func (wrk *Worker) StartWorking()
StartWorking actually starts the consensus working mechanism
type WorkerArgs ¶ added in v1.0.102
type WorkerArgs struct { ConsensusService ConsensusService BlockChain data.ChainHandler BlockProcessor process.BlockProcessor Bootstrapper process.Bootstrapper BroadcastMessenger consensus.BroadcastMessenger ConsensusState *ConsensusState ForkDetector process.ForkDetector KeyGenerator crypto.KeyGenerator Marshalizer marshal.Marshalizer Hasher hashing.Hasher Rounder consensus.Rounder ShardCoordinator sharding.Coordinator SingleSigner crypto.SingleSigner SyncTimer ntp.SyncTimer HeaderSigVerifier RandSeedVerifier HeaderIntegrityVerifier HeaderIntegrityVerifier ChainID []byte NetworkShardingCollector consensus.NetworkShardingCollector AntifloodHandler consensus.P2PAntifloodHandler PoolAdder PoolAdder SignatureSize int PublicKeySize int }
WorkerArgs holds the consensus worker arguments
type WorkerHandler ¶
type WorkerHandler interface { Close() error StartWorking() //AddReceivedMessageCall adds a new handler function for a received message type AddReceivedMessageCall(messageType consensus.MessageType, receivedMessageCall func(cnsDta *consensus.Message) bool) //AddReceivedHeaderHandler adds a new handler function for a received header AddReceivedHeaderHandler(handler func(data.HeaderHandler)) //RemoveAllReceivedMessagesCalls removes all the functions handlers RemoveAllReceivedMessagesCalls() //ProcessReceivedMessage method redirects the received message to the channel which should handle it ProcessReceivedMessage(message p2p.MessageP2P, fromConnectedPeer p2p.PeerID) error //Extend does an extension for the subround with subroundId Extend(subroundId int) //GetConsensusStateChangedChannel gets the channel for the consensusStateChanged GetConsensusStateChangedChannel() chan bool //ExecuteStoredMessages tries to execute all the messages received which are valid for execution ExecuteStoredMessages() //DisplayStatistics method displays statistics of worker at the end of the round DisplayStatistics() //ReceivedHeader method is a wired method through which worker will receive headers from network ReceivedHeader(headerHandler data.HeaderHandler, headerHash []byte) //SetAppStatusHandler sets the status handler object used to collect useful metrics about consensus state machine SetAppStatusHandler(ash core.AppStatusHandler) error // IsInterfaceNil returns true if there is no value under the interface IsInterfaceNil() bool }
WorkerHandler represents the interface for the SposWorker