github.com/Finschia/finschia-sdk@v0.49.1/x/slashing/app_test.go (about) 1 package slashing_test 2 3 import ( 4 "errors" 5 "testing" 6 7 ocabci "github.com/Finschia/ostracon/abci/types" 8 "github.com/stretchr/testify/require" 9 tmproto "github.com/tendermint/tendermint/proto/tendermint/types" 10 11 "github.com/Finschia/finschia-sdk/crypto/keys/ed25519" 12 "github.com/Finschia/finschia-sdk/crypto/keys/secp256k1" 13 "github.com/Finschia/finschia-sdk/simapp" 14 sdk "github.com/Finschia/finschia-sdk/types" 15 authtypes "github.com/Finschia/finschia-sdk/x/auth/types" 16 banktypes "github.com/Finschia/finschia-sdk/x/bank/types" 17 "github.com/Finschia/finschia-sdk/x/slashing/types" 18 stakingtypes "github.com/Finschia/finschia-sdk/x/staking/types" 19 ) 20 21 var ( 22 priv1 = secp256k1.GenPrivKey() 23 addr1 = sdk.AccAddress(priv1.PubKey().Address()) 24 25 valKey = ed25519.GenPrivKey() 26 valAddr = sdk.AccAddress(valKey.PubKey().Address()) 27 ) 28 29 func checkValidator(t *testing.T, app *simapp.SimApp, _ sdk.AccAddress, expFound bool) stakingtypes.Validator { 30 t.Helper() 31 ctxCheck := app.BaseApp.NewContext(true, tmproto.Header{}) 32 validator, found := app.StakingKeeper.GetValidator(ctxCheck, sdk.ValAddress(addr1)) 33 require.Equal(t, expFound, found) 34 return validator 35 } 36 37 func checkValidatorSigningInfo(t *testing.T, app *simapp.SimApp, addr sdk.ConsAddress, expFound bool) types.ValidatorSigningInfo { 38 t.Helper() 39 ctxCheck := app.BaseApp.NewContext(true, tmproto.Header{}) 40 signingInfo, found := app.SlashingKeeper.GetValidatorSigningInfo(ctxCheck, addr) 41 require.Equal(t, expFound, found) 42 return signingInfo 43 } 44 45 func TestSlashingMsgs(t *testing.T) { 46 genTokens := sdk.TokensFromConsensusPower(42, sdk.DefaultPowerReduction) 47 bondTokens := sdk.TokensFromConsensusPower(10, sdk.DefaultPowerReduction) 48 genCoin := sdk.NewCoin(sdk.DefaultBondDenom, genTokens) 49 bondCoin := sdk.NewCoin(sdk.DefaultBondDenom, bondTokens) 50 51 acc1 := &authtypes.BaseAccount{ 52 Address: addr1.String(), 53 } 54 accs := authtypes.GenesisAccounts{acc1} 55 balances := []banktypes.Balance{ 56 { 57 Address: addr1.String(), 58 Coins: sdk.Coins{genCoin}, 59 }, 60 } 61 62 app := simapp.SetupWithGenesisAccounts(accs, balances...) 63 simapp.CheckBalance(t, app, addr1, sdk.Coins{genCoin}) 64 65 description := stakingtypes.NewDescription("foo_moniker", "", "", "", "") 66 commission := stakingtypes.NewCommissionRates(sdk.ZeroDec(), sdk.ZeroDec(), sdk.ZeroDec()) 67 68 createValidatorMsg, err := stakingtypes.NewMsgCreateValidator( 69 sdk.ValAddress(addr1), valKey.PubKey(), bondCoin, description, commission, sdk.OneInt(), 70 ) 71 require.NoError(t, err) 72 73 header := tmproto.Header{Height: app.LastBlockHeight() + 1} 74 txGen := simapp.MakeTestEncodingConfig().TxConfig 75 _, _, err = simapp.SignCheckDeliver(t, txGen, app.BaseApp, header, []sdk.Msg{createValidatorMsg}, "", []uint64{0}, []uint64{0}, true, true, priv1) 76 require.NoError(t, err) 77 simapp.CheckBalance(t, app, addr1, sdk.Coins{genCoin.Sub(bondCoin)}) 78 79 header = tmproto.Header{Height: app.LastBlockHeight() + 1} 80 app.BeginBlock(ocabci.RequestBeginBlock{Header: header}) 81 82 validator := checkValidator(t, app, addr1, true) 83 require.Equal(t, sdk.ValAddress(addr1).String(), validator.OperatorAddress) 84 require.Equal(t, stakingtypes.Bonded, validator.Status) 85 require.True(sdk.IntEq(t, bondTokens, validator.BondedTokens())) 86 unjailMsg := &types.MsgUnjail{ValidatorAddr: sdk.ValAddress(addr1).String()} 87 88 checkValidatorSigningInfo(t, app, sdk.ConsAddress(valAddr), true) 89 90 // unjail should fail with unknown validator 91 header = tmproto.Header{Height: app.LastBlockHeight() + 1} 92 _, res, err := simapp.SignCheckDeliver(t, txGen, app.BaseApp, header, []sdk.Msg{unjailMsg}, "", []uint64{0}, []uint64{1}, false, false, priv1) 93 require.Error(t, err) 94 require.Nil(t, res) 95 require.True(t, errors.Is(types.ErrValidatorNotJailed, err)) 96 }