ccxt 4.2.83__py2.py3-none-any.whl → 4.2.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.

Potentially problematic release.


This version of ccxt might be problematic. Click here for more details.

ccxt/__init__.py CHANGED
@@ -22,7 +22,7 @@
22
22
 
23
23
  # ----------------------------------------------------------------------------
24
24
 
25
- __version__ = '4.2.83'
25
+ __version__ = '4.2.84'
26
26
 
27
27
  # ----------------------------------------------------------------------------
28
28
 
ccxt/abstract/bybit.py CHANGED
@@ -265,7 +265,7 @@ class ImplicitAPI:
265
265
  private_post_v5_account_set_hedging_mode = privatePostV5AccountSetHedgingMode = Entry('v5/account/set-hedging-mode', 'private', 'POST', {'cost': 5})
266
266
  private_post_v5_account_mmp_modify = privatePostV5AccountMmpModify = Entry('v5/account/mmp-modify', 'private', 'POST', {'cost': 5})
267
267
  private_post_v5_account_mmp_reset = privatePostV5AccountMmpReset = Entry('v5/account/mmp-reset', 'private', 'POST', {'cost': 5})
268
- private_post_v5_asset_transfer_inter_transfer = privatePostV5AssetTransferInterTransfer = Entry('v5/asset/transfer/inter-transfer', 'private', 'POST', {'cost': 150})
268
+ private_post_v5_asset_transfer_inter_transfer = privatePostV5AssetTransferInterTransfer = Entry('v5/asset/transfer/inter-transfer', 'private', 'POST', {'cost': 50})
269
269
  private_post_v5_asset_transfer_save_transfer_sub_member = privatePostV5AssetTransferSaveTransferSubMember = Entry('v5/asset/transfer/save-transfer-sub-member', 'private', 'POST', {'cost': 150})
270
270
  private_post_v5_asset_transfer_universal_transfer = privatePostV5AssetTransferUniversalTransfer = Entry('v5/asset/transfer/universal-transfer', 'private', 'POST', {'cost': 10})
271
271
  private_post_v5_asset_deposit_deposit_to_account = privatePostV5AssetDepositDepositToAccount = Entry('v5/asset/deposit/deposit-to-account', 'private', 'POST', {'cost': 5})
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.2.83'
7
+ __version__ = '4.2.84'
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # -----------------------------------------------------------------------------
4
4
 
5
- __version__ = '4.2.83'
5
+ __version__ = '4.2.84'
6
6
 
7
7
  # -----------------------------------------------------------------------------
8
8
 
@@ -2692,6 +2692,7 @@ class bitget(Exchange, ImplicitAPI):
2692
2692
  :see: https://www.bitget.com/api-doc/contract/market/Get-All-Symbol-Ticker
2693
2693
  :param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
2694
2694
  :param dict [params]: extra parameters specific to the exchange API endpoint
2695
+ :param str [params.subType]: *contract only* 'linear', 'inverse'
2695
2696
  :param str [params.productType]: *contract only* 'USDT-FUTURES', 'USDC-FUTURES', 'COIN-FUTURES', 'SUSDT-FUTURES', 'SUSDC-FUTURES' or 'SCOIN-FUTURES'
2696
2697
  :returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
2697
2698
  """
@@ -2705,15 +2706,20 @@ class bitget(Exchange, ImplicitAPI):
2705
2706
  market = self.market(sandboxSymbol)
2706
2707
  else:
2707
2708
  market = self.market(symbol)
2709
+ response = None
2708
2710
  request = {}
2709
2711
  type = None
2710
2712
  type, params = self.handle_market_type_and_params('fetchTickers', market, params)
2711
- response = None
2712
- if type == 'spot':
2713
+ # Calls like `.fetch_tickers(None, {subType:'inverse'})` should be supported for self exchange, so
2714
+ # as "options.defaultSubType" is also set in exchange options, we should consider `params.subType`
2715
+ # with higher priority and only default to spot, if `subType` is not set in params
2716
+ passedSubType = self.safe_string(params, 'subType')
2717
+ productType = None
2718
+ productType, params = self.handle_product_type_and_params(market, params)
2719
+ # only if passedSubType and productType is None, then use spot
2720
+ if type == 'spot' and passedSubType is None:
2713
2721
  response = await self.publicSpotGetV2SpotMarketTickers(self.extend(request, params))
2714
2722
  else:
2715
- productType = None
2716
- productType, params = self.handle_product_type_and_params(market, params)
2717
2723
  request['productType'] = productType
2718
2724
  response = await self.publicMixGetV2MixMarketTickers(self.extend(request, params))
2719
2725
  #
@@ -37,7 +37,7 @@ class bybit(Exchange, ImplicitAPI):
37
37
  'version': 'v5',
38
38
  'userAgent': None,
39
39
  'rateLimit': 20,
40
- 'hostname': 'bybit.com', # bybit.com, bytick.com
40
+ 'hostname': 'bybit.com', # bybit.com, bytick.com, bybit.nl, bybit.com.hk
41
41
  'pro': True,
42
42
  'certified': True,
43
43
  'has': {
@@ -483,7 +483,7 @@ class bybit(Exchange, ImplicitAPI):
483
483
  'v5/account/mmp-modify': 5,
484
484
  'v5/account/mmp-reset': 5,
485
485
  # asset
486
- 'v5/asset/transfer/inter-transfer': 150, # 1/3/s => cost = 50 / 1/3 = 150
486
+ 'v5/asset/transfer/inter-transfer': 50, # 1/s => cost = 50 / 1 = 50
487
487
  'v5/asset/transfer/save-transfer-sub-member': 150, # 1/3/s => cost = 50 / 1/3 = 150
488
488
  'v5/asset/transfer/universal-transfer': 10, # 5/s => cost = 50 / 5 = 10
489
489
  'v5/asset/deposit/deposit-to-account': 5,
@@ -2716,10 +2716,10 @@ class bybit(Exchange, ImplicitAPI):
2716
2716
  # limit: [1, 25]. Default: 1
2717
2717
  request['category'] = 'option'
2718
2718
  elif market['linear']:
2719
- # limit: [1, 200]. Default: 25
2719
+ # limit: [1, 500]. Default: 25
2720
2720
  request['category'] = 'linear'
2721
2721
  elif market['inverse']:
2722
- # limit: [1, 200]. Default: 25
2722
+ # limit: [1, 500]. Default: 25
2723
2723
  request['category'] = 'inverse'
2724
2724
  request['limit'] = limit if (limit is not None) else defaultLimit
2725
2725
  response = await self.publicGetV5MarketOrderbook(self.extend(request, params))
@@ -3515,8 +3515,7 @@ class coinex(Exchange, ImplicitAPI):
3515
3515
  # }
3516
3516
  #
3517
3517
  marketId = self.safe_string(position, 'market')
3518
- defaultType = self.safe_string(self.options, 'defaultType')
3519
- market = self.safe_market(marketId, market, None, defaultType)
3518
+ market = self.safe_market(marketId, market, None, 'swap')
3520
3519
  symbol = market['symbol']
3521
3520
  positionId = self.safe_integer(position, 'position_id')
3522
3521
  marginModeInteger = self.safe_integer(position, 'type')
ccxt/async_support/htx.py CHANGED
@@ -2141,7 +2141,7 @@ class htx(Exchange, ImplicitAPI):
2141
2141
  # "ts":1639547261293
2142
2142
  # }
2143
2143
  #
2144
- # inverse swaps, linear swaps, inverse futures
2144
+ # linear swap, linear future, inverse swap, inverse future
2145
2145
  #
2146
2146
  # {
2147
2147
  # "status":"ok",
@@ -2158,37 +2158,15 @@ class htx(Exchange, ImplicitAPI):
2158
2158
  # "high":"0.10725",
2159
2159
  # "amount":"2340267.415144052378486261756692535687481566",
2160
2160
  # "count":882,
2161
- # "vol":"24706"
2161
+ # "vol":"24706",
2162
+ # "trade_turnover":"840726.5048", # only in linear futures
2163
+ # "business_type":"futures", # only in linear futures
2164
+ # "contract_code":"BTC-USDT-CW", # only in linear futures, instead of 'symbol'
2162
2165
  # }
2163
2166
  # ],
2164
2167
  # "ts":1637504679376
2165
2168
  # }
2166
2169
  #
2167
- # linear futures
2168
- #
2169
- # {
2170
- # "status":"ok",
2171
- # "ticks":[
2172
- # {
2173
- # "id":1640745627,
2174
- # "ts":1640745627957,
2175
- # "ask":[48079.1,20],
2176
- # "bid":[47713.8,125],
2177
- # "business_type":"futures",
2178
- # "contract_code":"BTC-USDT-CW",
2179
- # "open":"49011.8",
2180
- # "close":"47934",
2181
- # "low":"47292.3",
2182
- # "high":"49011.8",
2183
- # "amount":"17.398",
2184
- # "count":1515,
2185
- # "vol":"17398",
2186
- # "trade_turnover":"840726.5048"
2187
- # }
2188
- # ],
2189
- # "ts":1640745627988
2190
- # }
2191
- #
2192
2170
  tickers = self.safe_value_2(response, 'data', 'ticks', [])
2193
2171
  timestamp = self.safe_integer(response, 'ts')
2194
2172
  result = {}
@@ -26,6 +26,7 @@ from ccxt.base.errors import RateLimitExceeded
26
26
  from ccxt.base.errors import ExchangeNotAvailable
27
27
  from ccxt.base.errors import InvalidNonce
28
28
  from ccxt.base.errors import AuthenticationError
29
+ from ccxt.base.decimal_to_precision import TRUNCATE
29
30
  from ccxt.base.decimal_to_precision import TICK_SIZE
30
31
  from ccxt.base.precise import Precise
31
32
 
@@ -442,6 +443,7 @@ class kucoin(Exchange, ImplicitAPI):
442
443
  'Order size below the minimum requirement.': InvalidOrder, # {"code":"400100","msg":"Order size below the minimum requirement."}
443
444
  'The withdrawal amount is below the minimum requirement.': ExchangeError, # {"code":"400100","msg":"The withdrawal amount is below the minimum requirement."}
444
445
  'Unsuccessful! Exceeded the max. funds out-transfer limit': InsufficientFunds, # {"code":"200000","msg":"Unsuccessful! Exceeded the max. funds out-transfer limit"}
446
+ 'The amount increment is invalid.': BadRequest,
445
447
  '400': BadRequest,
446
448
  '401': AuthenticationError,
447
449
  '403': NotSupported,
@@ -2092,6 +2094,13 @@ class kucoin(Exchange, ImplicitAPI):
2092
2094
  data = self.safe_list(data, 'data', [])
2093
2095
  return self.parse_orders(data)
2094
2096
 
2097
+ def market_order_amount_to_precision(self, symbol: str, amount):
2098
+ market = self.market(symbol)
2099
+ result = self.decimal_to_precision(amount, TRUNCATE, market['info']['quoteIncrement'], self.precisionMode, self.paddingMode)
2100
+ if result == '0':
2101
+ raise InvalidOrder(self.id + ' amount of ' + market['symbol'] + ' must be greater than minimum amount precision of ' + self.number_to_string(market['precision']['amount']))
2102
+ return result
2103
+
2095
2104
  def create_order_request(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
2096
2105
  market = self.market(symbol)
2097
2106
  # required param, cannot be used twice
@@ -2112,7 +2121,7 @@ class kucoin(Exchange, ImplicitAPI):
2112
2121
  if quoteAmount is not None:
2113
2122
  params = self.omit(params, ['cost', 'funds'])
2114
2123
  # kucoin uses base precision even for quote values
2115
- costString = self.amount_to_precision(symbol, quoteAmount)
2124
+ costString = self.market_order_amount_to_precision(symbol, quoteAmount)
2116
2125
  request['funds'] = costString
2117
2126
  else:
2118
2127
  amountString = self.amount_to_precision(symbol, amount)
ccxt/base/exchange.py CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.2.83'
7
+ __version__ = '4.2.84'
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
ccxt/bitget.py CHANGED
@@ -2691,6 +2691,7 @@ class bitget(Exchange, ImplicitAPI):
2691
2691
  :see: https://www.bitget.com/api-doc/contract/market/Get-All-Symbol-Ticker
2692
2692
  :param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
2693
2693
  :param dict [params]: extra parameters specific to the exchange API endpoint
2694
+ :param str [params.subType]: *contract only* 'linear', 'inverse'
2694
2695
  :param str [params.productType]: *contract only* 'USDT-FUTURES', 'USDC-FUTURES', 'COIN-FUTURES', 'SUSDT-FUTURES', 'SUSDC-FUTURES' or 'SCOIN-FUTURES'
2695
2696
  :returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
2696
2697
  """
@@ -2704,15 +2705,20 @@ class bitget(Exchange, ImplicitAPI):
2704
2705
  market = self.market(sandboxSymbol)
2705
2706
  else:
2706
2707
  market = self.market(symbol)
2708
+ response = None
2707
2709
  request = {}
2708
2710
  type = None
2709
2711
  type, params = self.handle_market_type_and_params('fetchTickers', market, params)
2710
- response = None
2711
- if type == 'spot':
2712
+ # Calls like `.fetch_tickers(None, {subType:'inverse'})` should be supported for self exchange, so
2713
+ # as "options.defaultSubType" is also set in exchange options, we should consider `params.subType`
2714
+ # with higher priority and only default to spot, if `subType` is not set in params
2715
+ passedSubType = self.safe_string(params, 'subType')
2716
+ productType = None
2717
+ productType, params = self.handle_product_type_and_params(market, params)
2718
+ # only if passedSubType and productType is None, then use spot
2719
+ if type == 'spot' and passedSubType is None:
2712
2720
  response = self.publicSpotGetV2SpotMarketTickers(self.extend(request, params))
2713
2721
  else:
2714
- productType = None
2715
- productType, params = self.handle_product_type_and_params(market, params)
2716
2722
  request['productType'] = productType
2717
2723
  response = self.publicMixGetV2MixMarketTickers(self.extend(request, params))
2718
2724
  #
ccxt/bybit.py CHANGED
@@ -36,7 +36,7 @@ class bybit(Exchange, ImplicitAPI):
36
36
  'version': 'v5',
37
37
  'userAgent': None,
38
38
  'rateLimit': 20,
39
- 'hostname': 'bybit.com', # bybit.com, bytick.com
39
+ 'hostname': 'bybit.com', # bybit.com, bytick.com, bybit.nl, bybit.com.hk
40
40
  'pro': True,
41
41
  'certified': True,
42
42
  'has': {
@@ -482,7 +482,7 @@ class bybit(Exchange, ImplicitAPI):
482
482
  'v5/account/mmp-modify': 5,
483
483
  'v5/account/mmp-reset': 5,
484
484
  # asset
485
- 'v5/asset/transfer/inter-transfer': 150, # 1/3/s => cost = 50 / 1/3 = 150
485
+ 'v5/asset/transfer/inter-transfer': 50, # 1/s => cost = 50 / 1 = 50
486
486
  'v5/asset/transfer/save-transfer-sub-member': 150, # 1/3/s => cost = 50 / 1/3 = 150
487
487
  'v5/asset/transfer/universal-transfer': 10, # 5/s => cost = 50 / 5 = 10
488
488
  'v5/asset/deposit/deposit-to-account': 5,
@@ -2715,10 +2715,10 @@ class bybit(Exchange, ImplicitAPI):
2715
2715
  # limit: [1, 25]. Default: 1
2716
2716
  request['category'] = 'option'
2717
2717
  elif market['linear']:
2718
- # limit: [1, 200]. Default: 25
2718
+ # limit: [1, 500]. Default: 25
2719
2719
  request['category'] = 'linear'
2720
2720
  elif market['inverse']:
2721
- # limit: [1, 200]. Default: 25
2721
+ # limit: [1, 500]. Default: 25
2722
2722
  request['category'] = 'inverse'
2723
2723
  request['limit'] = limit if (limit is not None) else defaultLimit
2724
2724
  response = self.publicGetV5MarketOrderbook(self.extend(request, params))
ccxt/coinex.py CHANGED
@@ -3514,8 +3514,7 @@ class coinex(Exchange, ImplicitAPI):
3514
3514
  # }
3515
3515
  #
3516
3516
  marketId = self.safe_string(position, 'market')
3517
- defaultType = self.safe_string(self.options, 'defaultType')
3518
- market = self.safe_market(marketId, market, None, defaultType)
3517
+ market = self.safe_market(marketId, market, None, 'swap')
3519
3518
  symbol = market['symbol']
3520
3519
  positionId = self.safe_integer(position, 'position_id')
3521
3520
  marginModeInteger = self.safe_integer(position, 'type')
ccxt/htx.py CHANGED
@@ -2140,7 +2140,7 @@ class htx(Exchange, ImplicitAPI):
2140
2140
  # "ts":1639547261293
2141
2141
  # }
2142
2142
  #
2143
- # inverse swaps, linear swaps, inverse futures
2143
+ # linear swap, linear future, inverse swap, inverse future
2144
2144
  #
2145
2145
  # {
2146
2146
  # "status":"ok",
@@ -2157,37 +2157,15 @@ class htx(Exchange, ImplicitAPI):
2157
2157
  # "high":"0.10725",
2158
2158
  # "amount":"2340267.415144052378486261756692535687481566",
2159
2159
  # "count":882,
2160
- # "vol":"24706"
2160
+ # "vol":"24706",
2161
+ # "trade_turnover":"840726.5048", # only in linear futures
2162
+ # "business_type":"futures", # only in linear futures
2163
+ # "contract_code":"BTC-USDT-CW", # only in linear futures, instead of 'symbol'
2161
2164
  # }
2162
2165
  # ],
2163
2166
  # "ts":1637504679376
2164
2167
  # }
2165
2168
  #
2166
- # linear futures
2167
- #
2168
- # {
2169
- # "status":"ok",
2170
- # "ticks":[
2171
- # {
2172
- # "id":1640745627,
2173
- # "ts":1640745627957,
2174
- # "ask":[48079.1,20],
2175
- # "bid":[47713.8,125],
2176
- # "business_type":"futures",
2177
- # "contract_code":"BTC-USDT-CW",
2178
- # "open":"49011.8",
2179
- # "close":"47934",
2180
- # "low":"47292.3",
2181
- # "high":"49011.8",
2182
- # "amount":"17.398",
2183
- # "count":1515,
2184
- # "vol":"17398",
2185
- # "trade_turnover":"840726.5048"
2186
- # }
2187
- # ],
2188
- # "ts":1640745627988
2189
- # }
2190
- #
2191
2169
  tickers = self.safe_value_2(response, 'data', 'ticks', [])
2192
2170
  timestamp = self.safe_integer(response, 'ts')
2193
2171
  result = {}
ccxt/kucoin.py CHANGED
@@ -25,6 +25,7 @@ from ccxt.base.errors import RateLimitExceeded
25
25
  from ccxt.base.errors import ExchangeNotAvailable
26
26
  from ccxt.base.errors import InvalidNonce
27
27
  from ccxt.base.errors import AuthenticationError
28
+ from ccxt.base.decimal_to_precision import TRUNCATE
28
29
  from ccxt.base.decimal_to_precision import TICK_SIZE
29
30
  from ccxt.base.precise import Precise
30
31
 
@@ -441,6 +442,7 @@ class kucoin(Exchange, ImplicitAPI):
441
442
  'Order size below the minimum requirement.': InvalidOrder, # {"code":"400100","msg":"Order size below the minimum requirement."}
442
443
  'The withdrawal amount is below the minimum requirement.': ExchangeError, # {"code":"400100","msg":"The withdrawal amount is below the minimum requirement."}
443
444
  'Unsuccessful! Exceeded the max. funds out-transfer limit': InsufficientFunds, # {"code":"200000","msg":"Unsuccessful! Exceeded the max. funds out-transfer limit"}
445
+ 'The amount increment is invalid.': BadRequest,
444
446
  '400': BadRequest,
445
447
  '401': AuthenticationError,
446
448
  '403': NotSupported,
@@ -2091,6 +2093,13 @@ class kucoin(Exchange, ImplicitAPI):
2091
2093
  data = self.safe_list(data, 'data', [])
2092
2094
  return self.parse_orders(data)
2093
2095
 
2096
+ def market_order_amount_to_precision(self, symbol: str, amount):
2097
+ market = self.market(symbol)
2098
+ result = self.decimal_to_precision(amount, TRUNCATE, market['info']['quoteIncrement'], self.precisionMode, self.paddingMode)
2099
+ if result == '0':
2100
+ raise InvalidOrder(self.id + ' amount of ' + market['symbol'] + ' must be greater than minimum amount precision of ' + self.number_to_string(market['precision']['amount']))
2101
+ return result
2102
+
2094
2103
  def create_order_request(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
2095
2104
  market = self.market(symbol)
2096
2105
  # required param, cannot be used twice
@@ -2111,7 +2120,7 @@ class kucoin(Exchange, ImplicitAPI):
2111
2120
  if quoteAmount is not None:
2112
2121
  params = self.omit(params, ['cost', 'funds'])
2113
2122
  # kucoin uses base precision even for quote values
2114
- costString = self.amount_to_precision(symbol, quoteAmount)
2123
+ costString = self.market_order_amount_to_precision(symbol, quoteAmount)
2115
2124
  request['funds'] = costString
2116
2125
  else:
2117
2126
  amountString = self.amount_to_precision(symbol, amount)
ccxt/pro/__init__.py CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  # ----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.2.83'
7
+ __version__ = '4.2.84'
8
8
 
9
9
  # ----------------------------------------------------------------------------
10
10
 
@@ -91,6 +91,9 @@ def test_market(exchange, skipped_properties, method, market):
91
91
  # otherwise, it must be false or undefined
92
92
  test_shared_methods.assert_in_array(exchange, skipped_properties, method, market, 'margin', [False, None])
93
93
  if not ('contractSize' in skipped_properties):
94
+ if not market['spot']:
95
+ # if not spot, then contractSize should be defined
96
+ assert market['contractSize'] is not None, '\"contractSize\" must be defined when \"spot\" is false' + log_text
94
97
  test_shared_methods.assert_greater(exchange, skipped_properties, method, market, 'contractSize', '0')
95
98
  # typical values
96
99
  test_shared_methods.assert_greater(exchange, skipped_properties, method, market, 'expiry', '0')
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ccxt
3
- Version: 4.2.83
3
+ Version: 4.2.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
@@ -262,13 +262,13 @@ console.log(version, Object.keys(exchanges));
262
262
 
263
263
  All-in-one browser bundle (dependencies included), served from a CDN of your choice:
264
264
 
265
- * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.2.83/dist/ccxt.browser.js
266
- * unpkg: https://unpkg.com/ccxt@4.2.83/dist/ccxt.browser.js
265
+ * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.2.84/dist/ccxt.browser.js
266
+ * unpkg: https://unpkg.com/ccxt@4.2.84/dist/ccxt.browser.js
267
267
 
268
268
  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.
269
269
 
270
270
  ```HTML
271
- <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.2.83/dist/ccxt.browser.js"></script>
271
+ <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.2.84/dist/ccxt.browser.js"></script>
272
272
  ```
273
273
 
274
274
  Creates a global `ccxt` object:
@@ -1,4 +1,4 @@
1
- ccxt/__init__.py,sha256=5ZxREROIsiSEMHKn4jYcV-iNqDNcEkusRHGi6Wg7RaY,15656
1
+ ccxt/__init__.py,sha256=Vu_EaRbMmHEA__PrtNtCdlUN4ZbS1IWL08A7hZinOqo,15656
2
2
  ccxt/ace.py,sha256=h3CRCymxXSaHWDDAXK-Spyk3sPJhUDAOjGlSmbat2QE,41425
3
3
  ccxt/alpaca.py,sha256=6P2wAEGJQOjjoKQbzv1KvSuZvEZmOX987a1NqB7z9mk,46908
4
4
  ccxt/ascendex.py,sha256=dhDY4NxUe_fsArDYcFDpSVphtO6RYAebBAPegbFXTh8,150825
@@ -17,7 +17,7 @@ ccxt/bitcoincom.py,sha256=PyWIl4nC4jp5Uba2lI1At0N_hhNyWD0DoZC_MSyL_s4,502
17
17
  ccxt/bitfinex.py,sha256=d2IBo6FVtCLhZ9GsZD1dw2FVBsFmXXQCeHHFeSD8f-M,71449
18
18
  ccxt/bitfinex2.py,sha256=Ifc32DiIT5n8tDazBsb5pOrblnQOt6gjia7ZO1wdxOg,157688
19
19
  ccxt/bitflyer.py,sha256=0_zfgvDrX5pre59d_mRUC7B6MYvMLpTtYvwEIyovU6A,40341
20
- ccxt/bitget.py,sha256=WA-r16l-2tgJliHGIJEDP8ap9JGfb4WqtMVrpteAwFk,405906
20
+ ccxt/bitget.py,sha256=C7CY1SBnjjEO5hJb2TEw4EVyLwkRco1F3lo5nhRlkHo,406433
21
21
  ccxt/bithumb.py,sha256=gwSy4CFQLj9g0k7HvfgpuV6pfD26ULEpa5AyXSu0QSs,45339
22
22
  ccxt/bitmart.py,sha256=a5_jDuDs0DT9xzk_KpEZN7BOYhGUDs9fctDMEde5LYU,198963
23
23
  ccxt/bitmex.py,sha256=AVvk4b57uRQH7z7qAyXAoGBlHISCz3IwdV_-QVgG0HU,125327
@@ -35,13 +35,13 @@ ccxt/btcalpha.py,sha256=0np0RXEUcYJurfA3UWBiZXKHsvIbfjl_qVcx58sPwCY,36550
35
35
  ccxt/btcbox.py,sha256=XBgl9nPQUr0eL_El9-K4AuFODEXbesU6F0euVbvUs04,23341
36
36
  ccxt/btcmarkets.py,sha256=VZ1iNQygfJqYzPtjM_Ggcwsz3HwyyxuRf0HDnoaw6M0,51318
37
37
  ccxt/btcturk.py,sha256=bW6v3GbBRB5LWqx-8HwlHBoXl2MJJgtZXHMsGTUJcKM,36433
38
- ccxt/bybit.py,sha256=gOvb3seyF7t2kO3zK4wgGvgpchUQWlXp0pUi4P-mou4,399920
38
+ ccxt/bybit.py,sha256=plKYo_VfLJ_nsnrfn2PrmQ1qdGiKmgQDVHEmBXxUHBI,399938
39
39
  ccxt/cex.py,sha256=EYyAoFmd3R8V0oSeg8DZ9IerJlzz3mb43BvHrpKeifM,69599
40
40
  ccxt/coinbase.py,sha256=XIPjU4zGSuiEt-2AJ04kCdA_2g90HqkQuyIRxN07Kzo,177047
41
41
  ccxt/coinbaseinternational.py,sha256=axOcXls1QajcrBM_F-Wze8yMYXsBN56sOI7GlHM9d30,87049
42
42
  ccxt/coinbasepro.py,sha256=qu2pDW6FSdX4g6Pyt54KuDUOzTgdfz6iL4hWnZlyQ2w,78323
43
43
  ccxt/coincheck.py,sha256=BU--zJ5KWZarI0gbaEsM3Rf9FHU10TK0Sk_bNUHRy14,35489
44
- ccxt/coinex.py,sha256=J2w_1afOv7-ExGxjronU1lOvotKi_F2NUsk6MIBSLq4,229850
44
+ ccxt/coinex.py,sha256=8kcWsgkKmf0a-WZOBuamOZGcAekVbQBsQD_deBDqddU,229777
45
45
  ccxt/coinlist.py,sha256=w7E9TSm03z_UL-WTcuHvMP-AL9yZQwjzg4Bj3eB-rW8,102954
46
46
  ccxt/coinmate.py,sha256=s_TdgDNBQnK-P-fn6Ts0Rz8k-VD0-5Z8l3G3da1lEiM,45750
47
47
  ccxt/coinmetro.py,sha256=HgkMbJZBBJ4QirieoGiWBOwL5QIutz-p4dorK3B-gLw,80386
@@ -62,7 +62,7 @@ ccxt/gemini.py,sha256=B8_5McLOK6tqSgIUpNIhgc7kOSEHFzALniQKO1343vY,79456
62
62
  ccxt/hitbtc.py,sha256=EeyfLreQ2BvoG6B0iLqX9utC16s-GBQR2n1rDEmt_QA,151487
63
63
  ccxt/hitbtc3.py,sha256=qRAr4Zvaju9IQWRZUohdoN7xRnzIMPq8AyYb3gPv-Is,455
64
64
  ccxt/hollaex.py,sha256=bQK38R9qLPX1jvtcNeUTuz6-AW5TSqaHQxNBQtu47Y0,75846
65
- ccxt/htx.py,sha256=_s6Lg9_u-tBZIBagdzpIBPSYACjYKpIAAU6C789_ug0,418820
65
+ ccxt/htx.py,sha256=N1IPrTmoqb_z-l5mt9xnYeCbnbM5upGd8usuVyHRySw,418207
66
66
  ccxt/huobi.py,sha256=4vaG7IRN7fyjaJ_ac6S-njlHOfSEN5de7aq0noznxYw,438
67
67
  ccxt/huobijp.py,sha256=CzUkdDbT1NmSIVyaFHbKvYAZhoqqYyROB-f0DpLxjpc,87923
68
68
  ccxt/hyperliquid.py,sha256=x1UH0Qim5bGaFomw2UbsN8WLFTM0o6jW7Y7vX1UJkcM,83161
@@ -71,7 +71,7 @@ ccxt/independentreserve.py,sha256=xP0K16G_KJPVY8YEIGinFWDdjoj1S9_sFHSk_bX28BA,31
71
71
  ccxt/indodax.py,sha256=dlEMM1uzI2aZLutPdEi2-CTZWOOgDLQCR3Bc6KcYsyk,51781
72
72
  ccxt/kraken.py,sha256=DIL6ROnD-kIDqamwTytJBG78xzYcaDKcdp7T49cof4c,121975
73
73
  ccxt/krakenfutures.py,sha256=JSUfCW8eOEWzSa6Zt9TUwZVZuA4GZ2PsCyR4BnipOV4,115804
74
- ccxt/kucoin.py,sha256=pYGBeTCMvfCQDtoPQlCN1o0yFF_ghzBxkbRhz8_9WFw,212732
74
+ ccxt/kucoin.py,sha256=fXHUdYr2-lycxNoOInWr4sDIuoj1vW9jHrBuSTZP8D0,213338
75
75
  ccxt/kucoinfutures.py,sha256=--O_tS5Yl1Z0yhJHN2cPfTy1Sd3cohseK3KfgkDQvVk,116629
76
76
  ccxt/kuna.py,sha256=FeKD0d26tQ9R7aHcYGU88YYroYJaE2a4U4s65uLigSw,95970
77
77
  ccxt/latoken.py,sha256=A-ayXRE3L-2egmKGAlA8ftMgEIYyTTMzeaYBRAr2BEc,78586
@@ -140,7 +140,7 @@ ccxt/abstract/btcalpha.py,sha256=sbF4SAkTJq01QPQw4D2GMkKrPhKfFIsG-PNtMAC9WwU,138
140
140
  ccxt/abstract/btcbox.py,sha256=PtZ2DZyXaPVPCQ5VLa9AEIZ9S0Y-mPrIu6P9BnfJ7dg,849
141
141
  ccxt/abstract/btcmarkets.py,sha256=dQ2yTZ_8T2TEeAYIuKE0ATImbOLDLGSK7HbbBd8XVJQ,3690
142
142
  ccxt/abstract/btcturk.py,sha256=duM-QrB9MvGpopOtxkfbeYlY49bgvXQLiosRVmnQYFw,1777
143
- ccxt/abstract/bybit.py,sha256=YvcW-0aZtbkadcmaojNfR4-s4dCbql-nV63ObuC53Jc,48114
143
+ ccxt/abstract/bybit.py,sha256=D-esaWdJD_ELTj-qCmIjL4strxvXwZ0RPOqJUEUD4vU,48113
144
144
  ccxt/abstract/cex.py,sha256=Q0NJeDuJ4Kn_mtokYqBenhXWvLIiMSVTqbgbfcLGgv4,3311
145
145
  ccxt/abstract/coinbase.py,sha256=7vqrC4Xz0tAQrIulBh8ddLBAjzrOtCTiK_celZl9jDA,14395
146
146
  ccxt/abstract/coinbaseinternational.py,sha256=wf1fF31fQ1TAVSk1X4ju6LYQc7tHI1lN5nxRnhnzsbk,4770
@@ -207,7 +207,7 @@ ccxt/abstract/woo.py,sha256=E-QXVJKVI4EOW72NX6wv99px9EyitWtd9KWvXUc9Tyo,10216
207
207
  ccxt/abstract/yobit.py,sha256=8ycfCO8ORFly9hc0Aa47sZyX4_ZKPXS9h9yJzI-uQ7Q,1339
208
208
  ccxt/abstract/zaif.py,sha256=m15WHdl3gYy0GOXNZ8NEH8eE7sVh8c0T_ITNuU8vXeU,3935
209
209
  ccxt/abstract/zonda.py,sha256=aSfewvRojzmuymX6QbOnDR8v9VFqWTULMHX9Y7kKD1M,5820
210
- ccxt/async_support/__init__.py,sha256=PshZeTZ-tvI8NqPaTQHK7fNyNBneH5bP53PSo0RH80c,15409
210
+ ccxt/async_support/__init__.py,sha256=1eCCoISyk3vQDePY1xCAFfHixMgCneqO6Z99TA10o58,15409
211
211
  ccxt/async_support/ace.py,sha256=1s3J3mBw-gD4RaTCsLld15qClTcmW0LGIdIkMwRiiGQ,41649
212
212
  ccxt/async_support/alpaca.py,sha256=Nsaff9RczBhiNF19RlqI6wggvEibV_2ICgB8H5Qiuck,47120
213
213
  ccxt/async_support/ascendex.py,sha256=gHtG1wx1ypzE6xXO-5nc6y1vKrGP-cyBeohpqyP2MX8,151613
@@ -226,7 +226,7 @@ ccxt/async_support/bitcoincom.py,sha256=RiqwhK3RfxQ_PXTa860fphDCvwA8dalL-_rXlK85
226
226
  ccxt/async_support/bitfinex.py,sha256=7L4UyoRdcrQIJ5OAQVHSuj_RgxyW8yov5N_AxFbCif0,71889
227
227
  ccxt/async_support/bitfinex2.py,sha256=6uAptc3ilEorvNRqWS6t76s79JYU5Mdi_rpMSpsSVfM,158422
228
228
  ccxt/async_support/bitflyer.py,sha256=8Uz9_FN2m-prDZnK4Y19jfSAEXH_fjgYtoMac4Hf6DI,40649
229
- ccxt/async_support/bitget.py,sha256=c3BApd19I2JF7Px6yervNJi-q7pX-cUZbZkPIKsqfHc,407440
229
+ ccxt/async_support/bitget.py,sha256=aH5Zpw5mFDPreOgjmkkPprqxE-rInzjPrFYE7-VotUE,407967
230
230
  ccxt/async_support/bithumb.py,sha256=DANesZJJLpAeWUIocSEz7e79I31qVUI5XouZqS0Okvc,45569
231
231
  ccxt/async_support/bitmart.py,sha256=RZxQg72I_B9Aic-RSpnz_H0egxw6-kw5a5MMbQJEidE,199883
232
232
  ccxt/async_support/bitmex.py,sha256=NHm71vOprRDv54nwbgj87G_KKWAXqeWacZpnsVvxHac,125887
@@ -244,13 +244,13 @@ ccxt/async_support/btcalpha.py,sha256=dFDJZPeo7AkEu80ULoklUcgvhxR6GAaTq-VlMtN7d6
244
244
  ccxt/async_support/btcbox.py,sha256=pT_fg3eVRk4Qi2ymTyxozHBz4FZs0KcCrU3fmZ2L_r4,23535
245
245
  ccxt/async_support/btcmarkets.py,sha256=m3wEhl8TFYytihHlDYa-y6Nf94nxPRe0rGqTnFnMqaQ,51668
246
246
  ccxt/async_support/btcturk.py,sha256=ciBkzsGBoqvf-MQMLHg1GIdHx6btlYOHwwkhUwHjaas,36651
247
- ccxt/async_support/bybit.py,sha256=JMQIOHknaVS-8s70e6oyudn-CghEp-TojEEeunRSBkg,401664
247
+ ccxt/async_support/bybit.py,sha256=PJDFEilVgDNcy95Xl5WD8uYgJneVw_qDMfWm0KbPZOI,401682
248
248
  ccxt/async_support/cex.py,sha256=L6o7rG_grd0osZzsrqe-UJhbMzL2gmJ0yBs9iK3rVpA,69949
249
249
  ccxt/async_support/coinbase.py,sha256=46cNWU30I85P_7oNbpi0T8jf-pyMsU0-P1E7KUIkyDI,178004
250
250
  ccxt/async_support/coinbaseinternational.py,sha256=eOyE2mzzddMsyT8b23kc-XXzgVAd08GF59n7Q0S5wig,87603
251
251
  ccxt/async_support/coinbasepro.py,sha256=d5CQsZAde5mOYgIP8CB_uoTiT3p24LWLuyUPtz8H0K4,78829
252
252
  ccxt/async_support/coincheck.py,sha256=dg-gpeqKM_pvwsLwBPkzDtgCx5CLKPo5ld83DHRTMJ0,35695
253
- ccxt/async_support/coinex.py,sha256=-_NNxtPiOHw5EySyGKYiJMLrcc3HKmWuQ0Y0qSnbfVs,231090
253
+ ccxt/async_support/coinex.py,sha256=l2ZLHlvPDufIU7Um-6orXh2IwBKf48-2tYpvnBe624w,231017
254
254
  ccxt/async_support/coinlist.py,sha256=lWT3PjJx5qElG_wwftBPu-b4ewOdWpK6AggtHtXpRsg,103442
255
255
  ccxt/async_support/coinmate.py,sha256=uCgT6Pd_VeOKd4oUTyh6K6LF34OpPd8Exrz6zkZJ03M,46016
256
256
  ccxt/async_support/coinmetro.py,sha256=YyEXzezG3NtEUPMMDX7pV4SRO5in8sK8KUc0QpVK0W8,80706
@@ -271,7 +271,7 @@ ccxt/async_support/gemini.py,sha256=JwWrmpBfOOmj3z6FI05vRnqKaw2BudDDPiH9EKJAEpg,
271
271
  ccxt/async_support/hitbtc.py,sha256=2NJDZD4UxR9PsLBI3L00sLQqxEbfpW-yndX4oLTRf2w,152533
272
272
  ccxt/async_support/hitbtc3.py,sha256=dmSYoD2o4av_zzbZI8HNIoj8BWxA7QozsVpy8JaOXzU,469
273
273
  ccxt/async_support/hollaex.py,sha256=dmrF6aF6TwualEM5Nl81P_iAMvXzM9l6n5WZVL04xf8,76280
274
- ccxt/async_support/htx.py,sha256=Hpg8I4PBXZyc_DpFzDIAnUW0CSf9N082Up1v_kg-CdY,421158
274
+ ccxt/async_support/htx.py,sha256=RcgNt-DlznpbAffhfU7621KH8zTvrvSo_3H8u_C1dbo,420545
275
275
  ccxt/async_support/huobi.py,sha256=fup0j6wQ1khAtfbb1H4CSyJAOzhxuoHMmrM6sgTuhr8,452
276
276
  ccxt/async_support/huobijp.py,sha256=nz_v5DUgayntDkuBIb0xUGLAxN7ndVa8VLA_LFXZ7fo,88423
277
277
  ccxt/async_support/hyperliquid.py,sha256=nMOMZpay4dDPNVv68s7izZxYkw9GIWc-788utPE7cR4,83583
@@ -280,7 +280,7 @@ ccxt/async_support/independentreserve.py,sha256=jx6KI157GF628GXLa5WxMqTpCs9kCjov
280
280
  ccxt/async_support/indodax.py,sha256=jJ_J0SKDQXJXSozru2boDFhxJvkZIMmb5fDmlJuWX3E,52089
281
281
  ccxt/async_support/kraken.py,sha256=Q7CxQ68srytD3enjdsK8MF0C003ZbC1vndjF-tcOasg,122559
282
282
  ccxt/async_support/krakenfutures.py,sha256=B8VEh0szuxqTHOTcRrlTha3teCsQF6TOFtOwIl-ed0w,116274
283
- ccxt/async_support/kucoin.py,sha256=v3me3Ds3Odk3T04ihV2Gl4H38gANnnBeWGAciIsTxEg,213786
283
+ ccxt/async_support/kucoin.py,sha256=NdCCJ5CUhIYgqxPwiGRPtHRtNHm8OvG8EmwGMLjtKjg,214392
284
284
  ccxt/async_support/kucoinfutures.py,sha256=9EsJu0Axm19aHL49HP-EH8ZYeXbdXB6rATQcM5nHD4g,117207
285
285
  ccxt/async_support/kuna.py,sha256=_SbDCy5iJDIOc23RVCrMzktcexr5k79JIOZ9DnxPsRY,96386
286
286
  ccxt/async_support/latoken.py,sha256=12hd3_souZD-N0hKRQHEQ0EJUcVBmSZ76ljJQ1wFWs4,79062
@@ -313,7 +313,7 @@ ccxt/async_support/yobit.py,sha256=wH9UBovJv56iJcWs0kGbvHkBydPGVWcI_-Y2_FsFfQs,5
313
313
  ccxt/async_support/zaif.py,sha256=Iv00L8ezvmhpSutiVhqHr-5FTVC0Z_Gt25D8BYwILTA,28135
314
314
  ccxt/async_support/zonda.py,sha256=PRAeVWikC83106HD2DhHAf4eGtK1-rx4SSA_FwQMIcE,80782
315
315
  ccxt/async_support/base/__init__.py,sha256=aVYSsFi--b4InRs9zDN_wtCpj8odosAB726JdUHavrk,67
316
- ccxt/async_support/base/exchange.py,sha256=GaFFj2ZMn9bb8tjKjzaIXQAQWhL4G_hck_5dSVo99ws,91714
316
+ ccxt/async_support/base/exchange.py,sha256=hPtL55wHwsu3DswFVZCoOQciOCgK5133k9oLLUPIkSQ,91714
317
317
  ccxt/async_support/base/throttler.py,sha256=tvDVcdRUVYi8fZRlEcnqtgzcgB_KMUMRs5Pu8tuU-tU,1847
318
318
  ccxt/async_support/base/ws/__init__.py,sha256=uockzpLuwntKGZbs5EOWFe-Zg-k6Cj7GhNJLc_RX0so,1791
319
319
  ccxt/async_support/base/ws/aiohttp_client.py,sha256=Ed1765emEde2Hj8Ys6f5EjS54ZI1wQ0qIhd04eB7yhU,5751
@@ -327,10 +327,10 @@ ccxt/async_support/base/ws/order_book_side.py,sha256=Pxrq22nCODckJ6G1OXkYEmUunIu
327
327
  ccxt/base/__init__.py,sha256=eTx1OE3HJjspFUQjGm6LBhaQiMKJnXjkdP-JUXknyQ0,1320
328
328
  ccxt/base/decimal_to_precision.py,sha256=fgWRBzRTtsf3r2INyS4f7WHlzgjB5YM1ekiwqD21aac,6634
329
329
  ccxt/base/errors.py,sha256=JBn3zTrtru7tLgyEi6MzKAUwiZe0fltQLYoJcsdP-AA,4099
330
- ccxt/base/exchange.py,sha256=1YU1WI3lr1QrVlxvEY30S-zolGfmjbirTLXyeTqoQHc,249730
330
+ ccxt/base/exchange.py,sha256=4qa4CcsxLHF34Vqi5LM1LnpiGQTAXBcHwUl8QREaYvg,249730
331
331
  ccxt/base/precise.py,sha256=_xfu54sV0vWNnOfGTKRFykeuWP8mn4K1m9lk1tcllX4,8565
332
332
  ccxt/base/types.py,sha256=6J3Dzo0NBbn-5tCRQpfeRkLDzH1loScrDjP7xRDz6gI,6842
333
- ccxt/pro/__init__.py,sha256=IlQ1TBuE7YmgpNtNYZQm0GJdM5_MYxSKy0E-A3esLOA,6999
333
+ ccxt/pro/__init__.py,sha256=tV2bfVY7FKXXqwQMViLjsjs-4Uh9HfNwxbRdZnEncOc,6999
334
334
  ccxt/pro/alpaca.py,sha256=7ePyWli0949ti5UheIn553xmnFpedrNc2W5CKauSZio,27167
335
335
  ccxt/pro/ascendex.py,sha256=0RlrxSqh4-lW99T-Y8AxrU612Cpy03u2loVMeRUPXlg,35432
336
336
  ccxt/pro/bequant.py,sha256=5zbsP8BHQTUZ8ZNL6uaACxDbUClgkOV4SYfXT_LfQVg,1351
@@ -515,7 +515,7 @@ ccxt/test/base/test_ledger_item.py,sha256=SzkG9X2uVwDlLSsiHehRtMOapPEUrv2OpxtQXV
515
515
  ccxt/test/base/test_leverage_tier.py,sha256=1pCwNRyAGiiS0N8dIpCb9jxt7bdD12LiXyWg3U6XJ5k,1656
516
516
  ccxt/test/base/test_margin_mode.py,sha256=Hv6pohqI-uJAvrlBjxSRUB55E9hdHB7jBJqjHcF2G4M,869
517
517
  ccxt/test/base/test_margin_modification.py,sha256=W1dj01TiAZd5ZLm9RV_GBWhUDOfOav9XNOXwMg02BKI,1730
518
- ccxt/test/base/test_market.py,sha256=ZyR-nCKWbtC0xF76rng4mZ5UE_k71p7DKf5aOIYiQMc,11414
518
+ ccxt/test/base/test_market.py,sha256=TNgZHcqjDvoAZpzTUGZclpckbszEteZ1bD7kpcWl2KY,11632
519
519
  ccxt/test/base/test_number.py,sha256=vBis6fh9mJ5KnzGsUkcoh_cJxU1LR0x7CG0NMp6SejY,22083
520
520
  ccxt/test/base/test_ohlcv.py,sha256=4LbTPW6sPP_p2d9cdvS-swHNaNVr6CYdNnyjwKqgnLI,2036
521
521
  ccxt/test/base/test_open_interest.py,sha256=u689028CAIbR-MmgN8SfGShHmculqWgDouI4qsB-waQ,1547
@@ -529,7 +529,7 @@ ccxt/test/base/test_ticker.py,sha256=cMTIMb1oySNORUCmqI5ZzMswlEyCF6gJMah3vfvo8wQ
529
529
  ccxt/test/base/test_trade.py,sha256=PMtmB8V38dpaP-eb8h488xYMlR6D69yCOhsA1RuWrUA,2336
530
530
  ccxt/test/base/test_trading_fee.py,sha256=2aDCNJtqBkTC_AieO0l1HYGq5hz5qkWlkWb9Nv_fcwk,1066
531
531
  ccxt/test/base/test_transaction.py,sha256=BTbB4UHHXkrvYgwbrhh867nVRlevmIkIrz1W_odlQJI,1434
532
- ccxt-4.2.83.dist-info/METADATA,sha256=hiBvFR_sj1iV6mPcgvDeW6KTXiull9-ycI-J-iTWQr8,110489
533
- ccxt-4.2.83.dist-info/WHEEL,sha256=P2T-6epvtXQ2cBOE_U1K4_noqlJFN3tj15djMgEu4NM,110
534
- ccxt-4.2.83.dist-info/top_level.txt,sha256=CkQDuCTDKNcImPV60t36G6MdYfxsAPNiSaEwifVoVMo,5
535
- ccxt-4.2.83.dist-info/RECORD,,
532
+ ccxt-4.2.84.dist-info/METADATA,sha256=mhg5GpBTD_at8FyB3s2MksuCXQ0aKqsjMvRnPyh5cqw,110489
533
+ ccxt-4.2.84.dist-info/WHEEL,sha256=P2T-6epvtXQ2cBOE_U1K4_noqlJFN3tj15djMgEu4NM,110
534
+ ccxt-4.2.84.dist-info/top_level.txt,sha256=CkQDuCTDKNcImPV60t36G6MdYfxsAPNiSaEwifVoVMo,5
535
+ ccxt-4.2.84.dist-info/RECORD,,
File without changes