github.com/cosmos/cosmos-sdk@v0.50.10/x/slashing/app_test.go (about) 1 package slashing_test 2 3 import ( 4 "errors" 5 "testing" 6 7 abci "github.com/cometbft/cometbft/abci/types" 8 cmtproto "github.com/cometbft/cometbft/proto/tendermint/types" 9 "github.com/stretchr/testify/require" 10 11 "cosmossdk.io/depinject" 12 "cosmossdk.io/log" 13 "cosmossdk.io/math" 14 15 "github.com/cosmos/cosmos-sdk/crypto/keys/ed25519" 16 "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" 17 "github.com/cosmos/cosmos-sdk/testutil/configurator" 18 "github.com/cosmos/cosmos-sdk/testutil/sims" 19 sdk "github.com/cosmos/cosmos-sdk/types" 20 moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil" 21 authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" 22 bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" 23 "github.com/cosmos/cosmos-sdk/x/slashing/keeper" 24 "github.com/cosmos/cosmos-sdk/x/slashing/types" 25 stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper" 26 stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" 27 ) 28 29 var ( 30 priv1 = secp256k1.GenPrivKey() 31 addr1 = sdk.AccAddress(priv1.PubKey().Address()) 32 33 valKey = ed25519.GenPrivKey() 34 valAddr = sdk.AccAddress(valKey.PubKey().Address()) 35 ) 36 37 func TestSlashingMsgs(t *testing.T) { 38 genTokens := sdk.TokensFromConsensusPower(42, sdk.DefaultPowerReduction) 39 bondTokens := sdk.TokensFromConsensusPower(10, sdk.DefaultPowerReduction) 40 genCoin := sdk.NewCoin(sdk.DefaultBondDenom, genTokens) 41 bondCoin := sdk.NewCoin(sdk.DefaultBondDenom, bondTokens) 42 43 acc1 := &authtypes.BaseAccount{ 44 Address: addr1.String(), 45 } 46 accs := []sims.GenesisAccount{{GenesisAccount: acc1, Coins: sdk.Coins{genCoin}}} 47 48 startupCfg := sims.DefaultStartUpConfig() 49 startupCfg.GenesisAccounts = accs 50 51 var ( 52 stakingKeeper *stakingkeeper.Keeper 53 bankKeeper bankkeeper.Keeper 54 slashingKeeper keeper.Keeper 55 ) 56 57 app, err := sims.SetupWithConfiguration( 58 depinject.Configs( 59 configurator.NewAppConfig( 60 configurator.ParamsModule(), 61 configurator.AuthModule(), 62 configurator.StakingModule(), 63 configurator.SlashingModule(), 64 configurator.TxModule(), 65 configurator.ConsensusModule(), 66 configurator.BankModule(), 67 ), 68 depinject.Supply(log.NewNopLogger()), 69 ), 70 startupCfg, &stakingKeeper, &bankKeeper, &slashingKeeper) 71 require.NoError(t, err) 72 73 baseApp := app.BaseApp 74 75 ctxCheck := baseApp.NewContext(true) 76 require.True(t, sdk.Coins{genCoin}.Equal(bankKeeper.GetAllBalances(ctxCheck, addr1))) 77 78 require.NoError(t, err) 79 80 description := stakingtypes.NewDescription("foo_moniker", "", "", "", "") 81 commission := stakingtypes.NewCommissionRates(math.LegacyZeroDec(), math.LegacyZeroDec(), math.LegacyZeroDec()) 82 83 createValidatorMsg, err := stakingtypes.NewMsgCreateValidator( 84 sdk.ValAddress(addr1).String(), valKey.PubKey(), bondCoin, description, commission, math.OneInt(), 85 ) 86 require.NoError(t, err) 87 88 header := cmtproto.Header{Height: app.LastBlockHeight() + 1} 89 txConfig := moduletestutil.MakeTestTxConfig() 90 _, _, err = sims.SignCheckDeliver(t, txConfig, app.BaseApp, header, []sdk.Msg{createValidatorMsg}, "", []uint64{0}, []uint64{0}, true, true, priv1) 91 require.NoError(t, err) 92 require.True(t, sdk.Coins{genCoin.Sub(bondCoin)}.Equal(bankKeeper.GetAllBalances(ctxCheck, addr1))) 93 94 app.FinalizeBlock(&abci.RequestFinalizeBlock{Height: app.LastBlockHeight() + 1}) 95 96 ctxCheck = baseApp.NewContext(true) 97 validator, err := stakingKeeper.GetValidator(ctxCheck, sdk.ValAddress(addr1)) 98 require.NoError(t, err) 99 100 require.Equal(t, sdk.ValAddress(addr1).String(), validator.OperatorAddress) 101 require.Equal(t, stakingtypes.Bonded, validator.Status) 102 require.True(math.IntEq(t, bondTokens, validator.BondedTokens())) 103 unjailMsg := &types.MsgUnjail{ValidatorAddr: sdk.ValAddress(addr1).String()} 104 105 ctxCheck = app.BaseApp.NewContext(true) 106 _, err = slashingKeeper.GetValidatorSigningInfo(ctxCheck, sdk.ConsAddress(valAddr)) 107 require.NoError(t, err) 108 109 // unjail should fail with unknown validator 110 header = cmtproto.Header{Height: app.LastBlockHeight() + 1} 111 _, _, err = sims.SignCheckDeliver(t, txConfig, app.BaseApp, header, []sdk.Msg{unjailMsg}, "", []uint64{0}, []uint64{1}, false, false, priv1) 112 require.Error(t, err) 113 require.True(t, errors.Is(types.ErrValidatorNotJailed, err)) 114 }