Skip to content

Commit a7b61f2

Browse files
feat: Updating defaultMinStakingDuration to 48h post HeliconRelease ONLY (#5299)
Signed-off-by: SavalaBee <sarala.b@avalabs.org> Co-authored-by: Stephen Buttolph <stephen@avalabs.org>
1 parent 170ec7f commit a7b61f2

19 files changed

Lines changed: 323 additions & 122 deletions

config/BUILD.bazel

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,10 +62,12 @@ go_test(
6262
deps = [
6363
"//chains",
6464
"//config/node",
65+
"//genesis",
6566
"//ids",
6667
"//snow/consensus/simplex",
6768
"//snow/consensus/snowball",
6869
"//subnets",
70+
"//utils",
6971
"//utils/constants",
7072
"@com_github_spf13_pflag//:pflag",
7173
"@com_github_spf13_viper//:viper",

config/config.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -805,6 +805,7 @@ func getStakingConfig(v *viper.Viper, networkID uint32) (node.StakingConfig, err
805805
config.MaxValidatorStake = v.GetUint64(MaxValidatorStakeKey)
806806
config.MinDelegatorStake = v.GetUint64(MinDelegatorStakeKey)
807807
config.MinStakeDuration = v.GetDuration(MinStakeDurationKey)
808+
config.HeliconMinStakeDuration = v.GetDuration(HeliconMinStakeDurationKey)
808809
config.MaxStakeDuration = v.GetDuration(MaxStakeDurationKey)
809810
config.RewardConfig.MaxConsumptionRate = v.GetUint64(StakeMaxConsumptionRateKey)
810811
config.RewardConfig.MinConsumptionRate = v.GetUint64(StakeMinConsumptionRateKey)

config/config.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -361,6 +361,7 @@ Staking economics configuration.
361361
| `--min-delegator-stake` | `AVAGO_MIN_DELEGATOR_STAKE` | int | network dependent | The minimum stake, in nAVAX, that can be delegated to a validator of the Primary Network. Defaults to `25000000000` (25 AVAX) on Mainnet. Defaults to `5000000` (.005 AVAX) on Test Net. This can only be changed on a local network. |
362362
| `--min-delegation-fee` | `AVAGO_MIN_DELEGATION_FEE` | int | `20000` | The minimum delegation fee that can be charged for delegation on the Primary Network, multiplied by \`10,000\`. Must be in the range \[0, 1000000\]. This can only be changed on a local network. |
363363
| `--min-stake-duration` | `AVAGO_MIN_STAKE_DURATION` | duration | `336h` | Minimum staking duration. This can only be changed on a local network. This applies to both delegation and validation periods. |
364+
| `--helicon-min-stake-duration` | `AVAGO_HELICON_MIN_STAKE_DURATION` | duration | `48h` | Minimum staking duration post Helicon. This can only be changed on a local network. This applies to only to validation periods. |
364365
| `--max-stake-duration` | `AVAGO_MAX_STAKE_DURATION` | duration | `8760h` | The maximum staking duration, in hours. This can only be changed on a local network. |
365366
| `--stake-minting-period` | `AVAGO_STAKE_MINTING_PERIOD` | duration | `8760h` | Consumption period of the staking function, in hours. This can only be changed on a local network. |
366367
| `--stake-max-consumption-rate` | `AVAGO_STAKE_MAX_CONSUMPTION_RATE` | uint | `120000` | The maximum percentage of the consumption rate for the remaining token supply in the minting period, which is 1 year on Mainnet. This can only be changed on a local network. |

config/config_test.go

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,12 @@ import (
1919

2020
"github.com/ava-labs/avalanchego/chains"
2121
"github.com/ava-labs/avalanchego/config/node"
22+
"github.com/ava-labs/avalanchego/genesis"
2223
"github.com/ava-labs/avalanchego/ids"
2324
"github.com/ava-labs/avalanchego/snow/consensus/simplex"
2425
"github.com/ava-labs/avalanchego/snow/consensus/snowball"
2526
"github.com/ava-labs/avalanchego/subnets"
27+
"github.com/ava-labs/avalanchego/utils"
2628
"github.com/ava-labs/avalanchego/utils/constants"
2729
)
2830

@@ -915,6 +917,37 @@ func TestGetStakingSigner(t *testing.T) {
915917
}
916918
}
917919

920+
func TestGetStakingConfig_Helicon(t *testing.T) {
921+
tests := []struct {
922+
name string
923+
set *time.Duration
924+
want time.Duration
925+
}{
926+
{
927+
name: "default",
928+
want: genesis.LocalParams.HeliconMinStakeDuration,
929+
},
930+
{
931+
name: "overridden",
932+
set: utils.PointerTo(15 * time.Minute),
933+
want: 15 * time.Minute,
934+
},
935+
}
936+
for _, tt := range tests {
937+
t.Run(tt.name, func(t *testing.T) {
938+
v := setupViperFlags()
939+
v.Set(DataDirKey, t.TempDir())
940+
if tt.set != nil {
941+
v.Set(HeliconMinStakeDurationKey, *tt.set)
942+
}
943+
944+
config, err := getStakingConfig(v, constants.LocalID)
945+
require.NoError(t, err)
946+
require.Equal(t, tt.want, config.HeliconMinStakeDuration)
947+
})
948+
}
949+
}
950+
918951
func TestGetDiskSpaceConfig(t *testing.T) {
919952
tests := []struct {
920953
name string

config/flags.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -282,6 +282,8 @@ func addNodeFlags(fs *pflag.FlagSet) {
282282
fs.Uint64(MinDelegatorFeeKey, uint64(genesis.LocalParams.MinDelegationFee), "Minimum delegation fee, in the range [0, 1000000], that can be charged for delegation on the primary network")
283283
// Minimum Stake Duration
284284
fs.Duration(MinStakeDurationKey, genesis.LocalParams.MinStakeDuration, "Minimum staking duration")
285+
// Helicon Minimum Stake Duration
286+
fs.Duration(HeliconMinStakeDurationKey, genesis.LocalParams.HeliconMinStakeDuration, "Minimum staking duration post Helicon")
285287
// Maximum Stake Duration
286288
fs.Duration(MaxStakeDurationKey, genesis.LocalParams.MaxStakeDuration, "Maximum staking duration")
287289
// Stake Reward Configs

config/keys.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ const (
4242
MinDelegatorStakeKey = "min-delegator-stake"
4343
MinDelegatorFeeKey = "min-delegation-fee"
4444
MinStakeDurationKey = "min-stake-duration"
45+
HeliconMinStakeDurationKey = "helicon-min-stake-duration"
4546
MaxStakeDurationKey = "max-stake-duration"
4647
StakeMaxConsumptionRateKey = "stake-max-consumption-rate"
4748
StakeMinConsumptionRateKey = "stake-min-consumption-rate"

genesis/genesis_fuji.go

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -52,13 +52,14 @@ var (
5252
},
5353
},
5454
StakingConfig: StakingConfig{
55-
UptimeRequirement: .8, // 80%
56-
MinValidatorStake: 1 * units.Avax,
57-
MaxValidatorStake: 3 * units.MegaAvax,
58-
MinDelegatorStake: 1 * units.Avax,
59-
MinDelegationFee: 20000, // 2%
60-
MinStakeDuration: 24 * time.Hour,
61-
MaxStakeDuration: 365 * 24 * time.Hour,
55+
UptimeRequirement: .8, // 80%
56+
MinValidatorStake: 1 * units.Avax,
57+
MaxValidatorStake: 3 * units.MegaAvax,
58+
MinDelegatorStake: 1 * units.Avax,
59+
MinDelegationFee: 20000, // 2%
60+
MinStakeDuration: 24 * time.Hour,
61+
MaxStakeDuration: 365 * 24 * time.Hour,
62+
HeliconMinStakeDuration: 12 * time.Hour,
6263
RewardConfig: reward.Config{
6364
MaxConsumptionRate: .12 * reward.PercentDenominator,
6465
MinConsumptionRate: .10 * reward.PercentDenominator,

genesis/genesis_local.go

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -70,13 +70,14 @@ var (
7070
},
7171
},
7272
StakingConfig: StakingConfig{
73-
UptimeRequirement: .8, // 80%
74-
MinValidatorStake: 2 * units.KiloAvax,
75-
MaxValidatorStake: 3 * units.MegaAvax,
76-
MinDelegatorStake: 25 * units.Avax,
77-
MinDelegationFee: 20000, // 2%
78-
MinStakeDuration: 24 * time.Hour,
79-
MaxStakeDuration: 365 * 24 * time.Hour,
73+
UptimeRequirement: .8, // 80%
74+
MinValidatorStake: 2 * units.KiloAvax,
75+
MaxValidatorStake: 3 * units.MegaAvax,
76+
MinDelegatorStake: 25 * units.Avax,
77+
MinDelegationFee: 20000, // 2%
78+
MinStakeDuration: 24 * time.Hour,
79+
MaxStakeDuration: 365 * 24 * time.Hour,
80+
HeliconMinStakeDuration: 1 * time.Hour,
8081
RewardConfig: reward.Config{
8182
MaxConsumptionRate: .12 * reward.PercentDenominator,
8283
MinConsumptionRate: .10 * reward.PercentDenominator,

genesis/genesis_mainnet.go

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -52,13 +52,14 @@ var (
5252
},
5353
},
5454
StakingConfig: StakingConfig{
55-
UptimeRequirement: .8, // 80%
56-
MinValidatorStake: 2 * units.KiloAvax,
57-
MaxValidatorStake: 3 * units.MegaAvax,
58-
MinDelegatorStake: 25 * units.Avax,
59-
MinDelegationFee: 20000, // 2%
60-
MinStakeDuration: 2 * 7 * 24 * time.Hour,
61-
MaxStakeDuration: 365 * 24 * time.Hour,
55+
UptimeRequirement: .8, // 80%
56+
MinValidatorStake: 2 * units.KiloAvax,
57+
MaxValidatorStake: 3 * units.MegaAvax,
58+
MinDelegatorStake: 25 * units.Avax,
59+
MinDelegationFee: 20000, // 2%
60+
MinStakeDuration: 2 * 7 * 24 * time.Hour,
61+
MaxStakeDuration: 365 * 24 * time.Hour,
62+
HeliconMinStakeDuration: 48 * time.Hour,
6263
RewardConfig: reward.Config{
6364
MaxConsumptionRate: .12 * reward.PercentDenominator,
6465
MinConsumptionRate: .10 * reward.PercentDenominator,

genesis/params.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,9 @@ type StakingConfig struct {
3131
// MaxStakeDuration is the maximum amount of time a validator can validate
3232
// for in a single period.
3333
MaxStakeDuration time.Duration `json:"maxStakeDuration"`
34+
// HeliconMinStakeDuration is the minimum staking duration for the primary
35+
// network after the Helicon upgrade (ACP-273).
36+
HeliconMinStakeDuration time.Duration `json:"heliconMinStakeDuration"`
3437
// RewardConfig is the config for the reward function.
3538
RewardConfig reward.Config `json:"rewardConfig"`
3639
}

0 commit comments

Comments
 (0)