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

PoS Add GlobalParams for Max Validators and Max Stakers #573

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.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ backend
core

.idea
.vscode

local_scripts/*
lib/mem.log
12 changes: 12 additions & 0 deletions lib/block_view.go
Original file line number Diff line number Diff line change
Expand Up @@ -3035,6 +3035,18 @@ func (bav *UtxoView) _connectUpdateGlobalParams(
return 0, 0, nil, fmt.Errorf("_connectUpdateGlobalParams: unable to decode LeaderScheduleMaxNumValidators as uint64")
}
}
if len(extraData[ValidatorSetMaxNumValidatorsKey]) > 0 {
tholonious marked this conversation as resolved.
Show resolved Hide resolved
newGlobalParamsEntry.ValidatorSetMaxNumValidators, bytesRead = Uvarint(extraData[ValidatorSetMaxNumValidatorsKey])
if bytesRead <= 0 {
return 0, 0, nil, fmt.Errorf("_connectUpdateGlobalParams: unable to decode ValidatorSetMaxNumValidators as uint64")
}
}
if len(extraData[StakingRewardDistributionMaxNumStakersKey]) > 0 {
newGlobalParamsEntry.StakingRewardDistributionMaxNumStakers, bytesRead = Uvarint(extraData[StakingRewardDistributionMaxNumStakersKey])
if bytesRead <= 0 {
return 0, 0, nil, fmt.Errorf("_connectUpdateGlobalParams: unable to decode StakingRewardDistributionMaxNumStakers as uint64")
}
}
if len(extraData[EpochDurationNumBlocksKey]) > 0 {
newGlobalParamsEntry.EpochDurationNumBlocks, bytesRead = Uvarint(extraData[EpochDurationNumBlocksKey])
if bytesRead <= 0 {
Expand Down
22 changes: 22 additions & 0 deletions lib/block_view_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -3785,6 +3785,16 @@ type GlobalParamsEntry struct {
// are included when generating a new Proof-of-Stake leader schedule.
LeaderScheduleMaxNumValidators uint64

// ValidatorSetMaxNumValidators is the maximum number of validators that
// are included in the active validator set every epoch in the Proof-of-Stake
// consensus.
ValidatorSetMaxNumValidators uint64

// StakingRewardDistributionMaxNumStakers is the maximum number of stake entries
// that are eligible to receive block rewards every epoch in the Proof-of-Stake
// consensus.
StakingRewardDistributionMaxNumStakers uint64

// EpochDurationNumBlocks is the number of blocks included in one epoch.
EpochDurationNumBlocks uint64

Expand All @@ -3805,6 +3815,8 @@ func (gp *GlobalParamsEntry) Copy() *GlobalParamsEntry {
StakeLockupEpochDuration: gp.StakeLockupEpochDuration,
ValidatorJailEpochDuration: gp.ValidatorJailEpochDuration,
LeaderScheduleMaxNumValidators: gp.LeaderScheduleMaxNumValidators,
ValidatorSetMaxNumValidators: gp.ValidatorSetMaxNumValidators,
StakingRewardDistributionMaxNumStakers: gp.StakingRewardDistributionMaxNumStakers,
EpochDurationNumBlocks: gp.EpochDurationNumBlocks,
JailInactiveValidatorGracePeriodEpochs: gp.JailInactiveValidatorGracePeriodEpochs,
}
Expand All @@ -3825,6 +3837,8 @@ func (gp *GlobalParamsEntry) RawEncodeWithoutMetadata(blockHeight uint64, skipMe
data = append(data, UintToBuf(gp.StakeLockupEpochDuration)...)
data = append(data, UintToBuf(gp.ValidatorJailEpochDuration)...)
data = append(data, UintToBuf(gp.LeaderScheduleMaxNumValidators)...)
data = append(data, UintToBuf(gp.ValidatorSetMaxNumValidators)...)
data = append(data, UintToBuf(gp.StakingRewardDistributionMaxNumStakers)...)
data = append(data, UintToBuf(gp.EpochDurationNumBlocks)...)
data = append(data, UintToBuf(gp.JailInactiveValidatorGracePeriodEpochs)...)
}
Expand Down Expand Up @@ -3873,6 +3887,14 @@ func (gp *GlobalParamsEntry) RawDecodeWithoutMetadata(blockHeight uint64, rr *by
if err != nil {
return errors.Wrapf(err, "GlobalParamsEntry.Decode: Problem reading LeaderScheduleMaxNumValidators: ")
}
gp.ValidatorSetMaxNumValidators, err = ReadUvarint(rr)
if err != nil {
return errors.Wrapf(err, "GlobalParamsEntry.Decode: Problem reading ValidatorSetMaxNumValidators: ")
}
gp.StakingRewardDistributionMaxNumStakers, err = ReadUvarint(rr)
if err != nil {
return errors.Wrapf(err, "GlobalParamsEntry.Decode: Problem reading StakingRewardDistributionMaxNumStakers: ")
}
gp.EpochDurationNumBlocks, err = ReadUvarint(rr)
if err != nil {
return errors.Wrapf(err, "GlobalParamsEntry.Decode: Problem reading EpochDurationNumBlocks: ")
Expand Down
22 changes: 22 additions & 0 deletions lib/constants.go
Original file line number Diff line number Diff line change
Expand Up @@ -627,6 +627,14 @@ type DeSoParams struct {
// that are included when generating a new Proof-of-Stake leader schedule.
DefaultLeaderScheduleMaxNumValidators uint64

// DefaultValidatorSetMaxNumValidators is the default maximum number of validators
// that are included in the validator set for any given epoch.
DefaultValidatorSetMaxNumValidators uint64

// DefaultStakingRewardDistributionMaxNumStakers is the default number of stake entries
// that are included in the staking reward distribution in each epoch.
DefaultStakingRewardDistributionMaxNumStakers uint64

// DefaultEpochDurationNumBlocks is the default number of blocks included in one epoch.
DefaultEpochDurationNumBlocks uint64

Expand Down Expand Up @@ -1024,6 +1032,12 @@ var DeSoMainnetParams = DeSoParams{
// The max number of validators included in a leader schedule.
DefaultLeaderScheduleMaxNumValidators: uint64(100),

// The max number of validators included in a validator set for any given epoch.
DefaultValidatorSetMaxNumValidators: uint64(1000),

// The max number of stakers included in a staking rewards distribution every epoch.
DefaultStakingRewardDistributionMaxNumStakers: uint64(10000),

// The number of blocks in one epoch
DefaultEpochDurationNumBlocks: uint64(3600),

Expand Down Expand Up @@ -1273,6 +1287,12 @@ var DeSoTestnetParams = DeSoParams{
// The max number of validators included in a leader schedule.
DefaultLeaderScheduleMaxNumValidators: uint64(100),

// The max number of validators included in a validator set for any given epoch.
DefaultValidatorSetMaxNumValidators: uint64(1000),

// The max number of stakers included in a staking rewards distribution every epoch.
DefaultStakingRewardDistributionMaxNumStakers: uint64(10000),

// The number of blocks in one epoch
DefaultEpochDurationNumBlocks: uint64(3600),

Expand Down Expand Up @@ -1326,6 +1346,8 @@ const (
StakeLockupEpochDurationKey = "StakeLockupEpochDuration"
ValidatorJailEpochDurationKey = "ValidatorJailEpochDuration"
LeaderScheduleMaxNumValidatorsKey = "LeaderScheduleMaxNumValidators"
ValidatorSetMaxNumValidatorsKey = "ValidatorSetMaxNumValidators"
StakingRewardDistributionMaxNumStakersKey = "StakingRewardDistributionMaxNumStakers"
EpochDurationNumBlocksKey = "EpochDurationNumBlocks"
JailInactiveValidatorGracePeriodEpochsKey = "JailInactiveValidatorGracePeriodEpochs"

Expand Down
11 changes: 9 additions & 2 deletions lib/pos_snapshot_entries.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,13 @@ package lib
import (
"bytes"
"fmt"
"math"
"sort"

"github.com/dgraph-io/badger/v3"
"github.com/golang/glog"
"github.com/holiman/uint256"
"github.com/pkg/errors"
"math"
"sort"
)

const SnapshotLookbackNumEpochs uint64 = 2
Expand Down Expand Up @@ -97,6 +98,12 @@ func _mergeGlobalParamEntryDefaults(bav *UtxoView, globalParamsEntry *GlobalPara
if globalParamsEntryCopy.LeaderScheduleMaxNumValidators == 0 {
globalParamsEntryCopy.LeaderScheduleMaxNumValidators = bav.Params.DefaultLeaderScheduleMaxNumValidators
}
if globalParamsEntryCopy.ValidatorSetMaxNumValidators == 0 {
globalParamsEntryCopy.ValidatorSetMaxNumValidators = bav.Params.DefaultValidatorSetMaxNumValidators
}
if globalParamsEntryCopy.StakingRewardDistributionMaxNumStakers == 0 {
globalParamsEntryCopy.StakingRewardDistributionMaxNumStakers = bav.Params.DefaultStakingRewardDistributionMaxNumStakers
}
if globalParamsEntryCopy.EpochDurationNumBlocks == 0 {
globalParamsEntryCopy.EpochDurationNumBlocks = bav.Params.DefaultEpochDurationNumBlocks
}
Expand Down