ccxt 4.3.82__py2.py3-none-any.whl → 4.3.84__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.82'
25
+ __version__ = '4.3.84'
26
26
 
27
27
  # ----------------------------------------------------------------------------
28
28
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.3.82'
7
+ __version__ = '4.3.84'
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # -----------------------------------------------------------------------------
4
4
 
5
- __version__ = '4.3.82'
5
+ __version__ = '4.3.84'
6
6
 
7
7
  # -----------------------------------------------------------------------------
8
8
 
@@ -3364,7 +3364,13 @@ class binance(Exchange, ImplicitAPI):
3364
3364
  response = await self.papiGetBalance(self.extend(request, query))
3365
3365
  elif self.is_linear(type, subType):
3366
3366
  type = 'linear'
3367
- response = await self.fapiPrivateV3GetAccount(self.extend(request, query))
3367
+ useV2 = None
3368
+ useV2, params = self.handle_option_and_params(params, 'fetchBalance', 'useV2', False)
3369
+ params = self.extend(request, query)
3370
+ if not useV2:
3371
+ response = await self.fapiPrivateV3GetAccount(params)
3372
+ else:
3373
+ response = await self.fapiPrivateV2GetAccount(params)
3368
3374
  elif self.is_inverse(type, subType):
3369
3375
  type = 'inverse'
3370
3376
  response = await self.dapiPrivateGetAccount(self.extend(request, query))
@@ -9550,6 +9556,7 @@ class binance(Exchange, ImplicitAPI):
9550
9556
  :param str[] [symbols]: list of unified market symbols
9551
9557
  :param dict [params]: extra parameters specific to the exchange API endpoint
9552
9558
  :param str [method]: method name to call, "positionRisk", "account" or "option", default is "positionRisk"
9559
+ :param bool [params.useV2]: set to True if you want to use the obsolete endpoint, where some more additional fields were provided
9553
9560
  :returns dict[]: a list of `position structure <https://docs.ccxt.com/#/?id=position-structure>`
9554
9561
  """
9555
9562
  defaultMethod = None
@@ -9701,6 +9708,7 @@ class binance(Exchange, ImplicitAPI):
9701
9708
  :param dict [params]: extra parameters specific to the exchange API endpoint
9702
9709
  :param boolean [params.portfolioMargin]: set to True if you would like to fetch positions for a portfolio margin account
9703
9710
  :param str [params.subType]: "linear" or "inverse"
9711
+ :param bool [params.useV2]: set to True if you want to use the obsolete endpoint, where some more additional fields were provided
9704
9712
  :returns dict: data on the positions risk
9705
9713
  """
9706
9714
  if symbols is not None:
@@ -9722,7 +9730,13 @@ class binance(Exchange, ImplicitAPI):
9722
9730
  if isPortfolioMargin:
9723
9731
  response = await self.papiGetUmPositionRisk(self.extend(request, params))
9724
9732
  else:
9725
- response = await self.fapiPrivateV3GetPositionRisk(self.extend(request, params))
9733
+ useV2 = None
9734
+ useV2, params = self.handle_option_and_params(params, 'fetchPositionsRisk', 'useV2', False)
9735
+ params = self.extend(request, params)
9736
+ if not useV2:
9737
+ response = await self.fapiPrivateV3GetPositionRisk(params)
9738
+ else:
9739
+ response = await self.fapiPrivateV2GetPositionRisk(params)
9726
9740
  #
9727
9741
  # [
9728
9742
  # {
@@ -10097,7 +10111,7 @@ class binance(Exchange, ImplicitAPI):
10097
10111
  longLeverage = None
10098
10112
  shortLeverage = None
10099
10113
  leverageValue = self.safe_integer(leverage, 'leverage')
10100
- if side == 'both':
10114
+ if (side is None) or (side == 'both'):
10101
10115
  longLeverage = leverageValue
10102
10116
  shortLeverage = leverageValue
10103
10117
  elif side == 'long':
@@ -10512,7 +10526,7 @@ class binance(Exchange, ImplicitAPI):
10512
10526
  extendedParams['recvWindow'] = recvWindow
10513
10527
  if (api == 'sapi') and (path == 'asset/dust'):
10514
10528
  query = self.urlencode_with_array_repeat(extendedParams)
10515
- elif (path == 'batchOrders') or (path.find('sub-account') >= 0) or (path == 'capital/withdraw/apply') or (path.find('staking') >= 0):
10529
+ elif (path == 'batchOrders') or (path.find('sub-account') >= 0) or (path == 'capital/withdraw/apply') or (path.find('staking') >= 0) or (path.find('simple-earn') >= 0):
10516
10530
  if (method == 'DELETE') and (path == 'batchOrders'):
10517
10531
  orderidlist = self.safe_list(extendedParams, 'orderidlist', [])
10518
10532
  origclientorderidlist = self.safe_list(extendedParams, 'origclientorderidlist', [])
@@ -12230,7 +12244,7 @@ class binance(Exchange, ImplicitAPI):
12230
12244
  request['startTime'] = since
12231
12245
  else:
12232
12246
  request['startTime'] = now - msInThirtyDays
12233
- endTime = self.safe_string_2(params, 'endTime', 'until')
12247
+ endTime = self.safe_integer_2(params, 'endTime', 'until')
12234
12248
  if endTime is not None:
12235
12249
  request['endTime'] = endTime
12236
12250
  else:
@@ -12268,6 +12282,8 @@ class binance(Exchange, ImplicitAPI):
12268
12282
  # }
12269
12283
  #
12270
12284
  else:
12285
+ if (request['endTime'] - request['startTime']) > msInThirtyDays:
12286
+ raise BadRequest(self.id + ' fetchConvertTradeHistory() the max interval between startTime and endTime is 30 days.')
12271
12287
  if limit is not None:
12272
12288
  request['limit'] = limit
12273
12289
  fromCurrencyKey = 'fromAsset'
@@ -354,9 +354,9 @@ class bitfinex2(Exchange, ImplicitAPI):
354
354
  # convert 'EXCHANGE LIMIT' to lowercase 'limit'
355
355
  # everything else remains uppercase
356
356
  'exchangeTypes': {
357
- # 'MARKET': None,
357
+ 'MARKET': 'market',
358
358
  'EXCHANGE MARKET': 'market',
359
- # 'LIMIT': None,
359
+ 'LIMIT': 'limit',
360
360
  'EXCHANGE LIMIT': 'limit',
361
361
  # 'STOP': None,
362
362
  'EXCHANGE STOP': 'market',
@@ -3969,9 +3969,9 @@ class gate(Exchange, ImplicitAPI):
3969
3969
  request['amount'] = self.amount_to_precision(symbol, amount)
3970
3970
  else:
3971
3971
  if side == 'sell':
3972
- request['size'] = Precise.string_neg(self.amount_to_precision(symbol, amount))
3972
+ request['size'] = self.parse_to_numeric(Precise.string_neg(self.amount_to_precision(symbol, amount)))
3973
3973
  else:
3974
- request['size'] = self.amount_to_precision(symbol, amount)
3974
+ request['size'] = self.parse_to_numeric(self.amount_to_precision(symbol, amount))
3975
3975
  if price is not None:
3976
3976
  request['price'] = self.price_to_precision(symbol, price)
3977
3977
  if not market['spot']:
@@ -2367,13 +2367,11 @@ class kraken(Exchange, ImplicitAPI):
2367
2367
  :returns dict[]: a list of `transaction structures <https://docs.ccxt.com/#/?id=transaction-structure>`
2368
2368
  """
2369
2369
  # https://www.kraken.com/en-us/help/api#deposit-status
2370
- if code is None:
2371
- raise ArgumentsRequired(self.id + ' fetchDeposits() requires a currency code argument')
2372
2370
  await self.load_markets()
2373
- currency = self.currency(code)
2374
- request: dict = {
2375
- 'asset': currency['id'],
2376
- }
2371
+ request: dict = {}
2372
+ if code is not None:
2373
+ currency = self.currency(code)
2374
+ request['asset'] = currency['id']
2377
2375
  if since is not None:
2378
2376
  request['start'] = since
2379
2377
  response = await self.privatePostDepositStatus(self.extend(request, params))
@@ -2821,7 +2821,7 @@ class phemex(Exchange, ImplicitAPI):
2821
2821
  if market['settle'] == 'USDT':
2822
2822
  response = await self.privateGetApiDataGFuturesOrdersByOrderId(self.extend(request, params))
2823
2823
  elif market['spot']:
2824
- response = await self.privateGetSpotOrdersActive(self.extend(request, params))
2824
+ response = await self.privateGetApiDataSpotsOrdersByOrderId(self.extend(request, params))
2825
2825
  else:
2826
2826
  response = await self.privateGetExchangeOrder(self.extend(request, params))
2827
2827
  data = self.safe_value(response, 'data', {})
@@ -2833,7 +2833,10 @@ class phemex(Exchange, ImplicitAPI):
2833
2833
  raise OrderNotFound(self.id + ' fetchOrder() ' + symbol + ' order with clientOrderId ' + clientOrderId + ' not found')
2834
2834
  else:
2835
2835
  raise OrderNotFound(self.id + ' fetchOrder() ' + symbol + ' order with id ' + id + ' not found')
2836
- order = self.safe_value(data, 0, {})
2836
+ order = self.safe_dict(data, 0, {})
2837
+ elif market['spot']:
2838
+ rows = self.safe_list(data, 'rows', [])
2839
+ order = self.safe_dict(rows, 0, {})
2837
2840
  return self.parse_order(order, market)
2838
2841
 
2839
2842
  async def fetch_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
@@ -2864,7 +2867,7 @@ class phemex(Exchange, ImplicitAPI):
2864
2867
  elif market['swap']:
2865
2868
  response = await self.privateGetExchangeOrderList(self.extend(request, params))
2866
2869
  else:
2867
- response = await self.privateGetSpotOrders(self.extend(request, params))
2870
+ response = await self.privateGetApiDataSpotsOrders(self.extend(request, params))
2868
2871
  data = self.safe_value(response, 'data', {})
2869
2872
  rows = self.safe_list(data, 'rows', data)
2870
2873
  return self.parse_orders(rows, market, since, limit)
ccxt/base/exchange.py CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.3.82'
7
+ __version__ = '4.3.84'
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
ccxt/binance.py CHANGED
@@ -3363,7 +3363,13 @@ class binance(Exchange, ImplicitAPI):
3363
3363
  response = self.papiGetBalance(self.extend(request, query))
3364
3364
  elif self.is_linear(type, subType):
3365
3365
  type = 'linear'
3366
- response = self.fapiPrivateV3GetAccount(self.extend(request, query))
3366
+ useV2 = None
3367
+ useV2, params = self.handle_option_and_params(params, 'fetchBalance', 'useV2', False)
3368
+ params = self.extend(request, query)
3369
+ if not useV2:
3370
+ response = self.fapiPrivateV3GetAccount(params)
3371
+ else:
3372
+ response = self.fapiPrivateV2GetAccount(params)
3367
3373
  elif self.is_inverse(type, subType):
3368
3374
  type = 'inverse'
3369
3375
  response = self.dapiPrivateGetAccount(self.extend(request, query))
@@ -9549,6 +9555,7 @@ class binance(Exchange, ImplicitAPI):
9549
9555
  :param str[] [symbols]: list of unified market symbols
9550
9556
  :param dict [params]: extra parameters specific to the exchange API endpoint
9551
9557
  :param str [method]: method name to call, "positionRisk", "account" or "option", default is "positionRisk"
9558
+ :param bool [params.useV2]: set to True if you want to use the obsolete endpoint, where some more additional fields were provided
9552
9559
  :returns dict[]: a list of `position structure <https://docs.ccxt.com/#/?id=position-structure>`
9553
9560
  """
9554
9561
  defaultMethod = None
@@ -9700,6 +9707,7 @@ class binance(Exchange, ImplicitAPI):
9700
9707
  :param dict [params]: extra parameters specific to the exchange API endpoint
9701
9708
  :param boolean [params.portfolioMargin]: set to True if you would like to fetch positions for a portfolio margin account
9702
9709
  :param str [params.subType]: "linear" or "inverse"
9710
+ :param bool [params.useV2]: set to True if you want to use the obsolete endpoint, where some more additional fields were provided
9703
9711
  :returns dict: data on the positions risk
9704
9712
  """
9705
9713
  if symbols is not None:
@@ -9721,7 +9729,13 @@ class binance(Exchange, ImplicitAPI):
9721
9729
  if isPortfolioMargin:
9722
9730
  response = self.papiGetUmPositionRisk(self.extend(request, params))
9723
9731
  else:
9724
- response = self.fapiPrivateV3GetPositionRisk(self.extend(request, params))
9732
+ useV2 = None
9733
+ useV2, params = self.handle_option_and_params(params, 'fetchPositionsRisk', 'useV2', False)
9734
+ params = self.extend(request, params)
9735
+ if not useV2:
9736
+ response = self.fapiPrivateV3GetPositionRisk(params)
9737
+ else:
9738
+ response = self.fapiPrivateV2GetPositionRisk(params)
9725
9739
  #
9726
9740
  # [
9727
9741
  # {
@@ -10096,7 +10110,7 @@ class binance(Exchange, ImplicitAPI):
10096
10110
  longLeverage = None
10097
10111
  shortLeverage = None
10098
10112
  leverageValue = self.safe_integer(leverage, 'leverage')
10099
- if side == 'both':
10113
+ if (side is None) or (side == 'both'):
10100
10114
  longLeverage = leverageValue
10101
10115
  shortLeverage = leverageValue
10102
10116
  elif side == 'long':
@@ -10511,7 +10525,7 @@ class binance(Exchange, ImplicitAPI):
10511
10525
  extendedParams['recvWindow'] = recvWindow
10512
10526
  if (api == 'sapi') and (path == 'asset/dust'):
10513
10527
  query = self.urlencode_with_array_repeat(extendedParams)
10514
- elif (path == 'batchOrders') or (path.find('sub-account') >= 0) or (path == 'capital/withdraw/apply') or (path.find('staking') >= 0):
10528
+ elif (path == 'batchOrders') or (path.find('sub-account') >= 0) or (path == 'capital/withdraw/apply') or (path.find('staking') >= 0) or (path.find('simple-earn') >= 0):
10515
10529
  if (method == 'DELETE') and (path == 'batchOrders'):
10516
10530
  orderidlist = self.safe_list(extendedParams, 'orderidlist', [])
10517
10531
  origclientorderidlist = self.safe_list(extendedParams, 'origclientorderidlist', [])
@@ -12229,7 +12243,7 @@ class binance(Exchange, ImplicitAPI):
12229
12243
  request['startTime'] = since
12230
12244
  else:
12231
12245
  request['startTime'] = now - msInThirtyDays
12232
- endTime = self.safe_string_2(params, 'endTime', 'until')
12246
+ endTime = self.safe_integer_2(params, 'endTime', 'until')
12233
12247
  if endTime is not None:
12234
12248
  request['endTime'] = endTime
12235
12249
  else:
@@ -12267,6 +12281,8 @@ class binance(Exchange, ImplicitAPI):
12267
12281
  # }
12268
12282
  #
12269
12283
  else:
12284
+ if (request['endTime'] - request['startTime']) > msInThirtyDays:
12285
+ raise BadRequest(self.id + ' fetchConvertTradeHistory() the max interval between startTime and endTime is 30 days.')
12270
12286
  if limit is not None:
12271
12287
  request['limit'] = limit
12272
12288
  fromCurrencyKey = 'fromAsset'
ccxt/bitfinex2.py CHANGED
@@ -354,9 +354,9 @@ class bitfinex2(Exchange, ImplicitAPI):
354
354
  # convert 'EXCHANGE LIMIT' to lowercase 'limit'
355
355
  # everything else remains uppercase
356
356
  'exchangeTypes': {
357
- # 'MARKET': None,
357
+ 'MARKET': 'market',
358
358
  'EXCHANGE MARKET': 'market',
359
- # 'LIMIT': None,
359
+ 'LIMIT': 'limit',
360
360
  'EXCHANGE LIMIT': 'limit',
361
361
  # 'STOP': None,
362
362
  'EXCHANGE STOP': 'market',
ccxt/gate.py CHANGED
@@ -3968,9 +3968,9 @@ class gate(Exchange, ImplicitAPI):
3968
3968
  request['amount'] = self.amount_to_precision(symbol, amount)
3969
3969
  else:
3970
3970
  if side == 'sell':
3971
- request['size'] = Precise.string_neg(self.amount_to_precision(symbol, amount))
3971
+ request['size'] = self.parse_to_numeric(Precise.string_neg(self.amount_to_precision(symbol, amount)))
3972
3972
  else:
3973
- request['size'] = self.amount_to_precision(symbol, amount)
3973
+ request['size'] = self.parse_to_numeric(self.amount_to_precision(symbol, amount))
3974
3974
  if price is not None:
3975
3975
  request['price'] = self.price_to_precision(symbol, price)
3976
3976
  if not market['spot']:
ccxt/kraken.py CHANGED
@@ -2367,13 +2367,11 @@ class kraken(Exchange, ImplicitAPI):
2367
2367
  :returns dict[]: a list of `transaction structures <https://docs.ccxt.com/#/?id=transaction-structure>`
2368
2368
  """
2369
2369
  # https://www.kraken.com/en-us/help/api#deposit-status
2370
- if code is None:
2371
- raise ArgumentsRequired(self.id + ' fetchDeposits() requires a currency code argument')
2372
2370
  self.load_markets()
2373
- currency = self.currency(code)
2374
- request: dict = {
2375
- 'asset': currency['id'],
2376
- }
2371
+ request: dict = {}
2372
+ if code is not None:
2373
+ currency = self.currency(code)
2374
+ request['asset'] = currency['id']
2377
2375
  if since is not None:
2378
2376
  request['start'] = since
2379
2377
  response = self.privatePostDepositStatus(self.extend(request, params))
ccxt/phemex.py CHANGED
@@ -2821,7 +2821,7 @@ class phemex(Exchange, ImplicitAPI):
2821
2821
  if market['settle'] == 'USDT':
2822
2822
  response = self.privateGetApiDataGFuturesOrdersByOrderId(self.extend(request, params))
2823
2823
  elif market['spot']:
2824
- response = self.privateGetSpotOrdersActive(self.extend(request, params))
2824
+ response = self.privateGetApiDataSpotsOrdersByOrderId(self.extend(request, params))
2825
2825
  else:
2826
2826
  response = self.privateGetExchangeOrder(self.extend(request, params))
2827
2827
  data = self.safe_value(response, 'data', {})
@@ -2833,7 +2833,10 @@ class phemex(Exchange, ImplicitAPI):
2833
2833
  raise OrderNotFound(self.id + ' fetchOrder() ' + symbol + ' order with clientOrderId ' + clientOrderId + ' not found')
2834
2834
  else:
2835
2835
  raise OrderNotFound(self.id + ' fetchOrder() ' + symbol + ' order with id ' + id + ' not found')
2836
- order = self.safe_value(data, 0, {})
2836
+ order = self.safe_dict(data, 0, {})
2837
+ elif market['spot']:
2838
+ rows = self.safe_list(data, 'rows', [])
2839
+ order = self.safe_dict(rows, 0, {})
2837
2840
  return self.parse_order(order, market)
2838
2841
 
2839
2842
  def fetch_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
@@ -2864,7 +2867,7 @@ class phemex(Exchange, ImplicitAPI):
2864
2867
  elif market['swap']:
2865
2868
  response = self.privateGetExchangeOrderList(self.extend(request, params))
2866
2869
  else:
2867
- response = self.privateGetSpotOrders(self.extend(request, params))
2870
+ response = self.privateGetApiDataSpotsOrders(self.extend(request, params))
2868
2871
  data = self.safe_value(response, 'data', {})
2869
2872
  rows = self.safe_list(data, 'rows', data)
2870
2873
  return self.parse_orders(rows, market, since, limit)
ccxt/pro/__init__.py CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  # ----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.3.82'
7
+ __version__ = '4.3.84'
8
8
 
9
9
  # ----------------------------------------------------------------------------
10
10
 
ccxt/pro/binance.py CHANGED
@@ -1133,6 +1133,9 @@ class binance(ccxt.async_support.binance):
1133
1133
  :param dict [params.timezone]: if provided, kline intervals are interpreted in that timezone instead of UTC, example '+08:00'
1134
1134
  :returns int[][]: A list of candles ordered, open, high, low, close, volume
1135
1135
  """
1136
+ await self.load_markets()
1137
+ market = self.market(symbol)
1138
+ symbol = market['symbol']
1136
1139
  params['callerMethodName'] = 'watchOHLCV'
1137
1140
  result = await self.watch_ohlcv_for_symbols([[symbol, timeframe]], since, limit, params)
1138
1141
  return result[symbol][timeframe]
@@ -1179,7 +1182,7 @@ class binance(ccxt.async_support.binance):
1179
1182
  suffix = '@+08:00'
1180
1183
  utcSuffix = suffix if shouldUseUTC8 else ''
1181
1184
  rawHashes.append(marketId + '@' + klineType + '_' + interval + utcSuffix)
1182
- messageHashes.append('ohlcv::' + symbolString + '::' + timeframeString)
1185
+ messageHashes.append('ohlcv::' + market['symbol'] + '::' + timeframeString)
1183
1186
  url = self.urls['api']['ws'][type] + '/' + self.stream(type, 'multipleOHLCV')
1184
1187
  requestId = self.request_id(url)
1185
1188
  request = {
@@ -1434,6 +1437,8 @@ class binance(ccxt.async_support.binance):
1434
1437
  :param dict [params]: extra parameters specific to the exchange API endpoint
1435
1438
  :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
1436
1439
  """
1440
+ await self.load_markets()
1441
+ symbols = self.market_symbols(symbols, None, True, False, True)
1437
1442
  result = await self.watch_multi_ticker_helper('watchBidsAsks', 'bookTicker', symbols, params)
1438
1443
  if self.newUpdates:
1439
1444
  return result
ccxt/pro/bitrue.py CHANGED
@@ -401,13 +401,7 @@ class bitrue(ccxt.async_support.bitrue):
401
401
  async def authenticate(self, params={}):
402
402
  listenKey = self.safe_value(self.options, 'listenKey')
403
403
  if listenKey is None:
404
- response = None
405
- try:
406
- response = await self.openPrivatePostPoseidonApiV1ListenKey(params)
407
- except Exception as error:
408
- self.options['listenKey'] = None
409
- self.options['listenKeyUrl'] = None
410
- return None
404
+ response = await self.openPrivatePostPoseidonApiV1ListenKey(params)
411
405
  #
412
406
  # {
413
407
  # "msg": "succ",
ccxt/pro/gate.py CHANGED
@@ -1408,7 +1408,7 @@ class gate(ccxt.async_support.gate):
1408
1408
  errs = self.safe_dict(data, 'errs')
1409
1409
  error = self.safe_dict(message, 'error', errs)
1410
1410
  code = self.safe_string_2(error, 'code', 'label')
1411
- id = self.safe_string_2(message, 'id', 'requestId')
1411
+ id = self.safe_string_n(message, ['id', 'requestId', 'request_id'])
1412
1412
  if error is not None:
1413
1413
  messageHash = self.safe_string(client.subscriptions, id)
1414
1414
  try:
@@ -1421,7 +1421,7 @@ class gate(ccxt.async_support.gate):
1421
1421
  client.reject(e, messageHash)
1422
1422
  if (messageHash is not None) and (messageHash in client.subscriptions):
1423
1423
  del client.subscriptions[messageHash]
1424
- if id is not None:
1424
+ if (id is not None) and (id in client.subscriptions):
1425
1425
  del client.subscriptions[id]
1426
1426
  return True
1427
1427
  return False
@@ -1686,7 +1686,7 @@ class gate(ccxt.async_support.gate):
1686
1686
  'event': event,
1687
1687
  'payload': payload,
1688
1688
  }
1689
- return await self.watch(url, messageHash, request, messageHash)
1689
+ return await self.watch(url, messageHash, request, messageHash, requestId)
1690
1690
 
1691
1691
  async def subscribe_private(self, url, messageHash, payload, channel, params, requiresUid=False):
1692
1692
  self.check_required_credentials()
@@ -1724,4 +1724,4 @@ class gate(ccxt.async_support.gate):
1724
1724
  # in case of authenticationError we will throw
1725
1725
  client.subscriptions[tempSubscriptionHash] = messageHash
1726
1726
  message = self.extend(request, params)
1727
- return await self.watch(url, messageHash, message, messageHash)
1727
+ return await self.watch(url, messageHash, message, messageHash, messageHash)
ccxt/pro/okx.py CHANGED
@@ -335,6 +335,8 @@ class okx(ccxt.async_support.okx):
335
335
  channel = None
336
336
  channel, params = self.handle_option_and_params(params, 'watchTicker', 'channel', 'tickers')
337
337
  params['channel'] = channel
338
+ market = self.market(symbol)
339
+ symbol = market['symbol']
338
340
  ticker = await self.watch_tickers([symbol], params)
339
341
  return self.safe_value(ticker, symbol)
340
342
 
ccxt/pro/phemex.py CHANGED
@@ -31,6 +31,7 @@ class phemex(ccxt.async_support.phemex):
31
31
  'watchOrderBookForSymbols': False,
32
32
  'watchTradesForSymbols': False,
33
33
  'watchOHLCVForSymbols': False,
34
+ 'watchBalance': True,
34
35
  },
35
36
  'urls': {
36
37
  'test': {
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ccxt
3
- Version: 4.3.82
3
+ Version: 4.3.84
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
@@ -70,7 +70,6 @@ Current feature list:
70
70
 
71
71
 
72
72
  ## Sponsored Promotion
73
- [![bingx-campaign](https://github.com/user-attachments/assets/374fd5de-7d70-4281-85aa-d827afeb7270)](https://bingx.com/en/act/contestNew/7947320527/)
74
73
 
75
74
  ## See Also
76
75
 
@@ -270,13 +269,13 @@ console.log(version, Object.keys(exchanges));
270
269
 
271
270
  All-in-one browser bundle (dependencies included), served from a CDN of your choice:
272
271
 
273
- * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.3.82/dist/ccxt.browser.min.js
274
- * unpkg: https://unpkg.com/ccxt@4.3.82/dist/ccxt.browser.min.js
272
+ * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.3.84/dist/ccxt.browser.min.js
273
+ * unpkg: https://unpkg.com/ccxt@4.3.84/dist/ccxt.browser.min.js
275
274
 
276
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.
277
276
 
278
277
  ```HTML
279
- <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.3.82/dist/ccxt.browser.min.js"></script>
278
+ <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.3.84/dist/ccxt.browser.min.js"></script>
280
279
  ```
281
280
 
282
281
  Creates a global `ccxt` object:
@@ -1,10 +1,10 @@
1
- ccxt/__init__.py,sha256=Yrk5PWqhPkUaLUBLIM2PZCt2XYEru5fPHDA1rTe5HbQ,16417
1
+ ccxt/__init__.py,sha256=xC-AxNjzbac79_XlYeB4TOvksN8yURGPaJPdT4Uqjxk,16417
2
2
  ccxt/ace.py,sha256=Gee4ymA83iAuBFm3J8NaTb7qmu9buV2trA676KCtSVg,42383
3
3
  ccxt/alpaca.py,sha256=HQuhQZSFGRlT-BaCUSEZmxpzYp6tll2zn63qn3gTmoU,47470
4
4
  ccxt/ascendex.py,sha256=4aEwibO_me6khr66z8JFqDBxe2gtFOWIFBE7ulBEJPs,151933
5
5
  ccxt/bequant.py,sha256=RBiAmaTbL35DgiV3Hl6uchLUd78V0z1T9riTlNsrpdc,1174
6
6
  ccxt/bigone.py,sha256=PBciIENMufQQ6cxukdze5hhQ5vFOqBtMHDfTwT4nUuY,93086
7
- ccxt/binance.py,sha256=bzrq8F5iCWbC1JnDkcmw63hJ3Toq4Mpv5V6bxMZGlC0,640182
7
+ ccxt/binance.py,sha256=4Y-6ug_A4l-1zGNgD5XkN14CfvD-JT27oH_YT8PP0JY,641285
8
8
  ccxt/binancecoinm.py,sha256=arFnEh8mErSyi23eVPWE4iwoT7PWQyxGGVJCKCy6UJY,1702
9
9
  ccxt/binanceus.py,sha256=hdcT4OnadcdFFFjF3GtM0nWv90jqojqwdVS3xWGuW40,9163
10
10
  ccxt/binanceusdm.py,sha256=bAPcJj5HLxoCdPolriM8sJpoTBwbV78vBTbKRmWhNP4,2632
@@ -15,7 +15,7 @@ ccxt/bitbay.py,sha256=xAIjzGRDVGwoy-Gygd99H0YN4wiaz_0lR0Z14oxaaxc,478
15
15
  ccxt/bitbns.py,sha256=BxvljEPDCGPnaFGaWIIPF_xs079B2OnnbGWNfYlraHE,48269
16
16
  ccxt/bitcoincom.py,sha256=PyWIl4nC4jp5Uba2lI1At0N_hhNyWD0DoZC_MSyL_s4,502
17
17
  ccxt/bitfinex.py,sha256=8GoogNrMLM0UZoWkrxXehN8AN77DHxdD3p1aVarLlp4,73440
18
- ccxt/bitfinex2.py,sha256=m1PXKkM7tDf-ud-dmyqqYMF942IO3U0Du7AS3iVx-GU,160641
18
+ ccxt/bitfinex2.py,sha256=U1A_zTHPCh85eC69u3X6aHfQ4te68XA0KtM5Q-vbrWE,160644
19
19
  ccxt/bitflyer.py,sha256=biQ8-J_HSb9_S6HE1LBDd6BGpIZSMxK5JyTZ3Xg1SdI,41683
20
20
  ccxt/bitget.py,sha256=ZQvtdW3pnv-LVHG3a1UwR72b-K8Fq-BZ-tu_haz-v60,424620
21
21
  ccxt/bithumb.py,sha256=8oTnFWi8Ai9fnm5FPXvNmaUAVJEOqYi-18VC23cWmXY,47935
@@ -56,7 +56,7 @@ ccxt/deribit.py,sha256=hs6yUT8s7sfmO-GJ9RZ9nQC7Y9vnp_2puTRrd9r1Plw,161350
56
56
  ccxt/digifinex.py,sha256=pUPM7EEeRFoenX_jzNJM1RNuIUjATy6GB4J2osJJ4bY,169282
57
57
  ccxt/exmo.py,sha256=KlQqGZey31br-SVwhQg6mWIESyeM_wiIKRDOzIekuSs,114638
58
58
  ccxt/fmfwio.py,sha256=RbVLvzPwnqfDsE7Ea-N13ISCC82eJVPsXYjrleASmew,1236
59
- ccxt/gate.py,sha256=IJjP0zfV_BUdQLR6UxweOyqNkRB83j4YYIWQa0DQmtk,327599
59
+ 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/hitbtc.py,sha256=iqyd0otbWmIHUJiJ6gzIfe34IOa8PCEeS8nG6s6Ogc0,153398
@@ -69,7 +69,7 @@ ccxt/hyperliquid.py,sha256=r_xDktfiSdLDbxwkN_vCKSAu4n9uPyKVlWio-ligUms,109612
69
69
  ccxt/idex.py,sha256=P2jNsxiwIlMgrfPKbtmjLJQrzFcWp_TjgJaLq793oco,73255
70
70
  ccxt/independentreserve.py,sha256=ChkSnahGsn0aN_cfaAonSk-V2Aa1UB-0cPTa1d3AdI4,37713
71
71
  ccxt/indodax.py,sha256=rFfAwlYalCXdHQvhjmb7Zt4fGYqjoPv_koL21CBv-O8,53431
72
- ccxt/kraken.py,sha256=Zv0sz1qtaKe8DlGQpTMdpjhc9Elk4I9ovu7CXFpUfqs,130282
72
+ ccxt/kraken.py,sha256=mn5wIpTR2TnoKFIm5A1N8AxZAE-Ck2hPsVSKJSOtJdE,130190
73
73
  ccxt/krakenfutures.py,sha256=2K40RYEqHB2kgo9715eXc8O2SKcZpAb26iRdC70ftts,119521
74
74
  ccxt/kucoin.py,sha256=rwv5bdlaeFAMbo2vYpT3_mX_keeJmz5Nk5HF26Br3vA,226576
75
75
  ccxt/kucoinfutures.py,sha256=Mn9eflwmD_FmTCHYkRvyfxG3SU3Pgv9Hpj-6umYT3h8,124558
@@ -90,7 +90,7 @@ ccxt/oxfun.py,sha256=2d8Tr3c5SC2okb7mEWi3Y1lq9UC-enln54ydtDClCnY,124657
90
90
  ccxt/p2b.py,sha256=V_P8GTdb6SkeaVptVtc-LbjwUKUinfYFtO4nzmKG0N0,54333
91
91
  ccxt/paradex.py,sha256=-o0MAEgItYeo-juKgh2D-lnQIsjRKWMCupyMVPldsG8,85602
92
92
  ccxt/paymium.py,sha256=Xz-H66MQWQcQ1KJbciSMeremCD9kl2up_-IQUvBt22Y,24419
93
- ccxt/phemex.py,sha256=Xi0Cb6Zfe2_tZ0GZ_Iam_m2NEJ7fIDjHpOYc1vJ-VQk,223106
93
+ ccxt/phemex.py,sha256=-8diyEiBoscia_N33w-e6hTP7dGO8qND0s8OXQBl-oM,223253
94
94
  ccxt/poloniex.py,sha256=vaLhyTpZpzBvrrM6dCA_TVypLwLICXotixqiM27q-MA,102301
95
95
  ccxt/poloniexfutures.py,sha256=E0S38NKWPCKRM8RV-TJVxhhOj0vjF-9qR3cbtgmsIdk,78551
96
96
  ccxt/probit.py,sha256=MFA0bFG-xEx3ZDQIWebUKaP83mCjYKVcztk3e61Zx8Y,76165
@@ -218,13 +218,13 @@ ccxt/abstract/xt.py,sha256=JkWvsic3L2O968BCr9H5Wd5NIbRE9aTT2A-9WbAtl0c,27146
218
218
  ccxt/abstract/yobit.py,sha256=8ycfCO8ORFly9hc0Aa47sZyX4_ZKPXS9h9yJzI-uQ7Q,1339
219
219
  ccxt/abstract/zaif.py,sha256=m15WHdl3gYy0GOXNZ8NEH8eE7sVh8c0T_ITNuU8vXeU,3935
220
220
  ccxt/abstract/zonda.py,sha256=X-hCW0SdX3YKZWixDyW-O2211M58Rno8kKJ6quY7rw4,7183
221
- ccxt/async_support/__init__.py,sha256=ShVKd-IbmeJKBKH0V68UpB8cupTo9CTrp2de1CPDFxo,16230
221
+ ccxt/async_support/__init__.py,sha256=aORcbHfP4KpEc5qfYT1R7RlyB5TqUoyD-w1OXyfFs1U,16230
222
222
  ccxt/async_support/ace.py,sha256=zBmLUKH691a2BH1sPzlJPg-uO7lD6Ys92Rv8WSzNtoo,42607
223
223
  ccxt/async_support/alpaca.py,sha256=495vDvdF1IWlsh9QhUnMtkMuINdD0EzeFGlUVqCf8TE,47682
224
224
  ccxt/async_support/ascendex.py,sha256=LK259BdUqU0_STGRH6DmTgaR-7lXqFpZHFVACf2um5c,152721
225
225
  ccxt/async_support/bequant.py,sha256=1hTwHovo1bW1XTIc8ZKjvJ-Xg6LfmpGdzT7TepykaVM,1188
226
226
  ccxt/async_support/bigone.py,sha256=PZcs9u6FI6uAyJKiiNGIGDA-uainz4aKEOrC1Q6KIk4,93540
227
- ccxt/async_support/binance.py,sha256=nYDNOInWD94OIpVhzb_JOmjh2zDYaBaPIi_YUJXxq7Q,642904
227
+ ccxt/async_support/binance.py,sha256=QLNndO20b-A6sjSoaFnkSDMT7xwNh3lD3pA57r-gHis,644019
228
228
  ccxt/async_support/binancecoinm.py,sha256=yeE73xG5UXD_X3VPul6DMGnV_mgJfWYskpas1BUDdCU,1740
229
229
  ccxt/async_support/binanceus.py,sha256=c-K3Tk7LaRJjmYdCx8vBOqsx01uXrtvt0PC2ekBiD0g,9177
230
230
  ccxt/async_support/binanceusdm.py,sha256=8ugRkx7vyYmn67wdkEEf2f-DFMGAoC4t09usKlPVNyw,2670
@@ -235,7 +235,7 @@ ccxt/async_support/bitbay.py,sha256=jcaEXi2IhYTva8ezO_SfJhwxEZk7HST4J3NaxD16BQA,
235
235
  ccxt/async_support/bitbns.py,sha256=-z6MBwHpn0FXwfKffbOXSdZD2ZYEepMz1VU2ii84xN0,48523
236
236
  ccxt/async_support/bitcoincom.py,sha256=RiqwhK3RfxQ_PXTa860fphDCvwA8dalL-_rXlK85-8A,516
237
237
  ccxt/async_support/bitfinex.py,sha256=gypR-TDeWWlamJIjEYwbsEhMQYgu9kqAVvuNxOVWVTo,73880
238
- ccxt/async_support/bitfinex2.py,sha256=vTO61ELmw5d8A7xvmINff17pCWpoiIrVnc_RJzVic3M,161375
238
+ ccxt/async_support/bitfinex2.py,sha256=qMKpCv8q2VyssI6acoIKHjJrKBmyLGdK-oG7_a-mxzo,161378
239
239
  ccxt/async_support/bitflyer.py,sha256=hIrGMxaM78V1i-gHN2FRFAhI2aaLR21mPAoIE33fW70,41991
240
240
  ccxt/async_support/bitget.py,sha256=JloBQJwLONpLsNjzTxfabc-poDryi3xqwl66UNYi8DU,426244
241
241
  ccxt/async_support/bithumb.py,sha256=Q0Cx_cRKZRfdpBAhQyINm63Qw3M6BRYQRiF0UqYzfis,48214
@@ -276,7 +276,7 @@ ccxt/async_support/deribit.py,sha256=JfdtFswWctlKE_GOjoxFIVKTNq-LUeuVik59MAx-u8s
276
276
  ccxt/async_support/digifinex.py,sha256=6fj4RPpxV8ArNSBXm5_y_Mt7fzjYxYOSO8mcxGKXpUU,170252
277
277
  ccxt/async_support/exmo.py,sha256=uVJsy3mfNLpfbY0ndl2EF9hipUylEw8J58J3wCGyyA0,115270
278
278
  ccxt/async_support/fmfwio.py,sha256=lzfSnPrB2ARcC3EIqAuBM4vyg6LJ6n8RE71Zvt3ez1s,1250
279
- ccxt/async_support/gate.py,sha256=LS5x5skfemCLaH9LFmVEs6g5oLVV3Uq1XCGMYYQoLy0,329319
279
+ ccxt/async_support/gate.py,sha256=Y4dVM0if4e3a3uG_Wgj10t4oWRBHdjt-0Sp0v3yIWNg,329365
280
280
  ccxt/async_support/gateio.py,sha256=6_t032F9p9x5KGTjtSuqGXITzFOx-XAQBYLpsuQjzxw,459
281
281
  ccxt/async_support/gemini.py,sha256=7X5-PE3rPrPycUVXu3FtAcDFjNR3QUwYd6lPRQYQeEw,81389
282
282
  ccxt/async_support/hitbtc.py,sha256=jWmyRAy_wkpEidgjCxU0gWur99YJjYHPjD9CN4vJbUE,154444
@@ -289,7 +289,7 @@ ccxt/async_support/hyperliquid.py,sha256=wFj9yXEojlPWK4JT6aOWFI08P9EwkWT9m7Furqi
289
289
  ccxt/async_support/idex.py,sha256=UcAvdMc2CP_6E8lET4rmQiIP-RaUfZHSo6pQeA17v-g,73731
290
290
  ccxt/async_support/independentreserve.py,sha256=fCTAQ1U74KOZHIoYbDxzEly1xSgykcYcdpeiJiCEXkU,37991
291
291
  ccxt/async_support/indodax.py,sha256=m6F8bSiEz9c6UQuadeOfC40rnmlAVKkj94C1uvsc9k0,53739
292
- ccxt/async_support/kraken.py,sha256=UUuukP50quWE_oK8AtN7XwTWrntNxumr-hL0JhBrrfw,130932
292
+ ccxt/async_support/kraken.py,sha256=7NcBanzzk-4vzZ6mMbQocLJM6NnIEddLqyPmfFDgOUg,130840
293
293
  ccxt/async_support/krakenfutures.py,sha256=2r88_rC1cY7t4s8dgeqRUlwNC2NVaagS9wPAEonLAQs,120009
294
294
  ccxt/async_support/kucoin.py,sha256=XAOfLEyRUeHfS3pB5elec6F1M_ryPyaEKZle2rPFZDM,227677
295
295
  ccxt/async_support/kucoinfutures.py,sha256=uy8gNsJOI6SggxhYMH1TSTFM6rlzWvLknZL_KgCDLBE,125196
@@ -310,7 +310,7 @@ ccxt/async_support/oxfun.py,sha256=_Pv8E4yIKS10iPOpPuCFQgBuqGDzxuwvxROdJjwrYvc,1
310
310
  ccxt/async_support/p2b.py,sha256=aU_69L8hyfZEQ_yFJb6UoR_l0EbaeCTRgNvdDtk4QPs,54575
311
311
  ccxt/async_support/paradex.py,sha256=iN1obpvPvLikj30KiE4I7BGlBVBRLHpHifEH8vn8JdY,86210
312
312
  ccxt/async_support/paymium.py,sha256=GIAgyOjR11o1pfq8om4Pwr68jMkLoEwEz7sB8lIDMI0,24607
313
- ccxt/async_support/phemex.py,sha256=Xfa8kxrN6mEr6BGLNDnquGhMq0sk42qJ7P5Ckmb-0BE,223924
313
+ ccxt/async_support/phemex.py,sha256=NBo_6hAQUWCwH6EdQ8vIkBK2mV2N-qcAbW2wzROiunk,224071
314
314
  ccxt/async_support/poloniex.py,sha256=hYmiGQfwKyYcaPp1Q1Qa4gPP0TaqJrG2367y-q0WxXE,102849
315
315
  ccxt/async_support/poloniexfutures.py,sha256=iXEtcjHZBTEhgwkp8xbIqxObZf-OhfUr2yVwq5WlsMg,78937
316
316
  ccxt/async_support/probit.py,sha256=8XCtYbAIIQNjfdLfMVwjaJ9vM_7QWnEQ86yYZYPlS8M,76557
@@ -329,7 +329,7 @@ ccxt/async_support/yobit.py,sha256=GQhvYrsGHQrVdTrNHQxx9isEGqUABexlllzao9HL3f8,5
329
329
  ccxt/async_support/zaif.py,sha256=-ZTr8M2JaIRCL90VrbCDXBMAsZwbiwsFChSQ2rWODuQ,29044
330
330
  ccxt/async_support/zonda.py,sha256=jncr6Wg12S72CTpu6mCKCse1pm1f8oefVQurQSrFvP0,81733
331
331
  ccxt/async_support/base/__init__.py,sha256=aVYSsFi--b4InRs9zDN_wtCpj8odosAB726JdUHavrk,67
332
- ccxt/async_support/base/exchange.py,sha256=QKnrZhy6RCzRR3C-r6A1JLaJKx6jc9_7Sgmrp31pqNg,110799
332
+ ccxt/async_support/base/exchange.py,sha256=2OWQI4yYKUSFlbMvsIC2P5VQsDw9az1g51QcxOoL3R4,110799
333
333
  ccxt/async_support/base/throttler.py,sha256=tvDVcdRUVYi8fZRlEcnqtgzcgB_KMUMRs5Pu8tuU-tU,1847
334
334
  ccxt/async_support/base/ws/__init__.py,sha256=uockzpLuwntKGZbs5EOWFe-Zg-k6Cj7GhNJLc_RX0so,1791
335
335
  ccxt/async_support/base/ws/aiohttp_client.py,sha256=5IEiT0elWI9a7Vr-KV0jgmlbpLJWBzIlrLaCkTKGaqY,5752
@@ -343,14 +343,14 @@ ccxt/async_support/base/ws/order_book_side.py,sha256=GhnGUt78pJ-AYL_Dq9produGjmB
343
343
  ccxt/base/__init__.py,sha256=eTx1OE3HJjspFUQjGm6LBhaQiMKJnXjkdP-JUXknyQ0,1320
344
344
  ccxt/base/decimal_to_precision.py,sha256=fgWRBzRTtsf3r2INyS4f7WHlzgjB5YM1ekiwqD21aac,6634
345
345
  ccxt/base/errors.py,sha256=tosnf1tDaBn4YMCbWVNWyDYzqft-ImVtyjqJb6q83Y4,4369
346
- ccxt/base/exchange.py,sha256=aTruoZiEhm40hCTqbxvYDiQqwrfFs3vrtpUtwA-QKuA,295904
346
+ ccxt/base/exchange.py,sha256=noOssd9lkOx65w0VZTT28RhoaTYEAa11Q8qtZm-djh0,295904
347
347
  ccxt/base/precise.py,sha256=koce64Yrp6vFbGijJtUt-QQ6XhJgeGTCksZ871FPp_A,8886
348
348
  ccxt/base/types.py,sha256=TaP_RElKjGEZWuzyp4o4u2YhREyTG3rUeVT6gDffY9A,9613
349
- ccxt/pro/__init__.py,sha256=7b_tKNpb9iGmSG-ObTled4qVXYnCsO3Dq4x21OkUHCo,7608
349
+ ccxt/pro/__init__.py,sha256=zJvE5fm49Ypdtd26y5jxcipKgh6nJZEulWqYFpO4IiQ,7608
350
350
  ccxt/pro/alpaca.py,sha256=xh1yg1Ok-Zh_Mfx-MBjNrfJDs6MUU0exFfEj3GuQPC4,27631
351
351
  ccxt/pro/ascendex.py,sha256=181FIeztchLqGmgecRJEN8F8xEM45D5aMKhC-5nuNfU,35467
352
352
  ccxt/pro/bequant.py,sha256=33OEUWBi4D9-2w8CmkwN3aF1qS-AlLqX3pxrWwNbXPY,1552
353
- ccxt/pro/binance.py,sha256=thzqKZtSq4V0-JujAUbD6hxM_Vy9siCxUXYywP0xgc8,177852
353
+ ccxt/pro/binance.py,sha256=pFuGKmbf2gi6cTtQOuEwOWtczOQW5K9SYOTxswNuDlU,178067
354
354
  ccxt/pro/binancecoinm.py,sha256=LlgF4rXHHrsQMaklhTEzSiE6U9V25AjHHg_DRat7Mf0,1036
355
355
  ccxt/pro/binanceus.py,sha256=_IXpS_wyH0nEtsLR7cJLtrUlsNQoG0MSUVo3PV0RDDc,1946
356
356
  ccxt/pro/binanceusdm.py,sha256=lLdOv0d-lM-1wfCc_y_POb6GdmVIiX7PFzmKTWsVyNw,1512
@@ -364,7 +364,7 @@ ccxt/pro/bitmart.py,sha256=LxcP6aiCdwN-euseCMhsXZkhqesPJM-eLh549sGHHfo,62556
364
364
  ccxt/pro/bitmex.py,sha256=dNQf2EAim7kxgCM6I1TgFDl-e2zrXa2veicTEqu8WbQ,73949
365
365
  ccxt/pro/bitopro.py,sha256=2pCutMnav21uVEkqjUhrI80opxW5NWUkn2IK9-Y2hNQ,18750
366
366
  ccxt/pro/bitpanda.py,sha256=ELrhfFKN9YJJdmm9wBf-vpk6WsXGWGf-SyJdqm-E_Lg,415
367
- ccxt/pro/bitrue.py,sha256=aDbPloGgsEN_DnoAJCkM0Y4MJ1r57OvoKpinynhRNrA,16463
367
+ ccxt/pro/bitrue.py,sha256=0-aa3Q8oGLnq71fJQYLyy0jI3NHHTFJuMQAyM0XRLFY,16246
368
368
  ccxt/pro/bitstamp.py,sha256=P8Td5HqWiO6GMdLj-cKqPTZD28fltWlZQ7Z-omDbO60,20916
369
369
  ccxt/pro/bitvavo.py,sha256=POivGXYmz8GqYc_uErpS6BdG2Gv087BStiJ3lQwod-A,56219
370
370
  ccxt/pro/blockchaincom.py,sha256=LtCL3habcuB2IRXXK_oeqdzqpnkj01Gr79X82nK8Mnk,29600
@@ -381,7 +381,7 @@ ccxt/pro/cryptocom.py,sha256=Zrh6noBvrMIcSLgVUuzxW7SPcJzUQDlcqMFU4JsnwLE,43318
381
381
  ccxt/pro/currencycom.py,sha256=8B9pSuPyO0ROCWOROUFoNbJBeOU3bRmlKXSj1CBMkPI,22459
382
382
  ccxt/pro/deribit.py,sha256=DG3UJE8VWuydP64_CJzDqmRC0vqc9ViBvQr28gW_nhY,41094
383
383
  ccxt/pro/exmo.py,sha256=n44MqOwY-tSt0TFNhQKydjxRJoSbrMVBzL4NNswOZm4,24542
384
- ccxt/pro/gate.py,sha256=75uP48pcrhppAiSgrNiS7vQoTTraDj7qPzf8JZCXtgo,79247
384
+ ccxt/pro/gate.py,sha256=PhhmAgeY2IcSIpCdeQcZlhc19neXJkYrRL4W8Bocs84,79322
385
385
  ccxt/pro/gateio.py,sha256=_uBWXYQbmsHRivKnZOJDmxJ9tWLO_0HAxmOjAEUy9nE,391
386
386
  ccxt/pro/gemini.py,sha256=8B8dbYPbKbZb3lzhlt8-x0oybQxOHr8Q4R_f5edLwbU,36899
387
387
  ccxt/pro/hitbtc.py,sha256=hhzNO9qGnALrRlMc7Bw0acIGHhFXVA6sUsTRGrWwYkc,56889
@@ -401,12 +401,12 @@ ccxt/pro/luno.py,sha256=AzLK0_C0Hu25ukMNkMLP_sY3D4UG9FT38oawpo4jzTg,12336
401
401
  ccxt/pro/mexc.py,sha256=yiLfthMojs2T-sUzzhDjmTTNFc8Ob8S85ovpPb_I7Ts,43270
402
402
  ccxt/pro/ndax.py,sha256=fQsoYtrTEsCZB3hl-pavQytwQAaiMAiTyaCiOy1sVTg,22715
403
403
  ccxt/pro/okcoin.py,sha256=elwHzrWUSuU7Edp1oisxAnvst5IpxjyzgqLVMEHZWIU,30429
404
- ccxt/pro/okx.py,sha256=Fw1vYXvik0E1l_IQ1ATymUtvxk5jXEMV-isVMbXQXQI,84823
404
+ ccxt/pro/okx.py,sha256=J59wN1DpFT6X3_OsD2sxqnB1OczrLPBKs-xvHGmYE60,84894
405
405
  ccxt/pro/onetrading.py,sha256=Qlr6LRRqO8te7QyTIhCk5nXJnupH8MtRWhQnH3Zc9yE,54769
406
406
  ccxt/pro/oxfun.py,sha256=gcmnoD0pzEDVIaiHyuU2ABoQBrxi0CTP62H2xZD0T7g,43943
407
407
  ccxt/pro/p2b.py,sha256=qulHrptdJ48MtOQ0bOZH3h_An8Ybu14cU6cJrySV5KQ,17897
408
408
  ccxt/pro/paradex.py,sha256=9SkO-QV08sGeh5e349hL36u4snxAYuqjdVvJlKgQhH0,14299
409
- ccxt/pro/phemex.py,sha256=iwdftOXQIiP_Ns7PHD-5vlL74H5vtPUWOQ1zh7fyuD8,61069
409
+ ccxt/pro/phemex.py,sha256=ZFQLhlrFKxzoFziHAvM2G1pzf-goRYjdZ-ikVGfeNXw,61107
410
410
  ccxt/pro/poloniex.py,sha256=e81Vkvg2oRW51nXECf6lF7Cjj5CbHv7Np2QSy6z0h3k,52108
411
411
  ccxt/pro/poloniexfutures.py,sha256=Iy8Q_Z8I3rUtNcZoxwVzMK2C1qLIiHjFXdZd_rr3Sww,41972
412
412
  ccxt/pro/probit.py,sha256=ngY30aRwNClc_q_Pirajg4-K-mJ3bvipgD2-jBuPs6g,23110
@@ -648,8 +648,8 @@ ccxt/test/tests_async.py,sha256=NShOLO2-HzYsh07U7aiUGssiv-AZ_p88h-NuQub9OKU,8468
648
648
  ccxt/test/tests_helpers.py,sha256=xhOILoZ_x3RSfQjtKt6AQlkp9DkOtpTQe8GAUUZoM6s,10069
649
649
  ccxt/test/tests_init.py,sha256=eVwwUHujX9t4rjgo4TqEeg7DDhR1Hb_e2SJN8NVGyl0,998
650
650
  ccxt/test/tests_sync.py,sha256=6Arr2TcJpNg9eEpH_JQeBbLzaMPlb94J1P11HGlbpPg,83761
651
- ccxt-4.3.82.dist-info/LICENSE.txt,sha256=EIb9221AhMHV7xF1_55STFdKTFsnJVJYkRpY2Lnvo5w,1068
652
- ccxt-4.3.82.dist-info/METADATA,sha256=x9Jn56o7pcvpgLkau0eijaJ4wHQ0xNvdbibC55_ot_g,116642
653
- ccxt-4.3.82.dist-info/WHEEL,sha256=z9j0xAa_JmUKMpmz72K0ZGALSM_n-wQVmGbleXx2VHg,110
654
- ccxt-4.3.82.dist-info/top_level.txt,sha256=CkQDuCTDKNcImPV60t36G6MdYfxsAPNiSaEwifVoVMo,5
655
- ccxt-4.3.82.dist-info/RECORD,,
651
+ ccxt-4.3.84.dist-info/LICENSE.txt,sha256=EIb9221AhMHV7xF1_55STFdKTFsnJVJYkRpY2Lnvo5w,1068
652
+ ccxt-4.3.84.dist-info/METADATA,sha256=pGkNPDyr3HOUr1NMfiFmukg_XRKm00rSb5i1URnR0bE,116492
653
+ ccxt-4.3.84.dist-info/WHEEL,sha256=z9j0xAa_JmUKMpmz72K0ZGALSM_n-wQVmGbleXx2VHg,110
654
+ ccxt-4.3.84.dist-info/top_level.txt,sha256=CkQDuCTDKNcImPV60t36G6MdYfxsAPNiSaEwifVoVMo,5
655
+ ccxt-4.3.84.dist-info/RECORD,,
File without changes