github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/order/keeper/fee_test.go (about) 1 //go:build ignore 2 3 package keeper 4 5 import ( 6 "testing" 7 8 "github.com/fibonacci-chain/fbc/x/common" 9 10 sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types" 11 "github.com/stretchr/testify/require" 12 13 "github.com/fibonacci-chain/fbc/libs/tendermint/libs/cli/flags" 14 "github.com/fibonacci-chain/fbc/x/order/types" 15 ) 16 17 type MockGetFeeKeeper struct { 18 coins sdk.Coins 19 priceMap map[string]sdk.Dec 20 } 21 22 func NewMockGetFeeKeeper() MockGetFeeKeeper { 23 return MockGetFeeKeeper{sdk.NewCoins(), make(map[string]sdk.Dec)} 24 } 25 26 func (k MockGetFeeKeeper) GetCoins(ctx sdk.Context, addr sdk.AccAddress) sdk.Coins { 27 return k.coins 28 } 29 30 func (k MockGetFeeKeeper) GetLastPrice(ctx sdk.Context, product string) sdk.Dec { 31 if price, ok := k.priceMap[product]; ok { 32 return price 33 } 34 return sdk.ZeroDec() 35 } 36 37 func TestGetOrderNewFee(t *testing.T) { 38 order := mockOrder("ID0000001970-1", types.TestTokenPair, types.BuyOrder, "10.0", "1.0") 39 orderExpireBlocks := sdk.NewDec(order.OrderExpireBlocks) 40 exceptFee := sdk.SysCoins{sdk.NewDecCoinFromDec(common.NativeToken, order.FeePerBlock.Amount.Mul(orderExpireBlocks))} 41 require.EqualValues(t, exceptFee, GetOrderNewFee(order)) 42 } 43 44 func TestGetOrderCostFee(t *testing.T) { 45 var orderHeight int64 = 1970 46 var currentHeight int64 = 2970 47 diffHeight := currentHeight - orderHeight 48 orderID := types.FormatOrderID(orderHeight, 2) 49 order := mockOrder(orderID, types.TestTokenPair, types.BuyOrder, "10.0", "1.0") 50 51 testInput := CreateTestInput(t) 52 log, err := flags.ParseLogLevel("*:error", testInput.Ctx.Logger(), "error") 53 require.Nil(t, err) 54 ctx := testInput.Ctx 55 ctx.SetLogger(log) 56 ctx.SetBlockHeight(currentHeight) 57 exceptFee := sdk.SysCoins{sdk.NewDecCoinFromDec(common.NativeToken, order.FeePerBlock.Amount.Mul(sdk.NewDec(diffHeight)))} 58 require.EqualValues(t, exceptFee, GetOrderCostFee(order, ctx)) 59 60 ctx.SetBlockHeight(currentHeight + types.DefaultOrderExpireBlocks) 61 fee := GetOrderCostFee(order, ctx) 62 exceptFee = sdk.SysCoins{sdk.NewDecCoinFromDec(common.NativeToken, sdk.MustNewDecFromStr("0.2592"))} 63 require.EqualValues(t, exceptFee, fee) 64 65 currentHeight = 0 66 ctx.SetBlockHeight(currentHeight) 67 exceptFee = GetZeroFee() 68 require.EqualValues(t, exceptFee, GetOrderCostFee(order, ctx)) 69 70 } 71 72 func TestOrderDealFee(t *testing.T) { 73 ctx := sdk.Context{} 74 keeper := NewMockGetFeeKeeper() 75 feeParams := types.DefaultTestParams() 76 77 // 1. xxb_okb 78 order := &types.Order{ 79 Product: types.TestTokenPair, 80 Side: types.BuyOrder, 81 Price: sdk.MustNewDecFromStr("11.0"), 82 Quantity: sdk.MustNewDecFromStr("100.0"), 83 } 84 keeper.priceMap[types.TestTokenPair] = sdk.MustNewDecFromStr("10.0") 85 feeOther := GetDealFee(order, sdk.MustNewDecFromStr("10.0"), ctx, keeper, &feeParams) 86 // 10 * 0.001 87 expectFee := sdk.SysCoins{sdk.NewDecCoinFromDec(common.TestToken, sdk.MustNewDecFromStr("0.01"))} 88 require.EqualValues(t, expectFee, feeOther) 89 90 // xxb_yyb BUY 91 order = &types.Order{ 92 Product: "xxb_yyb", 93 Side: types.BuyOrder, 94 Price: sdk.MustNewDecFromStr("11.0"), 95 Quantity: sdk.MustNewDecFromStr("100.0"), 96 } 97 keeper.priceMap["xxb_yyb"] = sdk.MustNewDecFromStr("20.0") 98 keeper.priceMap["yyb_"+common.NativeToken] = sdk.MustNewDecFromStr("0.6") 99 100 feeOther = GetDealFee(order, sdk.MustNewDecFromStr("100.0"), ctx, keeper, &feeParams) 101 // 100 * 0.001 102 expectFee = sdk.SysCoins{sdk.NewDecCoinFromDec(common.TestToken, sdk.MustNewDecFromStr("0.1"))} 103 require.EqualValues(t, expectFee, feeOther) 104 105 // xxb_yyb SELL 106 order = &types.Order{ 107 Product: "xxb_yyb", 108 Side: types.SellOrder, 109 Price: sdk.MustNewDecFromStr("11.0"), 110 Quantity: sdk.MustNewDecFromStr("100.0"), 111 } 112 feeOther = GetDealFee(order, sdk.MustNewDecFromStr("100.0"), ctx, keeper, &feeParams) 113 // 100 * 20 * 0.001 114 expectFee = sdk.SysCoins{sdk.NewDecCoinFromDec("yyb", sdk.MustNewDecFromStr("2.0"))} 115 require.EqualValues(t, expectFee, feeOther) 116 117 // xxb_yyb SELL 118 order = &types.Order{ 119 Product: "xxb_yyb", 120 Side: types.BuyOrder, 121 Price: sdk.MustNewDecFromStr("1.0"), 122 Quantity: sdk.MustNewDecFromStr("0.00000001"), 123 } 124 feeOther = GetDealFee(order, sdk.MustNewDecFromStr("0.000000000000000001"), ctx, keeper, &feeParams) 125 expectFee = sdk.SysCoins{sdk.NewDecCoinFromDec("xxb", sdk.MustNewDecFromStr(minFee))} 126 require.EqualValues(t, expectFee, feeOther) 127 }