From 0b44b54ec8c9138ef0382262806655daf97521b6 Mon Sep 17 00:00:00 2001 From: Yarom Swisa Date: Sun, 24 Dec 2023 10:23:45 +0000 Subject: [PATCH 1/8] added upgrade handler --- app/upgrades/empty_upgrades.go | 38 +++++++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/app/upgrades/empty_upgrades.go b/app/upgrades/empty_upgrades.go index f07c2b573d..ebab5b8c6a 100644 --- a/app/upgrades/empty_upgrades.go +++ b/app/upgrades/empty_upgrades.go @@ -1,9 +1,12 @@ package upgrades import ( + "fmt" + store "github.com/cosmos/cosmos-sdk/store/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" + "github.com/cosmos/cosmos-sdk/x/bank/types" minttypes "github.com/cosmos/cosmos-sdk/x/mint/types" upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" "github.com/lavanet/lava/app/keepers" @@ -175,9 +178,42 @@ var Upgrade_0_31_1 = Upgrade{ var Upgrade_0_32_0 = Upgrade{ UpgradeName: "v0.32.0", - CreateUpgradeHandler: defaultUpgradeHandler, + CreateUpgradeHandler: v0_32_0_UpgradeHandler, StoreUpgrades: store.StoreUpgrades{ Added: []string{rewardstypes.StoreKey}, Deleted: []string{minttypes.StoreKey}, }, } + +func v0_32_0_UpgradeHandler( + m *module.Manager, + c module.Configurator, + bapm BaseAppParamManager, + lk *keepers.LavaKeepers, +) upgradetypes.UpgradeHandler { + return func(ctx sdk.Context, plan upgradetypes.Plan, vm module.VersionMap) (module.VersionMap, error) { + totalSupply, err := lk.BankKeeper.TotalSupply(ctx, &types.QueryTotalSupplyRequest{}) + if err != nil { + return nil, err + } + allocate := totalSupply.Supply.QuoInt(sdk.NewIntFromUint64(500)) + err = lk.BankKeeper.MintCoins(ctx, string(rewardstypes.ValidatorsRewardsAllocationPoolName), allocate) + if err != nil { + return nil, err + } + err = lk.BankKeeper.MintCoins(ctx, string(rewardstypes.ProvidersRewardsAllocationPool), allocate) + if err != nil { + return nil, err + } + + rewards := lk.DualstakingKeeper.GetAllDelegatorReward(ctx) + for _, reward := range rewards { + lk.DualstakingKeeper.RemoveDelegatorReward(ctx, dualstakingtypes.DelegationKey(reward.Provider, reward.Delegator, reward.ChainId)) + } + rewards = lk.DualstakingKeeper.GetAllDelegatorReward(ctx) + if len(rewards) != 0 { + return nil, fmt.Errorf("v0.32.0 UpgradeHandler: did not delete all rewards") + } + return m.RunMigrations(ctx, c, vm) + } +} From a69c6b3f8ada59947e97a6847cade1091678faa9 Mon Sep 17 00:00:00 2001 From: Yarom Swisa Date: Sun, 24 Dec 2023 10:34:51 +0000 Subject: [PATCH 2/8] allocation --- app/upgrades/empty_upgrades.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/upgrades/empty_upgrades.go b/app/upgrades/empty_upgrades.go index ebab5b8c6a..82a51fe9b3 100644 --- a/app/upgrades/empty_upgrades.go +++ b/app/upgrades/empty_upgrades.go @@ -196,7 +196,7 @@ func v0_32_0_UpgradeHandler( if err != nil { return nil, err } - allocate := totalSupply.Supply.QuoInt(sdk.NewIntFromUint64(500)) + allocate := totalSupply.Supply.QuoInt(sdk.NewIntFromUint64(33)) err = lk.BankKeeper.MintCoins(ctx, string(rewardstypes.ValidatorsRewardsAllocationPoolName), allocate) if err != nil { return nil, err From f736edff5e0b722404ab11275d7fbd7190b1ba4b Mon Sep 17 00:00:00 2001 From: Yarom Swisa Date: Sun, 24 Dec 2023 18:54:51 +0000 Subject: [PATCH 3/8] merge upgrades --- app/app.go | 1 - app/upgrades/empty_upgrades.go | 36 ----------- app/upgrades/upgrade_0_32_0.go | 107 +++++++++++++++++++++++++++++++++ app/upgrades/upgrade_0_33_0.go | 78 ------------------------ 4 files changed, 107 insertions(+), 115 deletions(-) create mode 100644 app/upgrades/upgrade_0_32_0.go delete mode 100644 app/upgrades/upgrade_0_33_0.go diff --git a/app/app.go b/app/app.go index be1681ae1a..bdc1c81349 100644 --- a/app/app.go +++ b/app/app.go @@ -164,7 +164,6 @@ var Upgrades = []upgrades.Upgrade{ upgrades.Upgrade_0_31_0, upgrades.Upgrade_0_31_1, upgrades.Upgrade_0_32_0, - upgrades.Upgrade_0_33_0, } // this line is used by starport scaffolding # stargate/wasm/app/enabledProposals diff --git a/app/upgrades/empty_upgrades.go b/app/upgrades/empty_upgrades.go index 82a51fe9b3..405506aaaa 100644 --- a/app/upgrades/empty_upgrades.go +++ b/app/upgrades/empty_upgrades.go @@ -1,12 +1,9 @@ package upgrades import ( - "fmt" - store "github.com/cosmos/cosmos-sdk/store/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" - "github.com/cosmos/cosmos-sdk/x/bank/types" minttypes "github.com/cosmos/cosmos-sdk/x/mint/types" upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" "github.com/lavanet/lava/app/keepers" @@ -184,36 +181,3 @@ var Upgrade_0_32_0 = Upgrade{ Deleted: []string{minttypes.StoreKey}, }, } - -func v0_32_0_UpgradeHandler( - m *module.Manager, - c module.Configurator, - bapm BaseAppParamManager, - lk *keepers.LavaKeepers, -) upgradetypes.UpgradeHandler { - return func(ctx sdk.Context, plan upgradetypes.Plan, vm module.VersionMap) (module.VersionMap, error) { - totalSupply, err := lk.BankKeeper.TotalSupply(ctx, &types.QueryTotalSupplyRequest{}) - if err != nil { - return nil, err - } - allocate := totalSupply.Supply.QuoInt(sdk.NewIntFromUint64(33)) - err = lk.BankKeeper.MintCoins(ctx, string(rewardstypes.ValidatorsRewardsAllocationPoolName), allocate) - if err != nil { - return nil, err - } - err = lk.BankKeeper.MintCoins(ctx, string(rewardstypes.ProvidersRewardsAllocationPool), allocate) - if err != nil { - return nil, err - } - - rewards := lk.DualstakingKeeper.GetAllDelegatorReward(ctx) - for _, reward := range rewards { - lk.DualstakingKeeper.RemoveDelegatorReward(ctx, dualstakingtypes.DelegationKey(reward.Provider, reward.Delegator, reward.ChainId)) - } - rewards = lk.DualstakingKeeper.GetAllDelegatorReward(ctx) - if len(rewards) != 0 { - return nil, fmt.Errorf("v0.32.0 UpgradeHandler: did not delete all rewards") - } - return m.RunMigrations(ctx, c, vm) - } -} diff --git a/app/upgrades/upgrade_0_32_0.go b/app/upgrades/upgrade_0_32_0.go new file mode 100644 index 0000000000..51e34e9a19 --- /dev/null +++ b/app/upgrades/upgrade_0_32_0.go @@ -0,0 +1,107 @@ +package upgrades + +import ( + "encoding/json" + "fmt" + "time" + + "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/module" + "github.com/cosmos/cosmos-sdk/x/bank/types" + upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" + "github.com/lavanet/lava/app/keepers" + dualstakingtypes "github.com/lavanet/lava/x/dualstaking/types" + rewardstypes "github.com/lavanet/lava/x/rewards/types" +) + +type Upgrade_0_33_0_Info struct { + ExpeditedMinDeposit sdk.Coins + ExpeditedThreshold math.LegacyDec + ExpeditedVotingPeriod time.Duration +} + +func (u *Upgrade_0_33_0_Info) FromPlan(plan upgradetypes.Plan) error { + info := plan.Info + intermediaryInfo := struct { + ExpeditedMinDeposit string `json:"expedited_min_deposit"` + ExpeditedThreshold string `json:"expedited_threshold"` + ExpeditedVotingPeriod string `json:"expedited_voting_period"` + }{} + err := json.Unmarshal([]byte(info), &intermediaryInfo) + if err != nil { + return err + } + + u.ExpeditedMinDeposit, err = sdk.ParseCoinsNormalized(intermediaryInfo.ExpeditedMinDeposit) + if err != nil { + return err + } + u.ExpeditedThreshold, err = math.LegacyNewDecFromStr(intermediaryInfo.ExpeditedThreshold) + if err != nil { + return err + } + u.ExpeditedVotingPeriod, err = time.ParseDuration(intermediaryInfo.ExpeditedVotingPeriod) + if err != nil { + return err + } + return nil +} + +func v0_32_0_UpgradeHandler( + m *module.Manager, + c module.Configurator, + bapm BaseAppParamManager, + lk *keepers.LavaKeepers, +) upgradetypes.UpgradeHandler { + return func(ctx sdk.Context, plan upgradetypes.Plan, vm module.VersionMap) (module.VersionMap, error) { + // rewards pool + totalSupply, err := lk.BankKeeper.TotalSupply(ctx, &types.QueryTotalSupplyRequest{}) + if err != nil { + return nil, err + } + allocate := totalSupply.Supply.QuoInt(sdk.NewIntFromUint64(33)) + err = lk.BankKeeper.MintCoins(ctx, string(rewardstypes.ValidatorsRewardsAllocationPoolName), allocate) + if err != nil { + return nil, err + } + err = lk.BankKeeper.MintCoins(ctx, string(rewardstypes.ProvidersRewardsAllocationPool), allocate) + if err != nil { + return nil, err + } + + rewards := lk.DualstakingKeeper.GetAllDelegatorReward(ctx) + for _, reward := range rewards { + lk.DualstakingKeeper.RemoveDelegatorReward(ctx, dualstakingtypes.DelegationKey(reward.Provider, reward.Delegator, reward.ChainId)) + } + rewards = lk.DualstakingKeeper.GetAllDelegatorReward(ctx) + if len(rewards) != 0 { + return nil, fmt.Errorf("v0.32.0 UpgradeHandler: did not delete all rewards") + } + + // expedited proposal + var info Upgrade_0_33_0_Info + err = info.FromPlan(plan) + if err != nil { + return nil, err + } + // deposit + params := lk.GovKeeper.GetParams(ctx) + params.ExpeditedMinDeposit = info.ExpeditedMinDeposit + + // tally + params.ExpeditedThreshold = info.ExpeditedThreshold.String() + + // voting + params.ExpeditedVotingPeriod = &info.ExpeditedVotingPeriod + + if err = params.ValidateBasic(); err != nil { + return nil, err + } + + if err := lk.GovKeeper.SetParams(ctx, params); err != nil { + return nil, err + } + return m.RunMigrations(ctx, c, vm) + } +} diff --git a/app/upgrades/upgrade_0_33_0.go b/app/upgrades/upgrade_0_33_0.go deleted file mode 100644 index 07d2f8f63c..0000000000 --- a/app/upgrades/upgrade_0_33_0.go +++ /dev/null @@ -1,78 +0,0 @@ -package upgrades - -import ( - "encoding/json" - "time" - - "cosmossdk.io/math" - store "github.com/cosmos/cosmos-sdk/store/types" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/module" - upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" - "github.com/lavanet/lava/app/keepers" -) - -type Upgrade_0_33_0_Info struct { - ExpeditedMinDeposit sdk.Coins - ExpeditedThreshold math.LegacyDec - ExpeditedVotingPeriod time.Duration -} - -func (u *Upgrade_0_33_0_Info) FromPlan(plan upgradetypes.Plan) error { - info := plan.Info - intermediaryInfo := struct { - ExpeditedMinDeposit string `json:"expedited_min_deposit"` - ExpeditedThreshold string `json:"expedited_threshold"` - ExpeditedVotingPeriod string `json:"expedited_voting_period"` - }{} - err := json.Unmarshal([]byte(info), &intermediaryInfo) - if err != nil { - return err - } - - u.ExpeditedMinDeposit, err = sdk.ParseCoinsNormalized(intermediaryInfo.ExpeditedMinDeposit) - if err != nil { - return err - } - u.ExpeditedThreshold, err = math.LegacyNewDecFromStr(intermediaryInfo.ExpeditedThreshold) - if err != nil { - return err - } - u.ExpeditedVotingPeriod, err = time.ParseDuration(intermediaryInfo.ExpeditedVotingPeriod) - if err != nil { - return err - } - return nil -} - -var Upgrade_0_33_0 = Upgrade{ - UpgradeName: "v0.33.0", - CreateUpgradeHandler: func(mm *module.Manager, configurator module.Configurator, _ BaseAppParamManager, keepers *keepers.LavaKeepers) upgradetypes.UpgradeHandler { - return func(ctx sdk.Context, plan upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) { - var info Upgrade_0_33_0_Info - err := info.FromPlan(plan) - if err != nil { - return nil, err - } - // deposit - params := keepers.GovKeeper.GetParams(ctx) - params.ExpeditedMinDeposit = info.ExpeditedMinDeposit - - // tally - params.ExpeditedThreshold = info.ExpeditedThreshold.String() - - // voting - params.ExpeditedVotingPeriod = &info.ExpeditedVotingPeriod - - if err = params.ValidateBasic(); err != nil { - return nil, err - } - - if err := keepers.GovKeeper.SetParams(ctx, params); err != nil { - return nil, err - } - return mm.RunMigrations(ctx, configurator, fromVM) - } - }, - StoreUpgrades: store.StoreUpgrades{}, -} From f125217e9b600e9130d415d356eb53d91ed60c08 Mon Sep 17 00:00:00 2001 From: Yarom Swisa Date: Sun, 24 Dec 2023 19:43:36 +0000 Subject: [PATCH 4/8] fix migration --- app/app.go | 4 ++-- app/upgrades/upgrade_0_32_0.go | 13 +++++-------- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/app/app.go b/app/app.go index bdc1c81349..085bcf694a 100644 --- a/app/app.go +++ b/app/app.go @@ -237,10 +237,10 @@ var ( govtypes.ModuleName: {authtypes.Burner}, ibctransfertypes.ModuleName: {authtypes.Burner}, subscriptionmoduletypes.ModuleName: {authtypes.Burner, authtypes.Staking}, - string(rewardsmoduletypes.ValidatorsRewardsAllocationPoolName): {authtypes.Burner, authtypes.Staking}, + string(rewardsmoduletypes.ValidatorsRewardsAllocationPoolName): {authtypes.Minter, authtypes.Staking}, string(rewardsmoduletypes.ValidatorsRewardsDistributionPoolName): {authtypes.Burner, authtypes.Staking}, string(rewardsmoduletypes.ProviderRewardsDistributionPool): {authtypes.Burner, authtypes.Staking}, - string(rewardsmoduletypes.ProvidersRewardsAllocationPool): {authtypes.Burner, authtypes.Staking}, + string(rewardsmoduletypes.ProvidersRewardsAllocationPool): {authtypes.Minter, authtypes.Staking}, // this line is used by starport scaffolding # stargate/app/maccPerms } ) diff --git a/app/upgrades/upgrade_0_32_0.go b/app/upgrades/upgrade_0_32_0.go index 51e34e9a19..f96aa6aff1 100644 --- a/app/upgrades/upgrade_0_32_0.go +++ b/app/upgrades/upgrade_0_32_0.go @@ -80,20 +80,17 @@ func v0_32_0_UpgradeHandler( } // expedited proposal - var info Upgrade_0_33_0_Info - err = info.FromPlan(plan) - if err != nil { - return nil, err - } // deposit params := lk.GovKeeper.GetParams(ctx) - params.ExpeditedMinDeposit = info.ExpeditedMinDeposit + params.ExpeditedMinDeposit = append(params.ExpeditedMinDeposit, params.MinDeposit[0].AddAmount(sdk.NewIntFromUint64(1000))) // tally - params.ExpeditedThreshold = info.ExpeditedThreshold.String() + params.ExpeditedThreshold = "0.75" // voting - params.ExpeditedVotingPeriod = &info.ExpeditedVotingPeriod + seconds := params.VotingPeriod.Nanoseconds() + duration := time.Duration(seconds/10) * time.Nanosecond + params.ExpeditedVotingPeriod = &duration if err = params.ValidateBasic(); err != nil { return nil, err From 0eefbbe3e14a05f9582ca93a01a6eb67f0b41d29 Mon Sep 17 00:00:00 2001 From: Yarom Swisa Date: Mon, 25 Dec 2023 11:58:24 +0000 Subject: [PATCH 5/8] remove old --- app/upgrades/upgrade_0_32_0.go | 35 ---------------------------------- 1 file changed, 35 deletions(-) diff --git a/app/upgrades/upgrade_0_32_0.go b/app/upgrades/upgrade_0_32_0.go index f96aa6aff1..7f4daecfdb 100644 --- a/app/upgrades/upgrade_0_32_0.go +++ b/app/upgrades/upgrade_0_32_0.go @@ -1,11 +1,9 @@ package upgrades import ( - "encoding/json" "fmt" "time" - "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" "github.com/cosmos/cosmos-sdk/x/bank/types" @@ -15,39 +13,6 @@ import ( rewardstypes "github.com/lavanet/lava/x/rewards/types" ) -type Upgrade_0_33_0_Info struct { - ExpeditedMinDeposit sdk.Coins - ExpeditedThreshold math.LegacyDec - ExpeditedVotingPeriod time.Duration -} - -func (u *Upgrade_0_33_0_Info) FromPlan(plan upgradetypes.Plan) error { - info := plan.Info - intermediaryInfo := struct { - ExpeditedMinDeposit string `json:"expedited_min_deposit"` - ExpeditedThreshold string `json:"expedited_threshold"` - ExpeditedVotingPeriod string `json:"expedited_voting_period"` - }{} - err := json.Unmarshal([]byte(info), &intermediaryInfo) - if err != nil { - return err - } - - u.ExpeditedMinDeposit, err = sdk.ParseCoinsNormalized(intermediaryInfo.ExpeditedMinDeposit) - if err != nil { - return err - } - u.ExpeditedThreshold, err = math.LegacyNewDecFromStr(intermediaryInfo.ExpeditedThreshold) - if err != nil { - return err - } - u.ExpeditedVotingPeriod, err = time.ParseDuration(intermediaryInfo.ExpeditedVotingPeriod) - if err != nil { - return err - } - return nil -} - func v0_32_0_UpgradeHandler( m *module.Manager, c module.Configurator, From cb794fb48ff6ecdb505767cb59f9123b042298ef Mon Sep 17 00:00:00 2001 From: Yarom Swisa Date: Mon, 25 Dec 2023 12:04:22 +0000 Subject: [PATCH 6/8] divide check --- x/subscription/keeper/adjustment.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/x/subscription/keeper/adjustment.go b/x/subscription/keeper/adjustment.go index a51d9c264c..3bbf9b7afa 100644 --- a/x/subscription/keeper/adjustment.go +++ b/x/subscription/keeper/adjustment.go @@ -100,6 +100,9 @@ func (k Keeper) AppendAdjustment(ctx sdk.Context, consumer string, provider stri adjustment.TotalUsage += totalConsumerUsage adjustment.AdjustedUsage += totalConsumerUsage } else { + if usageWithThisProvider == 0 || maxRewardsBoost == 0 { + return + } // totalConsumerUsage < uint64(maxRewardsBoost)*usageWithThisProvider adjustment.TotalUsage += totalConsumerUsage // epoch adjustment is (1/maxRewardsBoost * totalConsumerUsage/usageWithThisProvider) * totalConsumerUsage From 0cc982e5eb1140b2d7c5db8bcc33190f3b28e122 Mon Sep 17 00:00:00 2001 From: Yarom Swisa Date: Mon, 25 Dec 2023 12:05:49 +0000 Subject: [PATCH 7/8] divide by zero --- x/subscription/keeper/adjustment.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/x/subscription/keeper/adjustment.go b/x/subscription/keeper/adjustment.go index 3bbf9b7afa..b156734d75 100644 --- a/x/subscription/keeper/adjustment.go +++ b/x/subscription/keeper/adjustment.go @@ -169,6 +169,9 @@ func (k Keeper) GetAdjustmentFactorProvider(ctx sdk.Context, adjustments []types totalUsage := providerUsage[provider].total totalAdjustedUsage := providerUsage[provider].adjusted // indexes may repeat but we only need to handle each provider once + if totalUsage == 0 { + continue + } providerAdjustment[provider] = sdk.NewDec(totalAdjustedUsage).QuoInt64(totalUsage) } } From d4022cc579dd0ca819e45dd2d7ef9f54e5854c1e Mon Sep 17 00:00:00 2001 From: Yarom Swisa Date: Mon, 25 Dec 2023 12:12:34 +0000 Subject: [PATCH 8/8] divide check --- x/rewards/keeper/rewards.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/x/rewards/keeper/rewards.go b/x/rewards/keeper/rewards.go index 7c523abf02..49ddcd388c 100644 --- a/x/rewards/keeper/rewards.go +++ b/x/rewards/keeper/rewards.go @@ -109,6 +109,9 @@ func (k Keeper) refillDistributionPool(ctx sdk.Context, monthsLeft uint64, alloc func (k Keeper) BlocksToNextTimerExpiry(ctx sdk.Context) int64 { timeToNextTimerExpiry := k.TimeToNextTimerExpiry(ctx) blockCreationTime := int64(k.downtimeKeeper.GetParams(ctx).DowntimeDuration.Seconds()) + if blockCreationTime == 0 { + return 30 + } blocksToNextTimerExpiry := types.BlocksToTimerExpirySlackFactor.MulInt64(timeToNextTimerExpiry).QuoInt64(blockCreationTime).Ceil().TruncateInt64() if blocksToNextTimerExpiry < 2 { return 2