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 }