ccxt 4.4.24__py2.py3-none-any.whl → 4.4.25__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.4.24'
25
+ __version__ = '4.4.25'
26
26
 
27
27
  # ----------------------------------------------------------------------------
28
28
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.4.24'
7
+ __version__ = '4.4.25'
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # -----------------------------------------------------------------------------
4
4
 
5
- __version__ = '4.4.24'
5
+ __version__ = '4.4.25'
6
6
 
7
7
  # -----------------------------------------------------------------------------
8
8
 
@@ -1108,17 +1108,18 @@ class bitmex(Exchange, ImplicitAPI):
1108
1108
  # set the timestamp to zero, 1970 Jan 1 00:00:00
1109
1109
  # for unrealized pnl and other transactions without a timestamp
1110
1110
  timestamp = 0 # see comments above
1111
+ fee = None
1111
1112
  feeCost = self.safe_string(item, 'fee')
1112
1113
  if feeCost is not None:
1113
1114
  feeCost = self.convert_to_real_amount(code, feeCost)
1114
- fee = {
1115
- 'cost': self.parse_to_numeric(feeCost),
1116
- 'currency': code,
1117
- }
1115
+ fee = {
1116
+ 'cost': self.parse_number(feeCost),
1117
+ 'currency': code,
1118
+ }
1118
1119
  after = self.safe_string(item, 'walletBalance')
1119
1120
  if after is not None:
1120
1121
  after = self.convert_to_real_amount(code, after)
1121
- before = self.parse_to_numeric(Precise.string_sub(self.number_to_string(after), self.number_to_string(amount)))
1122
+ before = self.parse_number(Precise.string_sub(self.number_to_string(after), self.number_to_string(amount)))
1122
1123
  direction = None
1123
1124
  if Precise.string_lt(amountString, '0'):
1124
1125
  direction = 'out'
@@ -1137,9 +1138,9 @@ class bitmex(Exchange, ImplicitAPI):
1137
1138
  'referenceAccount': referenceAccount,
1138
1139
  'type': type,
1139
1140
  'currency': code,
1140
- 'amount': self.parse_to_numeric(amount),
1141
+ 'amount': self.parse_number(amount),
1141
1142
  'before': before,
1142
- 'after': self.parse_to_numeric(after),
1143
+ 'after': self.parse_number(after),
1143
1144
  'status': status,
1144
1145
  'fee': fee,
1145
1146
  }, currency)
@@ -474,9 +474,43 @@ class coinex(Exchange, ImplicitAPI):
474
474
  'FUTURES': 'swap',
475
475
  },
476
476
  'networks': {
477
+ 'BTC': 'BTC',
477
478
  'BEP20': 'BSC',
478
- 'TRX': 'TRC20',
479
- 'ETH': 'ERC20',
479
+ 'TRC20': 'TRC20',
480
+ 'ERC20': 'ERC20',
481
+ 'BRC20': 'BRC20',
482
+ 'SOL': 'SOL',
483
+ 'TON': 'SOL',
484
+ 'BSV': 'BSV',
485
+ 'AVAXC': 'AVA_C',
486
+ 'AVAXX': 'AVA',
487
+ 'SUI': 'SUI',
488
+ 'ACA': 'ACA',
489
+ 'CHZ': 'CHILIZ',
490
+ 'ADA': 'ADA',
491
+ 'ARB': 'ARBITRUM',
492
+ 'ARBNOVA': 'ARBITRUM_NOVA',
493
+ 'OP': 'OPTIMISM',
494
+ 'APT': 'APTOS',
495
+ 'ATOM': 'ATOM',
496
+ 'FTM': 'FTM',
497
+ 'BCH': 'BCH',
498
+ 'ASTR': 'ASTR',
499
+ 'LTC': 'LTC',
500
+ 'MATIC': 'MATIC',
501
+ 'CRONOS': 'CRONOS',
502
+ 'DASH': 'DASH',
503
+ 'DOT': 'DOT',
504
+ 'ETC': 'ETC',
505
+ 'ETHW': 'ETHPOW',
506
+ 'FIL': 'FIL',
507
+ 'ZIL': 'ZIL',
508
+ 'DOGE': 'DOGE',
509
+ 'TIA': 'CELESTIA',
510
+ 'SEI': 'SEI',
511
+ 'XRP': 'XRP',
512
+ 'XMR': 'XMR',
513
+ # CSC, AE, BASE, AIPG, AKASH, POLKADOTASSETHUB ?, ALEO, STX, ALGO, ALPH, BLAST, AR, ARCH, ARDR, ARK, ARRR, MANTA, NTRN, LUNA, AURORA, AVAIL, ASC20, AVA, AYA, AZERO, BAN, BAND, BB, RUNES, BEAM, BELLSCOIN, BITCI, NEAR, AGORIC, BLOCX, BNC, BOBA, BRISE, KRC20, CANTO, CAPS, CCD, CELO, CFX, CHI, CKB, CLORE, CLV, CORE, CSPR, CTXC, DAG, DCR, DERO, DESO, DEFI, DGB, DNX, DOCK, DOGECHAIN, DYDX, DYMENSION, EGLD, ELA, ELF, ENJIN, EOSIO, ERG, ETN_SC, EVMOS, EWC, SGB, FACT, FB, FET, FIO, FIRO, NEO3, FLOW, FLARE, FLUX, LINEA, FREN, FSN, FB_BRC20, GLMR, GRIN, GRS, HACASH, HBAR, HERB, HIVE, MAPO, HMND, HNS, ZKSYNC, HTR, HUAHUA, MERLIN, ICP, ICX, INJ, IOST, IOTA, IOTX, IRIS, IRON, ONE, JOYSTREAM, KAI, KAR, KAS, KAVA, KCN, KDA, KLAY, KLY, KMD, KSM, KUB, KUJIRA, LAT, LBC, LUNC, LUKSO, MARS, METIS, MINA, MANTLE, MOB, MODE, MONA, MOVR, MTL, NEOX, NEXA, NIBI, NIMIQ, NMC, ONOMY, NRG, WAVES, NULS, OAS, OCTA, OLT, ONT, OORT, ORAI, OSMO, P3D, COMPOSABLE, PIVX, RON, POKT, POLYMESH, PRE_MARKET, PYI, QKC, QTUM, QUBIC, RSK, ROSE, ROUTE, RTM, THORCHAIN, RVN, RADIANT, SAGA, SALVIUM, SATOX, SC, SCP, _NULL, SCRT, SDN, RGBPP, SELF, SMH, SPACE, STARGAZE, STC, STEEM, STRATISEVM, STRD, STARKNET, SXP, SYS, TAIKO, TAO, TARA, TENET, THETA, TT, VENOM, VECHAIN, TOMO, VITE, VLX, VSYS, VTC, WAN, WAXP, WEMIX, XCH, XDC, XEC, XELIS, NEM, XHV, XLM, XNA, NANO, XPLA, XPR, XPRT, XRD, XTZ, XVG, XYM, ZANO, ZEC, ZEN, ZEPH, ZETA
480
514
  },
481
515
  },
482
516
  'commonCurrencies': {
@@ -3547,20 +3581,14 @@ class coinex(Exchange, ImplicitAPI):
3547
3581
  """
3548
3582
  await self.load_markets()
3549
3583
  currency = self.currency(code)
3550
- networks = self.safe_dict(currency, 'networks', {})
3551
- network = self.safe_string_2(params, 'network', 'chain')
3552
- params = self.omit(params, 'network')
3553
- networksKeys = list(networks.keys())
3554
- numOfNetworks = len(networksKeys)
3555
- if networks is not None and numOfNetworks > 1:
3556
- if network is None:
3557
- raise ArgumentsRequired(self.id + ' fetchDepositAddress() ' + code + ' requires a network parameter')
3558
- if not (network in networks):
3559
- raise ExchangeError(self.id + ' fetchDepositAddress() ' + network + ' network not supported for ' + code)
3560
3584
  request: dict = {
3561
3585
  'ccy': currency['id'],
3562
- 'chain': network,
3563
3586
  }
3587
+ networkCode = None
3588
+ networkCode, params = self.handle_network_code_and_params(params)
3589
+ if networkCode is None:
3590
+ raise ArgumentsRequired(self.id + ' fetchDepositAddress() requires a "network" parameter')
3591
+ request['chain'] = self.network_code_to_id(networkCode) # required for on-chain, not required for inter-user transfer
3564
3592
  response = await self.v2PrivateGetAssetsDepositAddress(self.extend(request, params))
3565
3593
  #
3566
3594
  # {
@@ -3573,12 +3601,7 @@ class coinex(Exchange, ImplicitAPI):
3573
3601
  # }
3574
3602
  #
3575
3603
  data = self.safe_dict(response, 'data', {})
3576
- depositAddress = self.parse_deposit_address(data, currency)
3577
- options = self.safe_dict(self.options, 'fetchDepositAddress', {})
3578
- fillResponseFromRequest = self.safe_bool(options, 'fillResponseFromRequest', True)
3579
- if fillResponseFromRequest:
3580
- depositAddress['network'] = self.network_id_to_code(network, currency).upper()
3581
- return depositAddress
3604
+ return self.parse_deposit_address(data, currency)
3582
3605
 
3583
3606
  def parse_deposit_address(self, depositAddress, currency: Currency = None) -> DepositAddress:
3584
3607
  #
@@ -4418,8 +4441,6 @@ class coinex(Exchange, ImplicitAPI):
4418
4441
  self.check_address(address)
4419
4442
  await self.load_markets()
4420
4443
  currency = self.currency(code)
4421
- networkCode = self.safe_string_upper_2(params, 'network', 'chain')
4422
- params = self.omit(params, 'network')
4423
4444
  if tag:
4424
4445
  address = address + ':' + tag
4425
4446
  request: dict = {
@@ -4427,6 +4448,8 @@ class coinex(Exchange, ImplicitAPI):
4427
4448
  'to_address': address, # must be authorized, inter-user transfer by a registered mobile phone number or an email address is supported
4428
4449
  'amount': self.number_to_string(amount), # the actual amount without fees, https://www.coinex.com/fees
4429
4450
  }
4451
+ networkCode = None
4452
+ networkCode, params = self.handle_network_code_and_params(params)
4430
4453
  if networkCode is not None:
4431
4454
  request['chain'] = self.network_code_to_id(networkCode) # required for on-chain, not required for inter-user transfer
4432
4455
  response = await self.v2PrivatePostAssetsWithdraw(self.extend(request, params))
@@ -4463,6 +4486,7 @@ class coinex(Exchange, ImplicitAPI):
4463
4486
  statuses: dict = {
4464
4487
  'audit': 'pending',
4465
4488
  'pass': 'pending',
4489
+ 'audit_required': 'pending',
4466
4490
  'processing': 'pending',
4467
4491
  'confirming': 'pending',
4468
4492
  'not_pass': 'failed',
@@ -859,7 +859,8 @@ class hitbtc(Exchange, ImplicitAPI):
859
859
  for j in range(0, len(rawNetworks)):
860
860
  rawNetwork = rawNetworks[j]
861
861
  networkId = self.safe_string_2(rawNetwork, 'protocol', 'network')
862
- network = self.safe_network(networkId)
862
+ networkCode = self.network_id_to_code(networkId)
863
+ networkCode = networkCode.upper() if (networkCode is not None) else None
863
864
  fee = self.safe_number(rawNetwork, 'payout_fee')
864
865
  networkPrecision = self.safe_number(rawNetwork, 'precision_payout')
865
866
  payinEnabledNetwork = self.safe_bool(rawNetwork, 'payin_enabled', False)
@@ -873,10 +874,10 @@ class hitbtc(Exchange, ImplicitAPI):
873
874
  withdrawEnabled = True
874
875
  elif not payoutEnabledNetwork:
875
876
  withdrawEnabled = False
876
- networks[network] = {
877
+ networks[networkCode] = {
877
878
  'info': rawNetwork,
878
879
  'id': networkId,
879
- 'network': network,
880
+ 'network': networkCode,
880
881
  'fee': fee,
881
882
  'active': activeNetwork,
882
883
  'deposit': payinEnabledNetwork,
@@ -911,12 +912,6 @@ class hitbtc(Exchange, ImplicitAPI):
911
912
  }
912
913
  return result
913
914
 
914
- def safe_network(self, networkId):
915
- if networkId is None:
916
- return None
917
- else:
918
- return networkId.upper()
919
-
920
915
  async def create_deposit_address(self, code: str, params={}):
921
916
  """
922
917
  create a currency deposit address
@@ -3298,6 +3293,7 @@ class hitbtc(Exchange, ImplicitAPI):
3298
3293
  networkEntry = networks[j]
3299
3294
  networkId = self.safe_string(networkEntry, 'network')
3300
3295
  networkCode = self.network_id_to_code(networkId)
3296
+ networkCode = networkCode.upper() if (networkCode is not None) else None
3301
3297
  withdrawFee = self.safe_number(networkEntry, 'payout_fee')
3302
3298
  isDefault = self.safe_value(networkEntry, 'default')
3303
3299
  withdrawResult: dict = {
ccxt/async_support/htx.py CHANGED
@@ -4905,15 +4905,15 @@ class htx(Exchange, ImplicitAPI):
4905
4905
  orderType = type.replace('buy-', '')
4906
4906
  orderType = orderType.replace('sell-', '')
4907
4907
  options = self.safe_value(self.options, market['type'], {})
4908
- stopPrice = self.safe_string_2(params, 'stopPrice', 'stop-price')
4909
- if stopPrice is None:
4908
+ triggerPrice = self.safe_string_n(params, ['triggerPrice', 'stopPrice', 'stop-price'])
4909
+ if triggerPrice is None:
4910
4910
  stopOrderTypes = self.safe_value(options, 'stopOrderTypes', {})
4911
4911
  if orderType in stopOrderTypes:
4912
- raise ArgumentsRequired(self.id + ' createOrder() requires a stopPrice or a stop-price parameter for a stop order')
4912
+ raise ArgumentsRequired(self.id + ' createOrder() requires a triggerPrice for a stop order')
4913
4913
  else:
4914
4914
  defaultOperator = 'lte' if (side == 'sell') else 'gte'
4915
4915
  stopOperator = self.safe_string(params, 'operator', defaultOperator)
4916
- request['stop-price'] = self.price_to_precision(symbol, stopPrice)
4916
+ request['stop-price'] = self.price_to_precision(symbol, triggerPrice)
4917
4917
  request['operator'] = stopOperator
4918
4918
  if (orderType == 'limit') or (orderType == 'limit-fok'):
4919
4919
  orderType = 'stop-' + orderType
@@ -4971,7 +4971,7 @@ class htx(Exchange, ImplicitAPI):
4971
4971
  limitOrderTypes = self.safe_value(options, 'limitOrderTypes', {})
4972
4972
  if orderType in limitOrderTypes:
4973
4973
  request['price'] = self.price_to_precision(symbol, price)
4974
- params = self.omit(params, ['stopPrice', 'stop-price', 'clientOrderId', 'client-order-id', 'operator', 'timeInForce'])
4974
+ params = self.omit(params, ['triggerPrice', 'stopPrice', 'stop-price', 'clientOrderId', 'client-order-id', 'operator', 'timeInForce'])
4975
4975
  return self.extend(request, params)
4976
4976
 
4977
4977
  def create_contract_order_request(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
@@ -5004,16 +5004,16 @@ class htx(Exchange, ImplicitAPI):
5004
5004
  type = 'fok'
5005
5005
  elif timeInForce == 'IOC':
5006
5006
  type = 'ioc'
5007
- triggerPrice = self.safe_number_2(params, 'stopPrice', 'trigger_price')
5007
+ triggerPrice = self.safe_number_n(params, ['triggerPrice', 'stopPrice', 'trigger_price'])
5008
5008
  stopLossTriggerPrice = self.safe_number_2(params, 'stopLossPrice', 'sl_trigger_price')
5009
5009
  takeProfitTriggerPrice = self.safe_number_2(params, 'takeProfitPrice', 'tp_trigger_price')
5010
5010
  trailingPercent = self.safe_string_2(params, 'trailingPercent', 'callback_rate')
5011
5011
  trailingTriggerPrice = self.safe_number(params, 'trailingTriggerPrice', price)
5012
5012
  isTrailingPercentOrder = trailingPercent is not None
5013
- isStop = triggerPrice is not None
5013
+ isTrigger = triggerPrice is not None
5014
5014
  isStopLossTriggerOrder = stopLossTriggerPrice is not None
5015
5015
  isTakeProfitTriggerOrder = takeProfitTriggerPrice is not None
5016
- if isStop:
5016
+ if isTrigger:
5017
5017
  triggerType = self.safe_string_2(params, 'triggerType', 'trigger_type', 'le')
5018
5018
  request['trigger_type'] = triggerType
5019
5019
  request['trigger_price'] = self.price_to_precision(symbol, triggerPrice)
@@ -5052,7 +5052,7 @@ class htx(Exchange, ImplicitAPI):
5052
5052
  broker = self.safe_value(self.options, 'broker', {})
5053
5053
  brokerId = self.safe_string(broker, 'id')
5054
5054
  request['channel_code'] = brokerId
5055
- params = self.omit(params, ['reduceOnly', 'stopPrice', 'stopLossPrice', 'takeProfitPrice', 'triggerType', 'leverRate', 'timeInForce', 'leverage', 'trailingPercent', 'trailingTriggerPrice'])
5055
+ params = self.omit(params, ['reduceOnly', 'triggerPrice', 'stopPrice', 'stopLossPrice', 'takeProfitPrice', 'triggerType', 'leverRate', 'timeInForce', 'leverage', 'trailingPercent', 'trailingTriggerPrice'])
5056
5056
  return self.extend(request, params)
5057
5057
 
5058
5058
  async def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
@@ -5073,7 +5073,7 @@ class htx(Exchange, ImplicitAPI):
5073
5073
  :param float amount: how much you want to trade in units of the base currency
5074
5074
  :param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
5075
5075
  :param dict [params]: extra parameters specific to the exchange API endpoint
5076
- :param float [params.stopPrice]: the price a trigger order is triggered at
5076
+ :param float [params.triggerPrice]: the price a trigger order is triggered at
5077
5077
  :param str [params.triggerType]: *contract trigger orders only* ge: greater than or equal to, le: less than or equal to
5078
5078
  :param float [params.stopLossPrice]: *contract only* the price a stop-loss order is triggered at
5079
5079
  :param float [params.takeProfitPrice]: *contract only* the price a take-profit order is triggered at
@@ -5089,12 +5089,12 @@ class htx(Exchange, ImplicitAPI):
5089
5089
  """
5090
5090
  await self.load_markets()
5091
5091
  market = self.market(symbol)
5092
- triggerPrice = self.safe_number_2(params, 'stopPrice', 'trigger_price')
5092
+ triggerPrice = self.safe_number_n(params, ['triggerPrice', 'stopPrice', 'trigger_price'])
5093
5093
  stopLossTriggerPrice = self.safe_number_2(params, 'stopLossPrice', 'sl_trigger_price')
5094
5094
  takeProfitTriggerPrice = self.safe_number_2(params, 'takeProfitPrice', 'tp_trigger_price')
5095
5095
  trailingPercent = self.safe_number(params, 'trailingPercent')
5096
5096
  isTrailingPercentOrder = trailingPercent is not None
5097
- isStop = triggerPrice is not None
5097
+ isTrigger = triggerPrice is not None
5098
5098
  isStopLossTriggerOrder = stopLossTriggerPrice is not None
5099
5099
  isTakeProfitTriggerOrder = takeProfitTriggerPrice is not None
5100
5100
  response = None
@@ -5110,7 +5110,7 @@ class htx(Exchange, ImplicitAPI):
5110
5110
  marginMode, contractRequest = self.handle_margin_mode_and_params('createOrder', contractRequest)
5111
5111
  marginMode = 'cross' if (marginMode is None) else marginMode
5112
5112
  if marginMode == 'isolated':
5113
- if isStop:
5113
+ if isTrigger:
5114
5114
  response = await self.contractPrivatePostLinearSwapApiV1SwapTriggerOrder(contractRequest)
5115
5115
  elif isStopLossTriggerOrder or isTakeProfitTriggerOrder:
5116
5116
  response = await self.contractPrivatePostLinearSwapApiV1SwapTpslOrder(contractRequest)
@@ -5119,7 +5119,7 @@ class htx(Exchange, ImplicitAPI):
5119
5119
  else:
5120
5120
  response = await self.contractPrivatePostLinearSwapApiV1SwapOrder(contractRequest)
5121
5121
  elif marginMode == 'cross':
5122
- if isStop:
5122
+ if isTrigger:
5123
5123
  response = await self.contractPrivatePostLinearSwapApiV1SwapCrossTriggerOrder(contractRequest)
5124
5124
  elif isStopLossTriggerOrder or isTakeProfitTriggerOrder:
5125
5125
  response = await self.contractPrivatePostLinearSwapApiV1SwapCrossTpslOrder(contractRequest)
@@ -5132,7 +5132,7 @@ class htx(Exchange, ImplicitAPI):
5132
5132
  if offset is None:
5133
5133
  raise ArgumentsRequired(self.id + ' createOrder() requires an extra parameter params["offset"] to be set to "open" or "close" when placing orders in inverse markets')
5134
5134
  if market['swap']:
5135
- if isStop:
5135
+ if isTrigger:
5136
5136
  response = await self.contractPrivatePostSwapApiV1SwapTriggerOrder(contractRequest)
5137
5137
  elif isStopLossTriggerOrder or isTakeProfitTriggerOrder:
5138
5138
  response = await self.contractPrivatePostSwapApiV1SwapTpslOrder(contractRequest)
@@ -5141,7 +5141,7 @@ class htx(Exchange, ImplicitAPI):
5141
5141
  else:
5142
5142
  response = await self.contractPrivatePostSwapApiV1SwapOrder(contractRequest)
5143
5143
  elif market['future']:
5144
- if isStop:
5144
+ if isTrigger:
5145
5145
  response = await self.contractPrivatePostApiV1ContractTriggerOrder(contractRequest)
5146
5146
  elif isStopLossTriggerOrder or isTakeProfitTriggerOrder:
5147
5147
  response = await self.contractPrivatePostApiV1ContractTpslOrder(contractRequest)
@@ -133,7 +133,7 @@ class woofipro(Exchange, ImplicitAPI):
133
133
  '1y': '1y',
134
134
  },
135
135
  'urls': {
136
- 'logo': 'https://github.com/ccxt/ccxt/assets/43336371/b1e7b348-a0fc-4605-8b7f-91176958fd69',
136
+ 'logo': 'https://github.com/user-attachments/assets/9ba21b8a-a9c7-4770-b7f1-ce3bcbde68c1',
137
137
  'api': {
138
138
  'public': 'https://api-evm.orderly.org',
139
139
  'private': 'https://api-evm.orderly.org',
ccxt/async_support/xt.py CHANGED
@@ -1699,6 +1699,9 @@ class xt(Exchange, ImplicitAPI):
1699
1699
  market = self.safe_market(marketId, market, '_', marketType)
1700
1700
  symbol = market['symbol']
1701
1701
  timestamp = self.safe_integer(ticker, 't')
1702
+ percentage = self.safe_string_2(ticker, 'cr', 'r')
1703
+ if percentage is not None:
1704
+ percentage = Precise.string_mul(percentage, '100')
1702
1705
  return self.safe_ticker({
1703
1706
  'symbol': symbol,
1704
1707
  'timestamp': timestamp,
@@ -1715,7 +1718,7 @@ class xt(Exchange, ImplicitAPI):
1715
1718
  'last': self.safe_string(ticker, 'c'),
1716
1719
  'previousClose': None,
1717
1720
  'change': self.safe_number(ticker, 'cv'),
1718
- 'percentage': self.safe_number_2(ticker, 'cr', 'r'),
1721
+ 'percentage': self.parse_number(percentage),
1719
1722
  'average': None,
1720
1723
  'baseVolume': None,
1721
1724
  'quoteVolume': self.safe_number_2(ticker, 'a', 'v'),
ccxt/base/exchange.py CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.4.24'
7
+ __version__ = '4.4.25'
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
ccxt/bitmex.py CHANGED
@@ -1108,17 +1108,18 @@ class bitmex(Exchange, ImplicitAPI):
1108
1108
  # set the timestamp to zero, 1970 Jan 1 00:00:00
1109
1109
  # for unrealized pnl and other transactions without a timestamp
1110
1110
  timestamp = 0 # see comments above
1111
+ fee = None
1111
1112
  feeCost = self.safe_string(item, 'fee')
1112
1113
  if feeCost is not None:
1113
1114
  feeCost = self.convert_to_real_amount(code, feeCost)
1114
- fee = {
1115
- 'cost': self.parse_to_numeric(feeCost),
1116
- 'currency': code,
1117
- }
1115
+ fee = {
1116
+ 'cost': self.parse_number(feeCost),
1117
+ 'currency': code,
1118
+ }
1118
1119
  after = self.safe_string(item, 'walletBalance')
1119
1120
  if after is not None:
1120
1121
  after = self.convert_to_real_amount(code, after)
1121
- before = self.parse_to_numeric(Precise.string_sub(self.number_to_string(after), self.number_to_string(amount)))
1122
+ before = self.parse_number(Precise.string_sub(self.number_to_string(after), self.number_to_string(amount)))
1122
1123
  direction = None
1123
1124
  if Precise.string_lt(amountString, '0'):
1124
1125
  direction = 'out'
@@ -1137,9 +1138,9 @@ class bitmex(Exchange, ImplicitAPI):
1137
1138
  'referenceAccount': referenceAccount,
1138
1139
  'type': type,
1139
1140
  'currency': code,
1140
- 'amount': self.parse_to_numeric(amount),
1141
+ 'amount': self.parse_number(amount),
1141
1142
  'before': before,
1142
- 'after': self.parse_to_numeric(after),
1143
+ 'after': self.parse_number(after),
1143
1144
  'status': status,
1144
1145
  'fee': fee,
1145
1146
  }, currency)
ccxt/coinex.py CHANGED
@@ -473,9 +473,43 @@ class coinex(Exchange, ImplicitAPI):
473
473
  'FUTURES': 'swap',
474
474
  },
475
475
  'networks': {
476
+ 'BTC': 'BTC',
476
477
  'BEP20': 'BSC',
477
- 'TRX': 'TRC20',
478
- 'ETH': 'ERC20',
478
+ 'TRC20': 'TRC20',
479
+ 'ERC20': 'ERC20',
480
+ 'BRC20': 'BRC20',
481
+ 'SOL': 'SOL',
482
+ 'TON': 'SOL',
483
+ 'BSV': 'BSV',
484
+ 'AVAXC': 'AVA_C',
485
+ 'AVAXX': 'AVA',
486
+ 'SUI': 'SUI',
487
+ 'ACA': 'ACA',
488
+ 'CHZ': 'CHILIZ',
489
+ 'ADA': 'ADA',
490
+ 'ARB': 'ARBITRUM',
491
+ 'ARBNOVA': 'ARBITRUM_NOVA',
492
+ 'OP': 'OPTIMISM',
493
+ 'APT': 'APTOS',
494
+ 'ATOM': 'ATOM',
495
+ 'FTM': 'FTM',
496
+ 'BCH': 'BCH',
497
+ 'ASTR': 'ASTR',
498
+ 'LTC': 'LTC',
499
+ 'MATIC': 'MATIC',
500
+ 'CRONOS': 'CRONOS',
501
+ 'DASH': 'DASH',
502
+ 'DOT': 'DOT',
503
+ 'ETC': 'ETC',
504
+ 'ETHW': 'ETHPOW',
505
+ 'FIL': 'FIL',
506
+ 'ZIL': 'ZIL',
507
+ 'DOGE': 'DOGE',
508
+ 'TIA': 'CELESTIA',
509
+ 'SEI': 'SEI',
510
+ 'XRP': 'XRP',
511
+ 'XMR': 'XMR',
512
+ # CSC, AE, BASE, AIPG, AKASH, POLKADOTASSETHUB ?, ALEO, STX, ALGO, ALPH, BLAST, AR, ARCH, ARDR, ARK, ARRR, MANTA, NTRN, LUNA, AURORA, AVAIL, ASC20, AVA, AYA, AZERO, BAN, BAND, BB, RUNES, BEAM, BELLSCOIN, BITCI, NEAR, AGORIC, BLOCX, BNC, BOBA, BRISE, KRC20, CANTO, CAPS, CCD, CELO, CFX, CHI, CKB, CLORE, CLV, CORE, CSPR, CTXC, DAG, DCR, DERO, DESO, DEFI, DGB, DNX, DOCK, DOGECHAIN, DYDX, DYMENSION, EGLD, ELA, ELF, ENJIN, EOSIO, ERG, ETN_SC, EVMOS, EWC, SGB, FACT, FB, FET, FIO, FIRO, NEO3, FLOW, FLARE, FLUX, LINEA, FREN, FSN, FB_BRC20, GLMR, GRIN, GRS, HACASH, HBAR, HERB, HIVE, MAPO, HMND, HNS, ZKSYNC, HTR, HUAHUA, MERLIN, ICP, ICX, INJ, IOST, IOTA, IOTX, IRIS, IRON, ONE, JOYSTREAM, KAI, KAR, KAS, KAVA, KCN, KDA, KLAY, KLY, KMD, KSM, KUB, KUJIRA, LAT, LBC, LUNC, LUKSO, MARS, METIS, MINA, MANTLE, MOB, MODE, MONA, MOVR, MTL, NEOX, NEXA, NIBI, NIMIQ, NMC, ONOMY, NRG, WAVES, NULS, OAS, OCTA, OLT, ONT, OORT, ORAI, OSMO, P3D, COMPOSABLE, PIVX, RON, POKT, POLYMESH, PRE_MARKET, PYI, QKC, QTUM, QUBIC, RSK, ROSE, ROUTE, RTM, THORCHAIN, RVN, RADIANT, SAGA, SALVIUM, SATOX, SC, SCP, _NULL, SCRT, SDN, RGBPP, SELF, SMH, SPACE, STARGAZE, STC, STEEM, STRATISEVM, STRD, STARKNET, SXP, SYS, TAIKO, TAO, TARA, TENET, THETA, TT, VENOM, VECHAIN, TOMO, VITE, VLX, VSYS, VTC, WAN, WAXP, WEMIX, XCH, XDC, XEC, XELIS, NEM, XHV, XLM, XNA, NANO, XPLA, XPR, XPRT, XRD, XTZ, XVG, XYM, ZANO, ZEC, ZEN, ZEPH, ZETA
479
513
  },
480
514
  },
481
515
  'commonCurrencies': {
@@ -3546,20 +3580,14 @@ class coinex(Exchange, ImplicitAPI):
3546
3580
  """
3547
3581
  self.load_markets()
3548
3582
  currency = self.currency(code)
3549
- networks = self.safe_dict(currency, 'networks', {})
3550
- network = self.safe_string_2(params, 'network', 'chain')
3551
- params = self.omit(params, 'network')
3552
- networksKeys = list(networks.keys())
3553
- numOfNetworks = len(networksKeys)
3554
- if networks is not None and numOfNetworks > 1:
3555
- if network is None:
3556
- raise ArgumentsRequired(self.id + ' fetchDepositAddress() ' + code + ' requires a network parameter')
3557
- if not (network in networks):
3558
- raise ExchangeError(self.id + ' fetchDepositAddress() ' + network + ' network not supported for ' + code)
3559
3583
  request: dict = {
3560
3584
  'ccy': currency['id'],
3561
- 'chain': network,
3562
3585
  }
3586
+ networkCode = None
3587
+ networkCode, params = self.handle_network_code_and_params(params)
3588
+ if networkCode is None:
3589
+ raise ArgumentsRequired(self.id + ' fetchDepositAddress() requires a "network" parameter')
3590
+ request['chain'] = self.network_code_to_id(networkCode) # required for on-chain, not required for inter-user transfer
3563
3591
  response = self.v2PrivateGetAssetsDepositAddress(self.extend(request, params))
3564
3592
  #
3565
3593
  # {
@@ -3572,12 +3600,7 @@ class coinex(Exchange, ImplicitAPI):
3572
3600
  # }
3573
3601
  #
3574
3602
  data = self.safe_dict(response, 'data', {})
3575
- depositAddress = self.parse_deposit_address(data, currency)
3576
- options = self.safe_dict(self.options, 'fetchDepositAddress', {})
3577
- fillResponseFromRequest = self.safe_bool(options, 'fillResponseFromRequest', True)
3578
- if fillResponseFromRequest:
3579
- depositAddress['network'] = self.network_id_to_code(network, currency).upper()
3580
- return depositAddress
3603
+ return self.parse_deposit_address(data, currency)
3581
3604
 
3582
3605
  def parse_deposit_address(self, depositAddress, currency: Currency = None) -> DepositAddress:
3583
3606
  #
@@ -4417,8 +4440,6 @@ class coinex(Exchange, ImplicitAPI):
4417
4440
  self.check_address(address)
4418
4441
  self.load_markets()
4419
4442
  currency = self.currency(code)
4420
- networkCode = self.safe_string_upper_2(params, 'network', 'chain')
4421
- params = self.omit(params, 'network')
4422
4443
  if tag:
4423
4444
  address = address + ':' + tag
4424
4445
  request: dict = {
@@ -4426,6 +4447,8 @@ class coinex(Exchange, ImplicitAPI):
4426
4447
  'to_address': address, # must be authorized, inter-user transfer by a registered mobile phone number or an email address is supported
4427
4448
  'amount': self.number_to_string(amount), # the actual amount without fees, https://www.coinex.com/fees
4428
4449
  }
4450
+ networkCode = None
4451
+ networkCode, params = self.handle_network_code_and_params(params)
4429
4452
  if networkCode is not None:
4430
4453
  request['chain'] = self.network_code_to_id(networkCode) # required for on-chain, not required for inter-user transfer
4431
4454
  response = self.v2PrivatePostAssetsWithdraw(self.extend(request, params))
@@ -4462,6 +4485,7 @@ class coinex(Exchange, ImplicitAPI):
4462
4485
  statuses: dict = {
4463
4486
  'audit': 'pending',
4464
4487
  'pass': 'pending',
4488
+ 'audit_required': 'pending',
4465
4489
  'processing': 'pending',
4466
4490
  'confirming': 'pending',
4467
4491
  'not_pass': 'failed',
ccxt/hitbtc.py CHANGED
@@ -859,7 +859,8 @@ class hitbtc(Exchange, ImplicitAPI):
859
859
  for j in range(0, len(rawNetworks)):
860
860
  rawNetwork = rawNetworks[j]
861
861
  networkId = self.safe_string_2(rawNetwork, 'protocol', 'network')
862
- network = self.safe_network(networkId)
862
+ networkCode = self.network_id_to_code(networkId)
863
+ networkCode = networkCode.upper() if (networkCode is not None) else None
863
864
  fee = self.safe_number(rawNetwork, 'payout_fee')
864
865
  networkPrecision = self.safe_number(rawNetwork, 'precision_payout')
865
866
  payinEnabledNetwork = self.safe_bool(rawNetwork, 'payin_enabled', False)
@@ -873,10 +874,10 @@ class hitbtc(Exchange, ImplicitAPI):
873
874
  withdrawEnabled = True
874
875
  elif not payoutEnabledNetwork:
875
876
  withdrawEnabled = False
876
- networks[network] = {
877
+ networks[networkCode] = {
877
878
  'info': rawNetwork,
878
879
  'id': networkId,
879
- 'network': network,
880
+ 'network': networkCode,
880
881
  'fee': fee,
881
882
  'active': activeNetwork,
882
883
  'deposit': payinEnabledNetwork,
@@ -911,12 +912,6 @@ class hitbtc(Exchange, ImplicitAPI):
911
912
  }
912
913
  return result
913
914
 
914
- def safe_network(self, networkId):
915
- if networkId is None:
916
- return None
917
- else:
918
- return networkId.upper()
919
-
920
915
  def create_deposit_address(self, code: str, params={}):
921
916
  """
922
917
  create a currency deposit address
@@ -3298,6 +3293,7 @@ class hitbtc(Exchange, ImplicitAPI):
3298
3293
  networkEntry = networks[j]
3299
3294
  networkId = self.safe_string(networkEntry, 'network')
3300
3295
  networkCode = self.network_id_to_code(networkId)
3296
+ networkCode = networkCode.upper() if (networkCode is not None) else None
3301
3297
  withdrawFee = self.safe_number(networkEntry, 'payout_fee')
3302
3298
  isDefault = self.safe_value(networkEntry, 'default')
3303
3299
  withdrawResult: dict = {
ccxt/htx.py CHANGED
@@ -4904,15 +4904,15 @@ class htx(Exchange, ImplicitAPI):
4904
4904
  orderType = type.replace('buy-', '')
4905
4905
  orderType = orderType.replace('sell-', '')
4906
4906
  options = self.safe_value(self.options, market['type'], {})
4907
- stopPrice = self.safe_string_2(params, 'stopPrice', 'stop-price')
4908
- if stopPrice is None:
4907
+ triggerPrice = self.safe_string_n(params, ['triggerPrice', 'stopPrice', 'stop-price'])
4908
+ if triggerPrice is None:
4909
4909
  stopOrderTypes = self.safe_value(options, 'stopOrderTypes', {})
4910
4910
  if orderType in stopOrderTypes:
4911
- raise ArgumentsRequired(self.id + ' createOrder() requires a stopPrice or a stop-price parameter for a stop order')
4911
+ raise ArgumentsRequired(self.id + ' createOrder() requires a triggerPrice for a stop order')
4912
4912
  else:
4913
4913
  defaultOperator = 'lte' if (side == 'sell') else 'gte'
4914
4914
  stopOperator = self.safe_string(params, 'operator', defaultOperator)
4915
- request['stop-price'] = self.price_to_precision(symbol, stopPrice)
4915
+ request['stop-price'] = self.price_to_precision(symbol, triggerPrice)
4916
4916
  request['operator'] = stopOperator
4917
4917
  if (orderType == 'limit') or (orderType == 'limit-fok'):
4918
4918
  orderType = 'stop-' + orderType
@@ -4970,7 +4970,7 @@ class htx(Exchange, ImplicitAPI):
4970
4970
  limitOrderTypes = self.safe_value(options, 'limitOrderTypes', {})
4971
4971
  if orderType in limitOrderTypes:
4972
4972
  request['price'] = self.price_to_precision(symbol, price)
4973
- params = self.omit(params, ['stopPrice', 'stop-price', 'clientOrderId', 'client-order-id', 'operator', 'timeInForce'])
4973
+ params = self.omit(params, ['triggerPrice', 'stopPrice', 'stop-price', 'clientOrderId', 'client-order-id', 'operator', 'timeInForce'])
4974
4974
  return self.extend(request, params)
4975
4975
 
4976
4976
  def create_contract_order_request(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
@@ -5003,16 +5003,16 @@ class htx(Exchange, ImplicitAPI):
5003
5003
  type = 'fok'
5004
5004
  elif timeInForce == 'IOC':
5005
5005
  type = 'ioc'
5006
- triggerPrice = self.safe_number_2(params, 'stopPrice', 'trigger_price')
5006
+ triggerPrice = self.safe_number_n(params, ['triggerPrice', 'stopPrice', 'trigger_price'])
5007
5007
  stopLossTriggerPrice = self.safe_number_2(params, 'stopLossPrice', 'sl_trigger_price')
5008
5008
  takeProfitTriggerPrice = self.safe_number_2(params, 'takeProfitPrice', 'tp_trigger_price')
5009
5009
  trailingPercent = self.safe_string_2(params, 'trailingPercent', 'callback_rate')
5010
5010
  trailingTriggerPrice = self.safe_number(params, 'trailingTriggerPrice', price)
5011
5011
  isTrailingPercentOrder = trailingPercent is not None
5012
- isStop = triggerPrice is not None
5012
+ isTrigger = triggerPrice is not None
5013
5013
  isStopLossTriggerOrder = stopLossTriggerPrice is not None
5014
5014
  isTakeProfitTriggerOrder = takeProfitTriggerPrice is not None
5015
- if isStop:
5015
+ if isTrigger:
5016
5016
  triggerType = self.safe_string_2(params, 'triggerType', 'trigger_type', 'le')
5017
5017
  request['trigger_type'] = triggerType
5018
5018
  request['trigger_price'] = self.price_to_precision(symbol, triggerPrice)
@@ -5051,7 +5051,7 @@ class htx(Exchange, ImplicitAPI):
5051
5051
  broker = self.safe_value(self.options, 'broker', {})
5052
5052
  brokerId = self.safe_string(broker, 'id')
5053
5053
  request['channel_code'] = brokerId
5054
- params = self.omit(params, ['reduceOnly', 'stopPrice', 'stopLossPrice', 'takeProfitPrice', 'triggerType', 'leverRate', 'timeInForce', 'leverage', 'trailingPercent', 'trailingTriggerPrice'])
5054
+ params = self.omit(params, ['reduceOnly', 'triggerPrice', 'stopPrice', 'stopLossPrice', 'takeProfitPrice', 'triggerType', 'leverRate', 'timeInForce', 'leverage', 'trailingPercent', 'trailingTriggerPrice'])
5055
5055
  return self.extend(request, params)
5056
5056
 
5057
5057
  def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
@@ -5072,7 +5072,7 @@ class htx(Exchange, ImplicitAPI):
5072
5072
  :param float amount: how much you want to trade in units of the base currency
5073
5073
  :param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
5074
5074
  :param dict [params]: extra parameters specific to the exchange API endpoint
5075
- :param float [params.stopPrice]: the price a trigger order is triggered at
5075
+ :param float [params.triggerPrice]: the price a trigger order is triggered at
5076
5076
  :param str [params.triggerType]: *contract trigger orders only* ge: greater than or equal to, le: less than or equal to
5077
5077
  :param float [params.stopLossPrice]: *contract only* the price a stop-loss order is triggered at
5078
5078
  :param float [params.takeProfitPrice]: *contract only* the price a take-profit order is triggered at
@@ -5088,12 +5088,12 @@ class htx(Exchange, ImplicitAPI):
5088
5088
  """
5089
5089
  self.load_markets()
5090
5090
  market = self.market(symbol)
5091
- triggerPrice = self.safe_number_2(params, 'stopPrice', 'trigger_price')
5091
+ triggerPrice = self.safe_number_n(params, ['triggerPrice', 'stopPrice', 'trigger_price'])
5092
5092
  stopLossTriggerPrice = self.safe_number_2(params, 'stopLossPrice', 'sl_trigger_price')
5093
5093
  takeProfitTriggerPrice = self.safe_number_2(params, 'takeProfitPrice', 'tp_trigger_price')
5094
5094
  trailingPercent = self.safe_number(params, 'trailingPercent')
5095
5095
  isTrailingPercentOrder = trailingPercent is not None
5096
- isStop = triggerPrice is not None
5096
+ isTrigger = triggerPrice is not None
5097
5097
  isStopLossTriggerOrder = stopLossTriggerPrice is not None
5098
5098
  isTakeProfitTriggerOrder = takeProfitTriggerPrice is not None
5099
5099
  response = None
@@ -5109,7 +5109,7 @@ class htx(Exchange, ImplicitAPI):
5109
5109
  marginMode, contractRequest = self.handle_margin_mode_and_params('createOrder', contractRequest)
5110
5110
  marginMode = 'cross' if (marginMode is None) else marginMode
5111
5111
  if marginMode == 'isolated':
5112
- if isStop:
5112
+ if isTrigger:
5113
5113
  response = self.contractPrivatePostLinearSwapApiV1SwapTriggerOrder(contractRequest)
5114
5114
  elif isStopLossTriggerOrder or isTakeProfitTriggerOrder:
5115
5115
  response = self.contractPrivatePostLinearSwapApiV1SwapTpslOrder(contractRequest)
@@ -5118,7 +5118,7 @@ class htx(Exchange, ImplicitAPI):
5118
5118
  else:
5119
5119
  response = self.contractPrivatePostLinearSwapApiV1SwapOrder(contractRequest)
5120
5120
  elif marginMode == 'cross':
5121
- if isStop:
5121
+ if isTrigger:
5122
5122
  response = self.contractPrivatePostLinearSwapApiV1SwapCrossTriggerOrder(contractRequest)
5123
5123
  elif isStopLossTriggerOrder or isTakeProfitTriggerOrder:
5124
5124
  response = self.contractPrivatePostLinearSwapApiV1SwapCrossTpslOrder(contractRequest)
@@ -5131,7 +5131,7 @@ class htx(Exchange, ImplicitAPI):
5131
5131
  if offset is None:
5132
5132
  raise ArgumentsRequired(self.id + ' createOrder() requires an extra parameter params["offset"] to be set to "open" or "close" when placing orders in inverse markets')
5133
5133
  if market['swap']:
5134
- if isStop:
5134
+ if isTrigger:
5135
5135
  response = self.contractPrivatePostSwapApiV1SwapTriggerOrder(contractRequest)
5136
5136
  elif isStopLossTriggerOrder or isTakeProfitTriggerOrder:
5137
5137
  response = self.contractPrivatePostSwapApiV1SwapTpslOrder(contractRequest)
@@ -5140,7 +5140,7 @@ class htx(Exchange, ImplicitAPI):
5140
5140
  else:
5141
5141
  response = self.contractPrivatePostSwapApiV1SwapOrder(contractRequest)
5142
5142
  elif market['future']:
5143
- if isStop:
5143
+ if isTrigger:
5144
5144
  response = self.contractPrivatePostApiV1ContractTriggerOrder(contractRequest)
5145
5145
  elif isStopLossTriggerOrder or isTakeProfitTriggerOrder:
5146
5146
  response = self.contractPrivatePostApiV1ContractTpslOrder(contractRequest)
ccxt/pro/__init__.py CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  # ----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.4.24'
7
+ __version__ = '4.4.25'
8
8
 
9
9
  # ----------------------------------------------------------------------------
10
10
 
ccxt/woofipro.py CHANGED
@@ -133,7 +133,7 @@ class woofipro(Exchange, ImplicitAPI):
133
133
  '1y': '1y',
134
134
  },
135
135
  'urls': {
136
- 'logo': 'https://github.com/ccxt/ccxt/assets/43336371/b1e7b348-a0fc-4605-8b7f-91176958fd69',
136
+ 'logo': 'https://github.com/user-attachments/assets/9ba21b8a-a9c7-4770-b7f1-ce3bcbde68c1',
137
137
  'api': {
138
138
  'public': 'https://api-evm.orderly.org',
139
139
  'private': 'https://api-evm.orderly.org',
ccxt/xt.py CHANGED
@@ -1698,6 +1698,9 @@ class xt(Exchange, ImplicitAPI):
1698
1698
  market = self.safe_market(marketId, market, '_', marketType)
1699
1699
  symbol = market['symbol']
1700
1700
  timestamp = self.safe_integer(ticker, 't')
1701
+ percentage = self.safe_string_2(ticker, 'cr', 'r')
1702
+ if percentage is not None:
1703
+ percentage = Precise.string_mul(percentage, '100')
1701
1704
  return self.safe_ticker({
1702
1705
  'symbol': symbol,
1703
1706
  'timestamp': timestamp,
@@ -1714,7 +1717,7 @@ class xt(Exchange, ImplicitAPI):
1714
1717
  'last': self.safe_string(ticker, 'c'),
1715
1718
  'previousClose': None,
1716
1719
  'change': self.safe_number(ticker, 'cv'),
1717
- 'percentage': self.safe_number_2(ticker, 'cr', 'r'),
1720
+ 'percentage': self.parse_number(percentage),
1718
1721
  'average': None,
1719
1722
  'baseVolume': None,
1720
1723
  'quoteVolume': self.safe_number_2(ticker, 'a', 'v'),
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ccxt
3
- Version: 4.4.24
3
+ Version: 4.4.25
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
@@ -103,7 +103,7 @@ Current feature list:
103
103
  | [![mexc](https://user-images.githubusercontent.com/1294454/137283979-8b2a818d-8633-461b-bfca-de89e8c446b2.jpg)](https://www.mexc.com/register?inviteCode=mexc-1FQ1GNu1) | mexc | [MEXC Global](https://www.mexc.com/register?inviteCode=mexc-1FQ1GNu1) | [![API Version 3](https://img.shields.io/badge/3-lightgray)](https://mexcdevelop.github.io/apidocs/) | cex | [![CCXT Certified](https://img.shields.io/badge/CCXT-Certified-green.svg)](https://github.com/ccxt/ccxt/wiki/Certification) | [![CCXT Pro](https://img.shields.io/badge/CCXT-Pro-black)](https://ccxt.pro) | |
104
104
  | [![okx](https://user-images.githubusercontent.com/1294454/152485636-38b19e4a-bece-4dec-979a-5982859ffc04.jpg)](https://www.okx.com/join/CCXT2023) | okx | [OKX](https://www.okx.com/join/CCXT2023) | [![API Version 5](https://img.shields.io/badge/5-lightgray)](https://www.okx.com/docs-v5/en/) | cex | [![CCXT Certified](https://img.shields.io/badge/CCXT-Certified-green.svg)](https://github.com/ccxt/ccxt/wiki/Certification) | [![CCXT Pro](https://img.shields.io/badge/CCXT-Pro-black)](https://ccxt.pro) | [![Sign up with OKX using CCXT's referral link for a 20% discount!](https://img.shields.io/static/v1?label=Fee&message=%2d20%25&color=orange)](https://www.okx.com/join/CCXT2023) |
105
105
  | [![woo](https://user-images.githubusercontent.com/1294454/150730761-1a00e5e0-d28c-480f-9e65-089ce3e6ef3b.jpg)](https://x.woo.org/register?ref=DIJT0CNL) | woo | [WOO X](https://x.woo.org/register?ref=DIJT0CNL) | [![API Version 1](https://img.shields.io/badge/1-lightgray)](https://docs.woo.org/) | cex | [![CCXT Certified](https://img.shields.io/badge/CCXT-Certified-green.svg)](https://github.com/ccxt/ccxt/wiki/Certification) | [![CCXT Pro](https://img.shields.io/badge/CCXT-Pro-black)](https://ccxt.pro) | [![Sign up with WOO X using CCXT's referral link for a 35% discount!](https://img.shields.io/static/v1?label=Fee&message=%2d35%25&color=orange)](https://x.woo.org/register?ref=DIJT0CNL) |
106
- | [![woofipro](https://github.com/ccxt/ccxt/assets/43336371/b1e7b348-a0fc-4605-8b7f-91176958fd69)](https://dex.woo.org/en/trade?ref=CCXT) | woofipro | [WOOFI PRO](https://dex.woo.org/en/trade?ref=CCXT) | [![API Version 1](https://img.shields.io/badge/1-lightgray)](https://orderly.network/docs/build-on-evm/building-on-evm) | dex | [![CCXT Certified](https://img.shields.io/badge/CCXT-Certified-green.svg)](https://github.com/ccxt/ccxt/wiki/Certification) | [![CCXT Pro](https://img.shields.io/badge/CCXT-Pro-black)](https://ccxt.pro) | [![Sign up with WOOFI PRO using CCXT's referral link for a 5% discount!](https://img.shields.io/static/v1?label=Fee&message=%2d5%25&color=orange)](https://dex.woo.org/en/trade?ref=CCXT) |
106
+ | [![woofipro](https://github.com/user-attachments/assets/9ba21b8a-a9c7-4770-b7f1-ce3bcbde68c1)](https://dex.woo.org/en/trade?ref=CCXT) | woofipro | [WOOFI PRO](https://dex.woo.org/en/trade?ref=CCXT) | [![API Version 1](https://img.shields.io/badge/1-lightgray)](https://orderly.network/docs/build-on-evm/building-on-evm) | dex | [![CCXT Certified](https://img.shields.io/badge/CCXT-Certified-green.svg)](https://github.com/ccxt/ccxt/wiki/Certification) | [![CCXT Pro](https://img.shields.io/badge/CCXT-Pro-black)](https://ccxt.pro) | [![Sign up with WOOFI PRO using CCXT's referral link for a 5% discount!](https://img.shields.io/static/v1?label=Fee&message=%2d5%25&color=orange)](https://dex.woo.org/en/trade?ref=CCXT) |
107
107
 
108
108
  ## Supported Cryptocurrency Exchanges
109
109
 
@@ -210,7 +210,7 @@ The CCXT library currently supports the following 104 cryptocurrency exchange ma
210
210
  | [![wazirx](https://user-images.githubusercontent.com/1294454/148647666-c109c20b-f8ac-472f-91c3-5f658cb90f49.jpeg)](https://wazirx.com/invite/k7rrnks5) | wazirx | [WazirX](https://wazirx.com/invite/k7rrnks5) | [![API Version 2](https://img.shields.io/badge/2-lightgray)](https://docs.wazirx.com/#public-rest-api-for-wazirx) | cex | | [![CCXT Pro](https://img.shields.io/badge/CCXT-Pro-black)](https://ccxt.pro) |
211
211
  | [![whitebit](https://user-images.githubusercontent.com/1294454/66732963-8eb7dd00-ee66-11e9-849b-10d9282bb9e0.jpg)](https://whitebit.com/referral/d9bdf40e-28f2-4b52-b2f9-cd1415d82963) | whitebit | [WhiteBit](https://whitebit.com/referral/d9bdf40e-28f2-4b52-b2f9-cd1415d82963) | [![API Version 4](https://img.shields.io/badge/4-lightgray)](https://github.com/whitebit-exchange/api-docs) | cex | | [![CCXT Pro](https://img.shields.io/badge/CCXT-Pro-black)](https://ccxt.pro) |
212
212
  | [![woo](https://user-images.githubusercontent.com/1294454/150730761-1a00e5e0-d28c-480f-9e65-089ce3e6ef3b.jpg)](https://x.woo.org/register?ref=DIJT0CNL) | woo | [WOO X](https://x.woo.org/register?ref=DIJT0CNL) | [![API Version 1](https://img.shields.io/badge/1-lightgray)](https://docs.woo.org/) | cex | [![CCXT Certified](https://img.shields.io/badge/CCXT-Certified-green.svg)](https://github.com/ccxt/ccxt/wiki/Certification) | [![CCXT Pro](https://img.shields.io/badge/CCXT-Pro-black)](https://ccxt.pro) |
213
- | [![woofipro](https://github.com/ccxt/ccxt/assets/43336371/b1e7b348-a0fc-4605-8b7f-91176958fd69)](https://dex.woo.org/en/trade?ref=CCXT) | woofipro | [WOOFI PRO](https://dex.woo.org/en/trade?ref=CCXT) | [![API Version 1](https://img.shields.io/badge/1-lightgray)](https://orderly.network/docs/build-on-evm/building-on-evm) | dex | [![CCXT Certified](https://img.shields.io/badge/CCXT-Certified-green.svg)](https://github.com/ccxt/ccxt/wiki/Certification) | [![CCXT Pro](https://img.shields.io/badge/CCXT-Pro-black)](https://ccxt.pro) |
213
+ | [![woofipro](https://github.com/user-attachments/assets/9ba21b8a-a9c7-4770-b7f1-ce3bcbde68c1)](https://dex.woo.org/en/trade?ref=CCXT) | woofipro | [WOOFI PRO](https://dex.woo.org/en/trade?ref=CCXT) | [![API Version 1](https://img.shields.io/badge/1-lightgray)](https://orderly.network/docs/build-on-evm/building-on-evm) | dex | [![CCXT Certified](https://img.shields.io/badge/CCXT-Certified-green.svg)](https://github.com/ccxt/ccxt/wiki/Certification) | [![CCXT Pro](https://img.shields.io/badge/CCXT-Pro-black)](https://ccxt.pro) |
214
214
  | [![xt](https://user-images.githubusercontent.com/14319357/232636712-466df2fc-560a-4ca4-aab2-b1d954a58e24.jpg)](https://www.xt.com/en/accounts/register?ref=9PTM9VW) | xt | [XT](https://www.xt.com/en/accounts/register?ref=9PTM9VW) | [![API Version 4](https://img.shields.io/badge/4-lightgray)](https://doc.xt.com/) | cex | | [![CCXT Pro](https://img.shields.io/badge/CCXT-Pro-black)](https://ccxt.pro) |
215
215
  | [![yobit](https://user-images.githubusercontent.com/1294454/27766910-cdcbfdae-5eea-11e7-9859-03fea873272d.jpg)](https://www.yobit.net) | yobit | [YoBit](https://www.yobit.net) | [![API Version 3](https://img.shields.io/badge/3-lightgray)](https://www.yobit.net/en/api/) | cex | | |
216
216
  | [![zaif](https://user-images.githubusercontent.com/1294454/27766927-39ca2ada-5eeb-11e7-972f-1b4199518ca6.jpg)](https://zaif.jp) | zaif | [Zaif](https://zaif.jp) | [![API Version 1](https://img.shields.io/badge/1-lightgray)](https://techbureau-api-document.readthedocs.io/ja/latest/index.html) | cex | | |
@@ -272,13 +272,13 @@ console.log(version, Object.keys(exchanges));
272
272
 
273
273
  All-in-one browser bundle (dependencies included), served from a CDN of your choice:
274
274
 
275
- * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.4.24/dist/ccxt.browser.min.js
276
- * unpkg: https://unpkg.com/ccxt@4.4.24/dist/ccxt.browser.min.js
275
+ * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.4.25/dist/ccxt.browser.min.js
276
+ * unpkg: https://unpkg.com/ccxt@4.4.25/dist/ccxt.browser.min.js
277
277
 
278
278
  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.
279
279
 
280
280
  ```HTML
281
- <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.4.24/dist/ccxt.browser.min.js"></script>
281
+ <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.4.25/dist/ccxt.browser.min.js"></script>
282
282
  ```
283
283
 
284
284
  Creates a global `ccxt` object:
@@ -1,4 +1,4 @@
1
- ccxt/__init__.py,sha256=AwzuzA-BWZMfP_1GZKRdQl54hzYjk_kMph58lO8Jxlg,16586
1
+ ccxt/__init__.py,sha256=88mUdDFP0tVqApyXrTKQ50ztuNG8c06dYGLiHUYAp4M,16586
2
2
  ccxt/ace.py,sha256=3KFlbRm6N9hXsKUsgZbQCFPZT5WGLm4HOjR19Q3uPts,42419
3
3
  ccxt/alpaca.py,sha256=yGBD1qwBx2lFjj_0D_4Fz9bjfmIWwGHnoApMhwaA1hc,47554
4
4
  ccxt/ascendex.py,sha256=aJ5_UysmRijYUvjenq5EDLldl2JUO6lXGofJ_NqPvJU,151676
@@ -20,7 +20,7 @@ ccxt/bitflyer.py,sha256=3IuU4cwj1e9kP_9gln3JM1q3a4UR6OsryLn0wH8hqwg,43961
20
20
  ccxt/bitget.py,sha256=qt8nxlCd4u6aIuTKPCY0gZL1s5yUjGlihBCAdJOs7jk,432060
21
21
  ccxt/bithumb.py,sha256=8oTnFWi8Ai9fnm5FPXvNmaUAVJEOqYi-18VC23cWmXY,47935
22
22
  ccxt/bitmart.py,sha256=8D8pFVsaEMJZ5PQuheTigQ_-BEfHyvieIxwlM9o1-Yw,222097
23
- ccxt/bitmex.py,sha256=w87ovaOQNJxtycsW4N7dpDzyh5AAPo5qnNS3TyBjppk,127407
23
+ ccxt/bitmex.py,sha256=yewJ5y03RKFCVAR2Q9rgEgjK1i5oqJlQiPaDkVccQt0,127426
24
24
  ccxt/bitopro.py,sha256=XV878befM45AOnlSRpMYTnaBol342JAYWbFshvJ9fvs,69358
25
25
  ccxt/bitpanda.py,sha256=aiwPkx9lKbVzt4ggoYdq_mIbMGtg5ZtGl2yRHO5xyz8,471
26
26
  ccxt/bitrue.py,sha256=N2rwD5efFrmeZXlkWuR8uRRudSH2Nhs3MU6JL-zWXls,136526
@@ -43,7 +43,7 @@ ccxt/coinbaseexchange.py,sha256=QWSx0JYePSrLUk-4I7IsJW9qUl83XAbzpK0vwqRcdOw,7917
43
43
  ccxt/coinbaseinternational.py,sha256=-hCiM3wE4_V0GHuNZimHx9SSV0ozBj4zkUZEAh0UxFg,97509
44
44
  ccxt/coincatch.py,sha256=Yov8rP-7mFShwgBW1GjIXmdClgCPB4B_gRaPQ34oYcc,240865
45
45
  ccxt/coincheck.py,sha256=SeNvZm_3p01IsW8y6b3rw67qiMu29S59HHPG6Jma_T4,35942
46
- ccxt/coinex.py,sha256=QIrA7TNmMChDnqzRIjC-o3HS3CDjWPLlWr5i3ZzwQwk,261606
46
+ ccxt/coinex.py,sha256=yMs-BMTDt4Tf5XlpUV3RFtbQTrzVulFoNjw2S811fqA,263607
47
47
  ccxt/coinlist.py,sha256=KI49yKisargPm5nApMMfWfFs3e0Uxbx9yMRibY9n7Tw,104273
48
48
  ccxt/coinmate.py,sha256=BkPcT92OQFeUQtnLDIkl-Sg0PcLrQ87RfHMFIybJoWk,46190
49
49
  ccxt/coinmetro.py,sha256=sVDcyA3ZC3MBEvslnkOepbYGlnonbf8K5MRoLIIQ2-k,80647
@@ -61,10 +61,10 @@ ccxt/gate.py,sha256=crxDxniIDQBPdLwAuK4g6KYohhNEBtTPx6NCb8320gg,342636
61
61
  ccxt/gateio.py,sha256=86AETJWODl_vA5VNeQRHZprmpNIY1HAxCddKZcnKSi8,445
62
62
  ccxt/gemini.py,sha256=cFAHx-qA26A9WMJ3i6f_uQH83Q4k6UDwS8zBQcLI5Fs,81056
63
63
  ccxt/hashkey.py,sha256=LMV9wPTn2_qT2om74OdF-IfHreaySxNHOilsNDrgB7Q,192148
64
- ccxt/hitbtc.py,sha256=K9K0bcRffitBmnRgKKwRR09WCFE6Yj58FbwrJW6LlKU,153613
64
+ ccxt/hitbtc.py,sha256=xeVD5oxt_vAYXvOAuhF_f1jvwGSz-RT3QxX5MqQhBuI,153660
65
65
  ccxt/hitbtc3.py,sha256=qRAr4Zvaju9IQWRZUohdoN7xRnzIMPq8AyYb3gPv-Is,455
66
66
  ccxt/hollaex.py,sha256=bGaqSEwR42i1etwXgSYbluStoyKcIbuj4Qx-YQkVUhM,76255
67
- ccxt/htx.py,sha256=dYbPoyLBhXd_VcR8H-e-0THSP05GRAEoNNpt40trjDI,435943
67
+ ccxt/htx.py,sha256=DOIL0lOeZYVncsB8ltiftiWCqkrEsP8cAYhqDAvBOTo,436039
68
68
  ccxt/huobi.py,sha256=4vaG7IRN7fyjaJ_ac6S-njlHOfSEN5de7aq0noznxYw,438
69
69
  ccxt/huobijp.py,sha256=Kw1HQhoox1qp-bEiGpCcJSg1UAhPVLRRi-BRbQLMljI,89741
70
70
  ccxt/hyperliquid.py,sha256=xE3XrBbLedqE8gxvKkv10-b_-yHAlfLktwkQvJ0fdPo,123439
@@ -105,8 +105,8 @@ ccxt/wavesexchange.py,sha256=Zc4OQk8RKCm_9KHFbK1sHo7MtdWqDxeoR02dxgxS7d0,114925
105
105
  ccxt/wazirx.py,sha256=aNKxEFog4dwFfl9Vwoqn8ta6EfpYwzgLo_CsfRDLKdc,53350
106
106
  ccxt/whitebit.py,sha256=tVkwl5cP52l8CFldvaGaFGE112fZzqdQ4vyDpYQgiwA,119576
107
107
  ccxt/woo.py,sha256=X0gUhdBqJuybSqR7zk3iOdkK_O_Amp1iRNJvuYQ0zAc,155418
108
- ccxt/woofipro.py,sha256=s1eZMa-1R80apoUTHt4_vQmgOfWCfcX6-HsO-ZGA6Rc,117101
109
- ccxt/xt.py,sha256=AmV7j7kCLX0EF_4RKAd3Fks9r8GZZsGiXxtJcLmsgME,203849
108
+ ccxt/woofipro.py,sha256=uX09Z2hFh3q10VukNvkzN9kb6974aGNDAvsIJT3B7MM,117099
109
+ ccxt/xt.py,sha256=xmHPPxpV3LcRfMKplvNHpK72MOsQyt2gIiY67HhoZ_E,203998
110
110
  ccxt/yobit.py,sha256=YJIyUGQ4qK1tpoTZ1aKKU8K85Vgqp3BmdbqqeiblL3Y,55374
111
111
  ccxt/zaif.py,sha256=LgeOsvAo4ShQW1s-RidgUYK4DnRU-Dk0eJG0Ca6M_9U,28862
112
112
  ccxt/zonda.py,sha256=clgLxb-WvsvbpB4hseo3X87blzI6TNrfG9hBAVJBlJ0,82800
@@ -220,7 +220,7 @@ ccxt/abstract/xt.py,sha256=JkWvsic3L2O968BCr9H5Wd5NIbRE9aTT2A-9WbAtl0c,27146
220
220
  ccxt/abstract/yobit.py,sha256=8ycfCO8ORFly9hc0Aa47sZyX4_ZKPXS9h9yJzI-uQ7Q,1339
221
221
  ccxt/abstract/zaif.py,sha256=m15WHdl3gYy0GOXNZ8NEH8eE7sVh8c0T_ITNuU8vXeU,3935
222
222
  ccxt/abstract/zonda.py,sha256=X-hCW0SdX3YKZWixDyW-O2211M58Rno8kKJ6quY7rw4,7183
223
- ccxt/async_support/__init__.py,sha256=V__594frlZDkcYGolWMx-vM8d_LT2NVDpzG3hVqhblU,16399
223
+ ccxt/async_support/__init__.py,sha256=QoKJWcd8Vfps6-gxfoOj7AA7xs5xV7RsVZQQjjGohT0,16399
224
224
  ccxt/async_support/ace.py,sha256=ucCkKaWRkILAIK9g4iEi1Q_-zmn0V89-rX8Al4WdK8s,42643
225
225
  ccxt/async_support/alpaca.py,sha256=lwaRgyLZH82z1SeIF43OePicJ2v9i6a75iK7ZXb-0YE,47766
226
226
  ccxt/async_support/ascendex.py,sha256=YcGVveIDir8A1rDak-DdS_qVO1yPwAUX9sRDwCVNX80,152489
@@ -242,7 +242,7 @@ ccxt/async_support/bitflyer.py,sha256=Mog9b-SSkZ-MEnIIO5kgxiIFJ4BVsBupHTIZwJyCi2
242
242
  ccxt/async_support/bitget.py,sha256=gmXaxFdSmxmiBje_y5B7_Rr5NYonPIrW8BGUbBfAmw0,433732
243
243
  ccxt/async_support/bithumb.py,sha256=Q0Cx_cRKZRfdpBAhQyINm63Qw3M6BRYQRiF0UqYzfis,48214
244
244
  ccxt/async_support/bitmart.py,sha256=WNfWDZvw8lgzC8WGvuR67-07uqtt_woyfVPeua3IhXQ,223089
245
- ccxt/async_support/bitmex.py,sha256=j9ohrBbNDcfR67QnPuuqrqz3pxEHpVtb0WhRKPPCYQ8,127985
245
+ ccxt/async_support/bitmex.py,sha256=ocfsY_xReNJPA-bk8yqEWwP0x2LXpRvASCgB66RMxNg,128004
246
246
  ccxt/async_support/bitopro.py,sha256=uWrH_HdRkf0UCs-N_JE1hCN6eWYWwXpc8VXMb0niM78,69762
247
247
  ccxt/async_support/bitpanda.py,sha256=2k3URBWrpnh2xHa7JiYenI7_4MW5UeOPGzetlmRkR4U,485
248
248
  ccxt/async_support/bitrue.py,sha256=ymqJnYEAEkAiRZW4ZOBVJRGLyQz-7nsjoV7IHSRvqlk,137184
@@ -265,7 +265,7 @@ ccxt/async_support/coinbaseexchange.py,sha256=LgswQGPBKM2FZ3qeQCXxf4_88mp_r90rGw
265
265
  ccxt/async_support/coinbaseinternational.py,sha256=lkBNMcyDi6V_ilZ3co-33wTHVsyn87XDdXiW8ItUKZw,98123
266
266
  ccxt/async_support/coincatch.py,sha256=p3UWNXDSQpBVB8yfGQXx3E4nkDcNz4eMPolrh6WdKYM,241923
267
267
  ccxt/async_support/coincheck.py,sha256=N_0cDMAiFRC4G--QgOmSH8esKDr_lEVZUpukc4QoHk8,36148
268
- ccxt/async_support/coinex.py,sha256=U9nRX2ZsvQRqV7I5b-jyintNy5pA2Bad8lOokXt0l-M,262894
268
+ ccxt/async_support/coinex.py,sha256=kJKDm1p83pPbegL9yCDePLE-77FCguH5RIQjKs0Ab4I,264895
269
269
  ccxt/async_support/coinlist.py,sha256=VOqcXFP1fpK5vXKALS8GcioZhb1o-VvhpOUym594xl8,104761
270
270
  ccxt/async_support/coinmate.py,sha256=NI58zYMkuOL9lB3UFzyjUNbuFZGrtjZbb4PBFTOsbz4,46456
271
271
  ccxt/async_support/coinmetro.py,sha256=7Ao4bkTg4xR1vD9EB9y9oI65_s5fXPB6u9k2wP9gSwo,80967
@@ -283,10 +283,10 @@ ccxt/async_support/gate.py,sha256=ZCArwuNHQdZ3yWCVRgRl-6RD0mQ0ou_Qwb6UsVZ1d60,34
283
283
  ccxt/async_support/gateio.py,sha256=6_t032F9p9x5KGTjtSuqGXITzFOx-XAQBYLpsuQjzxw,459
284
284
  ccxt/async_support/gemini.py,sha256=gy0ALSeHrenXa2aJoAW1alVOgF6rUNxUoydX5Degikc,81580
285
285
  ccxt/async_support/hashkey.py,sha256=XaSBqm0eh3R_2HCbOCZWaLuqJwVg5DJbttvfFYJpNZA,192990
286
- ccxt/async_support/hitbtc.py,sha256=wWHmgPCEBLf0nj-unVu1LtkRPgZvjil22I4S79a-VA8,154659
286
+ ccxt/async_support/hitbtc.py,sha256=U9HhGwPrFNVOu_bM3aiXCfgBHpDb9qgT43W8e_TCx88,154706
287
287
  ccxt/async_support/hitbtc3.py,sha256=dmSYoD2o4av_zzbZI8HNIoj8BWxA7QozsVpy8JaOXzU,469
288
288
  ccxt/async_support/hollaex.py,sha256=k_KeUA5jEiyA7ypOAZsYL4RBonNG6dYxb50mpvWw_qQ,76689
289
- ccxt/async_support/htx.py,sha256=0zrK5pkUnMUSfCoZcsEH2pparnzjHgeBCHedmChPPsg,438335
289
+ ccxt/async_support/htx.py,sha256=dtwWXcwe4CLsLpMavK32wJTlrsrg_wZrzjrCPRvF5Ho,438431
290
290
  ccxt/async_support/huobi.py,sha256=fup0j6wQ1khAtfbb1H4CSyJAOzhxuoHMmrM6sgTuhr8,452
291
291
  ccxt/async_support/huobijp.py,sha256=4Pj8qPn2xzzyvdsy08gnbiF-eSKXQNT0p6VIOVkpisM,90241
292
292
  ccxt/async_support/hyperliquid.py,sha256=kHceKSc0j6BqTjhENg1RKFHvp9YtJdqMOhZBaS2qmVU,124103
@@ -327,13 +327,13 @@ ccxt/async_support/wavesexchange.py,sha256=7vV54oIHgufX5InrRaPqvcBTqm7DEV09SNozt
327
327
  ccxt/async_support/wazirx.py,sha256=ZHahzytYKnpjbqz4BRT8cLngExQ8SChcdajdYHzqGE0,53652
328
328
  ccxt/async_support/whitebit.py,sha256=Qoh7p4WO6f3nmBRi6-MCDrfVeAyd82mfWTAmCaMD2mQ,120226
329
329
  ccxt/async_support/woo.py,sha256=XnCo3jreMU5V1h5m67eggf_2YLpo0WNlJxDA5Mk60TI,156398
330
- ccxt/async_support/woofipro.py,sha256=1E3qKrbpJGevjTx8dMij3C3e_-jvRu53_uVl9j5O9Fg,117793
331
- ccxt/async_support/xt.py,sha256=Ycs3FYlXFYZEHZ3XEidri6G29n7aRqKiwhn8YjttfG8,205015
330
+ ccxt/async_support/woofipro.py,sha256=crhkod3OzxfUy4tXoEVreng-aUFXj9gRGI-5UnaDoM4,117791
331
+ ccxt/async_support/xt.py,sha256=1ouG2nlAfdTOtSQvBah4htaXjr21JThEIj4DZNCocec,205164
332
332
  ccxt/async_support/yobit.py,sha256=gMA6Fy7hbcF6ztNBbuow_pW6cwui5n2TWE8RRKMmls0,55702
333
333
  ccxt/async_support/zaif.py,sha256=-ZTr8M2JaIRCL90VrbCDXBMAsZwbiwsFChSQ2rWODuQ,29044
334
334
  ccxt/async_support/zonda.py,sha256=Z4gA6o0bF_4MarQ5KiR2Zwi2wpmOuZTHS1JChAtNWjo,83114
335
335
  ccxt/async_support/base/__init__.py,sha256=aVYSsFi--b4InRs9zDN_wtCpj8odosAB726JdUHavrk,67
336
- ccxt/async_support/base/exchange.py,sha256=4jvFhAYNDbGPAZLf1d7BEOFtRfSWaozZ1bpmwfcj8Eg,114218
336
+ ccxt/async_support/base/exchange.py,sha256=axBG5cUHqnKzYiP3HSPru4oF2YTKmmsa55gqUl9w6wQ,114218
337
337
  ccxt/async_support/base/throttler.py,sha256=tvDVcdRUVYi8fZRlEcnqtgzcgB_KMUMRs5Pu8tuU-tU,1847
338
338
  ccxt/async_support/base/ws/__init__.py,sha256=uockzpLuwntKGZbs5EOWFe-Zg-k6Cj7GhNJLc_RX0so,1791
339
339
  ccxt/async_support/base/ws/aiohttp_client.py,sha256=5IEiT0elWI9a7Vr-KV0jgmlbpLJWBzIlrLaCkTKGaqY,5752
@@ -347,10 +347,10 @@ ccxt/async_support/base/ws/order_book_side.py,sha256=GhnGUt78pJ-AYL_Dq9produGjmB
347
347
  ccxt/base/__init__.py,sha256=eTx1OE3HJjspFUQjGm6LBhaQiMKJnXjkdP-JUXknyQ0,1320
348
348
  ccxt/base/decimal_to_precision.py,sha256=fgWRBzRTtsf3r2INyS4f7WHlzgjB5YM1ekiwqD21aac,6634
349
349
  ccxt/base/errors.py,sha256=Pad-6ugvGUwhoYuKUliX-N7FTrcnKCQGFjsaq2tMn0I,4610
350
- ccxt/base/exchange.py,sha256=ZszPexbujHFZXAmpU1-XrFrO7fGYmfOvgdo20QYRCu0,303646
350
+ ccxt/base/exchange.py,sha256=fE5naPn5NnPxg-EfRUe7HJfF-TQ4hXwvu57iMo_6m2k,303646
351
351
  ccxt/base/precise.py,sha256=koce64Yrp6vFbGijJtUt-QQ6XhJgeGTCksZ871FPp_A,8886
352
352
  ccxt/base/types.py,sha256=5VRXAPPjQe2D7wjlzklrE8eGwAhllB-KXehglgHeu7s,10199
353
- ccxt/pro/__init__.py,sha256=0wG2YXnft4UMa77buzSXW8cJjFbe6vTIv-sIelGN21s,7925
353
+ ccxt/pro/__init__.py,sha256=BaNLsHq-58rjuZDxw1bso21Qg7FZeZu-bIOH9oJIFzI,7925
354
354
  ccxt/pro/alpaca.py,sha256=xh1yg1Ok-Zh_Mfx-MBjNrfJDs6MUU0exFfEj3GuQPC4,27631
355
355
  ccxt/pro/ascendex.py,sha256=QueLgISoIxgGSOta2W7En4pwAsEXbTP5q5ef4UjpTQQ,37524
356
356
  ccxt/pro/bequant.py,sha256=33OEUWBi4D9-2w8CmkwN3aF1qS-AlLqX3pxrWwNbXPY,1552
@@ -655,8 +655,8 @@ ccxt/test/tests_async.py,sha256=8TdpWiswLAVMF85CVBfMRqt8lFByr1Su7w5IgZ_w72w,8620
655
655
  ccxt/test/tests_helpers.py,sha256=z5TiaK0WyUCmM_uGTFz7cgMNqNwG_SMI9qk7yec5ces,9693
656
656
  ccxt/test/tests_init.py,sha256=GodMIrJue4KBHHqD4vSPZxokPWpxbZIuEp19UdxlFAg,1166
657
657
  ccxt/test/tests_sync.py,sha256=EEc20Cjl7u-EJ6S-lR0VXJmjpX1ew-oRS7uYceVxQ4A,85249
658
- ccxt-4.4.24.dist-info/LICENSE.txt,sha256=EIb9221AhMHV7xF1_55STFdKTFsnJVJYkRpY2Lnvo5w,1068
659
- ccxt-4.4.24.dist-info/METADATA,sha256=5O7vAb3_nD2kh72Ux81-HYev9XqoXhDh6NJJG1DPbnU,115162
660
- ccxt-4.4.24.dist-info/WHEEL,sha256=z9j0xAa_JmUKMpmz72K0ZGALSM_n-wQVmGbleXx2VHg,110
661
- ccxt-4.4.24.dist-info/top_level.txt,sha256=CkQDuCTDKNcImPV60t36G6MdYfxsAPNiSaEwifVoVMo,5
662
- ccxt-4.4.24.dist-info/RECORD,,
658
+ ccxt-4.4.25.dist-info/LICENSE.txt,sha256=EIb9221AhMHV7xF1_55STFdKTFsnJVJYkRpY2Lnvo5w,1068
659
+ ccxt-4.4.25.dist-info/METADATA,sha256=i0UtyzY1UXj9iONNI4sIY-F6KLfLvT7UCS3yJnOoyHU,115162
660
+ ccxt-4.4.25.dist-info/WHEEL,sha256=z9j0xAa_JmUKMpmz72K0ZGALSM_n-wQVmGbleXx2VHg,110
661
+ ccxt-4.4.25.dist-info/top_level.txt,sha256=CkQDuCTDKNcImPV60t36G6MdYfxsAPNiSaEwifVoVMo,5
662
+ ccxt-4.4.25.dist-info/RECORD,,
File without changes