Documentation ¶
Index ¶
- Variables
- func NewHashValidatorsShuffler(args *NodesShufflerArgs) (*randHashShuffler, error)
- func NewIndexHashedNodesCoordinator(arguments ArgNodesCoordinator) (*indexHashedNodesCoordinator, error)
- func NewIndexHashedNodesCoordinatorWithRater(indexNodesCoordinator *indexHashedNodesCoordinator, ...) (*indexHashedNodesCoordinatorWithRater, error)
- func NewSelectorExpandedList(weightList []uint32, hasher hashing.Hasher) (*selectorExpandedList, error)
- func NewSelectorWRS(weightList []uint32, hasher hashing.Hasher) (*selectorWRS, error)
- func NewValidator(pubKey []byte, chances uint32, index uint32) (*validator, error)
- func NodesInfoToValidators(nodesInfo map[uint32][]GenesisNodeInfoHandler) (map[uint32][]Validator, error)
- func SerializableValidatorsToValidators(nodeRegistryValidators map[string][]*SerializableValidator) (map[uint32][]Validator, error)
- type ArgNodesCoordinator
- type ArgsUpdateNodes
- type Cacher
- type ChanceComputer
- type CrossShardValidatorDistributor
- type EpochStartActionHandler
- type EpochStartEventNotifier
- type EpochValidators
- type EpochsConfigUpdateHandler
- type GenesisNodeInfoHandler
- type IntraShardValidatorDistributor
- type NodeTypeProviderHandler
- type NodesCoordinator
- type NodesCoordinatorHelper
- type NodesCoordinatorRegistry
- type NodesShuffler
- type NodesShufflerArgs
- type PublicKeysSelector
- type RandomSelector
- type ResUpdateNodes
- type SelectionBasedProvider
- type SerializableValidator
- type ShuffledOutHandler
- type Validator
- type ValidatorsDistributor
Constants ¶
This section is empty.
Variables ¶
var ErrEpochNodesConfigDoesNotExist = errors.New("epoch nodes configuration does not exist")
ErrEpochNodesConfigDoesNotExist signals that the epoch nodes configuration is missing
var ErrInvalidConsensusGroupSize = errors.New("invalid consensus group size")
ErrInvalidConsensusGroupSize signals that the consensus size is invalid (e.g. value is negative)
var ErrInvalidNumberOfShards = errors.New("the number of shards must be greater than zero")
ErrInvalidNumberOfShards signals that an invalid number of shards was passed to the sharding registry
var ErrInvalidNumberPubKeys = errors.New("invalid number of public keys")
ErrInvalidNumberPubKeys signals that an invalid number of public keys was used
var ErrInvalidSampleSize = errors.New("invalid sample size")
ErrInvalidSampleSize signals that an invalid sample size was provided
var ErrInvalidShardId = errors.New("shard id must be smaller than the total number of shards")
ErrInvalidShardId signals that an invalid shard id was passed
var ErrInvalidWeight = errors.New("invalid weight")
ErrInvalidWeight signals an invalid weight was provided
var ErrMapSizeZero = errors.New("map size zero")
ErrMapSizeZero signals that there are no elements in the map
var ErrNilBlockBody = errors.New("nil block body")
ErrNilBlockBody signals that block body is nil
var ErrNilBootStorer = errors.New("nil boot storer provided")
ErrNilBootStorer signals that a nil boot storer was provided
var ErrNilCacher = errors.New("nil cacher")
ErrNilCacher signals that a nil cacher has been provided
var ErrNilChanceComputer = errors.New("nil chance computer")
ErrNilChanceComputer signals that a nil chance computer was provided
var ErrNilEnableEpochsHandler = errors.New("nil enable epochs handler")
ErrNilEnableEpochsHandler signals that a nil enable epochs handler has been provided
var ErrNilHasher = errors.New("nil hasher")
ErrNilHasher signals that a nil hasher has been provided
var ErrNilInputNodesMap = errors.New("nil input nodes map")
ErrNilInputNodesMap signals that a nil nodes map was provided
var ErrNilMarshalizer = errors.New("nil marshalizer")
ErrNilMarshalizer signals that the marshalizer is nil
var ErrNilNodeShufflerArguments = errors.New("nil arguments for the creation of a node shuffler")
ErrNilNodeShufflerArguments signals that a nil argument pointer was provided for creating the nodes shuffler instance
var ErrNilNodeStopChannel = errors.New("nil node stop channel")
ErrNilNodeStopChannel signals that a nil node stop channel has been provided
var ErrNilNodeTypeProvider = errors.New("nil node type provider")
ErrNilNodeTypeProvider signals that a nil node type provider has been given
var ErrNilNodesCoordinator = errors.New("nil nodesCoordinator")
ErrNilNodesCoordinator signals that the nodesCoordinator is nil
var ErrNilOrEmptyDestinationForDistribute = errors.New("nil or empty destination list for distributeNodes")
ErrNilOrEmptyDestinationForDistribute signals that a nil or empty value was provided for destination of distributedNodes
var ErrNilPreviousEpochConfig = errors.New("nil previous epoch config")
ErrNilPreviousEpochConfig signals that the previous epoch config is nil
var ErrNilPubKey = errors.New("nil public key")
ErrNilPubKey signals that the public key is nil
var ErrNilRandomSelector = errors.New("nil selector")
ErrNilRandomSelector signals that a nil selector was provided
var ErrNilRandomness = errors.New("nil randomness source")
ErrNilRandomness signals that a nil randomness source has been provided
var ErrNilShuffledOutHandler = errors.New("nil shuffled out handler")
ErrNilShuffledOutHandler signals that a nil shuffled out handler has been provided
var ErrNilShuffler = errors.New("nil nodes shuffler provided")
ErrNilShuffler signals that a nil shuffler was provided
var ErrNilValidatorInfoCacher = errors.New("validator info cacher is nil")
ErrNilValidatorInfoCacher signals that a nil value for the validator info cacher has been provided
var ErrNilWeights = errors.New("nil weights")
ErrNilWeights signals that nil weights list was provided
var ErrNotImplemented = errors.New("feature not implemented")
ErrNotImplemented signals a call of a non implemented functionality
var ErrSmallMetachainEligibleListSize = errors.New("small metachain eligible list size")
ErrSmallMetachainEligibleListSize signals that the eligible validators list's size is less than the consensus size
var ErrSmallShardEligibleListSize = errors.New("small shard eligible list size")
ErrSmallShardEligibleListSize signals that the eligible validators list's size is less than the consensus size
var ErrValidatorCannotBeFullArchive = errors.New("validator cannot be a full archive node")
ErrValidatorCannotBeFullArchive signals a configuration issue because a validator cannot be a full archive node
var ErrValidatorNotFound = errors.New("validator not found")
ErrValidatorNotFound signals that the validator has not been found
var ErrWrongTypeAssertion = errors.New("wrong type assertion")
ErrWrongTypeAssertion signals wrong type assertion error
Functions ¶
func NewHashValidatorsShuffler ¶
func NewHashValidatorsShuffler(args *NodesShufflerArgs) (*randHashShuffler, error)
NewHashValidatorsShuffler creates a validator shuffler that uses a hash between validator key and a given random number to do the shuffling
func NewIndexHashedNodesCoordinator ¶
func NewIndexHashedNodesCoordinator(arguments ArgNodesCoordinator) (*indexHashedNodesCoordinator, error)
NewIndexHashedNodesCoordinator creates a new index hashed group selector
func NewIndexHashedNodesCoordinatorWithRater ¶
func NewIndexHashedNodesCoordinatorWithRater( indexNodesCoordinator *indexHashedNodesCoordinator, chanceComputer ChanceComputer, ) (*indexHashedNodesCoordinatorWithRater, error)
NewIndexHashedNodesCoordinatorWithRater creates a new index hashed group selector
func NewSelectorExpandedList ¶
func NewSelectorExpandedList(weightList []uint32, hasher hashing.Hasher) (*selectorExpandedList, error)
NewSelectorExpandedList creates a new selector initializing selection set to the given lists of validators and expanding it according to each validator weight.
func NewSelectorWRS ¶
NewSelectorWRS creates a new selector initializing selection set to the given lists of weights
func NewValidator ¶
NewValidator creates a new instance of a validator
func NodesInfoToValidators ¶
func NodesInfoToValidators(nodesInfo map[uint32][]GenesisNodeInfoHandler) (map[uint32][]Validator, error)
NodesInfoToValidators maps nodeInfo to validator interface
func SerializableValidatorsToValidators ¶
func SerializableValidatorsToValidators(nodeRegistryValidators map[string][]*SerializableValidator) (map[uint32][]Validator, error)
SerializableValidatorsToValidators creates the validator map from serializable validator map
Types ¶
type ArgNodesCoordinator ¶
type ArgNodesCoordinator struct { ShardConsensusGroupSize int MetaConsensusGroupSize int Marshalizer marshal.Marshalizer Hasher hashing.Hasher Shuffler NodesShuffler EpochStartNotifier EpochStartEventNotifier BootStorer storage.Storer ShardIDAsObserver uint32 NbShards uint32 EligibleNodes map[uint32][]Validator WaitingNodes map[uint32][]Validator SelfPublicKey []byte Epoch uint32 StartEpoch uint32 ConsensusGroupCache Cacher ShuffledOutHandler ShuffledOutHandler ChanStopNode chan endProcess.ArgEndProcess NodeTypeProvider NodeTypeProviderHandler IsFullArchive bool EnableEpochsHandler common.EnableEpochsHandler ValidatorInfoCacher epochStart.ValidatorInfoCacher }
ArgNodesCoordinator holds all dependencies required by the nodes coordinator in order to create new instances
type ArgsUpdateNodes ¶
type ArgsUpdateNodes struct { Eligible map[uint32][]Validator Waiting map[uint32][]Validator NewNodes []Validator UnStakeLeaving []Validator AdditionalLeaving []Validator Rand []byte NbShards uint32 Epoch uint32 }
ArgsUpdateNodes holds the parameters required by the shuffler to generate a new nodes configuration
type Cacher ¶
type Cacher interface { // Clear is used to completely clear the cache. Clear() // Put adds a value to the cache. Returns true if an eviction occurred. Put(key []byte, value interface{}, sizeInBytes int) (evicted bool) // Get looks up a key's value from the cache. Get(key []byte) (value interface{}, ok bool) }
Cacher provides the capabilities needed to store and retrieve information needed in the NodesCoordinator
type ChanceComputer ¶
type ChanceComputer interface { //GetChance returns the chances for the rating GetChance(uint32) uint32 //IsInterfaceNil verifies if the interface is nil IsInterfaceNil() bool }
ChanceComputer provides chance computation capabilities based on a rating
type CrossShardValidatorDistributor ¶
type CrossShardValidatorDistributor struct{}
CrossShardValidatorDistributor - distributes validators from source to destination cross shards
func (*CrossShardValidatorDistributor) DistributeValidators ¶
func (vd *CrossShardValidatorDistributor) DistributeValidators( destination map[uint32][]Validator, source map[uint32][]Validator, rand []byte, balanced bool, ) error
DistributeValidators will handle the moving of the nodes to the map for cross shard validator distributor
func (*CrossShardValidatorDistributor) IsInterfaceNil ¶
func (vd *CrossShardValidatorDistributor) IsInterfaceNil() bool
IsInterfaceNil - verifies if the interface is nil
type EpochStartActionHandler ¶
type EpochStartActionHandler interface { EpochStartAction(hdr data.HeaderHandler) EpochStartPrepare(metaHdr data.HeaderHandler, body data.BodyHandler) NotifyOrder() uint32 }
EpochStartActionHandler defines the action taken on epoch start event
type EpochStartEventNotifier ¶
type EpochStartEventNotifier interface { RegisterHandler(handler epochStart.ActionHandler) UnregisterHandler(handler epochStart.ActionHandler) IsInterfaceNil() bool }
EpochStartEventNotifier provides Register and Unregister functionality for the end of epoch events
type EpochValidators ¶
type EpochValidators struct { EligibleValidators map[string][]*SerializableValidator `json:"eligibleValidators"` WaitingValidators map[string][]*SerializableValidator `json:"waitingValidators"` LeavingValidators map[string][]*SerializableValidator `json:"leavingValidators"` }
EpochValidators holds one epoch configuration for a nodes coordinator
type EpochsConfigUpdateHandler ¶
type EpochsConfigUpdateHandler interface { NodesCoordinator SetNodesConfigFromValidatorsInfo(epoch uint32, randomness []byte, validatorsInfo []*state.ShardValidatorInfo) error IsEpochInConfig(epoch uint32) bool }
EpochsConfigUpdateHandler specifies the behaviour needed to update nodes config epochs
type GenesisNodeInfoHandler ¶
type GenesisNodeInfoHandler interface { AssignedShard() uint32 AddressBytes() []byte PubKeyBytes() []byte GetInitialRating() uint32 IsInterfaceNil() bool }
GenesisNodeInfoHandler defines the public methods for the genesis nodes info
type IntraShardValidatorDistributor ¶
type IntraShardValidatorDistributor struct{}
IntraShardValidatorDistributor - distributes validators from source to destination inside the same shard
func (*IntraShardValidatorDistributor) DistributeValidators ¶
func (vd *IntraShardValidatorDistributor) DistributeValidators( destination map[uint32][]Validator, source map[uint32][]Validator, _ []byte, _ bool, ) error
DistributeValidators will handle the moving of the nodes to the map for intra shard validator distributor
func (*IntraShardValidatorDistributor) IsInterfaceNil ¶
func (vd *IntraShardValidatorDistributor) IsInterfaceNil() bool
IsInterfaceNil - verifies if the interface is nil
type NodeTypeProviderHandler ¶
type NodeTypeProviderHandler interface { SetType(nodeType core.NodeType) GetType() core.NodeType IsInterfaceNil() bool }
NodeTypeProviderHandler defines the actions needed for a component that can handle the node type
type NodesCoordinator ¶
type NodesCoordinator interface { NodesCoordinatorHelper PublicKeysSelector ComputeConsensusGroup(randomness []byte, round uint64, shardId uint32, epoch uint32) (validatorsGroup []Validator, err error) GetValidatorWithPublicKey(publicKey []byte) (validator Validator, shardId uint32, err error) LoadState(key []byte) error GetSavedStateKey() []byte ShardIdForEpoch(epoch uint32) (uint32, error) ShuffleOutForEpoch(_ uint32) GetConsensusWhitelistedNodes(epoch uint32) (map[string]struct{}, error) ConsensusGroupSize(uint32) int GetNumTotalEligible() uint64 IsInterfaceNil() bool }
NodesCoordinator defines the behaviour of a struct able to do validator group selection
type NodesCoordinatorHelper ¶
type NodesCoordinatorHelper interface { ValidatorsWeights(validators []Validator) ([]uint32, error) ComputeAdditionalLeaving(allValidators []*state.ShardValidatorInfo) (map[uint32][]Validator, error) GetChance(uint32) uint32 }
NodesCoordinatorHelper provides polymorphism functionality for nodesCoordinator
type NodesCoordinatorRegistry ¶
type NodesCoordinatorRegistry struct { EpochsConfig map[string]*EpochValidators `json:"epochConfigs"` CurrentEpoch uint32 `json:"currentEpoch"` }
NodesCoordinatorRegistry holds the data that can be used to initialize a nodes coordinator
type NodesShuffler ¶
type NodesShuffler interface { UpdateParams(numNodesShard uint32, numNodesMeta uint32, hysteresis float32, adaptivity bool) UpdateNodeLists(args ArgsUpdateNodes) (*ResUpdateNodes, error) IsInterfaceNil() bool }
NodesShuffler provides shuffling functionality for nodes
type NodesShufflerArgs ¶
type NodesShufflerArgs struct { NodesShard uint32 NodesMeta uint32 Hysteresis float32 Adaptivity bool ShuffleBetweenShards bool MaxNodesEnableConfig []config.MaxNodesChangeConfig EnableEpochsHandler common.EnableEpochsHandler }
NodesShufflerArgs defines the arguments required to create a nodes shuffler
type PublicKeysSelector ¶
type PublicKeysSelector interface { GetValidatorsIndexes(publicKeys []string, epoch uint32) ([]uint64, error) GetAllEligibleValidatorsPublicKeys(epoch uint32) (map[uint32][][]byte, error) GetAllWaitingValidatorsPublicKeys(epoch uint32) (map[uint32][][]byte, error) GetAllLeavingValidatorsPublicKeys(epoch uint32) (map[uint32][][]byte, error) GetConsensusValidatorsPublicKeys(randomness []byte, round uint64, shardId uint32, epoch uint32) ([]string, error) GetOwnPublicKey() []byte }
PublicKeysSelector allows retrieval of eligible validators public keys
type RandomSelector ¶
type RandomSelector interface { Select(randSeed []byte, sampleSize uint32) ([]uint32, error) IsInterfaceNil() bool }
RandomSelector selects randomly a subset of elements from a set of data
type ResUpdateNodes ¶
type ResUpdateNodes struct { Eligible map[uint32][]Validator Waiting map[uint32][]Validator Leaving []Validator StillRemaining []Validator }
ResUpdateNodes holds the result of the UpdateNodes method
type SelectionBasedProvider ¶
type SelectionBasedProvider struct {
// contains filtered or unexported fields
}
SelectionBasedProvider will handle the returning of the consensus group by simulating a reslicing of the expanded eligible list. A comparison between a real reslicing and this can be found in common_test.go
func NewSelectionBasedProvider ¶
func NewSelectionBasedProvider(hasher hashing.Hasher, maxSize uint32) *SelectionBasedProvider
NewSelectionBasedProvider will return a new instance of SelectionBasedProvider
func (*SelectionBasedProvider) Get ¶
func (sbp *SelectionBasedProvider) Get(randomness []byte, numValidators int64, expandedEligibleList []uint32) ([]uint32, error)
Get will return the consensus group based on the randomness. After an item is chosen, it is added to the slice, so it won't be selected again so next time a new item is needed, the index is recalculated until the validator doesn't exist in that slice
type SerializableValidator ¶
type SerializableValidator struct { PubKey []byte `json:"pubKey"` Chances uint32 `json:"chances"` Index uint32 `json:"index"` }
SerializableValidator holds the minimal data required for marshalling and un-marshalling a validator
func ValidatorArrayToSerializableValidatorArray ¶
func ValidatorArrayToSerializableValidatorArray(validators []Validator) []*SerializableValidator
ValidatorArrayToSerializableValidatorArray -
type ShuffledOutHandler ¶
type ShuffledOutHandler interface { Process(newShardID uint32) error RegisterHandler(handler func(newShardID uint32)) CurrentShardID() uint32 IsInterfaceNil() bool }
ShuffledOutHandler defines the methods needed for the computation of a shuffled out event
type Validator ¶
Validator defines a node that can be allocated to a shard for participation in a consensus group as validator or block proposer
func SerializableShardValidatorListToValidatorList ¶
func SerializableShardValidatorListToValidatorList(shardValidators []*SerializableValidator) ([]Validator, error)
SerializableShardValidatorListToValidatorList creates the validator list from serializable validator list
Source Files ¶
- common.go
- dtos.go
- errors.go
- expandedListSampling.go
- hashValidatorShuffler.go
- indexHashedNodesCoordinator.go
- indexHashedNodesCoordinatorLite.go
- indexHashedNodesCoordinatorRegistry.go
- indexHashedNodesCoordinatorWithRater.go
- interface.go
- selectionBasedProvider.go
- shardingArgs.go
- validator.go
- validatorDistributor.go
- weightedRandomSampling.go