Skip to content

Commit

Permalink
Merge pull request #3907 from ElrondNetwork/validators-info-interface…
Browse files Browse the repository at this point in the history
…-defintion-v3

Shard validator info handler map interface
  • Loading branch information
iulianpascalau committed Mar 24, 2022
2 parents 8a122e8 + 709cad2 commit a841644
Show file tree
Hide file tree
Showing 5 changed files with 771 additions and 0 deletions.
9 changes: 9 additions & 0 deletions state/errors.go
Original file line number Diff line number Diff line change
Expand Up @@ -121,3 +121,12 @@ var ErrNilRootHash = errors.New("nil root hash")

// ErrNilChainHandler signals that a nil chain handler was provided
var ErrNilChainHandler = errors.New("nil chain handler")

// ErrNilValidatorInfo signals that a nil value for the validator info has been provided
var ErrNilValidatorInfo = errors.New("validator info is nil")

// ErrValidatorsDifferentShards signals that validators are not in the same shard
var ErrValidatorsDifferentShards = errors.New("validators are not in the same shard")

// ErrValidatorNotFound signals that a validator was not found
var ErrValidatorNotFound = errors.New("validator not found")
62 changes: 62 additions & 0 deletions state/interface.go
Original file line number Diff line number Diff line change
Expand Up @@ -182,3 +182,65 @@ type StoragePruningManager interface {
Close() error
IsInterfaceNil() bool
}

// ShardValidatorsInfoMapHandler shall be used to manage operations inside
// a <shardID, []ValidatorInfoHandler> map in a concurrent-safe way.
type ShardValidatorsInfoMapHandler interface {
GetShardValidatorsInfoMap() map[uint32][]ValidatorInfoHandler
GetAllValidatorsInfo() []ValidatorInfoHandler
GetValidator(blsKey []byte) ValidatorInfoHandler

Add(validator ValidatorInfoHandler) error
Delete(validator ValidatorInfoHandler) error
Replace(old ValidatorInfoHandler, new ValidatorInfoHandler) error
SetValidatorsInShard(shardID uint32, validators []ValidatorInfoHandler) error

GetValInfoPointerMap() map[uint32][]*ValidatorInfo
}

//ValidatorInfoHandler defines which data shall a validator info hold.
type ValidatorInfoHandler interface {
IsInterfaceNil() bool

GetPublicKey() []byte
GetShardId() uint32
GetList() string
GetIndex() uint32
GetTempRating() uint32
GetRating() uint32
GetRatingModifier() float32
GetRewardAddress() []byte
GetLeaderSuccess() uint32
GetLeaderFailure() uint32
GetValidatorSuccess() uint32
GetValidatorFailure() uint32
GetValidatorIgnoredSignatures() uint32
GetNumSelectedInSuccessBlocks() uint32
GetAccumulatedFees() *big.Int
GetTotalLeaderSuccess() uint32
GetTotalLeaderFailure() uint32
GetTotalValidatorSuccess() uint32
GetTotalValidatorFailure() uint32
GetTotalValidatorIgnoredSignatures() uint32

SetPublicKey(publicKey []byte)
SetShardId(shardID uint32)
SetList(list string)
SetIndex(index uint32)
SetTempRating(tempRating uint32)
SetRating(rating uint32)
SetRatingModifier(ratingModifier float32)
SetRewardAddress(rewardAddress []byte)
SetLeaderSuccess(leaderSuccess uint32)
SetLeaderFailure(leaderFailure uint32)
SetValidatorSuccess(validatorSuccess uint32)
SetValidatorFailure(validatorFailure uint32)
SetValidatorIgnoredSignatures(validatorIgnoredSignatures uint32)
SetNumSelectedInSuccessBlocks(numSelectedInSuccessBlock uint32)
SetAccumulatedFees(accumulatedFees *big.Int)
SetTotalLeaderSuccess(totalLeaderSuccess uint32)
SetTotalLeaderFailure(totalLeaderFailure uint32)
SetTotalValidatorSuccess(totalValidatorSuccess uint32)
SetTotalValidatorFailure(totalValidatorFailure uint32)
SetTotalValidatorIgnoredSignatures(totalValidatorIgnoredSignatures uint32)
}
102 changes: 102 additions & 0 deletions state/validatorInfo.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,113 @@

package state

import mathbig "math/big"

// IsInterfaceNil returns true if there is no value under the interface
func (vi *ValidatorInfo) IsInterfaceNil() bool {
return vi == nil
}

// SetPublicKey sets validator's public key
func (vi *ValidatorInfo) SetPublicKey(publicKey []byte) {
vi.PublicKey = publicKey
}

// SetList sets validator's list
func (vi *ValidatorInfo) SetList(list string) {
vi.List = list
}

// SetShardId sets validator's public shard id
func (vi *ValidatorInfo) SetShardId(shardID uint32) {
vi.ShardId = shardID
}

// SetIndex sets validator's index
func (vi *ValidatorInfo) SetIndex(index uint32) {
vi.Index = index
}

// SetTempRating sets validator's temp rating
func (vi *ValidatorInfo) SetTempRating(tempRating uint32) {
vi.TempRating = tempRating
}

// SetRating sets validator's rating
func (vi *ValidatorInfo) SetRating(rating uint32) {
vi.Rating = rating
}

// SetRatingModifier sets validator's rating modifier
func (vi *ValidatorInfo) SetRatingModifier(ratingModifier float32) {
vi.RatingModifier = ratingModifier
}

// SetRewardAddress sets validator's reward address
func (vi *ValidatorInfo) SetRewardAddress(rewardAddress []byte) {
vi.RewardAddress = rewardAddress
}

// SetLeaderSuccess sets leader success
func (vi *ValidatorInfo) SetLeaderSuccess(leaderSuccess uint32) {
vi.LeaderSuccess = leaderSuccess
}

// SetLeaderFailure sets validator's leader failure
func (vi *ValidatorInfo) SetLeaderFailure(leaderFailure uint32) {
vi.LeaderFailure = leaderFailure
}

// SetValidatorSuccess sets validator's success
func (vi *ValidatorInfo) SetValidatorSuccess(validatorSuccess uint32) {
vi.ValidatorSuccess = validatorSuccess
}

// SetValidatorFailure sets validator's failure
func (vi *ValidatorInfo) SetValidatorFailure(validatorFailure uint32) {
vi.ValidatorFailure = validatorFailure
}

// SetValidatorIgnoredSignatures sets validator's ignored signatures
func (vi *ValidatorInfo) SetValidatorIgnoredSignatures(validatorIgnoredSignatures uint32) {
vi.ValidatorIgnoredSignatures = validatorIgnoredSignatures
}

// SetNumSelectedInSuccessBlocks sets validator's num of selected in success block
func (vi *ValidatorInfo) SetNumSelectedInSuccessBlocks(numSelectedInSuccessBlock uint32) {
vi.NumSelectedInSuccessBlocks = numSelectedInSuccessBlock
}

// SetAccumulatedFees sets validator's accumulated fees
func (vi *ValidatorInfo) SetAccumulatedFees(accumulatedFees *mathbig.Int) {
vi.AccumulatedFees = mathbig.NewInt(0).Set(accumulatedFees)
}

// SetTotalLeaderSuccess sets validator's total leader success
func (vi *ValidatorInfo) SetTotalLeaderSuccess(totalLeaderSuccess uint32) {
vi.TotalLeaderSuccess = totalLeaderSuccess
}

// SetTotalLeaderFailure sets validator's total leader failure
func (vi *ValidatorInfo) SetTotalLeaderFailure(totalLeaderFailure uint32) {
vi.TotalLeaderFailure = totalLeaderFailure
}

// SetTotalValidatorSuccess sets validator's total success
func (vi *ValidatorInfo) SetTotalValidatorSuccess(totalValidatorSuccess uint32) {
vi.TotalValidatorSuccess = totalValidatorSuccess
}

// SetTotalValidatorFailure sets validator's total failure
func (vi *ValidatorInfo) SetTotalValidatorFailure(totalValidatorFailure uint32) {
vi.TotalValidatorFailure = totalValidatorFailure
}

// SetTotalValidatorIgnoredSignatures sets validator's total ignored signatures
func (vi *ValidatorInfo) SetTotalValidatorIgnoredSignatures(totalValidatorIgnoredSignatures uint32) {
vi.TotalValidatorIgnoredSignatures = totalValidatorIgnoredSignatures
}

// IsInterfaceNil returns true if there is no value under the interface
func (svi *ShardValidatorInfo) IsInterfaceNil() bool {
return svi == nil
Expand Down

0 comments on commit a841644

Please sign in to comment.