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  }