ccxt 4.3.90__py2.py3-none-any.whl → 4.3.92__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.
ccxt/__init__.py CHANGED
@@ -22,7 +22,7 @@
22
22
 
23
23
  # ----------------------------------------------------------------------------
24
24
 
25
- __version__ = '4.3.90'
25
+ __version__ = '4.3.92'
26
26
 
27
27
  # ----------------------------------------------------------------------------
28
28
 
ccxt/abstract/binance.py CHANGED
@@ -89,7 +89,7 @@ class ImplicitAPI:
89
89
  sapi_get_capital_deposit_hisrec = sapiGetCapitalDepositHisrec = Entry('capital/deposit/hisrec', 'sapi', 'GET', {'cost': 0.1})
90
90
  sapi_get_capital_deposit_subaddress = sapiGetCapitalDepositSubAddress = Entry('capital/deposit/subAddress', 'sapi', 'GET', {'cost': 0.1})
91
91
  sapi_get_capital_deposit_subhisrec = sapiGetCapitalDepositSubHisrec = Entry('capital/deposit/subHisrec', 'sapi', 'GET', {'cost': 0.1})
92
- sapi_get_capital_withdraw_history = sapiGetCapitalWithdrawHistory = Entry('capital/withdraw/history', 'sapi', 'GET', {'cost': 1800})
92
+ sapi_get_capital_withdraw_history = sapiGetCapitalWithdrawHistory = Entry('capital/withdraw/history', 'sapi', 'GET', {'cost': 2})
93
93
  sapi_get_capital_withdraw_address_list = sapiGetCapitalWithdrawAddressList = Entry('capital/withdraw/address/list', 'sapi', 'GET', {'cost': 10})
94
94
  sapi_get_capital_contract_convertible_coins = sapiGetCapitalContractConvertibleCoins = Entry('capital/contract/convertible-coins', 'sapi', 'GET', {'cost': 4.0002})
95
95
  sapi_get_convert_tradeflow = sapiGetConvertTradeFlow = Entry('convert/tradeFlow', 'sapi', 'GET', {'cost': 20.001})
@@ -89,7 +89,7 @@ class ImplicitAPI:
89
89
  sapi_get_capital_deposit_hisrec = sapiGetCapitalDepositHisrec = Entry('capital/deposit/hisrec', 'sapi', 'GET', {'cost': 0.1})
90
90
  sapi_get_capital_deposit_subaddress = sapiGetCapitalDepositSubAddress = Entry('capital/deposit/subAddress', 'sapi', 'GET', {'cost': 0.1})
91
91
  sapi_get_capital_deposit_subhisrec = sapiGetCapitalDepositSubHisrec = Entry('capital/deposit/subHisrec', 'sapi', 'GET', {'cost': 0.1})
92
- sapi_get_capital_withdraw_history = sapiGetCapitalWithdrawHistory = Entry('capital/withdraw/history', 'sapi', 'GET', {'cost': 1800})
92
+ sapi_get_capital_withdraw_history = sapiGetCapitalWithdrawHistory = Entry('capital/withdraw/history', 'sapi', 'GET', {'cost': 2})
93
93
  sapi_get_capital_withdraw_address_list = sapiGetCapitalWithdrawAddressList = Entry('capital/withdraw/address/list', 'sapi', 'GET', {'cost': 10})
94
94
  sapi_get_capital_contract_convertible_coins = sapiGetCapitalContractConvertibleCoins = Entry('capital/contract/convertible-coins', 'sapi', 'GET', {'cost': 4.0002})
95
95
  sapi_get_convert_tradeflow = sapiGetConvertTradeFlow = Entry('convert/tradeFlow', 'sapi', 'GET', {'cost': 20.001})
@@ -89,7 +89,7 @@ class ImplicitAPI:
89
89
  sapi_get_capital_deposit_hisrec = sapiGetCapitalDepositHisrec = Entry('capital/deposit/hisrec', 'sapi', 'GET', {'cost': 0.1})
90
90
  sapi_get_capital_deposit_subaddress = sapiGetCapitalDepositSubAddress = Entry('capital/deposit/subAddress', 'sapi', 'GET', {'cost': 0.1})
91
91
  sapi_get_capital_deposit_subhisrec = sapiGetCapitalDepositSubHisrec = Entry('capital/deposit/subHisrec', 'sapi', 'GET', {'cost': 0.1})
92
- sapi_get_capital_withdraw_history = sapiGetCapitalWithdrawHistory = Entry('capital/withdraw/history', 'sapi', 'GET', {'cost': 1800})
92
+ sapi_get_capital_withdraw_history = sapiGetCapitalWithdrawHistory = Entry('capital/withdraw/history', 'sapi', 'GET', {'cost': 2})
93
93
  sapi_get_capital_withdraw_address_list = sapiGetCapitalWithdrawAddressList = Entry('capital/withdraw/address/list', 'sapi', 'GET', {'cost': 10})
94
94
  sapi_get_capital_contract_convertible_coins = sapiGetCapitalContractConvertibleCoins = Entry('capital/contract/convertible-coins', 'sapi', 'GET', {'cost': 4.0002})
95
95
  sapi_get_convert_tradeflow = sapiGetConvertTradeFlow = Entry('convert/tradeFlow', 'sapi', 'GET', {'cost': 20.001})
@@ -89,7 +89,7 @@ class ImplicitAPI:
89
89
  sapi_get_capital_deposit_hisrec = sapiGetCapitalDepositHisrec = Entry('capital/deposit/hisrec', 'sapi', 'GET', {'cost': 0.1})
90
90
  sapi_get_capital_deposit_subaddress = sapiGetCapitalDepositSubAddress = Entry('capital/deposit/subAddress', 'sapi', 'GET', {'cost': 0.1})
91
91
  sapi_get_capital_deposit_subhisrec = sapiGetCapitalDepositSubHisrec = Entry('capital/deposit/subHisrec', 'sapi', 'GET', {'cost': 0.1})
92
- sapi_get_capital_withdraw_history = sapiGetCapitalWithdrawHistory = Entry('capital/withdraw/history', 'sapi', 'GET', {'cost': 1800})
92
+ sapi_get_capital_withdraw_history = sapiGetCapitalWithdrawHistory = Entry('capital/withdraw/history', 'sapi', 'GET', {'cost': 2})
93
93
  sapi_get_capital_withdraw_address_list = sapiGetCapitalWithdrawAddressList = Entry('capital/withdraw/address/list', 'sapi', 'GET', {'cost': 10})
94
94
  sapi_get_capital_contract_convertible_coins = sapiGetCapitalContractConvertibleCoins = Entry('capital/contract/convertible-coins', 'sapi', 'GET', {'cost': 4.0002})
95
95
  sapi_get_convert_tradeflow = sapiGetConvertTradeFlow = Entry('convert/tradeFlow', 'sapi', 'GET', {'cost': 20.001})
ccxt/abstract/kucoin.py CHANGED
@@ -88,6 +88,7 @@ class ImplicitAPI:
88
88
  private_get_redeem_orders = privateGetRedeemOrders = Entry('redeem/orders', 'private', 'GET', {'cost': 10})
89
89
  private_get_purchase_orders = privateGetPurchaseOrders = Entry('purchase/orders', 'private', 'GET', {'cost': 10})
90
90
  private_get_broker_api_rebase_download = privateGetBrokerApiRebaseDownload = Entry('broker/api/rebase/download', 'private', 'GET', {'cost': 3})
91
+ private_get_migrate_user_account_status = privateGetMigrateUserAccountStatus = Entry('migrate/user/account/status', 'private', 'GET', {'cost': 3})
91
92
  private_get_affiliate_inviter_statistics = privateGetAffiliateInviterStatistics = Entry('affiliate/inviter/statistics', 'private', 'GET', {'cost': 30})
92
93
  private_post_sub_user_created = privatePostSubUserCreated = Entry('sub/user/created', 'private', 'POST', {'cost': 22.5})
93
94
  private_post_sub_api_key = privatePostSubApiKey = Entry('sub/api-key', 'private', 'POST', {'cost': 30})
@@ -88,6 +88,7 @@ class ImplicitAPI:
88
88
  private_get_redeem_orders = privateGetRedeemOrders = Entry('redeem/orders', 'private', 'GET', {'cost': 10})
89
89
  private_get_purchase_orders = privateGetPurchaseOrders = Entry('purchase/orders', 'private', 'GET', {'cost': 10})
90
90
  private_get_broker_api_rebase_download = privateGetBrokerApiRebaseDownload = Entry('broker/api/rebase/download', 'private', 'GET', {'cost': 3})
91
+ private_get_migrate_user_account_status = privateGetMigrateUserAccountStatus = Entry('migrate/user/account/status', 'private', 'GET', {'cost': 3})
91
92
  private_get_affiliate_inviter_statistics = privateGetAffiliateInviterStatistics = Entry('affiliate/inviter/statistics', 'private', 'GET', {'cost': 30})
92
93
  private_post_sub_user_created = privatePostSubUserCreated = Entry('sub/user/created', 'private', 'POST', {'cost': 22.5})
93
94
  private_post_sub_api_key = privatePostSubApiKey = Entry('sub/api-key', 'private', 'POST', {'cost': 30})
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.3.90'
7
+ __version__ = '4.3.92'
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # -----------------------------------------------------------------------------
4
4
 
5
- __version__ = '4.3.90'
5
+ __version__ = '4.3.92'
6
6
 
7
7
  # -----------------------------------------------------------------------------
8
8
 
@@ -354,7 +354,7 @@ class binance(Exchange, ImplicitAPI):
354
354
  'capital/deposit/hisrec': 0.1,
355
355
  'capital/deposit/subAddress': 0.1,
356
356
  'capital/deposit/subHisrec': 0.1,
357
- 'capital/withdraw/history': 1800, # Weight(IP): 18000 => cost = 0.1 * 18000 = 1800
357
+ 'capital/withdraw/history': 2, # Weight(UID): 18000 + (Additional: 10 requests per second => cost = ( 1000 / rateLimit ) / 10 = 2
358
358
  'capital/withdraw/address/list': 10,
359
359
  'capital/contract/convertible-coins': 4.0002, # Weight(UID): 600 => cost = 0.006667 * 600 = 4.0002
360
360
  'convert/tradeFlow': 20.001, # Weight(UID): 3000 => cost = 0.006667 * 3000 = 20.001
@@ -1369,6 +1369,7 @@ class hitbtc(Exchange, ImplicitAPI):
1369
1369
 
1370
1370
  def parse_transaction_status(self, status: Str):
1371
1371
  statuses: dict = {
1372
+ 'CREATED': 'pending',
1372
1373
  'PENDING': 'pending',
1373
1374
  'FAILED': 'failed',
1374
1375
  'ROLLED_BACK': 'failed',
@@ -1694,9 +1694,10 @@ class hyperliquid(Exchange, ImplicitAPI):
1694
1694
  userAddress, params = self.handle_public_address('fetchOrder', params)
1695
1695
  await self.load_markets()
1696
1696
  market = self.safe_market(symbol)
1697
+ isClientOrderId = len(id) >= 34
1697
1698
  request: dict = {
1698
1699
  'type': 'orderStatus',
1699
- 'oid': self.parse_to_numeric(id),
1700
+ 'oid': id if isClientOrderId else self.parse_to_numeric(id),
1700
1701
  'user': userAddress,
1701
1702
  }
1702
1703
  response = await self.publicPostInfo(self.extend(request, params))
@@ -9,7 +9,7 @@ import asyncio
9
9
  import hashlib
10
10
  import math
11
11
  import json
12
- from ccxt.base.types import Account, Balances, Currencies, Currency, Int, Market, Num, Order, OrderBook, OrderRequest, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFeeInterface, Transaction, TransferEntry
12
+ from ccxt.base.types import Account, Balances, Bool, Currencies, Currency, Int, Market, Num, Order, OrderBook, OrderRequest, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFeeInterface, Transaction, TransferEntry
13
13
  from typing import List
14
14
  from ccxt.base.errors import ExchangeError
15
15
  from ccxt.base.errors import AuthenticationError
@@ -261,6 +261,7 @@ class kucoin(Exchange, ImplicitAPI):
261
261
  'purchase/orders': 10, # 10SW
262
262
  # broker
263
263
  'broker/api/rebase/download': 3,
264
+ 'migrate/user/account/status': 3,
264
265
  # affiliate
265
266
  'affiliate/inviter/statistics': 30,
266
267
  },
@@ -705,6 +706,7 @@ class kucoin(Exchange, ImplicitAPI):
705
706
  'project/marketInterestRate': 'v3',
706
707
  'redeem/orders': 'v3',
707
708
  'purchase/orders': 'v3',
709
+ 'migrate/user/account/status': 'v3',
708
710
  'margin/symbols': 'v3',
709
711
  'affiliate/inviter/statistics': 'v2',
710
712
  'asset/ndbroker/deposit/list': 'v1',
@@ -1219,6 +1221,26 @@ class kucoin(Exchange, ImplicitAPI):
1219
1221
  })
1220
1222
  return result
1221
1223
 
1224
+ async def load_migration_status(self, force: bool = False):
1225
+ if not ('hfMigrated' in self.options) or (self.options['hfMigrated'] is None) or force:
1226
+ result: dict = await self.privateGetMigrateUserAccountStatus()
1227
+ data: dict = self.safe_dict(result, 'data', {})
1228
+ status: Int = self.safe_integer(data, 'status')
1229
+ self.options['hfMigrated'] = (status == 2)
1230
+
1231
+ async def handle_hf_and_params(self, params={}):
1232
+ await self.load_migration_status()
1233
+ migrated: Bool = self.safe_bool(self.options, 'hfMigrated')
1234
+ loadedHf: Bool = None
1235
+ if migrated is not None:
1236
+ if migrated:
1237
+ loadedHf = True
1238
+ else:
1239
+ loadedHf = False
1240
+ hf: Bool = self.safe_bool(params, 'hf', loadedHf)
1241
+ params = self.omit(params, 'hf')
1242
+ return [hf, params]
1243
+
1222
1244
  async def fetch_currencies(self, params={}) -> Currencies:
1223
1245
  """
1224
1246
  fetches all available currencies on an exchange
@@ -1733,7 +1755,8 @@ class kucoin(Exchange, ImplicitAPI):
1733
1755
  # }
1734
1756
  # }
1735
1757
  #
1736
- return self.parse_ticker(response['data'], market)
1758
+ data = self.safe_dict(response, 'data', {})
1759
+ return self.parse_ticker(data, market)
1737
1760
 
1738
1761
  def parse_ohlcv(self, ohlcv, market: Market = None) -> list:
1739
1762
  #
@@ -2042,7 +2065,8 @@ class kucoin(Exchange, ImplicitAPI):
2042
2065
  market = self.market(symbol)
2043
2066
  testOrder = self.safe_bool(params, 'test', False)
2044
2067
  params = self.omit(params, 'test')
2045
- isHf = self.safe_bool(params, 'hf', False)
2068
+ hf = None
2069
+ hf, params = await self.handle_hf_and_params(params)
2046
2070
  triggerPrice, stopLossPrice, takeProfitPrice = self.handle_trigger_prices(params)
2047
2071
  tradeType = self.safe_string(params, 'tradeType') # keep it for backward compatibility
2048
2072
  isTriggerOrder = (triggerPrice or stopLossPrice or takeProfitPrice)
@@ -2055,14 +2079,16 @@ class kucoin(Exchange, ImplicitAPI):
2055
2079
  if testOrder:
2056
2080
  if isMarginOrder:
2057
2081
  response = await self.privatePostMarginOrderTest(orderRequest)
2082
+ elif hf:
2083
+ response = await self.privatePostHfOrdersTest(orderRequest)
2058
2084
  else:
2059
2085
  response = await self.privatePostOrdersTest(orderRequest)
2060
- elif isHf:
2061
- response = await self.privatePostHfOrders(orderRequest)
2062
2086
  elif isTriggerOrder:
2063
2087
  response = await self.privatePostStopOrder(orderRequest)
2064
2088
  elif isMarginOrder:
2065
2089
  response = await self.privatePostMarginOrder(orderRequest)
2090
+ elif hf:
2091
+ response = await self.privatePostHfOrders(orderRequest)
2066
2092
  else:
2067
2093
  response = await self.privatePostOrders(orderRequest)
2068
2094
  #
@@ -2149,8 +2175,8 @@ class kucoin(Exchange, ImplicitAPI):
2149
2175
  'symbol': market['id'],
2150
2176
  'orderList': ordersRequests,
2151
2177
  }
2152
- hf = self.safe_bool(params, 'hf', False)
2153
- params = self.omit(params, 'hf')
2178
+ hf = None
2179
+ hf, params = await self.handle_hf_and_params(params)
2154
2180
  response = None
2155
2181
  if hf:
2156
2182
  response = await self.privatePostHfOrdersMulti(self.extend(request, params))
@@ -2314,14 +2340,15 @@ class kucoin(Exchange, ImplicitAPI):
2314
2340
  request: dict = {}
2315
2341
  clientOrderId = self.safe_string_2(params, 'clientOid', 'clientOrderId')
2316
2342
  stop = self.safe_bool_2(params, 'stop', 'trigger', False)
2317
- hf = self.safe_bool(params, 'hf', False)
2343
+ hf = None
2344
+ hf, params = await self.handle_hf_and_params(params)
2318
2345
  if hf:
2319
2346
  if symbol is None:
2320
2347
  raise ArgumentsRequired(self.id + ' cancelOrder() requires a symbol parameter for hf orders')
2321
2348
  market = self.market(symbol)
2322
2349
  request['symbol'] = market['id']
2323
2350
  response = None
2324
- params = self.omit(params, ['clientOid', 'clientOrderId', 'stop', 'hf', 'trigger'])
2351
+ params = self.omit(params, ['clientOid', 'clientOrderId', 'stop', 'trigger'])
2325
2352
  if clientOrderId is not None:
2326
2353
  request['clientOid'] = clientOrderId
2327
2354
  if stop:
@@ -2415,8 +2442,9 @@ class kucoin(Exchange, ImplicitAPI):
2415
2442
  await self.load_markets()
2416
2443
  request: dict = {}
2417
2444
  stop = self.safe_bool(params, 'stop', False)
2418
- hf = self.safe_bool(params, 'hf', False)
2419
- params = self.omit(params, ['stop', 'hf'])
2445
+ hf = None
2446
+ hf, params = await self.handle_hf_and_params(params)
2447
+ params = self.omit(params, 'stop')
2420
2448
  marginMode, query = self.handle_margin_mode_and_params('cancelAllOrders', params)
2421
2449
  if symbol is not None:
2422
2450
  request['symbol'] = self.market_id(symbol)
@@ -2463,8 +2491,11 @@ class kucoin(Exchange, ImplicitAPI):
2463
2491
  lowercaseStatus = status.lower()
2464
2492
  until = self.safe_integer(params, 'until')
2465
2493
  stop = self.safe_bool_2(params, 'stop', 'trigger', False)
2466
- hf = self.safe_bool(params, 'hf', False)
2467
- params = self.omit(params, ['stop', 'hf', 'until', 'trigger'])
2494
+ hf = None
2495
+ hf, params = await self.handle_hf_and_params(params)
2496
+ if hf and (symbol is None):
2497
+ raise ArgumentsRequired(self.id + ' fetchOrdersByStatus() requires a symbol parameter for hf orders')
2498
+ params = self.omit(params, ['stop', 'trigger', 'till', 'until'])
2468
2499
  marginMode, query = self.handle_margin_mode_and_params('fetchOrdersByStatus', params)
2469
2500
  if lowercaseStatus == 'open':
2470
2501
  lowercaseStatus = 'active'
@@ -2622,7 +2653,8 @@ class kucoin(Exchange, ImplicitAPI):
2622
2653
  request: dict = {}
2623
2654
  clientOrderId = self.safe_string_2(params, 'clientOid', 'clientOrderId')
2624
2655
  stop = self.safe_bool_2(params, 'stop', 'trigger', False)
2625
- hf = self.safe_bool(params, 'hf', False)
2656
+ hf = None
2657
+ hf, params = await self.handle_hf_and_params(params)
2626
2658
  market = None
2627
2659
  if symbol is not None:
2628
2660
  market = self.market(symbol)
@@ -2630,7 +2662,7 @@ class kucoin(Exchange, ImplicitAPI):
2630
2662
  if symbol is None:
2631
2663
  raise ArgumentsRequired(self.id + ' fetchOrder() requires a symbol parameter for hf orders')
2632
2664
  request['symbol'] = market['id']
2633
- params = self.omit(params, ['stop', 'hf', 'clientOid', 'clientOrderId', 'trigger'])
2665
+ params = self.omit(params, ['stop', 'clientOid', 'clientOrderId', 'trigger'])
2634
2666
  response = None
2635
2667
  if clientOrderId is not None:
2636
2668
  request['clientOid'] = clientOrderId
@@ -2872,7 +2904,8 @@ class kucoin(Exchange, ImplicitAPI):
2872
2904
  if paginate:
2873
2905
  return await self.fetch_paginated_call_dynamic('fetchMyTrades', symbol, since, limit, params)
2874
2906
  request: dict = {}
2875
- hf = self.safe_bool(params, 'hf', False)
2907
+ hf = None
2908
+ hf, params = await self.handle_hf_and_params(params)
2876
2909
  if hf and symbol is None:
2877
2910
  raise ArgumentsRequired(self.id + ' fetchMyTrades() requires a symbol parameter for hf orders')
2878
2911
  market = None
@@ -3432,8 +3465,9 @@ class kucoin(Exchange, ImplicitAPI):
3432
3465
  # }
3433
3466
  # }
3434
3467
  #
3435
- responseData = response['data']['items']
3436
- return self.parse_transactions(responseData, currency, since, limit, {'type': 'deposit'})
3468
+ data = self.safe_dict(response, 'data', {})
3469
+ items = self.safe_list(data, 'items', [])
3470
+ return self.parse_transactions(items, currency, since, limit, {'type': 'deposit'})
3437
3471
 
3438
3472
  async def fetch_withdrawals(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
3439
3473
  """
@@ -3509,8 +3543,9 @@ class kucoin(Exchange, ImplicitAPI):
3509
3543
  # }
3510
3544
  # }
3511
3545
  #
3512
- responseData = response['data']['items']
3513
- return self.parse_transactions(responseData, currency, since, limit, {'type': 'withdrawal'})
3546
+ data = self.safe_dict(response, 'data', {})
3547
+ items = self.safe_list(data, 'items', [])
3548
+ return self.parse_transactions(items, currency, since, limit, {'type': 'withdrawal'})
3514
3549
 
3515
3550
  def parse_balance_helper(self, entry):
3516
3551
  account = self.account()
@@ -3544,10 +3579,10 @@ class kucoin(Exchange, ImplicitAPI):
3544
3579
  accountsByType = self.safe_dict(self.options, 'accountsByType')
3545
3580
  type = self.safe_string(accountsByType, requestedType, requestedType)
3546
3581
  params = self.omit(params, 'type')
3547
- isHf = self.safe_bool(params, 'hf', False)
3548
- if isHf:
3582
+ hf = None
3583
+ hf, params = await self.handle_hf_and_params(params)
3584
+ if hf:
3549
3585
  type = 'trade_hf'
3550
- params = self.omit(params, 'hf')
3551
3586
  marginMode, query = self.handle_margin_mode_and_params('fetchBalance', params)
3552
3587
  response = None
3553
3588
  request: dict = {}
@@ -3973,8 +4008,8 @@ class kucoin(Exchange, ImplicitAPI):
3973
4008
  await self.load_accounts()
3974
4009
  paginate = False
3975
4010
  paginate, params = self.handle_option_and_params(params, 'fetchLedger', 'paginate')
3976
- isHf = self.safe_bool(params, 'hf')
3977
- params = self.omit(params, 'hf')
4011
+ hf = None
4012
+ hf, params = await self.handle_hf_and_params(params)
3978
4013
  if paginate:
3979
4014
  return await self.fetch_paginated_call_dynamic('fetchLedger', code, since, limit, params)
3980
4015
  request: dict = {
@@ -3995,7 +4030,7 @@ class kucoin(Exchange, ImplicitAPI):
3995
4030
  marginMode = None
3996
4031
  marginMode, params = self.handle_margin_mode_and_params('fetchLedger', params)
3997
4032
  response = None
3998
- if isHf:
4033
+ if hf:
3999
4034
  if marginMode is not None:
4000
4035
  response = await self.privateGetHfMarginAccountLedgers(self.extend(request, params))
4001
4036
  else:
@@ -4314,7 +4349,7 @@ class kucoin(Exchange, ImplicitAPI):
4314
4349
  # }
4315
4350
  #
4316
4351
  data = self.safe_dict(response, 'data')
4317
- rows = self.safe_list(data, 'items')
4352
+ rows = self.safe_list(data, 'items', [])
4318
4353
  return self.parse_borrow_rate_histories(rows, codes, since, limit)
4319
4354
 
4320
4355
  async def fetch_borrow_rate_history(self, code: str, since: Int = None, limit: Int = None, params={}):
@@ -4365,7 +4400,7 @@ class kucoin(Exchange, ImplicitAPI):
4365
4400
  # }
4366
4401
  #
4367
4402
  data = self.safe_dict(response, 'data')
4368
- rows = self.safe_list(data, 'items')
4403
+ rows = self.safe_list(data, 'items', [])
4369
4404
  return self.parse_borrow_rate_history(rows, code, since, limit)
4370
4405
 
4371
4406
  def parse_borrow_rate_histories(self, response, codes, since, limit):
@@ -61,6 +61,7 @@ class kucoinfutures(kucoin, ImplicitAPI):
61
61
  'createTriggerOrder': True,
62
62
  'fetchAccounts': True,
63
63
  'fetchBalance': True,
64
+ 'fetchBidsAsks': True,
64
65
  'fetchBorrowRateHistories': False,
65
66
  'fetchBorrowRateHistory': False,
66
67
  'fetchClosedOrders': True,
@@ -752,11 +753,18 @@ class kucoinfutures(kucoin, ImplicitAPI):
752
753
  :see: https://www.kucoin.com/docs/rest/futures-trading/market-data/get-symbols-list
753
754
  :param str[] [symbols]: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
754
755
  :param dict [params]: extra parameters specific to the exchange API endpoint
756
+ :param str [params.method]: the method to use, futuresPublicGetAllTickers or futuresPublicGetContractsActive
755
757
  :returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
756
758
  """
757
759
  await self.load_markets()
758
760
  symbols = self.market_symbols(symbols)
759
- response = await self.futuresPublicGetContractsActive(params)
761
+ method = None
762
+ method, params = self.handle_option_and_params(params, 'fetchTickers', 'method', 'futuresPublicGetContractsActive')
763
+ response: dict = None
764
+ if method == 'futuresPublicGetAllTickers':
765
+ response = await self.futuresPublicGetAllTickers(params)
766
+ else:
767
+ response = await self.futuresPublicGetContractsActive(params)
760
768
  #
761
769
  # {
762
770
  # "code": "200000",
@@ -819,7 +827,7 @@ class kucoinfutures(kucoin, ImplicitAPI):
819
827
  # }
820
828
  # }
821
829
  #
822
- data = self.safe_list(response, 'data', [])
830
+ data = self.safe_list(response, 'data')
823
831
  tickers = self.parse_tickers(data, symbols)
824
832
  return self.filter_by_array_tickers(tickers, 'symbol', symbols)
825
833
 
@@ -929,6 +937,18 @@ class kucoinfutures(kucoin, ImplicitAPI):
929
937
  'info': ticker,
930
938
  }, market)
931
939
 
940
+ async def fetch_bids_asks(self, symbols: Strings = None, params={}):
941
+ """
942
+ fetches the bid and ask price and volume for multiple markets
943
+ :param str[] [symbols]: unified symbols of the markets to fetch the bids and asks for, all markets are returned if not assigned
944
+ :param dict [params]: extra parameters specific to the exchange API endpoint
945
+ :returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
946
+ """
947
+ request = {
948
+ 'method': 'futuresPublicGetAllTickers',
949
+ }
950
+ return await self.fetch_tickers(symbols, self.extend(request, params))
951
+
932
952
  async def fetch_funding_history(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
933
953
  """
934
954
  fetch the history of funding payments paid and received on self account
ccxt/async_support/woo.py CHANGED
@@ -481,7 +481,7 @@ class woo(Exchange, ImplicitAPI):
481
481
  'swap': swap,
482
482
  'future': False,
483
483
  'option': False,
484
- 'active': None,
484
+ 'active': self.safe_string(market, 'is_trading') == '1',
485
485
  'contract': contract,
486
486
  'linear': linear,
487
487
  'inverse': None,
ccxt/base/exchange.py CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.3.90'
7
+ __version__ = '4.3.92'
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
ccxt/binance.py CHANGED
@@ -353,7 +353,7 @@ class binance(Exchange, ImplicitAPI):
353
353
  'capital/deposit/hisrec': 0.1,
354
354
  'capital/deposit/subAddress': 0.1,
355
355
  'capital/deposit/subHisrec': 0.1,
356
- 'capital/withdraw/history': 1800, # Weight(IP): 18000 => cost = 0.1 * 18000 = 1800
356
+ 'capital/withdraw/history': 2, # Weight(UID): 18000 + (Additional: 10 requests per second => cost = ( 1000 / rateLimit ) / 10 = 2
357
357
  'capital/withdraw/address/list': 10,
358
358
  'capital/contract/convertible-coins': 4.0002, # Weight(UID): 600 => cost = 0.006667 * 600 = 4.0002
359
359
  'convert/tradeFlow': 20.001, # Weight(UID): 3000 => cost = 0.006667 * 3000 = 20.001
ccxt/hitbtc.py CHANGED
@@ -1369,6 +1369,7 @@ class hitbtc(Exchange, ImplicitAPI):
1369
1369
 
1370
1370
  def parse_transaction_status(self, status: Str):
1371
1371
  statuses: dict = {
1372
+ 'CREATED': 'pending',
1372
1373
  'PENDING': 'pending',
1373
1374
  'FAILED': 'failed',
1374
1375
  'ROLLED_BACK': 'failed',
ccxt/hyperliquid.py CHANGED
@@ -1693,9 +1693,10 @@ class hyperliquid(Exchange, ImplicitAPI):
1693
1693
  userAddress, params = self.handle_public_address('fetchOrder', params)
1694
1694
  self.load_markets()
1695
1695
  market = self.safe_market(symbol)
1696
+ isClientOrderId = len(id) >= 34
1696
1697
  request: dict = {
1697
1698
  'type': 'orderStatus',
1698
- 'oid': self.parse_to_numeric(id),
1699
+ 'oid': id if isClientOrderId else self.parse_to_numeric(id),
1699
1700
  'user': userAddress,
1700
1701
  }
1701
1702
  response = self.publicPostInfo(self.extend(request, params))
ccxt/kucoin.py CHANGED
@@ -8,7 +8,7 @@ from ccxt.abstract.kucoin import ImplicitAPI
8
8
  import hashlib
9
9
  import math
10
10
  import json
11
- from ccxt.base.types import Account, Balances, Currencies, Currency, Int, Market, Num, Order, OrderBook, OrderRequest, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFeeInterface, Transaction, TransferEntry
11
+ from ccxt.base.types import Account, Balances, Bool, Currencies, Currency, Int, Market, Num, Order, OrderBook, OrderRequest, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFeeInterface, Transaction, TransferEntry
12
12
  from typing import List
13
13
  from ccxt.base.errors import ExchangeError
14
14
  from ccxt.base.errors import AuthenticationError
@@ -260,6 +260,7 @@ class kucoin(Exchange, ImplicitAPI):
260
260
  'purchase/orders': 10, # 10SW
261
261
  # broker
262
262
  'broker/api/rebase/download': 3,
263
+ 'migrate/user/account/status': 3,
263
264
  # affiliate
264
265
  'affiliate/inviter/statistics': 30,
265
266
  },
@@ -704,6 +705,7 @@ class kucoin(Exchange, ImplicitAPI):
704
705
  'project/marketInterestRate': 'v3',
705
706
  'redeem/orders': 'v3',
706
707
  'purchase/orders': 'v3',
708
+ 'migrate/user/account/status': 'v3',
707
709
  'margin/symbols': 'v3',
708
710
  'affiliate/inviter/statistics': 'v2',
709
711
  'asset/ndbroker/deposit/list': 'v1',
@@ -1218,6 +1220,26 @@ class kucoin(Exchange, ImplicitAPI):
1218
1220
  })
1219
1221
  return result
1220
1222
 
1223
+ def load_migration_status(self, force: bool = False):
1224
+ if not ('hfMigrated' in self.options) or (self.options['hfMigrated'] is None) or force:
1225
+ result: dict = self.privateGetMigrateUserAccountStatus()
1226
+ data: dict = self.safe_dict(result, 'data', {})
1227
+ status: Int = self.safe_integer(data, 'status')
1228
+ self.options['hfMigrated'] = (status == 2)
1229
+
1230
+ def handle_hf_and_params(self, params={}):
1231
+ self.load_migration_status()
1232
+ migrated: Bool = self.safe_bool(self.options, 'hfMigrated')
1233
+ loadedHf: Bool = None
1234
+ if migrated is not None:
1235
+ if migrated:
1236
+ loadedHf = True
1237
+ else:
1238
+ loadedHf = False
1239
+ hf: Bool = self.safe_bool(params, 'hf', loadedHf)
1240
+ params = self.omit(params, 'hf')
1241
+ return [hf, params]
1242
+
1221
1243
  def fetch_currencies(self, params={}) -> Currencies:
1222
1244
  """
1223
1245
  fetches all available currencies on an exchange
@@ -1732,7 +1754,8 @@ class kucoin(Exchange, ImplicitAPI):
1732
1754
  # }
1733
1755
  # }
1734
1756
  #
1735
- return self.parse_ticker(response['data'], market)
1757
+ data = self.safe_dict(response, 'data', {})
1758
+ return self.parse_ticker(data, market)
1736
1759
 
1737
1760
  def parse_ohlcv(self, ohlcv, market: Market = None) -> list:
1738
1761
  #
@@ -2041,7 +2064,8 @@ class kucoin(Exchange, ImplicitAPI):
2041
2064
  market = self.market(symbol)
2042
2065
  testOrder = self.safe_bool(params, 'test', False)
2043
2066
  params = self.omit(params, 'test')
2044
- isHf = self.safe_bool(params, 'hf', False)
2067
+ hf = None
2068
+ hf, params = self.handle_hf_and_params(params)
2045
2069
  triggerPrice, stopLossPrice, takeProfitPrice = self.handle_trigger_prices(params)
2046
2070
  tradeType = self.safe_string(params, 'tradeType') # keep it for backward compatibility
2047
2071
  isTriggerOrder = (triggerPrice or stopLossPrice or takeProfitPrice)
@@ -2054,14 +2078,16 @@ class kucoin(Exchange, ImplicitAPI):
2054
2078
  if testOrder:
2055
2079
  if isMarginOrder:
2056
2080
  response = self.privatePostMarginOrderTest(orderRequest)
2081
+ elif hf:
2082
+ response = self.privatePostHfOrdersTest(orderRequest)
2057
2083
  else:
2058
2084
  response = self.privatePostOrdersTest(orderRequest)
2059
- elif isHf:
2060
- response = self.privatePostHfOrders(orderRequest)
2061
2085
  elif isTriggerOrder:
2062
2086
  response = self.privatePostStopOrder(orderRequest)
2063
2087
  elif isMarginOrder:
2064
2088
  response = self.privatePostMarginOrder(orderRequest)
2089
+ elif hf:
2090
+ response = self.privatePostHfOrders(orderRequest)
2065
2091
  else:
2066
2092
  response = self.privatePostOrders(orderRequest)
2067
2093
  #
@@ -2148,8 +2174,8 @@ class kucoin(Exchange, ImplicitAPI):
2148
2174
  'symbol': market['id'],
2149
2175
  'orderList': ordersRequests,
2150
2176
  }
2151
- hf = self.safe_bool(params, 'hf', False)
2152
- params = self.omit(params, 'hf')
2177
+ hf = None
2178
+ hf, params = self.handle_hf_and_params(params)
2153
2179
  response = None
2154
2180
  if hf:
2155
2181
  response = self.privatePostHfOrdersMulti(self.extend(request, params))
@@ -2313,14 +2339,15 @@ class kucoin(Exchange, ImplicitAPI):
2313
2339
  request: dict = {}
2314
2340
  clientOrderId = self.safe_string_2(params, 'clientOid', 'clientOrderId')
2315
2341
  stop = self.safe_bool_2(params, 'stop', 'trigger', False)
2316
- hf = self.safe_bool(params, 'hf', False)
2342
+ hf = None
2343
+ hf, params = self.handle_hf_and_params(params)
2317
2344
  if hf:
2318
2345
  if symbol is None:
2319
2346
  raise ArgumentsRequired(self.id + ' cancelOrder() requires a symbol parameter for hf orders')
2320
2347
  market = self.market(symbol)
2321
2348
  request['symbol'] = market['id']
2322
2349
  response = None
2323
- params = self.omit(params, ['clientOid', 'clientOrderId', 'stop', 'hf', 'trigger'])
2350
+ params = self.omit(params, ['clientOid', 'clientOrderId', 'stop', 'trigger'])
2324
2351
  if clientOrderId is not None:
2325
2352
  request['clientOid'] = clientOrderId
2326
2353
  if stop:
@@ -2414,8 +2441,9 @@ class kucoin(Exchange, ImplicitAPI):
2414
2441
  self.load_markets()
2415
2442
  request: dict = {}
2416
2443
  stop = self.safe_bool(params, 'stop', False)
2417
- hf = self.safe_bool(params, 'hf', False)
2418
- params = self.omit(params, ['stop', 'hf'])
2444
+ hf = None
2445
+ hf, params = self.handle_hf_and_params(params)
2446
+ params = self.omit(params, 'stop')
2419
2447
  marginMode, query = self.handle_margin_mode_and_params('cancelAllOrders', params)
2420
2448
  if symbol is not None:
2421
2449
  request['symbol'] = self.market_id(symbol)
@@ -2462,8 +2490,11 @@ class kucoin(Exchange, ImplicitAPI):
2462
2490
  lowercaseStatus = status.lower()
2463
2491
  until = self.safe_integer(params, 'until')
2464
2492
  stop = self.safe_bool_2(params, 'stop', 'trigger', False)
2465
- hf = self.safe_bool(params, 'hf', False)
2466
- params = self.omit(params, ['stop', 'hf', 'until', 'trigger'])
2493
+ hf = None
2494
+ hf, params = self.handle_hf_and_params(params)
2495
+ if hf and (symbol is None):
2496
+ raise ArgumentsRequired(self.id + ' fetchOrdersByStatus() requires a symbol parameter for hf orders')
2497
+ params = self.omit(params, ['stop', 'trigger', 'till', 'until'])
2467
2498
  marginMode, query = self.handle_margin_mode_and_params('fetchOrdersByStatus', params)
2468
2499
  if lowercaseStatus == 'open':
2469
2500
  lowercaseStatus = 'active'
@@ -2621,7 +2652,8 @@ class kucoin(Exchange, ImplicitAPI):
2621
2652
  request: dict = {}
2622
2653
  clientOrderId = self.safe_string_2(params, 'clientOid', 'clientOrderId')
2623
2654
  stop = self.safe_bool_2(params, 'stop', 'trigger', False)
2624
- hf = self.safe_bool(params, 'hf', False)
2655
+ hf = None
2656
+ hf, params = self.handle_hf_and_params(params)
2625
2657
  market = None
2626
2658
  if symbol is not None:
2627
2659
  market = self.market(symbol)
@@ -2629,7 +2661,7 @@ class kucoin(Exchange, ImplicitAPI):
2629
2661
  if symbol is None:
2630
2662
  raise ArgumentsRequired(self.id + ' fetchOrder() requires a symbol parameter for hf orders')
2631
2663
  request['symbol'] = market['id']
2632
- params = self.omit(params, ['stop', 'hf', 'clientOid', 'clientOrderId', 'trigger'])
2664
+ params = self.omit(params, ['stop', 'clientOid', 'clientOrderId', 'trigger'])
2633
2665
  response = None
2634
2666
  if clientOrderId is not None:
2635
2667
  request['clientOid'] = clientOrderId
@@ -2871,7 +2903,8 @@ class kucoin(Exchange, ImplicitAPI):
2871
2903
  if paginate:
2872
2904
  return self.fetch_paginated_call_dynamic('fetchMyTrades', symbol, since, limit, params)
2873
2905
  request: dict = {}
2874
- hf = self.safe_bool(params, 'hf', False)
2906
+ hf = None
2907
+ hf, params = self.handle_hf_and_params(params)
2875
2908
  if hf and symbol is None:
2876
2909
  raise ArgumentsRequired(self.id + ' fetchMyTrades() requires a symbol parameter for hf orders')
2877
2910
  market = None
@@ -3431,8 +3464,9 @@ class kucoin(Exchange, ImplicitAPI):
3431
3464
  # }
3432
3465
  # }
3433
3466
  #
3434
- responseData = response['data']['items']
3435
- return self.parse_transactions(responseData, currency, since, limit, {'type': 'deposit'})
3467
+ data = self.safe_dict(response, 'data', {})
3468
+ items = self.safe_list(data, 'items', [])
3469
+ return self.parse_transactions(items, currency, since, limit, {'type': 'deposit'})
3436
3470
 
3437
3471
  def fetch_withdrawals(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
3438
3472
  """
@@ -3508,8 +3542,9 @@ class kucoin(Exchange, ImplicitAPI):
3508
3542
  # }
3509
3543
  # }
3510
3544
  #
3511
- responseData = response['data']['items']
3512
- return self.parse_transactions(responseData, currency, since, limit, {'type': 'withdrawal'})
3545
+ data = self.safe_dict(response, 'data', {})
3546
+ items = self.safe_list(data, 'items', [])
3547
+ return self.parse_transactions(items, currency, since, limit, {'type': 'withdrawal'})
3513
3548
 
3514
3549
  def parse_balance_helper(self, entry):
3515
3550
  account = self.account()
@@ -3543,10 +3578,10 @@ class kucoin(Exchange, ImplicitAPI):
3543
3578
  accountsByType = self.safe_dict(self.options, 'accountsByType')
3544
3579
  type = self.safe_string(accountsByType, requestedType, requestedType)
3545
3580
  params = self.omit(params, 'type')
3546
- isHf = self.safe_bool(params, 'hf', False)
3547
- if isHf:
3581
+ hf = None
3582
+ hf, params = self.handle_hf_and_params(params)
3583
+ if hf:
3548
3584
  type = 'trade_hf'
3549
- params = self.omit(params, 'hf')
3550
3585
  marginMode, query = self.handle_margin_mode_and_params('fetchBalance', params)
3551
3586
  response = None
3552
3587
  request: dict = {}
@@ -3972,8 +4007,8 @@ class kucoin(Exchange, ImplicitAPI):
3972
4007
  self.load_accounts()
3973
4008
  paginate = False
3974
4009
  paginate, params = self.handle_option_and_params(params, 'fetchLedger', 'paginate')
3975
- isHf = self.safe_bool(params, 'hf')
3976
- params = self.omit(params, 'hf')
4010
+ hf = None
4011
+ hf, params = self.handle_hf_and_params(params)
3977
4012
  if paginate:
3978
4013
  return self.fetch_paginated_call_dynamic('fetchLedger', code, since, limit, params)
3979
4014
  request: dict = {
@@ -3994,7 +4029,7 @@ class kucoin(Exchange, ImplicitAPI):
3994
4029
  marginMode = None
3995
4030
  marginMode, params = self.handle_margin_mode_and_params('fetchLedger', params)
3996
4031
  response = None
3997
- if isHf:
4032
+ if hf:
3998
4033
  if marginMode is not None:
3999
4034
  response = self.privateGetHfMarginAccountLedgers(self.extend(request, params))
4000
4035
  else:
@@ -4313,7 +4348,7 @@ class kucoin(Exchange, ImplicitAPI):
4313
4348
  # }
4314
4349
  #
4315
4350
  data = self.safe_dict(response, 'data')
4316
- rows = self.safe_list(data, 'items')
4351
+ rows = self.safe_list(data, 'items', [])
4317
4352
  return self.parse_borrow_rate_histories(rows, codes, since, limit)
4318
4353
 
4319
4354
  def fetch_borrow_rate_history(self, code: str, since: Int = None, limit: Int = None, params={}):
@@ -4364,7 +4399,7 @@ class kucoin(Exchange, ImplicitAPI):
4364
4399
  # }
4365
4400
  #
4366
4401
  data = self.safe_dict(response, 'data')
4367
- rows = self.safe_list(data, 'items')
4402
+ rows = self.safe_list(data, 'items', [])
4368
4403
  return self.parse_borrow_rate_history(rows, code, since, limit)
4369
4404
 
4370
4405
  def parse_borrow_rate_histories(self, response, codes, since, limit):
ccxt/kucoinfutures.py CHANGED
@@ -61,6 +61,7 @@ class kucoinfutures(kucoin, ImplicitAPI):
61
61
  'createTriggerOrder': True,
62
62
  'fetchAccounts': True,
63
63
  'fetchBalance': True,
64
+ 'fetchBidsAsks': True,
64
65
  'fetchBorrowRateHistories': False,
65
66
  'fetchBorrowRateHistory': False,
66
67
  'fetchClosedOrders': True,
@@ -752,11 +753,18 @@ class kucoinfutures(kucoin, ImplicitAPI):
752
753
  :see: https://www.kucoin.com/docs/rest/futures-trading/market-data/get-symbols-list
753
754
  :param str[] [symbols]: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
754
755
  :param dict [params]: extra parameters specific to the exchange API endpoint
756
+ :param str [params.method]: the method to use, futuresPublicGetAllTickers or futuresPublicGetContractsActive
755
757
  :returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
756
758
  """
757
759
  self.load_markets()
758
760
  symbols = self.market_symbols(symbols)
759
- response = self.futuresPublicGetContractsActive(params)
761
+ method = None
762
+ method, params = self.handle_option_and_params(params, 'fetchTickers', 'method', 'futuresPublicGetContractsActive')
763
+ response: dict = None
764
+ if method == 'futuresPublicGetAllTickers':
765
+ response = self.futuresPublicGetAllTickers(params)
766
+ else:
767
+ response = self.futuresPublicGetContractsActive(params)
760
768
  #
761
769
  # {
762
770
  # "code": "200000",
@@ -819,7 +827,7 @@ class kucoinfutures(kucoin, ImplicitAPI):
819
827
  # }
820
828
  # }
821
829
  #
822
- data = self.safe_list(response, 'data', [])
830
+ data = self.safe_list(response, 'data')
823
831
  tickers = self.parse_tickers(data, symbols)
824
832
  return self.filter_by_array_tickers(tickers, 'symbol', symbols)
825
833
 
@@ -929,6 +937,18 @@ class kucoinfutures(kucoin, ImplicitAPI):
929
937
  'info': ticker,
930
938
  }, market)
931
939
 
940
+ def fetch_bids_asks(self, symbols: Strings = None, params={}):
941
+ """
942
+ fetches the bid and ask price and volume for multiple markets
943
+ :param str[] [symbols]: unified symbols of the markets to fetch the bids and asks for, all markets are returned if not assigned
944
+ :param dict [params]: extra parameters specific to the exchange API endpoint
945
+ :returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
946
+ """
947
+ request = {
948
+ 'method': 'futuresPublicGetAllTickers',
949
+ }
950
+ return self.fetch_tickers(symbols, self.extend(request, params))
951
+
932
952
  def fetch_funding_history(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
933
953
  """
934
954
  fetch the history of funding payments paid and received on self account
ccxt/pro/__init__.py CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  # ----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.3.90'
7
+ __version__ = '4.3.92'
8
8
 
9
9
  # ----------------------------------------------------------------------------
10
10
 
ccxt/woo.py CHANGED
@@ -481,7 +481,7 @@ class woo(Exchange, ImplicitAPI):
481
481
  'swap': swap,
482
482
  'future': False,
483
483
  'option': False,
484
- 'active': None,
484
+ 'active': self.safe_string(market, 'is_trading') == '1',
485
485
  'contract': contract,
486
486
  'linear': linear,
487
487
  'inverse': None,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ccxt
3
- Version: 4.3.90
3
+ Version: 4.3.92
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
@@ -272,13 +272,13 @@ console.log(version, Object.keys(exchanges));
272
272
 
273
273
  All-in-one browser bundle (dependencies included), served from a CDN of your choice:
274
274
 
275
- * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.3.90/dist/ccxt.browser.min.js
276
- * unpkg: https://unpkg.com/ccxt@4.3.90/dist/ccxt.browser.min.js
275
+ * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.3.92/dist/ccxt.browser.min.js
276
+ * unpkg: https://unpkg.com/ccxt@4.3.92/dist/ccxt.browser.min.js
277
277
 
278
278
  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.
279
279
 
280
280
  ```HTML
281
- <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.3.90/dist/ccxt.browser.min.js"></script>
281
+ <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.3.92/dist/ccxt.browser.min.js"></script>
282
282
  ```
283
283
 
284
284
  Creates a global `ccxt` object:
@@ -1,10 +1,10 @@
1
- ccxt/__init__.py,sha256=RmEvBkVxRsPh52sL0mkcaSeLQiZw35TtntVRR7h8JuI,16681
1
+ ccxt/__init__.py,sha256=P2-4GLGy5XA0txx_PStOjbp-TczfhXKBn4idfeDr_Ew,16681
2
2
  ccxt/ace.py,sha256=3KFlbRm6N9hXsKUsgZbQCFPZT5WGLm4HOjR19Q3uPts,42419
3
3
  ccxt/alpaca.py,sha256=nVQJ8vG4JrjEvMlu_nPoyR2lBq41j9Z2smPq95nDhng,47504
4
4
  ccxt/ascendex.py,sha256=RCJrO6WUMycfZZsiok9DG3KWpHOeImbZcFNI-AX98k4,151336
5
5
  ccxt/bequant.py,sha256=RBiAmaTbL35DgiV3Hl6uchLUd78V0z1T9riTlNsrpdc,1174
6
6
  ccxt/bigone.py,sha256=RiEDQutD2BtvKfwVvAo2T9_DPqr0oa6ZJFDXph_g1UI,93122
7
- ccxt/binance.py,sha256=234uj97QAqu_-AqxFaFczbV4jnXyhemCsq_RxJQgwjw,641408
7
+ ccxt/binance.py,sha256=T42ws9X4TMWJ5b5B51OkUuisRz1-5GKDmNaEa10YShE,641455
8
8
  ccxt/binancecoinm.py,sha256=arFnEh8mErSyi23eVPWE4iwoT7PWQyxGGVJCKCy6UJY,1702
9
9
  ccxt/binanceus.py,sha256=hdcT4OnadcdFFFjF3GtM0nWv90jqojqwdVS3xWGuW40,9163
10
10
  ccxt/binanceusdm.py,sha256=bAPcJj5HLxoCdPolriM8sJpoTBwbV78vBTbKRmWhNP4,2632
@@ -60,20 +60,20 @@ ccxt/gate.py,sha256=dlKwcUQOvriaUmopMaF4BiziBTFdIoaEgt3-LKS8lk8,327645
60
60
  ccxt/gateio.py,sha256=86AETJWODl_vA5VNeQRHZprmpNIY1HAxCddKZcnKSi8,445
61
61
  ccxt/gemini.py,sha256=ddoOnPZzu-l899JGVw4b9wwT9HI20mVqLz7iihhZxng,80876
62
62
  ccxt/hashkey.py,sha256=AfbhV_QCW31jzy8BFPnmGdhWfXz4WILIl-qh3jB4ZMc,191738
63
- ccxt/hitbtc.py,sha256=uxLqjwN4-pI1GSFSE5EKvIUgvbaJcdArBwb04XhP3a8,153435
63
+ ccxt/hitbtc.py,sha256=5peKNygeAdvaH4GZ7mQebFQKcjN2N7S9GL7HhMLYd5g,153469
64
64
  ccxt/hitbtc3.py,sha256=qRAr4Zvaju9IQWRZUohdoN7xRnzIMPq8AyYb3gPv-Is,455
65
65
  ccxt/hollaex.py,sha256=2KIbenZ3vcBDN_rs2CxG5_foKLaYxJd73vVV7M8n_8E,76140
66
66
  ccxt/htx.py,sha256=X4A5SVzO1wPzbxK5OHG_u67ewOqj-xtb5YIkl1tSG_c,427883
67
67
  ccxt/huobi.py,sha256=4vaG7IRN7fyjaJ_ac6S-njlHOfSEN5de7aq0noznxYw,438
68
68
  ccxt/huobijp.py,sha256=m9rYCCApGDtpbiqCK6Gw4GDd5EskEmho4xSemGbY1kY,89852
69
- ccxt/hyperliquid.py,sha256=ZHqoPUgMHPRsfEP3TaHhPHSFniAVZj7RBSHcfUxbUwQ,110702
69
+ ccxt/hyperliquid.py,sha256=nhbDQvrqQqusDw7lmdSVc3Emf96CB0tT-QSw3_aldYM,110769
70
70
  ccxt/idex.py,sha256=P2jNsxiwIlMgrfPKbtmjLJQrzFcWp_TjgJaLq793oco,73255
71
71
  ccxt/independentreserve.py,sha256=ChkSnahGsn0aN_cfaAonSk-V2Aa1UB-0cPTa1d3AdI4,37713
72
72
  ccxt/indodax.py,sha256=VdTGxm49I6s-DhT0H1NLFVJ1XYaDWpq51jP2tyK68Ks,54580
73
73
  ccxt/kraken.py,sha256=DMy-Lncp9zYsid59O7cn3OLlCIT4Nf1BQa_kqM5dSJM,133417
74
74
  ccxt/krakenfutures.py,sha256=_-bbgzshifKnbyOB1pSs_bRfRepkRAdiDlsLDRiAw9w,119597
75
- ccxt/kucoin.py,sha256=QJc-itNiyyNNt5R7MIgKPv-Qj6FZgIth0JqvqQrkbZA,226699
76
- ccxt/kucoinfutures.py,sha256=bINtr0EBupNmE_IufzwRy7GuWHa5JtBmtrPk-WjhCno,124756
75
+ ccxt/kucoin.py,sha256=93zdALN3NE1xQ-QV9bcLqMXYprBnsphwNI-qhOjBjp4,228129
76
+ ccxt/kucoinfutures.py,sha256=KNh4biqkvaVzgQ2DGUTnNf5853iwF628jKWk3rdOcB4,125860
77
77
  ccxt/kuna.py,sha256=GnIMk8R_IL84FTUHDNP6jHxd2FKNX9YwfoCXoYG83uA,96157
78
78
  ccxt/latoken.py,sha256=wBhaMcTEsB316nFCxm_WbLRZ_G2Q0Vi1FK-850Q07D0,79516
79
79
  ccxt/lbank.py,sha256=Glx9CN_jdQMiUngJLYioxzwDfgFTdusdOfK53_Bg6A8,116045
@@ -103,7 +103,7 @@ ccxt/vertex.py,sha256=r-ucPKA3DKb4Ke7u-OJxAXkHIS_ysF357R5-9dcYFHI,121797
103
103
  ccxt/wavesexchange.py,sha256=vmzv9h1QjthvpKUGajQn_tdCJ5tWmzEA6r7ow_y6ASY,114980
104
104
  ccxt/wazirx.py,sha256=LVHNdononi8FrZpT0pYiJoS-NrNi7_uIZ6Qbu8dJRPc,52405
105
105
  ccxt/whitebit.py,sha256=nm-FIOgvB35irrJ078mtvLki-cZ_V4aRT0B8z2rjMbU,119428
106
- ccxt/woo.py,sha256=Ncx25WmXgYKHapZ8xxnD3qjRi8Qg_X3ha6NORi9s2kQ,153178
106
+ ccxt/woo.py,sha256=u7tYOD7NQVkeP0ypXiE5YeAZpI-RtELHL_fdkkD6qEU,153219
107
107
  ccxt/woofipro.py,sha256=bOytP6GTDdJ7JDEdGYOx3RFQhx_zySNNHexf_0MyUcc,115500
108
108
  ccxt/xt.py,sha256=a9f_Oq5KyDdytyCqW15jjXXdHGumbZwCqutt8cbfsPo,202616
109
109
  ccxt/yobit.py,sha256=NeQpnOTzkjRKj5gVfI-riru5cNltagRH-DSfEEfByLw,54584
@@ -115,10 +115,10 @@ ccxt/abstract/alpaca.py,sha256=vgzqnRTvEnAbLYgfDzGpmVUZxRLWC8BWA6nQ16m-xXY,10382
115
115
  ccxt/abstract/ascendex.py,sha256=5A8Zgq77jsdHlEzlTW_2nDybUUVfNVVOu6BgY3TWqRM,11394
116
116
  ccxt/abstract/bequant.py,sha256=OTBtNu3DQeAqAC_Lbi0NePUs-ZQQllcLrVDI2G04nwQ,15601
117
117
  ccxt/abstract/bigone.py,sha256=bQdIXCVkKgnZ7ZjpQ1widGDlXNe0PtP_12EQKoEN9z0,4895
118
- ccxt/abstract/binance.py,sha256=mCCkDgqU2KgtU5UMnZLApbezbWLgJUFEzZUMAlsVRRw,93740
119
- ccxt/abstract/binancecoinm.py,sha256=mCCkDgqU2KgtU5UMnZLApbezbWLgJUFEzZUMAlsVRRw,93740
120
- ccxt/abstract/binanceus.py,sha256=nh45H6Wb2xD6hVAhBP8s5CJYoiuiPEcCzVZLAm0tCog,100460
121
- ccxt/abstract/binanceusdm.py,sha256=mCCkDgqU2KgtU5UMnZLApbezbWLgJUFEzZUMAlsVRRw,93740
118
+ ccxt/abstract/binance.py,sha256=AGiq9_FXfAmnmU0iRLPJLGlTmC4KIFCe0pql03WnOMo,93737
119
+ ccxt/abstract/binancecoinm.py,sha256=AGiq9_FXfAmnmU0iRLPJLGlTmC4KIFCe0pql03WnOMo,93737
120
+ ccxt/abstract/binanceus.py,sha256=n-8Ibbj-b4ZYZIgN0ieqyDnOOf9CAAOlT9_kE4r10u4,100457
121
+ ccxt/abstract/binanceusdm.py,sha256=AGiq9_FXfAmnmU0iRLPJLGlTmC4KIFCe0pql03WnOMo,93737
122
122
  ccxt/abstract/bingx.py,sha256=Rb93j2sCYAi0egAE4TAAOG7XuC5XdHQaGQZC9V-meqQ,20662
123
123
  ccxt/abstract/bit2c.py,sha256=np6i756kSB5dO3Nj6POLKxkWkpYcsGg-4LS8BwPrizI,2830
124
124
  ccxt/abstract/bitbank.py,sha256=hrHsD7Uvtyy2o2lzCHau3-eNq16pnZ3-YDQ6Tq_sxYU,2735
@@ -183,8 +183,8 @@ ccxt/abstract/independentreserve.py,sha256=Cue0hud5acRs2Q6oSvQ7Rx-YWS_fuACs6uV3a
183
183
  ccxt/abstract/indodax.py,sha256=E16v8W6Ac9kmV9hFEqf_kwV6VQmK74lc1LEUEkuDpYg,2488
184
184
  ccxt/abstract/kraken.py,sha256=AUpdQHWHZFXseHNx1-cuLqRutYwYEUVqQ7mjc0TQR_s,5883
185
185
  ccxt/abstract/krakenfutures.py,sha256=pu81cKhQgBkQd8F9-Ly3b7xQD-qQ8WLi8EUMfmAUJcM,4080
186
- ccxt/abstract/kucoin.py,sha256=7R8BIrjg7MWwhPyASYocz0xm_iQseedlnnHQWPNTpf8,28099
187
- ccxt/abstract/kucoinfutures.py,sha256=DOjys-FXHlGN2Rxy9gXIHB7FR9CF5Csq7IwNgxFbh9E,31069
186
+ ccxt/abstract/kucoin.py,sha256=4LLJ8vPaUZ18ZxlriZvI_t42r22TWy3EEG8BLUQUsWo,28250
187
+ ccxt/abstract/kucoinfutures.py,sha256=GA8Y3be8bZUdOqh23r-m0YGBZ-4OKHY6y1D2LVCLKeQ,31220
188
188
  ccxt/abstract/kuna.py,sha256=IsaLq8A4DUOlQ8Esyk0WqBU6hHm5Q4sIqhgnMIvDGX0,24579
189
189
  ccxt/abstract/latoken.py,sha256=1GqE9WxrubgZILnYvg7W_dGyui-FKeIv0bU4z1dQj1k,7168
190
190
  ccxt/abstract/lbank.py,sha256=pdut_cIcwcUhN_ZCyWJxixBc4dgeQqvENYqFCrUYrvA,8675
@@ -220,13 +220,13 @@ ccxt/abstract/xt.py,sha256=JkWvsic3L2O968BCr9H5Wd5NIbRE9aTT2A-9WbAtl0c,27146
220
220
  ccxt/abstract/yobit.py,sha256=8ycfCO8ORFly9hc0Aa47sZyX4_ZKPXS9h9yJzI-uQ7Q,1339
221
221
  ccxt/abstract/zaif.py,sha256=m15WHdl3gYy0GOXNZ8NEH8eE7sVh8c0T_ITNuU8vXeU,3935
222
222
  ccxt/abstract/zonda.py,sha256=X-hCW0SdX3YKZWixDyW-O2211M58Rno8kKJ6quY7rw4,7183
223
- ccxt/async_support/__init__.py,sha256=emi7qr2jxHIrZqQddMYK8fOlfF3BC8BFIR4ynDCQWRg,16504
223
+ ccxt/async_support/__init__.py,sha256=MIa83arWgbNAeH2GvibM05_KtoiUKArfy-pgnNxcTkA,16504
224
224
  ccxt/async_support/ace.py,sha256=ucCkKaWRkILAIK9g4iEi1Q_-zmn0V89-rX8Al4WdK8s,42643
225
225
  ccxt/async_support/alpaca.py,sha256=HxonsP_MzbE7Z9r6hZ1rgmf_jPcP4H7H3z1YQgCv4qc,47716
226
226
  ccxt/async_support/ascendex.py,sha256=PIgHokT4gFPEUaoi_ze2T0qgu6vEs8SytRG9ocM3r7M,152124
227
227
  ccxt/async_support/bequant.py,sha256=1hTwHovo1bW1XTIc8ZKjvJ-Xg6LfmpGdzT7TepykaVM,1188
228
228
  ccxt/async_support/bigone.py,sha256=A7AjX0iWl2twYRwOc-2tKUbnI4KNmO2QVetMaAJujpg,93576
229
- ccxt/async_support/binance.py,sha256=pzuysonW4qV1Q2_bIbNVWqm6SWgkCgKrGolvgqlfOEg,644142
229
+ ccxt/async_support/binance.py,sha256=mdKkkKttukXBVIi6XMdT1naJqRss9UJrUB_j8hZvD44,644189
230
230
  ccxt/async_support/binancecoinm.py,sha256=yeE73xG5UXD_X3VPul6DMGnV_mgJfWYskpas1BUDdCU,1740
231
231
  ccxt/async_support/binanceus.py,sha256=c-K3Tk7LaRJjmYdCx8vBOqsx01uXrtvt0PC2ekBiD0g,9177
232
232
  ccxt/async_support/binanceusdm.py,sha256=8ugRkx7vyYmn67wdkEEf2f-DFMGAoC4t09usKlPVNyw,2670
@@ -282,20 +282,20 @@ ccxt/async_support/gate.py,sha256=Y4dVM0if4e3a3uG_Wgj10t4oWRBHdjt-0Sp0v3yIWNg,32
282
282
  ccxt/async_support/gateio.py,sha256=6_t032F9p9x5KGTjtSuqGXITzFOx-XAQBYLpsuQjzxw,459
283
283
  ccxt/async_support/gemini.py,sha256=7X5-PE3rPrPycUVXu3FtAcDFjNR3QUwYd6lPRQYQeEw,81389
284
284
  ccxt/async_support/hashkey.py,sha256=bwQsEvhGU60iy_vlAbLvtx1blhDxS4L3cqoTpk6JNQ8,192580
285
- ccxt/async_support/hitbtc.py,sha256=qytUn4pEdcGHPUXteTD4f1PVmKeoIl5zxymKKwVCNco,154481
285
+ ccxt/async_support/hitbtc.py,sha256=h3HTN7Z5glikA3YRunBQun0Tp1QVqiBQz4WWzZKRLdk,154515
286
286
  ccxt/async_support/hitbtc3.py,sha256=dmSYoD2o4av_zzbZI8HNIoj8BWxA7QozsVpy8JaOXzU,469
287
287
  ccxt/async_support/hollaex.py,sha256=msUnnbWLNeCxFW77BnfLoFWBdvQIDwV7Rtbi9TA4TYY,76574
288
288
  ccxt/async_support/htx.py,sha256=pPdetpi1Y2bHxNIXrFO9VDgMOra0v8Y2hggVbe2Qzdk,430275
289
289
  ccxt/async_support/huobi.py,sha256=fup0j6wQ1khAtfbb1H4CSyJAOzhxuoHMmrM6sgTuhr8,452
290
290
  ccxt/async_support/huobijp.py,sha256=OeEHn0GXQ56YGeUM21zwRqsEm8d2LD_SDspBsQMlds4,90352
291
- ccxt/async_support/hyperliquid.py,sha256=Ct1KjpC9j4l-ul0r8RWpeeX-6bCdcXrNrrHpdNzcWW8,111258
291
+ ccxt/async_support/hyperliquid.py,sha256=UFj6FUYKTlYRW1ThSzLp02HXhX1Mod1Y_XQXOo9y-Mg,111325
292
292
  ccxt/async_support/idex.py,sha256=UcAvdMc2CP_6E8lET4rmQiIP-RaUfZHSo6pQeA17v-g,73731
293
293
  ccxt/async_support/independentreserve.py,sha256=fCTAQ1U74KOZHIoYbDxzEly1xSgykcYcdpeiJiCEXkU,37991
294
294
  ccxt/async_support/indodax.py,sha256=S4qV7w3gMTRLnzahoCKR70oeRlpxOV3mXDdJw8XpIo8,54888
295
295
  ccxt/async_support/kraken.py,sha256=aDndekk6rCIyASRAjJNg1oNzxcProwA1ezZ7ftKLOY8,134067
296
296
  ccxt/async_support/krakenfutures.py,sha256=stPhBne9pFVlgFkw4mwqtaaI6NTZCAcmOIFVlQSbl8I,120085
297
- ccxt/async_support/kucoin.py,sha256=yUpyvMjHLy3Vf4yFGENe5CnbWjLly1PNL8v576NCg0o,227800
298
- ccxt/async_support/kucoinfutures.py,sha256=X6TMi-Bjv2mijE8xGbg-qp9Ha8Nl7o1Z5LjEiDgxaJ8,125394
297
+ ccxt/async_support/kucoin.py,sha256=vpygCpD5m5-mRuGEwE2mBWuBDCraeBHUHVTo64g1XE4,229314
298
+ ccxt/async_support/kucoinfutures.py,sha256=a2oRhfH61LsSnhSlhwSJM7yRUUsegkmQenOa_nPwHuA,126516
299
299
  ccxt/async_support/kuna.py,sha256=QtzLgqgv8mLXECN2drWNVtdvm_vy-bawdxKvozDzbVE,96573
300
300
  ccxt/async_support/latoken.py,sha256=9BUu8akWtbBtAzVr_c_cYLkiLQqcJdSdkJbHmuLee-Y,79992
301
301
  ccxt/async_support/lbank.py,sha256=MeqPjECSmsplCtatu7Ns6sHRwzAGP_6S5MwB2BomnXk,116757
@@ -325,14 +325,14 @@ ccxt/async_support/vertex.py,sha256=TSw1dmCXj2kIDV7uvj-kd3wPurRu90fg9mHWHoHjF_o,
325
325
  ccxt/async_support/wavesexchange.py,sha256=wHxvsBQydDEYRgeAZKI9WO4TLBKmmSPTLm0eT0pKB5g,115530
326
326
  ccxt/async_support/wazirx.py,sha256=bnUpw9be3o4l2Hxm3jcfNXn5bMyZlgqoG8BGPusuIzs,52707
327
327
  ccxt/async_support/whitebit.py,sha256=MMKYPLjbCyW9yd2saPifUJIFwddN9z4DG3agTaAMKOc,120078
328
- ccxt/async_support/woo.py,sha256=yZEpYxjEFr2Hz89mKDwwAxZfQGwpJF21kSb_L0mAZ0k,154146
328
+ ccxt/async_support/woo.py,sha256=dvKBt8HDmQk1i5u2f3UUWmR9Pw1NALgyAj2wq3uWIds,154187
329
329
  ccxt/async_support/woofipro.py,sha256=B-BTPNdv3fL6wz3cHcMG2G8IU0MtvfzAiPP0OVT-xsI,116180
330
330
  ccxt/async_support/xt.py,sha256=_U-r4Gp0oBCOE6Ngo98Sn_Q6tr_81CUDDSliF0FMezE,203770
331
331
  ccxt/async_support/yobit.py,sha256=GQhvYrsGHQrVdTrNHQxx9isEGqUABexlllzao9HL3f8,54912
332
332
  ccxt/async_support/zaif.py,sha256=-ZTr8M2JaIRCL90VrbCDXBMAsZwbiwsFChSQ2rWODuQ,29044
333
333
  ccxt/async_support/zonda.py,sha256=jncr6Wg12S72CTpu6mCKCse1pm1f8oefVQurQSrFvP0,81733
334
334
  ccxt/async_support/base/__init__.py,sha256=aVYSsFi--b4InRs9zDN_wtCpj8odosAB726JdUHavrk,67
335
- ccxt/async_support/base/exchange.py,sha256=kMx8OyRrKnJSN4sEFW9ByeVwuyhq_o3cUSNJo4gm0Xc,110810
335
+ ccxt/async_support/base/exchange.py,sha256=QipUhG1vzEbRFubZfis7eliKO7iQAA_El-5H2xE6FCw,110810
336
336
  ccxt/async_support/base/throttler.py,sha256=tvDVcdRUVYi8fZRlEcnqtgzcgB_KMUMRs5Pu8tuU-tU,1847
337
337
  ccxt/async_support/base/ws/__init__.py,sha256=uockzpLuwntKGZbs5EOWFe-Zg-k6Cj7GhNJLc_RX0so,1791
338
338
  ccxt/async_support/base/ws/aiohttp_client.py,sha256=5IEiT0elWI9a7Vr-KV0jgmlbpLJWBzIlrLaCkTKGaqY,5752
@@ -346,10 +346,10 @@ ccxt/async_support/base/ws/order_book_side.py,sha256=GhnGUt78pJ-AYL_Dq9produGjmB
346
346
  ccxt/base/__init__.py,sha256=eTx1OE3HJjspFUQjGm6LBhaQiMKJnXjkdP-JUXknyQ0,1320
347
347
  ccxt/base/decimal_to_precision.py,sha256=fgWRBzRTtsf3r2INyS4f7WHlzgjB5YM1ekiwqD21aac,6634
348
348
  ccxt/base/errors.py,sha256=Pad-6ugvGUwhoYuKUliX-N7FTrcnKCQGFjsaq2tMn0I,4610
349
- ccxt/base/exchange.py,sha256=GWh-MEa-5xFJEUont5v8OCDlbQYOlFBp4VWAoj0IDAg,296075
349
+ ccxt/base/exchange.py,sha256=PmJEfEYTehAeq0e4mSXL4vazSbGMSuT0JqVAMoELmGs,296075
350
350
  ccxt/base/precise.py,sha256=koce64Yrp6vFbGijJtUt-QQ6XhJgeGTCksZ871FPp_A,8886
351
351
  ccxt/base/types.py,sha256=TaP_RElKjGEZWuzyp4o4u2YhREyTG3rUeVT6gDffY9A,9613
352
- ccxt/pro/__init__.py,sha256=DyJpymCSy3yXmbd0Oy4tK6BMNHQZDHSJp_4o6G8kZq0,7710
352
+ ccxt/pro/__init__.py,sha256=OZXP810CknOtgr5sTmdNQd3Row6hy5p9ArgEb5UibkE,7710
353
353
  ccxt/pro/alpaca.py,sha256=xh1yg1Ok-Zh_Mfx-MBjNrfJDs6MUU0exFfEj3GuQPC4,27631
354
354
  ccxt/pro/ascendex.py,sha256=QueLgISoIxgGSOta2W7En4pwAsEXbTP5q5ef4UjpTQQ,37524
355
355
  ccxt/pro/bequant.py,sha256=33OEUWBi4D9-2w8CmkwN3aF1qS-AlLqX3pxrWwNbXPY,1552
@@ -652,8 +652,8 @@ ccxt/test/tests_async.py,sha256=yVoLZLPkB-_ay0ab_oCyYOSwkLQkLXkPFj5jHTE3esw,8442
652
652
  ccxt/test/tests_helpers.py,sha256=xhOILoZ_x3RSfQjtKt6AQlkp9DkOtpTQe8GAUUZoM6s,10069
653
653
  ccxt/test/tests_init.py,sha256=eVwwUHujX9t4rjgo4TqEeg7DDhR1Hb_e2SJN8NVGyl0,998
654
654
  ccxt/test/tests_sync.py,sha256=uu0QsWOuEpkmtV12nIffsiZZFUpM-f1k6W9nlgCDqXs,83485
655
- ccxt-4.3.90.dist-info/LICENSE.txt,sha256=EIb9221AhMHV7xF1_55STFdKTFsnJVJYkRpY2Lnvo5w,1068
656
- ccxt-4.3.90.dist-info/METADATA,sha256=T4ALH61p2wqlsL-UJY8oNHQxfzlV8-Ws-a7Hq7bN8B8,118342
657
- ccxt-4.3.90.dist-info/WHEEL,sha256=z9j0xAa_JmUKMpmz72K0ZGALSM_n-wQVmGbleXx2VHg,110
658
- ccxt-4.3.90.dist-info/top_level.txt,sha256=CkQDuCTDKNcImPV60t36G6MdYfxsAPNiSaEwifVoVMo,5
659
- ccxt-4.3.90.dist-info/RECORD,,
655
+ ccxt-4.3.92.dist-info/LICENSE.txt,sha256=EIb9221AhMHV7xF1_55STFdKTFsnJVJYkRpY2Lnvo5w,1068
656
+ ccxt-4.3.92.dist-info/METADATA,sha256=5gK1R-EPm2VXF8T_phjBH8gJlUAOZbb9KW_o-iHBzZA,118342
657
+ ccxt-4.3.92.dist-info/WHEEL,sha256=z9j0xAa_JmUKMpmz72K0ZGALSM_n-wQVmGbleXx2VHg,110
658
+ ccxt-4.3.92.dist-info/top_level.txt,sha256=CkQDuCTDKNcImPV60t36G6MdYfxsAPNiSaEwifVoVMo,5
659
+ ccxt-4.3.92.dist-info/RECORD,,
File without changes