ccxt 4.3.55__py2.py3-none-any.whl → 4.3.56__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.3.55'
25
+ __version__ = '4.3.56'
26
26
 
27
27
  # ----------------------------------------------------------------------------
28
28
 
ccxt/abstract/bingx.py CHANGED
@@ -76,6 +76,22 @@ class ImplicitAPI:
76
76
  swap_v2_private_delete_trade_batchorders = swapV2PrivateDeleteTradeBatchOrders = Entry('trade/batchOrders', ['swap', 'v2', 'private'], 'DELETE', {'cost': 2})
77
77
  swap_v2_private_delete_trade_allopenorders = swapV2PrivateDeleteTradeAllOpenOrders = Entry('trade/allOpenOrders', ['swap', 'v2', 'private'], 'DELETE', {'cost': 2})
78
78
  swap_v3_public_get_quote_klines = swapV3PublicGetQuoteKlines = Entry('quote/klines', ['swap', 'v3', 'public'], 'GET', {'cost': 1})
79
+ cswap_v1_public_get_market_contracts = cswapV1PublicGetMarketContracts = Entry('market/contracts', ['cswap', 'v1', 'public'], 'GET', {'cost': 1})
80
+ cswap_v1_public_get_market_premiumindex = cswapV1PublicGetMarketPremiumIndex = Entry('market/premiumIndex', ['cswap', 'v1', 'public'], 'GET', {'cost': 1})
81
+ cswap_v1_public_get_market_openinterest = cswapV1PublicGetMarketOpenInterest = Entry('market/openInterest', ['cswap', 'v1', 'public'], 'GET', {'cost': 1})
82
+ cswap_v1_public_get_market_klines = cswapV1PublicGetMarketKlines = Entry('market/klines', ['cswap', 'v1', 'public'], 'GET', {'cost': 1})
83
+ cswap_v1_public_get_market_depth = cswapV1PublicGetMarketDepth = Entry('market/depth', ['cswap', 'v1', 'public'], 'GET', {'cost': 1})
84
+ cswap_v1_public_get_market_ticker = cswapV1PublicGetMarketTicker = Entry('market/ticker', ['cswap', 'v1', 'public'], 'GET', {'cost': 1})
85
+ cswap_v1_private_get_trade_leverage = cswapV1PrivateGetTradeLeverage = Entry('trade/leverage', ['cswap', 'v1', 'private'], 'GET', {'cost': 2})
86
+ cswap_v1_private_get_trade_forceorders = cswapV1PrivateGetTradeForceOrders = Entry('trade/forceOrders', ['cswap', 'v1', 'private'], 'GET', {'cost': 2})
87
+ cswap_v1_private_get_trade_allfillorders = cswapV1PrivateGetTradeAllFillOrders = Entry('trade/allFillOrders', ['cswap', 'v1', 'private'], 'GET', {'cost': 2})
88
+ cswap_v1_private_get_user_commissionrate = cswapV1PrivateGetUserCommissionRate = Entry('user/commissionRate', ['cswap', 'v1', 'private'], 'GET', {'cost': 2})
89
+ cswap_v1_private_get_user_positions = cswapV1PrivateGetUserPositions = Entry('user/positions', ['cswap', 'v1', 'private'], 'GET', {'cost': 2})
90
+ cswap_v1_private_get_user_balance = cswapV1PrivateGetUserBalance = Entry('user/balance', ['cswap', 'v1', 'private'], 'GET', {'cost': 2})
91
+ cswap_v1_private_post_trade_order = cswapV1PrivatePostTradeOrder = Entry('trade/order', ['cswap', 'v1', 'private'], 'POST', {'cost': 2})
92
+ cswap_v1_private_post_trade_leverage = cswapV1PrivatePostTradeLeverage = Entry('trade/leverage', ['cswap', 'v1', 'private'], 'POST', {'cost': 2})
93
+ cswap_v1_private_post_trade_allopenorders = cswapV1PrivatePostTradeAllOpenOrders = Entry('trade/allOpenOrders', ['cswap', 'v1', 'private'], 'POST', {'cost': 2})
94
+ cswap_v1_private_post_trade_closeallpositions = cswapV1PrivatePostTradeCloseAllPositions = Entry('trade/closeAllPositions', ['cswap', 'v1', 'private'], 'POST', {'cost': 2})
79
95
  contract_v1_private_get_allposition = contractV1PrivateGetAllPosition = Entry('allPosition', ['contract', 'v1', 'private'], 'GET', {'cost': 2})
80
96
  contract_v1_private_get_allorders = contractV1PrivateGetAllOrders = Entry('allOrders', ['contract', 'v1', 'private'], 'GET', {'cost': 2})
81
97
  contract_v1_private_get_balance = contractV1PrivateGetBalance = Entry('balance', ['contract', 'v1', 'private'], 'GET', {'cost': 2})
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.3.55'
7
+ __version__ = '4.3.56'
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # -----------------------------------------------------------------------------
4
4
 
5
- __version__ = '4.3.55'
5
+ __version__ = '4.3.56'
6
6
 
7
7
  # -----------------------------------------------------------------------------
8
8
 
@@ -24,7 +24,7 @@ from ccxt.async_support.base.throttler import Throttler
24
24
 
25
25
  # -----------------------------------------------------------------------------
26
26
 
27
- from ccxt.base.errors import BaseError, BadSymbol, BadRequest, BadResponse, ExchangeError, ExchangeNotAvailable, RequestTimeout, NotSupported, NullResponse, InvalidAddress, RateLimitExceeded
27
+ from ccxt.base.errors import BaseError, NetworkError, BadSymbol, BadRequest, BadResponse, ExchangeError, ExchangeNotAvailable, RequestTimeout, NotSupported, NullResponse, InvalidAddress, RateLimitExceeded
28
28
  from ccxt.base.types import OrderType, OrderSide, OrderRequest, CancellationRequest
29
29
 
30
30
  # -----------------------------------------------------------------------------
@@ -826,7 +826,23 @@ class Exchange(BaseExchange):
826
826
  self.last_request_headers = request['headers']
827
827
  self.last_request_body = request['body']
828
828
  self.last_request_url = request['url']
829
- return await self.fetch(request['url'], request['method'], request['headers'], request['body'])
829
+ retries = None
830
+ retries, params = self.handle_option_and_params(params, path, 'maxRetriesOnFailure', 0)
831
+ retryDelay = None
832
+ retryDelay, params = self.handle_option_and_params(params, path, 'maxRetriesOnFailureDelay', 0)
833
+ for i in range(0, retries + 1):
834
+ try:
835
+ return await self.fetch(request['url'], request['method'], request['headers'], request['body'])
836
+ except Exception as e:
837
+ if isinstance(e, NetworkError):
838
+ if i < retries:
839
+ if self.verbose:
840
+ self.log('Request failed with the error: ' + str(e) + ', retrying ' + (i + str(1)) + ' of ' + str(retries) + '...')
841
+ if (retryDelay is not None) and (retryDelay != 0):
842
+ await self.sleep(retryDelay)
843
+ continue
844
+ raise e
845
+ return None # self line is never reached, but exists for c# value return requirement
830
846
 
831
847
  async def request(self, path, api: Any = 'public', method='GET', params={}, headers: Any = None, body: Any = None, config={}):
832
848
  return await self.fetch2(path, api, method, params, headers, body, config)
@@ -1567,7 +1567,7 @@ class binance(Exchange, ImplicitAPI):
1567
1567
  '-3042': BadRequest, # {"code":-3042,"msg":"PriceIndex not available for self margin pair."}
1568
1568
  '-3043': PermissionDenied, # {"code":-3043,"msg":"Transferring in not allowed."}
1569
1569
  '-3044': OperationFailed, # {"code":-3044,"msg":"System busy."}
1570
- '-3045': OperationFailed, # {"code":-3045,"msg":"The system doesn't have enough asset now."}
1570
+ '-3045': OperationRejected, # {"code":-3045,"msg":"The system doesn't have enough asset now."}
1571
1571
  '-3999': PermissionDenied, # {"code":-3999,"msg":"This function is only available for invited users."}
1572
1572
  #
1573
1573
  # 4xxx(different from contract markets)
@@ -1586,7 +1586,7 @@ class binance(Exchange, ImplicitAPI):
1586
1586
  '-4011': BadRequest, # {"code":-4011 ,"msg":"White list mail is invalid."}
1587
1587
  '-4012': PermissionDenied, # {"code":-4012 ,"msg":"White list is not opened."}
1588
1588
  '-4013': AuthenticationError, # {"code":-4013 ,"msg":"2FA is not opened."}
1589
- '-4014': OperationFailed, # {"code":-4014 ,"msg":"Withdraw is not allowed within 2 min login."}
1589
+ '-4014': OperationRejected, # {"code":-4014 ,"msg":"Withdraw is not allowed within 2 min login."}
1590
1590
  '-4015': PermissionDenied, # {"code":-4015 ,"msg":"Withdraw is limited."}
1591
1591
  '-4016': PermissionDenied, # {"code":-4016 ,"msg":"Within 24 hours after password modification, withdrawal is prohibited."}
1592
1592
  '-4017': PermissionDenied, # {"code":-4017 ,"msg":"Within 24 hours after the release of 2FA, withdrawal is prohibited."}
@@ -1595,7 +1595,7 @@ class binance(Exchange, ImplicitAPI):
1595
1595
  '-4020': ExchangeError, # override commons
1596
1596
  '-4021': BadRequest, # {"code":-4021,"msg":"Asset withdrawal must be an %s multiple of %s."}
1597
1597
  '-4022': BadRequest, # {"code":-4022,"msg":"Not less than the minimum pick-up quantity %s."}
1598
- '-4023': OperationFailed, # {"code":-4023,"msg":"Within 24 hours, the withdrawal exceeds the maximum amount."}
1598
+ '-4023': OperationRejected, # {"code":-4023,"msg":"Within 24 hours, the withdrawal exceeds the maximum amount."}
1599
1599
  '-4024': InsufficientFunds, # {"code":-4024,"msg":"You don't have self asset."}
1600
1600
  '-4025': InsufficientFunds, # {"code":-4025,"msg":"The number of hold asset is less than zero."}
1601
1601
  '-4026': InsufficientFunds, # {"code":-4026,"msg":"You have insufficient balance."}
@@ -1604,7 +1604,7 @@ class binance(Exchange, ImplicitAPI):
1604
1604
  '-4029': BadRequest, # {"code":-4029,"msg":"The withdrawal record does not exist."}
1605
1605
  '-4030': BadResponse, # {"code":-4030,"msg":"Confirmation of successful asset withdrawal. [TODO] possible bug in docs"}
1606
1606
  '-4031': OperationFailed, # {"code":-4031,"msg":"Cancellation failed."}
1607
- '-4032': OperationFailed, # {"code":-4032,"msg":"Withdraw verification exception."}
1607
+ '-4032': OperationRejected, # {"code":-4032,"msg":"Withdraw verification exception."}
1608
1608
  '-4033': BadRequest, # {"code":-4033,"msg":"Illegal address."}
1609
1609
  '-4034': OperationRejected, # {"code":-4034,"msg":"The address is suspected of fake."}
1610
1610
  '-4035': PermissionDenied, # {"code":-4035,"msg":"This address is not on the whitelist. Please join and try again."}
@@ -1727,7 +1727,7 @@ class binance(Exchange, ImplicitAPI):
1727
1727
  '-5003': InsufficientFunds, # You don't have self asset.
1728
1728
  '-5004': OperationRejected, # The residual balances of %s have exceeded 0.001BTC, Please re-choose.
1729
1729
  '-5005': OperationRejected, # The residual balances of %s is too low, Please re-choose.
1730
- '-5006': OperationFailed, # Only transfer once in 24 hours.
1730
+ '-5006': OperationRejected, # Only transfer once in 24 hours.
1731
1731
  '-5007': BadRequest, # Quantity must be greater than zero.
1732
1732
  '-5008': OperationRejected, # Insufficient amount of returnable assets.
1733
1733
  '-5009': BadSymbol, # Product does not exist.
@@ -1745,8 +1745,8 @@ class binance(Exchange, ImplicitAPI):
1745
1745
  '-6004': BadRequest, # Product not in purchase status
1746
1746
  '-6005': BadRequest, # Smaller than min purchase limit
1747
1747
  '-6006': BadRequest, # Redeem amount error
1748
- '-6007': OperationFailed, # Not in redeem time
1749
- '-6008': OperationFailed, # Product not in redeem status
1748
+ '-6007': OperationRejected, # Not in redeem time
1749
+ '-6008': OperationRejected, # Product not in redeem status
1750
1750
  '-6009': RateLimitExceeded, # Request frequency too high
1751
1751
  '-6011': OperationRejected, # Exceeding the maximum num allowed to purchase per user
1752
1752
  '-6012': InsufficientFunds, # Balance not enough
@@ -116,6 +116,7 @@ class bingx(Exchange, ImplicitAPI):
116
116
  'subAccount': 'https://open-api.{hostname}/openApi',
117
117
  'account': 'https://open-api.{hostname}/openApi',
118
118
  'copyTrading': 'https://open-api.{hostname}/openApi',
119
+ 'cswap': 'https://open-api.{hostname}/openApi',
119
120
  },
120
121
  'test': {
121
122
  'swap': 'https://open-api-vst.{hostname}/openApi', # only swap is really "test" but since the API keys are the same, we want to keep all the functionalities when the user enables the sandboxmode
@@ -278,6 +279,36 @@ class bingx(Exchange, ImplicitAPI):
278
279
  },
279
280
  },
280
281
  },
282
+ 'cswap': {
283
+ 'v1': {
284
+ 'public': {
285
+ 'get': {
286
+ 'market/contracts': 1,
287
+ 'market/premiumIndex': 1,
288
+ 'market/openInterest': 1,
289
+ 'market/klines': 1,
290
+ 'market/depth': 1,
291
+ 'market/ticker': 1,
292
+ },
293
+ },
294
+ 'private': {
295
+ 'get': {
296
+ 'trade/leverage': 2,
297
+ 'trade/forceOrders': 2,
298
+ 'trade/allFillOrders': 2,
299
+ 'user/commissionRate': 2,
300
+ 'user/positions': 2,
301
+ 'user/balance': 2,
302
+ },
303
+ 'post': {
304
+ 'trade/order': 2,
305
+ 'trade/leverage': 2,
306
+ 'trade/allOpenOrders': 2,
307
+ 'trade/closeAllPositions': 2,
308
+ },
309
+ },
310
+ },
311
+ },
281
312
  'contract': {
282
313
  'v1': {
283
314
  'private': {
@@ -1466,6 +1497,8 @@ class bingx(Exchange, ImplicitAPI):
1466
1497
  percentage = percentage.replace('%', '')
1467
1498
  change = self.safe_string(ticker, 'priceChange')
1468
1499
  ts = self.safe_integer(ticker, 'closeTime')
1500
+ if ts == 0:
1501
+ ts = None
1469
1502
  datetime = self.iso8601(ts)
1470
1503
  bid = self.safe_string(ticker, 'bidPrice')
1471
1504
  bidVolume = self.safe_string(ticker, 'bidQty')
@@ -566,7 +566,13 @@ class bitflyer(Exchange, ImplicitAPI):
566
566
  'product_code': self.market_id(symbol),
567
567
  'child_order_acceptance_id': id,
568
568
  }
569
- return await self.privatePostCancelchildorder(self.extend(request, params))
569
+ response = await self.privatePostCancelchildorder(self.extend(request, params))
570
+ #
571
+ # 200 OK.
572
+ #
573
+ return self.safe_order({
574
+ 'info': response,
575
+ })
570
576
 
571
577
  def parse_order_status(self, status: Str):
572
578
  statuses: dict = {
@@ -1038,6 +1038,20 @@ class bitopro(Exchange, ImplicitAPI):
1038
1038
  #
1039
1039
  return self.parse_order(response, market)
1040
1040
 
1041
+ def parse_cancel_orders(self, data):
1042
+ dataKeys = list(data.keys())
1043
+ orders = []
1044
+ for i in range(0, len(dataKeys)):
1045
+ marketId = dataKeys[i]
1046
+ orderIds = data[marketId]
1047
+ for j in range(0, len(orderIds)):
1048
+ orders.append(self.safe_order({
1049
+ 'info': orderIds[j],
1050
+ 'id': orderIds[j],
1051
+ 'symbol': self.safe_symbol(marketId),
1052
+ }))
1053
+ return orders
1054
+
1041
1055
  async def cancel_orders(self, ids, symbol: Str = None, params={}):
1042
1056
  """
1043
1057
  cancel multiple orders
@@ -1065,7 +1079,8 @@ class bitopro(Exchange, ImplicitAPI):
1065
1079
  # }
1066
1080
  # }
1067
1081
  #
1068
- return response
1082
+ data = self.safe_dict(response, 'data')
1083
+ return self.parse_cancel_orders(data)
1069
1084
 
1070
1085
  async def cancel_all_orders(self, symbol: Str = None, params={}):
1071
1086
  """
@@ -1086,7 +1101,7 @@ class bitopro(Exchange, ImplicitAPI):
1086
1101
  response = await self.privateDeleteOrdersPair(self.extend(request, params))
1087
1102
  else:
1088
1103
  response = await self.privateDeleteOrdersAll(self.extend(request, params))
1089
- result = self.safe_value(response, 'data', {})
1104
+ data = self.safe_value(response, 'data', {})
1090
1105
  #
1091
1106
  # {
1092
1107
  # "data":{
@@ -1097,7 +1112,7 @@ class bitopro(Exchange, ImplicitAPI):
1097
1112
  # }
1098
1113
  # }
1099
1114
  #
1100
- return result
1115
+ return self.parse_cancel_orders(data)
1101
1116
 
1102
1117
  async def fetch_order(self, id: str, symbol: Str = None, params={}):
1103
1118
  """
@@ -14,7 +14,6 @@ from ccxt.base.errors import BadRequest
14
14
  from ccxt.base.errors import InsufficientFunds
15
15
  from ccxt.base.errors import InvalidOrder
16
16
  from ccxt.base.errors import OrderNotFound
17
- from ccxt.base.errors import DDoSProtection
18
17
  from ccxt.base.decimal_to_precision import TICK_SIZE
19
18
  from ccxt.base.precise import Precise
20
19
 
@@ -161,16 +160,18 @@ class btcmarkets(Exchange, ImplicitAPI):
161
160
  },
162
161
  'precisionMode': TICK_SIZE,
163
162
  'exceptions': {
164
- '3': InvalidOrder,
165
- '6': DDoSProtection,
166
- 'InsufficientFund': InsufficientFunds,
167
- 'InvalidPrice': InvalidOrder,
168
- 'InvalidAmount': InvalidOrder,
169
- 'MissingArgument': InvalidOrder,
170
- 'OrderAlreadyCancelled': InvalidOrder,
171
- 'OrderNotFound': OrderNotFound,
172
- 'OrderStatusIsFinal': InvalidOrder,
173
- 'InvalidPaginationParameter': BadRequest,
163
+ 'exact': {
164
+ 'InsufficientFund': InsufficientFunds,
165
+ 'InvalidPrice': InvalidOrder,
166
+ 'InvalidAmount': InvalidOrder,
167
+ 'MissingArgument': BadRequest,
168
+ 'OrderAlreadyCancelled': InvalidOrder,
169
+ 'OrderNotFound': OrderNotFound,
170
+ 'OrderStatusIsFinal': InvalidOrder,
171
+ 'InvalidPaginationParameter': BadRequest,
172
+ },
173
+ 'broad': {
174
+ },
174
175
  },
175
176
  'fees': {
176
177
  'percentage': True,
@@ -370,7 +371,8 @@ class btcmarkets(Exchange, ImplicitAPI):
370
371
  # "minOrderAmount":"0.00007",
371
372
  # "maxOrderAmount":"1000000",
372
373
  # "amountDecimals":"8",
373
- # "priceDecimals":"2"
374
+ # "priceDecimals":"2",
375
+ # "status": "Online"
374
376
  # }
375
377
  # ]
376
378
  #
@@ -387,6 +389,7 @@ class btcmarkets(Exchange, ImplicitAPI):
387
389
  pricePrecision = self.parse_number(self.parse_precision(self.safe_string(market, 'priceDecimals')))
388
390
  minAmount = self.safe_number(market, 'minOrderAmount')
389
391
  maxAmount = self.safe_number(market, 'maxOrderAmount')
392
+ status = self.safe_string(market, 'status')
390
393
  minPrice = None
391
394
  if quote == 'AUD':
392
395
  minPrice = pricePrecision
@@ -405,7 +408,7 @@ class btcmarkets(Exchange, ImplicitAPI):
405
408
  'swap': False,
406
409
  'future': False,
407
410
  'option': False,
408
- 'active': None,
411
+ 'active': (status == 'Online'),
409
412
  'contract': False,
410
413
  'linear': None,
411
414
  'inverse': None,
@@ -1204,18 +1207,16 @@ class btcmarkets(Exchange, ImplicitAPI):
1204
1207
  def handle_errors(self, code: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
1205
1208
  if response is None:
1206
1209
  return None # fallback to default error handler
1207
- if 'success' in response:
1208
- if not response['success']:
1209
- error = self.safe_string(response, 'errorCode')
1210
- feedback = self.id + ' ' + body
1211
- self.throw_exactly_matched_exception(self.exceptions, error, feedback)
1212
- raise ExchangeError(feedback)
1213
- # v3 api errors
1214
- if code >= 400:
1215
- errorCode = self.safe_string(response, 'code')
1216
- message = self.safe_string(response, 'message')
1210
+ #
1211
+ # {"code":"UnAuthorized","message":"invalid access token"}
1212
+ # {"code":"MarketNotFound","message":"invalid marketId"}
1213
+ #
1214
+ errorCode = self.safe_string(response, 'code')
1215
+ message = self.safe_string(response, 'message')
1216
+ if errorCode is not None:
1217
1217
  feedback = self.id + ' ' + body
1218
- self.throw_exactly_matched_exception(self.exceptions, errorCode, feedback)
1219
- self.throw_exactly_matched_exception(self.exceptions, message, feedback)
1220
- raise ExchangeError(feedback)
1218
+ self.throw_exactly_matched_exception(self.exceptions['exact'], message, feedback)
1219
+ self.throw_exactly_matched_exception(self.exceptions['exact'], errorCode, feedback)
1220
+ self.throw_broadly_matched_exception(self.exceptions['broad'], message, feedback)
1221
+ raise ExchangeError(feedback) # unknown message
1221
1222
  return None
@@ -2922,14 +2922,17 @@ class bybit(Exchange, ImplicitAPI):
2922
2922
  enableUnifiedMargin, enableUnifiedAccount = await self.is_unified_enabled()
2923
2923
  isUnifiedAccount = (enableUnifiedMargin or enableUnifiedAccount)
2924
2924
  type = None
2925
- type, params = self.handle_market_type_and_params('fetchBalance', None, params)
2925
+ type, params = self.get_bybit_type('fetchBalance', None, params)
2926
2926
  isSpot = (type == 'spot')
2927
- isSwap = (type == 'swap')
2927
+ isLinear = (type == 'linear')
2928
+ isInverse = (type == 'inverse')
2928
2929
  if isUnifiedAccount:
2929
- if isSpot or isSwap:
2930
+ if isInverse:
2931
+ type = 'contract'
2932
+ else:
2930
2933
  type = 'unified'
2931
2934
  else:
2932
- if isSwap:
2935
+ if isLinear or isInverse:
2933
2936
  type = 'contract'
2934
2937
  accountTypes = self.safe_dict(self.options, 'accountsByType', {})
2935
2938
  unifiedType = self.safe_string_upper(accountTypes, type, type)
@@ -3232,7 +3235,7 @@ class bybit(Exchange, ImplicitAPI):
3232
3235
  else:
3233
3236
  feeCurrencyCode = market['base'] if market['inverse'] else market['settle']
3234
3237
  fee = {
3235
- 'cost': feeCostString,
3238
+ 'cost': self.parse_number(feeCostString),
3236
3239
  'currency': feeCurrencyCode,
3237
3240
  }
3238
3241
  clientOrderId = self.safe_string(order, 'orderLinkId')
@@ -1946,7 +1946,11 @@ class delta(Exchange, ImplicitAPI):
1946
1946
  # "success":true
1947
1947
  # }
1948
1948
  #
1949
- return response
1949
+ return [
1950
+ self.safe_order({
1951
+ 'info': response,
1952
+ }),
1953
+ ]
1950
1954
 
1951
1955
  async def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
1952
1956
  """
@@ -641,6 +641,7 @@ class gate(Exchange, ImplicitAPI):
641
641
  'createOrder': {
642
642
  'expiration': 86400, # for conditional orders
643
643
  },
644
+ 'createMarketBuyOrderRequiresPrice': True,
644
645
  'networks': {
645
646
  'AVAXC': 'AVAX_C',
646
647
  'BEP20': 'BSC',
@@ -593,7 +593,7 @@ class hyperliquid(Exchange, ImplicitAPI):
593
593
  'limits': {
594
594
  'leverage': {
595
595
  'min': None,
596
- 'max': None,
596
+ 'max': self.safe_integer(market, 'maxLeverage'),
597
597
  },
598
598
  'amount': {
599
599
  'min': None,
@@ -1417,6 +1417,27 @@ class lbank(Exchange, ImplicitAPI):
1417
1417
  # "status":-1
1418
1418
  # }
1419
1419
  #
1420
+ # cancelOrder
1421
+ #
1422
+ # {
1423
+ # "executedQty":0.0,
1424
+ # "price":0.05,
1425
+ # "origQty":100.0,
1426
+ # "tradeType":"buy",
1427
+ # "status":0
1428
+ # }
1429
+ #
1430
+ # cancelAllOrders
1431
+ #
1432
+ # {
1433
+ # "executedQty":0.00000000000000000000,
1434
+ # "orderId":"293ef71b-3e67-4962-af93-aa06990a045f",
1435
+ # "price":0.05000000000000000000,
1436
+ # "origQty":100.00000000000000000000,
1437
+ # "tradeType":"buy",
1438
+ # "status":0
1439
+ # }
1440
+ #
1420
1441
  id = self.safe_string_2(order, 'orderId', 'order_id')
1421
1442
  clientOrderId = self.safe_string_2(order, 'clientOrderId', 'custom_id')
1422
1443
  timestamp = self.safe_integer_2(order, 'time', 'create_time')
@@ -1426,7 +1447,7 @@ class lbank(Exchange, ImplicitAPI):
1426
1447
  timeInForce = None
1427
1448
  postOnly = False
1428
1449
  type = 'limit'
1429
- rawType = self.safe_string(order, 'type') # buy, sell, buy_market, sell_market, buy_maker,sell_maker,buy_ioc,sell_ioc, buy_fok, sell_fok
1450
+ rawType = self.safe_string_2(order, 'type', 'tradeType') # buy, sell, buy_market, sell_market, buy_maker,sell_maker,buy_ioc,sell_ioc, buy_fok, sell_fok
1430
1451
  parts = rawType.split('_')
1431
1452
  side = self.safe_string(parts, 0)
1432
1453
  typePart = self.safe_string(parts, 1) # market, maker, ioc, fok or None(limit)
@@ -1760,12 +1781,12 @@ class lbank(Exchange, ImplicitAPI):
1760
1781
  # "origQty":100.0,
1761
1782
  # "tradeType":"buy",
1762
1783
  # "status":0
1763
- # },
1784
+ # },
1764
1785
  # "error_code":0,
1765
1786
  # "ts":1648501286196
1766
1787
  # }
1767
- result = self.safe_value(response, 'data', {})
1768
- return result
1788
+ data = self.safe_dict(response, 'data', {})
1789
+ return self.parse_order(data)
1769
1790
 
1770
1791
  async def cancel_all_orders(self, symbol: Str = None, params={}):
1771
1792
  """
@@ -1800,8 +1821,8 @@ class lbank(Exchange, ImplicitAPI):
1800
1821
  # "ts":1648506641469
1801
1822
  # }
1802
1823
  #
1803
- result = self.safe_value(response, 'data', [])
1804
- return result
1824
+ data = self.safe_list(response, 'data', [])
1825
+ return self.parse_orders(data)
1805
1826
 
1806
1827
  def get_network_code_for_currency(self, currencyCode, params):
1807
1828
  defaultNetworks = self.safe_value(self.options, 'defaultNetworks')
ccxt/base/exchange.py CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.3.55'
7
+ __version__ = '4.3.56'
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
@@ -1449,7 +1449,7 @@ class Exchange(object):
1449
1449
  @staticmethod
1450
1450
  def eddsa(request, secret, curve='ed25519'):
1451
1451
  if isinstance(secret, str):
1452
- Exchange.encode(secret)
1452
+ secret = Exchange.encode(secret)
1453
1453
  private_key = ed25519.Ed25519PrivateKey.from_private_bytes(secret) if len(secret) == 32 else load_pem_private_key(secret, None)
1454
1454
  return Exchange.binary_to_base64(private_key.sign(request))
1455
1455
 
@@ -3734,7 +3734,23 @@ class Exchange(object):
3734
3734
  self.last_request_headers = request['headers']
3735
3735
  self.last_request_body = request['body']
3736
3736
  self.last_request_url = request['url']
3737
- return self.fetch(request['url'], request['method'], request['headers'], request['body'])
3737
+ retries = None
3738
+ retries, params = self.handle_option_and_params(params, path, 'maxRetriesOnFailure', 0)
3739
+ retryDelay = None
3740
+ retryDelay, params = self.handle_option_and_params(params, path, 'maxRetriesOnFailureDelay', 0)
3741
+ for i in range(0, retries + 1):
3742
+ try:
3743
+ return self.fetch(request['url'], request['method'], request['headers'], request['body'])
3744
+ except Exception as e:
3745
+ if isinstance(e, NetworkError):
3746
+ if i < retries:
3747
+ if self.verbose:
3748
+ self.log('Request failed with the error: ' + str(e) + ', retrying ' + (i + str(1)) + ' of ' + str(retries) + '...')
3749
+ if (retryDelay is not None) and (retryDelay != 0):
3750
+ self.sleep(retryDelay)
3751
+ continue
3752
+ raise e
3753
+ return None # self line is never reached, but exists for c# value return requirement
3738
3754
 
3739
3755
  def request(self, path, api: Any = 'public', method='GET', params={}, headers: Any = None, body: Any = None, config={}):
3740
3756
  return self.fetch2(path, api, method, params, headers, body, config)
ccxt/binance.py CHANGED
@@ -1566,7 +1566,7 @@ class binance(Exchange, ImplicitAPI):
1566
1566
  '-3042': BadRequest, # {"code":-3042,"msg":"PriceIndex not available for self margin pair."}
1567
1567
  '-3043': PermissionDenied, # {"code":-3043,"msg":"Transferring in not allowed."}
1568
1568
  '-3044': OperationFailed, # {"code":-3044,"msg":"System busy."}
1569
- '-3045': OperationFailed, # {"code":-3045,"msg":"The system doesn't have enough asset now."}
1569
+ '-3045': OperationRejected, # {"code":-3045,"msg":"The system doesn't have enough asset now."}
1570
1570
  '-3999': PermissionDenied, # {"code":-3999,"msg":"This function is only available for invited users."}
1571
1571
  #
1572
1572
  # 4xxx(different from contract markets)
@@ -1585,7 +1585,7 @@ class binance(Exchange, ImplicitAPI):
1585
1585
  '-4011': BadRequest, # {"code":-4011 ,"msg":"White list mail is invalid."}
1586
1586
  '-4012': PermissionDenied, # {"code":-4012 ,"msg":"White list is not opened."}
1587
1587
  '-4013': AuthenticationError, # {"code":-4013 ,"msg":"2FA is not opened."}
1588
- '-4014': OperationFailed, # {"code":-4014 ,"msg":"Withdraw is not allowed within 2 min login."}
1588
+ '-4014': OperationRejected, # {"code":-4014 ,"msg":"Withdraw is not allowed within 2 min login."}
1589
1589
  '-4015': PermissionDenied, # {"code":-4015 ,"msg":"Withdraw is limited."}
1590
1590
  '-4016': PermissionDenied, # {"code":-4016 ,"msg":"Within 24 hours after password modification, withdrawal is prohibited."}
1591
1591
  '-4017': PermissionDenied, # {"code":-4017 ,"msg":"Within 24 hours after the release of 2FA, withdrawal is prohibited."}
@@ -1594,7 +1594,7 @@ class binance(Exchange, ImplicitAPI):
1594
1594
  '-4020': ExchangeError, # override commons
1595
1595
  '-4021': BadRequest, # {"code":-4021,"msg":"Asset withdrawal must be an %s multiple of %s."}
1596
1596
  '-4022': BadRequest, # {"code":-4022,"msg":"Not less than the minimum pick-up quantity %s."}
1597
- '-4023': OperationFailed, # {"code":-4023,"msg":"Within 24 hours, the withdrawal exceeds the maximum amount."}
1597
+ '-4023': OperationRejected, # {"code":-4023,"msg":"Within 24 hours, the withdrawal exceeds the maximum amount."}
1598
1598
  '-4024': InsufficientFunds, # {"code":-4024,"msg":"You don't have self asset."}
1599
1599
  '-4025': InsufficientFunds, # {"code":-4025,"msg":"The number of hold asset is less than zero."}
1600
1600
  '-4026': InsufficientFunds, # {"code":-4026,"msg":"You have insufficient balance."}
@@ -1603,7 +1603,7 @@ class binance(Exchange, ImplicitAPI):
1603
1603
  '-4029': BadRequest, # {"code":-4029,"msg":"The withdrawal record does not exist."}
1604
1604
  '-4030': BadResponse, # {"code":-4030,"msg":"Confirmation of successful asset withdrawal. [TODO] possible bug in docs"}
1605
1605
  '-4031': OperationFailed, # {"code":-4031,"msg":"Cancellation failed."}
1606
- '-4032': OperationFailed, # {"code":-4032,"msg":"Withdraw verification exception."}
1606
+ '-4032': OperationRejected, # {"code":-4032,"msg":"Withdraw verification exception."}
1607
1607
  '-4033': BadRequest, # {"code":-4033,"msg":"Illegal address."}
1608
1608
  '-4034': OperationRejected, # {"code":-4034,"msg":"The address is suspected of fake."}
1609
1609
  '-4035': PermissionDenied, # {"code":-4035,"msg":"This address is not on the whitelist. Please join and try again."}
@@ -1726,7 +1726,7 @@ class binance(Exchange, ImplicitAPI):
1726
1726
  '-5003': InsufficientFunds, # You don't have self asset.
1727
1727
  '-5004': OperationRejected, # The residual balances of %s have exceeded 0.001BTC, Please re-choose.
1728
1728
  '-5005': OperationRejected, # The residual balances of %s is too low, Please re-choose.
1729
- '-5006': OperationFailed, # Only transfer once in 24 hours.
1729
+ '-5006': OperationRejected, # Only transfer once in 24 hours.
1730
1730
  '-5007': BadRequest, # Quantity must be greater than zero.
1731
1731
  '-5008': OperationRejected, # Insufficient amount of returnable assets.
1732
1732
  '-5009': BadSymbol, # Product does not exist.
@@ -1744,8 +1744,8 @@ class binance(Exchange, ImplicitAPI):
1744
1744
  '-6004': BadRequest, # Product not in purchase status
1745
1745
  '-6005': BadRequest, # Smaller than min purchase limit
1746
1746
  '-6006': BadRequest, # Redeem amount error
1747
- '-6007': OperationFailed, # Not in redeem time
1748
- '-6008': OperationFailed, # Product not in redeem status
1747
+ '-6007': OperationRejected, # Not in redeem time
1748
+ '-6008': OperationRejected, # Product not in redeem status
1749
1749
  '-6009': RateLimitExceeded, # Request frequency too high
1750
1750
  '-6011': OperationRejected, # Exceeding the maximum num allowed to purchase per user
1751
1751
  '-6012': InsufficientFunds, # Balance not enough
ccxt/bingx.py CHANGED
@@ -115,6 +115,7 @@ class bingx(Exchange, ImplicitAPI):
115
115
  'subAccount': 'https://open-api.{hostname}/openApi',
116
116
  'account': 'https://open-api.{hostname}/openApi',
117
117
  'copyTrading': 'https://open-api.{hostname}/openApi',
118
+ 'cswap': 'https://open-api.{hostname}/openApi',
118
119
  },
119
120
  'test': {
120
121
  'swap': 'https://open-api-vst.{hostname}/openApi', # only swap is really "test" but since the API keys are the same, we want to keep all the functionalities when the user enables the sandboxmode
@@ -277,6 +278,36 @@ class bingx(Exchange, ImplicitAPI):
277
278
  },
278
279
  },
279
280
  },
281
+ 'cswap': {
282
+ 'v1': {
283
+ 'public': {
284
+ 'get': {
285
+ 'market/contracts': 1,
286
+ 'market/premiumIndex': 1,
287
+ 'market/openInterest': 1,
288
+ 'market/klines': 1,
289
+ 'market/depth': 1,
290
+ 'market/ticker': 1,
291
+ },
292
+ },
293
+ 'private': {
294
+ 'get': {
295
+ 'trade/leverage': 2,
296
+ 'trade/forceOrders': 2,
297
+ 'trade/allFillOrders': 2,
298
+ 'user/commissionRate': 2,
299
+ 'user/positions': 2,
300
+ 'user/balance': 2,
301
+ },
302
+ 'post': {
303
+ 'trade/order': 2,
304
+ 'trade/leverage': 2,
305
+ 'trade/allOpenOrders': 2,
306
+ 'trade/closeAllPositions': 2,
307
+ },
308
+ },
309
+ },
310
+ },
280
311
  'contract': {
281
312
  'v1': {
282
313
  'private': {
@@ -1465,6 +1496,8 @@ class bingx(Exchange, ImplicitAPI):
1465
1496
  percentage = percentage.replace('%', '')
1466
1497
  change = self.safe_string(ticker, 'priceChange')
1467
1498
  ts = self.safe_integer(ticker, 'closeTime')
1499
+ if ts == 0:
1500
+ ts = None
1468
1501
  datetime = self.iso8601(ts)
1469
1502
  bid = self.safe_string(ticker, 'bidPrice')
1470
1503
  bidVolume = self.safe_string(ticker, 'bidQty')
ccxt/bitflyer.py CHANGED
@@ -566,7 +566,13 @@ class bitflyer(Exchange, ImplicitAPI):
566
566
  'product_code': self.market_id(symbol),
567
567
  'child_order_acceptance_id': id,
568
568
  }
569
- return self.privatePostCancelchildorder(self.extend(request, params))
569
+ response = self.privatePostCancelchildorder(self.extend(request, params))
570
+ #
571
+ # 200 OK.
572
+ #
573
+ return self.safe_order({
574
+ 'info': response,
575
+ })
570
576
 
571
577
  def parse_order_status(self, status: Str):
572
578
  statuses: dict = {
ccxt/bitopro.py CHANGED
@@ -1038,6 +1038,20 @@ class bitopro(Exchange, ImplicitAPI):
1038
1038
  #
1039
1039
  return self.parse_order(response, market)
1040
1040
 
1041
+ def parse_cancel_orders(self, data):
1042
+ dataKeys = list(data.keys())
1043
+ orders = []
1044
+ for i in range(0, len(dataKeys)):
1045
+ marketId = dataKeys[i]
1046
+ orderIds = data[marketId]
1047
+ for j in range(0, len(orderIds)):
1048
+ orders.append(self.safe_order({
1049
+ 'info': orderIds[j],
1050
+ 'id': orderIds[j],
1051
+ 'symbol': self.safe_symbol(marketId),
1052
+ }))
1053
+ return orders
1054
+
1041
1055
  def cancel_orders(self, ids, symbol: Str = None, params={}):
1042
1056
  """
1043
1057
  cancel multiple orders
@@ -1065,7 +1079,8 @@ class bitopro(Exchange, ImplicitAPI):
1065
1079
  # }
1066
1080
  # }
1067
1081
  #
1068
- return response
1082
+ data = self.safe_dict(response, 'data')
1083
+ return self.parse_cancel_orders(data)
1069
1084
 
1070
1085
  def cancel_all_orders(self, symbol: Str = None, params={}):
1071
1086
  """
@@ -1086,7 +1101,7 @@ class bitopro(Exchange, ImplicitAPI):
1086
1101
  response = self.privateDeleteOrdersPair(self.extend(request, params))
1087
1102
  else:
1088
1103
  response = self.privateDeleteOrdersAll(self.extend(request, params))
1089
- result = self.safe_value(response, 'data', {})
1104
+ data = self.safe_value(response, 'data', {})
1090
1105
  #
1091
1106
  # {
1092
1107
  # "data":{
@@ -1097,7 +1112,7 @@ class bitopro(Exchange, ImplicitAPI):
1097
1112
  # }
1098
1113
  # }
1099
1114
  #
1100
- return result
1115
+ return self.parse_cancel_orders(data)
1101
1116
 
1102
1117
  def fetch_order(self, id: str, symbol: Str = None, params={}):
1103
1118
  """
ccxt/btcmarkets.py CHANGED
@@ -14,7 +14,6 @@ from ccxt.base.errors import BadRequest
14
14
  from ccxt.base.errors import InsufficientFunds
15
15
  from ccxt.base.errors import InvalidOrder
16
16
  from ccxt.base.errors import OrderNotFound
17
- from ccxt.base.errors import DDoSProtection
18
17
  from ccxt.base.decimal_to_precision import TICK_SIZE
19
18
  from ccxt.base.precise import Precise
20
19
 
@@ -161,16 +160,18 @@ class btcmarkets(Exchange, ImplicitAPI):
161
160
  },
162
161
  'precisionMode': TICK_SIZE,
163
162
  'exceptions': {
164
- '3': InvalidOrder,
165
- '6': DDoSProtection,
166
- 'InsufficientFund': InsufficientFunds,
167
- 'InvalidPrice': InvalidOrder,
168
- 'InvalidAmount': InvalidOrder,
169
- 'MissingArgument': InvalidOrder,
170
- 'OrderAlreadyCancelled': InvalidOrder,
171
- 'OrderNotFound': OrderNotFound,
172
- 'OrderStatusIsFinal': InvalidOrder,
173
- 'InvalidPaginationParameter': BadRequest,
163
+ 'exact': {
164
+ 'InsufficientFund': InsufficientFunds,
165
+ 'InvalidPrice': InvalidOrder,
166
+ 'InvalidAmount': InvalidOrder,
167
+ 'MissingArgument': BadRequest,
168
+ 'OrderAlreadyCancelled': InvalidOrder,
169
+ 'OrderNotFound': OrderNotFound,
170
+ 'OrderStatusIsFinal': InvalidOrder,
171
+ 'InvalidPaginationParameter': BadRequest,
172
+ },
173
+ 'broad': {
174
+ },
174
175
  },
175
176
  'fees': {
176
177
  'percentage': True,
@@ -370,7 +371,8 @@ class btcmarkets(Exchange, ImplicitAPI):
370
371
  # "minOrderAmount":"0.00007",
371
372
  # "maxOrderAmount":"1000000",
372
373
  # "amountDecimals":"8",
373
- # "priceDecimals":"2"
374
+ # "priceDecimals":"2",
375
+ # "status": "Online"
374
376
  # }
375
377
  # ]
376
378
  #
@@ -387,6 +389,7 @@ class btcmarkets(Exchange, ImplicitAPI):
387
389
  pricePrecision = self.parse_number(self.parse_precision(self.safe_string(market, 'priceDecimals')))
388
390
  minAmount = self.safe_number(market, 'minOrderAmount')
389
391
  maxAmount = self.safe_number(market, 'maxOrderAmount')
392
+ status = self.safe_string(market, 'status')
390
393
  minPrice = None
391
394
  if quote == 'AUD':
392
395
  minPrice = pricePrecision
@@ -405,7 +408,7 @@ class btcmarkets(Exchange, ImplicitAPI):
405
408
  'swap': False,
406
409
  'future': False,
407
410
  'option': False,
408
- 'active': None,
411
+ 'active': (status == 'Online'),
409
412
  'contract': False,
410
413
  'linear': None,
411
414
  'inverse': None,
@@ -1204,18 +1207,16 @@ class btcmarkets(Exchange, ImplicitAPI):
1204
1207
  def handle_errors(self, code: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
1205
1208
  if response is None:
1206
1209
  return None # fallback to default error handler
1207
- if 'success' in response:
1208
- if not response['success']:
1209
- error = self.safe_string(response, 'errorCode')
1210
- feedback = self.id + ' ' + body
1211
- self.throw_exactly_matched_exception(self.exceptions, error, feedback)
1212
- raise ExchangeError(feedback)
1213
- # v3 api errors
1214
- if code >= 400:
1215
- errorCode = self.safe_string(response, 'code')
1216
- message = self.safe_string(response, 'message')
1210
+ #
1211
+ # {"code":"UnAuthorized","message":"invalid access token"}
1212
+ # {"code":"MarketNotFound","message":"invalid marketId"}
1213
+ #
1214
+ errorCode = self.safe_string(response, 'code')
1215
+ message = self.safe_string(response, 'message')
1216
+ if errorCode is not None:
1217
1217
  feedback = self.id + ' ' + body
1218
- self.throw_exactly_matched_exception(self.exceptions, errorCode, feedback)
1219
- self.throw_exactly_matched_exception(self.exceptions, message, feedback)
1220
- raise ExchangeError(feedback)
1218
+ self.throw_exactly_matched_exception(self.exceptions['exact'], message, feedback)
1219
+ self.throw_exactly_matched_exception(self.exceptions['exact'], errorCode, feedback)
1220
+ self.throw_broadly_matched_exception(self.exceptions['broad'], message, feedback)
1221
+ raise ExchangeError(feedback) # unknown message
1221
1222
  return None
ccxt/bybit.py CHANGED
@@ -2921,14 +2921,17 @@ class bybit(Exchange, ImplicitAPI):
2921
2921
  enableUnifiedMargin, enableUnifiedAccount = self.is_unified_enabled()
2922
2922
  isUnifiedAccount = (enableUnifiedMargin or enableUnifiedAccount)
2923
2923
  type = None
2924
- type, params = self.handle_market_type_and_params('fetchBalance', None, params)
2924
+ type, params = self.get_bybit_type('fetchBalance', None, params)
2925
2925
  isSpot = (type == 'spot')
2926
- isSwap = (type == 'swap')
2926
+ isLinear = (type == 'linear')
2927
+ isInverse = (type == 'inverse')
2927
2928
  if isUnifiedAccount:
2928
- if isSpot or isSwap:
2929
+ if isInverse:
2930
+ type = 'contract'
2931
+ else:
2929
2932
  type = 'unified'
2930
2933
  else:
2931
- if isSwap:
2934
+ if isLinear or isInverse:
2932
2935
  type = 'contract'
2933
2936
  accountTypes = self.safe_dict(self.options, 'accountsByType', {})
2934
2937
  unifiedType = self.safe_string_upper(accountTypes, type, type)
@@ -3231,7 +3234,7 @@ class bybit(Exchange, ImplicitAPI):
3231
3234
  else:
3232
3235
  feeCurrencyCode = market['base'] if market['inverse'] else market['settle']
3233
3236
  fee = {
3234
- 'cost': feeCostString,
3237
+ 'cost': self.parse_number(feeCostString),
3235
3238
  'currency': feeCurrencyCode,
3236
3239
  }
3237
3240
  clientOrderId = self.safe_string(order, 'orderLinkId')
ccxt/delta.py CHANGED
@@ -1946,7 +1946,11 @@ class delta(Exchange, ImplicitAPI):
1946
1946
  # "success":true
1947
1947
  # }
1948
1948
  #
1949
- return response
1949
+ return [
1950
+ self.safe_order({
1951
+ 'info': response,
1952
+ }),
1953
+ ]
1950
1954
 
1951
1955
  def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
1952
1956
  """
ccxt/gate.py CHANGED
@@ -640,6 +640,7 @@ class gate(Exchange, ImplicitAPI):
640
640
  'createOrder': {
641
641
  'expiration': 86400, # for conditional orders
642
642
  },
643
+ 'createMarketBuyOrderRequiresPrice': True,
643
644
  'networks': {
644
645
  'AVAXC': 'AVAX_C',
645
646
  'BEP20': 'BSC',
ccxt/hyperliquid.py CHANGED
@@ -592,7 +592,7 @@ class hyperliquid(Exchange, ImplicitAPI):
592
592
  'limits': {
593
593
  'leverage': {
594
594
  'min': None,
595
- 'max': None,
595
+ 'max': self.safe_integer(market, 'maxLeverage'),
596
596
  },
597
597
  'amount': {
598
598
  'min': None,
ccxt/lbank.py CHANGED
@@ -1416,6 +1416,27 @@ class lbank(Exchange, ImplicitAPI):
1416
1416
  # "status":-1
1417
1417
  # }
1418
1418
  #
1419
+ # cancelOrder
1420
+ #
1421
+ # {
1422
+ # "executedQty":0.0,
1423
+ # "price":0.05,
1424
+ # "origQty":100.0,
1425
+ # "tradeType":"buy",
1426
+ # "status":0
1427
+ # }
1428
+ #
1429
+ # cancelAllOrders
1430
+ #
1431
+ # {
1432
+ # "executedQty":0.00000000000000000000,
1433
+ # "orderId":"293ef71b-3e67-4962-af93-aa06990a045f",
1434
+ # "price":0.05000000000000000000,
1435
+ # "origQty":100.00000000000000000000,
1436
+ # "tradeType":"buy",
1437
+ # "status":0
1438
+ # }
1439
+ #
1419
1440
  id = self.safe_string_2(order, 'orderId', 'order_id')
1420
1441
  clientOrderId = self.safe_string_2(order, 'clientOrderId', 'custom_id')
1421
1442
  timestamp = self.safe_integer_2(order, 'time', 'create_time')
@@ -1425,7 +1446,7 @@ class lbank(Exchange, ImplicitAPI):
1425
1446
  timeInForce = None
1426
1447
  postOnly = False
1427
1448
  type = 'limit'
1428
- rawType = self.safe_string(order, 'type') # buy, sell, buy_market, sell_market, buy_maker,sell_maker,buy_ioc,sell_ioc, buy_fok, sell_fok
1449
+ rawType = self.safe_string_2(order, 'type', 'tradeType') # buy, sell, buy_market, sell_market, buy_maker,sell_maker,buy_ioc,sell_ioc, buy_fok, sell_fok
1429
1450
  parts = rawType.split('_')
1430
1451
  side = self.safe_string(parts, 0)
1431
1452
  typePart = self.safe_string(parts, 1) # market, maker, ioc, fok or None(limit)
@@ -1759,12 +1780,12 @@ class lbank(Exchange, ImplicitAPI):
1759
1780
  # "origQty":100.0,
1760
1781
  # "tradeType":"buy",
1761
1782
  # "status":0
1762
- # },
1783
+ # },
1763
1784
  # "error_code":0,
1764
1785
  # "ts":1648501286196
1765
1786
  # }
1766
- result = self.safe_value(response, 'data', {})
1767
- return result
1787
+ data = self.safe_dict(response, 'data', {})
1788
+ return self.parse_order(data)
1768
1789
 
1769
1790
  def cancel_all_orders(self, symbol: Str = None, params={}):
1770
1791
  """
@@ -1799,8 +1820,8 @@ class lbank(Exchange, ImplicitAPI):
1799
1820
  # "ts":1648506641469
1800
1821
  # }
1801
1822
  #
1802
- result = self.safe_value(response, 'data', [])
1803
- return result
1823
+ data = self.safe_list(response, 'data', [])
1824
+ return self.parse_orders(data)
1804
1825
 
1805
1826
  def get_network_code_for_currency(self, currencyCode, params):
1806
1827
  defaultNetworks = self.safe_value(self.options, 'defaultNetworks')
ccxt/pro/__init__.py CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  # ----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.3.55'
7
+ __version__ = '4.3.56'
8
8
 
9
9
  # ----------------------------------------------------------------------------
10
10
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ccxt
3
- Version: 4.3.55
3
+ Version: 4.3.56
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
@@ -71,8 +71,6 @@ Current feature list:
71
71
 
72
72
  ## Sponsored Promotion
73
73
 
74
- [![Trade derivatives in June with BitMEX](https://github.com/ccxt/ccxt/assets/1294454/94c3d456-fdf5-4d62-8178-a42e3999e29e)](https://www.bitmex.com/app/register/NZTR1q)
75
-
76
74
  ## See Also
77
75
 
78
76
  - <sub>[![TabTrader](https://user-images.githubusercontent.com/1294454/66755907-9c3e8880-eea1-11e9-846e-0bff349ceb87.png)](https://tab-trader.com/?utm_source=ccxt)</sub> **[TabTrader](https://tab-trader.com/?utm_source=ccxt)** – trading on all exchanges in one app. Available on **[Android](https://play.google.com/store/apps/details?id=com.tabtrader.android&referrer=utm_source%3Dccxt)** and **[iOS](https://itunes.apple.com/app/apple-store/id1095716562?mt=8)**!
@@ -270,13 +268,13 @@ console.log(version, Object.keys(exchanges));
270
268
 
271
269
  All-in-one browser bundle (dependencies included), served from a CDN of your choice:
272
270
 
273
- * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.3.55/dist/ccxt.browser.min.js
274
- * unpkg: https://unpkg.com/ccxt@4.3.55/dist/ccxt.browser.min.js
271
+ * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.3.56/dist/ccxt.browser.min.js
272
+ * unpkg: https://unpkg.com/ccxt@4.3.56/dist/ccxt.browser.min.js
275
273
 
276
274
  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
275
 
278
276
  ```HTML
279
- <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.3.55/dist/ccxt.browser.min.js"></script>
277
+ <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.3.56/dist/ccxt.browser.min.js"></script>
280
278
  ```
281
279
 
282
280
  Creates a global `ccxt` object:
@@ -1,14 +1,14 @@
1
- ccxt/__init__.py,sha256=2eiK5AmvQNHGe7eJdsIdThpAhiTo8DmKjDuOynaoExQ,16236
1
+ ccxt/__init__.py,sha256=e19B_MWkPqqUP6DO56U6QJMqj3rbGgsPbrcbGrYeris,16236
2
2
  ccxt/ace.py,sha256=as3MdzaTeU3DZU9AdCJMb6m7oOlwPThoCcaGezMA2oA,41674
3
3
  ccxt/alpaca.py,sha256=0a7EdCZHvyRapkoI6obaUJBkFxDQJ5Vet5M6A1QmFGU,47325
4
4
  ccxt/ascendex.py,sha256=4aEwibO_me6khr66z8JFqDBxe2gtFOWIFBE7ulBEJPs,151933
5
5
  ccxt/bequant.py,sha256=RBiAmaTbL35DgiV3Hl6uchLUd78V0z1T9riTlNsrpdc,1174
6
6
  ccxt/bigone.py,sha256=yJ8Defzc8EObAeoa7882MASXxD4bK8Gal6Xj4b5n37k,92434
7
- ccxt/binance.py,sha256=W6Qyz4olw5W-3abcaXHU6dlMHwZDjz1CS8O-GWWP0Qk,629407
7
+ ccxt/binance.py,sha256=vuamBl7h8Gs4CVudPnf88RmX-elVG9BG5g3SBvEaa9Q,629421
8
8
  ccxt/binancecoinm.py,sha256=arFnEh8mErSyi23eVPWE4iwoT7PWQyxGGVJCKCy6UJY,1702
9
9
  ccxt/binanceus.py,sha256=hdcT4OnadcdFFFjF3GtM0nWv90jqojqwdVS3xWGuW40,9163
10
10
  ccxt/binanceusdm.py,sha256=bAPcJj5HLxoCdPolriM8sJpoTBwbV78vBTbKRmWhNP4,2632
11
- ccxt/bingx.py,sha256=nLaQdd5MkE8YDATMhbosYE30XoONYMPVzHQ9a97vq8Q,188741
11
+ ccxt/bingx.py,sha256=EFmLX2N-76vklYQjM-TGllN8btM40ObtJJOPWmXtUEM,190158
12
12
  ccxt/bit2c.py,sha256=KwHefm2dfgcSR5LeGbHpFQlSI3LNot8tmDEgRJc2gBc,37061
13
13
  ccxt/bitbank.py,sha256=bHLOW6EAbNsjK2nXCtmxj23f2geW_-E_xfHXAvARMtw,43534
14
14
  ccxt/bitbay.py,sha256=xAIjzGRDVGwoy-Gygd99H0YN4wiaz_0lR0Z14oxaaxc,478
@@ -16,12 +16,12 @@ ccxt/bitbns.py,sha256=BxvljEPDCGPnaFGaWIIPF_xs079B2OnnbGWNfYlraHE,48269
16
16
  ccxt/bitcoincom.py,sha256=PyWIl4nC4jp5Uba2lI1At0N_hhNyWD0DoZC_MSyL_s4,502
17
17
  ccxt/bitfinex.py,sha256=kCRsPTyeQrerA0EGp445B3LQR0U_ScthuuGa2sAYIW0,72449
18
18
  ccxt/bitfinex2.py,sha256=xljaXYKVS0vzWIeaWH8g5h-4-NkQnYMUB0Iu9SD2F1s,160640
19
- ccxt/bitflyer.py,sha256=CO-Lxnng73eJAgYWhD1JVis0inMz-8KIzDxMW9yugEk,41564
19
+ ccxt/bitflyer.py,sha256=biQ8-J_HSb9_S6HE1LBDd6BGpIZSMxK5JyTZ3Xg1SdI,41683
20
20
  ccxt/bitget.py,sha256=ZKnoaX5wbKzU2C9T-cOtYYy45wAVxwTHee8J-LLjVvI,423551
21
21
  ccxt/bithumb.py,sha256=Fo9NyJKahYfn-_05-zIzSXb9-CxOMw-M1Vb9mSUjS0A,45847
22
22
  ccxt/bitmart.py,sha256=TtLl4zpmxvMRu9tu_BE0zsQFNFVpyR6PLUHoeaSfbek,208411
23
23
  ccxt/bitmex.py,sha256=oOFatIOxvXIPOdOeeVau-IdryOeYpdCtTPGxX05HA9A,126861
24
- ccxt/bitopro.py,sha256=K8CpxHKtL1O6ftD6RwcDkJLfC3f05-R0Mb1gN6lnT4U,68742
24
+ ccxt/bitopro.py,sha256=0m104rrKQXuXa3dThHGgqq0leIIcdN_nQTR3a9YJLLM,69322
25
25
  ccxt/bitpanda.py,sha256=aiwPkx9lKbVzt4ggoYdq_mIbMGtg5ZtGl2yRHO5xyz8,471
26
26
  ccxt/bitrue.py,sha256=fHWfPafQ8P7aWQNvKpVwA6GEeXctrT8dxpf9uzIGUCU,136649
27
27
  ccxt/bitso.py,sha256=Y0MRhrBpxwmkQqZGe8w33DLpZB6Az2PNPuoW23RDC40,71438
@@ -33,9 +33,9 @@ ccxt/blockchaincom.py,sha256=hUYegjsT8e-eMRoEUH45l3916HgW00mJh_AOkwxNCCE,48795
33
33
  ccxt/blofin.py,sha256=-vzzUV1aMOQpBOZTLPnEbaabc7Cek6oOItlVvRsQu_o,99499
34
34
  ccxt/btcalpha.py,sha256=UcCCDZ_7EM-Q2tHU1IQPEA2DErFsLhrSfX-Oy-Q2uL4,36715
35
35
  ccxt/btcbox.py,sha256=4j3yXT2PxnBE23185MgwMWccm9OsFgbBRAg1YuxuwBA,23587
36
- ccxt/btcmarkets.py,sha256=X_Sm-lRQOAvAHbWRdhTAfFNWvG_WSfWU-CbL8HzraEk,52631
36
+ ccxt/btcmarkets.py,sha256=0gMC0vvmuDJwcnllHMUZsQRV6QWA1-Cbq1N1F9rIUW8,52697
37
37
  ccxt/btcturk.py,sha256=bQ8sJq5iEj9oq2R17uDadPWKcnIQG8id5UmdlpHfFy8,36992
38
- ccxt/bybit.py,sha256=Tn7locC3YWcB0qemVgS_eRHxDr00tZLA3jSdEx0f0Nk,414953
38
+ ccxt/bybit.py,sha256=1uidBWrfElJS3cv3waW3UcGYO8p1CklxQJuV3pWqwzg,415061
39
39
  ccxt/cex.py,sha256=71EK1bB4ulMH-GY-SwsOrY5R33qcsJejtSUBtcyhSdE,70084
40
40
  ccxt/coinbase.py,sha256=OLcnNdnOxnbTY54BEvptJCysDBU3ZZGw6eJcHalaFFc,217105
41
41
  ccxt/coinbaseadvanced.py,sha256=d5g6nRx-NCcCwZDdtp8FsI2D-pRjSvnAP9ISSKY_nCQ,538
@@ -51,12 +51,12 @@ ccxt/coinsph.py,sha256=kyTXZGOtQ-8uz52LqzN4Gt89S-qL91JfyA68htNLJr0,90858
51
51
  ccxt/coinspot.py,sha256=-9oRdHdc6iWrkxXxcVF9zBashNcRJSoFORwHRa9scMc,23876
52
52
  ccxt/cryptocom.py,sha256=On1dv9dS1_0cyEmyQIDBip-bLiTeQlsjmGVy_RV2qtE,130043
53
53
  ccxt/currencycom.py,sha256=1VrbHSrzDkf0VnzhEQLLGJPRF2LDtOq_gsj-4ZwT3ZY,87046
54
- ccxt/delta.py,sha256=AkpN7-ElTxfGomNh4OdjNqk7LkmgEAS3Mu1mNx9eZkQ,150749
54
+ ccxt/delta.py,sha256=2DotO5rmhl2JkaUyM13N4WR3jAqKBMlaZ4Wlv2tDBg0,150832
55
55
  ccxt/deribit.py,sha256=n6Folkmf6Z47XL7RBII8665NWilgDqsaBm46FDaIhcY,161016
56
56
  ccxt/digifinex.py,sha256=2fnkjz1eWP_Wjj0FOSPRcJ_hoQOy7zgLWZjFuCNOCUw,168477
57
57
  ccxt/exmo.py,sha256=KlQqGZey31br-SVwhQg6mWIESyeM_wiIKRDOzIekuSs,114638
58
58
  ccxt/fmfwio.py,sha256=RbVLvzPwnqfDsE7Ea-N13ISCC82eJVPsXYjrleASmew,1236
59
- ccxt/gate.py,sha256=JIXkRb1pgmRw0v7QCLb5NeyrrLKAQUzshLjCJ8djNvg,322765
59
+ ccxt/gate.py,sha256=VxIjYqUs-rHgGReSOGg7PR8Dy4Ysj-piI7w7mGaW-bM,322824
60
60
  ccxt/gateio.py,sha256=86AETJWODl_vA5VNeQRHZprmpNIY1HAxCddKZcnKSi8,445
61
61
  ccxt/gemini.py,sha256=6dMbdLFa4GFjhvXprqj8kugg2Bclh5EuZ8FxZSK-zpQ,80837
62
62
  ccxt/hitbtc.py,sha256=iqyd0otbWmIHUJiJ6gzIfe34IOa8PCEeS8nG6s6Ogc0,153398
@@ -65,7 +65,7 @@ ccxt/hollaex.py,sha256=2KIbenZ3vcBDN_rs2CxG5_foKLaYxJd73vVV7M8n_8E,76140
65
65
  ccxt/htx.py,sha256=SxHRlX2QyXt_w1nMBXMnHPQtRfCG9Mqx_HTM82TU43M,425183
66
66
  ccxt/huobi.py,sha256=4vaG7IRN7fyjaJ_ac6S-njlHOfSEN5de7aq0noznxYw,438
67
67
  ccxt/huobijp.py,sha256=7KxT6RhlnOiVcqaUuFJR40fMT88ZQzOJ1kdZ2ODDOjg,88182
68
- ccxt/hyperliquid.py,sha256=mS6M_T1GAxqtte_aLazQcdSssRQ7CJyeX8zYiYTOQBs,102637
68
+ ccxt/hyperliquid.py,sha256=hphleFSojYaz0raCABmnos5GAhvfBJpcJl5GPLQZRbY,102673
69
69
  ccxt/idex.py,sha256=P2jNsxiwIlMgrfPKbtmjLJQrzFcWp_TjgJaLq793oco,73255
70
70
  ccxt/independentreserve.py,sha256=aGmNqAGhAKThkMOT-CW6M97JME-7oSar-G2eBZ9QGZE,33489
71
71
  ccxt/indodax.py,sha256=rFfAwlYalCXdHQvhjmb7Zt4fGYqjoPv_koL21CBv-O8,53431
@@ -75,7 +75,7 @@ ccxt/kucoin.py,sha256=7qDg7nnhUt6xbPQ3ouXk7GutSXDzhNWK1g29ilXXAlY,225988
75
75
  ccxt/kucoinfutures.py,sha256=Mn9eflwmD_FmTCHYkRvyfxG3SU3Pgv9Hpj-6umYT3h8,124558
76
76
  ccxt/kuna.py,sha256=xkPCqoFB64f7mWNcXhhX4RrHzOtDGqOMMQ9gz7o0lcY,96187
77
77
  ccxt/latoken.py,sha256=rLmJYMLZxKowQnrnBV4FFwJvi5cVvMDRj4SC82nh0pE,79392
78
- ccxt/lbank.py,sha256=OvkIcStjT_MeYy9rll-Xw6Ah890j4T_eV1QpI0rYDsg,115406
78
+ ccxt/lbank.py,sha256=Glx9CN_jdQMiUngJLYioxzwDfgFTdusdOfK53_Bg6A8,116045
79
79
  ccxt/luno.py,sha256=mJqzQFX-DneQ6Wo0Dqfc7sG0OVmaPSKAkmRs1pM7Yj8,46191
80
80
  ccxt/lykke.py,sha256=RqjZ8TXHN_Bok2gXNsJX5jgMDb7GqMbpPPqBMHiLb0E,51408
81
81
  ccxt/mercado.py,sha256=SYh5_TQF4TwsoJjITFiwLPo9VKHmx3Q9I79SPtQajX8,35470
@@ -117,7 +117,7 @@ ccxt/abstract/binance.py,sha256=7wM257-q5tvZkqJLTeJy7xawGN05FGQ2JeamuGkKKck,9306
117
117
  ccxt/abstract/binancecoinm.py,sha256=7wM257-q5tvZkqJLTeJy7xawGN05FGQ2JeamuGkKKck,93066
118
118
  ccxt/abstract/binanceus.py,sha256=mnsyS9y9D5UrO7QrfNz0MHfzE39zKDxc4yHOfZPgydw,99786
119
119
  ccxt/abstract/binanceusdm.py,sha256=7wM257-q5tvZkqJLTeJy7xawGN05FGQ2JeamuGkKKck,93066
120
- ccxt/abstract/bingx.py,sha256=-Aepusv-LrrUAwLjJBhtbQBcFJzn4Blo_u8Sa09Re9o,17110
120
+ ccxt/abstract/bingx.py,sha256=LxRViS_3uHrlnpcmancoCc49mqAv4brn4r5IzjKbyzY,19546
121
121
  ccxt/abstract/bit2c.py,sha256=np6i756kSB5dO3Nj6POLKxkWkpYcsGg-4LS8BwPrizI,2830
122
122
  ccxt/abstract/bitbank.py,sha256=hrHsD7Uvtyy2o2lzCHau3-eNq16pnZ3-YDQ6Tq_sxYU,2735
123
123
  ccxt/abstract/bitbay.py,sha256=X-hCW0SdX3YKZWixDyW-O2211M58Rno8kKJ6quY7rw4,7183
@@ -216,17 +216,17 @@ ccxt/abstract/xt.py,sha256=xHHv2viFGK0_iPZ4gu6Wb0aOrpcKhr9zoY-BIPWh5bs,27028
216
216
  ccxt/abstract/yobit.py,sha256=8ycfCO8ORFly9hc0Aa47sZyX4_ZKPXS9h9yJzI-uQ7Q,1339
217
217
  ccxt/abstract/zaif.py,sha256=m15WHdl3gYy0GOXNZ8NEH8eE7sVh8c0T_ITNuU8vXeU,3935
218
218
  ccxt/abstract/zonda.py,sha256=X-hCW0SdX3YKZWixDyW-O2211M58Rno8kKJ6quY7rw4,7183
219
- ccxt/async_support/__init__.py,sha256=RvMDwjsjOLmQEjFgBSEz0XQm_uVRf3E75fNhT91f260,16039
219
+ ccxt/async_support/__init__.py,sha256=c-eci1b8oKVXQGzaFwnaYvo9Y07eOm9KM1_93Xms4G8,16039
220
220
  ccxt/async_support/ace.py,sha256=DkgKo6nZy3tv6j92mIkzhy9uDXQZt-jZ5iyEeeYoLwo,41898
221
221
  ccxt/async_support/alpaca.py,sha256=a_OZIimQ-RblwXK_auxRrA1sZZhPl2UMLk3_CoEvDkA,47537
222
222
  ccxt/async_support/ascendex.py,sha256=LK259BdUqU0_STGRH6DmTgaR-7lXqFpZHFVACf2um5c,152721
223
223
  ccxt/async_support/bequant.py,sha256=1hTwHovo1bW1XTIc8ZKjvJ-Xg6LfmpGdzT7TepykaVM,1188
224
224
  ccxt/async_support/bigone.py,sha256=npKU8z85dcv6B1JNz5e1I4i-srur_gxJcMUl4yLaHoU,92888
225
- ccxt/async_support/binance.py,sha256=8oigybiu0U_JRVek0rZ0ITkNs5guUuhE8icTjk_AIzk,632123
225
+ ccxt/async_support/binance.py,sha256=Vop1XLBoCTy_-7YwfFH4R4hV8m2CiNMRxzAXwYPPgYk,632137
226
226
  ccxt/async_support/binancecoinm.py,sha256=yeE73xG5UXD_X3VPul6DMGnV_mgJfWYskpas1BUDdCU,1740
227
227
  ccxt/async_support/binanceus.py,sha256=c-K3Tk7LaRJjmYdCx8vBOqsx01uXrtvt0PC2ekBiD0g,9177
228
228
  ccxt/async_support/binanceusdm.py,sha256=8ugRkx7vyYmn67wdkEEf2f-DFMGAoC4t09usKlPVNyw,2670
229
- ccxt/async_support/bingx.py,sha256=0ggL1z7Jmdz_dJ3FoRoRpvsdQt--FQx8inP1BJ3sQFE,189777
229
+ ccxt/async_support/bingx.py,sha256=_F4UqdwmDGH3bESMCYw7JYERqm3tSudRZ2mOMyFd4tg,191194
230
230
  ccxt/async_support/bit2c.py,sha256=1s8GGFqdk9FHfG6-fCmJGePppIpHDHZkjN7u6gPekP8,37273
231
231
  ccxt/async_support/bitbank.py,sha256=To1wSMT8i2bVRZABSXIuB2pyeLhmKkE6CHP4i9LMQQU,43794
232
232
  ccxt/async_support/bitbay.py,sha256=jcaEXi2IhYTva8ezO_SfJhwxEZk7HST4J3NaxD16BQA,492
@@ -234,12 +234,12 @@ ccxt/async_support/bitbns.py,sha256=-z6MBwHpn0FXwfKffbOXSdZD2ZYEepMz1VU2ii84xN0,
234
234
  ccxt/async_support/bitcoincom.py,sha256=RiqwhK3RfxQ_PXTa860fphDCvwA8dalL-_rXlK85-8A,516
235
235
  ccxt/async_support/bitfinex.py,sha256=B8nxACqMxUcmuekpMWtbrOA01lqoc9jneZO_mNLkizI,72889
236
236
  ccxt/async_support/bitfinex2.py,sha256=r_hyChSP4OVNjoqQkjtZSZ-BNT7Cup7Mj1ICwvajrEc,161374
237
- ccxt/async_support/bitflyer.py,sha256=Q0Vm2iuzQ27wmShRArSKIRAbFd6KCdHVLewOp507n7w,41872
237
+ ccxt/async_support/bitflyer.py,sha256=hIrGMxaM78V1i-gHN2FRFAhI2aaLR21mPAoIE33fW70,41991
238
238
  ccxt/async_support/bitget.py,sha256=-lEr0HXKo9J4rZwunIHk-yBwTsFVVYY3xHkSYOKc3Fo,425175
239
239
  ccxt/async_support/bithumb.py,sha256=oBk763YnXA9hsF1TCXAqWmIpd3hNGHuvFLk9HeNn10E,46077
240
240
  ccxt/async_support/bitmart.py,sha256=P7s4Obn75lcb-cUOJZkpq6rDcDZVZvKjTT5w_qe5Sfg,209367
241
241
  ccxt/async_support/bitmex.py,sha256=qSKH_dXDtpY5BUrLUbESI3a3WQhBFrc1ucv1N5GDuIU,127439
242
- ccxt/async_support/bitopro.py,sha256=MF6GoWEueWzkk7sqJ7_-bdk4LXk7A-N7wyv8BIv0p6M,69146
242
+ ccxt/async_support/bitopro.py,sha256=HHESL0hiE0Rc0GRhFeIKnTs-eBzHEtOqqECANTSp0e0,69726
243
243
  ccxt/async_support/bitpanda.py,sha256=2k3URBWrpnh2xHa7JiYenI7_4MW5UeOPGzetlmRkR4U,485
244
244
  ccxt/async_support/bitrue.py,sha256=v8yJ8XYqHyfS55YcQ6nADI6WaAxfGrEi_6NwVTM5SI4,137307
245
245
  ccxt/async_support/bitso.py,sha256=knxb3DRVjWTn_WsXb4HSAe_2nCDiJE3BKki6QvJP9t8,71824
@@ -251,9 +251,9 @@ ccxt/async_support/blockchaincom.py,sha256=h5LUIfI916FbTANFanqUKYpK35aRkIsFSEPkZ
251
251
  ccxt/async_support/blofin.py,sha256=Buo3UD9XrsK2g3RoagTIA9Si0SJOu6o6-9FiqKuqfDs,100083
252
252
  ccxt/async_support/btcalpha.py,sha256=DgzrJ6cczUCDZr-QLUxMpazeudEFdQ_OzXiQiJM4HbM,36993
253
253
  ccxt/async_support/btcbox.py,sha256=34KcTfJ7liDTomyJKA9kZa9EHd0rMtHyUgOAhHHfV7g,23781
254
- ccxt/async_support/btcmarkets.py,sha256=wOT21-nN9P2Rgy_3Wq8tpys5C1BpRfmF3VCljC2lmi4,52981
254
+ ccxt/async_support/btcmarkets.py,sha256=x1-s5uVioHyvNJoBxhxP8eUUslTDwQnZMU0FWfu1Fd4,53047
255
255
  ccxt/async_support/btcturk.py,sha256=P3bg0XG0sAi-8ge9ZFzQqZHsoGOGfxBjkhIDo4VPSK4,37210
256
- ccxt/async_support/bybit.py,sha256=YsM9ETE6dRE6ZG-kBta5iq7YOm9YblRqQhgAWJkahws,416781
256
+ ccxt/async_support/bybit.py,sha256=tuR97AA6a9PM0uHVQwYqWK1YPWgqzW5p2t1lUFC9xwU,416889
257
257
  ccxt/async_support/cex.py,sha256=GbzByJZPS_puV7somv9XgbyE2DEK03OtXWlLg2lFmCw,70434
258
258
  ccxt/async_support/coinbase.py,sha256=RMcQFh7tSzTe8QqFaz9WmH2Op8sXD8jWpZfLBt_13QQ,218259
259
259
  ccxt/async_support/coinbaseadvanced.py,sha256=Kupwnuxiu_qTjwCNV2asacoDUNFQvcaHNAznUJPhdQs,552
@@ -269,12 +269,12 @@ ccxt/async_support/coinsph.py,sha256=8BKDibWuUgmbA589V3co-RsabjCq4T7sYV6_p0w39_0
269
269
  ccxt/async_support/coinspot.py,sha256=54ogK4qq8RNEnUIR17lpbGPIR9Ed1SXlDtxSKoxi1uQ,24034
270
270
  ccxt/async_support/cryptocom.py,sha256=QhxHap0FFVDIRjPed2SFFOmFP2XbqLjctjK6MU11nCc,130615
271
271
  ccxt/async_support/currencycom.py,sha256=BRWAn5uBDcwR-1SyjJCSwkS83T_5tfUmCDymr9ZHFEs,87468
272
- ccxt/async_support/delta.py,sha256=Dzzf1luU35SaEYK7THwE_JKVn2D3box5eecQMBWDlQQ,151357
272
+ ccxt/async_support/delta.py,sha256=aUIysAyPQgS3XV_T41R3HEPAB2xKCG5mF1UXQ-bS1K0,151440
273
273
  ccxt/async_support/deribit.py,sha256=_Q2LcEW01ktuz2BKeFQRlsP5GDjC1XJFCjWKoqTdM5Y,161792
274
274
  ccxt/async_support/digifinex.py,sha256=YHL4lB4a07Kic2MRljzTiG5Oth0g1n4h0lfGn9qKvhk,169447
275
275
  ccxt/async_support/exmo.py,sha256=uVJsy3mfNLpfbY0ndl2EF9hipUylEw8J58J3wCGyyA0,115270
276
276
  ccxt/async_support/fmfwio.py,sha256=lzfSnPrB2ARcC3EIqAuBM4vyg6LJ6n8RE71Zvt3ez1s,1250
277
- ccxt/async_support/gate.py,sha256=Jy0PJoPIQofeRfihF1SqtqGZPK1H4c7kslcewNdBxGQ,324443
277
+ ccxt/async_support/gate.py,sha256=czec_NC7NYUFacBb8fp3_ei7cSbNq1xw1LS2gV5SLZc,324502
278
278
  ccxt/async_support/gateio.py,sha256=6_t032F9p9x5KGTjtSuqGXITzFOx-XAQBYLpsuQjzxw,459
279
279
  ccxt/async_support/gemini.py,sha256=197OkPq1ndBA27J3fKqFY3iMJ_8W-Iu6Af0wNGqvO7I,81350
280
280
  ccxt/async_support/hitbtc.py,sha256=jWmyRAy_wkpEidgjCxU0gWur99YJjYHPjD9CN4vJbUE,154444
@@ -283,7 +283,7 @@ ccxt/async_support/hollaex.py,sha256=msUnnbWLNeCxFW77BnfLoFWBdvQIDwV7Rtbi9TA4TYY
283
283
  ccxt/async_support/htx.py,sha256=fZEC1TA827-NgXLMnEE3LPyc_JWMym6jVyYfE3zMHbQ,427575
284
284
  ccxt/async_support/huobi.py,sha256=fup0j6wQ1khAtfbb1H4CSyJAOzhxuoHMmrM6sgTuhr8,452
285
285
  ccxt/async_support/huobijp.py,sha256=qsmTSeLuexvi1_wXvbC-dD14CCDn9xAfQu_nbXknUTY,88682
286
- ccxt/async_support/hyperliquid.py,sha256=ndb88KD_6v80u7pt0v6ieBFJaZtjtllxlKUbDjmF0Jc,103157
286
+ ccxt/async_support/hyperliquid.py,sha256=78zRnwQ4ct5tT0mGppWVy6K1eKlxWU_6bsPU__iz2ao,103193
287
287
  ccxt/async_support/idex.py,sha256=UcAvdMc2CP_6E8lET4rmQiIP-RaUfZHSo6pQeA17v-g,73731
288
288
  ccxt/async_support/independentreserve.py,sha256=6da0B8N4rNrd1CjxjtYU-mHpmemIBexXrKAB2r4SVPc,33749
289
289
  ccxt/async_support/indodax.py,sha256=m6F8bSiEz9c6UQuadeOfC40rnmlAVKkj94C1uvsc9k0,53739
@@ -293,7 +293,7 @@ ccxt/async_support/kucoin.py,sha256=h46uaxi5SBk_-1UvZFjaStIEnxZibMPfd3vyAdxwPoM,
293
293
  ccxt/async_support/kucoinfutures.py,sha256=uy8gNsJOI6SggxhYMH1TSTFM6rlzWvLknZL_KgCDLBE,125196
294
294
  ccxt/async_support/kuna.py,sha256=7PMrbVQaW0OHC3MnKjmepZjuJ86LpdSKMFMXJM4L1dQ,96603
295
295
  ccxt/async_support/latoken.py,sha256=PxdWq1e4vKiTHwTUy6vXpJzRf1465Z4L8nTSpo1KRi0,79868
296
- ccxt/async_support/lbank.py,sha256=AWkfyq-GV_yNsz5AD70d2sIYM__dj3ht1x0OBZxY1Ps,116118
296
+ ccxt/async_support/lbank.py,sha256=MeqPjECSmsplCtatu7Ns6sHRwzAGP_6S5MwB2BomnXk,116757
297
297
  ccxt/async_support/luno.py,sha256=F4t6XgboOe688S6bZCEnaF_ZEh_6f1YTqV6wRaddWo0,46529
298
298
  ccxt/async_support/lykke.py,sha256=UXQmNfWucuylickY0EBbrkahAoU-68B7k1B-EBNpC00,51722
299
299
  ccxt/async_support/mercado.py,sha256=jcYNU9OUHVYW8XgWsuv9EeCVvleNErOCas99X5lD-tk,35712
@@ -326,7 +326,7 @@ ccxt/async_support/yobit.py,sha256=4Wwy8piYAfsxnldU2LRXk986I4kY5mlzhxxeuIJg0fc,5
326
326
  ccxt/async_support/zaif.py,sha256=-ZTr8M2JaIRCL90VrbCDXBMAsZwbiwsFChSQ2rWODuQ,29044
327
327
  ccxt/async_support/zonda.py,sha256=ef9Ch_ESnBldY8zHlqsff6hzU_pU8bdvUbWNLpFvUBM,81720
328
328
  ccxt/async_support/base/__init__.py,sha256=aVYSsFi--b4InRs9zDN_wtCpj8odosAB726JdUHavrk,67
329
- ccxt/async_support/base/exchange.py,sha256=eyRh04100m9FmIaYrf6qS49CB__okmNGvDcCPsoEzR4,109872
329
+ ccxt/async_support/base/exchange.py,sha256=XlYFiELNZaySpKc1kw2D10k3d0PSR_uH9ZRGCDWXU6Y,110787
330
330
  ccxt/async_support/base/throttler.py,sha256=tvDVcdRUVYi8fZRlEcnqtgzcgB_KMUMRs5Pu8tuU-tU,1847
331
331
  ccxt/async_support/base/ws/__init__.py,sha256=uockzpLuwntKGZbs5EOWFe-Zg-k6Cj7GhNJLc_RX0so,1791
332
332
  ccxt/async_support/base/ws/aiohttp_client.py,sha256=5IEiT0elWI9a7Vr-KV0jgmlbpLJWBzIlrLaCkTKGaqY,5752
@@ -340,10 +340,10 @@ ccxt/async_support/base/ws/order_book_side.py,sha256=GhnGUt78pJ-AYL_Dq9produGjmB
340
340
  ccxt/base/__init__.py,sha256=eTx1OE3HJjspFUQjGm6LBhaQiMKJnXjkdP-JUXknyQ0,1320
341
341
  ccxt/base/decimal_to_precision.py,sha256=fgWRBzRTtsf3r2INyS4f7WHlzgjB5YM1ekiwqD21aac,6634
342
342
  ccxt/base/errors.py,sha256=FGdyULeNCNcl52gA_CNhe2dZmat9GJGkTdlIyDXAF_A,4213
343
- ccxt/base/exchange.py,sha256=Sap-s-fXJHVRwqR5TsJL6HnddQPutfu3DAoWahFce9k,280900
343
+ ccxt/base/exchange.py,sha256=ZKxFjxq7S_lAmMEMFO92uK1LZeK6JlqG6c2fZgBKo-U,281804
344
344
  ccxt/base/precise.py,sha256=koce64Yrp6vFbGijJtUt-QQ6XhJgeGTCksZ871FPp_A,8886
345
345
  ccxt/base/types.py,sha256=JfD1eNzfKS06XwwLUobK9d2SfVGRqbVfMY0ApU-Hn9A,9349
346
- ccxt/pro/__init__.py,sha256=Y556ToeaUm7pUjFJt1QPc733EfJ8BC61JqBetzIEynA,7308
346
+ ccxt/pro/__init__.py,sha256=-tOAM6g193Ziq2Gj8d7POVNP7yjEinAJZaOVceTwbEY,7308
347
347
  ccxt/pro/alpaca.py,sha256=QA_Dmxu1ockCSYJMbOodbNke3t1tAl0hFL-q56UMQWE,27224
348
348
  ccxt/pro/ascendex.py,sha256=181FIeztchLqGmgecRJEN8F8xEM45D5aMKhC-5nuNfU,35467
349
349
  ccxt/pro/bequant.py,sha256=5zbsP8BHQTUZ8ZNL6uaACxDbUClgkOV4SYfXT_LfQVg,1351
@@ -513,8 +513,8 @@ ccxt/test/tests_async.py,sha256=A7x_JRK--w7Yin1laqoKmfdrAxu9ebjPVNzMRUFau-Y,8091
513
513
  ccxt/test/tests_helpers.py,sha256=V0cdMs_YOgSJ-oKTemutiTAG6y_0pdMasnuF7_xHsBg,9688
514
514
  ccxt/test/tests_init.py,sha256=gH_brb5irCCBXOIL09xjoQIRV2852lhV_PxnZpIhPUc,992
515
515
  ccxt/test/tests_sync.py,sha256=bNkfdsbLylzSQITtJ_j0qw_aItx218c95bK35tr1qpM,80018
516
- ccxt-4.3.55.dist-info/LICENSE.txt,sha256=EIb9221AhMHV7xF1_55STFdKTFsnJVJYkRpY2Lnvo5w,1068
517
- ccxt-4.3.55.dist-info/METADATA,sha256=K_gGifVJEOIXzMuIOzb4WeZVMpyQ6GJKQpG8n1gsfJI,115965
518
- ccxt-4.3.55.dist-info/WHEEL,sha256=z9j0xAa_JmUKMpmz72K0ZGALSM_n-wQVmGbleXx2VHg,110
519
- ccxt-4.3.55.dist-info/top_level.txt,sha256=CkQDuCTDKNcImPV60t36G6MdYfxsAPNiSaEwifVoVMo,5
520
- ccxt-4.3.55.dist-info/RECORD,,
516
+ ccxt-4.3.56.dist-info/LICENSE.txt,sha256=EIb9221AhMHV7xF1_55STFdKTFsnJVJYkRpY2Lnvo5w,1068
517
+ ccxt-4.3.56.dist-info/METADATA,sha256=fNiNu1p6TLWHOx_E9tbXJgUxde03y8J4gVJ-GHRH6Fc,115795
518
+ ccxt-4.3.56.dist-info/WHEEL,sha256=z9j0xAa_JmUKMpmz72K0ZGALSM_n-wQVmGbleXx2VHg,110
519
+ ccxt-4.3.56.dist-info/top_level.txt,sha256=CkQDuCTDKNcImPV60t36G6MdYfxsAPNiSaEwifVoVMo,5
520
+ ccxt-4.3.56.dist-info/RECORD,,
File without changes