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

chore: refactor staking integration, sims and e2e tests #8

Merged
merged 33 commits into from
Dec 8, 2023
Merged
Show file tree
Hide file tree
Changes from 30 commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
b60d75b
set min_self_delegation to 0 in TestAminoCodecFullDecodeAndEncode
mpoke Nov 27, 2023
0f20ef0
add WithdrawTokenizeShareRecordReward and WithdrawAllTokenizeShareRec…
mpoke Nov 27, 2023
5db6fd6
add methods to distribution/keeper
mpoke Nov 27, 2023
fde5dc7
register distribution msgs
mpoke Nov 27, 2023
8e659bc
add SimulateMsgWithdrawTokenizeShareRecordReward
mpoke Nov 27, 2023
e94237a
LSM distribution queries
mpoke Nov 27, 2023
75bec41
LSM distr cli
mpoke Nov 27, 2023
5b14e52
add BeforeTokenizeShareRecordRemoved hook
mpoke Nov 28, 2023
1f2be7c
add signers to proto distribution
mpoke Nov 28, 2023
c96df01
set signers correctly
mpoke Nov 28, 2023
cf3d174
minimum refactor to build
sainoe Nov 28, 2023
41042c2
tag LSM test to be refactored
sainoe Nov 29, 2023
a32c875
Merge with feat/lsm/v0.47.x
sainoe Nov 29, 2023
d23144b
Merge branch 'feat/lsm/v0.47.x' into sainoe/lsm-staking
sainoe Nov 29, 2023
5e42e2a
nit
sainoe Nov 29, 2023
aa7029c
comments more failing tests
sainoe Nov 29, 2023
552a125
make protos
sainoe Nov 29, 2023
2ff0df5
Update x/staking/keeper/msg_server.go
sainoe Nov 30, 2023
85a701b
Update x/staking/keeper/msg_server.go
sainoe Nov 30, 2023
a1ab1e4
add go.work and fix silent errors
sainoe Nov 30, 2023
47b3871
address comments
sainoe Dec 1, 2023
39bffa1
refactor staking msg_server_tests.go - distrib hooks cause them to fail
sainoe Dec 4, 2023
ab7ff3a
make integration tests pass
sainoe Dec 5, 2023
7ee723c
clean up
sainoe Dec 5, 2023
1e9cc37
clean up
sainoe Dec 5, 2023
38c8e2f
refactor last integration
sainoe Dec 6, 2023
87c4cd3
nits
sainoe Dec 6, 2023
8ba9b48
Merge branch 'feat/lsm/v0.47.x' into sainoe/lsm-staking-test
sainoe Dec 6, 2023
743f059
revert deterministic tests change
sainoe Dec 6, 2023
5b8e28f
tests: update simulation randfees calc (#9)
MSalopek Dec 6, 2023
ff8046c
address min self delegation depreciation in tests
sainoe Dec 7, 2023
e7b7d2b
refactor e2e tests and other nits
sainoe Dec 7, 2023
6d0a5b4
tests: appease linter in randfees
MSalopek Dec 7, 2023
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
4 changes: 2 additions & 2 deletions tests/integration/staking/keeper/common_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -89,8 +89,8 @@ func createValidators(t *testing.T, ctx sdk.Context, app *simapp.SimApp, powers
return addrs, valAddrs, vals
}

func delegateCoinsFromAccount(ctx sdk.Context, app *simapp.SimApp, addr sdk.AccAddress, amount sdk.Int, val types.Validator) error {
_, err := app.StakingKeeper.Delegate(ctx, addr, amount, types.Unbonded, val, true)
func delegateCoinsFromAccount(ctx sdk.Context, sk keeper.Keeper, addr sdk.AccAddress, amount sdk.Int, val types.ValidatorI) error {
_, err := sk.Delegate(ctx, addr, amount, types.Unbonded, val.(types.Validator), true)

return err
}
170 changes: 170 additions & 0 deletions tests/integration/staking/keeper/delegation_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -96,3 +96,173 @@ func TestUnbondingDelegationsMaxEntries(t *testing.T) {
require.True(math.IntEq(t, newBonded, oldBonded.SubRaw(1)))
require.True(math.IntEq(t, newNotBonded, oldNotBonded.AddRaw(1)))
}

func TestValidatorBondUndelegate(t *testing.T) {
_, app, ctx := createTestInput(t)

addrDels := simtestutil.AddTestAddrs(app.BankKeeper, app.StakingKeeper, ctx, 2, app.StakingKeeper.TokensFromConsensusPower(ctx, 10000))
addrVals := simtestutil.ConvertAddrsToValAddrs(addrDels)

startTokens := app.StakingKeeper.TokensFromConsensusPower(ctx, 10)

bondDenom := app.StakingKeeper.BondDenom(ctx)
notBondedPool := app.StakingKeeper.GetNotBondedPool(ctx)

require.NoError(t, banktestutil.FundModuleAccount(app.BankKeeper, ctx, notBondedPool.GetName(), sdk.NewCoins(sdk.NewCoin(bondDenom, startTokens))))
app.AccountKeeper.SetModuleAccount(ctx, notBondedPool)

// create a validator and a delegator to that validator
validator := testutil.NewValidator(t, addrVals[0], PKs[0])
validator.Status = types.Bonded
app.StakingKeeper.SetValidator(ctx, validator)

// set validator bond factor
params := app.StakingKeeper.GetParams(ctx)
params.ValidatorBondFactor = sdk.NewDec(1)
app.StakingKeeper.SetParams(ctx, params)

// convert to validator self-bond
msgServer := keeper.NewMsgServerImpl(app.StakingKeeper)

validator, _ = app.StakingKeeper.GetValidator(ctx, addrVals[0])
err := delegateCoinsFromAccount(ctx, *app.StakingKeeper, addrDels[0], startTokens, validator)
require.NoError(t, err)
_, err = msgServer.ValidatorBond(sdk.WrapSDKContext(ctx), &types.MsgValidatorBond{
DelegatorAddress: addrDels[0].String(),
ValidatorAddress: addrVals[0].String(),
})
require.NoError(t, err)

// tokenize share for 2nd account delegation
validator, _ = app.StakingKeeper.GetValidator(ctx, addrVals[0])
err = delegateCoinsFromAccount(ctx, *app.StakingKeeper, addrDels[1], startTokens, validator)
require.NoError(t, err)
tokenizeShareResp, err := msgServer.TokenizeShares(sdk.WrapSDKContext(ctx), &types.MsgTokenizeShares{
DelegatorAddress: addrDels[1].String(),
ValidatorAddress: addrVals[0].String(),
Amount: sdk.NewCoin(sdk.DefaultBondDenom, startTokens),
TokenizedShareOwner: addrDels[0].String(),
})
require.NoError(t, err)

// try undelegating
_, err = msgServer.Undelegate(sdk.WrapSDKContext(ctx), &types.MsgUndelegate{
DelegatorAddress: addrDels[0].String(),
ValidatorAddress: addrVals[0].String(),
Amount: sdk.NewCoin(sdk.DefaultBondDenom, startTokens),
})
require.Error(t, err)

// redeem full amount on 2nd account and try undelegation
validator, _ = app.StakingKeeper.GetValidator(ctx, addrVals[0])
err = delegateCoinsFromAccount(ctx, *app.StakingKeeper, addrDels[1], startTokens, validator)
require.NoError(t, err)
_, err = msgServer.RedeemTokensForShares(sdk.WrapSDKContext(ctx), &types.MsgRedeemTokensForShares{
DelegatorAddress: addrDels[1].String(),
Amount: tokenizeShareResp.Amount,
})
require.NoError(t, err)

// try undelegating
_, err = msgServer.Undelegate(sdk.WrapSDKContext(ctx), &types.MsgUndelegate{
DelegatorAddress: addrDels[0].String(),
ValidatorAddress: addrVals[0].String(),
Amount: sdk.NewCoin(sdk.DefaultBondDenom, startTokens),
})
require.NoError(t, err)

validator, _ = app.StakingKeeper.GetValidator(ctx, addrVals[0])
require.Equal(t, validator.ValidatorBondShares, sdk.ZeroDec())
}

func TestValidatorBondRedelegate(t *testing.T) {
_, app, ctx := createTestInput(t)

addrDels := simtestutil.AddTestAddrs(app.BankKeeper, app.StakingKeeper, ctx, 2, app.StakingKeeper.TokensFromConsensusPower(ctx, 10000))
addrVals := simtestutil.ConvertAddrsToValAddrs(addrDels)

startTokens := app.StakingKeeper.TokensFromConsensusPower(ctx, 10)

bondDenom := app.StakingKeeper.BondDenom(ctx)
notBondedPool := app.StakingKeeper.GetNotBondedPool(ctx)

startPoolToken := sdk.NewCoins(sdk.NewCoin(bondDenom, startTokens.Mul(sdk.NewInt(2))))
require.NoError(t, banktestutil.FundModuleAccount(app.BankKeeper, ctx, notBondedPool.GetName(), startPoolToken))
app.AccountKeeper.SetModuleAccount(ctx, notBondedPool)

// create a validator and a delegator to that validator
validator := testutil.NewValidator(t, addrVals[0], PKs[0])
validator.Status = types.Bonded
app.StakingKeeper.SetValidator(ctx, validator)
validator2 := testutil.NewValidator(t, addrVals[1], PKs[1])
validator.Status = types.Bonded
app.StakingKeeper.SetValidator(ctx, validator2)

// set validator bond factor
params := app.StakingKeeper.GetParams(ctx)
params.ValidatorBondFactor = sdk.NewDec(1)
app.StakingKeeper.SetParams(ctx, params)

// set total liquid stake
app.StakingKeeper.SetTotalLiquidStakedTokens(ctx, sdk.NewInt(100))

// delegate to each validator
validator, _ = app.StakingKeeper.GetValidator(ctx, addrVals[0])
err := delegateCoinsFromAccount(ctx, *app.StakingKeeper, addrDels[0], startTokens, validator)
require.NoError(t, err)

validator2, _ = app.StakingKeeper.GetValidator(ctx, addrVals[1])
err = delegateCoinsFromAccount(ctx, *app.StakingKeeper, addrDels[1], startTokens, validator2)
require.NoError(t, err)

// convert to validator self-bond
msgServer := keeper.NewMsgServerImpl(app.StakingKeeper)
_, err = msgServer.ValidatorBond(sdk.WrapSDKContext(ctx), &types.MsgValidatorBond{
DelegatorAddress: addrDels[0].String(),
ValidatorAddress: addrVals[0].String(),
})
require.NoError(t, err)

// tokenize share for 2nd account delegation
validator, _ = app.StakingKeeper.GetValidator(ctx, addrVals[0])
err = delegateCoinsFromAccount(ctx, *app.StakingKeeper, addrDels[1], startTokens, validator)
require.NoError(t, err)
tokenizeShareResp, err := msgServer.TokenizeShares(sdk.WrapSDKContext(ctx), &types.MsgTokenizeShares{
DelegatorAddress: addrDels[1].String(),
ValidatorAddress: addrVals[0].String(),
Amount: sdk.NewCoin(sdk.DefaultBondDenom, startTokens),
TokenizedShareOwner: addrDels[0].String(),
})
require.NoError(t, err)

// try undelegating
_, err = msgServer.BeginRedelegate(sdk.WrapSDKContext(ctx), &types.MsgBeginRedelegate{
DelegatorAddress: addrDels[0].String(),
ValidatorSrcAddress: addrVals[0].String(),
ValidatorDstAddress: addrVals[1].String(),
Amount: sdk.NewCoin(sdk.DefaultBondDenom, startTokens),
})
require.Error(t, err)

// redeem full amount on 2nd account and try undelegation
validator, _ = app.StakingKeeper.GetValidator(ctx, addrVals[0])
err = delegateCoinsFromAccount(ctx, *app.StakingKeeper, addrDels[1], startTokens, validator)
require.NoError(t, err)
_, err = msgServer.RedeemTokensForShares(sdk.WrapSDKContext(ctx), &types.MsgRedeemTokensForShares{
DelegatorAddress: addrDels[1].String(),
Amount: tokenizeShareResp.Amount,
})
require.NoError(t, err)

// try undelegating
_, err = msgServer.BeginRedelegate(sdk.WrapSDKContext(ctx), &types.MsgBeginRedelegate{
DelegatorAddress: addrDels[0].String(),
ValidatorSrcAddress: addrVals[0].String(),
ValidatorDstAddress: addrVals[1].String(),
Amount: sdk.NewCoin(sdk.DefaultBondDenom, startTokens),
})
require.NoError(t, err)

validator, _ = app.StakingKeeper.GetValidator(ctx, addrVals[0])
require.Equal(t, validator.ValidatorBondShares, sdk.ZeroDec())
}
66 changes: 42 additions & 24 deletions tests/integration/staking/keeper/determinstic_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,6 @@ func (s *DeterministicTestSuite) SetupTest() {
)
s.Require().NoError(err)

// s.ctx = app.BaseApp.NewContext(false, tmproto.Header{Height: 1, Time: time.Now()}).WithGasMeter(sdk.NewInfiniteGasMeter())
s.ctx = app.BaseApp.NewContext(false, tmproto.Header{})

queryHelper := baseapp.NewQueryServerTestHelper(s.ctx, interfaceRegistry)
Expand Down Expand Up @@ -258,7 +257,8 @@ func (suite *DeterministicTestSuite) TestGRPCValidator() {
ValidatorAddr: val.OperatorAddress,
}

testdata.DeterministicIterations(suite.ctx, suite.Require(), req, suite.queryClient.Validator, 1915, false)
// NOTE: gas consumption delta changed from 1915 to 1933
testdata.DeterministicIterations(suite.ctx, suite.Require(), req, suite.queryClient.Validator, 1933, false)
}

func (suite *DeterministicTestSuite) TestGRPCValidators() {
Expand All @@ -281,7 +281,8 @@ func (suite *DeterministicTestSuite) TestGRPCValidators() {
suite.getStaticValidator()
suite.getStaticValidator2()

testdata.DeterministicIterations(suite.ctx, suite.Require(), &stakingtypes.QueryValidatorsRequest{}, suite.queryClient.Validators, 3525, false)
// NOTE: gas consumption delta changed from 3525 to 3597
testdata.DeterministicIterations(suite.ctx, suite.Require(), &stakingtypes.QueryValidatorsRequest{}, suite.queryClient.Validators, 3597, false)
}

func (suite *DeterministicTestSuite) TestGRPCValidatorDelegations() {
Expand Down Expand Up @@ -317,7 +318,8 @@ func (suite *DeterministicTestSuite) TestGRPCValidatorDelegations() {
ValidatorAddr: validator.OperatorAddress,
}

testdata.DeterministicIterations(suite.ctx, suite.Require(), req, suite.queryClient.ValidatorDelegations, 11985, false)
// NOTE: gas consumption delta changed from 11985 to 12615
testdata.DeterministicIterations(suite.ctx, suite.Require(), req, suite.queryClient.ValidatorDelegations, 12615, false)
}

func (suite *DeterministicTestSuite) TestGRPCValidatorUnbondingDelegations() {
Expand Down Expand Up @@ -390,7 +392,8 @@ func (suite *DeterministicTestSuite) TestGRPCDelegation() {
DelegatorAddr: delegator1,
}

testdata.DeterministicIterations(suite.ctx, suite.Require(), req, suite.queryClient.Delegation, 4635, false)
// NOTE: gas consumption delta changed from 4635 to 4845
testdata.DeterministicIterations(suite.ctx, suite.Require(), req, suite.queryClient.Delegation, 4845, false)
}

func (suite *DeterministicTestSuite) TestGRPCUnbondingDelegation() {
Expand Down Expand Up @@ -457,7 +460,8 @@ func (suite *DeterministicTestSuite) TestGRPCDelegatorDelegations() {
DelegatorAddr: delegator1,
}

testdata.DeterministicIterations(suite.ctx, suite.Require(), req, suite.queryClient.DelegatorDelegations, 4238, false)
// NOTE: gas consumption delta changed from 4238 to 4448
testdata.DeterministicIterations(suite.ctx, suite.Require(), req, suite.queryClient.DelegatorDelegations, 4448, false)
}

func (suite *DeterministicTestSuite) TestGRPCDelegatorValidator() {
Expand Down Expand Up @@ -488,7 +492,8 @@ func (suite *DeterministicTestSuite) TestGRPCDelegatorValidator() {
ValidatorAddr: validator.OperatorAddress,
}

testdata.DeterministicIterations(suite.ctx, suite.Require(), req, suite.queryClient.DelegatorValidator, 3563, false)
// NOTE: gas consumption delta changed from 3563 to 3581
testdata.DeterministicIterations(suite.ctx, suite.Require(), req, suite.queryClient.DelegatorValidator, 3581, false)
}

func (suite *DeterministicTestSuite) TestGRPCDelegatorUnbondingDelegations() {
Expand Down Expand Up @@ -579,7 +584,8 @@ func (suite *DeterministicTestSuite) TestGRPCHistoricalInfo() {
Height: height,
}

testdata.DeterministicIterations(suite.ctx, suite.Require(), req, suite.queryClient.HistoricalInfo, 1930, false)
// NOTE: gas consumption delta changed from 1930 to 1948
testdata.DeterministicIterations(suite.ctx, suite.Require(), req, suite.queryClient.HistoricalInfo, 1948, false)
}

func (suite *DeterministicTestSuite) TestGRPCDelegatorValidators() {
Expand Down Expand Up @@ -609,7 +615,9 @@ func (suite *DeterministicTestSuite) TestGRPCDelegatorValidators() {
suite.Require().NoError(err)

req := &stakingtypes.QueryDelegatorValidatorsRequest{DelegatorAddr: delegator1}
testdata.DeterministicIterations(suite.ctx, suite.Require(), req, suite.queryClient.DelegatorValidators, 3166, false)

// NOTE: gas consumption delta changed from 3166 to 3184
testdata.DeterministicIterations(suite.ctx, suite.Require(), req, suite.queryClient.DelegatorValidators, 3184, false)
}

func (suite *DeterministicTestSuite) TestGRPCPool() {
Expand All @@ -621,7 +629,9 @@ func (suite *DeterministicTestSuite) TestGRPCPool() {

suite.SetupTest() // reset
suite.getStaticValidator()
testdata.DeterministicIterations(suite.ctx, suite.Require(), &stakingtypes.QueryPoolRequest{}, suite.queryClient.Pool, 6185, false)

// NOTE: gas consumption delta changed from 6185 to 6377
testdata.DeterministicIterations(suite.ctx, suite.Require(), &stakingtypes.QueryPoolRequest{}, suite.queryClient.Pool, 6377, false)
}

func (suite *DeterministicTestSuite) TestGRPCRedelegations() {
Expand Down Expand Up @@ -683,18 +693,22 @@ func (suite *DeterministicTestSuite) TestGRPCRedelegations() {
DstValidatorAddr: validator2,
}

testdata.DeterministicIterations(suite.ctx, suite.Require(), req, suite.queryClient.Redelegations, 3920, false)
// NOTE: gas consumption delta changed from 3920 to 3938
testdata.DeterministicIterations(suite.ctx, suite.Require(), req, suite.queryClient.Redelegations, 3938, false)
}

func (suite *DeterministicTestSuite) TestGRPCParams() {
rapid.Check(suite.T(), func(t *rapid.T) {
params := stakingtypes.Params{
BondDenom: rapid.StringMatching(sdk.DefaultCoinDenomRegex()).Draw(t, "bond-denom"),
UnbondingTime: durationGenerator().Draw(t, "duration"),
MaxValidators: rapid.Uint32Min(1).Draw(t, "max-validators"),
MaxEntries: rapid.Uint32Min(1).Draw(t, "max-entries"),
HistoricalEntries: rapid.Uint32Min(1).Draw(t, "historical-entries"),
MinCommissionRate: sdk.NewDecWithPrec(rapid.Int64Range(0, 100).Draw(t, "commission"), 2),
BondDenom: rapid.StringMatching(sdk.DefaultCoinDenomRegex()).Draw(t, "bond-denom"),
UnbondingTime: durationGenerator().Draw(t, "duration"),
MaxValidators: rapid.Uint32Min(1).Draw(t, "max-validators"),
MaxEntries: rapid.Uint32Min(1).Draw(t, "max-entries"),
HistoricalEntries: rapid.Uint32Min(1).Draw(t, "historical-entries"),
MinCommissionRate: sdk.NewDecWithPrec(rapid.Int64Range(0, 100).Draw(t, "commission"), 2),
ValidatorBondFactor: sdk.NewDecWithPrec(rapid.Int64Range(0, 100).Draw(t, "bond-factor"), 2),
GlobalLiquidStakingCap: sdk.NewDecWithPrec(rapid.Int64Range(0, 100).Draw(t, "global-liquid-staking-cap"), 2),
ValidatorLiquidStakingCap: sdk.NewDecWithPrec(rapid.Int64Range(0, 100).Draw(t, "validator-liquid-staking-cap"), 2),
}

err := suite.stakingKeeper.SetParams(suite.ctx, params)
Expand All @@ -704,16 +718,20 @@ func (suite *DeterministicTestSuite) TestGRPCParams() {
})

params := stakingtypes.Params{
BondDenom: "denom",
UnbondingTime: time.Hour,
MaxValidators: 85,
MaxEntries: 5,
HistoricalEntries: 5,
MinCommissionRate: sdk.NewDecWithPrec(5, 2),
BondDenom: "denom",
UnbondingTime: time.Hour,
MaxValidators: 85,
MaxEntries: 5,
HistoricalEntries: 5,
MinCommissionRate: sdk.NewDecWithPrec(5, 2),
ValidatorBondFactor: sdk.NewDecWithPrec(18, 2),
GlobalLiquidStakingCap: sdk.NewDecWithPrec(11, 2),
ValidatorLiquidStakingCap: sdk.NewDecWithPrec(2, 2),
}

err := suite.stakingKeeper.SetParams(suite.ctx, params)
suite.Require().NoError(err)

testdata.DeterministicIterations(suite.ctx, suite.Require(), &stakingtypes.QueryParamsRequest{}, suite.queryClient.Params, 1114, false)
// NOTE: gas consumption delta changed from 1114 to 1291
testdata.DeterministicIterations(suite.ctx, suite.Require(), &stakingtypes.QueryParamsRequest{}, suite.queryClient.Params, 1291, false)
}
Loading
Loading