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, ¶ms) 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 //}