ccxt 4.3.40__py2.py3-none-any.whl → 4.3.42__py2.py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. ccxt/__init__.py +1 -1
  2. ccxt/abstract/binance.py +2 -0
  3. ccxt/abstract/binancecoinm.py +2 -0
  4. ccxt/abstract/binanceus.py +2 -0
  5. ccxt/abstract/binanceusdm.py +2 -0
  6. ccxt/abstract/okx.py +7 -0
  7. ccxt/async_support/__init__.py +1 -1
  8. ccxt/async_support/base/exchange.py +1 -1
  9. ccxt/async_support/binance.py +3 -0
  10. ccxt/async_support/bitfinex2.py +1 -1
  11. ccxt/async_support/bithumb.py +9 -1
  12. ccxt/async_support/bitmart.py +191 -100
  13. ccxt/async_support/bitstamp.py +38 -2
  14. ccxt/async_support/blockchaincom.py +11 -7
  15. ccxt/async_support/coinex.py +1 -1
  16. ccxt/async_support/coinlist.py +19 -1
  17. ccxt/async_support/coinmate.py +19 -3
  18. ccxt/async_support/coinone.py +1 -1
  19. ccxt/async_support/coinspot.py +11 -2
  20. ccxt/async_support/independentreserve.py +33 -1
  21. ccxt/async_support/indodax.py +43 -2
  22. ccxt/async_support/kraken.py +30 -3
  23. ccxt/async_support/krakenfutures.py +55 -1
  24. ccxt/async_support/kucoin.py +59 -2
  25. ccxt/async_support/okx.py +7 -0
  26. ccxt/async_support/upbit.py +13 -8
  27. ccxt/async_support/woo.py +6 -2
  28. ccxt/base/exchange.py +1 -1
  29. ccxt/binance.py +3 -0
  30. ccxt/bitfinex2.py +1 -1
  31. ccxt/bithumb.py +9 -1
  32. ccxt/bitmart.py +191 -100
  33. ccxt/bitstamp.py +38 -2
  34. ccxt/blockchaincom.py +11 -7
  35. ccxt/coinex.py +1 -1
  36. ccxt/coinlist.py +19 -1
  37. ccxt/coinmate.py +19 -3
  38. ccxt/coinone.py +1 -1
  39. ccxt/coinspot.py +11 -2
  40. ccxt/independentreserve.py +33 -1
  41. ccxt/indodax.py +43 -2
  42. ccxt/kraken.py +30 -3
  43. ccxt/krakenfutures.py +55 -1
  44. ccxt/kucoin.py +59 -2
  45. ccxt/okx.py +7 -0
  46. ccxt/pro/__init__.py +1 -1
  47. ccxt/pro/alpaca.py +5 -5
  48. ccxt/pro/ascendex.py +3 -3
  49. ccxt/pro/bingx.py +258 -42
  50. ccxt/pro/bitget.py +11 -5
  51. ccxt/pro/bitrue.py +3 -4
  52. ccxt/pro/currencycom.py +6 -5
  53. ccxt/pro/exmo.py +5 -6
  54. ccxt/pro/gemini.py +4 -3
  55. ccxt/pro/independentreserve.py +7 -7
  56. ccxt/pro/lbank.py +4 -4
  57. ccxt/pro/mexc.py +1 -1
  58. ccxt/pro/phemex.py +5 -5
  59. ccxt/pro/probit.py +4 -4
  60. ccxt/pro/upbit.py +299 -4
  61. ccxt/pro/wazirx.py +12 -12
  62. ccxt/pro/woo.py +1 -1
  63. ccxt/upbit.py +13 -8
  64. ccxt/woo.py +6 -2
  65. {ccxt-4.3.40.dist-info → ccxt-4.3.42.dist-info}/METADATA +4 -4
  66. {ccxt-4.3.40.dist-info → ccxt-4.3.42.dist-info}/RECORD +68 -68
  67. {ccxt-4.3.40.dist-info → ccxt-4.3.42.dist-info}/WHEEL +0 -0
  68. {ccxt-4.3.40.dist-info → ccxt-4.3.42.dist-info}/top_level.txt +0 -0
@@ -895,6 +895,13 @@ class coinmate(Exchange, ImplicitAPI):
895
895
  # "trailing": False,
896
896
  # }
897
897
  #
898
+ # cancelOrder
899
+ #
900
+ # {
901
+ # "success": True,
902
+ # "remainingAmount": 0.1
903
+ # }
904
+ #
898
905
  id = self.safe_string(order, 'id')
899
906
  timestamp = self.safe_integer(order, 'timestamp')
900
907
  side = self.safe_string_lower(order, 'type')
@@ -1003,9 +1010,18 @@ class coinmate(Exchange, ImplicitAPI):
1003
1010
  # {"error":false,"errorMessage":null,"data":{"success":true,"remainingAmount":0.01}}
1004
1011
  request: dict = {'orderId': id}
1005
1012
  response = await self.privatePostCancelOrderWithInfo(self.extend(request, params))
1006
- return {
1007
- 'info': response,
1008
- }
1013
+ #
1014
+ # {
1015
+ # "error": False,
1016
+ # "errorMessage": null,
1017
+ # "data": {
1018
+ # "success": True,
1019
+ # "remainingAmount": 0.1
1020
+ # }
1021
+ # }
1022
+ #
1023
+ data = self.safe_dict(response, 'data')
1024
+ return self.parse_order(data)
1009
1025
 
1010
1026
  def nonce(self):
1011
1027
  return self.milliseconds()
@@ -1020,7 +1020,7 @@ class coinone(Exchange, ImplicitAPI):
1020
1020
  # "errorCode": "0"
1021
1021
  # }
1022
1022
  #
1023
- return response
1023
+ return self.safe_order(response)
1024
1024
 
1025
1025
  async def fetch_deposit_addresses(self, codes: Strings = None, params={}):
1026
1026
  """
@@ -505,11 +505,20 @@ class coinspot(Exchange, ImplicitAPI):
505
505
  if side != 'buy' and side != 'sell':
506
506
  raise ArgumentsRequired(self.id + ' cancelOrder() requires a side parameter, "buy" or "sell"')
507
507
  params = self.omit(params, 'side')
508
- method = 'privatePostMy' + self.capitalize(side) + 'Cancel'
509
508
  request: dict = {
510
509
  'id': id,
511
510
  }
512
- return await getattr(self, method)(self.extend(request, params))
511
+ response = None
512
+ if side == 'buy':
513
+ response = await self.privatePostMyBuyCancel(self.extend(request, params))
514
+ else:
515
+ response = await self.privatePostMySellCancel(self.extend(request, params))
516
+ #
517
+ # status - ok, error
518
+ #
519
+ return self.safe_order({
520
+ 'info': response,
521
+ })
513
522
 
514
523
  def sign(self, path, api='public', method='GET', params={}, headers=None, body=None):
515
524
  url = self.urls['api'][api] + '/' + path
@@ -375,6 +375,21 @@ class independentreserve(Exchange, ImplicitAPI):
375
375
  # "FeePercent": 0.005,
376
376
  # }
377
377
  #
378
+ # cancelOrder
379
+ #
380
+ # {
381
+ # "AvgPrice": 455.48,
382
+ # "CreatedTimestampUtc": "2022-08-05T06:42:11.3032208Z",
383
+ # "OrderGuid": "719c495c-a39e-4884-93ac-280b37245037",
384
+ # "Price": 485.76,
385
+ # "PrimaryCurrencyCode": "Xbt",
386
+ # "ReservedAmount": 0.358,
387
+ # "SecondaryCurrencyCode": "Usd",
388
+ # "Status": "Cancelled",
389
+ # "Type": "LimitOffer",
390
+ # "VolumeFilled": 0,
391
+ # "VolumeOrdered": 0.358
392
+ # }
378
393
  symbol = None
379
394
  baseId = self.safe_string(order, 'PrimaryCurrencyCode')
380
395
  quoteId = self.safe_string(order, 'SecondaryCurrencyCode')
@@ -666,6 +681,7 @@ class independentreserve(Exchange, ImplicitAPI):
666
681
  async def cancel_order(self, id: str, symbol: Str = None, params={}):
667
682
  """
668
683
  cancels an open order
684
+ :see: https://www.independentreserve.com/features/api#CancelOrder
669
685
  :param str id: order id
670
686
  :param str symbol: unified symbol of the market the order was made in
671
687
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -675,7 +691,23 @@ class independentreserve(Exchange, ImplicitAPI):
675
691
  request: dict = {
676
692
  'orderGuid': id,
677
693
  }
678
- return await self.privatePostCancelOrder(self.extend(request, params))
694
+ response = await self.privatePostCancelOrder(self.extend(request, params))
695
+ #
696
+ # {
697
+ # "AvgPrice": 455.48,
698
+ # "CreatedTimestampUtc": "2022-08-05T06:42:11.3032208Z",
699
+ # "OrderGuid": "719c495c-a39e-4884-93ac-280b37245037",
700
+ # "Price": 485.76,
701
+ # "PrimaryCurrencyCode": "Xbt",
702
+ # "ReservedAmount": 0.358,
703
+ # "SecondaryCurrencyCode": "Usd",
704
+ # "Status": "Cancelled",
705
+ # "Type": "LimitOffer",
706
+ # "VolumeFilled": 0,
707
+ # "VolumeOrdered": 0.358
708
+ # }
709
+ #
710
+ return self.parse_order(response)
679
711
 
680
712
  async def fetch_deposit_address(self, code: str, params={}):
681
713
  """
@@ -641,6 +641,24 @@ class indodax(Exchange, ImplicitAPI):
641
641
  # "order_xrp": "30.45000000",
642
642
  # "remain_xrp": "0.00000000"
643
643
  # }
644
+ #
645
+ # cancelOrder
646
+ #
647
+ # {
648
+ # "order_id": 666883,
649
+ # "client_order_id": "clientx-sj82ks82j",
650
+ # "type": "sell",
651
+ # "pair": "btc_idr",
652
+ # "balance": {
653
+ # "idr": "33605800",
654
+ # "btc": "0.00000000",
655
+ # ...
656
+ # "frozen_idr": "0",
657
+ # "frozen_btc": "0.00000000",
658
+ # ...
659
+ # }
660
+ # }
661
+ #
644
662
  side = None
645
663
  if 'type' in order:
646
664
  side = order['type']
@@ -650,6 +668,8 @@ class indodax(Exchange, ImplicitAPI):
650
668
  price = self.safe_string(order, 'price')
651
669
  amount = None
652
670
  remaining = None
671
+ marketId = self.safe_string(order, 'pair')
672
+ market = self.safe_market(marketId, market)
653
673
  if market is not None:
654
674
  symbol = market['symbol']
655
675
  quoteId = market['quoteId']
@@ -668,7 +688,7 @@ class indodax(Exchange, ImplicitAPI):
668
688
  return self.safe_order({
669
689
  'info': order,
670
690
  'id': id,
671
- 'clientOrderId': None,
691
+ 'clientOrderId': self.safe_string(order, 'client_order_id'),
672
692
  'timestamp': timestamp,
673
693
  'datetime': self.iso8601(timestamp),
674
694
  'lastTradeTimestamp': None,
@@ -825,7 +845,28 @@ class indodax(Exchange, ImplicitAPI):
825
845
  'pair': market['id'],
826
846
  'type': side,
827
847
  }
828
- return await self.privatePostCancelOrder(self.extend(request, params))
848
+ response = await self.privatePostCancelOrder(self.extend(request, params))
849
+ #
850
+ # {
851
+ # "success": 1,
852
+ # "return": {
853
+ # "order_id": 666883,
854
+ # "client_order_id": "clientx-sj82ks82j",
855
+ # "type": "sell",
856
+ # "pair": "btc_idr",
857
+ # "balance": {
858
+ # "idr": "33605800",
859
+ # "btc": "0.00000000",
860
+ # ...
861
+ # "frozen_idr": "0",
862
+ # "frozen_btc": "0.00000000",
863
+ # ...
864
+ # }
865
+ # }
866
+ # }
867
+ #
868
+ data = self.safe_dict(response, 'return')
869
+ return self.parse_order(data)
829
870
 
830
871
  async def fetch_transaction_fee(self, code: str, params={}):
831
872
  """
@@ -2008,12 +2008,22 @@ class kraken(Exchange, ImplicitAPI):
2008
2008
  params = self.omit(params, ['userref', 'clientOrderId'])
2009
2009
  try:
2010
2010
  response = await self.privatePostCancelOrder(self.extend(request, params))
2011
+ #
2012
+ # {
2013
+ # error: [],
2014
+ # result: {
2015
+ # count: '1'
2016
+ # }
2017
+ # }
2018
+ #
2011
2019
  except Exception as e:
2012
2020
  if self.last_http_response:
2013
2021
  if self.last_http_response.find('EOrder:Unknown order') >= 0:
2014
2022
  raise OrderNotFound(self.id + ' cancelOrder() error ' + self.last_http_response)
2015
2023
  raise e
2016
- return response
2024
+ return self.safe_order({
2025
+ 'info': response,
2026
+ })
2017
2027
 
2018
2028
  async def cancel_orders(self, ids, symbol: Str = None, params={}):
2019
2029
  """
@@ -2036,7 +2046,11 @@ class kraken(Exchange, ImplicitAPI):
2036
2046
  # }
2037
2047
  # }
2038
2048
  #
2039
- return response
2049
+ return [
2050
+ self.safe_order({
2051
+ 'info': response,
2052
+ }),
2053
+ ]
2040
2054
 
2041
2055
  async def cancel_all_orders(self, symbol: Str = None, params={}):
2042
2056
  """
@@ -2047,7 +2061,20 @@ class kraken(Exchange, ImplicitAPI):
2047
2061
  :returns dict[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
2048
2062
  """
2049
2063
  await self.load_markets()
2050
- return await self.privatePostCancelAll(params)
2064
+ response = await self.privatePostCancelAll(params)
2065
+ #
2066
+ # {
2067
+ # error: [],
2068
+ # result: {
2069
+ # count: '1'
2070
+ # }
2071
+ # }
2072
+ #
2073
+ return [
2074
+ self.safe_order({
2075
+ 'info': response,
2076
+ }),
2077
+ ]
2051
2078
 
2052
2079
  async def cancel_all_orders_after(self, timeout: Int, params={}):
2053
2080
  """
@@ -1207,7 +1207,45 @@ class krakenfutures(Exchange, ImplicitAPI):
1207
1207
  if symbol is not None:
1208
1208
  request['symbol'] = self.market_id(symbol)
1209
1209
  response = await self.privatePostCancelallorders(self.extend(request, params))
1210
- return response
1210
+ #
1211
+ # {
1212
+ # result: 'success',
1213
+ # cancelStatus: {
1214
+ # receivedTime: '2024-06-06T01:12:44.814Z',
1215
+ # cancelOnly: 'PF_XRPUSD',
1216
+ # status: 'cancelled',
1217
+ # cancelledOrders: [{order_id: '272fd0ac-45c0-4003-b84d-d39b9e86bd36'}],
1218
+ # orderEvents: [
1219
+ # {
1220
+ # uid: '272fd0ac-45c0-4003-b84d-d39b9e86bd36',
1221
+ # order: {
1222
+ # orderId: '272fd0ac-45c0-4003-b84d-d39b9e86bd36',
1223
+ # cliOrdId: null,
1224
+ # type: 'lmt',
1225
+ # symbol: 'PF_XRPUSD',
1226
+ # side: 'buy',
1227
+ # quantity: '10',
1228
+ # filled: '0',
1229
+ # limitPrice: '0.4',
1230
+ # reduceOnly: False,
1231
+ # timestamp: '2024-06-06T01:11:16.045Z',
1232
+ # lastUpdateTimestamp: '2024-06-06T01:11:16.045Z'
1233
+ # },
1234
+ # type: 'CANCEL'
1235
+ # }
1236
+ # ]
1237
+ # },
1238
+ # serverTime: '2024-06-06T01:12:44.814Z'
1239
+ # }
1240
+ #
1241
+ cancelStatus = self.safe_dict(response, 'cancelStatus')
1242
+ orderEvents = self.safe_list(cancelStatus, 'orderEvents', [])
1243
+ orders = []
1244
+ for i in range(0, len(orderEvents)):
1245
+ orderEvent = self.safe_dict(orderEvents, 0)
1246
+ order = self.safe_dict(orderEvent, 'order', {})
1247
+ orders.append(order)
1248
+ return self.parse_orders(orders)
1211
1249
 
1212
1250
  async def cancel_all_orders_after(self, timeout: Int, params={}):
1213
1251
  """
@@ -1551,6 +1589,22 @@ class krakenfutures(Exchange, ImplicitAPI):
1551
1589
  # ]
1552
1590
  # }
1553
1591
  #
1592
+ # cancelAllOrders
1593
+ #
1594
+ # {
1595
+ # "orderId": "85c40002-3f20-4e87-9302-262626c3531b",
1596
+ # "cliOrdId": null,
1597
+ # "type": "lmt",
1598
+ # "symbol": "pi_xbtusd",
1599
+ # "side": "buy",
1600
+ # "quantity": 1000,
1601
+ # "filled": 0,
1602
+ # "limitPrice": 10144,
1603
+ # "stopPrice": null,
1604
+ # "reduceOnly": False,
1605
+ # "timestamp": "2019-08-01T15:26:27.790Z"
1606
+ # }
1607
+ #
1554
1608
  # FETCH OPEN ORDERS
1555
1609
  #
1556
1610
  # {
@@ -2238,19 +2238,76 @@ class kucoin(Exchange, ImplicitAPI):
2238
2238
  request['clientOid'] = clientOrderId
2239
2239
  if stop:
2240
2240
  response = await self.privateDeleteStopOrderCancelOrderByClientOid(self.extend(request, params))
2241
+ #
2242
+ # {
2243
+ # code: '200000',
2244
+ # data: {
2245
+ # cancelledOrderId: 'vs8lgpiuao41iaft003khbbk',
2246
+ # clientOid: '123456'
2247
+ # }
2248
+ # }
2249
+ #
2241
2250
  elif hf:
2242
2251
  response = await self.privateDeleteHfOrdersClientOrderClientOid(self.extend(request, params))
2252
+ #
2253
+ # {
2254
+ # "code": "200000",
2255
+ # "data": {
2256
+ # "clientOid": "6d539dc614db3"
2257
+ # }
2258
+ # }
2259
+ #
2243
2260
  else:
2244
2261
  response = await self.privateDeleteOrderClientOrderClientOid(self.extend(request, params))
2262
+ #
2263
+ # {
2264
+ # code: '200000',
2265
+ # data: {
2266
+ # cancelledOrderId: '665e580f6660500007aba341',
2267
+ # clientOid: '1234567',
2268
+ # cancelledOcoOrderIds: null
2269
+ # }
2270
+ # }
2271
+ #
2272
+ response = self.safe_dict(response, 'data')
2273
+ return self.parse_order(response)
2245
2274
  else:
2246
2275
  request['orderId'] = id
2247
2276
  if stop:
2248
2277
  response = await self.privateDeleteStopOrderOrderId(self.extend(request, params))
2278
+ #
2279
+ # {
2280
+ # code: '200000',
2281
+ # data: {cancelledOrderIds: ['vs8lgpiuaco91qk8003vebu9']}
2282
+ # }
2283
+ #
2249
2284
  elif hf:
2250
2285
  response = await self.privateDeleteHfOrdersOrderId(self.extend(request, params))
2286
+ #
2287
+ # {
2288
+ # "code": "200000",
2289
+ # "data": {
2290
+ # "orderId": "630625dbd9180300014c8d52"
2291
+ # }
2292
+ # }
2293
+ #
2294
+ response = self.safe_dict(response, 'data')
2295
+ return self.parse_order(response)
2251
2296
  else:
2252
2297
  response = await self.privateDeleteOrdersOrderId(self.extend(request, params))
2253
- return response
2298
+ #
2299
+ # {
2300
+ # code: '200000',
2301
+ # data: {cancelledOrderIds: ['665e4fbe28051a0007245c41']}
2302
+ # }
2303
+ #
2304
+ data = self.safe_dict(response, 'data')
2305
+ orderIds = self.safe_list(data, 'cancelledOrderIds', [])
2306
+ orderId = self.safe_string(orderIds, 0)
2307
+ return self.safe_order({
2308
+ 'info': data,
2309
+ 'id': orderId,
2310
+ })
2254
2311
 
2255
2312
  async def cancel_all_orders(self, symbol: Str = None, params={}):
2256
2313
  """
@@ -2664,7 +2721,7 @@ class kucoin(Exchange, ImplicitAPI):
2664
2721
  stopPrice = self.safe_number(order, 'stopPrice')
2665
2722
  return self.safe_order({
2666
2723
  'info': order,
2667
- 'id': self.safe_string_n(order, ['id', 'orderId', 'newOrderId']),
2724
+ 'id': self.safe_string_n(order, ['id', 'orderId', 'newOrderId', 'cancelledOrderId']),
2668
2725
  'clientOrderId': self.safe_string(order, 'clientOid'),
2669
2726
  'symbol': self.safe_symbol(marketId, market, '-'),
2670
2727
  'type': self.safe_string(order, 'type'),
ccxt/async_support/okx.py CHANGED
@@ -370,6 +370,9 @@ class okx(Exchange, ImplicitAPI):
370
370
  'account/greeks': 2,
371
371
  'account/position-tiers': 2,
372
372
  'account/mmp-config': 4,
373
+ 'account/fixed-loan/borrowing-limit': 4,
374
+ 'account/fixed-loan/borrowing-quote': 5,
375
+ 'account/fixed-loan/borrowing-orders-list': 5,
373
376
  # subaccount
374
377
  'users/subaccount/list': 10,
375
378
  'account/subaccount/balances': 10 / 3,
@@ -495,6 +498,10 @@ class okx(Exchange, ImplicitAPI):
495
498
  'account/set-account-level': 4,
496
499
  'account/mmp-reset': 4,
497
500
  'account/mmp-config': 100,
501
+ 'account/fixed-loan/borrowing-order': 5,
502
+ 'account/fixed-loan/amend-borrowing-order': 5,
503
+ 'account/fixed-loan/manual-reborrow': 5,
504
+ 'account/fixed-loan/repay-borrowing-order': 5,
498
505
  # subaccount
499
506
  'users/subaccount/modify-apikey': 10,
500
507
  'asset/subaccount/transfer': 10,
@@ -1782,23 +1782,28 @@ class upbit(Exchange, ImplicitAPI):
1782
1782
  url += '?' + self.urlencode(query)
1783
1783
  if api == 'private':
1784
1784
  self.check_required_credentials()
1785
+ headers = {}
1785
1786
  nonce = self.uuid()
1786
1787
  request: dict = {
1787
1788
  'access_key': self.apiKey,
1788
1789
  'nonce': nonce,
1789
1790
  }
1790
- if query:
1791
- auth = self.urlencode(query)
1791
+ hasQuery = query
1792
+ auth = None
1793
+ if (method != 'GET') and (method != 'DELETE'):
1794
+ body = self.json(params)
1795
+ headers['Content-Type'] = 'application/json'
1796
+ if hasQuery:
1797
+ auth = self.urlencode(query)
1798
+ else:
1799
+ if hasQuery:
1800
+ auth = self.urlencode(self.keysort(query))
1801
+ if auth is not None:
1792
1802
  hash = self.hash(self.encode(auth), 'sha512')
1793
1803
  request['query_hash'] = hash
1794
1804
  request['query_hash_alg'] = 'SHA512'
1795
1805
  token = self.jwt(request, self.encode(self.secret), 'sha256')
1796
- headers = {
1797
- 'Authorization': 'Bearer ' + token,
1798
- }
1799
- if (method != 'GET') and (method != 'DELETE'):
1800
- body = self.json(params)
1801
- headers['Content-Type'] = 'application/json'
1806
+ headers['Authorization'] = 'Bearer ' + token
1802
1807
  return {'url': url, 'method': method, 'body': body, 'headers': headers}
1803
1808
 
1804
1809
  def handle_errors(self, httpCode: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
ccxt/async_support/woo.py CHANGED
@@ -1212,7 +1212,9 @@ class woo(Exchange, ImplicitAPI):
1212
1212
  # "status":"CANCEL_ALL_SENT"
1213
1213
  # }
1214
1214
  #
1215
- return response
1215
+ return [
1216
+ self.safe_order(response),
1217
+ ]
1216
1218
 
1217
1219
  async def cancel_all_orders_after(self, timeout: Int, params={}):
1218
1220
  """
@@ -1237,7 +1239,9 @@ class woo(Exchange, ImplicitAPI):
1237
1239
  # "timestamp": 1711534302943
1238
1240
  # }
1239
1241
  #
1240
- return response
1242
+ return [
1243
+ self.safe_order(response),
1244
+ ]
1241
1245
 
1242
1246
  async def fetch_order(self, id: str, symbol: Str = None, params={}):
1243
1247
  """
ccxt/base/exchange.py CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.3.40'
7
+ __version__ = '4.3.42'
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
ccxt/binance.py CHANGED
@@ -259,6 +259,9 @@ class binance(Exchange, ImplicitAPI):
259
259
  # UID(sapi) request rate limit of 180 000 per minute
260
260
  # 1 UID(sapi) => cost = 0.006667 =>(1000 / (50 * 0.006667)) * 60 = 180000
261
261
  'get': {
262
+ # copy trading
263
+ 'copyTrading/futures/userStatus': 2,
264
+ 'copyTrading/futures/leadSymbol': 2,
262
265
  'system/status': 0.1,
263
266
  # these endpoints require self.apiKey
264
267
  'accountSnapshot': 240, # Weight(IP): 2400 => cost = 0.1 * 2400 = 240
ccxt/bitfinex2.py CHANGED
@@ -1655,7 +1655,7 @@ class bitfinex2(Exchange, ImplicitAPI):
1655
1655
  raise ExchangeError(self.id + ' ' + response[6] + ': ' + errorText + '(#' + errorCode + ')')
1656
1656
  orders = self.safe_list(response, 4, [])
1657
1657
  order = self.safe_list(orders, 0)
1658
- return self.parse_order(order, market)
1658
+ return self.parse_order(self.extend({'result': order}), market)
1659
1659
 
1660
1660
  def create_orders(self, orders: List[OrderRequest], params={}):
1661
1661
  """
ccxt/bithumb.py CHANGED
@@ -924,7 +924,15 @@ class bithumb(Exchange, ImplicitAPI):
924
924
  'order_currency': market['base'],
925
925
  'payment_currency': market['quote'],
926
926
  }
927
- return self.privatePostTradeCancel(self.extend(request, params))
927
+ response = self.privatePostTradeCancel(self.extend(request, params))
928
+ #
929
+ # {
930
+ # 'status': 'string',
931
+ # }
932
+ #
933
+ return self.safe_order({
934
+ 'info': response,
935
+ })
928
936
 
929
937
  def cancel_unified_order(self, order, params={}):
930
938
  request: dict = {