github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/dex/keeper/test_common.go (about) 1 package keeper 2 3 import ( 4 "fmt" 5 "os" 6 "testing" 7 "time" 8 9 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/store/mpt" 10 11 "github.com/fibonacci-chain/fbc/x/staking" 12 13 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/codec" 14 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/store" 15 sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types" 16 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/auth" 17 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/bank" 18 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/supply" 19 abci "github.com/fibonacci-chain/fbc/libs/tendermint/abci/types" 20 "github.com/fibonacci-chain/fbc/libs/tendermint/crypto/ed25519" 21 "github.com/fibonacci-chain/fbc/libs/tendermint/libs/log" 22 dbm "github.com/fibonacci-chain/fbc/libs/tm-db" 23 "github.com/fibonacci-chain/fbc/x/params" 24 "github.com/stretchr/testify/require" 25 26 "github.com/fibonacci-chain/fbc/x/common" 27 "github.com/fibonacci-chain/fbc/x/dex/types" 28 "github.com/fibonacci-chain/fbc/x/gov" 29 "github.com/fibonacci-chain/fbc/x/token" 30 ) 31 32 type testInput struct { 33 Ctx sdk.Context 34 Cdc *codec.Codec 35 TestAddrs []sdk.AccAddress 36 37 DexKeeper Keeper 38 } 39 40 // create a codec used only for testing 41 func makeTestCodec() *codec.Codec { 42 var cdc = codec.New() 43 bank.RegisterCodec(cdc) 44 auth.RegisterCodec(cdc) 45 supply.RegisterCodec(cdc) 46 sdk.RegisterCodec(cdc) 47 codec.RegisterCrypto(cdc) 48 49 types.RegisterCodec(cdc) // dex 50 return cdc 51 } 52 53 func createTestInputWithBalance(t *testing.T, numAddrs, initQuantity int64) testInput { 54 db := dbm.NewMemDB() 55 56 keyAcc := sdk.NewKVStoreKey(auth.StoreKey) 57 keyMpt := sdk.NewKVStoreKey(mpt.StoreKey) 58 keySupply := sdk.NewKVStoreKey(supply.StoreKey) 59 keyParams := sdk.NewKVStoreKey(params.StoreKey) 60 tkeyParams := sdk.NewTransientStoreKey(params.TStoreKey) 61 62 // token module 63 keyToken := sdk.NewKVStoreKey(token.StoreKey) 64 keyLock := sdk.NewKVStoreKey(token.KeyLock) 65 //keyTokenPair := sdk.NewKVStoreKey(token.KeyTokenPair) 66 67 keyStaking := sdk.NewKVStoreKey(staking.StoreKey) 68 69 // dex module 70 storeKey := sdk.NewKVStoreKey(types.StoreKey) 71 keyTokenPair := sdk.NewKVStoreKey(types.TokenPairStoreKey) 72 73 ms := store.NewCommitMultiStore(db) 74 ms.MountStoreWithDB(keyAcc, sdk.StoreTypeIAVL, db) 75 ms.MountStoreWithDB(keyMpt, sdk.StoreTypeMPT, db) 76 ms.MountStoreWithDB(keySupply, sdk.StoreTypeIAVL, db) 77 ms.MountStoreWithDB(keyParams, sdk.StoreTypeIAVL, db) 78 ms.MountStoreWithDB(tkeyParams, sdk.StoreTypeTransient, db) 79 80 ms.MountStoreWithDB(keyStaking, sdk.StoreTypeIAVL, db) 81 82 ms.MountStoreWithDB(keyToken, sdk.StoreTypeIAVL, db) 83 ms.MountStoreWithDB(keyLock, sdk.StoreTypeIAVL, db) 84 ms.MountStoreWithDB(storeKey, sdk.StoreTypeIAVL, db) 85 ms.MountStoreWithDB(keyTokenPair, sdk.StoreTypeIAVL, db) 86 87 err := ms.LoadLatestVersion() 88 require.Nil(t, err) 89 90 ctx := sdk.NewContext(ms, abci.Header{Time: time.Unix(0, 0)}, false, log.NewTMLogger(os.Stdout)) 91 cdc := makeTestCodec() 92 93 feeCollectorAcc := supply.NewEmptyModuleAccount(auth.FeeCollectorName) 94 95 blacklistedAddrs := make(map[string]bool) 96 blacklistedAddrs[feeCollectorAcc.String()] = true 97 98 paramsKeeper := params.NewKeeper(cdc, keyParams, tkeyParams, ctx.Logger()) 99 accountKeeper := auth.NewAccountKeeper(cdc, keyAcc, keyMpt, 100 paramsKeeper.Subspace(auth.DefaultParamspace), auth.ProtoBaseAccount) 101 bankKeeper := bank.NewBaseKeeper(accountKeeper, paramsKeeper.Subspace(bank.DefaultParamspace), 102 blacklistedAddrs) 103 maccPerms := map[string][]string{ 104 auth.FeeCollectorName: nil, 105 token.ModuleName: {supply.Minter, supply.Burner}, 106 types.ModuleName: nil, 107 gov.ModuleName: nil, 108 } 109 supplyKeeper := supply.NewKeeper(cdc, keySupply, accountKeeper, bank.NewBankKeeperAdapter(bankKeeper), maccPerms) 110 supplyKeeper.SetSupply(ctx, supply.NewSupply(sdk.Coins{})) 111 112 // set module accounts 113 supplyKeeper.SetModuleAccount(ctx, feeCollectorAcc) 114 115 // token keeper 116 tokenKeepr := token.NewKeeper(bankKeeper, 117 paramsKeeper.Subspace(token.DefaultParamspace), auth.FeeCollectorName, supplyKeeper, 118 keyToken, keyLock, cdc, true, accountKeeper) 119 120 paramsSubspace := paramsKeeper.Subspace(types.DefaultParamspace) 121 122 mockStakingKeeper := &mockStakingKeeper{true} 123 mockBankKeeper := mockBankKeeper{} 124 125 // dex keeper 126 dexKeeper := NewKeeper(auth.FeeCollectorName, supplyKeeper, paramsSubspace, tokenKeepr, mockStakingKeeper, mockBankKeeper, storeKey, keyTokenPair, cdc) 127 128 // init account tokens 129 decCoins, err := sdk.ParseDecCoins(fmt.Sprintf("%d%s,%d%s", 130 initQuantity, common.NativeToken, initQuantity, common.TestToken)) 131 if err != nil { 132 panic(err) 133 } 134 135 var testAddrs []sdk.AccAddress 136 for i := int64(0); i < numAddrs; i++ { 137 pk := ed25519.GenPrivKey().PubKey() 138 addr := sdk.AccAddress(pk.Address()) 139 testAddrs = append(testAddrs, addr) 140 err := dexKeeper.supplyKeeper.MintCoins(ctx, token.ModuleName, decCoins) 141 require.Nil(t, err) 142 err = dexKeeper.supplyKeeper.SendCoinsFromModuleToAccount(ctx, token.ModuleName, addr, decCoins) 143 require.Nil(t, err) 144 } 145 146 return testInput{ctx, cdc, testAddrs, dexKeeper} 147 } 148 149 // nolint 150 func createTestInput(t *testing.T) testInput { 151 return createTestInputWithBalance(t, 2, 100) 152 } 153 154 type mockStakingKeeper struct { 155 getFakeValidator bool 156 } 157 158 func (m *mockStakingKeeper) IsValidator(ctx sdk.Context, addr sdk.AccAddress) bool { 159 return m.getFakeValidator 160 } 161 162 func (m *mockStakingKeeper) SetFakeValidator(fakeValidator bool) { 163 m.getFakeValidator = fakeValidator 164 } 165 166 type mockBankKeeper struct{} 167 168 // GetCoins returns coins for test 169 func (keeper mockBankKeeper) GetCoins(ctx sdk.Context, addr sdk.AccAddress) sdk.Coins { 170 return sdk.NewDecCoinsFromDec(common.NativeToken, sdk.NewDec(2500)) 171 } 172 173 // GetBuiltInTokenPair returns built in token pair for test 174 func GetBuiltInTokenPair() *types.TokenPair { 175 176 common.InitConfig() 177 addr, err := sdk.AccAddressFromBech32(types.TestTokenPairOwner) 178 if err != nil { 179 panic(err) 180 } 181 return &types.TokenPair{ 182 ID: 1, 183 BaseAssetSymbol: common.TestToken, 184 QuoteAssetSymbol: sdk.DefaultBondDenom, 185 InitPrice: sdk.MustNewDecFromStr("10.0"), 186 MaxPriceDigit: 8, 187 MaxQuantityDigit: 8, 188 MinQuantity: sdk.MustNewDecFromStr("0"), 189 Owner: addr, 190 Deposits: sdk.NewDecCoin(sdk.DefaultBondDenom, sdk.NewInt(0)), 191 } 192 }