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  }