github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/libs/cosmos-sdk/x/distribution/keeper/test_common.go (about)

     1  package keeper
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/store/mpt"
     7  
     8  	"github.com/stretchr/testify/require"
     9  
    10  	abci "github.com/fibonacci-chain/fbc/libs/tendermint/abci/types"
    11  	"github.com/fibonacci-chain/fbc/libs/tendermint/crypto/ed25519"
    12  	"github.com/fibonacci-chain/fbc/libs/tendermint/libs/log"
    13  	dbm "github.com/fibonacci-chain/fbc/libs/tm-db"
    14  
    15  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/codec"
    16  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/store"
    17  	sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types"
    18  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/auth"
    19  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/bank"
    20  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/params"
    21  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/staking"
    22  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/supply"
    23  
    24  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/distribution/types"
    25  )
    26  
    27  //nolint:deadcode,unused
    28  var (
    29  	delPk1   = ed25519.GenPrivKey().PubKey()
    30  	delPk2   = ed25519.GenPrivKey().PubKey()
    31  	delPk3   = ed25519.GenPrivKey().PubKey()
    32  	delAddr1 = sdk.AccAddress(delPk1.Address())
    33  	delAddr2 = sdk.AccAddress(delPk2.Address())
    34  	delAddr3 = sdk.AccAddress(delPk3.Address())
    35  
    36  	valOpPk1    = ed25519.GenPrivKey().PubKey()
    37  	valOpPk2    = ed25519.GenPrivKey().PubKey()
    38  	valOpPk3    = ed25519.GenPrivKey().PubKey()
    39  	valOpAddr1  = sdk.ValAddress(valOpPk1.Address())
    40  	valOpAddr2  = sdk.ValAddress(valOpPk2.Address())
    41  	valOpAddr3  = sdk.ValAddress(valOpPk3.Address())
    42  	valAccAddr1 = sdk.AccAddress(valOpPk1.Address()) // generate acc addresses for these validator keys too
    43  	valAccAddr2 = sdk.AccAddress(valOpPk2.Address())
    44  	valAccAddr3 = sdk.AccAddress(valOpPk3.Address())
    45  
    46  	valConsPk1   = ed25519.GenPrivKey().PubKey()
    47  	valConsPk2   = ed25519.GenPrivKey().PubKey()
    48  	valConsPk3   = ed25519.GenPrivKey().PubKey()
    49  	valConsAddr1 = sdk.ConsAddress(valConsPk1.Address())
    50  	valConsAddr2 = sdk.ConsAddress(valConsPk2.Address())
    51  
    52  	// TODO move to common testing package for all modules
    53  	// test addresses
    54  	TestAddrs = []sdk.AccAddress{
    55  		delAddr1, delAddr2, delAddr3,
    56  		valAccAddr1, valAccAddr2, valAccAddr3,
    57  	}
    58  
    59  	distrAcc = supply.NewEmptyModuleAccount(types.ModuleName)
    60  )
    61  
    62  // create a codec used only for testing
    63  func MakeTestCodec() *codec.Codec {
    64  	var cdc = codec.New()
    65  	bank.RegisterCodec(cdc)
    66  	staking.RegisterCodec(cdc)
    67  	auth.RegisterCodec(cdc)
    68  	supply.RegisterCodec(cdc)
    69  	sdk.RegisterCodec(cdc)
    70  	codec.RegisterCrypto(cdc)
    71  
    72  	types.RegisterCodec(cdc) // distr
    73  	return cdc
    74  }
    75  
    76  // test input with default values
    77  func CreateTestInputDefault(t *testing.T, isCheckTx bool, initPower int64) (
    78  	sdk.Context, auth.AccountKeeper, Keeper, staking.Keeper, types.SupplyKeeper) {
    79  
    80  	communityTax := sdk.NewDecWithPrec(2, 2)
    81  
    82  	ctx, ak, _, dk, sk, _, supplyKeeper := CreateTestInputAdvanced(t, isCheckTx, initPower, communityTax)
    83  	return ctx, ak, dk, sk, supplyKeeper
    84  }
    85  
    86  // hogpodge of all sorts of input required for testing
    87  func CreateTestInputAdvanced(t *testing.T, isCheckTx bool, initPower int64,
    88  	communityTax sdk.Dec) (sdk.Context, auth.AccountKeeper, bank.Keeper,
    89  	Keeper, staking.Keeper, params.Keeper, types.SupplyKeeper) {
    90  
    91  	initTokens := sdk.TokensFromConsensusPower(initPower)
    92  
    93  	keyDistr := sdk.NewKVStoreKey(types.StoreKey)
    94  	keyStaking := sdk.NewKVStoreKey(staking.StoreKey)
    95  	keyAcc := sdk.NewKVStoreKey(auth.StoreKey)
    96  	keyMpt := sdk.NewKVStoreKey(mpt.StoreKey)
    97  	keySupply := sdk.NewKVStoreKey(supply.StoreKey)
    98  	keyParams := sdk.NewKVStoreKey(params.StoreKey)
    99  	tkeyParams := sdk.NewTransientStoreKey(params.TStoreKey)
   100  
   101  	db := dbm.NewMemDB()
   102  	ms := store.NewCommitMultiStore(db)
   103  
   104  	ms.MountStoreWithDB(keyDistr, sdk.StoreTypeIAVL, db)
   105  	ms.MountStoreWithDB(keyStaking, sdk.StoreTypeIAVL, db)
   106  	ms.MountStoreWithDB(keySupply, sdk.StoreTypeIAVL, db)
   107  	ms.MountStoreWithDB(keyAcc, sdk.StoreTypeIAVL, db)
   108  	ms.MountStoreWithDB(keyMpt, sdk.StoreTypeMPT, db)
   109  	ms.MountStoreWithDB(keyParams, sdk.StoreTypeIAVL, db)
   110  	ms.MountStoreWithDB(tkeyParams, sdk.StoreTypeTransient, db)
   111  
   112  	err := ms.LoadLatestVersion()
   113  	require.Nil(t, err)
   114  
   115  	feeCollectorAcc := supply.NewEmptyModuleAccount(auth.FeeCollectorName)
   116  	notBondedPool := supply.NewEmptyModuleAccount(staking.NotBondedPoolName, supply.Burner, supply.Staking)
   117  	bondPool := supply.NewEmptyModuleAccount(staking.BondedPoolName, supply.Burner, supply.Staking)
   118  
   119  	blacklistedAddrs := make(map[string]bool)
   120  	blacklistedAddrs[feeCollectorAcc.GetAddress().String()] = true
   121  	blacklistedAddrs[notBondedPool.GetAddress().String()] = true
   122  	blacklistedAddrs[bondPool.GetAddress().String()] = true
   123  	blacklistedAddrs[distrAcc.GetAddress().String()] = true
   124  
   125  	cdc := MakeTestCodec()
   126  	pk := params.NewKeeper(cdc, keyParams, tkeyParams)
   127  
   128  	ctx := sdk.NewContext(ms, abci.Header{ChainID: "foochainid"}, isCheckTx, log.NewNopLogger())
   129  	accountKeeper := auth.NewAccountKeeper(cdc, keyAcc, keyMpt, pk.Subspace(auth.DefaultParamspace), auth.ProtoBaseAccount)
   130  	bankKeeper := bank.NewBaseKeeper(accountKeeper, pk.Subspace(bank.DefaultParamspace), blacklistedAddrs)
   131  	maccPerms := map[string][]string{
   132  		auth.FeeCollectorName:     nil,
   133  		types.ModuleName:          nil,
   134  		staking.NotBondedPoolName: {supply.Burner, supply.Staking},
   135  		staking.BondedPoolName:    {supply.Burner, supply.Staking},
   136  	}
   137  	supplyKeeper := supply.NewKeeper(cdc, keySupply, accountKeeper, bank.NewBankKeeperAdapter(bankKeeper), maccPerms)
   138  
   139  	sk := staking.NewKeeper(cdc, keyStaking, supplyKeeper, pk.Subspace(staking.DefaultParamspace))
   140  	sk.SetParams(ctx, staking.DefaultParams())
   141  
   142  	keeper := NewKeeper(cdc, keyDistr, pk.Subspace(types.DefaultParamspace), sk, supplyKeeper, auth.FeeCollectorName, blacklistedAddrs)
   143  
   144  	initCoins := sdk.NewCoins(sdk.NewCoin(sk.BondDenom(ctx), initTokens))
   145  	totalSupply := sdk.NewCoins(sdk.NewCoin(sk.BondDenom(ctx), initTokens.MulRaw(int64(len(TestAddrs)))))
   146  	supplyKeeper.SetSupply(ctx, supply.NewSupply(totalSupply))
   147  
   148  	// fill all the addresses with some coins, set the loose pool tokens simultaneously
   149  	for _, addr := range TestAddrs {
   150  		_, err := bankKeeper.AddCoins(ctx, addr, initCoins)
   151  		require.Nil(t, err)
   152  	}
   153  
   154  	// set module accounts
   155  	keeper.supplyKeeper.SetModuleAccount(ctx, feeCollectorAcc)
   156  	keeper.supplyKeeper.SetModuleAccount(ctx, notBondedPool)
   157  	keeper.supplyKeeper.SetModuleAccount(ctx, bondPool)
   158  	keeper.supplyKeeper.SetModuleAccount(ctx, distrAcc)
   159  
   160  	// set the distribution hooks on staking
   161  	sk.SetHooks(keeper.Hooks())
   162  
   163  	// set genesis items required for distribution
   164  	keeper.SetFeePool(ctx, types.InitialFeePool())
   165  
   166  	params := types.DefaultParams()
   167  	params.CommunityTax = communityTax
   168  	params.BaseProposerReward = sdk.NewDecWithPrec(1, 2)
   169  	params.BonusProposerReward = sdk.NewDecWithPrec(4, 2)
   170  	keeper.SetParams(ctx, params)
   171  
   172  	return ctx, accountKeeper, bankKeeper, keeper, sk, pk, supplyKeeper
   173  }