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  }