ccxt 4.3.14__py2.py3-none-any.whl → 4.3.15__py2.py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
ccxt/__init__.py CHANGED
@@ -22,7 +22,7 @@
22
22
 
23
23
  # ----------------------------------------------------------------------------
24
24
 
25
- __version__ = '4.3.14'
25
+ __version__ = '4.3.15'
26
26
 
27
27
  # ----------------------------------------------------------------------------
28
28
 
@@ -53,6 +53,7 @@ from ccxt.base.errors import BadSymbol # noqa: F4
53
53
  from ccxt.base.errors import OperationRejected # noqa: F401
54
54
  from ccxt.base.errors import NoChange # noqa: F401
55
55
  from ccxt.base.errors import MarginModeAlreadySet # noqa: F401
56
+ from ccxt.base.errors import MarketClosed # noqa: F401
56
57
  from ccxt.base.errors import BadResponse # noqa: F401
57
58
  from ccxt.base.errors import NullResponse # noqa: F401
58
59
  from ccxt.base.errors import InsufficientFunds # noqa: F401
ccxt/abstract/luno.py CHANGED
@@ -31,5 +31,7 @@ class ImplicitAPI:
31
31
  private_post_withdrawals = privatePostWithdrawals = Entry('withdrawals', 'private', 'POST', {'cost': 1})
32
32
  private_post_send = privatePostSend = Entry('send', 'private', 'POST', {'cost': 1})
33
33
  private_post_oauth2_grant = privatePostOauth2Grant = Entry('oauth2/grant', 'private', 'POST', {'cost': 1})
34
+ private_post_beneficiaries = privatePostBeneficiaries = Entry('beneficiaries', 'private', 'POST', {'cost': 1})
34
35
  private_put_accounts_id_name = privatePutAccountsIdName = Entry('accounts/{id}/name', 'private', 'PUT', {'cost': 1})
35
36
  private_delete_withdrawals_id = privateDeleteWithdrawalsId = Entry('withdrawals/{id}', 'private', 'DELETE', {'cost': 1})
37
+ private_delete_beneficiaries_id = privateDeleteBeneficiariesId = Entry('beneficiaries/{id}', 'private', 'DELETE', {'cost': 1})
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.3.14'
7
+ __version__ = '4.3.15'
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
@@ -32,6 +32,7 @@ from ccxt.base.errors import BadSymbol # noqa: F4
32
32
  from ccxt.base.errors import OperationRejected # noqa: F401
33
33
  from ccxt.base.errors import NoChange # noqa: F401
34
34
  from ccxt.base.errors import MarginModeAlreadySet # noqa: F401
35
+ from ccxt.base.errors import MarketClosed # noqa: F401
35
36
  from ccxt.base.errors import BadResponse # noqa: F401
36
37
  from ccxt.base.errors import NullResponse # noqa: F401
37
38
  from ccxt.base.errors import InsufficientFunds # noqa: F401
@@ -2,7 +2,7 @@
2
2
 
3
3
  # -----------------------------------------------------------------------------
4
4
 
5
- __version__ = '4.3.14'
5
+ __version__ = '4.3.15'
6
6
 
7
7
  # -----------------------------------------------------------------------------
8
8
 
@@ -19,6 +19,7 @@ from ccxt.base.errors import BadRequest
19
19
  from ccxt.base.errors import BadSymbol
20
20
  from ccxt.base.errors import OperationRejected
21
21
  from ccxt.base.errors import MarginModeAlreadySet
22
+ from ccxt.base.errors import MarketClosed
22
23
  from ccxt.base.errors import BadResponse
23
24
  from ccxt.base.errors import InsufficientFunds
24
25
  from ccxt.base.errors import InvalidOrder
@@ -2419,7 +2420,7 @@ class binance(Exchange, ImplicitAPI):
2419
2420
  'Rest API trading is not enabled.': PermissionDenied,
2420
2421
  'This account may not place or cancel orders.': PermissionDenied,
2421
2422
  "You don't have permission.": PermissionDenied, # {"msg":"You don't have permission.","success":false}
2422
- 'Market is closed.': OperationRejected, # {"code":-1013,"msg":"Market is closed."}
2423
+ 'Market is closed.': MarketClosed, # {"code":-1013,"msg":"Market is closed."}
2423
2424
  'Too many requests. Please try again later.': RateLimitExceeded, # {"msg":"Too many requests. Please try again later.","success":false}
2424
2425
  'This action is disabled on self account.': AccountSuspended, # {"code":-2011,"msg":"This action is disabled on self account."}
2425
2426
  'Limit orders require GTC for self phase.': BadRequest,
@@ -3886,8 +3887,8 @@ class binance(Exchange, ImplicitAPI):
3886
3887
  """
3887
3888
  fetches the last price for multiple markets
3888
3889
  :see: https://binance-docs.github.io/apidocs/spot/en/#symbol-price-ticker # spot
3889
- :see: https://binance-docs.github.io/apidocs/future/en/#symbol-price-ticker # swap
3890
- :see: https://binance-docs.github.io/apidocs/delivery/en/#symbol-price-ticker # future
3890
+ :see: https://binance-docs.github.io/apidocs/futures/en/#symbol-price-ticker # swap
3891
+ :see: https://binance-docs.github.io/apidocs/delivery/en/#symbol-price-tickers # future
3891
3892
  :param str[]|None symbols: unified symbols of the markets to fetch the last prices
3892
3893
  :param dict [params]: extra parameters specific to the exchange API endpoint
3893
3894
  :param str [params.subType]: "linear" or "inverse"
@@ -401,6 +401,7 @@ class bingx(Exchange, ImplicitAPI):
401
401
  '100202': InsufficientFunds,
402
402
  '100204': BadRequest,
403
403
  '100400': BadRequest,
404
+ '100410': OperationFailed, # {"code":100410,"msg":"The current system is busy, please try again later"}
404
405
  '100421': BadSymbol, # {"code":100421,"msg":"This pair is currently restricted from API trading","debugMsg":""}
405
406
  '100440': ExchangeError,
406
407
  '100500': OperationFailed, # {"code":100500,"msg":"The current system is busy, please try again later","debugMsg":""}
@@ -6268,19 +6268,19 @@ class bybit(Exchange, ImplicitAPI):
6268
6268
  isUsdcSettled = market['settle'] == 'USDC'
6269
6269
  # engage in leverage setting
6270
6270
  # we reuse the code here instead of having two methods
6271
- leverage = self.number_to_string(leverage)
6271
+ leverageString = self.number_to_string(leverage)
6272
6272
  request = {
6273
6273
  'symbol': market['id'],
6274
- 'buyLeverage': leverage,
6275
- 'sellLeverage': leverage,
6274
+ 'buyLeverage': leverageString,
6275
+ 'sellLeverage': leverageString,
6276
6276
  }
6277
6277
  response = None
6278
6278
  if isUsdcSettled and not isUnifiedAccount:
6279
- request['leverage'] = leverage
6279
+ request['leverage'] = leverageString
6280
6280
  response = await self.privatePostPerpetualUsdcOpenapiPrivateV1PositionLeverageSave(self.extend(request, params))
6281
6281
  else:
6282
- request['buyLeverage'] = leverage
6283
- request['sellLeverage'] = leverage
6282
+ request['buyLeverage'] = leverageString
6283
+ request['sellLeverage'] = leverageString
6284
6284
  if market['linear']:
6285
6285
  request['category'] = 'linear'
6286
6286
  elif market['inverse']:
@@ -3488,48 +3488,49 @@ class coinex(Exchange, ImplicitAPI):
3488
3488
  async def create_deposit_address(self, code: str, params={}):
3489
3489
  """
3490
3490
  create a currency deposit address
3491
- :see: https://viabtc.github.io/coinex_api_en_doc/spot/#docsspot002_account019_update_deposit_address
3491
+ :see: https://docs.coinex.com/api/v2/assets/deposit-withdrawal/http/update-deposit-address
3492
3492
  :param str code: unified currency code of the currency for the deposit address
3493
3493
  :param dict [params]: extra parameters specific to the exchange API endpoint
3494
+ :param str [params.network]: the blockchain network to create a deposit address on
3494
3495
  :returns dict: an `address structure <https://docs.ccxt.com/#/?id=address-structure>`
3495
3496
  """
3496
3497
  await self.load_markets()
3497
3498
  currency = self.currency(code)
3499
+ network = self.safe_string_2(params, 'chain', 'network')
3500
+ if network is None:
3501
+ raise ArgumentsRequired(self.id + ' createDepositAddress() requires a network parameter')
3502
+ params = self.omit(params, 'network')
3498
3503
  request = {
3499
- 'coin_type': currency['id'],
3504
+ 'ccy': currency['id'],
3505
+ 'chain': self.network_code_to_id(network, currency['code']),
3500
3506
  }
3501
- if 'network' in params:
3502
- network = self.safe_string(params, 'network')
3503
- params = self.omit(params, 'network')
3504
- request['smart_contract_name'] = network
3505
- response = await self.v1PrivatePutBalanceDepositAddressCoinType(self.extend(request, params))
3507
+ response = await self.v2PrivatePostAssetsRenewalDepositAddress(self.extend(request, params))
3506
3508
  #
3507
3509
  # {
3508
3510
  # "code": 0,
3509
3511
  # "data": {
3510
- # "coin_address": "TV639dSpb9iGRtoFYkCp4AoaaDYKrK1pw5",
3511
- # "is_bitcoin_cash": False
3512
+ # "address": "0x321bd6479355142334f45653ad5d8b76105a1234",
3513
+ # "memo": ""
3512
3514
  # },
3513
- # "message": "Success"
3515
+ # "message": "OK"
3514
3516
  # }
3517
+ #
3515
3518
  data = self.safe_dict(response, 'data', {})
3516
3519
  return self.parse_deposit_address(data, currency)
3517
3520
 
3518
3521
  async def fetch_deposit_address(self, code: str, params={}):
3519
3522
  """
3520
3523
  fetch the deposit address for a currency associated with self account
3521
- :see: https://viabtc.github.io/coinex_api_en_doc/spot/#docsspot002_account020_query_deposit_address
3524
+ :see: https://docs.coinex.com/api/v2/assets/deposit-withdrawal/http/get-deposit-address
3522
3525
  :param str code: unified currency code
3523
3526
  :param dict [params]: extra parameters specific to the exchange API endpoint
3527
+ :param str [params.network]: the blockchain network to create a deposit address on
3524
3528
  :returns dict: an `address structure <https://docs.ccxt.com/#/?id=address-structure>`
3525
3529
  """
3526
3530
  await self.load_markets()
3527
3531
  currency = self.currency(code)
3528
- request = {
3529
- 'coin_type': currency['id'],
3530
- }
3531
- networks = self.safe_value(currency, 'networks', {})
3532
- network = self.safe_string(params, 'network')
3532
+ networks = self.safe_dict(currency, 'networks', {})
3533
+ network = self.safe_string_2(params, 'network', 'chain')
3533
3534
  params = self.omit(params, 'network')
3534
3535
  networksKeys = list(networks.keys())
3535
3536
  numOfNetworks = len(networksKeys)
@@ -3538,23 +3539,24 @@ class coinex(Exchange, ImplicitAPI):
3538
3539
  raise ArgumentsRequired(self.id + ' fetchDepositAddress() ' + code + ' requires a network parameter')
3539
3540
  if not (network in networks):
3540
3541
  raise ExchangeError(self.id + ' fetchDepositAddress() ' + network + ' network not supported for ' + code)
3541
- if network is not None:
3542
- request['smart_contract_name'] = network
3543
- response = await self.v1PrivateGetBalanceDepositAddressCoinType(self.extend(request, params))
3542
+ request = {
3543
+ 'ccy': currency['id'],
3544
+ 'chain': network,
3545
+ }
3546
+ response = await self.v2PrivateGetAssetsDepositAddress(self.extend(request, params))
3544
3547
  #
3545
- # {
3546
- # "code": 0,
3547
- # "data": {
3548
- # "coin_address": "1P1JqozxioQwaqPwgMAQdNDYNyaVSqgARq",
3549
- # # coin_address: "xxxxxxxxxxxxxx:yyyyyyyyy", # with embedded tag/memo
3550
- # "is_bitcoin_cash": False
3551
- # },
3552
- # "message": "Success"
3553
- # }
3548
+ # {
3549
+ # "code": 0,
3550
+ # "data": {
3551
+ # "address": "0x321bd6479355142334f45653ad5d8b76105a1234",
3552
+ # "memo": ""
3553
+ # },
3554
+ # "message": "OK"
3555
+ # }
3554
3556
  #
3555
- data = self.safe_value(response, 'data', {})
3557
+ data = self.safe_dict(response, 'data', {})
3556
3558
  depositAddress = self.parse_deposit_address(data, currency)
3557
- options = self.safe_value(self.options, 'fetchDepositAddress', {})
3559
+ options = self.safe_dict(self.options, 'fetchDepositAddress', {})
3558
3560
  fillResponseFromRequest = self.safe_bool(options, 'fillResponseFromRequest', True)
3559
3561
  if fillResponseFromRequest:
3560
3562
  depositAddress['network'] = self.safe_network_code(network, currency)
@@ -3578,11 +3580,11 @@ class coinex(Exchange, ImplicitAPI):
3578
3580
  def parse_deposit_address(self, depositAddress, currency: Currency = None):
3579
3581
  #
3580
3582
  # {
3581
- # "coin_address": "1P1JqozxioQwaqPwgMAQdNDYNyaVSqgARq",
3582
- # "is_bitcoin_cash": False
3583
+ # "address": "1P1JqozxioQwaqPwgMAQdNDYNyaVSqgARq",
3584
+ # "memo": ""
3583
3585
  # }
3584
3586
  #
3585
- coinAddress = self.safe_string(depositAddress, 'coin_address')
3587
+ coinAddress = self.safe_string(depositAddress, 'address')
3586
3588
  parts = coinAddress.split(':')
3587
3589
  address = None
3588
3590
  tag = None
@@ -509,7 +509,8 @@ class cryptocom(Exchange, ImplicitAPI):
509
509
  strike = self.safe_string(market, 'strike')
510
510
  marginBuyEnabled = self.safe_value(market, 'margin_buy_enabled')
511
511
  marginSellEnabled = self.safe_value(market, 'margin_sell_enabled')
512
- expiry = self.omit_zero(self.safe_integer(market, 'expiry_timestamp_ms'))
512
+ expiryString = self.omit_zero(self.safe_string(market, 'expiry_timestamp_ms'))
513
+ expiry = int(expiryString) if (expiryString is not None) else None
513
514
  symbol = base + '/' + quote
514
515
  type = None
515
516
  contract = None
@@ -632,6 +632,7 @@ class hitbtc(Exchange, ImplicitAPI):
632
632
  'accountsByType': {
633
633
  'spot': 'spot',
634
634
  'funding': 'wallet',
635
+ 'swap': 'derivatives',
635
636
  'future': 'derivatives',
636
637
  },
637
638
  'withdraw': {
@@ -150,6 +150,7 @@ class luno(Exchange, ImplicitAPI):
150
150
  'withdrawals': 1,
151
151
  'send': 1,
152
152
  'oauth2/grant': 1,
153
+ 'beneficiaries': 1,
153
154
  # POST /api/exchange/1/move
154
155
  },
155
156
  'put': {
@@ -157,6 +158,7 @@ class luno(Exchange, ImplicitAPI):
157
158
  },
158
159
  'delete': {
159
160
  'withdrawals/{id}': 1,
161
+ 'beneficiaries/{id}': 1,
160
162
  },
161
163
  },
162
164
  },
@@ -2299,7 +2299,7 @@ class phemex(Exchange, ImplicitAPI):
2299
2299
  if lastTradeTimestamp == 0:
2300
2300
  lastTradeTimestamp = None
2301
2301
  timeInForce = self.parse_time_in_force(self.safe_string(order, 'timeInForce'))
2302
- stopPrice = self.omit_zero(self.safe_number_2(order, 'stopPx', 'stopPxRp'))
2302
+ stopPrice = self.omit_zero(self.safe_string_2(order, 'stopPx', 'stopPxRp'))
2303
2303
  postOnly = (timeInForce == 'PO')
2304
2304
  reduceOnly = self.safe_value(order, 'reduceOnly')
2305
2305
  execInst = self.safe_string(order, 'execInst')
ccxt/base/errors.py CHANGED
@@ -15,6 +15,7 @@ error_hierarchy = {
15
15
  'NoChange': {
16
16
  'MarginModeAlreadySet': {},
17
17
  },
18
+ 'MarketClosed': {},
18
19
  },
19
20
  'BadResponse': {
20
21
  'NullResponse': {},
@@ -99,6 +100,10 @@ class MarginModeAlreadySet(NoChange):
99
100
  pass
100
101
 
101
102
 
103
+ class MarketClosed(OperationRejected):
104
+ pass
105
+
106
+
102
107
  class BadResponse(ExchangeError):
103
108
  pass
104
109
 
@@ -209,6 +214,7 @@ __all__ = [
209
214
  'OperationRejected',
210
215
  'NoChange',
211
216
  'MarginModeAlreadySet',
217
+ 'MarketClosed',
212
218
  'BadResponse',
213
219
  'NullResponse',
214
220
  'InsufficientFunds',
ccxt/base/exchange.py CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.3.14'
7
+ __version__ = '4.3.15'
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
@@ -3092,15 +3092,15 @@ class Exchange(object):
3092
3092
  # timestamp and symbol operations don't belong in safeTicker
3093
3093
  # they should be done in the derived classes
3094
3094
  return self.extend(ticker, {
3095
- 'bid': self.parse_number(self.omit_zero(self.safe_number(ticker, 'bid'))),
3095
+ 'bid': self.parse_number(self.omit_zero(self.safe_string(ticker, 'bid'))),
3096
3096
  'bidVolume': self.safe_number(ticker, 'bidVolume'),
3097
- 'ask': self.parse_number(self.omit_zero(self.safe_number(ticker, 'ask'))),
3097
+ 'ask': self.parse_number(self.omit_zero(self.safe_string(ticker, 'ask'))),
3098
3098
  'askVolume': self.safe_number(ticker, 'askVolume'),
3099
3099
  'high': self.parse_number(self.omit_zero(self.safe_string(ticker, 'high'))),
3100
- 'low': self.parse_number(self.omit_zero(self.safe_number(ticker, 'low'))),
3101
- 'open': self.parse_number(self.omit_zero(self.parse_number(open))),
3102
- 'close': self.parse_number(self.omit_zero(self.parse_number(close))),
3103
- 'last': self.parse_number(self.omit_zero(self.parse_number(last))),
3100
+ 'low': self.parse_number(self.omit_zero(self.safe_string(ticker, 'low'))),
3101
+ 'open': self.parse_number(self.omit_zero(open)),
3102
+ 'close': self.parse_number(self.omit_zero(close)),
3103
+ 'last': self.parse_number(self.omit_zero(last)),
3104
3104
  'change': self.parse_number(change),
3105
3105
  'percentage': self.parse_number(percentage),
3106
3106
  'average': self.parse_number(average),
ccxt/binance.py CHANGED
@@ -18,6 +18,7 @@ from ccxt.base.errors import BadRequest
18
18
  from ccxt.base.errors import BadSymbol
19
19
  from ccxt.base.errors import OperationRejected
20
20
  from ccxt.base.errors import MarginModeAlreadySet
21
+ from ccxt.base.errors import MarketClosed
21
22
  from ccxt.base.errors import BadResponse
22
23
  from ccxt.base.errors import InsufficientFunds
23
24
  from ccxt.base.errors import InvalidOrder
@@ -2418,7 +2419,7 @@ class binance(Exchange, ImplicitAPI):
2418
2419
  'Rest API trading is not enabled.': PermissionDenied,
2419
2420
  'This account may not place or cancel orders.': PermissionDenied,
2420
2421
  "You don't have permission.": PermissionDenied, # {"msg":"You don't have permission.","success":false}
2421
- 'Market is closed.': OperationRejected, # {"code":-1013,"msg":"Market is closed."}
2422
+ 'Market is closed.': MarketClosed, # {"code":-1013,"msg":"Market is closed."}
2422
2423
  'Too many requests. Please try again later.': RateLimitExceeded, # {"msg":"Too many requests. Please try again later.","success":false}
2423
2424
  'This action is disabled on self account.': AccountSuspended, # {"code":-2011,"msg":"This action is disabled on self account."}
2424
2425
  'Limit orders require GTC for self phase.': BadRequest,
@@ -3885,8 +3886,8 @@ class binance(Exchange, ImplicitAPI):
3885
3886
  """
3886
3887
  fetches the last price for multiple markets
3887
3888
  :see: https://binance-docs.github.io/apidocs/spot/en/#symbol-price-ticker # spot
3888
- :see: https://binance-docs.github.io/apidocs/future/en/#symbol-price-ticker # swap
3889
- :see: https://binance-docs.github.io/apidocs/delivery/en/#symbol-price-ticker # future
3889
+ :see: https://binance-docs.github.io/apidocs/futures/en/#symbol-price-ticker # swap
3890
+ :see: https://binance-docs.github.io/apidocs/delivery/en/#symbol-price-tickers # future
3890
3891
  :param str[]|None symbols: unified symbols of the markets to fetch the last prices
3891
3892
  :param dict [params]: extra parameters specific to the exchange API endpoint
3892
3893
  :param str [params.subType]: "linear" or "inverse"
ccxt/bingx.py CHANGED
@@ -400,6 +400,7 @@ class bingx(Exchange, ImplicitAPI):
400
400
  '100202': InsufficientFunds,
401
401
  '100204': BadRequest,
402
402
  '100400': BadRequest,
403
+ '100410': OperationFailed, # {"code":100410,"msg":"The current system is busy, please try again later"}
403
404
  '100421': BadSymbol, # {"code":100421,"msg":"This pair is currently restricted from API trading","debugMsg":""}
404
405
  '100440': ExchangeError,
405
406
  '100500': OperationFailed, # {"code":100500,"msg":"The current system is busy, please try again later","debugMsg":""}
ccxt/bybit.py CHANGED
@@ -6267,19 +6267,19 @@ class bybit(Exchange, ImplicitAPI):
6267
6267
  isUsdcSettled = market['settle'] == 'USDC'
6268
6268
  # engage in leverage setting
6269
6269
  # we reuse the code here instead of having two methods
6270
- leverage = self.number_to_string(leverage)
6270
+ leverageString = self.number_to_string(leverage)
6271
6271
  request = {
6272
6272
  'symbol': market['id'],
6273
- 'buyLeverage': leverage,
6274
- 'sellLeverage': leverage,
6273
+ 'buyLeverage': leverageString,
6274
+ 'sellLeverage': leverageString,
6275
6275
  }
6276
6276
  response = None
6277
6277
  if isUsdcSettled and not isUnifiedAccount:
6278
- request['leverage'] = leverage
6278
+ request['leverage'] = leverageString
6279
6279
  response = self.privatePostPerpetualUsdcOpenapiPrivateV1PositionLeverageSave(self.extend(request, params))
6280
6280
  else:
6281
- request['buyLeverage'] = leverage
6282
- request['sellLeverage'] = leverage
6281
+ request['buyLeverage'] = leverageString
6282
+ request['sellLeverage'] = leverageString
6283
6283
  if market['linear']:
6284
6284
  request['category'] = 'linear'
6285
6285
  elif market['inverse']:
ccxt/coinex.py CHANGED
@@ -3487,48 +3487,49 @@ class coinex(Exchange, ImplicitAPI):
3487
3487
  def create_deposit_address(self, code: str, params={}):
3488
3488
  """
3489
3489
  create a currency deposit address
3490
- :see: https://viabtc.github.io/coinex_api_en_doc/spot/#docsspot002_account019_update_deposit_address
3490
+ :see: https://docs.coinex.com/api/v2/assets/deposit-withdrawal/http/update-deposit-address
3491
3491
  :param str code: unified currency code of the currency for the deposit address
3492
3492
  :param dict [params]: extra parameters specific to the exchange API endpoint
3493
+ :param str [params.network]: the blockchain network to create a deposit address on
3493
3494
  :returns dict: an `address structure <https://docs.ccxt.com/#/?id=address-structure>`
3494
3495
  """
3495
3496
  self.load_markets()
3496
3497
  currency = self.currency(code)
3498
+ network = self.safe_string_2(params, 'chain', 'network')
3499
+ if network is None:
3500
+ raise ArgumentsRequired(self.id + ' createDepositAddress() requires a network parameter')
3501
+ params = self.omit(params, 'network')
3497
3502
  request = {
3498
- 'coin_type': currency['id'],
3503
+ 'ccy': currency['id'],
3504
+ 'chain': self.network_code_to_id(network, currency['code']),
3499
3505
  }
3500
- if 'network' in params:
3501
- network = self.safe_string(params, 'network')
3502
- params = self.omit(params, 'network')
3503
- request['smart_contract_name'] = network
3504
- response = self.v1PrivatePutBalanceDepositAddressCoinType(self.extend(request, params))
3506
+ response = self.v2PrivatePostAssetsRenewalDepositAddress(self.extend(request, params))
3505
3507
  #
3506
3508
  # {
3507
3509
  # "code": 0,
3508
3510
  # "data": {
3509
- # "coin_address": "TV639dSpb9iGRtoFYkCp4AoaaDYKrK1pw5",
3510
- # "is_bitcoin_cash": False
3511
+ # "address": "0x321bd6479355142334f45653ad5d8b76105a1234",
3512
+ # "memo": ""
3511
3513
  # },
3512
- # "message": "Success"
3514
+ # "message": "OK"
3513
3515
  # }
3516
+ #
3514
3517
  data = self.safe_dict(response, 'data', {})
3515
3518
  return self.parse_deposit_address(data, currency)
3516
3519
 
3517
3520
  def fetch_deposit_address(self, code: str, params={}):
3518
3521
  """
3519
3522
  fetch the deposit address for a currency associated with self account
3520
- :see: https://viabtc.github.io/coinex_api_en_doc/spot/#docsspot002_account020_query_deposit_address
3523
+ :see: https://docs.coinex.com/api/v2/assets/deposit-withdrawal/http/get-deposit-address
3521
3524
  :param str code: unified currency code
3522
3525
  :param dict [params]: extra parameters specific to the exchange API endpoint
3526
+ :param str [params.network]: the blockchain network to create a deposit address on
3523
3527
  :returns dict: an `address structure <https://docs.ccxt.com/#/?id=address-structure>`
3524
3528
  """
3525
3529
  self.load_markets()
3526
3530
  currency = self.currency(code)
3527
- request = {
3528
- 'coin_type': currency['id'],
3529
- }
3530
- networks = self.safe_value(currency, 'networks', {})
3531
- network = self.safe_string(params, 'network')
3531
+ networks = self.safe_dict(currency, 'networks', {})
3532
+ network = self.safe_string_2(params, 'network', 'chain')
3532
3533
  params = self.omit(params, 'network')
3533
3534
  networksKeys = list(networks.keys())
3534
3535
  numOfNetworks = len(networksKeys)
@@ -3537,23 +3538,24 @@ class coinex(Exchange, ImplicitAPI):
3537
3538
  raise ArgumentsRequired(self.id + ' fetchDepositAddress() ' + code + ' requires a network parameter')
3538
3539
  if not (network in networks):
3539
3540
  raise ExchangeError(self.id + ' fetchDepositAddress() ' + network + ' network not supported for ' + code)
3540
- if network is not None:
3541
- request['smart_contract_name'] = network
3542
- response = self.v1PrivateGetBalanceDepositAddressCoinType(self.extend(request, params))
3541
+ request = {
3542
+ 'ccy': currency['id'],
3543
+ 'chain': network,
3544
+ }
3545
+ response = self.v2PrivateGetAssetsDepositAddress(self.extend(request, params))
3543
3546
  #
3544
- # {
3545
- # "code": 0,
3546
- # "data": {
3547
- # "coin_address": "1P1JqozxioQwaqPwgMAQdNDYNyaVSqgARq",
3548
- # # coin_address: "xxxxxxxxxxxxxx:yyyyyyyyy", # with embedded tag/memo
3549
- # "is_bitcoin_cash": False
3550
- # },
3551
- # "message": "Success"
3552
- # }
3547
+ # {
3548
+ # "code": 0,
3549
+ # "data": {
3550
+ # "address": "0x321bd6479355142334f45653ad5d8b76105a1234",
3551
+ # "memo": ""
3552
+ # },
3553
+ # "message": "OK"
3554
+ # }
3553
3555
  #
3554
- data = self.safe_value(response, 'data', {})
3556
+ data = self.safe_dict(response, 'data', {})
3555
3557
  depositAddress = self.parse_deposit_address(data, currency)
3556
- options = self.safe_value(self.options, 'fetchDepositAddress', {})
3558
+ options = self.safe_dict(self.options, 'fetchDepositAddress', {})
3557
3559
  fillResponseFromRequest = self.safe_bool(options, 'fillResponseFromRequest', True)
3558
3560
  if fillResponseFromRequest:
3559
3561
  depositAddress['network'] = self.safe_network_code(network, currency)
@@ -3577,11 +3579,11 @@ class coinex(Exchange, ImplicitAPI):
3577
3579
  def parse_deposit_address(self, depositAddress, currency: Currency = None):
3578
3580
  #
3579
3581
  # {
3580
- # "coin_address": "1P1JqozxioQwaqPwgMAQdNDYNyaVSqgARq",
3581
- # "is_bitcoin_cash": False
3582
+ # "address": "1P1JqozxioQwaqPwgMAQdNDYNyaVSqgARq",
3583
+ # "memo": ""
3582
3584
  # }
3583
3585
  #
3584
- coinAddress = self.safe_string(depositAddress, 'coin_address')
3586
+ coinAddress = self.safe_string(depositAddress, 'address')
3585
3587
  parts = coinAddress.split(':')
3586
3588
  address = None
3587
3589
  tag = None
ccxt/cryptocom.py CHANGED
@@ -509,7 +509,8 @@ class cryptocom(Exchange, ImplicitAPI):
509
509
  strike = self.safe_string(market, 'strike')
510
510
  marginBuyEnabled = self.safe_value(market, 'margin_buy_enabled')
511
511
  marginSellEnabled = self.safe_value(market, 'margin_sell_enabled')
512
- expiry = self.omit_zero(self.safe_integer(market, 'expiry_timestamp_ms'))
512
+ expiryString = self.omit_zero(self.safe_string(market, 'expiry_timestamp_ms'))
513
+ expiry = int(expiryString) if (expiryString is not None) else None
513
514
  symbol = base + '/' + quote
514
515
  type = None
515
516
  contract = None
ccxt/hitbtc.py CHANGED
@@ -632,6 +632,7 @@ class hitbtc(Exchange, ImplicitAPI):
632
632
  'accountsByType': {
633
633
  'spot': 'spot',
634
634
  'funding': 'wallet',
635
+ 'swap': 'derivatives',
635
636
  'future': 'derivatives',
636
637
  },
637
638
  'withdraw': {
ccxt/luno.py CHANGED
@@ -150,6 +150,7 @@ class luno(Exchange, ImplicitAPI):
150
150
  'withdrawals': 1,
151
151
  'send': 1,
152
152
  'oauth2/grant': 1,
153
+ 'beneficiaries': 1,
153
154
  # POST /api/exchange/1/move
154
155
  },
155
156
  'put': {
@@ -157,6 +158,7 @@ class luno(Exchange, ImplicitAPI):
157
158
  },
158
159
  'delete': {
159
160
  'withdrawals/{id}': 1,
161
+ 'beneficiaries/{id}': 1,
160
162
  },
161
163
  },
162
164
  },
ccxt/phemex.py CHANGED
@@ -2299,7 +2299,7 @@ class phemex(Exchange, ImplicitAPI):
2299
2299
  if lastTradeTimestamp == 0:
2300
2300
  lastTradeTimestamp = None
2301
2301
  timeInForce = self.parse_time_in_force(self.safe_string(order, 'timeInForce'))
2302
- stopPrice = self.omit_zero(self.safe_number_2(order, 'stopPx', 'stopPxRp'))
2302
+ stopPrice = self.omit_zero(self.safe_string_2(order, 'stopPx', 'stopPxRp'))
2303
2303
  postOnly = (timeInForce == 'PO')
2304
2304
  reduceOnly = self.safe_value(order, 'reduceOnly')
2305
2305
  execInst = self.safe_string(order, 'execInst')
ccxt/pro/__init__.py CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  # ----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.3.14'
7
+ __version__ = '4.3.15'
8
8
 
9
9
  # ----------------------------------------------------------------------------
10
10
 
ccxt/pro/hitbtc.py CHANGED
@@ -1123,7 +1123,7 @@ class hitbtc(ccxt.async_support.hitbtc):
1123
1123
  # "id": 1700233093414
1124
1124
  # }
1125
1125
  #
1126
- messageHash = self.safe_integer(message, 'id')
1126
+ messageHash = self.safe_string(message, 'id')
1127
1127
  result = self.safe_value(message, 'result', {})
1128
1128
  if isinstance(result, list):
1129
1129
  parsedOrders = []
@@ -135,9 +135,9 @@ class independentreserve(ccxt.async_support.independentreserve):
135
135
  symbol = market['symbol']
136
136
  if limit is None:
137
137
  limit = 100
138
- limit = self.number_to_string(limit)
139
- url = self.urls['api']['ws'] + '/orderbook/' + limit + '?subscribe=' + market['base'] + '-' + market['quote']
140
- messageHash = 'orderbook:' + symbol + ':' + limit
138
+ limitString = self.number_to_string(limit)
139
+ url = self.urls['api']['ws'] + '/orderbook/' + limitString + '?subscribe=' + market['base'] + '-' + market['quote']
140
+ messageHash = 'orderbook:' + symbol + ':' + limitString
141
141
  subscription = {
142
142
  'receivedSnapshot': False,
143
143
  }
ccxt/pro/poloniex.py CHANGED
@@ -298,7 +298,7 @@ class poloniex(ccxt.async_support.poloniex):
298
298
  # }]
299
299
  # }
300
300
  #
301
- messageHash = self.safe_integer(message, 'id')
301
+ messageHash = self.safe_string(message, 'id')
302
302
  data = self.safe_value(message, 'data', [])
303
303
  orders = []
304
304
  for i in range(0, len(data)):
@@ -606,8 +606,8 @@ class poloniex(ccxt.async_support.poloniex):
606
606
  'type': self.safe_string_lower(trade, 'type'),
607
607
  'side': self.safe_string_lower_2(trade, 'takerSide', 'side'),
608
608
  'takerOrMaker': takerMaker,
609
- 'price': self.omit_zero(self.safe_number_2(trade, 'tradePrice', 'price')),
610
- 'amount': self.omit_zero(self.safe_number_2(trade, 'filledQuantity', 'quantity')),
609
+ 'price': self.omit_zero(self.safe_string_2(trade, 'tradePrice', 'price')),
610
+ 'amount': self.omit_zero(self.safe_string_2(trade, 'filledQuantity', 'quantity')),
611
611
  'cost': self.safe_string_2(trade, 'amount', 'filledAmount'),
612
612
  'fee': {
613
613
  'rate': None,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ccxt
3
- Version: 4.3.14
3
+ Version: 4.3.15
4
4
  Summary: A JavaScript / TypeScript / Python / C# / PHP cryptocurrency trading library with support for 100+ exchanges
5
5
  Home-page: https://ccxt.com
6
6
  Author: Igor Kroitor
@@ -262,13 +262,13 @@ console.log(version, Object.keys(exchanges));
262
262
 
263
263
  All-in-one browser bundle (dependencies included), served from a CDN of your choice:
264
264
 
265
- * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.3.14/dist/ccxt.browser.js
266
- * unpkg: https://unpkg.com/ccxt@4.3.14/dist/ccxt.browser.js
265
+ * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.3.15/dist/ccxt.browser.js
266
+ * unpkg: https://unpkg.com/ccxt@4.3.15/dist/ccxt.browser.js
267
267
 
268
268
  CDNs are not updated in real-time and may have delays. Defaulting to the most recent version without specifying the version number is not recommended. Please, keep in mind that we are not responsible for the correct operation of those CDN servers.
269
269
 
270
270
  ```HTML
271
- <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.3.14/dist/ccxt.browser.js"></script>
271
+ <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.3.15/dist/ccxt.browser.js"></script>
272
272
  ```
273
273
 
274
274
  Creates a global `ccxt` object:
@@ -1,14 +1,14 @@
1
- ccxt/__init__.py,sha256=R4scacHt_n7cvne2kv0HarUE-i0JzrbUDRg-m9DrN0A,15656
1
+ ccxt/__init__.py,sha256=tTh-nI_rfZEgz_Azhlc6qJGL2d0jyLzHX0niK9CHja4,15739
2
2
  ccxt/ace.py,sha256=j7Aq0hnsMTcUCIrWCm-ZZMkptWzAY23D8zi3jZWjq3c,41650
3
3
  ccxt/alpaca.py,sha256=h9GWMKpoPOXTcYESHQKM3MWGrrqEgFvs8sLkQx0YSLs,47182
4
4
  ccxt/ascendex.py,sha256=kxKDSqysYC_VHWsRHgNqEwGbQmKw8WIH_Cp2z6vouyg,151398
5
5
  ccxt/bequant.py,sha256=RBiAmaTbL35DgiV3Hl6uchLUd78V0z1T9riTlNsrpdc,1174
6
6
  ccxt/bigone.py,sha256=e9bOBUENqxUI1IjcCRBpc_eb7CilAxgk0tHGguESOEU,92168
7
- ccxt/binance.py,sha256=QUKvO5yZNnA8-3Z6ihZDuP-lKGl_NEMdHzbOfkjFt78,615643
7
+ ccxt/binance.py,sha256=Yfd-gObsdcxLhdkWgEu_oaseQgmDWwOeT_jKAT6kCJw,615682
8
8
  ccxt/binancecoinm.py,sha256=pncdw6Xw2X1Po-vEvAB4nL37scoS_axGAVxetPy1YQs,1645
9
9
  ccxt/binanceus.py,sha256=hdcT4OnadcdFFFjF3GtM0nWv90jqojqwdVS3xWGuW40,9163
10
10
  ccxt/binanceusdm.py,sha256=KPQGlCalQ0eGlPCs2tSanOxaP8O0zFRQjGntA16Yprw,2480
11
- ccxt/bingx.py,sha256=O-htpqNhQjJZSs1E39HMWk0esZ_JqjNzEh25eWdqftY,184594
11
+ ccxt/bingx.py,sha256=hnsQauPUdWF6YS8F63-8D9Q5XLD2pvSKQuFfM0jg6VQ,184719
12
12
  ccxt/bit2c.py,sha256=zDMcQVszvO39Lo4Km_aU16AN0MoVz7WhJrLnTua5Pm0,36901
13
13
  ccxt/bitbank.py,sha256=XC2n0jpXEV7L7JoaIgjroAd__FQzucDRZnNJPfmwHWg,41839
14
14
  ccxt/bitbay.py,sha256=xAIjzGRDVGwoy-Gygd99H0YN4wiaz_0lR0Z14oxaaxc,478
@@ -35,20 +35,20 @@ ccxt/btcalpha.py,sha256=9cjW8u3j3L5Jok3G0_WbILreo5MG40yo7OxNTkArewY,36695
35
35
  ccxt/btcbox.py,sha256=fI62e8f0CBMbSrVD1Cukk2SHcd4o4PcNfiEEbrIUETQ,23486
36
36
  ccxt/btcmarkets.py,sha256=R_LqHslDyQeJ6rQdN3sH02ICf4M91Dt_MegrpEi19lY,51478
37
37
  ccxt/btcturk.py,sha256=yz2w0eRyWju4znaIovBkVrQN-mjm3XlR_5F7AmQaogU,36651
38
- ccxt/bybit.py,sha256=xd6B08LBbeTT-gPu5MycV8iK6dBQ5D2BxNVtDmq7feU,410598
38
+ ccxt/bybit.py,sha256=FgbHJDebwmJDHgUPOEnVtFksQlM_ADWRTJ0RnuzN9D8,410634
39
39
  ccxt/cex.py,sha256=nIBZhdCtCeKLapnwHDZ9QSkjoIlgLmTggh-7BTEL3ug,69924
40
40
  ccxt/coinbase.py,sha256=zrPkfEPaiX8LVfqpQ7VoLtefxZmOPMoBASlLa4v9wtk,211987
41
41
  ccxt/coinbaseinternational.py,sha256=YHt9l8lf78A-UPwPPP_uQ7U8qom-1wnxD-UAgDHYl0k,87207
42
42
  ccxt/coinbasepro.py,sha256=MHlfA0VS0PrYyTjcwcit7I04nD-P6zgICkYzAI611Rc,78665
43
43
  ccxt/coincheck.py,sha256=GYkK5BTSFsJOuR5fSCysUqNK5b2FjEjz7dIBHXmc1Xs,35658
44
- ccxt/coinex.py,sha256=3VstGwHVL8bpI7XT-pt4dRHH9FZrbi24Y1f6FjqfSRw,269404
44
+ ccxt/coinex.py,sha256=7e6A4yjx5hAVmUlEzOO1hn5VJ7kzVJYU_t5YoLOWsxc,269475
45
45
  ccxt/coinlist.py,sha256=KFP4eawW0ce-xJ15t3kuPQCLKSXQQTvkDjWfzRXtS3w,103087
46
46
  ccxt/coinmate.py,sha256=bFSSHuOSL2OQdMZXa_5sNkXoM0FIxWgiCd0tgJjIo4M,45940
47
47
  ccxt/coinmetro.py,sha256=13ibUWPJ5EOGaaBoZyeit23VMkV-fqfyw01XI2vdyLU,80661
48
48
  ccxt/coinone.py,sha256=q0Wxrp9RWjR_zz38DnR-l60MkROsUKxcRYnJcIK9EwE,46890
49
49
  ccxt/coinsph.py,sha256=FCtZiitRluc6j8v97o1cwW4R7CT1BsX2AMVV5XU9z-U,90626
50
50
  ccxt/coinspot.py,sha256=JLL9adBf137shW_vLr3LfGS5zxN6oTnEjzJkVaCkDbs,23608
51
- ccxt/cryptocom.py,sha256=I8_6bv14ZDtxn5m72xlv3rupplJGtra48hCUcw5eOBw,129634
51
+ ccxt/cryptocom.py,sha256=4fzjcJLCdtHNPZp3E01wt_1Pte5ycIs604si4bA_Hyo,129718
52
52
  ccxt/currencycom.py,sha256=Y0foIftGaqxSRpkjgO-XTGifgFKnAINXYtrJRtBODYM,86759
53
53
  ccxt/delta.py,sha256=BspjNAbU6nY9vKdnotWOtROIxkEuVJjpR0FNLIwLzJQ,150451
54
54
  ccxt/deribit.py,sha256=8cHi-ceBc1SwWTyzuanmhofDvh_zMbiCrch6SUxkR6U,160453
@@ -58,7 +58,7 @@ ccxt/fmfwio.py,sha256=RbVLvzPwnqfDsE7Ea-N13ISCC82eJVPsXYjrleASmew,1236
58
58
  ccxt/gate.py,sha256=8TODmWPxKDRZ18n03tHWdmeZVDEmctF37sZ8vGp_gPw,319742
59
59
  ccxt/gateio.py,sha256=86AETJWODl_vA5VNeQRHZprmpNIY1HAxCddKZcnKSi8,445
60
60
  ccxt/gemini.py,sha256=JlnV4G-papCiPymgNQsWMwlwg6YMo0YHd370AuAaVPk,80619
61
- ccxt/hitbtc.py,sha256=_8S4cJdn-QHoHFR7-OiaWXYFqBQtzUaUvs7J-n4srKE,152921
61
+ ccxt/hitbtc.py,sha256=-Vprl-XJ2Wr6vw2GMQpGlHjCFHH14HjeCGVEGfgW6h4,152964
62
62
  ccxt/hitbtc3.py,sha256=qRAr4Zvaju9IQWRZUohdoN7xRnzIMPq8AyYb3gPv-Is,455
63
63
  ccxt/hollaex.py,sha256=leWQXb90dDdCdFDKQav5S5X82HN3D7S-dciORAOBA-g,75898
64
64
  ccxt/htx.py,sha256=VwErziLq0kj3BH0Yt4cbpIgfXZlLkE7Ap1QTqYzcRNA,420397
@@ -75,7 +75,7 @@ ccxt/kucoinfutures.py,sha256=xlT3-JJxMhnQxxfoiQ_Und_FJO7l-pzeonv9f1Dk9fU,124286
75
75
  ccxt/kuna.py,sha256=Io7T-gg43lTJI0ZoVp6ZQ8MOVPP21raUvDbCKgonuiE,95985
76
76
  ccxt/latoken.py,sha256=wzrKCGTfp9qN6pfuzHqi8bg9q6MifGqUt9zLMaIlgA0,79051
77
77
  ccxt/lbank.py,sha256=lx8kBrKsLJlnhphUzMcQe-JOmZd6N_PeIxQFrxL9M1k,115169
78
- ccxt/luno.py,sha256=bDIPNJnhPBvOzAhSSM4nXubMFN1gZDg78abq207Y4Oo,45788
78
+ ccxt/luno.py,sha256=A3qSj-mu1C_wIJxeQwRg_MTwdNcN1gZzBcDcdEfudNQ,45881
79
79
  ccxt/lykke.py,sha256=Uv2kUW7RtNoFxZlGTEjBu3P-N9dBW3CcuNCaUjsnXeE,51064
80
80
  ccxt/mercado.py,sha256=BZb5a0_SDKAz7CUCeiftkVtZnfnos8GpgwNyk57aa-s,35333
81
81
  ccxt/mexc.py,sha256=6c7Ecdq6vCJwfXqOO4bhS8BYq1sY2kB5pQrRyOGejYY,240769
@@ -87,7 +87,7 @@ ccxt/okx.py,sha256=Zv0gbbCOE9ZpszIZ5QqABdhC3BmBCExVQqvtiBbQ9uQ,373701
87
87
  ccxt/onetrading.py,sha256=T68x4qfncbcnXU-YdMTVEGwnr3zKvcbbfdQZa8Zourc,88107
88
88
  ccxt/p2b.py,sha256=FYxL36KwtaLIIQ793frJEtqtHyzm39hNK0mJEzAAH0U,54213
89
89
  ccxt/paymium.py,sha256=2mBwmyT93k-dXBEKEix48G8PsA2IEN_5yScEM985Z10,24203
90
- ccxt/phemex.py,sha256=ZZ-NQvHpVsbm7l1SXNsgG7a6ng9emxOoUwKQsCvZD-8,218811
90
+ ccxt/phemex.py,sha256=wSEbzDt6Hi6QRNR1vmLr7em1hbKm8tmiwB_Pu3sqoJQ,218811
91
91
  ccxt/poloniex.py,sha256=IKCZrQG0h_j7Pl1br-3fMTG-9O6hivwUzl0HzScPLDM,101953
92
92
  ccxt/poloniexfutures.py,sha256=e3zuDY21yjI-7BASSWPQ-3r0c5EQY-W6QAcUCwhOSP8,77793
93
93
  ccxt/probit.py,sha256=CxH2YTWaOBISrzbpdSZQ0DbaXUoOeFwc2ieQjYF4its,76340
@@ -179,7 +179,7 @@ ccxt/abstract/kucoinfutures.py,sha256=W6BLMw26kIxIPQJh77lrSHjvsf2wXCshvBCzxYGEpj
179
179
  ccxt/abstract/kuna.py,sha256=IsaLq8A4DUOlQ8Esyk0WqBU6hHm5Q4sIqhgnMIvDGX0,24579
180
180
  ccxt/abstract/latoken.py,sha256=1GqE9WxrubgZILnYvg7W_dGyui-FKeIv0bU4z1dQj1k,7168
181
181
  ccxt/abstract/lbank.py,sha256=pdut_cIcwcUhN_ZCyWJxixBc4dgeQqvENYqFCrUYrvA,8675
182
- ccxt/abstract/luno.py,sha256=cvbpLXatBy_90Tz8m6fMCNX63TEGeiJy5f__kISylVo,3373
182
+ ccxt/abstract/luno.py,sha256=QUsEL2MMhv6qF-4pW0o0xs9lI8HsZtlrAp3sBskq7i4,3619
183
183
  ccxt/abstract/lykke.py,sha256=PyLaU4RVPYTkPYsGgL2e2c9mtnz0xiy-LMOBSA4w_1g,2960
184
184
  ccxt/abstract/mercado.py,sha256=qs3Fr6C_K8M-YIsGx-W9iUiFXcgQ0SA8uADvhV8mDQM,2357
185
185
  ccxt/abstract/mexc.py,sha256=flgbnn-U3tmK0RMAoz1k2uHx3ZJGWB5DXlmkgxvxrrY,25902
@@ -206,17 +206,17 @@ ccxt/abstract/woo.py,sha256=yH0aXeyohXdyS3jZrztapwRmzNWk7JGpbrrf7pX_LKU,10368
206
206
  ccxt/abstract/yobit.py,sha256=8ycfCO8ORFly9hc0Aa47sZyX4_ZKPXS9h9yJzI-uQ7Q,1339
207
207
  ccxt/abstract/zaif.py,sha256=m15WHdl3gYy0GOXNZ8NEH8eE7sVh8c0T_ITNuU8vXeU,3935
208
208
  ccxt/abstract/zonda.py,sha256=aSfewvRojzmuymX6QbOnDR8v9VFqWTULMHX9Y7kKD1M,5820
209
- ccxt/async_support/__init__.py,sha256=MAE1yn4Bk-Pq_e480UK7yrJNTW1pBor_oWztzJu_tqg,15409
209
+ ccxt/async_support/__init__.py,sha256=8AM_g5d9XtA2ZhXcgYfK8Cy5cdMMqcUCn5QBW2IdWl4,15492
210
210
  ccxt/async_support/ace.py,sha256=FNZKajNtvFhDEmBYzgv46pGMwvHbPQcqhsWRpAk9iwU,41874
211
211
  ccxt/async_support/alpaca.py,sha256=A1g6mT4lc8Ab5f5Hi7U_10XltruXHlE8268s45dDd6I,47394
212
212
  ccxt/async_support/ascendex.py,sha256=GJJxZnAu_OSTv3l15DbAaIsIz5QdyWAgD0-yfsTjAf4,152186
213
213
  ccxt/async_support/bequant.py,sha256=1hTwHovo1bW1XTIc8ZKjvJ-Xg6LfmpGdzT7TepykaVM,1188
214
214
  ccxt/async_support/bigone.py,sha256=VRcmcf65P0Uw-EpEf78u_KQdE9J6MVOKdd311z-thRA,92622
215
- ccxt/async_support/binance.py,sha256=Mp9EJYYHfS-4qcTGU3kZYFV56U4ZlNkFQOuAPMsxYRs,618341
215
+ ccxt/async_support/binance.py,sha256=0SdQ7KXFEBF8ThRmj6tiKhTfi-xLTjYibOgijHE9vpA,618380
216
216
  ccxt/async_support/binancecoinm.py,sha256=IY3RLZptQA2nmZaUYRGfTa5ZY4VMWBpFYfwHc8zTHw0,1683
217
217
  ccxt/async_support/binanceus.py,sha256=c-K3Tk7LaRJjmYdCx8vBOqsx01uXrtvt0PC2ekBiD0g,9177
218
218
  ccxt/async_support/binanceusdm.py,sha256=-1r4A4tmV2pCiLGO80hzq7MIIj4MTzOD7buZGv6JauA,2518
219
- ccxt/async_support/bingx.py,sha256=vyFHyFF6f1207Q7NQh16v7eVtsxixImfNIFlO96DDkw,185630
219
+ ccxt/async_support/bingx.py,sha256=e4T7Y2teRXofJ_sG6lOThWv3c6l-lvCD1NmmMFq94wg,185755
220
220
  ccxt/async_support/bit2c.py,sha256=vCfbtsUTI0j9wU51FnvzPpFwmzC3ozN4h1I4IXVgMGI,37113
221
221
  ccxt/async_support/bitbank.py,sha256=48plnjcFdy6Ovd66hm32fa0qjedmkkjfnSwDB99NwbI,42099
222
222
  ccxt/async_support/bitbay.py,sha256=jcaEXi2IhYTva8ezO_SfJhwxEZk7HST4J3NaxD16BQA,492
@@ -243,20 +243,20 @@ ccxt/async_support/btcalpha.py,sha256=tfGT1xE4_tgWhyBx5UMiwhll-xf5FWx7NZZ6v7dOt1
243
243
  ccxt/async_support/btcbox.py,sha256=DUVQQhJSlH9QCg3RToVL4cSUtFsRomArZIav1YdLxzo,23680
244
244
  ccxt/async_support/btcmarkets.py,sha256=aHWHZNsllU8dBEUPGLe78K3B0X_Q1f0PGYS7TUSSwUM,51828
245
245
  ccxt/async_support/btcturk.py,sha256=tkhs24jrrjhiwPvzmAXSGZVnmrlvQxqfIi3PCP-iwN0,36869
246
- ccxt/async_support/bybit.py,sha256=yH0Wax_fvUGiuxzWneS0zW7cRu1-uyOPopCytOuykjc,412378
246
+ ccxt/async_support/bybit.py,sha256=xU0mmiBxsquw54z7PuWgRsamolT-t20LRw2Mg-Qgtkc,412414
247
247
  ccxt/async_support/cex.py,sha256=28Bixn0KAtlz-I171izhzgxR59sOx0tMV6d32XUkOnY,70274
248
248
  ccxt/async_support/coinbase.py,sha256=TQiVDuE9ga8gwmmmFG1bpollPCoUcE3UWiNtmlbW-tM,213093
249
249
  ccxt/async_support/coinbaseinternational.py,sha256=NnsZZexHNFeSFoVbJe76PCud0MZHoCWe5ZVx9SxcWhw,87761
250
250
  ccxt/async_support/coinbasepro.py,sha256=450ObJYcli-6Fkpqx8iTT-Z6TB4Uek0bIXmSWLWVsFA,79171
251
251
  ccxt/async_support/coincheck.py,sha256=B_qzNQzd3j-me0km8lEg7bnfp--A16fpa_W902ut5Lo,35864
252
- ccxt/async_support/coinex.py,sha256=jXlSERbrJE22lfc4geYt8NJnpBF0Mq2KjwCvRR2ia-g,270698
252
+ ccxt/async_support/coinex.py,sha256=zESaEm_SiaiaqPuzoMDTZV3cKVcBrb9mooXM61djAxA,270769
253
253
  ccxt/async_support/coinlist.py,sha256=pz2Kj7wr8yl_VojRHApidVYCfr7Kz_KkjtKSxLg-fAY,103575
254
254
  ccxt/async_support/coinmate.py,sha256=XQJDqDPD2JFBDZqKzWC9AfBKV3MY3msBuYkMgUaT5M0,46206
255
255
  ccxt/async_support/coinmetro.py,sha256=VPi7zqunFxgFzcedh5cOApHea1ztooxk2Mug5889q_4,80981
256
256
  ccxt/async_support/coinone.py,sha256=_ypMnoeBgvfhl3N9i4x7ZeUR--PAKwm1xOt8Z_8UweI,47132
257
257
  ccxt/async_support/coinsph.py,sha256=NuRYfAg8qYoYuCwtdnBCPDgX5sdQtpUx_RFRudPM4Vo,91060
258
258
  ccxt/async_support/coinspot.py,sha256=eYMpIjpGdJhV1MeLBQXxJS56ArYnL-sqcUjgkb9wmjQ,23760
259
- ccxt/async_support/cryptocom.py,sha256=a676sGH1VJ3IX9zye-spc83rnYYOHwEAMW-wK357Avs,130206
259
+ ccxt/async_support/cryptocom.py,sha256=6UdQ4VJAYvfdTyL1xiQjbQGpH3Bs8U6MAyh1ims_w3Y,130290
260
260
  ccxt/async_support/currencycom.py,sha256=6mRnCI8zMKEUqiB-eyKE7i1fRsxPKIvxWRF6xMbMTf0,87181
261
261
  ccxt/async_support/delta.py,sha256=FBfleA6tyZ5--6MSeqEHTf_tdWiteIkM2z2cH-Xz5ac,151059
262
262
  ccxt/async_support/deribit.py,sha256=BG5mh0jsVbtRV_nYN8K1h38alM97hEB5Kho7apTHxiE,161229
@@ -266,7 +266,7 @@ ccxt/async_support/fmfwio.py,sha256=lzfSnPrB2ARcC3EIqAuBM4vyg6LJ6n8RE71Zvt3ez1s,
266
266
  ccxt/async_support/gate.py,sha256=BxC6vwwVAbT2czMMwihql16QjT8xfgbTr7wirr_Zkw8,321420
267
267
  ccxt/async_support/gateio.py,sha256=6_t032F9p9x5KGTjtSuqGXITzFOx-XAQBYLpsuQjzxw,459
268
268
  ccxt/async_support/gemini.py,sha256=IJRx47vtwQtVjaieCH2CTWJpJqHcb1PKsq3cuMZGcIY,81132
269
- ccxt/async_support/hitbtc.py,sha256=i0YJ49GcnVq844O2iEccMjlGlTIaTg9ilqy4CblnqVo,153967
269
+ ccxt/async_support/hitbtc.py,sha256=RqQuOJNznoGm1UtZfSp0zB1k79F5hdOyzUcd5p3HAoM,154010
270
270
  ccxt/async_support/hitbtc3.py,sha256=dmSYoD2o4av_zzbZI8HNIoj8BWxA7QozsVpy8JaOXzU,469
271
271
  ccxt/async_support/hollaex.py,sha256=LwFfI7aYpywxJlQlJ_YNnqCbmBKRcZpLILPZYPQRkh0,76332
272
272
  ccxt/async_support/htx.py,sha256=L6pNRAQQam7sV7dCEDfp1-DApVIwt2fqykM_LqIU_aA,422753
@@ -283,7 +283,7 @@ ccxt/async_support/kucoinfutures.py,sha256=Peqak4JNEnZkcKSEP10wCuQHU9sb7HQm6BoqH
283
283
  ccxt/async_support/kuna.py,sha256=h9rrxeXVmiLkqJhRq8eVzxjOlcFOpJos0wInSdXAW4k,96401
284
284
  ccxt/async_support/latoken.py,sha256=nHDcBT-8DZMFEUp3kYeCRGpL6xRbhk8A7FM-VU8JZr4,79527
285
285
  ccxt/async_support/lbank.py,sha256=QLVr6kP3ngX_2j3BMsl7wSPiWIt5t3I2VBojn-vNqzk,115881
286
- ccxt/async_support/luno.py,sha256=ANpcS2fmajhN_9TNGVhgjLgzz6Wz1bmqDdQBAeasWX0,46126
286
+ ccxt/async_support/luno.py,sha256=zCe5fQMRd7a3QMw8HhG0P7nFB75N0Xpbc9CW88K1Z44,46219
287
287
  ccxt/async_support/lykke.py,sha256=-CjpYZzDY_iI1dTKUKukhJMjRb9t5u0cYbxnL7-sJpQ,51378
288
288
  ccxt/async_support/mercado.py,sha256=_NFenAD-YA5LCZI-r07iwXYHAL2U3RQXGmXiIdbA5W4,35575
289
289
  ccxt/async_support/mexc.py,sha256=F_vVK8nr3etdf_ip-0SjOa30pcuYuz-fQ8t4AtP_-ds,241947
@@ -295,7 +295,7 @@ ccxt/async_support/okx.py,sha256=r_6_AfHUlyIGaxXvxXx8JBkVzqW9o-EL8zsPv4MsYdg,375
295
295
  ccxt/async_support/onetrading.py,sha256=2O3d2_E-oUZABQEyR9igcke0AJ-to-_J9579iDyGKfo,88559
296
296
  ccxt/async_support/p2b.py,sha256=KrNc3sLbHQCxbgShyqWytuQVaQfKa42Q6_HcUYNUaKI,54455
297
297
  ccxt/async_support/paymium.py,sha256=3P1J9OcDOqQKG5fUs6Xte9Xu8NB5lWu-OD-AHHGZbkM,24391
298
- ccxt/async_support/phemex.py,sha256=_6pQM2PdUCDLaNaAvDncWruuJjSQRo5jnZyEO4JLbqg,219623
298
+ ccxt/async_support/phemex.py,sha256=i2Im9LKtOUjKguJcYXUwXVtH5D885rWS3-RFwTcr1LQ,219623
299
299
  ccxt/async_support/poloniex.py,sha256=Y4eDB-JYuQUtq_QNXKbZdcCyncvFwhIiNQgMIQohDMI,102501
300
300
  ccxt/async_support/poloniexfutures.py,sha256=AG2t7T7tcayFNUsRU9LGoRbYA1whYSEC2PDpFZuPVdc,78179
301
301
  ccxt/async_support/probit.py,sha256=7uJBTd-R2GvAY9KEuG5CYFRk7M_hlocapcSo-MUmDh0,76732
@@ -311,7 +311,7 @@ ccxt/async_support/yobit.py,sha256=6eqYOcSBmXhJgcKDRMj8oRH_7aoz2E21hxgzvA1TzrA,5
311
311
  ccxt/async_support/zaif.py,sha256=chPFWbPvYNn0KPHY0fX_nXl60WuvueRO9GNnNMpuYeo,28139
312
312
  ccxt/async_support/zonda.py,sha256=nHlJJSlr_zBSiw4WrKOp2FbO33_UFMK5YyLuf2Pvjr0,80871
313
313
  ccxt/async_support/base/__init__.py,sha256=aVYSsFi--b4InRs9zDN_wtCpj8odosAB726JdUHavrk,67
314
- ccxt/async_support/base/exchange.py,sha256=Igr6QKr5tYXfxgCE_a-eYziZFbmVhs8JmnMLUBhdvm0,107191
314
+ ccxt/async_support/base/exchange.py,sha256=eWtRJP4dZQp7uBL0IoB5W2PP4-tZiQxqdriSHqz3jWg,107191
315
315
  ccxt/async_support/base/throttler.py,sha256=tvDVcdRUVYi8fZRlEcnqtgzcgB_KMUMRs5Pu8tuU-tU,1847
316
316
  ccxt/async_support/base/ws/__init__.py,sha256=uockzpLuwntKGZbs5EOWFe-Zg-k6Cj7GhNJLc_RX0so,1791
317
317
  ccxt/async_support/base/ws/aiohttp_client.py,sha256=Ed1765emEde2Hj8Ys6f5EjS54ZI1wQ0qIhd04eB7yhU,5751
@@ -324,11 +324,11 @@ ccxt/async_support/base/ws/order_book.py,sha256=uBUaIHhzMRykpmo4BCsdJ-t_HozS6Vxh
324
324
  ccxt/async_support/base/ws/order_book_side.py,sha256=Pxrq22nCODckJ6G1OXkYEmUunIuybSz6sh9MsDB1WMY,6478
325
325
  ccxt/base/__init__.py,sha256=eTx1OE3HJjspFUQjGm6LBhaQiMKJnXjkdP-JUXknyQ0,1320
326
326
  ccxt/base/decimal_to_precision.py,sha256=fgWRBzRTtsf3r2INyS4f7WHlzgjB5YM1ekiwqD21aac,6634
327
- ccxt/base/errors.py,sha256=u_zxABGVPU_K5oLEEZQWOI0_F5Q-SAUq1g1q6AFh7IM,4107
328
- ccxt/base/exchange.py,sha256=yuAgEhFsoZYfgrFy0YXkkHaEAsyouSnDEW2CAkPpJ9U,275747
327
+ ccxt/base/errors.py,sha256=FGdyULeNCNcl52gA_CNhe2dZmat9GJGkTdlIyDXAF_A,4213
328
+ ccxt/base/exchange.py,sha256=jRrjam_qU9RUuD_CNsUZIN4J5qdKGQ8L4XXdIXQYxKk,275690
329
329
  ccxt/base/precise.py,sha256=_xfu54sV0vWNnOfGTKRFykeuWP8mn4K1m9lk1tcllX4,8565
330
330
  ccxt/base/types.py,sha256=m9kkJ1elksA8JwVeoSZyL6BBH4qu3l8h5zhi3W22-1o,8495
331
- ccxt/pro/__init__.py,sha256=FzqkjwWklqUUWBvU3gpxVWErhgGCty7Q3ZWM_kZ9jLU,6999
331
+ ccxt/pro/__init__.py,sha256=XqJBWVNnr1mojI_kKHkMDmIGivalVi4MHhCTV6kcZ08,6999
332
332
  ccxt/pro/alpaca.py,sha256=7ePyWli0949ti5UheIn553xmnFpedrNc2W5CKauSZio,27167
333
333
  ccxt/pro/ascendex.py,sha256=fCM3EujSfJvtvffqI56UAstTtwjXFIocwukm15cF8rE,35432
334
334
  ccxt/pro/bequant.py,sha256=5zbsP8BHQTUZ8ZNL6uaACxDbUClgkOV4SYfXT_LfQVg,1351
@@ -365,14 +365,14 @@ ccxt/pro/exmo.py,sha256=gLCAObkmAyL_4BTRnftfDTejsW3-isi18ppKIipidyo,24527
365
365
  ccxt/pro/gate.py,sha256=1PPvBNDByPUaDG475jMaBhMTVTjtyEoJdkfxiSs9jZw,52489
366
366
  ccxt/pro/gateio.py,sha256=_uBWXYQbmsHRivKnZOJDmxJ9tWLO_0HAxmOjAEUy9nE,391
367
367
  ccxt/pro/gemini.py,sha256=a8yZNyLnv1VI6FPhSK-d8MzG7wEX60wL8uUJrqeWmOI,36641
368
- ccxt/pro/hitbtc.py,sha256=jJUwQueemkuVa5-mX9N7ujpgW7ED24gStJSTuNc42XQ,56285
368
+ ccxt/pro/hitbtc.py,sha256=JLlqcR0h6yz02FPZ2zT_hC1QEyvMwtkej4jnaDp7XE8,56284
369
369
  ccxt/pro/hollaex.py,sha256=q233J-P83OZj1DN_WRRgoq2gfur5AjlW2krlkKUoQTs,21957
370
370
  ccxt/pro/htx.py,sha256=tP7x0sgQqj4S2CP05nUmoq0k-DWe3okQpStSwx7SuqU,95779
371
371
  ccxt/pro/huobi.py,sha256=rKZVgYqEr-MmZzTqAk4FoJt8qWFjCi_FY0ci_mWZrL0,385
372
372
  ccxt/pro/huobijp.py,sha256=fcC66ECLwrR9LN_AYZZltoE_w9EltT5DcXimPOHKJk0,23174
373
373
  ccxt/pro/hyperliquid.py,sha256=V6ev_19ttD0jmlaejvJwTl429_K1eyt0O3mUusQcrgk,20791
374
374
  ccxt/pro/idex.py,sha256=MJWG56eMN8rAE4Tmz-WxXDDO2KacfY7eFSoCwL15DnQ,28282
375
- ccxt/pro/independentreserve.py,sha256=0YBn7qEnlTbgAW-837P6axGAIQH8ucZmhHKjkQ6R5V0,11063
375
+ ccxt/pro/independentreserve.py,sha256=QuEULuFQN-769Tga3JjucFYlo8Ifui4LSl5RMDnTJ1Q,11081
376
376
  ccxt/pro/kraken.py,sha256=YCC_Qtq-C3Ds-reEkkF2qpEh_XY1zUV3SLVzEGKkko8,60658
377
377
  ccxt/pro/krakenfutures.py,sha256=QTeLsAXmM3CxLbDI6ktESj8LYQYhJISsB95Za1nFzh8,63917
378
378
  ccxt/pro/kucoin.py,sha256=wxUoyXjTV0iU5X4C2EdWRFFTzljICccpRJq4b9MWmmg,50705
@@ -386,7 +386,7 @@ ccxt/pro/okx.py,sha256=3mwiUgBWsGLUhNQ3eXqdmlCbcL9Ni-7PuPjBEpHtA90,68821
386
386
  ccxt/pro/onetrading.py,sha256=9-WTi6ZNjsG7TJ6CA6pGpnm_6Jg2gg21ny4GZypjr6s,54634
387
387
  ccxt/pro/p2b.py,sha256=lO8mTtBCOU1yHQnmOQAI3USn67tsZd4nTGHDqFd4qEE,17877
388
388
  ccxt/pro/phemex.py,sha256=lD4r2KQdpkgeXGors3jtEMxoaxpEF0tl6MYXZ99GSYg,61032
389
- ccxt/pro/poloniex.py,sha256=rfZq2B_hXdc3JFJ4NhXV2KxV0flNV82nzKBbv39S1Hc,51236
389
+ ccxt/pro/poloniex.py,sha256=uEi3hlt7rLPSIN05r6wrFgaghXoIm4l7Ynu8ChMTpX0,51235
390
390
  ccxt/pro/poloniexfutures.py,sha256=8qEEqKc7_zMgv-iz0KffE8RnYBqmiyNCiDcmuyqM0Xs,41652
391
391
  ccxt/pro/probit.py,sha256=RLTnROQUmX31XQ3ymIZkiDkop3eiSVK70Yw81yDcde4,22822
392
392
  ccxt/pro/upbit.py,sha256=CSqwaNCxECo9FI7aq_7ege0c8IjWEmsoPZL06Kw9KDo,9654
@@ -527,7 +527,7 @@ ccxt/test/base/test_ticker.py,sha256=cMTIMb1oySNORUCmqI5ZzMswlEyCF6gJMah3vfvo8wQ
527
527
  ccxt/test/base/test_trade.py,sha256=PMtmB8V38dpaP-eb8h488xYMlR6D69yCOhsA1RuWrUA,2336
528
528
  ccxt/test/base/test_trading_fee.py,sha256=2aDCNJtqBkTC_AieO0l1HYGq5hz5qkWlkWb9Nv_fcwk,1066
529
529
  ccxt/test/base/test_transaction.py,sha256=BTbB4UHHXkrvYgwbrhh867nVRlevmIkIrz1W_odlQJI,1434
530
- ccxt-4.3.14.dist-info/METADATA,sha256=ezKGKYybBU91dQDLn62cKlCA7K6cQwc5iHcji-VASZ4,111193
531
- ccxt-4.3.14.dist-info/WHEEL,sha256=P2T-6epvtXQ2cBOE_U1K4_noqlJFN3tj15djMgEu4NM,110
532
- ccxt-4.3.14.dist-info/top_level.txt,sha256=CkQDuCTDKNcImPV60t36G6MdYfxsAPNiSaEwifVoVMo,5
533
- ccxt-4.3.14.dist-info/RECORD,,
530
+ ccxt-4.3.15.dist-info/METADATA,sha256=t5fRW45ZIX8JQ4Rprd-EE86T6JuofRvIqINE5mDCQ3w,111193
531
+ ccxt-4.3.15.dist-info/WHEEL,sha256=P2T-6epvtXQ2cBOE_U1K4_noqlJFN3tj15djMgEu4NM,110
532
+ ccxt-4.3.15.dist-info/top_level.txt,sha256=CkQDuCTDKNcImPV60t36G6MdYfxsAPNiSaEwifVoVMo,5
533
+ ccxt-4.3.15.dist-info/RECORD,,
File without changes