ccxt 4.4.95__py2.py3-none-any.whl → 4.4.96__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 (72) hide show
  1. ccxt/__init__.py +3 -1
  2. ccxt/abstract/foxbit.py +26 -0
  3. ccxt/abstract/hyperliquid.py +1 -1
  4. ccxt/apex.py +3 -3
  5. ccxt/ascendex.py +2 -2
  6. ccxt/async_support/__init__.py +3 -1
  7. ccxt/async_support/apex.py +3 -3
  8. ccxt/async_support/ascendex.py +2 -2
  9. ccxt/async_support/base/exchange.py +5 -3
  10. ccxt/async_support/base/ws/future.py +5 -3
  11. ccxt/async_support/bitget.py +30 -143
  12. ccxt/async_support/bitmart.py +2 -2
  13. ccxt/async_support/bitrue.py +13 -8
  14. ccxt/async_support/bybit.py +14 -5
  15. ccxt/async_support/coinbaseexchange.py +4 -2
  16. ccxt/async_support/coinbaseinternational.py +2 -2
  17. ccxt/async_support/coinspot.py +36 -1
  18. ccxt/async_support/cryptocom.py +2 -1
  19. ccxt/async_support/cryptomus.py +41 -1
  20. ccxt/async_support/defx.py +1 -1
  21. ccxt/async_support/derive.py +1 -1
  22. ccxt/async_support/ellipx.py +40 -0
  23. ccxt/async_support/foxbit.py +1935 -0
  24. ccxt/async_support/hyperliquid.py +2 -2
  25. ccxt/async_support/kucoin.py +1 -1
  26. ccxt/async_support/kucoinfutures.py +3 -2
  27. ccxt/async_support/mexc.py +28 -13
  28. ccxt/async_support/modetrade.py +3 -3
  29. ccxt/async_support/okcoin.py +1 -1
  30. ccxt/async_support/okx.py +10 -3
  31. ccxt/async_support/onetrading.py +1 -1
  32. ccxt/async_support/oxfun.py +2 -1
  33. ccxt/async_support/paradex.py +2 -2
  34. ccxt/async_support/vertex.py +3 -2
  35. ccxt/async_support/woo.py +6 -2
  36. ccxt/async_support/woofipro.py +2 -2
  37. ccxt/base/errors.py +6 -0
  38. ccxt/base/exchange.py +6 -3
  39. ccxt/bitget.py +30 -143
  40. ccxt/bitmart.py +2 -2
  41. ccxt/bitrue.py +13 -8
  42. ccxt/bybit.py +14 -5
  43. ccxt/coinbaseexchange.py +4 -2
  44. ccxt/coinbaseinternational.py +2 -2
  45. ccxt/coinspot.py +36 -1
  46. ccxt/cryptocom.py +2 -1
  47. ccxt/cryptomus.py +41 -1
  48. ccxt/defx.py +1 -1
  49. ccxt/derive.py +1 -1
  50. ccxt/ellipx.py +40 -0
  51. ccxt/foxbit.py +1935 -0
  52. ccxt/hyperliquid.py +2 -2
  53. ccxt/kucoin.py +1 -1
  54. ccxt/kucoinfutures.py +3 -2
  55. ccxt/mexc.py +28 -13
  56. ccxt/modetrade.py +3 -3
  57. ccxt/okcoin.py +1 -1
  58. ccxt/okx.py +10 -3
  59. ccxt/onetrading.py +1 -1
  60. ccxt/oxfun.py +2 -1
  61. ccxt/paradex.py +2 -2
  62. ccxt/pro/__init__.py +1 -1
  63. ccxt/test/tests_async.py +15 -0
  64. ccxt/test/tests_sync.py +15 -0
  65. ccxt/vertex.py +3 -2
  66. ccxt/woo.py +6 -2
  67. ccxt/woofipro.py +2 -2
  68. {ccxt-4.4.95.dist-info → ccxt-4.4.96.dist-info}/METADATA +8 -8
  69. {ccxt-4.4.95.dist-info → ccxt-4.4.96.dist-info}/RECORD +72 -69
  70. {ccxt-4.4.95.dist-info → ccxt-4.4.96.dist-info}/LICENSE.txt +0 -0
  71. {ccxt-4.4.95.dist-info → ccxt-4.4.96.dist-info}/WHEEL +0 -0
  72. {ccxt-4.4.95.dist-info → ccxt-4.4.96.dist-info}/top_level.txt +0 -0
ccxt/hyperliquid.py CHANGED
@@ -173,7 +173,7 @@ class hyperliquid(Exchange, ImplicitAPI):
173
173
  'orderStatus': 2,
174
174
  'spotClearinghouseState': 2,
175
175
  'exchangeStatus': 2,
176
- 'candleSnapshot': 3,
176
+ 'candleSnapshot': 4,
177
177
  },
178
178
  },
179
179
  },
@@ -1810,7 +1810,7 @@ class hyperliquid(Exchange, ImplicitAPI):
1810
1810
  # }
1811
1811
  # }
1812
1812
  #
1813
- return response
1813
+ return [self.safe_order({'info': response})]
1814
1814
 
1815
1815
  def cancel_all_orders_after(self, timeout: Int, params={}):
1816
1816
  """
ccxt/kucoin.py CHANGED
@@ -2646,7 +2646,7 @@ class kucoin(Exchange, ImplicitAPI):
2646
2646
  response = self.privateDeleteHfOrders(self.extend(request, query))
2647
2647
  else:
2648
2648
  response = self.privateDeleteOrders(self.extend(request, query))
2649
- return response
2649
+ return [self.safe_order({'info': response})]
2650
2650
 
2651
2651
  def fetch_orders_by_status(self, status, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
2652
2652
  """
ccxt/kucoinfutures.py CHANGED
@@ -1719,7 +1719,7 @@ class kucoinfutures(kucoin, ImplicitAPI):
1719
1719
  # },
1720
1720
  # }
1721
1721
  #
1722
- return self.safe_value(response, 'data')
1722
+ return self.safe_order({'info': response})
1723
1723
 
1724
1724
  def cancel_orders(self, ids, symbol: Str = None, params={}):
1725
1725
  """
@@ -1811,7 +1811,8 @@ class kucoinfutures(kucoin, ImplicitAPI):
1811
1811
  # },
1812
1812
  # }
1813
1813
  #
1814
- return self.safe_value(response, 'data')
1814
+ data = self.safe_dict(response, 'data')
1815
+ return [self.safe_order({'info': data})]
1815
1816
 
1816
1817
  def add_margin(self, symbol: str, amount: float, params={}) -> MarginModification:
1817
1818
  """
ccxt/mexc.py CHANGED
@@ -4651,11 +4651,14 @@ class mexc(Exchange, ImplicitAPI):
4651
4651
  # "network": "TRX",
4652
4652
  # "status": "5",
4653
4653
  # "address": "TSMcEDDvkqY9dz8RkFnrS86U59GwEZjfvh",
4654
- # "txId": "51a8f49e6f03f2c056e71fe3291aa65e1032880be855b65cecd0595a1b8af95b",
4654
+ # "txId": "51a8f49e6f03f2c056e71fe3291aa65e1032880be855b65cecd0595a1b8af95b:0",
4655
4655
  # "insertTime": "1664805021000",
4656
4656
  # "unlockConfirm": "200",
4657
4657
  # "confirmTimes": "203",
4658
- # "memo": "xxyy1122"
4658
+ # "memo": "xxyy1122",
4659
+ # "transHash": "51a8f49e6f03f2c056e71fe3291aa65e1032880be855b65cecd0595a1b8af95b",
4660
+ # "updateTime": "1664805621000",
4661
+ # "netWork: "TRX"
4659
4662
  # }
4660
4663
  # ]
4661
4664
  #
@@ -4696,7 +4699,7 @@ class mexc(Exchange, ImplicitAPI):
4696
4699
  # [
4697
4700
  # {
4698
4701
  # "id": "adcd1c8322154de691b815eedcd10c42",
4699
- # "txId": "0xc8c918cd69b2246db493ef6225a72ffdc664f15b08da3e25c6879b271d05e9d0",
4702
+ # "txId": "0xc8c918cd69b2246db493ef6225a72ffdc664f15b08da3e25c6879b271d05e9d0:0",
4700
4703
  # "coin": "USDC-MATIC",
4701
4704
  # "network": "MATIC",
4702
4705
  # "address": "0xeE6C7a415995312ED52c53a0f8f03e165e0A5D62",
@@ -4707,7 +4710,11 @@ class mexc(Exchange, ImplicitAPI):
4707
4710
  # "confirmNo": null,
4708
4711
  # "applyTime": "1664882739000",
4709
4712
  # "remark": '',
4710
- # "memo": null
4713
+ # "memo": null,
4714
+ # "explorerUrl": "https://etherscan.io/tx/0xc8c918cd69b2246db493ef6225a72ffdc664f15b08da3e25c6879b271d05e9d0",
4715
+ # "transHash": "0xc8c918cd69b2246db493ef6225a72ffdc664f15b08da3e25c6879b271d05e9d0",
4716
+ # "updateTime": "1664882799000",
4717
+ # "netWork: "MATIC"
4711
4718
  # }
4712
4719
  # ]
4713
4720
  #
@@ -4723,18 +4730,21 @@ class mexc(Exchange, ImplicitAPI):
4723
4730
  # "network": "TRX",
4724
4731
  # "status": "5",
4725
4732
  # "address": "TSMcEDDvkqY9dz8RkFnrS86U59GwEZjfvh",
4726
- # "txId": "51a8f49e6f03f2c056e71fe3291aa65e1032880be855b65cecd0595a1b8af95b",
4733
+ # "txId": "51a8f49e6f03f2c056e71fe3291aa65e1032880be855b65cecd0595a1b8af95b:0",
4727
4734
  # "insertTime": "1664805021000",
4728
4735
  # "unlockConfirm": "200",
4729
4736
  # "confirmTimes": "203",
4730
- # "memo": "xxyy1122"
4737
+ # "memo": "xxyy1122",
4738
+ # "transHash": "51a8f49e6f03f2c056e71fe3291aa65e1032880be855b65cecd0595a1b8af95b",
4739
+ # "updateTime": "1664805621000",
4740
+ # "netWork: "TRX"
4731
4741
  # }
4732
4742
  #
4733
4743
  # fetchWithdrawals
4734
4744
  #
4735
4745
  # {
4736
4746
  # "id": "adcd1c8322154de691b815eedcd10c42",
4737
- # "txId": "0xc8c918cd69b2246db493ef6225a72ffdc664f15b08da3e25c6879b271d05e9d0",
4747
+ # "txId": "0xc8c918cd69b2246db493ef6225a72ffdc664f15b08da3e25c6879b271d05e9d0:0",
4738
4748
  # "coin": "USDC-MATIC",
4739
4749
  # "network": "MATIC",
4740
4750
  # "address": "0xeE6C7a415995312ED52c53a0f8f03e165e0A5D62",
@@ -4744,8 +4754,12 @@ class mexc(Exchange, ImplicitAPI):
4744
4754
  # "transactionFee": "1",
4745
4755
  # "confirmNo": null,
4746
4756
  # "applyTime": "1664882739000",
4747
- # "remark": '',
4748
- # "memo": null
4757
+ # "remark": "",
4758
+ # "memo": null,
4759
+ # "explorerUrl": "https://etherscan.io/tx/0xc8c918cd69b2246db493ef6225a72ffdc664f15b08da3e25c6879b271d05e9d0",
4760
+ # "transHash": "0xc8c918cd69b2246db493ef6225a72ffdc664f15b08da3e25c6879b271d05e9d0",
4761
+ # "updateTime": "1664882799000",
4762
+ # "netWork: "MATIC"
4749
4763
  # }
4750
4764
  #
4751
4765
  # withdraw
@@ -4757,6 +4771,7 @@ class mexc(Exchange, ImplicitAPI):
4757
4771
  id = self.safe_string(transaction, 'id')
4758
4772
  type = 'deposit' if (id is None) else 'withdrawal'
4759
4773
  timestamp = self.safe_integer_2(transaction, 'insertTime', 'applyTime')
4774
+ updated = self.safe_integer(transaction, 'updateTime')
4760
4775
  currencyId = None
4761
4776
  currencyWithNetwork = self.safe_string(transaction, 'coin')
4762
4777
  if currencyWithNetwork is not None:
@@ -4769,7 +4784,7 @@ class mexc(Exchange, ImplicitAPI):
4769
4784
  status = self.parse_transaction_status_by_type(self.safe_string(transaction, 'status'), type)
4770
4785
  amountString = self.safe_string(transaction, 'amount')
4771
4786
  address = self.safe_string(transaction, 'address')
4772
- txid = self.safe_string(transaction, 'txId')
4787
+ txid = self.safe_string_2(transaction, 'transHash', 'txId')
4773
4788
  fee = None
4774
4789
  feeCostString = self.safe_string(transaction, 'transactionFee')
4775
4790
  if feeCostString is not None:
@@ -4797,8 +4812,8 @@ class mexc(Exchange, ImplicitAPI):
4797
4812
  'amount': self.parse_number(amountString),
4798
4813
  'currency': code,
4799
4814
  'status': status,
4800
- 'updated': None,
4801
- 'comment': None,
4815
+ 'updated': updated,
4816
+ 'comment': self.safe_string(transaction, 'remark'),
4802
4817
  'internal': None,
4803
4818
  'fee': fee,
4804
4819
  }
@@ -5704,7 +5719,7 @@ class mexc(Exchange, ImplicitAPI):
5704
5719
  #
5705
5720
  # {success: True, code: '0'}
5706
5721
  #
5707
- return self.parse_leverage(response, market)
5722
+ return self.parse_leverage(response, market) # tmp revert type
5708
5723
 
5709
5724
  def nonce(self):
5710
5725
  return self.milliseconds() - self.safe_integer(self.options, 'timeDifference', 0)
ccxt/modetrade.py CHANGED
@@ -29,7 +29,7 @@ class modetrade(Exchange, ImplicitAPI):
29
29
  'countries': ['KY'], # Cayman Islands
30
30
  'rateLimit': 100,
31
31
  'version': 'v1',
32
- 'certified': True,
32
+ 'certified': False,
33
33
  'pro': True,
34
34
  'dex': True,
35
35
  'hostname': 'trade.mode.network',
@@ -1750,9 +1750,9 @@ class modetrade(Exchange, ImplicitAPI):
1750
1750
  # }
1751
1751
  #
1752
1752
  return [
1753
- {
1753
+ self.safe_order({
1754
1754
  'info': response,
1755
- },
1755
+ }),
1756
1756
  ]
1757
1757
 
1758
1758
  def fetch_order(self, id: str, symbol: Str = None, params={}):
ccxt/okcoin.py CHANGED
@@ -1650,7 +1650,7 @@ class okcoin(Exchange, ImplicitAPI):
1650
1650
  advanced = self.safe_value(params, 'advanced')
1651
1651
  if trigger or advanced:
1652
1652
  orderInner = self.cancel_orders([id], symbol, params)
1653
- return self.safe_value(orderInner, 0)
1653
+ return self.safe_dict(orderInner, 0)
1654
1654
  market = self.market(symbol)
1655
1655
  request: dict = {
1656
1656
  'instId': market['id'],
ccxt/okx.py CHANGED
@@ -1172,7 +1172,9 @@ class okx(Exchange, ImplicitAPI):
1172
1172
  },
1173
1173
  'createOrder': 'privatePostTradeBatchOrders', # or 'privatePostTradeOrder' or 'privatePostTradeOrderAlgo'
1174
1174
  'createMarketBuyOrderRequiresPrice': False,
1175
- 'fetchMarkets': ['spot', 'future', 'swap', 'option'], # spot, future, swap, option
1175
+ 'fetchMarkets': {
1176
+ 'types': ['spot', 'future', 'swap', 'option'], # spot, future, swap, option
1177
+ },
1176
1178
  'timeDifference': 0, # the difference between system clock and exchange server clock
1177
1179
  'adjustForTimeDifference': False, # controls the adjustment logic upon instantiation
1178
1180
  'defaultType': 'spot', # 'funding', 'spot', 'margin', 'future', 'swap', 'option'
@@ -1558,7 +1560,12 @@ class okx(Exchange, ImplicitAPI):
1558
1560
  """
1559
1561
  if self.options['adjustForTimeDifference']:
1560
1562
  self.load_time_difference()
1561
- types = self.safe_list(self.options, 'fetchMarkets', [])
1563
+ types = ['spot', 'future', 'swap', 'option']
1564
+ fetchMarketsOption = self.safe_dict(self.options, 'fetchMarkets')
1565
+ if fetchMarketsOption is not None:
1566
+ types = self.safe_list(fetchMarketsOption, 'types', types)
1567
+ else:
1568
+ types = self.safe_list(self.options, 'fetchMarkets', types) # backward-support
1562
1569
  promises = []
1563
1570
  result = []
1564
1571
  for i in range(0, len(types)):
@@ -3324,7 +3331,7 @@ class okx(Exchange, ImplicitAPI):
3324
3331
  trailing = self.safe_bool(params, 'trailing', False)
3325
3332
  if trigger or trailing:
3326
3333
  orderInner = self.cancel_orders([id], symbol, params)
3327
- return self.safe_value(orderInner, 0)
3334
+ return self.safe_dict(orderInner, 0)
3328
3335
  self.load_markets()
3329
3336
  market = self.market(symbol)
3330
3337
  request: dict = {
ccxt/onetrading.py CHANGED
@@ -1321,7 +1321,7 @@ class onetrading(Exchange, ImplicitAPI):
1321
1321
  # "a10e9bd1-8f72-4cfe-9f1b-7f1c8a9bd8ee"
1322
1322
  # ]
1323
1323
  #
1324
- return response
1324
+ return [self.safe_order({'info': response})]
1325
1325
 
1326
1326
  def cancel_orders(self, ids, symbol: Str = None, params={}):
1327
1327
  """
ccxt/oxfun.py CHANGED
@@ -2584,7 +2584,8 @@ class oxfun(Exchange, ImplicitAPI):
2584
2584
  # "data": {"notice": "No working orders found"}
2585
2585
  # }
2586
2586
  #
2587
- return self.privateDeleteV3OrdersCancelAll(self.extend(request, params))
2587
+ response = self.privateDeleteV3OrdersCancelAll(self.extend(request, params))
2588
+ return [self.safe_order({'info': response})]
2588
2589
 
2589
2590
  def cancel_orders(self, ids: List[str], symbol: Str = None, params={}):
2590
2591
  """
ccxt/paradex.py CHANGED
@@ -1249,7 +1249,7 @@ class paradex(Exchange, ImplicitAPI):
1249
1249
  cancelReason = self.safe_string(order, 'cancel_reason')
1250
1250
  status = self.safe_string(order, 'status')
1251
1251
  if cancelReason is not None:
1252
- if cancelReason == 'NOT_ENOUGH_MARGIN':
1252
+ if cancelReason == 'NOT_ENOUGH_MARGIN' or cancelReason == 'ORDER_EXCEEDS_POSITION_LIMIT':
1253
1253
  status = 'rejected'
1254
1254
  else:
1255
1255
  status = 'canceled'
@@ -1527,7 +1527,7 @@ class paradex(Exchange, ImplicitAPI):
1527
1527
  #
1528
1528
  # if success, no response...
1529
1529
  #
1530
- return response
1530
+ return [self.safe_order({'info': response})]
1531
1531
 
1532
1532
  def fetch_order(self, id: str, symbol: Str = None, params={}):
1533
1533
  """
ccxt/pro/__init__.py CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  # ----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.4.95'
7
+ __version__ = '4.4.96'
8
8
 
9
9
  # ----------------------------------------------------------------------------
10
10
 
ccxt/test/tests_async.py CHANGED
@@ -629,11 +629,26 @@ class testMainClass:
629
629
  assert exchange.hostname == 'binance.us', 'binance.us hostname does not match ' + exchange.hostname
630
630
  assert exchange.urls['api']['public'] == 'https://api.binance.us/api/v3', 'https://api.binance.us/api/v3 does not match: ' + exchange.urls['api']['public']
631
631
 
632
+ async def test_return_response_headers(self, exchange):
633
+ if exchange.id != 'binance':
634
+ return False # this test is only for binance exchange for now
635
+ exchange.return_response_headers = True
636
+ ticker = await exchange.fetch_ticker('BTC/USDT')
637
+ info = ticker['info']
638
+ headers = info['responseHeaders']
639
+ headers_keys = list(headers.keys())
640
+ assert len(headers_keys) > 0, 'Response headers should not be empty'
641
+ header_values = list(headers.values())
642
+ assert len(header_values) > 0, 'Response headers values should not be empty'
643
+ exchange.return_response_headers = False
644
+ return True
645
+
632
646
  async def start_test(self, exchange, symbol):
633
647
  # we do not need to test aliases
634
648
  if exchange.alias:
635
649
  return True
636
650
  self.check_constructor(exchange)
651
+ # await this.testReturnResponseHeaders (exchange);
637
652
  if self.sandbox or get_exchange_prop(exchange, 'sandbox'):
638
653
  exchange.set_sandbox_mode(True)
639
654
  try:
ccxt/test/tests_sync.py CHANGED
@@ -626,11 +626,26 @@ class testMainClass:
626
626
  assert exchange.hostname == 'binance.us', 'binance.us hostname does not match ' + exchange.hostname
627
627
  assert exchange.urls['api']['public'] == 'https://api.binance.us/api/v3', 'https://api.binance.us/api/v3 does not match: ' + exchange.urls['api']['public']
628
628
 
629
+ def test_return_response_headers(self, exchange):
630
+ if exchange.id != 'binance':
631
+ return False # this test is only for binance exchange for now
632
+ exchange.return_response_headers = True
633
+ ticker = exchange.fetch_ticker('BTC/USDT')
634
+ info = ticker['info']
635
+ headers = info['responseHeaders']
636
+ headers_keys = list(headers.keys())
637
+ assert len(headers_keys) > 0, 'Response headers should not be empty'
638
+ header_values = list(headers.values())
639
+ assert len(header_values) > 0, 'Response headers values should not be empty'
640
+ exchange.return_response_headers = False
641
+ return True
642
+
629
643
  def start_test(self, exchange, symbol):
630
644
  # we do not need to test aliases
631
645
  if exchange.alias:
632
646
  return True
633
647
  self.check_constructor(exchange)
648
+ # this.testReturnResponseHeaders (exchange);
634
649
  if self.sandbox or get_exchange_prop(exchange, 'sandbox'):
635
650
  exchange.set_sandbox_mode(True)
636
651
  try:
ccxt/vertex.py CHANGED
@@ -2351,7 +2351,7 @@ class vertex(Exchange, ImplicitAPI):
2351
2351
  # "request_type": "execute_cancel_product_orders"
2352
2352
  # }
2353
2353
  #
2354
- return response
2354
+ return [self.safe_order({'info': response})]
2355
2355
 
2356
2356
  def cancel_order(self, id: str, symbol: Str = None, params={}):
2357
2357
  """
@@ -2365,7 +2365,8 @@ class vertex(Exchange, ImplicitAPI):
2365
2365
  :param dict [params]: extra parameters specific to the exchange API endpoint
2366
2366
  :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
2367
2367
  """
2368
- return self.cancel_orders([id], symbol, params)
2368
+ order = self.cancel_orders([id], symbol, params)
2369
+ return self.safe_order({'info': order})
2369
2370
 
2370
2371
  def cancel_orders(self, ids: List[str], symbol: Str = None, params={}):
2371
2372
  """
ccxt/woo.py CHANGED
@@ -1502,8 +1502,11 @@ class woo(Exchange, ImplicitAPI):
1502
1502
  if symbol is not None:
1503
1503
  market = self.market(symbol)
1504
1504
  request['symbol'] = market['id']
1505
+ response = None
1505
1506
  if trigger:
1506
- return self.v3PrivateDeleteTradeAlgoOrders(params)
1507
+ response = self.v3PrivateDeleteTradeAlgoOrders(params)
1508
+ else:
1509
+ response = self.v3PrivateDeleteTradeOrders(self.extend(request, params))
1507
1510
  #
1508
1511
  # {
1509
1512
  # "success": True,
@@ -1513,7 +1516,8 @@ class woo(Exchange, ImplicitAPI):
1513
1516
  # "timestamp": 1751941988134
1514
1517
  # }
1515
1518
  #
1516
- return self.v3PrivateDeleteTradeOrders(self.extend(request, params))
1519
+ data = self.safe_dict(response, 'data', {})
1520
+ return [self.safe_order({'info': data})]
1517
1521
 
1518
1522
  def cancel_all_orders_after(self, timeout: Int, params={}):
1519
1523
  """
ccxt/woofipro.py CHANGED
@@ -1760,9 +1760,9 @@ class woofipro(Exchange, ImplicitAPI):
1760
1760
  # }
1761
1761
  #
1762
1762
  return [
1763
- {
1763
+ self.safe_order({
1764
1764
  'info': response,
1765
- },
1765
+ }),
1766
1766
  ]
1767
1767
 
1768
1768
  def fetch_order(self, id: str, symbol: Str = None, params={}):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ccxt
3
- Version: 4.4.95
3
+ Version: 4.4.96
4
4
  Summary: A JavaScript / TypeScript / Python / C# / PHP cryptocurrency trading library with support for 100+ exchanges
5
5
  Home-page: https://ccxt.com
6
6
  Author: Igor Kroitor
@@ -49,7 +49,7 @@ Requires-Dist: mypy==1.6.1; extra == "type"
49
49
 
50
50
  # CCXT – CryptoCurrency eXchange Trading Library
51
51
 
52
- [![NPM Downloads](https://img.shields.io/npm/dy/ccxt.svg)](https://www.npmjs.com/package/ccxt) [![npm](https://img.shields.io/npm/v/ccxt.svg)](https://npmjs.com/package/ccxt) [![PyPI](https://img.shields.io/pypi/v/ccxt.svg)](https://pypi.python.org/pypi/ccxt) [![NuGet version](https://img.shields.io/nuget/v/ccxt)](https://www.nuget.org/packages/ccxt) [![GoDoc](https://pkg.go.dev/badge/github.com/ccxt/ccxt/go/v4?utm_source=godoc)](https://godoc.org/github.com/ccxt/ccxt/go/v4) [![Discord](https://img.shields.io/discord/690203284119617602?logo=discord&logoColor=white)](https://discord.gg/ccxt) [![Supported Exchanges](https://img.shields.io/badge/exchanges-105-blue.svg)](https://github.com/ccxt/ccxt/wiki/Exchange-Markets) [![Follow CCXT at x.com](https://img.shields.io/twitter/follow/ccxt_official.svg?style=social&label=CCXT)](https://x.com/ccxt_official)
52
+ [![NPM Downloads](https://img.shields.io/npm/dy/ccxt.svg)](https://www.npmjs.com/package/ccxt) [![npm](https://img.shields.io/npm/v/ccxt.svg)](https://npmjs.com/package/ccxt) [![PyPI](https://img.shields.io/pypi/v/ccxt.svg)](https://pypi.python.org/pypi/ccxt) [![NuGet version](https://img.shields.io/nuget/v/ccxt)](https://www.nuget.org/packages/ccxt) [![GoDoc](https://pkg.go.dev/badge/github.com/ccxt/ccxt/go/v4?utm_source=godoc)](https://godoc.org/github.com/ccxt/ccxt/go/v4) [![Discord](https://img.shields.io/discord/690203284119617602?logo=discord&logoColor=white)](https://discord.gg/ccxt) [![Supported Exchanges](https://img.shields.io/badge/exchanges-106-blue.svg)](https://github.com/ccxt/ccxt/wiki/Exchange-Markets) [![Follow CCXT at x.com](https://img.shields.io/twitter/follow/ccxt_official.svg?style=social&label=CCXT)](https://x.com/ccxt_official)
53
53
 
54
54
  A `JavaScript` / `Python` / `PHP` / `C#` / `Go` library for cryptocurrency trading and e-commerce with support for many bitcoin/ether/altcoin exchange markets and merchant APIs.
55
55
 
@@ -96,13 +96,12 @@ Current feature list:
96
96
  | [![kucoin](https://user-images.githubusercontent.com/51840849/87295558-132aaf80-c50e-11ea-9801-a2fb0c57c799.jpg)](https://www.kucoin.com/ucenter/signup?rcode=E5wkqe) | kucoin | [KuCoin](https://www.kucoin.com/ucenter/signup?rcode=E5wkqe) | [![API Version 2](https://img.shields.io/badge/2-lightgray)](https://docs.kucoin.com) | ![CEX – Centralized EXchange](https://img.shields.io/badge/CEX-green.svg "CEX – Centralized EXchange") | [![CCXT Certified](https://img.shields.io/badge/CCXT-Certified-green.svg)](https://github.com/ccxt/ccxt/wiki/Certification) | [![CCXT Pro](https://img.shields.io/badge/CCXT-Pro-black)](https://ccxt.pro) | |
97
97
  | [![kucoinfutures](https://user-images.githubusercontent.com/1294454/147508995-9e35030a-d046-43a1-a006-6fabd981b554.jpg)](https://futures.kucoin.com/?rcode=E5wkqe) | kucoinfutures | [KuCoin Futures](https://futures.kucoin.com/?rcode=E5wkqe) | [![API Version 1](https://img.shields.io/badge/1-lightgray)](https://docs.kucoin.com/futures) | ![CEX – Centralized EXchange](https://img.shields.io/badge/CEX-green.svg "CEX – Centralized EXchange") | [![CCXT Certified](https://img.shields.io/badge/CCXT-Certified-green.svg)](https://github.com/ccxt/ccxt/wiki/Certification) | [![CCXT Pro](https://img.shields.io/badge/CCXT-Pro-black)](https://ccxt.pro) | |
98
98
  | [![mexc](https://user-images.githubusercontent.com/1294454/137283979-8b2a818d-8633-461b-bfca-de89e8c446b2.jpg)](https://www.mexc.com/register?inviteCode=mexc-1FQ1GNu1) | mexc | [MEXC Global](https://www.mexc.com/register?inviteCode=mexc-1FQ1GNu1) | [![API Version 3](https://img.shields.io/badge/3-lightgray)](https://mexcdevelop.github.io/apidocs/) | ![CEX – Centralized EXchange](https://img.shields.io/badge/CEX-green.svg "CEX – Centralized EXchange") | [![CCXT Certified](https://img.shields.io/badge/CCXT-Certified-green.svg)](https://github.com/ccxt/ccxt/wiki/Certification) | [![CCXT Pro](https://img.shields.io/badge/CCXT-Pro-black)](https://ccxt.pro) | |
99
- | [![modetrade](https://github.com/user-attachments/assets/cec2b7f1-3b2b-4502-971b-447ee1937d6b)](https://trade.mode.network?ref=MODETRADE) | modetrade | [Mode Trade](https://trade.mode.network?ref=MODETRADE) | [![API Version 1](https://img.shields.io/badge/1-lightgray)](undefined) | ![DEX - Distributed EXchange](https://img.shields.io/badge/DEX-blue.svg "DEX - Distributed EXchange") | [![CCXT Certified](https://img.shields.io/badge/CCXT-Certified-green.svg)](https://github.com/ccxt/ccxt/wiki/Certification) | [![CCXT Pro](https://img.shields.io/badge/CCXT-Pro-black)](https://ccxt.pro) | [![Sign up with Mode Trade using CCXT's referral link for a 20% discount!](https://img.shields.io/static/v1?label=Fee&message=%2d20%25&color=orange)](https://trade.mode.network?ref=MODETRADE) |
100
99
  | [![okx](https://user-images.githubusercontent.com/1294454/152485636-38b19e4a-bece-4dec-979a-5982859ffc04.jpg)](https://www.okx.com/join/CCXT2023) | okx | [OKX](https://www.okx.com/join/CCXT2023) | [![API Version 5](https://img.shields.io/badge/5-lightgray)](https://www.okx.com/docs-v5/en/) | ![CEX – Centralized EXchange](https://img.shields.io/badge/CEX-green.svg "CEX – Centralized EXchange") | [![CCXT Certified](https://img.shields.io/badge/CCXT-Certified-green.svg)](https://github.com/ccxt/ccxt/wiki/Certification) | [![CCXT Pro](https://img.shields.io/badge/CCXT-Pro-black)](https://ccxt.pro) | [![Sign up with OKX using CCXT's referral link for a 20% discount!](https://img.shields.io/static/v1?label=Fee&message=%2d20%25&color=orange)](https://www.okx.com/join/CCXT2023) |
101
100
  | [![woo](https://user-images.githubusercontent.com/1294454/150730761-1a00e5e0-d28c-480f-9e65-089ce3e6ef3b.jpg)](https://woox.io/register?ref=DIJT0CNL) | woo | [WOO X](https://woox.io/register?ref=DIJT0CNL) | [![API Version 1](https://img.shields.io/badge/1-lightgray)](https://docs.woox.io/) | ![CEX – Centralized EXchange](https://img.shields.io/badge/CEX-green.svg "CEX – Centralized EXchange") | [![CCXT Certified](https://img.shields.io/badge/CCXT-Certified-green.svg)](https://github.com/ccxt/ccxt/wiki/Certification) | [![CCXT Pro](https://img.shields.io/badge/CCXT-Pro-black)](https://ccxt.pro) | [![Sign up with WOO X using CCXT's referral link for a 35% discount!](https://img.shields.io/static/v1?label=Fee&message=%2d35%25&color=orange)](https://woox.io/register?ref=DIJT0CNL) |
102
101
  | [![woofipro](https://github.com/user-attachments/assets/9ba21b8a-a9c7-4770-b7f1-ce3bcbde68c1)](https://dex.woo.org/en/trade?ref=CCXT) | woofipro | [WOOFI PRO](https://dex.woo.org/en/trade?ref=CCXT) | [![API Version 1](https://img.shields.io/badge/1-lightgray)](https://orderly.network/docs/build-on-evm/building-on-evm) | ![DEX - Distributed EXchange](https://img.shields.io/badge/DEX-blue.svg "DEX - Distributed EXchange") | [![CCXT Certified](https://img.shields.io/badge/CCXT-Certified-green.svg)](https://github.com/ccxt/ccxt/wiki/Certification) | [![CCXT Pro](https://img.shields.io/badge/CCXT-Pro-black)](https://ccxt.pro) | [![Sign up with WOOFI PRO using CCXT's referral link for a 5% discount!](https://img.shields.io/static/v1?label=Fee&message=%2d5%25&color=orange)](https://dex.woo.org/en/trade?ref=CCXT) |
103
102
 
104
103
  ## Supported Cryptocurrency Exchanges
105
- <!--- init list -->The CCXT library currently supports the following 102 cryptocurrency exchange markets and trading APIs:
104
+ <!--- init list -->The CCXT library currently supports the following 103 cryptocurrency exchange markets and trading APIs:
106
105
 
107
106
  |logo |id |name |ver |type |certified |pro |
108
107
  |-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------|----------------------------------------------------------------------------------------------|:------------------------------------------------------------------------------------------------------------------------------------------------:|--------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------|
@@ -161,6 +160,7 @@ Current feature list:
161
160
  | [![ellipx](https://github.com/user-attachments/assets/e07c3f40-281c-4cdf-bacf-fa1c58218a2c)](https://www.ellipx.com) | ellipx | [Ellipx](https://www.ellipx.com) | [![API Version 1](https://img.shields.io/badge/1-lightgray)](https://docs.google.com/document/d/1ZXzTQYffKE_EglTaKptxGQERRnunuLHEMmar7VC9syM) | ![CEX – Centralized EXchange](https://img.shields.io/badge/CEX-green.svg "CEX – Centralized EXchange") | | |
162
161
  | [![exmo](https://user-images.githubusercontent.com/1294454/27766491-1b0ea956-5eda-11e7-9225-40d67b481b8d.jpg)](https://exmo.me/?ref=131685) | exmo | [EXMO](https://exmo.me/?ref=131685) | [![API Version 1.1](https://img.shields.io/badge/1.1-lightgray)](https://exmo.me/en/api_doc?ref=131685) | ![CEX – Centralized EXchange](https://img.shields.io/badge/CEX-green.svg "CEX – Centralized EXchange") | | |
163
162
  | [![fmfwio](https://user-images.githubusercontent.com/1294454/159177712-b685b40c-5269-4cea-ac83-f7894c49525d.jpg)](https://fmfw.io/referral/da948b21d6c92d69) | fmfwio | [FMFW.io](https://fmfw.io/referral/da948b21d6c92d69) | [![API Version 3](https://img.shields.io/badge/3-lightgray)](https://api.fmfw.io/) | ![CEX – Centralized EXchange](https://img.shields.io/badge/CEX-green.svg "CEX – Centralized EXchange") | | |
163
+ | [![foxbit](https://github.com/user-attachments/assets/63be1a3a-775d-459b-8c03-493c71c0253c)](https://app.foxbit.com.br) | foxbit | [Foxbit](https://app.foxbit.com.br) | [![API Version 1](https://img.shields.io/badge/1-lightgray)](https://docs.foxbit.com.br) | ![CEX – Centralized EXchange](https://img.shields.io/badge/CEX-green.svg "CEX – Centralized EXchange") | | |
164
164
  | [![gate](https://github.com/user-attachments/assets/64f988c5-07b6-4652-b5c1-679a6bf67c85)](https://www.gate.io/signup/2436035) | gate | [Gate.io](https://www.gate.io/signup/2436035) | [![API Version 4](https://img.shields.io/badge/4-lightgray)](https://www.gate.io/docs/developers/apiv4/en/) | ![CEX – Centralized EXchange](https://img.shields.io/badge/CEX-green.svg "CEX – Centralized EXchange") | [![CCXT Certified](https://img.shields.io/badge/CCXT-Certified-green.svg)](https://github.com/ccxt/ccxt/wiki/Certification) | [![CCXT Pro](https://img.shields.io/badge/CCXT-Pro-black)](https://ccxt.pro) |
165
165
  | [![gemini](https://user-images.githubusercontent.com/1294454/27816857-ce7be644-6096-11e7-82d6-3c257263229c.jpg)](https://gemini.com/) | gemini | [Gemini](https://gemini.com/) | [![API Version 1](https://img.shields.io/badge/1-lightgray)](https://docs.gemini.com/rest-api) | ![CEX – Centralized EXchange](https://img.shields.io/badge/CEX-green.svg "CEX – Centralized EXchange") | | [![CCXT Pro](https://img.shields.io/badge/CCXT-Pro-black)](https://ccxt.pro) |
166
166
  | [![hashkey](https://github.com/user-attachments/assets/6dd6127b-cc19-4a13-9b29-a98d81f80e98)](https://global.hashkey.com/en-US/register/invite?invite_code=82FQUN) | hashkey | [HashKey Global](https://global.hashkey.com/en-US/register/invite?invite_code=82FQUN) | [![API Version 1](https://img.shields.io/badge/1-lightgray)](https://hashkeyglobal-apidoc.readme.io/) | ![CEX – Centralized EXchange](https://img.shields.io/badge/CEX-green.svg "CEX – Centralized EXchange") | [![CCXT Certified](https://img.shields.io/badge/CCXT-Certified-green.svg)](https://github.com/ccxt/ccxt/wiki/Certification) | [![CCXT Pro](https://img.shields.io/badge/CCXT-Pro-black)](https://ccxt.pro) |
@@ -179,7 +179,7 @@ Current feature list:
179
179
  | [![luno](https://user-images.githubusercontent.com/1294454/27766607-8c1a69d8-5ede-11e7-930c-540b5eb9be24.jpg)](https://www.luno.com/invite/44893A) | luno | [luno](https://www.luno.com/invite/44893A) | [![API Version 1](https://img.shields.io/badge/1-lightgray)](https://www.luno.com/en/api) | ![CEX – Centralized EXchange](https://img.shields.io/badge/CEX-green.svg "CEX – Centralized EXchange") | | [![CCXT Pro](https://img.shields.io/badge/CCXT-Pro-black)](https://ccxt.pro) |
180
180
  | [![mercado](https://user-images.githubusercontent.com/1294454/27837060-e7c58714-60ea-11e7-9192-f05e86adb83f.jpg)](https://www.mercadobitcoin.com.br) | mercado | [Mercado Bitcoin](https://www.mercadobitcoin.com.br) | [![API Version 3](https://img.shields.io/badge/3-lightgray)](https://www.mercadobitcoin.com.br/api-doc) | ![CEX – Centralized EXchange](https://img.shields.io/badge/CEX-green.svg "CEX – Centralized EXchange") | | |
181
181
  | [![mexc](https://user-images.githubusercontent.com/1294454/137283979-8b2a818d-8633-461b-bfca-de89e8c446b2.jpg)](https://www.mexc.com/register?inviteCode=mexc-1FQ1GNu1) | mexc | [MEXC Global](https://www.mexc.com/register?inviteCode=mexc-1FQ1GNu1) | [![API Version 3](https://img.shields.io/badge/3-lightgray)](https://mexcdevelop.github.io/apidocs/) | ![CEX – Centralized EXchange](https://img.shields.io/badge/CEX-green.svg "CEX – Centralized EXchange") | [![CCXT Certified](https://img.shields.io/badge/CCXT-Certified-green.svg)](https://github.com/ccxt/ccxt/wiki/Certification) | [![CCXT Pro](https://img.shields.io/badge/CCXT-Pro-black)](https://ccxt.pro) |
182
- | [![modetrade](https://github.com/user-attachments/assets/cec2b7f1-3b2b-4502-971b-447ee1937d6b)](https://trade.mode.network?ref=MODETRADE) | modetrade | [Mode Trade](https://trade.mode.network?ref=MODETRADE) | [![API Version 1](https://img.shields.io/badge/1-lightgray)](undefined) | ![DEX - Distributed EXchange](https://img.shields.io/badge/DEX-blue.svg "DEX - Distributed EXchange") | [![CCXT Certified](https://img.shields.io/badge/CCXT-Certified-green.svg)](https://github.com/ccxt/ccxt/wiki/Certification) | [![CCXT Pro](https://img.shields.io/badge/CCXT-Pro-black)](https://ccxt.pro) |
182
+ | [![modetrade](https://github.com/user-attachments/assets/cec2b7f1-3b2b-4502-971b-447ee1937d6b)](https://trade.mode.network?ref=MODETRADE) | modetrade | [Mode Trade](https://trade.mode.network?ref=MODETRADE) | [![API Version 1](https://img.shields.io/badge/1-lightgray)](undefined) | ![DEX - Distributed EXchange](https://img.shields.io/badge/DEX-blue.svg "DEX - Distributed EXchange") | | [![CCXT Pro](https://img.shields.io/badge/CCXT-Pro-black)](https://ccxt.pro) |
183
183
  | [![myokx](https://user-images.githubusercontent.com/1294454/152485636-38b19e4a-bece-4dec-979a-5982859ffc04.jpg)](https://www.my.okx.com/join/CCXT2023) | myokx | [MyOKX (EEA)](https://www.my.okx.com/join/CCXT2023) | [![API Version 5](https://img.shields.io/badge/5-lightgray)](https://my.okx.com/docs-v5/en/#overview) | ![CEX – Centralized EXchange](https://img.shields.io/badge/CEX-green.svg "CEX – Centralized EXchange") | | [![CCXT Pro](https://img.shields.io/badge/CCXT-Pro-black)](https://ccxt.pro) |
184
184
  | [![ndax](https://user-images.githubusercontent.com/1294454/108623144-67a3ef00-744e-11eb-8140-75c6b851e945.jpg)](https://one.ndax.io/bfQiSL) | ndax | [NDAX](https://one.ndax.io/bfQiSL) | [![API Version *](https://img.shields.io/badge/*-lightgray)](https://apidoc.ndax.io/) | ![CEX – Centralized EXchange](https://img.shields.io/badge/CEX-green.svg "CEX – Centralized EXchange") | | [![CCXT Pro](https://img.shields.io/badge/CCXT-Pro-black)](https://ccxt.pro) |
185
185
  | [![novadax](https://user-images.githubusercontent.com/1294454/92337550-2b085500-f0b3-11ea-98e7-5794fb07dd3b.jpg)](https://www.novadax.com.br/?s=ccxt) | novadax | [NovaDAX](https://www.novadax.com.br/?s=ccxt) | [![API Version 1](https://img.shields.io/badge/1-lightgray)](https://doc.novadax.com/pt-BR/) | ![CEX – Centralized EXchange](https://img.shields.io/badge/CEX-green.svg "CEX – Centralized EXchange") | | |
@@ -269,13 +269,13 @@ console.log(version, Object.keys(exchanges));
269
269
 
270
270
  All-in-one browser bundle (dependencies included), served from a CDN of your choice:
271
271
 
272
- * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.4.95/dist/ccxt.browser.min.js
273
- * unpkg: https://unpkg.com/ccxt@4.4.95/dist/ccxt.browser.min.js
272
+ * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.4.96/dist/ccxt.browser.min.js
273
+ * unpkg: https://unpkg.com/ccxt@4.4.96/dist/ccxt.browser.min.js
274
274
 
275
275
  CDNs are not updated in real-time and may have delays. Defaulting to the most recent version without specifying the version number is not recommended. Please, keep in mind that we are not responsible for the correct operation of those CDN servers.
276
276
 
277
277
  ```HTML
278
- <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.4.95/dist/ccxt.browser.min.js"></script>
278
+ <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.4.96/dist/ccxt.browser.min.js"></script>
279
279
  ```
280
280
 
281
281
  Creates a global `ccxt` object: