ccxt 3.1.33__py2.py3-none-any.whl → 3.1.35__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__ = '3.1.33'
25
+ __version__ = '3.1.35'
26
26
 
27
27
  # ----------------------------------------------------------------------------
28
28
 
ccxt/abstract/binance.py CHANGED
@@ -264,6 +264,8 @@ class ImplicitAPI:
264
264
  sapi_post_loan_vip_repay = sapiPostLoanVipRepay = Entry('loan/vip/repay', 'sapi', 'POST', {'cost': 40})
265
265
  sapi_post_convert_getquote = sapiPostConvertGetQuote = Entry('convert/getQuote', 'sapi', 'POST', {'cost': 20.001})
266
266
  sapi_post_convert_acceptquote = sapiPostConvertAcceptQuote = Entry('convert/acceptQuote', 'sapi', 'POST', {'cost': 3.3335})
267
+ sapi_post_portfolio_auto_collection = sapiPostPortfolioAutoCollection = Entry('portfolio/auto-collection', 'sapi', 'POST', {'cost': 0.6667})
268
+ sapi_post_portfolio_bnb_transfer = sapiPostPortfolioBnbTransfer = Entry('portfolio/bnb-transfer', 'sapi', 'POST', {'cost': 0.6667})
267
269
  sapi_put_userdatastream = sapiPutUserDataStream = Entry('userDataStream', 'sapi', 'PUT', {'cost': 0.1})
268
270
  sapi_put_userdatastream_isolated = sapiPutUserDataStreamIsolated = Entry('userDataStream/isolated', 'sapi', 'PUT', {'cost': 0.1})
269
271
  sapi_delete_margin_openorders = sapiDeleteMarginOpenOrders = Entry('margin/openOrders', 'sapi', 'DELETE', {'cost': 0.1})
@@ -264,6 +264,8 @@ class ImplicitAPI:
264
264
  sapi_post_loan_vip_repay = sapiPostLoanVipRepay = Entry('loan/vip/repay', 'sapi', 'POST', {'cost': 40})
265
265
  sapi_post_convert_getquote = sapiPostConvertGetQuote = Entry('convert/getQuote', 'sapi', 'POST', {'cost': 20.001})
266
266
  sapi_post_convert_acceptquote = sapiPostConvertAcceptQuote = Entry('convert/acceptQuote', 'sapi', 'POST', {'cost': 3.3335})
267
+ sapi_post_portfolio_auto_collection = sapiPostPortfolioAutoCollection = Entry('portfolio/auto-collection', 'sapi', 'POST', {'cost': 0.6667})
268
+ sapi_post_portfolio_bnb_transfer = sapiPostPortfolioBnbTransfer = Entry('portfolio/bnb-transfer', 'sapi', 'POST', {'cost': 0.6667})
267
269
  sapi_put_userdatastream = sapiPutUserDataStream = Entry('userDataStream', 'sapi', 'PUT', {'cost': 0.1})
268
270
  sapi_put_userdatastream_isolated = sapiPutUserDataStreamIsolated = Entry('userDataStream/isolated', 'sapi', 'PUT', {'cost': 0.1})
269
271
  sapi_delete_margin_openorders = sapiDeleteMarginOpenOrders = Entry('margin/openOrders', 'sapi', 'DELETE', {'cost': 0.1})
@@ -264,6 +264,8 @@ class ImplicitAPI:
264
264
  sapi_post_loan_vip_repay = sapiPostLoanVipRepay = Entry('loan/vip/repay', 'sapi', 'POST', {'cost': 40})
265
265
  sapi_post_convert_getquote = sapiPostConvertGetQuote = Entry('convert/getQuote', 'sapi', 'POST', {'cost': 20.001})
266
266
  sapi_post_convert_acceptquote = sapiPostConvertAcceptQuote = Entry('convert/acceptQuote', 'sapi', 'POST', {'cost': 3.3335})
267
+ sapi_post_portfolio_auto_collection = sapiPostPortfolioAutoCollection = Entry('portfolio/auto-collection', 'sapi', 'POST', {'cost': 0.6667})
268
+ sapi_post_portfolio_bnb_transfer = sapiPostPortfolioBnbTransfer = Entry('portfolio/bnb-transfer', 'sapi', 'POST', {'cost': 0.6667})
267
269
  sapi_put_userdatastream = sapiPutUserDataStream = Entry('userDataStream', 'sapi', 'PUT', {'cost': 0.1})
268
270
  sapi_put_userdatastream_isolated = sapiPutUserDataStreamIsolated = Entry('userDataStream/isolated', 'sapi', 'PUT', {'cost': 0.1})
269
271
  sapi_delete_margin_openorders = sapiDeleteMarginOpenOrders = Entry('margin/openOrders', 'sapi', 'DELETE', {'cost': 0.1})
@@ -264,6 +264,8 @@ class ImplicitAPI:
264
264
  sapi_post_loan_vip_repay = sapiPostLoanVipRepay = Entry('loan/vip/repay', 'sapi', 'POST', {'cost': 40})
265
265
  sapi_post_convert_getquote = sapiPostConvertGetQuote = Entry('convert/getQuote', 'sapi', 'POST', {'cost': 20.001})
266
266
  sapi_post_convert_acceptquote = sapiPostConvertAcceptQuote = Entry('convert/acceptQuote', 'sapi', 'POST', {'cost': 3.3335})
267
+ sapi_post_portfolio_auto_collection = sapiPostPortfolioAutoCollection = Entry('portfolio/auto-collection', 'sapi', 'POST', {'cost': 0.6667})
268
+ sapi_post_portfolio_bnb_transfer = sapiPostPortfolioBnbTransfer = Entry('portfolio/bnb-transfer', 'sapi', 'POST', {'cost': 0.6667})
267
269
  sapi_put_userdatastream = sapiPutUserDataStream = Entry('userDataStream', 'sapi', 'PUT', {'cost': 0.1})
268
270
  sapi_put_userdatastream_isolated = sapiPutUserDataStreamIsolated = Entry('userDataStream/isolated', 'sapi', 'PUT', {'cost': 0.1})
269
271
  sapi_delete_margin_openorders = sapiDeleteMarginOpenOrders = Entry('margin/openOrders', 'sapi', 'DELETE', {'cost': 0.1})
ccxt/abstract/bitbank.py CHANGED
@@ -3,6 +3,8 @@ from ccxt.base.types import Entry
3
3
 
4
4
  class ImplicitAPI:
5
5
  public_get_pair_ticker = publicGetPairTicker = Entry('{pair}/ticker', 'public', 'GET', {})
6
+ public_get_tickers = publicGetTickers = Entry('tickers', 'public', 'GET', {})
7
+ public_get_tickers_jpy = publicGetTickersJpy = Entry('tickers_jpy', 'public', 'GET', {})
6
8
  public_get_pair_depth = publicGetPairDepth = Entry('{pair}/depth', 'public', 'GET', {})
7
9
  public_get_pair_transactions = publicGetPairTransactions = Entry('{pair}/transactions', 'public', 'GET', {})
8
10
  public_get_pair_transactions_yyyymmdd = publicGetPairTransactionsYyyymmdd = Entry('{pair}/transactions/{yyyymmdd}', 'public', 'GET', {})
@@ -11,7 +13,11 @@ class ImplicitAPI:
11
13
  private_get_user_spot_order = privateGetUserSpotOrder = Entry('user/spot/order', 'private', 'GET', {})
12
14
  private_get_user_spot_active_orders = privateGetUserSpotActiveOrders = Entry('user/spot/active_orders', 'private', 'GET', {})
13
15
  private_get_user_spot_trade_history = privateGetUserSpotTradeHistory = Entry('user/spot/trade_history', 'private', 'GET', {})
16
+ private_get_user_deposit_history = privateGetUserDepositHistory = Entry('user/deposit_history', 'private', 'GET', {})
14
17
  private_get_user_withdrawal_account = privateGetUserWithdrawalAccount = Entry('user/withdrawal_account', 'private', 'GET', {})
18
+ private_get_user_withdrawal_history = privateGetUserWithdrawalHistory = Entry('user/withdrawal_history', 'private', 'GET', {})
19
+ private_get_spot_status = privateGetSpotStatus = Entry('spot/status', 'private', 'GET', {})
20
+ private_get_spot_pairs = privateGetSpotPairs = Entry('spot/pairs', 'private', 'GET', {})
15
21
  private_post_user_spot_order = privatePostUserSpotOrder = Entry('user/spot/order', 'private', 'POST', {})
16
22
  private_post_user_spot_cancel_order = privatePostUserSpotCancelOrder = Entry('user/spot/cancel_order', 'private', 'POST', {})
17
23
  private_post_user_spot_cancel_orders = privatePostUserSpotCancelOrders = Entry('user/spot/cancel_orders', 'private', 'POST', {})
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '3.1.33'
7
+ __version__ = '3.1.35'
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # -----------------------------------------------------------------------------
4
4
 
5
- __version__ = '3.1.33'
5
+ __version__ = '3.1.35'
6
6
 
7
7
  # -----------------------------------------------------------------------------
8
8
 
@@ -506,6 +506,8 @@ class binance(Exchange, ImplicitAPI):
506
506
  'loan/vip/repay': 40, # Weight(UID): 6000 => cost = 0.006667 * 6000 = 40
507
507
  'convert/getQuote': 20.001,
508
508
  'convert/acceptQuote': 3.3335,
509
+ 'portfolio/auto-collection': 0.6667, # Weight(UID): 100 => cost = 0.006667 * 100 = 0.6667
510
+ 'portfolio/bnb-transfer': 0.6667, # Weight(UID): 100 => cost = 0.006667 * 100 = 0.6667
509
511
  },
510
512
  'put': {
511
513
  'userDataStream': 0.1,
@@ -2930,10 +2932,14 @@ class binance(Exchange, ImplicitAPI):
2930
2932
  :returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
2931
2933
  """
2932
2934
  await self.load_markets()
2935
+ symbols = self.market_symbols(symbols)
2933
2936
  market = self.get_market_from_symbols(symbols)
2934
- marketType, query = self.handle_market_type_and_params('fetchLastPrices', market, params)
2937
+ type = None
2938
+ subType = None
2939
+ subType, params = self.handle_sub_type_and_params('fetchLastPrices', market, params)
2940
+ type, params = self.handle_market_type_and_params('fetchLastPrices', market, params)
2935
2941
  method = None
2936
- if marketType == 'future':
2942
+ if self.is_linear(type, subType):
2937
2943
  method = 'fapiPublicGetTickerPrice'
2938
2944
  #
2939
2945
  # [
@@ -2945,7 +2951,7 @@ class binance(Exchange, ImplicitAPI):
2945
2951
  # ...
2946
2952
  # ]
2947
2953
  #
2948
- elif marketType == 'delivery':
2954
+ elif self.is_inverse(type, subType):
2949
2955
  method = 'dapiPublicGetTickerPrice'
2950
2956
  #
2951
2957
  # [
@@ -2957,7 +2963,7 @@ class binance(Exchange, ImplicitAPI):
2957
2963
  # }
2958
2964
  # ]
2959
2965
  #
2960
- elif marketType == 'spot':
2966
+ elif type == 'spot':
2961
2967
  method = 'publicGetTickerPrice'
2962
2968
  #
2963
2969
  # [
@@ -2969,8 +2975,8 @@ class binance(Exchange, ImplicitAPI):
2969
2975
  # ]
2970
2976
  #
2971
2977
  else:
2972
- raise NotSupported(self.id + ' fetchLastPrices() does not support ' + marketType + ' markets yet')
2973
- response = await getattr(self, method)(query)
2978
+ raise NotSupported(self.id + ' fetchLastPrices() does not support ' + type + ' markets yet')
2979
+ response = await getattr(self, method)(params)
2974
2980
  return self.parse_last_prices(response, symbols)
2975
2981
 
2976
2982
  def parse_last_price(self, info, market=None):
@@ -3000,10 +3006,10 @@ class binance(Exchange, ImplicitAPI):
3000
3006
  # "time": 1591257246176
3001
3007
  # }
3002
3008
  #
3003
- marketId = self.safe_string(info, 'symbol')
3004
- defaultType = self.safe_string(self.options, 'defaultType', 'spot')
3005
- market = self.safe_market(marketId, market, None, defaultType)
3006
3009
  timestamp = self.safe_integer(info, 'time')
3010
+ type = 'spot' if (timestamp is None) else 'swap'
3011
+ marketId = self.safe_string(info, 'symbol')
3012
+ market = self.safe_market(marketId, market, None, type)
3007
3013
  price = self.safe_number(info, 'price')
3008
3014
  return {
3009
3015
  'symbol': market['symbol'],
@@ -3011,8 +3017,6 @@ class binance(Exchange, ImplicitAPI):
3011
3017
  'datetime': self.iso8601(timestamp),
3012
3018
  'price': price,
3013
3019
  'side': None,
3014
- 'baseVolume': None,
3015
- 'quoteVolume': None,
3016
3020
  'info': info,
3017
3021
  }
3018
3022
 
@@ -3947,25 +3951,16 @@ class binance(Exchange, ImplicitAPI):
3947
3951
  marketType = 'contract' if ('closePosition' in order) else 'spot'
3948
3952
  symbol = self.safe_symbol(marketId, market, None, marketType)
3949
3953
  filled = self.safe_string(order, 'executedQty', '0')
3950
- timestamp = None
3954
+ timestamp = self.safe_integer_n(order, ['time', 'createTime', 'workingTime', 'transactTime', 'updateTime']) # order of the keys matters here
3951
3955
  lastTradeTimestamp = None
3952
- if 'time' in order:
3953
- timestamp = self.safe_integer(order, 'time')
3954
- elif 'workingTime' in order:
3955
- lastTradeTimestamp = self.safe_integer(order, 'transactTime')
3956
- timestamp = self.safe_integer(order, 'workingTime')
3957
- elif 'transactTime' in order:
3958
- lastTradeTimestamp = self.safe_integer(order, 'transactTime')
3959
- timestamp = self.safe_integer(order, 'transactTime')
3960
- elif 'createTime' in order:
3961
- lastTradeTimestamp = self.safe_integer(order, 'updateTime')
3962
- timestamp = self.safe_integer(order, 'createTime')
3963
- elif 'updateTime' in order:
3956
+ if ('transactTime' in order) or ('updateTime' in order):
3957
+ timestampValue = self.safe_integer_2(order, 'updateTime', 'transactTime')
3964
3958
  if status == 'open':
3965
3959
  if Precise.string_gt(filled, '0'):
3966
- lastTradeTimestamp = self.safe_integer(order, 'updateTime')
3967
- else:
3968
- timestamp = self.safe_integer(order, 'updateTime')
3960
+ lastTradeTimestamp = timestampValue
3961
+ elif status == 'closed':
3962
+ lastTradeTimestamp = timestampValue
3963
+ lastUpdateTimestamp = self.safe_integer_2(order, 'transactTime', 'updateTime')
3969
3964
  average = self.safe_string(order, 'avgPrice')
3970
3965
  price = self.safe_string(order, 'price')
3971
3966
  amount = self.safe_string_2(order, 'origQty', 'quantity')
@@ -3995,6 +3990,7 @@ class binance(Exchange, ImplicitAPI):
3995
3990
  'timestamp': timestamp,
3996
3991
  'datetime': self.iso8601(timestamp),
3997
3992
  'lastTradeTimestamp': lastTradeTimestamp,
3993
+ 'lastUpdateTimestamp': lastUpdateTimestamp,
3998
3994
  'symbol': symbol,
3999
3995
  'type': type,
4000
3996
  'timeInForce': timeInForce,
@@ -106,6 +106,8 @@ class bitbank(Exchange, ImplicitAPI):
106
106
  'public': {
107
107
  'get': [
108
108
  '{pair}/ticker',
109
+ 'tickers',
110
+ 'tickers_jpy',
109
111
  '{pair}/depth',
110
112
  '{pair}/transactions',
111
113
  '{pair}/transactions/{yyyymmdd}',
@@ -118,7 +120,11 @@ class bitbank(Exchange, ImplicitAPI):
118
120
  'user/spot/order',
119
121
  'user/spot/active_orders',
120
122
  'user/spot/trade_history',
123
+ 'user/deposit_history',
121
124
  'user/withdrawal_account',
125
+ 'user/withdrawal_history',
126
+ 'spot/status',
127
+ 'spot/pairs',
122
128
  ],
123
129
  'post': [
124
130
  'user/spot/order',
@@ -93,7 +93,7 @@ class gate(Exchange, ImplicitAPI):
93
93
  'margin': True,
94
94
  'swap': True,
95
95
  'future': True,
96
- 'option': None,
96
+ 'option': True,
97
97
  'addMargin': True,
98
98
  'borrowMargin': True,
99
99
  'cancelAllOrders': True,
@@ -502,9 +502,44 @@ class gate(Exchange, ImplicitAPI):
502
502
  'expiration': 86400, # for conditional orders
503
503
  },
504
504
  'networks': {
505
- 'TRC20': 'TRX',
506
- 'ERC20': 'ETH',
505
+ 'ALGORAND': 'ALGO',
506
+ 'ARBITRUM_NOVA': 'ARBNOVA',
507
+ 'ARBITRUM_ONE': 'ARBEVM',
508
+ 'AVALANCHE_C': 'AVAX_C',
507
509
  'BEP20': 'BSC',
510
+ 'CHILIZ': 'CHZ',
511
+ 'EOS': 'EOS',
512
+ 'ERC20': 'ETH',
513
+ 'GATECHAIN': 'GTEVM',
514
+ 'HRC20': 'HT',
515
+ 'KUSAMA': 'KSMSM',
516
+ 'NEAR': 'NEAR',
517
+ 'OKC': 'OKT',
518
+ 'OPTIMISM': 'OPETH',
519
+ 'POLKADOT': 'DOTSM',
520
+ 'POLYGON': 'MATIC',
521
+ 'SOLANA': 'SOL',
522
+ 'TRC20': 'TRX',
523
+ },
524
+ 'networksById': {
525
+ 'ALGO': 'ALGORAND',
526
+ 'ARBEVM': 'ARBITRUM_ONE',
527
+ 'ARBNOVA': 'ARBITRUM_NOVA',
528
+ 'AVAX_C': 'AVALANCHE_C',
529
+ 'BSC': 'BEP20',
530
+ 'CHZ': 'CHILIZ',
531
+ 'DOTSM': 'POLKADOT',
532
+ 'EOS': 'EOS',
533
+ 'ETH': 'ERC20',
534
+ 'GTEVM': 'GATECHAIN',
535
+ 'HT': 'HRC20',
536
+ 'KSMSM': 'KUSAMA',
537
+ 'MATIC': 'POLYGON',
538
+ 'NEAR': 'NEAR',
539
+ 'OKT': 'OKC',
540
+ 'OPETH': 'OPTIMISM',
541
+ 'SOL': 'SOLANA',
542
+ 'TRX': 'TRC20',
508
543
  },
509
544
  'timeInForce': {
510
545
  'GTC': 'gtc',
@@ -1321,12 +1356,26 @@ class gate(Exchange, ImplicitAPI):
1321
1356
  # "trade_disabled": False
1322
1357
  # }
1323
1358
  #
1359
+ # {
1360
+ # "currency":"USDT_ETH",
1361
+ # "delisted":false,
1362
+ # "withdraw_disabled":false,
1363
+ # "withdraw_delayed":false,
1364
+ # "deposit_disabled":false,
1365
+ # "trade_disabled":false,
1366
+ # "chain":"ETH"
1367
+ # }
1368
+ #
1324
1369
  result = {}
1325
1370
  for i in range(0, len(response)):
1326
1371
  entry = response[i]
1327
1372
  currencyId = self.safe_string(entry, 'currency')
1328
1373
  currencyIdLower = self.safe_string_lower(entry, 'currency')
1329
- code = self.safe_currency_code(currencyId)
1374
+ parts = currencyId.split('_')
1375
+ currency = parts[0]
1376
+ code = self.safe_currency_code(currency)
1377
+ networkId = self.safe_string(entry, 'chain')
1378
+ networkCode = self.network_id_to_code(networkId, code)
1330
1379
  delisted = self.safe_value(entry, 'delisted')
1331
1380
  withdrawDisabled = self.safe_value(entry, 'withdraw_disabled', False)
1332
1381
  depositDisabled = self.safe_value(entry, 'deposit_disabled', False)
@@ -1336,21 +1385,59 @@ class gate(Exchange, ImplicitAPI):
1336
1385
  tradeEnabled = not tradeDisabled
1337
1386
  listed = not delisted
1338
1387
  active = listed and tradeEnabled and withdrawEnabled and depositEnabled
1339
- result[code] = {
1340
- 'id': currencyId,
1341
- 'lowerCaseId': currencyIdLower,
1342
- 'name': None,
1343
- 'code': code,
1344
- 'precision': self.parse_number('1e-4'), # todo: is done completely in html, in withdrawal page's source it has predefined "num_need_fix(self.value, 4);" function, so users cant set lower precision than 0.0001
1388
+ if self.safe_value(result, code) is None:
1389
+ result[code] = {
1390
+ 'id': code.lower(),
1391
+ 'code': code,
1392
+ 'info': None,
1393
+ 'name': None,
1394
+ 'active': active,
1395
+ 'deposit': depositEnabled,
1396
+ 'withdraw': withdrawEnabled,
1397
+ 'fee': None,
1398
+ 'fees': [],
1399
+ 'precision': self.parse_number('1e-4'),
1400
+ 'limits': self.limits,
1401
+ 'networks': {},
1402
+ }
1403
+ depositAvailable = self.safe_value(result[code], 'deposit')
1404
+ depositAvailable = depositEnabled if (depositEnabled) else depositAvailable
1405
+ withdrawAvailable = self.safe_value(result[code], 'withdraw')
1406
+ withdrawAvailable = withdrawEnabled if (withdrawEnabled) else withdrawAvailable
1407
+ networks = self.safe_value(result[code], 'networks', {})
1408
+ networks[networkCode] = {
1345
1409
  'info': entry,
1346
- 'active': active,
1410
+ 'id': networkId,
1411
+ 'network': networkCode,
1412
+ 'currencyId': currencyId,
1413
+ 'lowerCaseCurrencyId': currencyIdLower,
1347
1414
  'deposit': depositEnabled,
1348
1415
  'withdraw': withdrawEnabled,
1416
+ 'active': active,
1349
1417
  'fee': None,
1350
- 'fees': [],
1351
- 'limits': self.limits,
1352
- 'networks': {},
1418
+ 'precision': self.parse_number('1e-4'),
1419
+ 'limits': {
1420
+ 'amount': {
1421
+ 'min': None,
1422
+ 'max': None,
1423
+ },
1424
+ 'withdraw': {
1425
+ 'min': None,
1426
+ 'max': None,
1427
+ },
1428
+ 'deposit': {
1429
+ 'min': None,
1430
+ 'max': None,
1431
+ },
1432
+ },
1353
1433
  }
1434
+ result[code]['networks'] = networks
1435
+ info = self.safe_value(result[code], 'info', [])
1436
+ info.append(entry)
1437
+ result[code]['info'] = info
1438
+ result[code]['active'] = depositAvailable and withdrawAvailable
1439
+ result[code]['deposit'] = depositAvailable
1440
+ result[code]['withdraw'] = withdrawAvailable
1354
1441
  return result
1355
1442
 
1356
1443
  async def fetch_funding_rate(self, symbol: str, params={}):
@@ -5148,8 +5235,8 @@ class gate(Exchange, ImplicitAPI):
5148
5235
  """
5149
5236
  await self.load_markets()
5150
5237
  market = self.market(symbol)
5151
- if not market['contract']:
5152
- raise BadRequest(self.id + ' fetchOpenInterest() supports contract markets only')
5238
+ if not market['future']:
5239
+ raise BadRequest(self.id + ' fetchOpenInterest() supports future markets only')
5153
5240
  request = {
5154
5241
  'contract': market['id'],
5155
5242
  'settle': market['settleId'],
@@ -4684,7 +4684,10 @@ class mexc(Exchange, ImplicitAPI):
4684
4684
  path, params = self.resolve_path(path, params)
4685
4685
  url = None
4686
4686
  if section == 'spot' or section == 'broker':
4687
- url = self.urls['api'][section][access] + '/api/' + self.version + '/' + path
4687
+ if section == 'broker':
4688
+ url = self.urls['api'][section][access] + '/' + path
4689
+ else:
4690
+ url = self.urls['api'][section][access] + '/api/' + self.version + '/' + path
4688
4691
  paramsEncoded = ''
4689
4692
  if access == 'private':
4690
4693
  params['timestamp'] = self.milliseconds()
ccxt/base/exchange.py CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '3.1.33'
7
+ __version__ = '3.1.35'
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
ccxt/binance.py CHANGED
@@ -505,6 +505,8 @@ class binance(Exchange, ImplicitAPI):
505
505
  'loan/vip/repay': 40, # Weight(UID): 6000 => cost = 0.006667 * 6000 = 40
506
506
  'convert/getQuote': 20.001,
507
507
  'convert/acceptQuote': 3.3335,
508
+ 'portfolio/auto-collection': 0.6667, # Weight(UID): 100 => cost = 0.006667 * 100 = 0.6667
509
+ 'portfolio/bnb-transfer': 0.6667, # Weight(UID): 100 => cost = 0.006667 * 100 = 0.6667
508
510
  },
509
511
  'put': {
510
512
  'userDataStream': 0.1,
@@ -2929,10 +2931,14 @@ class binance(Exchange, ImplicitAPI):
2929
2931
  :returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
2930
2932
  """
2931
2933
  self.load_markets()
2934
+ symbols = self.market_symbols(symbols)
2932
2935
  market = self.get_market_from_symbols(symbols)
2933
- marketType, query = self.handle_market_type_and_params('fetchLastPrices', market, params)
2936
+ type = None
2937
+ subType = None
2938
+ subType, params = self.handle_sub_type_and_params('fetchLastPrices', market, params)
2939
+ type, params = self.handle_market_type_and_params('fetchLastPrices', market, params)
2934
2940
  method = None
2935
- if marketType == 'future':
2941
+ if self.is_linear(type, subType):
2936
2942
  method = 'fapiPublicGetTickerPrice'
2937
2943
  #
2938
2944
  # [
@@ -2944,7 +2950,7 @@ class binance(Exchange, ImplicitAPI):
2944
2950
  # ...
2945
2951
  # ]
2946
2952
  #
2947
- elif marketType == 'delivery':
2953
+ elif self.is_inverse(type, subType):
2948
2954
  method = 'dapiPublicGetTickerPrice'
2949
2955
  #
2950
2956
  # [
@@ -2956,7 +2962,7 @@ class binance(Exchange, ImplicitAPI):
2956
2962
  # }
2957
2963
  # ]
2958
2964
  #
2959
- elif marketType == 'spot':
2965
+ elif type == 'spot':
2960
2966
  method = 'publicGetTickerPrice'
2961
2967
  #
2962
2968
  # [
@@ -2968,8 +2974,8 @@ class binance(Exchange, ImplicitAPI):
2968
2974
  # ]
2969
2975
  #
2970
2976
  else:
2971
- raise NotSupported(self.id + ' fetchLastPrices() does not support ' + marketType + ' markets yet')
2972
- response = getattr(self, method)(query)
2977
+ raise NotSupported(self.id + ' fetchLastPrices() does not support ' + type + ' markets yet')
2978
+ response = getattr(self, method)(params)
2973
2979
  return self.parse_last_prices(response, symbols)
2974
2980
 
2975
2981
  def parse_last_price(self, info, market=None):
@@ -2999,10 +3005,10 @@ class binance(Exchange, ImplicitAPI):
2999
3005
  # "time": 1591257246176
3000
3006
  # }
3001
3007
  #
3002
- marketId = self.safe_string(info, 'symbol')
3003
- defaultType = self.safe_string(self.options, 'defaultType', 'spot')
3004
- market = self.safe_market(marketId, market, None, defaultType)
3005
3008
  timestamp = self.safe_integer(info, 'time')
3009
+ type = 'spot' if (timestamp is None) else 'swap'
3010
+ marketId = self.safe_string(info, 'symbol')
3011
+ market = self.safe_market(marketId, market, None, type)
3006
3012
  price = self.safe_number(info, 'price')
3007
3013
  return {
3008
3014
  'symbol': market['symbol'],
@@ -3010,8 +3016,6 @@ class binance(Exchange, ImplicitAPI):
3010
3016
  'datetime': self.iso8601(timestamp),
3011
3017
  'price': price,
3012
3018
  'side': None,
3013
- 'baseVolume': None,
3014
- 'quoteVolume': None,
3015
3019
  'info': info,
3016
3020
  }
3017
3021
 
@@ -3946,25 +3950,16 @@ class binance(Exchange, ImplicitAPI):
3946
3950
  marketType = 'contract' if ('closePosition' in order) else 'spot'
3947
3951
  symbol = self.safe_symbol(marketId, market, None, marketType)
3948
3952
  filled = self.safe_string(order, 'executedQty', '0')
3949
- timestamp = None
3953
+ timestamp = self.safe_integer_n(order, ['time', 'createTime', 'workingTime', 'transactTime', 'updateTime']) # order of the keys matters here
3950
3954
  lastTradeTimestamp = None
3951
- if 'time' in order:
3952
- timestamp = self.safe_integer(order, 'time')
3953
- elif 'workingTime' in order:
3954
- lastTradeTimestamp = self.safe_integer(order, 'transactTime')
3955
- timestamp = self.safe_integer(order, 'workingTime')
3956
- elif 'transactTime' in order:
3957
- lastTradeTimestamp = self.safe_integer(order, 'transactTime')
3958
- timestamp = self.safe_integer(order, 'transactTime')
3959
- elif 'createTime' in order:
3960
- lastTradeTimestamp = self.safe_integer(order, 'updateTime')
3961
- timestamp = self.safe_integer(order, 'createTime')
3962
- elif 'updateTime' in order:
3955
+ if ('transactTime' in order) or ('updateTime' in order):
3956
+ timestampValue = self.safe_integer_2(order, 'updateTime', 'transactTime')
3963
3957
  if status == 'open':
3964
3958
  if Precise.string_gt(filled, '0'):
3965
- lastTradeTimestamp = self.safe_integer(order, 'updateTime')
3966
- else:
3967
- timestamp = self.safe_integer(order, 'updateTime')
3959
+ lastTradeTimestamp = timestampValue
3960
+ elif status == 'closed':
3961
+ lastTradeTimestamp = timestampValue
3962
+ lastUpdateTimestamp = self.safe_integer_2(order, 'transactTime', 'updateTime')
3968
3963
  average = self.safe_string(order, 'avgPrice')
3969
3964
  price = self.safe_string(order, 'price')
3970
3965
  amount = self.safe_string_2(order, 'origQty', 'quantity')
@@ -3994,6 +3989,7 @@ class binance(Exchange, ImplicitAPI):
3994
3989
  'timestamp': timestamp,
3995
3990
  'datetime': self.iso8601(timestamp),
3996
3991
  'lastTradeTimestamp': lastTradeTimestamp,
3992
+ 'lastUpdateTimestamp': lastUpdateTimestamp,
3997
3993
  'symbol': symbol,
3998
3994
  'type': type,
3999
3995
  'timeInForce': timeInForce,
ccxt/bitbank.py CHANGED
@@ -106,6 +106,8 @@ class bitbank(Exchange, ImplicitAPI):
106
106
  'public': {
107
107
  'get': [
108
108
  '{pair}/ticker',
109
+ 'tickers',
110
+ 'tickers_jpy',
109
111
  '{pair}/depth',
110
112
  '{pair}/transactions',
111
113
  '{pair}/transactions/{yyyymmdd}',
@@ -118,7 +120,11 @@ class bitbank(Exchange, ImplicitAPI):
118
120
  'user/spot/order',
119
121
  'user/spot/active_orders',
120
122
  'user/spot/trade_history',
123
+ 'user/deposit_history',
121
124
  'user/withdrawal_account',
125
+ 'user/withdrawal_history',
126
+ 'spot/status',
127
+ 'spot/pairs',
122
128
  ],
123
129
  'post': [
124
130
  'user/spot/order',
ccxt/gate.py CHANGED
@@ -92,7 +92,7 @@ class gate(Exchange, ImplicitAPI):
92
92
  'margin': True,
93
93
  'swap': True,
94
94
  'future': True,
95
- 'option': None,
95
+ 'option': True,
96
96
  'addMargin': True,
97
97
  'borrowMargin': True,
98
98
  'cancelAllOrders': True,
@@ -501,9 +501,44 @@ class gate(Exchange, ImplicitAPI):
501
501
  'expiration': 86400, # for conditional orders
502
502
  },
503
503
  'networks': {
504
- 'TRC20': 'TRX',
505
- 'ERC20': 'ETH',
504
+ 'ALGORAND': 'ALGO',
505
+ 'ARBITRUM_NOVA': 'ARBNOVA',
506
+ 'ARBITRUM_ONE': 'ARBEVM',
507
+ 'AVALANCHE_C': 'AVAX_C',
506
508
  'BEP20': 'BSC',
509
+ 'CHILIZ': 'CHZ',
510
+ 'EOS': 'EOS',
511
+ 'ERC20': 'ETH',
512
+ 'GATECHAIN': 'GTEVM',
513
+ 'HRC20': 'HT',
514
+ 'KUSAMA': 'KSMSM',
515
+ 'NEAR': 'NEAR',
516
+ 'OKC': 'OKT',
517
+ 'OPTIMISM': 'OPETH',
518
+ 'POLKADOT': 'DOTSM',
519
+ 'POLYGON': 'MATIC',
520
+ 'SOLANA': 'SOL',
521
+ 'TRC20': 'TRX',
522
+ },
523
+ 'networksById': {
524
+ 'ALGO': 'ALGORAND',
525
+ 'ARBEVM': 'ARBITRUM_ONE',
526
+ 'ARBNOVA': 'ARBITRUM_NOVA',
527
+ 'AVAX_C': 'AVALANCHE_C',
528
+ 'BSC': 'BEP20',
529
+ 'CHZ': 'CHILIZ',
530
+ 'DOTSM': 'POLKADOT',
531
+ 'EOS': 'EOS',
532
+ 'ETH': 'ERC20',
533
+ 'GTEVM': 'GATECHAIN',
534
+ 'HT': 'HRC20',
535
+ 'KSMSM': 'KUSAMA',
536
+ 'MATIC': 'POLYGON',
537
+ 'NEAR': 'NEAR',
538
+ 'OKT': 'OKC',
539
+ 'OPETH': 'OPTIMISM',
540
+ 'SOL': 'SOLANA',
541
+ 'TRX': 'TRC20',
507
542
  },
508
543
  'timeInForce': {
509
544
  'GTC': 'gtc',
@@ -1320,12 +1355,26 @@ class gate(Exchange, ImplicitAPI):
1320
1355
  # "trade_disabled": False
1321
1356
  # }
1322
1357
  #
1358
+ # {
1359
+ # "currency":"USDT_ETH",
1360
+ # "delisted":false,
1361
+ # "withdraw_disabled":false,
1362
+ # "withdraw_delayed":false,
1363
+ # "deposit_disabled":false,
1364
+ # "trade_disabled":false,
1365
+ # "chain":"ETH"
1366
+ # }
1367
+ #
1323
1368
  result = {}
1324
1369
  for i in range(0, len(response)):
1325
1370
  entry = response[i]
1326
1371
  currencyId = self.safe_string(entry, 'currency')
1327
1372
  currencyIdLower = self.safe_string_lower(entry, 'currency')
1328
- code = self.safe_currency_code(currencyId)
1373
+ parts = currencyId.split('_')
1374
+ currency = parts[0]
1375
+ code = self.safe_currency_code(currency)
1376
+ networkId = self.safe_string(entry, 'chain')
1377
+ networkCode = self.network_id_to_code(networkId, code)
1329
1378
  delisted = self.safe_value(entry, 'delisted')
1330
1379
  withdrawDisabled = self.safe_value(entry, 'withdraw_disabled', False)
1331
1380
  depositDisabled = self.safe_value(entry, 'deposit_disabled', False)
@@ -1335,21 +1384,59 @@ class gate(Exchange, ImplicitAPI):
1335
1384
  tradeEnabled = not tradeDisabled
1336
1385
  listed = not delisted
1337
1386
  active = listed and tradeEnabled and withdrawEnabled and depositEnabled
1338
- result[code] = {
1339
- 'id': currencyId,
1340
- 'lowerCaseId': currencyIdLower,
1341
- 'name': None,
1342
- 'code': code,
1343
- 'precision': self.parse_number('1e-4'), # todo: is done completely in html, in withdrawal page's source it has predefined "num_need_fix(self.value, 4);" function, so users cant set lower precision than 0.0001
1387
+ if self.safe_value(result, code) is None:
1388
+ result[code] = {
1389
+ 'id': code.lower(),
1390
+ 'code': code,
1391
+ 'info': None,
1392
+ 'name': None,
1393
+ 'active': active,
1394
+ 'deposit': depositEnabled,
1395
+ 'withdraw': withdrawEnabled,
1396
+ 'fee': None,
1397
+ 'fees': [],
1398
+ 'precision': self.parse_number('1e-4'),
1399
+ 'limits': self.limits,
1400
+ 'networks': {},
1401
+ }
1402
+ depositAvailable = self.safe_value(result[code], 'deposit')
1403
+ depositAvailable = depositEnabled if (depositEnabled) else depositAvailable
1404
+ withdrawAvailable = self.safe_value(result[code], 'withdraw')
1405
+ withdrawAvailable = withdrawEnabled if (withdrawEnabled) else withdrawAvailable
1406
+ networks = self.safe_value(result[code], 'networks', {})
1407
+ networks[networkCode] = {
1344
1408
  'info': entry,
1345
- 'active': active,
1409
+ 'id': networkId,
1410
+ 'network': networkCode,
1411
+ 'currencyId': currencyId,
1412
+ 'lowerCaseCurrencyId': currencyIdLower,
1346
1413
  'deposit': depositEnabled,
1347
1414
  'withdraw': withdrawEnabled,
1415
+ 'active': active,
1348
1416
  'fee': None,
1349
- 'fees': [],
1350
- 'limits': self.limits,
1351
- 'networks': {},
1417
+ 'precision': self.parse_number('1e-4'),
1418
+ 'limits': {
1419
+ 'amount': {
1420
+ 'min': None,
1421
+ 'max': None,
1422
+ },
1423
+ 'withdraw': {
1424
+ 'min': None,
1425
+ 'max': None,
1426
+ },
1427
+ 'deposit': {
1428
+ 'min': None,
1429
+ 'max': None,
1430
+ },
1431
+ },
1352
1432
  }
1433
+ result[code]['networks'] = networks
1434
+ info = self.safe_value(result[code], 'info', [])
1435
+ info.append(entry)
1436
+ result[code]['info'] = info
1437
+ result[code]['active'] = depositAvailable and withdrawAvailable
1438
+ result[code]['deposit'] = depositAvailable
1439
+ result[code]['withdraw'] = withdrawAvailable
1353
1440
  return result
1354
1441
 
1355
1442
  def fetch_funding_rate(self, symbol: str, params={}):
@@ -5147,8 +5234,8 @@ class gate(Exchange, ImplicitAPI):
5147
5234
  """
5148
5235
  self.load_markets()
5149
5236
  market = self.market(symbol)
5150
- if not market['contract']:
5151
- raise BadRequest(self.id + ' fetchOpenInterest() supports contract markets only')
5237
+ if not market['future']:
5238
+ raise BadRequest(self.id + ' fetchOpenInterest() supports future markets only')
5152
5239
  request = {
5153
5240
  'contract': market['id'],
5154
5241
  'settle': market['settleId'],
ccxt/mexc.py CHANGED
@@ -4684,7 +4684,10 @@ class mexc(Exchange, ImplicitAPI):
4684
4684
  path, params = self.resolve_path(path, params)
4685
4685
  url = None
4686
4686
  if section == 'spot' or section == 'broker':
4687
- url = self.urls['api'][section][access] + '/api/' + self.version + '/' + path
4687
+ if section == 'broker':
4688
+ url = self.urls['api'][section][access] + '/' + path
4689
+ else:
4690
+ url = self.urls['api'][section][access] + '/api/' + self.version + '/' + path
4688
4691
  paramsEncoded = ''
4689
4692
  if access == 'private':
4690
4693
  params['timestamp'] = self.milliseconds()
ccxt/pro/__init__.py CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  # ----------------------------------------------------------------------------
6
6
 
7
- __version__ = '3.1.33'
7
+ __version__ = '3.1.35'
8
8
 
9
9
  # ----------------------------------------------------------------------------
10
10
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ccxt
3
- Version: 3.1.33
3
+ Version: 3.1.35
4
4
  Summary: A JavaScript / TypeScript / Python / C# / PHP cryptocurrency trading library with support for 130+ exchanges
5
5
  Home-page: https://ccxt.com
6
6
  Author: Igor Kroitor
@@ -264,13 +264,13 @@ console.log(version, Object.keys(exchanges));
264
264
 
265
265
  All-in-one browser bundle (dependencies included), served from a CDN of your choice:
266
266
 
267
- * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@3.1.33/dist/ccxt.browser.js
268
- * unpkg: https://unpkg.com/ccxt@3.1.33/dist/ccxt.browser.js
267
+ * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@3.1.35/dist/ccxt.browser.js
268
+ * unpkg: https://unpkg.com/ccxt@3.1.35/dist/ccxt.browser.js
269
269
 
270
270
  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.
271
271
 
272
272
  ```HTML
273
- <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@3.1.33/dist/ccxt.browser.js"></script>
273
+ <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@3.1.35/dist/ccxt.browser.js"></script>
274
274
  ```
275
275
 
276
276
  Creates a global `ccxt` object:
@@ -1,15 +1,15 @@
1
- ccxt/__init__.py,sha256=eVNMvKAYqKYNdz340gIHJMGlSkAD_rWSu2Agyu3ybGo,15531
1
+ ccxt/__init__.py,sha256=QT8Oj9QbF1GT9MMT5qIONcWV5RmcpnYSzuJj7iFSAFg,15531
2
2
  ccxt/ace.py,sha256=X4xNSn-7c-K-KFZBUZXwdijv2gsSo1AjiuDV2Ay_qI8,41378
3
3
  ccxt/alpaca.py,sha256=67-UgBXEXmAGMIYlxsufpFOLDSQi-V6-ZOefTAzSNJs,33210
4
4
  ccxt/ascendex.py,sha256=Tfu6IHoc1hZGAwvEV8U5dhjTUyGOPXyp3hf-Ry6LFuU,129319
5
5
  ccxt/bequant.py,sha256=1wDyg1jmS1H9WkODiqztoLVhQog7R6n7MUZsOhIRwRU,1136
6
6
  ccxt/bigone.py,sha256=aTBf53_VVwUlqX3GreIwA3r37fdnrZyP9NbGFiCI7DU,62389
7
- ccxt/binance.py,sha256=L_F8COgk4cj5N0FZsfzsD3uBg4QXEAR9Ii3m9c6k-5s,385895
7
+ ccxt/binance.py,sha256=7v7qGg4MU1KOstKS75VUzqLL36EZgWMZ2IwODN9-Ats,385958
8
8
  ccxt/binancecoinm.py,sha256=pncdw6Xw2X1Po-vEvAB4nL37scoS_axGAVxetPy1YQs,1645
9
9
  ccxt/binanceus.py,sha256=RoC8nReBHXUJzRNyqMe4vhta6gLGuh1fyFkI8FOMKBE,2151
10
10
  ccxt/binanceusdm.py,sha256=KPQGlCalQ0eGlPCs2tSanOxaP8O0zFRQjGntA16Yprw,2480
11
11
  ccxt/bit2c.py,sha256=2YVCDonSKrWPVM8jZteZ7EcFE7BmYy8cQ50Eo6OY37s,35531
12
- ccxt/bitbank.py,sha256=iO0Q9d0otr7jMS-6Vx9areSNhxLeWghTnBLY3wqZ5nU,39057
12
+ ccxt/bitbank.py,sha256=fniFSvUOyZCW25hIq5f55utcI4Ua0yU_2MEkrJFuBhg,39307
13
13
  ccxt/bitbay.py,sha256=B1-8OOhH0k-_mQ7YM7CNuSzP0-PyrtWF-Bc00iEU-CY,448
14
14
  ccxt/bitbns.py,sha256=NZiy0baRUIFs87YWblH9e_O2vcxqLXDBDa2D__Y0jkA,46022
15
15
  ccxt/bitcoincom.py,sha256=YFjeHBlk3W6Gu_yzGwg8smSUkyG6E4l4sSAMvSQMrcY,467
@@ -59,7 +59,7 @@ ccxt/digifinex.py,sha256=t7dlZCskT-RsTmervWN2Vi8SkS8S2g81Jil4FY26IQY,152209
59
59
  ccxt/exmo.py,sha256=2jrEtqqmZJ9xQI01VLS2BjX_hobr1ORSVqxHNEwOlDc,88773
60
60
  ccxt/flowbtc.py,sha256=YPvm6tbsHJJUQBspFcHuVPQfVmiWzwnVvfzRqBdQX6U,1169
61
61
  ccxt/fmfwio.py,sha256=ww13viYsuW8IzHhr3HST8uuroYsCZ2aynyG4i_SE0LU,1238
62
- ccxt/gate.py,sha256=fEBNNa6fVf2bKfrviA_TI_YAFPj-pPPAJB47D5hEqPE,246178
62
+ ccxt/gate.py,sha256=2Wn58aKK54okXXtfkpDUTriXlzvL0bNhr0jYvtSk3C4,249592
63
63
  ccxt/gateio.py,sha256=86AETJWODl_vA5VNeQRHZprmpNIY1HAxCddKZcnKSi8,445
64
64
  ccxt/gemini.py,sha256=RExqJvYnC5NVQ2_RzjFaMwZ7DvJG1kUIkm2OG9JckOQ,69050
65
65
  ccxt/hitbtc.py,sha256=5-1BPVH6sc-uUHcZUs8GeKdQeXApozswlNxTIZ45Ifs,62288
@@ -83,7 +83,7 @@ ccxt/lbank2.py,sha256=1XNWg6dnEcWh_zMKdaLsWnaKuNl5EBx9mJr2f3PCBAA,97906
83
83
  ccxt/luno.py,sha256=_K-5XcIMfUm9d4XalPFBzIsLdgpY3FwZNHshjQIW9iE,40522
84
84
  ccxt/lykke.py,sha256=Gwo9H4XvuMj_8XyaAAQokPDUFCbGbxqvF-hqm2osSqA,48510
85
85
  ccxt/mercado.py,sha256=ConAckh2qGUdnkE60YU9l-yDZH5gfP7eJOKJI3_vY6Y,34688
86
- ccxt/mexc.py,sha256=8sYeILjyudCiQ6KHOXdY1RsSZrVUjr3RZc6AdNE9cTA,211096
86
+ ccxt/mexc.py,sha256=81LnYG05F43-NA_B_jT1fsV5qEF8ZwZ1Od3TFg-tKrw,211223
87
87
  ccxt/mexc3.py,sha256=sEif-cT2AIBMl0C3T6dgfRh8HHWarzXfEEGPZOahrGs,441
88
88
  ccxt/ndax.py,sha256=A59x_g1iNnS7dmZ6855k2jeI9lm-7DPxBkcCCBfYJCI,106160
89
89
  ccxt/novadax.py,sha256=obdBe87cHBgDT7aHUECliJ93Gg9wqsdDiIlNuKyz60o,61687
@@ -118,12 +118,12 @@ ccxt/abstract/alpaca.py,sha256=GKGGXKJ9WzW9V3SmOX_Jjaea_QTa04Eg5nYhQgFErGI,1861
118
118
  ccxt/abstract/ascendex.py,sha256=b85f3K0maWubEmAQIm6T5ierLHZG6c0f-uuvJ-JgLxM,11071
119
119
  ccxt/abstract/bequant.py,sha256=0T5QJsSdYh5qcydcL76kC78pip1XrMDvaKkpxkcBsfc,8376
120
120
  ccxt/abstract/bigone.py,sha256=wrsNs-x0Tv-8e3HcjMpGxQVdciL0cmHDWIJzNGVsd04,2347
121
- ccxt/abstract/binance.py,sha256=JOtbqxXwhFDoVDLPOogwJAYDMEgkJSrRw_QG5x8U9G8,69288
122
- ccxt/abstract/binancecoinm.py,sha256=JOtbqxXwhFDoVDLPOogwJAYDMEgkJSrRw_QG5x8U9G8,69288
123
- ccxt/abstract/binanceus.py,sha256=JOtbqxXwhFDoVDLPOogwJAYDMEgkJSrRw_QG5x8U9G8,69288
124
- ccxt/abstract/binanceusdm.py,sha256=JOtbqxXwhFDoVDLPOogwJAYDMEgkJSrRw_QG5x8U9G8,69288
121
+ ccxt/abstract/binance.py,sha256=4qcSltNhECBZ5o4qhmKLa_QO5hiu-yvm53kMES_Kor8,69569
122
+ ccxt/abstract/binancecoinm.py,sha256=4qcSltNhECBZ5o4qhmKLa_QO5hiu-yvm53kMES_Kor8,69569
123
+ ccxt/abstract/binanceus.py,sha256=4qcSltNhECBZ5o4qhmKLa_QO5hiu-yvm53kMES_Kor8,69569
124
+ ccxt/abstract/binanceusdm.py,sha256=4qcSltNhECBZ5o4qhmKLa_QO5hiu-yvm53kMES_Kor8,69569
125
125
  ccxt/abstract/bit2c.py,sha256=np6i756kSB5dO3Nj6POLKxkWkpYcsGg-4LS8BwPrizI,2830
126
- ccxt/abstract/bitbank.py,sha256=tvJsUdposDnZyPjTmvIIruNLzCWYx8nmJSI8E9cwzt4,1989
126
+ ccxt/abstract/bitbank.py,sha256=k5D8PoPW2N79K_24NL9yY0qkwaCgzi_VoYUlqnj2bs8,2606
127
127
  ccxt/abstract/bitbay.py,sha256=VoxuPkSq8vAvKnDvOqnByhwsIf09m7yIrs8HejFrDk4,5482
128
128
  ccxt/abstract/bitbns.py,sha256=3T3cHS7SgzGipd6F8vzPnmM0x3XNfQXEPjoInD-C1Sw,4082
129
129
  ccxt/abstract/bitcoincom.py,sha256=0T5QJsSdYh5qcydcL76kC78pip1XrMDvaKkpxkcBsfc,8376
@@ -220,18 +220,18 @@ ccxt/abstract/xt.py,sha256=xHHv2viFGK0_iPZ4gu6Wb0aOrpcKhr9zoY-BIPWh5bs,27028
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=VoxuPkSq8vAvKnDvOqnByhwsIf09m7yIrs8HejFrDk4,5482
223
- ccxt/async_support/__init__.py,sha256=CMFmwFPo4-O6HArY6HgKGXiaa73I4Z9x3kFcinEXUhg,15324
223
+ ccxt/async_support/__init__.py,sha256=xh6V2gftF0E81vWaY9hy3CMQoh-jQQjZERCyCSX7oYY,15324
224
224
  ccxt/async_support/ace.py,sha256=cpzMJrG4paMTXdrfdHuJtSXND1NKhfKLNxaYeicMalc,41602
225
225
  ccxt/async_support/alpaca.py,sha256=0Q7bp7mUhU6lKkCNWdjgt1NR3Rz1QpfC9rAVzTutSwk,33356
226
226
  ccxt/async_support/ascendex.py,sha256=V0G5f9Gg79EjJIVpsuNuQGomoZmx9_WAKGsUjqSJs8k,129933
227
227
  ccxt/async_support/bequant.py,sha256=BbfFIcAuK3qC0huDHr44hskFTHt1SG1Pp5XSgYnaiuA,1150
228
228
  ccxt/async_support/bigone.py,sha256=-MaIFu3QdKcyNwb8sZxIbikt6M7JE_Phgxquz7ihLg4,62775
229
- ccxt/async_support/binance.py,sha256=8309s9js52UqBOoyg9SQTaz6LGsU0cqendVOXdJWcSU,387141
229
+ ccxt/async_support/binance.py,sha256=CeviOzKq3WwCvHGTszf9G69PuxRaVgGeUagz8yqi8gw,387204
230
230
  ccxt/async_support/binancecoinm.py,sha256=IY3RLZptQA2nmZaUYRGfTa5ZY4VMWBpFYfwHc8zTHw0,1683
231
231
  ccxt/async_support/binanceus.py,sha256=Jtyl0jtSOpdjAAAYcSUzH6YRVxe88RJ6f4_IUge5gWg,2165
232
232
  ccxt/async_support/binanceusdm.py,sha256=-1r4A4tmV2pCiLGO80hzq7MIIj4MTzOD7buZGv6JauA,2518
233
233
  ccxt/async_support/bit2c.py,sha256=VNeZ9rjXtIsJYYhhJ4L7HWbxaMOBahr89yFqMfunJ8c,35737
234
- ccxt/async_support/bitbank.py,sha256=_9uqf2JI0eRgtPRf4_p-0Jwki8PTYFiMoyBsOdDJ-5s,39317
234
+ ccxt/async_support/bitbank.py,sha256=Osp5v6Y6-CMJoIfXi4QZdWHg0HaOgMwb6U_FPU4uLTo,39567
235
235
  ccxt/async_support/bitbay.py,sha256=ZwGnGl9LHEsxYU1iOyJB6eT9JfYID_yNxGsB3G4gKeQ,462
236
236
  ccxt/async_support/bitbns.py,sha256=5dJJdbSnLYOPqK-NHHWAWjLoQ8ddLY6k8xEKTzpP6hc,46276
237
237
  ccxt/async_support/bitcoincom.py,sha256=-9ESIcLCRhZxfOLkNXB8mIsb7NYTnNPmF5aYkkKIy5Q,481
@@ -281,7 +281,7 @@ ccxt/async_support/digifinex.py,sha256=4kugpdKgwxtIjbDg9_O7q2Jb1ZGm0aXva_cNTGxQx
281
281
  ccxt/async_support/exmo.py,sha256=Pe0LS0FfLt2zPY1aCqpzQcxHrT9uCiD_pJ4-9G9CrbM,89315
282
282
  ccxt/async_support/flowbtc.py,sha256=bCnvtcNnPxxaxqVjI1GGXKhIpz_1r4GIFWqqPokvCR0,1183
283
283
  ccxt/async_support/fmfwio.py,sha256=h4X-aN7XOxJ0ODBurN0KlnmvZFS06wrRnAbDAifxugk,1252
284
- ccxt/async_support/gate.py,sha256=dc2qV0UlpSshlMvqayfvmHmMn5m4OTmxLNfEuy3BOdk,247094
284
+ ccxt/async_support/gate.py,sha256=0Kx8RR2aWUWTrABJXnwIu-gQF00m1A2pJl4KDudYasY,250508
285
285
  ccxt/async_support/gateio.py,sha256=6_t032F9p9x5KGTjtSuqGXITzFOx-XAQBYLpsuQjzxw,459
286
286
  ccxt/async_support/gemini.py,sha256=EJHv5v3LW8oYCaH9dS4wIUAVYotpC4hop1jVNPSmJa0,69498
287
287
  ccxt/async_support/hitbtc.py,sha256=_9xYS-E5rq8SIQDMxzobipxb8lJQvpvOki3FD63ad9M,62722
@@ -305,7 +305,7 @@ ccxt/async_support/lbank2.py,sha256=Q-TfVuYoJVln1ccb_1QZb-jat1fwOUXtE7NHmGyPHiI,
305
305
  ccxt/async_support/luno.py,sha256=Dmko5UVg78rqrMUhjMqjZHp8MlVZibpJ-Gq6dmIaW_E,40830
306
306
  ccxt/async_support/lykke.py,sha256=glK3oebZRnmYAXm8yM0ns2bcPHJqgh65Y28ugtAEVv4,48812
307
307
  ccxt/async_support/mercado.py,sha256=knmxmmGRJyRNysyju9jJuRneQbkTU0e2NE2o-s1XG6I,34930
308
- ccxt/async_support/mexc.py,sha256=WT4uCRfP6B-zicCHMFbG7r-NZ4hIYqayEj52uqyorIw,212142
308
+ ccxt/async_support/mexc.py,sha256=uCiALpd-KRw3rOEXkei7whhk-P7wPy1fVNm7DSUZyBQ,212269
309
309
  ccxt/async_support/mexc3.py,sha256=JW4rH1kXNWvtiW49W0WyKK6hmKunwboy0IJvsVruSmo,455
310
310
  ccxt/async_support/ndax.py,sha256=6Fi9NLCqb-QK_rLL5JiUd4kuHdq7AC1i1eaFjtvlXlI,106684
311
311
  ccxt/async_support/novadax.py,sha256=Pokq1N7M2dXzOcuTc2yeNsYeaLXOsDFjLL6rNOPzXwo,62055
@@ -335,7 +335,7 @@ ccxt/async_support/zaif.py,sha256=eCR5rPQU9BpP2b-X0hPtOtN2FXiKZ4URHyyZ53Di6T4,29
335
335
  ccxt/async_support/zb.py,sha256=W8HHyssjCLTugSRs80TnAwGJl85vp7nyNPOn9RLpXFk,184533
336
336
  ccxt/async_support/zonda.py,sha256=8fLlL4exIr24N0vaf07psLeqNEqhLS2cZj-_VVXsnyM,74375
337
337
  ccxt/async_support/base/__init__.py,sha256=aVYSsFi--b4InRs9zDN_wtCpj8odosAB726JdUHavrk,67
338
- ccxt/async_support/base/exchange.py,sha256=QOEc_E68VCWELEBF1BNM7Fb7CtDWsgO1fzVTec-PYzw,131065
338
+ ccxt/async_support/base/exchange.py,sha256=3VsIzG5vcl2ddTTNxwwkFgMkIYQhL1VtFFaV8aVwD28,131065
339
339
  ccxt/async_support/base/throttler.py,sha256=tvDVcdRUVYi8fZRlEcnqtgzcgB_KMUMRs5Pu8tuU-tU,1847
340
340
  ccxt/async_support/base/ws/__init__.py,sha256=uockzpLuwntKGZbs5EOWFe-Zg-k6Cj7GhNJLc_RX0so,1791
341
341
  ccxt/async_support/base/ws/aiohttp_client.py,sha256=xmlZV30Vb9Kq7JCm3D5FuEmuj1zp5H4F4hrz8-Y-Ir4,4999
@@ -349,10 +349,10 @@ ccxt/async_support/base/ws/order_book_side.py,sha256=GH-475Ni0mLOx7mUDnz4jjzaGkh
349
349
  ccxt/base/__init__.py,sha256=eTx1OE3HJjspFUQjGm6LBhaQiMKJnXjkdP-JUXknyQ0,1320
350
350
  ccxt/base/decimal_to_precision.py,sha256=fgWRBzRTtsf3r2INyS4f7WHlzgjB5YM1ekiwqD21aac,6634
351
351
  ccxt/base/errors.py,sha256=-LVeTNyXvu3QEgb-p-KzMpcBgzHlvFTwDzmZK7Gfc14,3401
352
- ccxt/base/exchange.py,sha256=GvVqdM-jXvaXIRzfOSOlRq1hly5m2SCLxm_ij3wzoWA,170567
352
+ ccxt/base/exchange.py,sha256=sffNGME5Y5ofh207YU3Z2D9qRVczsjizA4aLJjyU7cE,170567
353
353
  ccxt/base/precise.py,sha256=_xfu54sV0vWNnOfGTKRFykeuWP8mn4K1m9lk1tcllX4,8565
354
354
  ccxt/base/types.py,sha256=8FseQkf_LL-nXdb5LyT6RpDaU8pr3HAI9Jb9Wj_oDN0,1366
355
- ccxt/pro/__init__.py,sha256=CEX7M5KZkMVsOB54FZM0OIWQnySMkVPyFe_2tD3W4po,6463
355
+ ccxt/pro/__init__.py,sha256=WQxUEZ07iK1n3R6-Iaq4vfgRX-EvbB3YfYj_dcMcmqo,6463
356
356
  ccxt/pro/alpaca.py,sha256=CmaU0MJq0HiNaYvBHeDJfTa-letDiEQonRON7Q_3W_k,26686
357
357
  ccxt/pro/ascendex.py,sha256=k6rpuiPhj3ipeWRG5vwR22SS4iAzQPe1q1WxJaaucLk,34565
358
358
  ccxt/pro/bequant.py,sha256=qz8JjnpkAQY_CFiFSKGqrjjgZ2167_TBKjSJOb9NeDw,1081
@@ -462,7 +462,7 @@ ccxt/test/base/test_ticker.py,sha256=h9AV_O6s-Ax3vB3sFoN0Mz22rMOi65i9BDv0SNejH98
462
462
  ccxt/test/base/test_trade.py,sha256=bL9o3S_TGW8Nnlxu-BYkRG8NyRzKAWrU66uO5jJCM3A,2259
463
463
  ccxt/test/base/test_trading_fee.py,sha256=yRCpLHLg_ca9JQXdZB3_pIMHgHLGEfeQF95E6d1e2Bc,1125
464
464
  ccxt/test/base/test_transaction.py,sha256=BTbB4UHHXkrvYgwbrhh867nVRlevmIkIrz1W_odlQJI,1434
465
- ccxt-3.1.33.dist-info/METADATA,sha256=2XYU_Kei6k1z8Z-7eZDEukwmzVZ4iM9nrZ-5VcomeNI,110521
466
- ccxt-3.1.33.dist-info/WHEEL,sha256=a-zpFRIJzOq5QfuhBzbhiA1eHTzNCJn8OdRvhdNX0Rk,110
467
- ccxt-3.1.33.dist-info/top_level.txt,sha256=CkQDuCTDKNcImPV60t36G6MdYfxsAPNiSaEwifVoVMo,5
468
- ccxt-3.1.33.dist-info/RECORD,,
465
+ ccxt-3.1.35.dist-info/METADATA,sha256=k4EuGn83BjgX03mFhTl0x7WHZyzbw0NmGh49LsWr4DU,110521
466
+ ccxt-3.1.35.dist-info/WHEEL,sha256=a-zpFRIJzOq5QfuhBzbhiA1eHTzNCJn8OdRvhdNX0Rk,110
467
+ ccxt-3.1.35.dist-info/top_level.txt,sha256=CkQDuCTDKNcImPV60t36G6MdYfxsAPNiSaEwifVoVMo,5
468
+ ccxt-3.1.35.dist-info/RECORD,,
File without changes