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  }