Skip to content

Commit f4aaf18

Browse files
committed
re-add UpdateLiquidValidatorSet to begin blocker
1 parent aa89857 commit f4aaf18

11 files changed

+144
-114
lines changed

x/liquidstake/abci.go

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package liquidstake
2+
3+
import (
4+
"time"
5+
6+
"github.com/cosmos/cosmos-sdk/telemetry"
7+
sdk "github.com/cosmos/cosmos-sdk/types"
8+
9+
"github.com/persistenceOne/pstake-native/v2/x/liquidstake/keeper"
10+
"github.com/persistenceOne/pstake-native/v2/x/liquidstake/types"
11+
)
12+
13+
func BeginBlock(ctx sdk.Context, k keeper.Keeper) {
14+
defer telemetry.ModuleMeasureSince(types.ModuleName, time.Now(), telemetry.MetricKeyBeginBlocker)
15+
16+
if !k.GetParams(ctx).ModulePaused {
17+
// return value of UpdateLiquidValidatorSet is useful only in testing
18+
_ = k.UpdateLiquidValidatorSet(ctx, false)
19+
}
20+
}

x/liquidstake/keeper/genesis_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ func (s *KeeperTestSuite) TestImportExportGenesis() {
2525
}
2626
params.ModulePaused = false
2727
k.SetParams(ctx, params)
28-
k.UpdateLiquidValidatorSet(ctx)
28+
k.UpdateLiquidValidatorSet(ctx, true)
2929

3030
stakingAmt := math.NewInt(100000000)
3131
s.Require().NoError(s.liquidStaking(s.delAddrs[0], stakingAmt))
@@ -55,7 +55,7 @@ func (s *KeeperTestSuite) TestImportExportGenesis() {
5555
func (s *KeeperTestSuite) TestImportExportGenesisEmpty() {
5656
k, ctx := s.keeper, s.ctx
5757
k.SetParams(ctx, types.DefaultParams())
58-
k.UpdateLiquidValidatorSet(ctx)
58+
k.UpdateLiquidValidatorSet(ctx, true)
5959
genState := k.ExportGenesis(ctx)
6060

6161
var genState2 types.GenesisState

x/liquidstake/keeper/grpc_query_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ func (s *KeeperTestSuite) TestGRPCQueries() {
2121
params := s.keeper.GetParams(s.ctx)
2222
params.MinLiquidStakeAmount = math.NewInt(50000)
2323
s.keeper.SetParams(s.ctx, params)
24-
s.keeper.UpdateLiquidValidatorSet(s.ctx)
24+
s.keeper.UpdateLiquidValidatorSet(s.ctx, true)
2525

2626
// add active validator
2727
params.WhitelistedValidators = []types.WhitelistedValidator{
@@ -30,7 +30,7 @@ func (s *KeeperTestSuite) TestGRPCQueries() {
3030
{ValidatorAddress: valOpers[2].String(), TargetWeight: math.NewInt(3333)},
3131
}
3232
s.keeper.SetParams(s.ctx, params)
33-
s.keeper.UpdateLiquidValidatorSet(s.ctx)
33+
s.keeper.UpdateLiquidValidatorSet(s.ctx, true)
3434

3535
// Test LiquidValidators grpc query
3636
res := s.keeper.GetAllLiquidValidatorStates(s.ctx)

x/liquidstake/keeper/hooks.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ func (k Keeper) BeforeEpochStart(ctx sdk.Context, epochIdentifier string, _ int6
3535

3636
if epochIdentifier == liquidstake.RebalanceEpoch {
3737
// return value of UpdateLiquidValidatorSet is useful only in testing
38-
_ = k.UpdateLiquidValidatorSet(ctx)
38+
_ = k.UpdateLiquidValidatorSet(ctx, true)
3939
}
4040
}
4141

x/liquidstake/keeper/keeper_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ func (s *KeeperTestSuite) SetupTest() {
6464
params.UnstakeFeeRate = sdk.ZeroDec()
6565
params.AutocompoundFeeRate = types.DefaultAutocompoundFeeRate
6666
s.Require().NoError(s.keeper.SetParams(s.ctx, params))
67-
s.keeper.UpdateLiquidValidatorSet(s.ctx)
67+
s.keeper.UpdateLiquidValidatorSet(s.ctx, true)
6868
// call mint.BeginBlocker for init k.SetLastBlockTime(ctx, ctx.BlockTime())
6969
mint.BeginBlocker(s.ctx, s.app.MintKeeper, minttypes.DefaultInflationCalculationFn)
7070
}

x/liquidstake/keeper/liquidstake_test.go

+10-10
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ func (s *KeeperTestSuite) TestLiquidStake() {
1818
params.MinLiquidStakeAmount = math.NewInt(50000)
1919
params.ModulePaused = false
2020
s.keeper.SetParams(s.ctx, params)
21-
s.keeper.UpdateLiquidValidatorSet(s.ctx)
21+
s.keeper.UpdateLiquidValidatorSet(s.ctx, true)
2222

2323
stakingAmt := params.MinLiquidStakeAmount
2424

@@ -38,7 +38,7 @@ func (s *KeeperTestSuite) TestLiquidStake() {
3838
{ValidatorAddress: valOpers[2].String(), TargetWeight: math.NewInt(2000)},
3939
}
4040
s.keeper.SetParams(s.ctx, params)
41-
s.keeper.UpdateLiquidValidatorSet(s.ctx)
41+
s.keeper.UpdateLiquidValidatorSet(s.ctx, true)
4242

4343
res := s.keeper.GetAllLiquidValidatorStates(s.ctx)
4444
s.Require().Equal(params.WhitelistedValidators[0].ValidatorAddress,
@@ -254,7 +254,7 @@ func (s *KeeperTestSuite) TestLiquidStakeFromVestingAccount() {
254254
}
255255
params.ModulePaused = false
256256
s.keeper.SetParams(s.ctx, params)
257-
s.keeper.UpdateLiquidValidatorSet(s.ctx)
257+
s.keeper.UpdateLiquidValidatorSet(s.ctx, true)
258258

259259
from := s.delAddrs[0]
260260
vestingAmt := s.app.BankKeeper.GetAllBalances(s.ctx, from)
@@ -294,7 +294,7 @@ func (s *KeeperTestSuite) TestLiquidStakeFromVestingAccount() {
294294
func (s *KeeperTestSuite) TestLiquidStakeEdgeCases() {
295295
_, valOpers, _ := s.CreateValidators([]int64{1000000, 2000000, 3000000})
296296
params := s.keeper.GetParams(s.ctx)
297-
s.keeper.UpdateLiquidValidatorSet(s.ctx)
297+
s.keeper.UpdateLiquidValidatorSet(s.ctx, true)
298298
stakingAmt := math.NewInt(5000000)
299299

300300
// add active validator
@@ -305,7 +305,7 @@ func (s *KeeperTestSuite) TestLiquidStakeEdgeCases() {
305305
}
306306
params.ModulePaused = false
307307
s.keeper.SetParams(s.ctx, params)
308-
s.keeper.UpdateLiquidValidatorSet(s.ctx)
308+
s.keeper.UpdateLiquidValidatorSet(s.ctx, true)
309309

310310
// fail Invalid BondDenom case
311311
_, err := s.keeper.LiquidStake(s.ctx, types.LiquidStakeProxyAcc, s.delAddrs[0], sdk.NewCoin("bad", stakingAmt))
@@ -318,7 +318,7 @@ func (s *KeeperTestSuite) TestLiquidStakeEdgeCases() {
318318
s.Require().NoError(s.liquidStaking(s.delAddrs[0], hugeAmt))
319319
s.Require().NoError(s.liquidUnstaking(s.delAddrs[0], math.NewInt(10), true))
320320
s.Require().NoError(s.liquidUnstaking(s.delAddrs[0], hugeAmt, true))
321-
s.keeper.UpdateLiquidValidatorSet(s.ctx)
321+
s.keeper.UpdateLiquidValidatorSet(s.ctx, true)
322322
s.completeRedelegationUnbonding()
323323
states := s.keeper.GetNetAmountState(s.ctx)
324324
states.TotalLiquidTokens.Equal(hugeAmt)
@@ -333,7 +333,7 @@ func (s *KeeperTestSuite) TestLiquidUnstakeEdgeCases() {
333333

334334
_, valOpers, _ := s.CreateValidators([]int64{1000000, 2000000, 3000000})
335335
params := s.keeper.GetParams(s.ctx)
336-
s.keeper.UpdateLiquidValidatorSet(s.ctx)
336+
s.keeper.UpdateLiquidValidatorSet(s.ctx, true)
337337
stakingAmt := math.NewInt(5000000)
338338

339339
// add active validator
@@ -344,7 +344,7 @@ func (s *KeeperTestSuite) TestLiquidUnstakeEdgeCases() {
344344
}
345345
params.ModulePaused = false
346346
s.Require().NoError(s.keeper.SetParams(s.ctx, params))
347-
s.keeper.UpdateLiquidValidatorSet(s.ctx)
347+
s.keeper.UpdateLiquidValidatorSet(s.ctx, true)
348348

349349
// success liquid stake
350350
s.Require().NoError(s.liquidStaking(s.delAddrs[0], stakingAmt))
@@ -379,7 +379,7 @@ func (s *KeeperTestSuite) TestLiquidUnstakeEdgeCases() {
379379
// set empty whitelisted, active liquid validator
380380
params.WhitelistedValidators = []types.WhitelistedValidator{}
381381
s.keeper.SetParams(s.ctx, params)
382-
s.keeper.UpdateLiquidValidatorSet(s.ctx)
382+
s.keeper.UpdateLiquidValidatorSet(s.ctx, true)
383383

384384
// error case where there is a quantity that are unbonding balance or remaining rewards that is not re-stake or withdrawn in netAmount.
385385
// NOT APPLICABLE since we do not validator unbond if validator goes inactive.
@@ -413,7 +413,7 @@ func (s *KeeperTestSuite) TestShareInflation() {
413413
}
414414
params.ModulePaused = false
415415
s.keeper.SetParams(s.ctx, params)
416-
s.keeper.UpdateLiquidValidatorSet(s.ctx)
416+
s.keeper.UpdateLiquidValidatorSet(s.ctx, true)
417417

418418
initialStakingAmt := math.NewInt(1) // little amount
419419
initializingStakingAmt := math.NewInt(10000) // normal amount

x/liquidstake/keeper/rebalancing.go

+14-11
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ func (k Keeper) Rebalance(
149149
return redelegations
150150
}
151151

152-
func (k Keeper) UpdateLiquidValidatorSet(ctx sdk.Context) (redelegations []types.Redelegation) {
152+
func (k Keeper) UpdateLiquidValidatorSet(ctx sdk.Context, redelegate bool) (redelegations []types.Redelegation) {
153153
params := k.GetParams(ctx)
154154
liquidValidators := k.GetAllLiquidValidators(ctx)
155155
liquidValsMap := liquidValidators.Map()
@@ -177,18 +177,21 @@ func (k Keeper) UpdateLiquidValidatorSet(ctx sdk.Context) (redelegations []types
177177

178178
// rebalancing based updated liquid validators status with threshold, try by cachedCtx
179179
// tombstone status also handled on Rebalance
180-
redelegations = k.Rebalance(
181-
ctx,
182-
types.LiquidStakeProxyAcc,
183-
liquidValidators,
184-
whitelistedValsMap,
185-
types.RebalancingTrigger,
186-
)
180+
if redelegate {
181+
redelegations = k.Rebalance(
182+
ctx,
183+
types.LiquidStakeProxyAcc,
184+
liquidValidators,
185+
whitelistedValsMap,
186+
types.RebalancingTrigger,
187+
)
187188

188-
// if there are inactive liquid validators, do not unbond,
189-
// instead let validator selection and rebalancing take care of it.
189+
// if there are inactive liquid validators, do not unbond,
190+
// instead let validator selection and rebalancing take care of it.
190191

191-
return redelegations
192+
return redelegations
193+
}
194+
return nil
192195
}
193196

194197
// AutocompoundStakingRewards withdraws staking rewards and re-stakes when over threshold.

0 commit comments

Comments
 (0)