github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/libs/cosmos-sdk/x/slashing/internal/keeper/test_common.go (about) 1 // nolint:deadcode,unused 2 // DONTCOVER 3 // noalias 4 package keeper 5 6 import ( 7 "encoding/hex" 8 "testing" 9 "time" 10 11 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/store/mpt" 12 13 "github.com/stretchr/testify/require" 14 15 abci "github.com/fibonacci-chain/fbc/libs/tendermint/abci/types" 16 "github.com/fibonacci-chain/fbc/libs/tendermint/crypto" 17 "github.com/fibonacci-chain/fbc/libs/tendermint/crypto/ed25519" 18 "github.com/fibonacci-chain/fbc/libs/tendermint/libs/log" 19 dbm "github.com/fibonacci-chain/fbc/libs/tm-db" 20 21 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/codec" 22 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/store" 23 sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types" 24 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/auth" 25 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/bank" 26 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/params" 27 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/slashing/internal/types" 28 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/staking" 29 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/supply" 30 ) 31 32 // TODO remove dependencies on staking (should only refer to validator set type from sdk) 33 34 var ( 35 Pks = []crypto.PubKey{ 36 newPubKey("0B485CFC0EECC619440448436F8FC9DF40566F2369E72400281454CB552AFB50"), 37 newPubKey("0B485CFC0EECC619440448436F8FC9DF40566F2369E72400281454CB552AFB51"), 38 newPubKey("0B485CFC0EECC619440448436F8FC9DF40566F2369E72400281454CB552AFB52"), 39 } 40 Addrs = []sdk.ValAddress{ 41 sdk.ValAddress(Pks[0].Address()), 42 sdk.ValAddress(Pks[1].Address()), 43 sdk.ValAddress(Pks[2].Address()), 44 } 45 InitTokens = sdk.TokensFromConsensusPower(200) 46 initCoins = sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, InitTokens)) 47 ) 48 49 func createTestCodec() *codec.Codec { 50 cdc := codec.New() 51 sdk.RegisterCodec(cdc) 52 auth.RegisterCodec(cdc) 53 supply.RegisterCodec(cdc) 54 bank.RegisterCodec(cdc) 55 staking.RegisterCodec(cdc) 56 codec.RegisterCrypto(cdc) 57 return cdc 58 } 59 60 func CreateTestInput(t *testing.T, defaults types.Params) (sdk.Context, bank.Keeper, staking.Keeper, params.Subspace, Keeper) { 61 keyAcc := sdk.NewKVStoreKey(auth.StoreKey) 62 keyMpt := sdk.NewKVStoreKey(mpt.StoreKey) 63 keyStaking := sdk.NewKVStoreKey(staking.StoreKey) 64 keySlashing := sdk.NewKVStoreKey(types.StoreKey) 65 keySupply := sdk.NewKVStoreKey(supply.StoreKey) 66 keyParams := sdk.NewKVStoreKey(params.StoreKey) 67 tkeyParams := sdk.NewTransientStoreKey(params.TStoreKey) 68 69 db := dbm.NewMemDB() 70 71 ms := store.NewCommitMultiStore(db) 72 ms.MountStoreWithDB(keyAcc, sdk.StoreTypeIAVL, db) 73 ms.MountStoreWithDB(keyMpt, sdk.StoreTypeMPT, db) 74 ms.MountStoreWithDB(keyStaking, sdk.StoreTypeIAVL, db) 75 ms.MountStoreWithDB(keySupply, sdk.StoreTypeIAVL, db) 76 ms.MountStoreWithDB(keySlashing, sdk.StoreTypeIAVL, db) 77 ms.MountStoreWithDB(keyParams, sdk.StoreTypeIAVL, db) 78 ms.MountStoreWithDB(tkeyParams, sdk.StoreTypeTransient, db) 79 80 err := ms.LoadLatestVersion() 81 require.Nil(t, err) 82 83 ctx := sdk.NewContext(ms, abci.Header{Time: time.Unix(0, 0)}, false, log.NewNopLogger()) 84 cdc := createTestCodec() 85 86 feeCollectorAcc := supply.NewEmptyModuleAccount(auth.FeeCollectorName) 87 notBondedPool := supply.NewEmptyModuleAccount(staking.NotBondedPoolName, supply.Burner, supply.Staking) 88 bondPool := supply.NewEmptyModuleAccount(staking.BondedPoolName, supply.Burner, supply.Staking) 89 90 blacklistedAddrs := make(map[string]bool) 91 blacklistedAddrs[feeCollectorAcc.GetAddress().String()] = true 92 blacklistedAddrs[notBondedPool.GetAddress().String()] = true 93 blacklistedAddrs[bondPool.GetAddress().String()] = true 94 95 paramsKeeper := params.NewKeeper(cdc, keyParams, tkeyParams) 96 accountKeeper := auth.NewAccountKeeper(cdc, keyAcc, keyMpt, paramsKeeper.Subspace(auth.DefaultParamspace), auth.ProtoBaseAccount) 97 98 bk := bank.NewBaseKeeper(accountKeeper, paramsKeeper.Subspace(bank.DefaultParamspace), blacklistedAddrs) 99 maccPerms := map[string][]string{ 100 auth.FeeCollectorName: nil, 101 staking.NotBondedPoolName: {supply.Burner, supply.Staking}, 102 staking.BondedPoolName: {supply.Burner, supply.Staking}, 103 } 104 supplyKeeper := supply.NewKeeper(cdc, keySupply, accountKeeper, bank.NewBankKeeperAdapter(bk), maccPerms) 105 106 totalSupply := sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, InitTokens.MulRaw(int64(len(Addrs))))) 107 supplyKeeper.SetSupply(ctx, supply.NewSupply(totalSupply)) 108 109 sk := staking.NewKeeper(cdc, keyStaking, supplyKeeper, paramsKeeper.Subspace(staking.DefaultParamspace)) 110 genesis := staking.DefaultGenesisState() 111 112 // set module accounts 113 supplyKeeper.SetModuleAccount(ctx, feeCollectorAcc) 114 supplyKeeper.SetModuleAccount(ctx, bondPool) 115 supplyKeeper.SetModuleAccount(ctx, notBondedPool) 116 117 _ = staking.InitGenesis(ctx, sk, accountKeeper, supplyKeeper, genesis) 118 119 for _, addr := range Addrs { 120 _, err = bk.AddCoins(ctx, sdk.AccAddress(addr), initCoins) 121 } 122 require.Nil(t, err) 123 paramstore := paramsKeeper.Subspace(types.DefaultParamspace) 124 keeper := NewKeeper(cdc, keySlashing, &sk, paramstore) 125 126 keeper.SetParams(ctx, defaults) 127 sk.SetHooks(keeper.Hooks()) 128 129 return ctx, bk, sk, paramstore, keeper 130 } 131 132 func newPubKey(pk string) (res crypto.PubKey) { 133 pkBytes, err := hex.DecodeString(pk) 134 if err != nil { 135 panic(err) 136 } 137 var pkEd ed25519.PubKeyEd25519 138 copy(pkEd[:], pkBytes) 139 return pkEd 140 } 141 142 // Have to change these parameters for tests 143 // lest the tests take forever 144 func TestParams() types.Params { 145 params := types.DefaultParams() 146 params.SignedBlocksWindow = 1000 147 params.DowntimeJailDuration = 60 * 60 148 return params 149 } 150 151 func NewTestMsgCreateValidator(address sdk.ValAddress, pubKey crypto.PubKey, amt sdk.Int) staking.MsgCreateValidator { 152 commission := staking.NewCommissionRates(sdk.ZeroDec(), sdk.ZeroDec(), sdk.ZeroDec()) 153 return staking.NewMsgCreateValidator( 154 address, pubKey, sdk.NewCoin(sdk.DefaultBondDenom, amt), 155 staking.Description{}, commission, sdk.OneInt(), 156 ) 157 } 158 159 func NewTestMsgDelegate(delAddr sdk.AccAddress, valAddr sdk.ValAddress, delAmount sdk.Int) staking.MsgDelegate { 160 amount := sdk.NewCoin(sdk.DefaultBondDenom, delAmount) 161 return staking.NewMsgDelegate(delAddr, valAddr, amount) 162 }