Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Shard validator info handler map interface #3907

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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