github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/order/handler_test.go (about)

     1  //go:build ignore
     2  
     3  package order
     4  
     5  //
     6  ////func TestEventNewOrders(t *testing.T) {
     7  ////	common.InitConfig()
     8  ////	mapp, addrKeysSlice := getMockApp(t, 1)
     9  ////	keeper := mapp.orderKeeper
    10  ////	mapp.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: 2}})
    11  ////	ctx := mapp.BaseApp.NewContext(false, abci.Header{}).WithBlockHeight(10)
    12  ////	feeParams := types.DefaultTestParams()
    13  ////	mapp.orderKeeper.SetParams(ctx, &feeParams)
    14  ////
    15  ////	tokenPair := dex.GetBuiltInTokenPair()
    16  ////
    17  ////	err := mapp.dexKeeper.SaveTokenPair(ctx, tokenPair)
    18  ////	require.Nil(t, err)
    19  ////
    20  ////	handler := NewOrderHandler(keeper)
    21  ////	//test multi order fee is 80%
    22  ////	orderItems := []types.OrderItem{
    23  ////		types.NewOrderItem(types.TestTokenPair, types.SellOrder, "10.0", "1.0"),
    24  ////		types.NewOrderItem(types.TestTokenPair+"A", types.BuyOrder, "10.0", "1.0"),
    25  ////		types.NewOrderItem(types.TestTokenPair, types.BuyOrder, "10.0", "1.0"),
    26  ////	}
    27  ////
    28  ////	mapp.orderKeeper.SetParams(ctx, &feeParams)
    29  ////	msg := types.NewMsgNewOrders(addrKeysSlice[0].Address, orderItems)
    30  ////	result, err := handler(ctx, msg)
    31  ////
    32  ////	require.EqualValues(t, 3, len(result.Events[4].Attributes))
    33  ////
    34  ////}
    35  //
    36  ////func TestFeesNewOrders(t *testing.T) {
    37  ////	mapp, addrKeysSlice := getMockApp(t, 1)
    38  ////	keeper := mapp.orderKeeper
    39  ////	mapp.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: 2}})
    40  ////	ctx := mapp.BaseApp.NewContext(false, abci.Header{}).WithBlockHeight(10)
    41  ////	feeParams := types.DefaultTestParams()
    42  ////	mapp.orderKeeper.SetParams(ctx, &feeParams)
    43  ////
    44  ////	tokenPair := dex.GetBuiltInTokenPair()
    45  ////
    46  ////	err := mapp.dexKeeper.SaveTokenPair(ctx, tokenPair)
    47  ////	require.Nil(t, err)
    48  ////
    49  ////	handler := NewOrderHandler(keeper)
    50  ////	//test multi order fee is 80%
    51  ////	orderItems := []types.OrderItem{
    52  ////		types.NewOrderItem(types.TestTokenPair+"a", types.BuyOrder, "10.0", "1.0"),
    53  ////		types.NewOrderItem(types.TestTokenPair, types.BuyOrder, "10.0", "1.0"),
    54  ////	}
    55  ////	acc := mapp.AccountKeeper.GetAccount(ctx, addrKeysSlice[0].Address)
    56  ////	expectCoins := sdk.SysCoins{
    57  ////		sdk.NewDecCoinFromDec(common.NativeToken, sdk.MustNewDecFromStr("100")), // 100
    58  ////		sdk.NewDecCoinFromDec(common.TestToken, sdk.MustNewDecFromStr("100")),
    59  ////	}
    60  ////	require.EqualValues(t, expectCoins.String(), acc.GetCoins().String())
    61  ////
    62  ////	mapp.orderKeeper.SetParams(ctx, &feeParams)
    63  ////	msg := types.NewMsgNewOrders(addrKeysSlice[0].Address, orderItems)
    64  ////	_, err = handler(ctx, msg)
    65  ////
    66  ////	// check account balance
    67  ////	// multi fee 7958528000
    68  ////	acc = mapp.AccountKeeper.GetAccount(ctx, addrKeysSlice[0].Address)
    69  ////	expectCoins = sdk.SysCoins{
    70  ////		sdk.NewDecCoinFromDec(common.NativeToken, sdk.MustNewDecFromStr("89.79264")), // 100 - 10  - 0.20736
    71  ////		sdk.NewDecCoinFromDec(common.TestToken, sdk.MustNewDecFromStr("100")),
    72  ////	}
    73  ////	require.EqualValues(t, expectCoins.String(), acc.GetCoins().String())
    74  ////	require.Nil(t, err)
    75  ////
    76  ////}
    77  //
    78  ////func TestHandleMsgNewOrderInvalid(t *testing.T) {
    79  ////	common.InitConfig()
    80  ////	mapp, addrKeysSlice := getMockApp(t, 1)
    81  ////	mapp.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: 2}})
    82  ////	ctx := mapp.BaseApp.NewContext(false, abci.Header{}).WithBlockHeight(10)
    83  ////	feeParams := types.DefaultTestParams()
    84  ////	mapp.orderKeeper.SetParams(ctx, &feeParams)
    85  ////
    86  ////	tokenPair := dex.GetBuiltInTokenPair()
    87  ////
    88  ////	err := mapp.dexKeeper.SaveTokenPair(ctx, tokenPair)
    89  ////	require.Nil(t, err)
    90  ////
    91  ////	handler := NewOrderHandler(mapp.orderKeeper)
    92  ////
    93  ////	// not-exist product
    94  ////	msg := types.NewMsgNewOrder(addrKeysSlice[0].Address, "nobb_"+common.NativeToken, types.BuyOrder, "10.0", "1.0")
    95  ////	res, err := handler(ctx, msg)
    96  ////	require.Nil(t, res)
    97  ////	require.EqualValues(t, "all order items failed to execute", err.Error())
    98  ////
    99  ////	// invalid price precision
   100  ////	//msg = types.NewMsgNewOrder(addrKeysSlice[0].Address, types.TestTokenPair, types.BuyOrder, "10.01", "1.0")
   101  ////	//result = handler(ctx, msg)
   102  ////	//require.EqualValues(t, sdk.CodeUnknownRequest, result.Code)
   103  ////
   104  ////	// invalid quantity precision
   105  ////	//msg = types.NewMsgNewOrder(addrKeysSlice[0].Address, types.TestTokenPair, types.BuyOrder, "10.0", "1.001")
   106  ////	//result = handler(ctx, msg)
   107  ////	//require.EqualValues(t, sdk.CodeUnknownRequest, result.Code)
   108  ////
   109  ////	// invalid quantity amount
   110  ////	//msg = types.NewMsgNewOrder(addrKeysSlice[0].Address, types.TestTokenPair, types.BuyOrder, "10.0", "0.09")
   111  ////	//result = handler(ctx, msg)
   112  ////	//require.EqualValues(t, sdk.CodeUnknownRequest, result.Code)
   113  ////
   114  ////	// insufficient coins
   115  ////	msg = types.NewMsgNewOrder(addrKeysSlice[0].Address, types.TestTokenPair, types.BuyOrder, "10.0", "10.1")
   116  ////	_, err = handler(ctx, msg)
   117  ////	require.EqualValues(t, "all order items failed to execute", err.Error())
   118  ////
   119  ////	// check depth book
   120  ////	depthBook := mapp.orderKeeper.GetDepthBookCopy(types.TestTokenPair)
   121  ////	require.Equal(t, 0, len(depthBook.Items))
   122  ////}
   123  //
   124  //func TestValidateMsgNewOrder(t *testing.T) {
   125  //	common.InitConfig()
   126  //	mapp, addrKeysSlice := getMockApp(t, 1)
   127  //	mapp.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: 2}})
   128  //	ctx := mapp.BaseApp.NewContext(false, abci.Header{}).WithBlockHeight(10)
   129  //	keeper := mapp.orderKeeper
   130  //	feeParams := types.DefaultTestParams()
   131  //	keeper.SetParams(ctx, &feeParams)
   132  //
   133  //	tokenPair := dex.GetBuiltInTokenPair()
   134  //
   135  //	err := mapp.dexKeeper.SaveTokenPair(ctx, tokenPair)
   136  //	require.Nil(t, err)
   137  //
   138  //	// normal
   139  //	msg := types.NewMsgNewOrder(addrKeysSlice[0].Address, types.TestTokenPair, types.BuyOrder, "10.0", "1.0")
   140  //	_, err = ValidateMsgNewOrders(ctx, keeper, msg)
   141  //	require.Nil(t, err)
   142  //
   143  //	// not-exist product
   144  //	msg = types.NewMsgNewOrder(addrKeysSlice[0].Address, "nobb_"+common.NativeToken, types.BuyOrder, "10.0", "1.0")
   145  //	_, err = ValidateMsgNewOrders(ctx, keeper, msg)
   146  //	require.EqualValues(t, fmt.Sprintf("token pair nobb_%s doesn't exist", sdk.DefaultBondDenom), err.Error())
   147  //
   148  //	// invalid price precision
   149  //	//msg = types.NewMsgNewOrder(addrKeysSlice[0].Address, types.TestTokenPair, types.BuyOrder, "10.01", "1.0")
   150  //	//result = ValidateMsgNewOrder(ctx, keeper, msg)
   151  //	//require.EqualValues(t, sdk.CodeUnknownRequest, result.Code)
   152  //
   153  //	// invalid quantity precision
   154  //	//msg = types.NewMsgNewOrder(addrKeysSlice[0].Address, types.TestTokenPair, types.BuyOrder, "10.0", "1.001")
   155  //	//result = ValidateMsgNewOrder(ctx, keeper, msg)
   156  //	//require.EqualValues(t, sdk.CodeUnknownRequest, result.Code)
   157  //
   158  //	// invalid quantity amount
   159  //	//msg = types.NewMsgNewOrder(addrKeysSlice[0].Address, types.TestTokenPair, types.BuyOrder, "10.0", "0.09")
   160  //	//result = ValidateMsgNewOrder(ctx, keeper, msg)
   161  //	//require.EqualValues(t, sdk.CodeUnknownRequest, result.Code)
   162  //
   163  //	// insufficient coins
   164  //	msg = types.NewMsgNewOrder(addrKeysSlice[0].Address, types.TestTokenPair, types.BuyOrder, "10.0", "10.1")
   165  //	_, err = ValidateMsgNewOrders(ctx, keeper, msg)
   166  //	require.NotNil(t, err)
   167  //
   168  //	// busy product
   169  //	keeper.SetProductLock(ctx, types.TestTokenPair, &types.ProductLock{})
   170  //	msg = types.NewMsgNewOrder(addrKeysSlice[0].Address, types.TestTokenPair, types.BuyOrder, "10.0", "1.0")
   171  //	_, err = ValidateMsgNewOrders(ctx, keeper, msg)
   172  //	require.NotNil(t, err)
   173  //
   174  //	// price * quantity over accuracy
   175  //	keeper.SetProductLock(ctx, types.TestTokenPair, &types.ProductLock{})
   176  //	msg = types.NewMsgNewOrder(addrKeysSlice[0].Address, types.TestTokenPair, types.BuyOrder, "10.000001", "1.0001")
   177  //	_, err = ValidateMsgNewOrders(ctx, keeper, msg)
   178  //	require.NotNil(t, err)
   179  //}
   180  //
   181  //// test order cancel without enough okb as fee
   182  //func TestHandleMsgCancelOrder2(t *testing.T) {
   183  //	mapp, addrKeysSlice := getMockApp(t, 1)
   184  //	keeper := mapp.orderKeeper
   185  //	mapp.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: 2}})
   186  //
   187  //	var startHeight int64 = 10
   188  //	ctx := mapp.BaseApp.NewContext(false, abci.Header{}).WithBlockHeight(startHeight)
   189  //	feeParams := types.DefaultTestParams()
   190  //	//feeParams.CancelNative = sdk.MustNewDecFromStr("0.1")
   191  //	mapp.orderKeeper.SetParams(ctx, &feeParams)
   192  //	tokenPair := dex.GetBuiltInTokenPair()
   193  //	mapp.supplyKeeper.SetSupply(ctx, supply.NewSupply(mapp.TotalCoinsSupply))
   194  //	err := mapp.dexKeeper.SaveTokenPair(ctx, tokenPair)
   195  //	require.Nil(t, err)
   196  //
   197  //	// subtract all okb of addr0
   198  //	err = keeper.LockCoins(ctx, addrKeysSlice[0].Address, sdk.SysCoins{{Denom: common.NativeToken,
   199  //		Amount: sdk.MustNewDecFromStr("99.7408")}}, tokentypes.LockCoinsTypeQuantity)
   200  //	require.NoError(t, err)
   201  //
   202  //	// mock orders
   203  //	orders := []*types.Order{
   204  //		types.MockOrder(types.FormatOrderID(startHeight, 1), types.TestTokenPair, types.SellOrder, "10.0", "2.0"),
   205  //	}
   206  //	orders[0].Sender = addrKeysSlice[0].Address
   207  //	err = keeper.PlaceOrder(ctx, orders[0])
   208  //	require.NoError(t, err)
   209  //
   210  //	ctx = mapp.BaseApp.NewContext(false, abci.Header{}).WithBlockHeight(startHeight + 1)
   211  //
   212  //	// check account balance
   213  //	acc0 := mapp.AccountKeeper.GetAccount(ctx, addrKeysSlice[0].Address)
   214  //	expectCoins0 := sdk.SysCoins{
   215  //		sdk.NewDecCoinFromDec(common.TestToken, sdk.MustNewDecFromStr("98")),
   216  //	}
   217  //	require.EqualValues(t, expectCoins0.String(), acc0.GetCoins().String())
   218  //
   219  //	// Start Testing...
   220  //	handler := NewOrderHandler(keeper)
   221  //	keeper.ResetCache(ctx)
   222  //
   223  //	// Test fully cancel
   224  //	msg := types.NewMsgCancelOrder(addrKeysSlice[0].Address, orders[0].OrderID)
   225  //	result, err := handler(ctx, msg)
   226  //	// check result
   227  //	require.Nil(t, err)
   228  //	orderRes := parseOrderResult(result)
   229  //	require.NotNil(t, orderRes)
   230  //	require.EqualValues(t, "0.000001000000000000"+common.NativeToken, orderRes[0].Message)
   231  //	// check account balance
   232  //	acc0 = mapp.AccountKeeper.GetAccount(ctx, addrKeysSlice[0].Address)
   233  //	expectCoins0 = sdk.SysCoins{
   234  //		sdk.NewDecCoinFromDec(common.NativeToken, sdk.MustNewDecFromStr("0.259199000000000000")), // no change
   235  //		sdk.NewDecCoinFromDec(common.TestToken, sdk.MustNewDecFromStr("100")),                    // 100 - 0.000001
   236  //	}
   237  //	require.EqualValues(t, expectCoins0.String(), acc0.GetCoins().String())
   238  //	// check fee pool
   239  //	feeCollector := mapp.supplyKeeper.GetModuleAccount(ctx, auth.FeeCollectorName)
   240  //	collectedFees := feeCollector.GetCoins()
   241  //	require.EqualValues(t, "0.000001000000000000"+common.NativeToken, collectedFees.String())
   242  //}
   243  //
   244  //func TestHandleMsgCancelOrderInvalid(t *testing.T) {
   245  //	common.InitConfig()
   246  //	mapp, addrKeysSlice := getMockApp(t, 2)
   247  //	keeper := mapp.orderKeeper
   248  //	mapp.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: 2}})
   249  //	var startHeight int64 = 10
   250  //	ctx := mapp.BaseApp.NewContext(false, abci.Header{}).WithBlockHeight(startHeight)
   251  //	feeParams := types.DefaultTestParams()
   252  //	mapp.orderKeeper.SetParams(ctx, &feeParams)
   253  //	tokenPair := dex.GetBuiltInTokenPair()
   254  //	err := mapp.dexKeeper.SaveTokenPair(ctx, tokenPair)
   255  //	require.Nil(t, err)
   256  //	mapp.supplyKeeper.SetSupply(ctx, supply.NewSupply(mapp.TotalCoinsSupply))
   257  //
   258  //	// mock orders
   259  //	order := types.MockOrder(types.FormatOrderID(startHeight, 1), types.TestTokenPair, types.SellOrder, "10.0", "1.0")
   260  //	order.Sender = addrKeysSlice[0].Address
   261  //	err = keeper.PlaceOrder(ctx, order)
   262  //	require.Nil(t, err)
   263  //
   264  //	EndBlocker(ctx, keeper) // update depthBook, orderIdsMap
   265  //
   266  //	handler := NewOrderHandler(keeper)
   267  //
   268  //	// invalid owner
   269  //	msg := types.NewMsgCancelOrder(addrKeysSlice[1].Address, order.OrderID)
   270  //	result, err := handler(ctx, msg)
   271  //	orderRes := parseOrderResult(result)
   272  //	require.Nil(t, orderRes)
   273  //
   274  //	// invalid orderID
   275  //	msg = types.NewMsgCancelOrder(addrKeysSlice[1].Address, "InvalidID-0001")
   276  //	_, err = handler(ctx, msg)
   277  //	require.NotNil(t, err)
   278  //
   279  //	// busy product
   280  //	keeper.SetProductLock(ctx, order.Product, &types.ProductLock{})
   281  //	msg = types.NewMsgCancelOrder(addrKeysSlice[0].Address, order.OrderID)
   282  //	result, err = handler(ctx, msg)
   283  //	orderRes = parseOrderResult(result)
   284  //	require.Nil(t, orderRes)
   285  //	keeper.UnlockProduct(ctx, order.Product)
   286  //
   287  //	// normal
   288  //	msg = types.NewMsgCancelOrder(addrKeysSlice[0].Address, order.OrderID)
   289  //	result, err = handler(ctx, msg)
   290  //
   291  //	// check result
   292  //	require.Nil(t, err)
   293  //	orderRes = parseOrderResult(result)
   294  //	require.NotNil(t, orderRes)
   295  //	require.EqualValues(t, "0.000000000000000000"+common.NativeToken, orderRes[0].Message)
   296  //	// check order status
   297  //	order = keeper.GetOrder(ctx, order.OrderID)
   298  //	require.EqualValues(t, types.OrderStatusCancelled, order.Status)
   299  //	// check account balance
   300  //	acc0 := mapp.AccountKeeper.GetAccount(ctx, addrKeysSlice[0].Address)
   301  //	expectCoins0 := sdk.SysCoins{
   302  //		sdk.NewDecCoinFromDec(common.NativeToken, sdk.MustNewDecFromStr("100")),
   303  //		sdk.NewDecCoinFromDec(common.TestToken, sdk.MustNewDecFromStr("100")),
   304  //	}
   305  //	require.EqualValues(t, expectCoins0.String(), acc0.GetCoins().String())
   306  //
   307  //	// invalid order status
   308  //	msg = types.NewMsgCancelOrder(addrKeysSlice[0].Address, order.OrderID)
   309  //	_, err = handler(ctx, msg)
   310  //	require.NotNil(t, err)
   311  //}
   312  //
   313  //func TestHandleInvalidMsg(t *testing.T) {
   314  //	mapp, _ := getMockApp(t, 0)
   315  //	keeper := mapp.orderKeeper
   316  //	mapp.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: 2}})
   317  //	ctx := mapp.BaseApp.NewContext(false, abci.Header{}).WithBlockHeight(10)
   318  //	params := types.DefaultTestParams()
   319  //	keeper.SetParams(ctx, &params)
   320  //
   321  //	handler := NewOrderHandler(keeper)
   322  //	var msg token.MsgSend
   323  //	require.Panics(t, func() {
   324  //		handler(ctx, msg)
   325  //	})
   326  //}
   327  //
   328  //const orderKey = "orders"
   329  //
   330  //func getOrderID(result *sdk.Result) string {
   331  //	var res = ""
   332  //	var evs []types.OrderResult
   333  //	for i := 0; i < len(result.Events); i++ {
   334  //		event := result.Events[i]
   335  //		for j := 0; j < len(event.Attributes); j++ {
   336  //			attribute := event.Attributes[j]
   337  //			if string(attribute.Key) == orderKey {
   338  //				res = string(attribute.Value)
   339  //				if err := json.Unmarshal([]byte(res), &evs); err == nil {
   340  //					for k := 0; k < len(evs); k++ {
   341  //						res = evs[k].OrderID
   342  //					}
   343  //				}
   344  //
   345  //			}
   346  //
   347  //		}
   348  //	}
   349  //	return res
   350  //}
   351  //
   352  //func getOrderIDList(result *sdk.Result) []string {
   353  //	var res []string
   354  //	for i := 0; i < len(result.Events); i++ {
   355  //		event := result.Events[i]
   356  //		var evs []types.OrderResult
   357  //		for j := 0; j < len(event.Attributes); j++ {
   358  //			attribute := event.Attributes[j]
   359  //			if string(attribute.Key) == orderKey {
   360  //				value := string(attribute.Value)
   361  //				if err := json.Unmarshal([]byte(value), &evs); err == nil {
   362  //					for k := 0; k < len(evs); k++ {
   363  //						res = append(res, evs[k].OrderID)
   364  //					}
   365  //				}
   366  //			}
   367  //
   368  //		}
   369  //	}
   370  //	return res
   371  //}
   372  //
   373  //func parseOrderResult(result *sdk.Result) []types.OrderResult {
   374  //	var evs []types.OrderResult
   375  //	if result == nil {
   376  //		return nil
   377  //	}
   378  //	for i := 0; i < len(result.Events); i++ {
   379  //		event := result.Events[i]
   380  //
   381  //		for j := 0; j < len(event.Attributes); j++ {
   382  //			attribute := event.Attributes[j]
   383  //			if string(attribute.Key) == orderKey {
   384  //				value := string(attribute.Value)
   385  //
   386  //				if err := json.Unmarshal([]byte(value), &evs); err != nil {
   387  //					return nil
   388  //					//ignore
   389  //				}
   390  //			}
   391  //		}
   392  //	}
   393  //	return evs
   394  //}
   395  //
   396  //func TestHandleMsgMultiNewOrder(t *testing.T) {
   397  //	mapp, addrKeysSlice := getMockApp(t, 1)
   398  //	keeper := mapp.orderKeeper
   399  //	mapp.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: 2}})
   400  //	ctx := mapp.BaseApp.NewContext(false, abci.Header{}).WithBlockHeight(10)
   401  //	feeParams := types.DefaultTestParams()
   402  //	mapp.orderKeeper.SetParams(ctx, &feeParams)
   403  //
   404  //	tokenPair := dex.GetBuiltInTokenPair()
   405  //
   406  //	err := mapp.dexKeeper.SaveTokenPair(ctx, tokenPair)
   407  //	require.Nil(t, err)
   408  //
   409  //	handler := NewOrderHandler(keeper)
   410  //
   411  //	// Test buy order
   412  //	orderItems := []types.OrderItem{
   413  //		types.NewOrderItem(types.TestTokenPair, types.BuyOrder, "10.0", "1.0"),
   414  //		types.NewOrderItem(types.TestTokenPair, types.BuyOrder, "10.0", "1.0"),
   415  //	}
   416  //	msg := types.NewMsgNewOrders(addrKeysSlice[0].Address, orderItems)
   417  //	result, err := handler(ctx, msg)
   418  //	require.Equal(t, "", result.Log)
   419  //	// Test order when locked
   420  //	keeper.SetProductLock(ctx, types.TestTokenPair, &types.ProductLock{})
   421  //	result1, err := handler(ctx, msg)
   422  //	res1 := parseOrderResult(result1)
   423  //	require.Nil(t, res1)
   424  //	require.NotNil(t, err)
   425  //	keeper.UnlockProduct(ctx, types.TestTokenPair)
   426  //
   427  //	//check result & order
   428  //	orderID := getOrderID(result)
   429  //	require.EqualValues(t, types.FormatOrderID(10, 2), orderID)
   430  //	order := keeper.GetOrder(ctx, orderID)
   431  //	require.NotNil(t, order)
   432  //	require.EqualValues(t, 2, keeper.GetBlockOrderNum(ctx, 10))
   433  //	// check account balance
   434  //	acc := mapp.AccountKeeper.GetAccount(ctx, addrKeysSlice[0].Address)
   435  //	expectCoins := sdk.SysCoins{
   436  //		sdk.NewDecCoinFromDec(common.NativeToken, sdk.MustNewDecFromStr("79.58528")), // 100 - 10 - 10 - 0.2592 * 2 * 0.8
   437  //		sdk.NewDecCoinFromDec(common.TestToken, sdk.MustNewDecFromStr("100")),
   438  //	}
   439  //	require.EqualValues(t, expectCoins.String(), acc.GetCoins().String())
   440  //	// check depth book
   441  //	depthBook := keeper.GetDepthBookCopy(order.Product)
   442  //	require.Equal(t, 1, len(depthBook.Items))
   443  //	require.Equal(t, sdk.MustNewDecFromStr("10.0"), depthBook.Items[0].Price)
   444  //	require.Equal(t, sdk.MustNewDecFromStr("2.0"), depthBook.Items[0].BuyQuantity)
   445  //	require.Equal(t, 1, len(keeper.GetDiskCache().GetUpdatedDepthbookKeys()))
   446  //	// check order ids map
   447  //	orderIDsMap := keeper.GetDiskCache().GetOrderIDsMapCopy()
   448  //	require.Equal(t, 1, len(orderIDsMap.Data))
   449  //	require.Equal(t, types.FormatOrderID(10, 1),
   450  //		orderIDsMap.Data[types.FormatOrderIDsKey(order.Product, order.Price, order.Side)][0])
   451  //	require.Equal(t, 1, len(keeper.GetDiskCache().GetUpdatedOrderIDKeys()))
   452  //
   453  //	// Test sell order
   454  //	orderItems = []types.OrderItem{
   455  //		types.NewOrderItem(types.TestTokenPair, types.SellOrder, "10.0", "1.0"),
   456  //	}
   457  //	msg = types.NewMsgNewOrders(addrKeysSlice[0].Address, orderItems)
   458  //	result, err = handler(ctx, msg)
   459  //
   460  //	// check result & order
   461  //	orderID = getOrderID(result)
   462  //	require.EqualValues(t, types.FormatOrderID(10, 3), orderID)
   463  //	order = keeper.GetOrder(ctx, orderID)
   464  //	require.NotNil(t, order)
   465  //	require.EqualValues(t, 3, keeper.GetBlockOrderNum(ctx, 10))
   466  //	// check account balance
   467  //	acc = mapp.AccountKeeper.GetAccount(ctx, addrKeysSlice[0].Address)
   468  //	expectCoins = sdk.SysCoins{
   469  //		sdk.NewDecCoinFromDec(common.NativeToken, sdk.MustNewDecFromStr("79.32608")), // 100 - 10 - 10 - 0.2592 * 2 * 0.8 - 0.2592
   470  //		sdk.NewDecCoinFromDec(common.TestToken, sdk.MustNewDecFromStr("99")),
   471  //	}
   472  //	require.EqualValues(t, expectCoins.String(), acc.GetCoins().String())
   473  //
   474  //	// test new order with fee
   475  //	feeParams.FeePerBlock = sdk.NewDecCoinFromDec(types.DefaultFeeDenomPerBlock, sdk.MustNewDecFromStr("0.000002"))
   476  //	mapp.orderKeeper.SetParams(ctx, &feeParams)
   477  //	orderItems = []types.OrderItem{
   478  //		types.NewOrderItem(types.TestTokenPair, types.SellOrder, "10.0", "1.0"),
   479  //	}
   480  //	msg = types.NewMsgNewOrders(addrKeysSlice[0].Address, orderItems)
   481  //	result, err = handler(ctx, msg)
   482  //
   483  //	orderID = getOrderID(result)
   484  //	require.EqualValues(t, types.FormatOrderID(10, 4), orderID)
   485  //	require.Nil(t, err)
   486  //	// check account balance
   487  //	acc = mapp.AccountKeeper.GetAccount(ctx, addrKeysSlice[0].Address)
   488  //	expectCoins = sdk.SysCoins{
   489  //		sdk.NewDecCoinFromDec(common.NativeToken, sdk.MustNewDecFromStr("78.80768")), // 79.32608 - 0.2592 * 2
   490  //		sdk.NewDecCoinFromDec(common.TestToken, sdk.MustNewDecFromStr("98")),         // 99 - 1
   491  //	}
   492  //	require.EqualValues(t, expectCoins.String(), acc.GetCoins().String())
   493  //
   494  //	feeParams = types.DefaultTestParams()
   495  //	mapp.orderKeeper.SetParams(ctx, &feeParams)
   496  //
   497  //	require.EqualValues(t, 4, keeper.GetBlockOrderNum(ctx, 10))
   498  //	// check account balance
   499  //	acc = mapp.AccountKeeper.GetAccount(ctx, addrKeysSlice[0].Address)
   500  //	expectCoins = sdk.SysCoins{
   501  //		sdk.NewDecCoinFromDec(common.NativeToken, sdk.MustNewDecFromStr("78.80768")), // 78.80768
   502  //		sdk.NewDecCoinFromDec(common.TestToken, sdk.MustNewDecFromStr("98")),
   503  //	}
   504  //	require.EqualValues(t, expectCoins.String(), acc.GetCoins().String())
   505  //}
   506  //
   507  //func TestHandleMsgMultiCancelOrder(t *testing.T) {
   508  //	common.InitConfig()
   509  //	mapp, addrKeysSlice := getMockApp(t, 1)
   510  //	keeper := mapp.orderKeeper
   511  //	mapp.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: 2}})
   512  //	ctx := mapp.BaseApp.NewContext(false, abci.Header{}).WithBlockHeight(10)
   513  //	feeParams := types.DefaultTestParams()
   514  //	mapp.orderKeeper.SetParams(ctx, &feeParams)
   515  //
   516  //	tokenPair := dex.GetBuiltInTokenPair()
   517  //
   518  //	err := mapp.dexKeeper.SaveTokenPair(ctx, tokenPair)
   519  //	require.Nil(t, err)
   520  //	mapp.supplyKeeper.SetSupply(ctx, supply.NewSupply(mapp.TotalCoinsSupply))
   521  //
   522  //	handler := NewOrderHandler(keeper)
   523  //
   524  //	// Test buy order
   525  //	orderItems := []types.OrderItem{
   526  //		types.NewOrderItem(types.TestTokenPair, types.BuyOrder, "10.0", "1.0"),
   527  //		types.NewOrderItem(types.TestTokenPair, types.BuyOrder, "10.0", "1.0"),
   528  //		types.NewOrderItem(types.TestTokenPair, types.BuyOrder, "10.0", "1.0"),
   529  //	}
   530  //	msg := types.NewMsgNewOrders(addrKeysSlice[0].Address, orderItems)
   531  //	result, err := handler(ctx, msg)
   532  //	require.Equal(t, "", result.Log)
   533  //	// Test order when locked
   534  //	keeper.SetProductLock(ctx, types.TestTokenPair, &types.ProductLock{})
   535  //
   536  //	_, err = handler(ctx, msg)
   537  //	require.NotNil(t, err)
   538  //	keeper.UnlockProduct(ctx, types.TestTokenPair)
   539  //
   540  //	// check result & order
   541  //
   542  //	orderID := getOrderID(result)
   543  //	require.EqualValues(t, types.FormatOrderID(10, 3), orderID)
   544  //	order := keeper.GetOrder(ctx, orderID)
   545  //	require.NotNil(t, order)
   546  //	require.EqualValues(t, 3, keeper.GetBlockOrderNum(ctx, 10))
   547  //	// check account balance
   548  //	acc := mapp.AccountKeeper.GetAccount(ctx, addrKeysSlice[0].Address)
   549  //	expectCoins := sdk.SysCoins{
   550  //		sdk.NewDecCoinFromDec(common.NativeToken, sdk.MustNewDecFromStr("69.37792")), // 100 - 10*6 - 0.2592 * 6 * 0.8
   551  //		sdk.NewDecCoinFromDec(common.TestToken, sdk.MustNewDecFromStr("100")),
   552  //	}
   553  //	require.EqualValues(t, expectCoins.String(), acc.GetCoins().String())
   554  //	// check depth book
   555  //	depthBook := keeper.GetDepthBookCopy(order.Product)
   556  //	require.Equal(t, 1, len(depthBook.Items))
   557  //	require.Equal(t, sdk.MustNewDecFromStr("10.0"), depthBook.Items[0].Price)
   558  //	require.Equal(t, sdk.MustNewDecFromStr("3.0"), depthBook.Items[0].BuyQuantity)
   559  //	require.Equal(t, 1, len(keeper.GetDiskCache().GetUpdatedDepthbookKeys()))
   560  //	// check order ids map
   561  //	orderIDsMap := keeper.GetDiskCache().GetOrderIDsMapCopy()
   562  //	require.Equal(t, 1, len(orderIDsMap.Data))
   563  //	require.Equal(t, types.FormatOrderID(10, 1),
   564  //		orderIDsMap.Data[types.FormatOrderIDsKey(order.Product, order.Price, order.Side)][0])
   565  //	require.Equal(t, 1, len(keeper.GetDiskCache().GetUpdatedOrderIDKeys()))
   566  //
   567  //	// Test cancel order
   568  //	orderIDItems := getOrderIDList(result)
   569  //	multiCancelMsg := types.NewMsgCancelOrders(addrKeysSlice[0].Address, orderIDItems[:len(orderItems)-1])
   570  //	result, err = handler(ctx, multiCancelMsg)
   571  //
   572  //	require.Nil(t, err)
   573  //	// check result & order
   574  //
   575  //	require.EqualValues(t, 3, keeper.GetBlockOrderNum(ctx, 10))
   576  //	// check account balance
   577  //	acc = mapp.AccountKeeper.GetAccount(ctx, addrKeysSlice[0].Address)
   578  //	expectCoins = sdk.SysCoins{
   579  //		sdk.NewDecCoinFromDec(common.NativeToken, sdk.MustNewDecFromStr("89.79264")), // 100 - 10 - 10 - 0.2592 * 2 * 0.8 - 0.2592
   580  //		sdk.NewDecCoinFromDec(common.TestToken, sdk.MustNewDecFromStr("100")),
   581  //	}
   582  //	require.EqualValues(t, expectCoins.String(), acc.GetCoins().String())
   583  //
   584  //	// Test cancel order
   585  //	orderIDItems = orderIDItems[2:]
   586  //	orderIDItems = append(orderIDItems, "")
   587  //
   588  //	multiCancelMsg = types.NewMsgCancelOrders(addrKeysSlice[0].Address, orderIDItems)
   589  //	result, err = handler(ctx, multiCancelMsg)
   590  //
   591  //	require.Nil(t, err)
   592  //	require.Equal(t, "", result.Log)
   593  //	// check result & order
   594  //
   595  //	require.EqualValues(t, 3, keeper.GetBlockOrderNum(ctx, 10))
   596  //	// check account balance
   597  //	acc = mapp.AccountKeeper.GetAccount(ctx, addrKeysSlice[0].Address)
   598  //	expectCoins = sdk.SysCoins{
   599  //		sdk.NewDecCoinFromDec(common.NativeToken, sdk.MustNewDecFromStr("100")), // 100 - 10 - 10 - 0.2592 * 2 * 0.8 - 0.2592
   600  //		sdk.NewDecCoinFromDec(common.TestToken, sdk.MustNewDecFromStr("100")),
   601  //	}
   602  //	require.EqualValues(t, expectCoins.String(), acc.GetCoins().String())
   603  //
   604  //}
   605  //
   606  //func TestValidateMsgMultiNewOrder(t *testing.T) {
   607  //	mapp, addrKeysSlice := getMockApp(t, 1)
   608  //	mapp.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: 2}})
   609  //	ctx := mapp.BaseApp.NewContext(false, abci.Header{}).WithBlockHeight(10)
   610  //	keeper := mapp.orderKeeper
   611  //	feeParams := types.DefaultTestParams()
   612  //	keeper.SetParams(ctx, &feeParams)
   613  //
   614  //	tokenPair := dex.GetBuiltInTokenPair()
   615  //
   616  //	err := mapp.dexKeeper.SaveTokenPair(ctx, tokenPair)
   617  //	require.Nil(t, err)
   618  //
   619  //	orderItems := []types.OrderItem{
   620  //		types.NewOrderItem(types.TestTokenPair, types.BuyOrder, "0.1", "1.0"),
   621  //		types.NewOrderItem(types.TestTokenPair, types.BuyOrder, "0.1", "1.0"),
   622  //	}
   623  //
   624  //	// normal
   625  //	orderItem := types.NewOrderItem(types.TestTokenPair, types.BuyOrder, "10.0", "1.0")
   626  //	msg := types.NewMsgNewOrders(addrKeysSlice[0].Address, append(orderItems, orderItem))
   627  //	_, err = ValidateMsgNewOrders(ctx, keeper, msg)
   628  //	require.Nil(t, err)
   629  //
   630  //	// not-exist product
   631  //	orderItem = types.NewOrderItem("nobb_"+common.NativeToken, types.BuyOrder, "10.0", "1.0")
   632  //	msg = types.NewMsgNewOrders(addrKeysSlice[0].Address, append(orderItems, orderItem))
   633  //	_, err = ValidateMsgNewOrders(ctx, keeper, msg)
   634  //	require.NotNil(t, err)
   635  //
   636  //	// invalid price precision
   637  //	//orderItem = types.NewMultiNewOrderItem(types.TestTokenPair, types.BuyOrder, "10.01", "1.0")
   638  //	//msg = types.NewMsgMultiNewOrder(addrKeysSlice[0].Address, append(orderItems, orderItem))
   639  //	//result = ValidateMsgMultiNewOrder(ctx, keeper, msg)
   640  //	//require.EqualValues(t, sdk.CodeUnknownRequest, result.Code)
   641  //
   642  //	// invalid quantity precision
   643  //	//orderItem = types.NewMultiNewOrderItem(types.TestTokenPair, types.BuyOrder, "10.0", "1.001")
   644  //	//msg = types.NewMsgMultiNewOrder(addrKeysSlice[0].Address, append(orderItems, orderItem))
   645  //	//result = ValidateMsgMultiNewOrder(ctx, keeper, msg)
   646  //	//require.EqualValues(t, sdk.CodeUnknownRequest, result.Code)
   647  //
   648  //	// invalid quantity amount
   649  //	//orderItem = types.NewMultiNewOrderItem(types.TestTokenPair, types.BuyOrder, "10.0", "0.09")
   650  //	//msg = types.NewMsgMultiNewOrder(addrKeysSlice[0].Address, append(orderItems, orderItem))
   651  //	//result = ValidateMsgMultiNewOrder(ctx, keeper, msg)
   652  //	//require.EqualValues(t, sdk.CodeUnknownRequest, result.Code)
   653  //}
   654  //
   655  //func TestValidateMsgMultiCancelOrder(t *testing.T) {
   656  //	mapp, addrKeysSlice := getMockApp(t, 1)
   657  //	mapp.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: 2}})
   658  //	ctx := mapp.BaseApp.NewContext(false, abci.Header{}).WithBlockHeight(10)
   659  //	keeper := mapp.orderKeeper
   660  //	feeParams := types.DefaultTestParams()
   661  //	keeper.SetParams(ctx, &feeParams)
   662  //
   663  //	tokenPair := dex.GetBuiltInTokenPair()
   664  //
   665  //	err := mapp.dexKeeper.SaveTokenPair(ctx, tokenPair)
   666  //	require.Nil(t, err)
   667  //
   668  //	orderIDItems := []string{""}
   669  //	multiCancelMsg := types.NewMsgCancelOrders(addrKeysSlice[0].Address, orderIDItems)
   670  //	err = ValidateMsgCancelOrders(ctx, keeper, multiCancelMsg)
   671  //	require.NotNil(t, err)
   672  //
   673  //	err = mapp.dexKeeper.SaveTokenPair(ctx, tokenPair)
   674  //	require.Nil(t, err)
   675  //	handler := NewOrderHandler(keeper)
   676  //
   677  //	// new order
   678  //	msg := types.NewMsgNewOrder(addrKeysSlice[0].Address, types.TestTokenPair, types.BuyOrder, "10.0", "1.0")
   679  //	result, err := handler(ctx, msg)
   680  //
   681  //	// validate true
   682  //	orderID := getOrderID(result)
   683  //	orderIDItems = []string{orderID}
   684  //	multiCancelMsg = types.NewMsgCancelOrders(addrKeysSlice[0].Address, orderIDItems)
   685  //	err = ValidateMsgCancelOrders(ctx, keeper, multiCancelMsg)
   686  //	require.Nil(t, err)
   687  //
   688  //	// validate empty orderIDItems
   689  //	orderIDItems = []string{}
   690  //	multiCancelMsg = types.NewMsgCancelOrders(addrKeysSlice[0].Address, orderIDItems)
   691  //	err = ValidateMsgCancelOrders(ctx, keeper, multiCancelMsg)
   692  //	require.Nil(t, err)
   693  //
   694  //}
   695  //
   696  //func TestHandleMsgCancelOrder(t *testing.T) {
   697  //	mapp, addrKeysSlice := getMockApp(t, 3)
   698  //	keeper := mapp.orderKeeper
   699  //	mapp.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: 2}})
   700  //
   701  //	var startHeight int64 = 10
   702  //	ctx := mapp.BaseApp.NewContext(false, abci.Header{}).WithBlockHeight(startHeight)
   703  //	mapp.supplyKeeper.SetSupply(ctx, supply.NewSupply(mapp.TotalCoinsSupply))
   704  //
   705  //	feeParams := types.DefaultTestParams()
   706  //	mapp.orderKeeper.SetParams(ctx, &feeParams)
   707  //	tokenPair := dex.GetBuiltInTokenPair()
   708  //	err := mapp.dexKeeper.SaveTokenPair(ctx, tokenPair)
   709  //	require.Nil(t, err)
   710  //	mapp.dexKeeper.SetOperator(ctx, dex.DEXOperator{
   711  //		Address:            tokenPair.Owner,
   712  //		HandlingFeeAddress: tokenPair.Owner,
   713  //	})
   714  //
   715  //	tokenPairDex := dex.GetBuiltInTokenPair()
   716  //	err = mapp.dexKeeper.SaveTokenPair(ctx, tokenPairDex)
   717  //	require.Nil(t, err)
   718  //
   719  //	// mock orders
   720  //	orders := []*types.Order{
   721  //		types.MockOrder(types.FormatOrderID(startHeight, 1), types.TestTokenPair, types.BuyOrder, "9.8", "1.0"),
   722  //		types.MockOrder(types.FormatOrderID(startHeight, 2), types.TestTokenPair, types.SellOrder, "10.0", "1.0"),
   723  //		types.MockOrder(types.FormatOrderID(startHeight, 3), types.TestTokenPair, types.BuyOrder, "10.0", "0.5"),
   724  //	}
   725  //	orders[0].Sender = addrKeysSlice[0].Address
   726  //	orders[1].Sender = addrKeysSlice[1].Address
   727  //	orders[2].Sender = addrKeysSlice[2].Address
   728  //	for i := 0; i < 3; i++ {
   729  //		err := keeper.PlaceOrder(ctx, orders[i])
   730  //		require.NoError(t, err)
   731  //	}
   732  //
   733  //	EndBlocker(ctx, keeper) // update blockMatchResult, updatedOrderIds, depthBook, orderIdsMap
   734  //
   735  //	ctx = mapp.BaseApp.NewContext(false, abci.Header{}).WithBlockHeight(startHeight + 1)
   736  //
   737  //	// check account balance
   738  //	acc0 := mapp.AccountKeeper.GetAccount(ctx, addrKeysSlice[0].Address)
   739  //	acc1 := mapp.AccountKeeper.GetAccount(ctx, addrKeysSlice[1].Address)
   740  //	expectCoins0 := sdk.SysCoins{
   741  //		sdk.NewDecCoinFromDec(common.NativeToken, sdk.MustNewDecFromStr("89.9408")), // 100 - 9.8 - 0.2592
   742  //		sdk.NewDecCoinFromDec(common.TestToken, sdk.MustNewDecFromStr("100")),
   743  //	}
   744  //	expectCoins1 := sdk.SysCoins{
   745  //		// 100 + 10 * 0.5 * (1 - 0.001) - 0.2592
   746  //		sdk.NewDecCoinFromDec(common.NativeToken, sdk.MustNewDecFromStr("104.7358")),
   747  //		sdk.NewDecCoinFromDec(common.TestToken, sdk.MustNewDecFromStr("99")),
   748  //	}
   749  //	require.EqualValues(t, expectCoins0.String(), acc0.GetCoins().String())
   750  //	require.EqualValues(t, expectCoins1.String(), acc1.GetCoins().String())
   751  //
   752  //	// check depth book
   753  //	depthBook := keeper.GetDepthBookCopy(types.TestTokenPair)
   754  //	require.EqualValues(t, 2, len(depthBook.Items))
   755  //	// check order ids
   756  //	key := types.FormatOrderIDsKey(types.TestTokenPair, sdk.MustNewDecFromStr("9.8"), types.BuyOrder)
   757  //	orderIDs := keeper.GetProductPriceOrderIDs(key)
   758  //	require.EqualValues(t, orders[0].OrderID, orderIDs[0])
   759  //	key = types.FormatOrderIDsKey(types.TestTokenPair, sdk.MustNewDecFromStr("10.0"), types.SellOrder)
   760  //	orderIDs = keeper.GetProductPriceOrderIDs(key)
   761  //	require.EqualValues(t, orders[1].OrderID, orderIDs[0])
   762  //
   763  //	// Start Testing...
   764  //	keeper.ResetCache(ctx)
   765  //	handler := NewOrderHandler(keeper)
   766  //
   767  //	// Test fully cancel
   768  //	msg := types.NewMsgCancelOrder(addrKeysSlice[0].Address, orders[0].OrderID)
   769  //	result, err := handler(ctx, msg)
   770  //	for i := 0; i < len(result.Events); i++ {
   771  //		fmt.Println(i)
   772  //		for j := 0; j < len(result.Events[i].Attributes); j++ {
   773  //			arr := result.Events[i].Attributes[j]
   774  //			fmt.Println(string(arr.Key), string(arr.Value))
   775  //		}
   776  //	}
   777  //
   778  //	orderRes := parseOrderResult(result)
   779  //	// check result
   780  //	require.Nil(t, err)
   781  //	require.EqualValues(t, "0.000001000000000000"+common.NativeToken, orderRes[0].Message)
   782  //	// check order status
   783  //	orders[0] = keeper.GetOrder(ctx, orders[0].OrderID)
   784  //	require.EqualValues(t, types.OrderStatusCancelled, orders[0].Status)
   785  //	// check account balance
   786  //	acc0 = mapp.AccountKeeper.GetAccount(ctx, addrKeysSlice[0].Address)
   787  //	expectCoins0 = sdk.SysCoins{
   788  //		// 100 - 0.002
   789  //		sdk.NewDecCoinFromDec(common.NativeToken, sdk.MustNewDecFromStr("99.999999")), // 100 - 9.8 + 9.8 - 0.000001
   790  //		sdk.NewDecCoinFromDec(common.TestToken, sdk.MustNewDecFromStr("100")),
   791  //	}
   792  //	require.EqualValues(t, expectCoins0.String(), acc0.GetCoins().String())
   793  //	// check fee pool
   794  //	feeCollector := mapp.supplyKeeper.GetModuleAccount(ctx, auth.FeeCollectorName)
   795  //	collectedFees := feeCollector.GetCoins()
   796  //	require.EqualValues(t, "0.000001000000000000"+common.NativeToken, collectedFees.String()) // 0.002+0.002
   797  //	// check depth book
   798  //	depthBook = keeper.GetDepthBookCopy(types.TestTokenPair)
   799  //	require.EqualValues(t, 1, len(depthBook.Items))
   800  //	require.Equal(t, 1, len(keeper.GetDiskCache().GetUpdatedDepthbookKeys()))
   801  //	// check order ids
   802  //	key = types.FormatOrderIDsKey(types.TestTokenPair, sdk.MustNewDecFromStr("9.8"), types.BuyOrder)
   803  //	orderIDs = keeper.GetProductPriceOrderIDs(key)
   804  //	require.EqualValues(t, 0, len(orderIDs))
   805  //	require.Equal(t, 1, len(keeper.GetDiskCache().GetUpdatedOrderIDKeys()))
   806  //	// check updated order ids
   807  //	updatedOrderIDs := keeper.GetUpdatedOrderIDs()
   808  //	require.EqualValues(t, orders[0].OrderID, updatedOrderIDs[0])
   809  //	// check closed order id
   810  //	closedOrderIDs := keeper.GetDiskCache().GetClosedOrderIDs()
   811  //	require.Equal(t, 1, len(closedOrderIDs))
   812  //	require.Equal(t, orders[0].OrderID, closedOrderIDs[0])
   813  //
   814  //	// Test partially cancel
   815  //	msg = types.NewMsgCancelOrder(addrKeysSlice[1].Address, orders[1].OrderID)
   816  //	result, err = handler(ctx, msg)
   817  //	// check result
   818  //	require.Nil(t, err)
   819  //	// check order status
   820  //	orders[1] = keeper.GetOrder(ctx, orders[1].OrderID)
   821  //	require.EqualValues(t, types.OrderStatusPartialFilledCancelled, orders[1].Status)
   822  //	// check account balance
   823  //	acc1 = mapp.AccountKeeper.GetAccount(ctx, addrKeysSlice[1].Address)
   824  //	expectCoins1 = sdk.SysCoins{
   825  //		sdk.NewDecCoinFromDec(common.NativeToken, sdk.MustNewDecFromStr("104.994999")), // 99.999999 + 5 * (1 - 0.001)
   826  //		sdk.NewDecCoinFromDec(common.TestToken, sdk.MustNewDecFromStr("99.5")),
   827  //	}
   828  //	require.EqualValues(t, expectCoins1.String(), acc1.GetCoins().String())
   829  //	// check fee pool, partially cancel, no fees
   830  //	feeCollector = mapp.supplyKeeper.GetModuleAccount(ctx, auth.FeeCollectorName)
   831  //	collectedFees = feeCollector.GetCoins()
   832  //	require.EqualValues(t, "0.000002000000000000"+common.NativeToken, collectedFees.String())
   833  //	// check order ids
   834  //	key = types.FormatOrderIDsKey(types.TestTokenPair, sdk.MustNewDecFromStr("10"), types.SellOrder)
   835  //	orderIDs = keeper.GetProductPriceOrderIDs(key)
   836  //	require.EqualValues(t, 0, len(orderIDs))
   837  //}
   838  //
   839  //func TestFeesTable(t *testing.T) {
   840  //	//test xxb_fibo
   841  //	orders0 := []*types.Order{
   842  //		types.MockOrder(types.FormatOrderID(10, 1), types.TestTokenPair, types.BuyOrder, "10", "1.0"),
   843  //		types.MockOrder(types.FormatOrderID(10, 2), types.TestTokenPair, types.BuyOrder, "10", "2.0"),
   844  //		types.MockOrder(types.FormatOrderID(10, 1), types.TestTokenPair, types.SellOrder, "10.0", "1"),
   845  //		types.MockOrder(types.FormatOrderID(10, 2), types.TestTokenPair, types.SellOrder, "10.0", "2"),
   846  //	}
   847  //	expectCoins0 := sdk.SysCoins{
   848  //		sdk.NewDecCoinFromDec(common.NativeToken, sdk.MustNewDecFromStr("169.98")), // 200 - 10 -20 - 0.2592*10000/259200*2
   849  //		sdk.NewDecCoinFromDec(common.TestToken, sdk.MustNewDecFromStr("202.997")),  // 200 + (3 - 3*0.001)
   850  //	}
   851  //
   852  //	//test btc-b19_fibo
   853  //	orders1 := []*types.Order{
   854  //		types.MockOrder(types.FormatOrderID(10, 1), "btc-b19_"+common.NativeToken, types.BuyOrder, "10", "1"),
   855  //		types.MockOrder(types.FormatOrderID(10, 2), "btc-b19_"+common.NativeToken, types.SellOrder, "10", "1"),
   856  //	}
   857  //	expectCoins1 := sdk.SysCoins{
   858  //		sdk.NewDecCoinFromDec("btc-b19", sdk.MustNewDecFromStr("100.999")),         //100 + (1 - 1*0.0001)
   859  //		sdk.NewDecCoinFromDec(common.NativeToken, sdk.MustNewDecFromStr("189.99")), // 200 - 10 - 0.2592*10000/259200
   860  //		sdk.NewDecCoinFromDec(common.TestToken, sdk.MustNewDecFromStr("100")),
   861  //	}
   862  //
   863  //	//test btc-b19_xxb
   864  //	orders2 := []*types.Order{
   865  //		types.MockOrder(types.FormatOrderID(10, 1), "btc-b19_xxb", types.BuyOrder, "11", "1"),
   866  //		types.MockOrder(types.FormatOrderID(10, 2), "btc-b19_xxb", types.SellOrder, "11", "1"),
   867  //	}
   868  //	expectCoins2 := sdk.SysCoins{
   869  //		sdk.NewDecCoinFromDec("btc-b19", sdk.MustNewDecFromStr("100.999")),        //100 + (1 - 1*0.0001)
   870  //		sdk.NewDecCoinFromDec(common.NativeToken, sdk.MustNewDecFromStr("99.99")), // 100 - 0.2592*10000/259200
   871  //		sdk.NewDecCoinFromDec(common.TestToken, sdk.MustNewDecFromStr("189")),     //200 - 11
   872  //	}
   873  //
   874  //	//test btc-b19_xxb match order on 800 block
   875  //	expectCoins3 := sdk.SysCoins{
   876  //		sdk.NewDecCoinFromDec("btc-b19", sdk.MustNewDecFromStr("100.999")),          //100 + (1 - 1*0.0001)
   877  //		sdk.NewDecCoinFromDec(common.NativeToken, sdk.MustNewDecFromStr("99.9992")), // 100 - 0.2592*800/259200
   878  //		sdk.NewDecCoinFromDec(common.TestToken, sdk.MustNewDecFromStr("189")),       //200 - 11
   879  //	}
   880  //
   881  //	//test btc-a8a_xxb 2 match orders
   882  //	orders4 := []*types.Order{
   883  //		types.MockOrder(types.FormatOrderID(10, 1), "btc-a8a_xxb", types.BuyOrder, "11", "1"),
   884  //		types.MockOrder(types.FormatOrderID(10, 2), "btc-a8a_xxb", types.BuyOrder, "11", "2"),
   885  //		types.MockOrder(types.FormatOrderID(10010, 1), "btc-a8a_xxb", types.SellOrder, "11", "1"),
   886  //		types.MockOrder(types.FormatOrderID(10010, 2), "btc-a8a_xxb", types.SellOrder, "11", "2"),
   887  //	}
   888  //	expectCoins4 := sdk.SysCoins{
   889  //		sdk.NewDecCoinFromDec("btc-a8a", sdk.MustNewDecFromStr("102.997")),        //100 +(2 - 2 * 0.001) + (1 - 1*0.0001)
   890  //		sdk.NewDecCoinFromDec(common.NativeToken, sdk.MustNewDecFromStr("99.98")), // 100 - 0.2592*10000/259200*2
   891  //		sdk.NewDecCoinFromDec(common.TestToken, sdk.MustNewDecFromStr("167")),     //200 - 11 - 11*2
   892  //	}
   893  //
   894  //	tests := []struct {
   895  //		baseasset   string
   896  //		quoteasset  string
   897  //		orders      []*types.Order
   898  //		balance     sdk.SysCoins
   899  //		blockheight int64
   900  //	}{
   901  //		{common.TestToken, common.NativeToken, orders0, expectCoins0, 10000},
   902  //		{"btc-b19", common.NativeToken, orders1, expectCoins1, 10000},
   903  //		{"btc-b19", "xxb", orders2, expectCoins2, 10000},
   904  //		{"btc-b19", "xxb", orders2, expectCoins3, 800},
   905  //		{"btc-a8a", "xxb", orders4, expectCoins4, 10000},
   906  //	}
   907  //
   908  //	for i, tc := range tests {
   909  //		expectCoins := handleOrders(t, tc.baseasset, tc.quoteasset, tc.orders, tc.blockheight)
   910  //		require.EqualValues(t, tc.balance.String(), expectCoins.String(), "test: %v", i)
   911  //	}
   912  //}
   913  //
   914  //func handleOrders(t *testing.T, baseasset string, quoteasset string, orders []*types.Order, blockheight int64) sdk.SysCoins {
   915  //	TestTokenPairOwner := "ex1rf9wr069pt64e58f2w3mjs9w72g8vemzw26658"
   916  //	addr, err := sdk.AccAddressFromBech32(TestTokenPairOwner)
   917  //	require.Nil(t, err)
   918  //	mapp, addrKeysSlice := getMockApp(t, len(orders))
   919  //	keeper := mapp.orderKeeper
   920  //	mapp.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: 2}})
   921  //
   922  //	var startHeight int64 = 10
   923  //	ctx := mapp.BaseApp.NewContext(false, abci.Header{}).WithBlockHeight(startHeight)
   924  //	mapp.supplyKeeper.SetSupply(ctx, supply.NewSupply(mapp.TotalCoinsSupply))
   925  //
   926  //	feeParams := types.DefaultTestParams()
   927  //	mapp.orderKeeper.SetParams(ctx, &feeParams)
   928  //
   929  //	//init balance account0 & account1
   930  //	decCoins, err := sdk.ParseDecCoins(fmt.Sprintf("%d%s,%d%s", 100, baseasset, 100, quoteasset))
   931  //	require.Nil(t, err)
   932  //	_, err = mapp.bankKeeper.AddCoins(ctx, addrKeysSlice[0].Address, decCoins)
   933  //	require.Nil(t, err)
   934  //	_, err = mapp.bankKeeper.AddCoins(ctx, addrKeysSlice[1].Address, decCoins)
   935  //	require.Nil(t, err)
   936  //	//init token pair
   937  //	tokenPair := dex.TokenPair{
   938  //		BaseAssetSymbol:  baseasset,
   939  //		QuoteAssetSymbol: quoteasset,
   940  //		InitPrice:        sdk.MustNewDecFromStr("10.0"),
   941  //		MaxPriceDigit:    8,
   942  //		MaxQuantityDigit: 8,
   943  //		MinQuantity:      sdk.MustNewDecFromStr("0"),
   944  //		Owner:            addr,
   945  //		Deposits:         sdk.NewDecCoin(sdk.DefaultBondDenom, sdk.NewInt(0)),
   946  //	}
   947  //
   948  //	err = mapp.dexKeeper.SaveTokenPair(ctx, &tokenPair)
   949  //	require.Nil(t, err)
   950  //	mapp.dexKeeper.SetOperator(ctx, dex.DEXOperator{
   951  //		Address:            tokenPair.Owner,
   952  //		HandlingFeeAddress: tokenPair.Owner,
   953  //	})
   954  //
   955  //	acc := mapp.AccountKeeper.GetAccount(ctx, addrKeysSlice[0].Address)
   956  //	require.NotNil(t, acc)
   957  //	//place buy order
   958  //	for i := 0; i < len(orders)/2; i++ {
   959  //		orders[i].Sender = addrKeysSlice[0].Address
   960  //		err := keeper.PlaceOrder(ctx, orders[i])
   961  //		require.NoError(t, err)
   962  //	}
   963  //	EndBlocker(ctx, keeper)
   964  //	//update blockheight
   965  //	ctx = mapp.BaseApp.NewContext(false, abci.Header{}).WithBlockHeight(startHeight + blockheight)
   966  //	//place sell order
   967  //	for i := len(orders) / 2; i < len(orders); i++ {
   968  //		orders[i].Sender = addrKeysSlice[1].Address
   969  //		err := keeper.PlaceOrder(ctx, orders[i])
   970  //		require.NoError(t, err)
   971  //	}
   972  //	EndBlocker(ctx, keeper)
   973  //
   974  //	// check account balance
   975  //	acc0 := mapp.AccountKeeper.GetAccount(ctx, addrKeysSlice[0].Address)
   976  //	acc1 := mapp.AccountKeeper.GetAccount(ctx, addrKeysSlice[1].Address)
   977  //	require.NotNil(t, acc1)
   978  //	return acc0.GetCoins()
   979  //}
   980  //
   981  //func TestConCurrentKeeperWrite(t *testing.T) {
   982  //	keyList := []string{"abc", "def", "dfkj", "ksdf", "aksdff", "ijks", "ksdfds", "nvos", "alind", "lkls", "ienfi"}
   983  //	order := types.MockOrder(types.FormatOrderID(10, 1), "btc-a8a_xxb", types.BuyOrder, "11", "1")
   984  //	for i := 0; i < 10; i++ {
   985  //		getHash(t, keyList, order)
   986  //		randomExchange(keyList)
   987  //	}
   988  //}
   989  //
   990  //func randomExchange(inputArray []string) {
   991  //	maxIndex := len(inputArray)
   992  //	for i := 0; i < 5; i++ {
   993  //		i1 := rand.Intn(maxIndex)
   994  //		i2 := rand.Intn(maxIndex)
   995  //		t := inputArray[i1]
   996  //		inputArray[i1] = inputArray[i2]
   997  //		inputArray[i2] = t
   998  //	}
   999  //
  1000  //}
  1001  //func getHash(t *testing.T, orderIdList []string, order *Order) {
  1002  //	app, _ := getMockApp(t, 0)
  1003  //	keeper := app.orderKeeper
  1004  //	app.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: 2}})
  1005  //	ctx := app.BaseApp.NewContext(false, abci.Header{})
  1006  //	app.supplyKeeper.SetSupply(ctx, supply.NewSupply(app.TotalCoinsSupply))
  1007  //	for _, key := range orderIdList {
  1008  //		keeper.SetOrder(ctx, key, order)
  1009  //	}
  1010  //	res := app.Commit(abci.RequestCommit{})
  1011  //	fmt.Println(orderIdList)
  1012  //	fmt.Println(res)
  1013  //}