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