github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/token/keeper_test.go (about) 1 package token 2 3 import ( 4 "fmt" 5 "testing" 6 7 sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types" 8 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/mock" 9 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/supply" 10 abci "github.com/fibonacci-chain/fbc/libs/tendermint/abci/types" 11 "github.com/stretchr/testify/require" 12 13 "github.com/fibonacci-chain/fbc/x/common" 14 "github.com/fibonacci-chain/fbc/x/token/types" 15 ) 16 17 func TestKeeper_GetFeeDetailList(t *testing.T) { 18 _, keeper, _ := getMockDexApp(t, 0) 19 keeper.GetFeeDetailList() 20 } 21 22 func TestKeeper_UpdateTokenSupply(t *testing.T) { 23 mapp, keeper, _ := getMockDexApp(t, 0) 24 25 mapp.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: 2}}) 26 ctx := mapp.BaseApp.NewContext(false, abci.Header{}) 27 28 token := types.Token{ 29 Description: "new token", 30 Symbol: common.NativeToken, 31 OriginalSymbol: common.NativeToken, 32 WholeName: "ok coin", 33 OriginalTotalSupply: sdk.NewDec(10000), 34 Owner: []byte("gyl"), 35 Mintable: true, 36 } 37 keeper.NewToken(ctx, token) 38 39 info := keeper.GetTokenInfo(ctx, "xxbToken") 40 require.EqualValues(t, "", info.Symbol) 41 42 info = keeper.GetTokenInfo(ctx, common.NativeToken) 43 require.EqualValues(t, common.NativeToken, info.Symbol) 44 tokens := keeper.GetTokensInfo(ctx) 45 require.Equal(t, info, tokens[0]) 46 require.Equal(t, len(tokens), len(keeper.GetCurrenciesInfo(ctx))) 47 48 name, flag := addTokenSuffix(ctx, keeper, common.NativeToken) 49 require.Equal(t, true, flag) 50 require.NotEqual(t, common.NativeToken, name) 51 52 name, flag = addTokenSuffix(ctx, keeper, common.NativeToken+"@#$") 53 require.Equal(t, false, flag) 54 require.Equal(t, "", name) 55 56 token = types.Token{ 57 Description: "new token", 58 Symbol: common.NativeToken, 59 OriginalSymbol: common.NativeToken, 60 WholeName: "ok coin", 61 OriginalTotalSupply: sdk.NewDec(10000), 62 Owner: []byte("gyl"), 63 Mintable: true, 64 } 65 store := ctx.KVStore(keeper.tokenStoreKey) 66 store.Set(types.TokenNumberKey, []byte("0")) 67 keeper.NewToken(ctx, token) 68 } 69 70 func TestKeeper_AddFeeDetail(t *testing.T) { 71 mapp, keeper, addrs := getMockDexApp(t, 2) 72 73 mapp.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: 2}}) 74 ctx := mapp.BaseApp.NewContext(false, abci.Header{}) 75 keeper.enableBackend = true 76 77 fee, err := sdk.ParseDecCoins(fmt.Sprintf("100%s", common.NativeToken)) 78 require.Nil(t, err) 79 80 feeType := "test fee type" 81 keeper.AddFeeDetail(ctx, addrs[0].String(), fee, feeType, "") 82 keeper.AddFeeDetail(ctx, addrs[1].String(), fee, feeType, "") 83 84 feeList := keeper.GetFeeDetailList() 85 require.Equal(t, 2, len(feeList)) 86 87 require.Equal(t, fee.String(), feeList[0].Fee) 88 require.Equal(t, addrs[0].String(), feeList[0].Address) 89 require.Equal(t, addrs[1].String(), feeList[1].Address) 90 } 91 92 func TestKeeper_LockCoins(t *testing.T) { 93 mapp, keeper, _ := getMockDexApp(t, 0) 94 95 mapp.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: 2}}) 96 ctx := mapp.BaseApp.NewContext(false, abci.Header{}) 97 98 genAccs, testAccounts := CreateGenAccounts(1, 99 sdk.SysCoins{ 100 sdk.NewDecCoinFromDec(common.NativeToken, sdk.NewDec(1000000000)), 101 }) 102 mock.SetGenesis(mapp.App, types.DecAccountArrToBaseAccountArr(genAccs)) 103 104 expectedLockedCoins := sdk.SysCoins{ 105 sdk.NewDecCoinFromDec(common.NativeToken, sdk.NewDec(100)), 106 } 107 108 err := keeper.LockCoins(ctx, testAccounts[0].baseAccount.Address, expectedLockedCoins, types.LockCoinsTypeQuantity) 109 require.NoError(t, err) 110 lockedCoins := keeper.GetLockedCoins(ctx, testAccounts[0].baseAccount.Address) 111 require.EqualValues(t, expectedLockedCoins, lockedCoins) 112 err = keeper.LockCoins(ctx, testAccounts[0].baseAccount.Address, expectedLockedCoins, types.LockCoinsTypeQuantity) 113 require.NoError(t, err) 114 BigCoins := sdk.SysCoins{ 115 sdk.NewDecCoinFromDec(common.NativeToken, sdk.NewDec(100000000000)), 116 } 117 err = keeper.LockCoins(ctx, testAccounts[0].baseAccount.Address, BigCoins, types.LockCoinsTypeQuantity) 118 require.Error(t, err) 119 _, lockStoreKeyNum := keeper.getNumKeys(ctx) 120 require.Equal(t, int64(1), lockStoreKeyNum) 121 122 locks := keeper.GetAllLockedCoins(ctx) 123 require.NotNil(t, locks) 124 require.EqualValues(t, common.NativeToken, locks[0].Coins[0].Denom) 125 } 126 127 func TestKeeper_UnlockCoins(t *testing.T) { 128 mapp, keeper, _ := getMockDexApp(t, 0) 129 130 mapp.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: 2}}) 131 ctx := mapp.BaseApp.NewContext(false, abci.Header{}) 132 mapp.supplyKeeper.SetSupply(ctx, supply.NewSupply(mapp.TotalCoinsSupply)) 133 134 genAccs, testAccounts := CreateGenAccounts(1, 135 sdk.SysCoins{ 136 sdk.NewDecCoinFromDec(common.NativeToken, sdk.NewDec(1000000000)), 137 }) 138 mock.SetGenesis(mapp.App, types.DecAccountArrToBaseAccountArr(genAccs)) 139 140 lockCoins := sdk.SysCoins{ 141 sdk.NewDecCoinFromDec(common.NativeToken, sdk.NewDec(100)), 142 } 143 144 err := keeper.LockCoins(ctx, testAccounts[0].baseAccount.Address, lockCoins, types.LockCoinsTypeQuantity) 145 require.NoError(t, err) 146 147 unlockCoins := sdk.SysCoins{ 148 sdk.NewDecCoinFromDec(common.NativeToken, sdk.NewDec(10)), 149 } 150 151 err = keeper.UnlockCoins(ctx, testAccounts[0].baseAccount.Address, unlockCoins, types.LockCoinsTypeQuantity) 152 require.NoError(t, err) 153 err = keeper.UnlockCoins(ctx, []byte(""), unlockCoins, types.LockCoinsTypeQuantity) 154 require.Error(t, err) 155 156 biglockCoins := sdk.SysCoins{ 157 sdk.NewDecCoinFromDec(common.NativeToken, sdk.NewDec(999999999)), 158 } 159 160 err = keeper.LockCoins(ctx, testAccounts[0].baseAccount.Address, biglockCoins, types.LockCoinsTypeQuantity) 161 require.Error(t, err) 162 bigunlockCoins := sdk.SysCoins{ 163 sdk.NewDecCoinFromDec(common.NativeToken, sdk.NewDec(10000000000000)), 164 } 165 err = keeper.UnlockCoins(ctx, testAccounts[0].baseAccount.Address, bigunlockCoins, types.LockCoinsTypeQuantity) 166 require.Error(t, err) 167 168 //expectedLockCoins 169 expectedCoins := sdk.SysCoins{ 170 sdk.NewDecCoinFromDec(common.NativeToken, sdk.NewDec(90)), 171 } 172 require.EqualValues(t, keeper.GetLockedCoins(ctx, testAccounts[0].baseAccount.Address), expectedCoins) 173 174 err = keeper.UnlockCoins(ctx, testAccounts[0].baseAccount.Address, keeper.GetLockedCoins(ctx, testAccounts[0].baseAccount.Address), types.LockCoinsTypeQuantity) 175 require.NoError(t, err) 176 require.EqualValues(t, keeper.GetLockedCoins(ctx, testAccounts[0].baseAccount.Address), sdk.SysCoins(nil)) 177 } 178 179 func TestKeeper_BurnLockedCoins(t *testing.T) { 180 mapp, keeper, _ := getMockDexApp(t, 0) 181 182 mapp.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: 2}}) 183 ctx := mapp.BaseApp.NewContext(false, abci.Header{}) 184 185 initCoins := sdk.SysCoins{sdk.NewDecCoinFromDec(common.NativeToken, sdk.NewDec(1000000000))} 186 genAccs, testAccounts := CreateGenAccounts(1, initCoins) 187 mock.SetGenesis(mapp.App, types.DecAccountArrToBaseAccountArr(genAccs)) 188 mapp.supplyKeeper.SetSupply(ctx, supply.NewSupply(initCoins)) 189 190 lockCoins := sdk.SysCoins{ 191 sdk.NewDecCoinFromDec(common.NativeToken, sdk.NewDec(100)), 192 } 193 err := keeper.LockCoins(ctx, testAccounts[0].baseAccount.Address, lockCoins, types.LockCoinsTypeQuantity) 194 require.NoError(t, err) 195 burnLockCoins := sdk.SysCoins{ 196 sdk.NewDecCoinFromDec(common.NativeToken, sdk.NewDec(5)), 197 } 198 err = keeper.BalanceAccount(ctx, testAccounts[0].baseAccount.Address, burnLockCoins, sdk.ZeroFee().ToCoins()) 199 require.Nil(t, err) 200 201 expectedCoins := sdk.SysCoins{ 202 sdk.NewDecCoinFromDec(common.NativeToken, sdk.NewDec(95)), 203 } 204 require.EqualValues(t, keeper.GetLockedCoins(ctx, testAccounts[0].baseAccount.Address), expectedCoins) 205 err = keeper.BalanceAccount(ctx, testAccounts[0].baseAccount.Address, expectedCoins, sdk.ZeroFee().ToCoins()) 206 require.Nil(t, err) 207 208 expectedCoins = sdk.SysCoins{ 209 sdk.NewDecCoinFromDec(common.NativeToken, sdk.NewDec(10000000000000)), 210 } 211 err = keeper.BalanceAccount(ctx, testAccounts[0].baseAccount.Address, expectedCoins, sdk.ZeroFee().ToCoins()) 212 require.NotNil(t, err) 213 } 214 215 func TestKeeper_ReceiveLockedCoins(t *testing.T) { 216 mapp, keeper, _ := getMockDexApp(t, 0) 217 218 mapp.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: 2}}) 219 ctx := mapp.BaseApp.NewContext(false, abci.Header{}) 220 221 genAccs, testAccounts := CreateGenAccounts(1, 222 sdk.SysCoins{ 223 sdk.NewDecCoinFromDec(common.NativeToken, sdk.NewDec(1000)), 224 }) 225 mock.SetGenesis(mapp.App, types.DecAccountArrToBaseAccountArr(genAccs)) 226 227 lockCoins := sdk.SysCoins{ 228 sdk.NewDecCoinFromDec(common.NativeToken, sdk.NewDec(100)), 229 } 230 err := keeper.LockCoins(ctx, testAccounts[0].baseAccount.Address, lockCoins, types.LockCoinsTypeQuantity) 231 require.Nil(t, err) 232 233 err = keeper.BalanceAccount(ctx, testAccounts[0].baseAccount.Address, sdk.ZeroFee().ToCoins(), lockCoins) 234 require.Nil(t, err) 235 coins := keeper.GetCoins(ctx, testAccounts[0].baseAccount.Address) 236 237 expectedCoins := sdk.SysCoins{ 238 sdk.NewDecCoinFromDec(common.NativeToken, sdk.NewDec(1000)), 239 } 240 require.EqualValues(t, expectedCoins, coins) 241 } 242 243 func TestKeeper_SetCoins(t *testing.T) { 244 mapp, keeper, _ := getMockDexApp(t, 0) 245 246 mapp.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: 2}}) 247 ctx := mapp.BaseApp.NewContext(false, abci.Header{}) 248 249 genAccs, testAccounts := CreateGenAccounts(2, 250 sdk.SysCoins{ 251 sdk.NewDecCoinFromDec(common.NativeToken, sdk.NewDec(1000)), 252 }) 253 mock.SetGenesis(mapp.App, types.DecAccountArrToBaseAccountArr(genAccs)) 254 255 // issue raw token 256 coins := sdk.SysCoins{ 257 sdk.NewDecCoinFromDec(common.NativeToken, sdk.NewDec(100)), 258 } 259 err := keeper.bankKeeper.SetCoins(ctx, testAccounts[0].baseAccount.Address, coins) 260 require.Nil(t, err) 261 262 require.EqualValues(t, keeper.GetCoins(ctx, testAccounts[0].baseAccount.Address), coins) 263 264 info := keeper.GetCoinsInfo(ctx, testAccounts[0].baseAccount.Address) 265 require.NotNil(t, info) 266 267 keeper.SetParams(ctx, types.DefaultParams()) 268 pas := keeper.GetParams(ctx) 269 require.NotNil(t, pas) 270 271 //send coin 272 coins = sdk.SysCoins{ 273 sdk.NewDecCoinFromDec(common.NativeToken, sdk.NewDec(1)), 274 } 275 err1 := keeper.SendCoinsFromAccountToAccount(ctx, testAccounts[0].baseAccount.Address, 276 testAccounts[1].baseAccount.Address, coins) 277 require.Nil(t, err1) 278 279 require.EqualValues(t, "1001.000000000000000000", keeper.GetCoinsInfo(ctx, 280 testAccounts[1].baseAccount.Address)[0].Available) 281 }