ccxt 4.3.42__py2.py3-none-any.whl → 4.3.43__py2.py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

ccxt/coinex.py CHANGED
@@ -31,7 +31,7 @@ class coinex(Exchange, ImplicitAPI):
31
31
  return self.deep_extend(super(coinex, self).describe(), {
32
32
  'id': 'coinex',
33
33
  'name': 'CoinEx',
34
- 'version': 'v1',
34
+ 'version': 'v2',
35
35
  'countries': ['CN'],
36
36
  # IP ratelimit is 400 requests per second
37
37
  # rateLimit = 1000ms / 400 = 2.5
@@ -328,6 +328,8 @@ class coinex(Exchange, ImplicitAPI):
328
328
  'futures/position-level': 1,
329
329
  'futures/liquidation-history': 1,
330
330
  'futures/basis-history': 1,
331
+ 'assets/deposit-withdraw-config': 1,
332
+ 'assets/all-deposit-withdraw-config': 1,
331
333
  },
332
334
  },
333
335
  'private': {
@@ -350,7 +352,6 @@ class coinex(Exchange, ImplicitAPI):
350
352
  'assets/deposit-address': 40,
351
353
  'assets/deposit-history': 40,
352
354
  'assets/withdraw': 40,
353
- 'assets/deposit-withdraw-config': 1,
354
355
  'assets/transfer-history': 40,
355
356
  'spot/order-status': 8,
356
357
  'spot/batch-order-status': 8,
@@ -544,126 +545,125 @@ class coinex(Exchange, ImplicitAPI):
544
545
  })
545
546
 
546
547
  def fetch_currencies(self, params={}) -> Currencies:
547
- response = self.v1PublicGetCommonAssetConfig(params)
548
+ """
549
+ fetches all available currencies on an exchange
550
+ :see: https://docs.coinex.com/api/v2/assets/deposit-withdrawal/http/list-all-deposit-withdrawal-config
551
+ :param dict [params]: extra parameters specific to the exchange API endpoint
552
+ :returns dict: an associative dictionary of currencies
553
+ """
554
+ response = self.v2PublicGetAssetsAllDepositWithdrawConfig(params)
555
+ #
548
556
  # {
549
557
  # "code": 0,
550
- # "data": {
551
- # "USDT-ERC20": {
552
- # "asset": "USDT",
553
- # "chain": "ERC20",
554
- # "withdrawal_precision": 6,
555
- # "can_deposit": True,
556
- # "can_withdraw": True,
557
- # "deposit_least_amount": "4.9",
558
- # "withdraw_least_amount": "4.9",
559
- # "withdraw_tx_fee": "4.9",
560
- # "explorer_asset_url": "https://etherscan.io/token/0xdac17f958d2ee523a2206206994597c13d831ec7"
561
- # },
562
- # ...
563
- # },
564
- # "message": "Success",
558
+ # "data": [
559
+ # {
560
+ # "asset": {
561
+ # "ccy": "CET",
562
+ # "deposit_enabled": True,
563
+ # "withdraw_enabled": True,
564
+ # "inter_transfer_enabled": True,
565
+ # "is_st": False
566
+ # },
567
+ # "chains": [
568
+ # {
569
+ # "chain": "CSC",
570
+ # "min_deposit_amount": "0.8",
571
+ # "min_withdraw_amount": "8",
572
+ # "deposit_enabled": True,
573
+ # "withdraw_enabled": True,
574
+ # "deposit_delay_minutes": 0,
575
+ # "safe_confirmations": 10,
576
+ # "irreversible_confirmations": 20,
577
+ # "deflation_rate": "0",
578
+ # "withdrawal_fee": "0.026",
579
+ # "withdrawal_precision": 8,
580
+ # "memo": "",
581
+ # "is_memo_required_for_deposit": False,
582
+ # "explorer_asset_url": ""
583
+ # },
584
+ # ]
585
+ # }
586
+ # ],
587
+ # "message": "OK"
565
588
  # }
566
589
  #
567
- data = self.safe_value(response, 'data', [])
568
- coins = list(data.keys())
590
+ data = self.safe_list(response, 'data', [])
569
591
  result: dict = {}
570
- for i in range(0, len(coins)):
571
- coin = coins[i]
572
- currency = data[coin]
573
- currencyId = self.safe_string(currency, 'asset')
574
- networkId = self.safe_string(currency, 'chain')
592
+ for i in range(0, len(data)):
593
+ coin = data[i]
594
+ asset = self.safe_dict(coin, 'asset', {})
595
+ chains = self.safe_list(coin, 'chains', [])
596
+ currencyId = self.safe_string(asset, 'ccy')
597
+ if currencyId is None:
598
+ continue # coinex returns empty structures for some reason
575
599
  code = self.safe_currency_code(currencyId)
576
- precisionString = self.parse_precision(self.safe_string(currency, 'withdrawal_precision'))
577
- precision = self.parse_number(precisionString)
578
- canDeposit = self.safe_value(currency, 'can_deposit')
579
- canWithdraw = self.safe_value(currency, 'can_withdraw')
580
- feeString = self.safe_string(currency, 'withdraw_tx_fee')
581
- fee = self.parse_number(feeString)
582
- minNetworkDepositString = self.safe_string(currency, 'deposit_least_amount')
583
- minNetworkDeposit = self.parse_number(minNetworkDepositString)
584
- minNetworkWithdrawString = self.safe_string(currency, 'withdraw_least_amount')
585
- minNetworkWithdraw = self.parse_number(minNetworkWithdrawString)
586
- if self.safe_value(result, code) is None:
587
- result[code] = {
588
- 'id': currencyId,
589
- 'numericId': None,
590
- 'code': code,
591
- 'info': None,
592
- 'name': None,
593
- 'active': canDeposit and canWithdraw,
594
- 'deposit': canDeposit,
595
- 'withdraw': canWithdraw,
596
- 'fee': fee,
597
- 'precision': precision,
598
- 'limits': {
599
- 'amount': {
600
- 'min': None,
601
- 'max': None,
602
- },
603
- 'deposit': {
604
- 'min': minNetworkDeposit,
605
- 'max': None,
606
- },
607
- 'withdraw': {
608
- 'min': minNetworkWithdraw,
609
- 'max': None,
610
- },
611
- },
612
- }
613
- minFeeString = self.safe_string(result[code], 'fee')
614
- if feeString is not None:
615
- minFeeString = feeString if (minFeeString is None) else Precise.string_min(feeString, minFeeString)
616
- depositAvailable = self.safe_value(result[code], 'deposit')
617
- depositAvailable = canDeposit if (canDeposit) else depositAvailable
618
- withdrawAvailable = self.safe_value(result[code], 'withdraw')
619
- withdrawAvailable = canWithdraw if (canWithdraw) else withdrawAvailable
620
- minDepositString = self.safe_string(result[code]['limits']['deposit'], 'min')
621
- if minNetworkDepositString is not None:
622
- minDepositString = minNetworkDepositString if (minDepositString is None) else Precise.string_min(minNetworkDepositString, minDepositString)
623
- minWithdrawString = self.safe_string(result[code]['limits']['withdraw'], 'min')
624
- if minNetworkWithdrawString is not None:
625
- minWithdrawString = minNetworkWithdrawString if (minWithdrawString is None) else Precise.string_min(minNetworkWithdrawString, minWithdrawString)
626
- minPrecisionString = self.safe_string(result[code], 'precision')
627
- if precisionString is not None:
628
- minPrecisionString = precisionString if (minPrecisionString is None) else Precise.string_min(precisionString, minPrecisionString)
629
- networks = self.safe_value(result[code], 'networks', {})
630
- network: dict = {
631
- 'info': currency,
632
- 'id': networkId,
633
- 'network': networkId,
600
+ canDeposit = self.safe_bool(asset, 'deposit_enabled')
601
+ canWithdraw = self.safe_bool(asset, 'withdraw_enabled')
602
+ firstChain = self.safe_dict(chains, 0, {})
603
+ firstPrecisionString = self.parse_precision(self.safe_string(firstChain, 'withdrawal_precision'))
604
+ result[code] = {
605
+ 'id': currencyId,
606
+ 'code': code,
634
607
  'name': None,
608
+ 'active': canDeposit and canWithdraw,
609
+ 'deposit': canDeposit,
610
+ 'withdraw': canWithdraw,
611
+ 'fee': None,
612
+ 'precision': self.parse_number(firstPrecisionString),
635
613
  'limits': {
636
614
  'amount': {
637
615
  'min': None,
638
616
  'max': None,
639
617
  },
640
618
  'deposit': {
641
- 'min': self.safe_number(currency, 'deposit_least_amount'),
619
+ 'min': None,
642
620
  'max': None,
643
621
  },
644
622
  'withdraw': {
645
- 'min': self.safe_number(currency, 'withdraw_least_amount'),
623
+ 'min': None,
646
624
  'max': None,
647
625
  },
648
626
  },
649
- 'active': canDeposit and canWithdraw,
650
- 'deposit': canDeposit,
651
- 'withdraw': canWithdraw,
652
- 'fee': fee,
653
- 'precision': precision,
627
+ 'networks': {},
628
+ 'info': coin,
654
629
  }
655
- networks[networkId] = network
656
- result[code]['networks'] = networks
657
- result[code]['active'] = depositAvailable and withdrawAvailable
658
- result[code]['deposit'] = depositAvailable
659
- result[code]['withdraw'] = withdrawAvailable
660
- info = self.safe_value(result[code], 'info', [])
661
- info.append(currency)
662
- result[code]['info'] = info
663
- result[code]['fee'] = self.parse_number(minFeeString)
664
- result[code]['precision'] = self.parse_number(minPrecisionString)
665
- result[code]['limits']['deposit']['min'] = self.parse_number(minDepositString)
666
- result[code]['limits']['withdraw']['min'] = self.parse_number(minWithdrawString)
630
+ for j in range(0, len(chains)):
631
+ chain = chains[j]
632
+ networkId = self.safe_string(chain, 'chain')
633
+ precisionString = self.parse_precision(self.safe_string(chain, 'withdrawal_precision'))
634
+ feeString = self.safe_string(chain, 'withdrawal_fee')
635
+ minNetworkDepositString = self.safe_string(chain, 'min_deposit_amount')
636
+ minNetworkWithdrawString = self.safe_string(chain, 'min_withdraw_amount')
637
+ canDepositChain = self.safe_bool(chain, 'deposit_enabled')
638
+ canWithdrawChain = self.safe_bool(chain, 'withdraw_enabled')
639
+ network: dict = {
640
+ 'id': networkId,
641
+ 'network': networkId,
642
+ 'name': None,
643
+ 'active': canDepositChain and canWithdrawChain,
644
+ 'deposit': canDepositChain,
645
+ 'withdraw': canWithdrawChain,
646
+ 'fee': self.parse_number(feeString),
647
+ 'precision': self.parse_number(precisionString),
648
+ 'limits': {
649
+ 'amount': {
650
+ 'min': None,
651
+ 'max': None,
652
+ },
653
+ 'deposit': {
654
+ 'min': self.parse_number(minNetworkDepositString),
655
+ 'max': None,
656
+ },
657
+ 'withdraw': {
658
+ 'min': self.parse_number(minNetworkWithdrawString),
659
+ 'max': None,
660
+ },
661
+ },
662
+ 'info': chain,
663
+ }
664
+ networks = self.safe_dict(result[code], 'networks', {})
665
+ networks[networkId] = network
666
+ result[code]['networks'] = networks
667
667
  return result
668
668
 
669
669
  def fetch_markets(self, params={}) -> List[Market]:
@@ -5107,7 +5107,7 @@ class coinex(Exchange, ImplicitAPI):
5107
5107
  request: dict = {
5108
5108
  'ccy': currency['id'],
5109
5109
  }
5110
- response = self.v2PrivateGetAssetsDepositWithdrawConfig(self.extend(request, params))
5110
+ response = self.v2PublicGetAssetsDepositWithdrawConfig(self.extend(request, params))
5111
5111
  #
5112
5112
  # {
5113
5113
  # "code": 0,
ccxt/phemex.py CHANGED
@@ -21,7 +21,6 @@ from ccxt.base.errors import InvalidOrder
21
21
  from ccxt.base.errors import OrderNotFound
22
22
  from ccxt.base.errors import CancelPending
23
23
  from ccxt.base.errors import DuplicateOrderId
24
- from ccxt.base.errors import NotSupported
25
24
  from ccxt.base.errors import DDoSProtection
26
25
  from ccxt.base.errors import RateLimitExceeded
27
26
  from ccxt.base.decimal_to_precision import TICK_SIZE
@@ -2772,6 +2771,7 @@ class phemex(Exchange, ImplicitAPI):
2772
2771
 
2773
2772
  def fetch_order(self, id: str, symbol: Str = None, params={}):
2774
2773
  """
2774
+ :see: https://phemex-docs.github.io/#query-orders-by-ids
2775
2775
  fetches information on an order made by the user
2776
2776
  :param str symbol: unified symbol of the market the order was made in
2777
2777
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -2781,8 +2781,6 @@ class phemex(Exchange, ImplicitAPI):
2781
2781
  raise ArgumentsRequired(self.id + ' fetchOrder() requires a symbol argument')
2782
2782
  self.load_markets()
2783
2783
  market = self.market(symbol)
2784
- if market['settle'] == 'USDT':
2785
- raise NotSupported(self.id + 'fetchOrder() is not supported yet for USDT settled swap markets') # https://github.com/phemex/phemex-api-docs/blob/master/Public-Hedged-Perpetual-API.md#query-user-order-by-orderid-or-query-user-order-by-client-order-id
2786
2784
  request: dict = {
2787
2785
  'symbol': market['id'],
2788
2786
  }
@@ -2793,7 +2791,9 @@ class phemex(Exchange, ImplicitAPI):
2793
2791
  else:
2794
2792
  request['orderID'] = id
2795
2793
  response = None
2796
- if market['spot']:
2794
+ if market['settle'] == 'USDT':
2795
+ response = self.privateGetApiDataGFuturesOrdersByOrderId(self.extend(request, params))
2796
+ elif market['spot']:
2797
2797
  response = self.privateGetSpotOrdersActive(self.extend(request, params))
2798
2798
  else:
2799
2799
  response = self.privateGetExchangeOrder(self.extend(request, params))
ccxt/pro/__init__.py CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  # ----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.3.42'
7
+ __version__ = '4.3.43'
8
8
 
9
9
  # ----------------------------------------------------------------------------
10
10
 
ccxt/pro/bitget.py CHANGED
@@ -1153,23 +1153,30 @@ class bitget(ccxt.async_support.bitget):
1153
1153
  # isolated and cross margin
1154
1154
  #
1155
1155
  # {
1156
- # "enterPointSource": "web",
1157
- # "force": "gtc",
1158
- # "feeDetail": [],
1159
- # "orderType": "limit",
1160
- # "price": "35000.000000000",
1161
- # "quoteSize": "10.500000000",
1162
- # "side": "buy",
1163
- # "status": "live",
1164
- # "baseSize": "0.000300000",
1165
- # "cTime": "1701923982427",
1166
- # "clientOid": "4902047879864dc980c4840e9906db4e",
1167
- # "fillPrice": "0.000000000",
1168
- # "baseVolume": "0.000000000",
1169
- # "fillTotalAmount": "0.000000000",
1170
- # "loanType": "auto-loan-and-repay",
1171
- # "orderId": "1116515595178356737"
1172
- # }
1156
+ # enterPointSource: "web",
1157
+ # feeDetail: [
1158
+ # {
1159
+ # feeCoin: "AAVE",
1160
+ # deduction: "no",
1161
+ # totalDeductionFee: "0",
1162
+ # totalFee: "-0.00010740",
1163
+ # },
1164
+ # ],
1165
+ # force: "gtc",
1166
+ # orderType: "limit",
1167
+ # price: "93.170000000",
1168
+ # fillPrice: "93.170000000",
1169
+ # baseSize: "0.110600000", # total amount of order
1170
+ # quoteSize: "10.304602000", # total cost of order(independently if order is filled or pending)
1171
+ # baseVolume: "0.107400000", # filled amount of order(during order's lifecycle, and not for self specific incoming update)
1172
+ # fillTotalAmount: "10.006458000", # filled cost of order(during order's lifecycle, and not for self specific incoming update)
1173
+ # side: "buy",
1174
+ # status: "partially_filled",
1175
+ # cTime: "1717875017306",
1176
+ # clientOid: "b57afe789a06454e9c560a2aab7f7201",
1177
+ # loanType: "auto-loan",
1178
+ # orderId: "1183419084588060673",
1179
+ # }
1173
1180
  #
1174
1181
  isSpot = not ('posMode' in order)
1175
1182
  isMargin = ('loanType' in order)
@@ -1210,9 +1217,9 @@ class bitget(ccxt.async_support.bitget):
1210
1217
  totalFilled = self.safe_string(order, 'accBaseVolume')
1211
1218
  if isSpot:
1212
1219
  if isMargin:
1213
- filledAmount = self.omit_zero(self.safe_string(order, 'fillTotalAmount'))
1214
- totalAmount = self.omit_zero(self.safe_string(order, 'baseSize')) # for margin trading
1215
- cost = self.safe_string(order, 'quoteSize')
1220
+ totalAmount = self.safe_string(order, 'baseSize')
1221
+ totalFilled = self.safe_string(order, 'baseVolume')
1222
+ cost = self.safe_string(order, 'fillTotalAmount')
1216
1223
  else:
1217
1224
  partialFillAmount = self.safe_string(order, 'baseVolume')
1218
1225
  if partialFillAmount is not None:
ccxt/pro/bybit.py CHANGED
@@ -133,7 +133,7 @@ class bybit(ccxt.async_support.bybit):
133
133
  },
134
134
  'streaming': {
135
135
  'ping': self.ping,
136
- 'keepAlive': 19000,
136
+ 'keepAlive': 18000,
137
137
  },
138
138
  })
139
139
 
ccxt/pro/mexc.py CHANGED
@@ -67,7 +67,7 @@ class mexc(ccxt.async_support.mexc):
67
67
  },
68
68
  'streaming': {
69
69
  'ping': self.ping,
70
- 'keepAlive': 10000,
70
+ 'keepAlive': 8000,
71
71
  },
72
72
  'exceptions': {
73
73
  },
ccxt/tradeogre.py CHANGED
@@ -9,6 +9,7 @@ from ccxt.base.types import IndexType, Int, Market, Num, Order, OrderSide, Order
9
9
  from typing import List
10
10
  from ccxt.base.errors import ExchangeError
11
11
  from ccxt.base.errors import AuthenticationError
12
+ from ccxt.base.errors import ArgumentsRequired
12
13
  from ccxt.base.errors import BadRequest
13
14
  from ccxt.base.errors import InsufficientFunds
14
15
  from ccxt.base.decimal_to_precision import TICK_SIZE
@@ -441,7 +442,7 @@ class tradeogre(Exchange, ImplicitAPI):
441
442
  """
442
443
  create a trade order
443
444
  :param str symbol: unified symbol of the market to create an order in
444
- :param str type: not used by tradeogre
445
+ :param str type: must be 'limit'
445
446
  :param str side: 'buy' or 'sell'
446
447
  :param float amount: how much of currency you want to trade in units of base currency
447
448
  :param float price: the price at which the order is to be fullfilled, in units of the quote currency
@@ -450,13 +451,15 @@ class tradeogre(Exchange, ImplicitAPI):
450
451
  """
451
452
  self.load_markets()
452
453
  market = self.market(symbol)
454
+ if type == 'market':
455
+ raise BadRequest(self.id + ' createOrder does not support market orders')
456
+ if price is None:
457
+ raise ArgumentsRequired(self.id + ' createOrder requires a limit parameter')
453
458
  request: dict = {
454
459
  'market': market['id'],
455
460
  'quantity': self.parse_to_numeric(self.amount_to_precision(symbol, amount)),
456
461
  'price': self.parse_to_numeric(self.price_to_precision(symbol, price)),
457
462
  }
458
- if type == 'market':
459
- raise BadRequest(self.id + ' createOrder does not support market orders')
460
463
  response = None
461
464
  if side == 'buy':
462
465
  response = self.privatePostOrderBuy(self.extend(request, params))
@@ -487,7 +490,10 @@ class tradeogre(Exchange, ImplicitAPI):
487
490
  :returns dict[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
488
491
  """
489
492
  self.load_markets()
490
- return self.cancel_order('all', symbol, params)
493
+ response = self.cancel_order('all', symbol, params)
494
+ return [
495
+ response,
496
+ ]
491
497
 
492
498
  def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
493
499
  """
ccxt/wavesexchange.py CHANGED
@@ -1421,7 +1421,7 @@ class wavesexchange(Exchange, ImplicitAPI):
1421
1421
  firstMessage = self.safe_value(message, 0)
1422
1422
  firstOrder = self.safe_value(firstMessage, 0)
1423
1423
  returnedId = self.safe_string(firstOrder, 'orderId')
1424
- return {
1424
+ return self.safe_order({
1425
1425
  'info': response,
1426
1426
  'id': returnedId,
1427
1427
  'clientOrderId': None,
@@ -1440,7 +1440,7 @@ class wavesexchange(Exchange, ImplicitAPI):
1440
1440
  'status': None,
1441
1441
  'fee': None,
1442
1442
  'trades': None,
1443
- }
1443
+ })
1444
1444
 
1445
1445
  def fetch_order(self, id: str, symbol: Str = None, params={}):
1446
1446
  """
ccxt/wazirx.py CHANGED
@@ -763,7 +763,26 @@ class wazirx(Exchange, ImplicitAPI):
763
763
  request: dict = {
764
764
  'symbol': market['id'],
765
765
  }
766
- return self.privateDeleteOpenOrders(self.extend(request, params))
766
+ response = self.privateDeleteOpenOrders(self.extend(request, params))
767
+ #
768
+ # [
769
+ # {
770
+ # id: "4565421197",
771
+ # symbol: "adausdt",
772
+ # type: "limit",
773
+ # side: "buy",
774
+ # status: "wait",
775
+ # price: "0.41",
776
+ # origQty: "11.00",
777
+ # executedQty: "0.00",
778
+ # avgPrice: "0.00",
779
+ # createdTime: "1718089507000",
780
+ # updatedTime: "1718089507000",
781
+ # clientOrderId: "93d2a838-e272-405d-91e7-3a7bc6d3a003"
782
+ # }
783
+ # ]
784
+ #
785
+ return self.parse_orders(response)
767
786
 
768
787
  def cancel_order(self, id: str, symbol: Str = None, params={}):
769
788
  """
@@ -831,18 +850,22 @@ class wazirx(Exchange, ImplicitAPI):
831
850
  return self.parse_order(response, market)
832
851
 
833
852
  def parse_order(self, order: dict, market: Market = None) -> Order:
834
- # {
835
- # "id":1949417813,
836
- # "symbol":"ltcusdt",
837
- # "type":"limit",
838
- # "side":"sell",
839
- # "status":"done",
840
- # "price":"146.2",
841
- # "origQty":"0.05",
842
- # "executedQty":"0.05",
843
- # "createdTime":1641252564000,
844
- # "updatedTime":1641252564000
845
- # },
853
+ #
854
+ # {
855
+ # "id": 1949417813,
856
+ # "symbol": "ltcusdt",
857
+ # "type": "limit",
858
+ # "side": "sell",
859
+ # "status": "done",
860
+ # "price": "146.2",
861
+ # "origQty": "0.05",
862
+ # "executedQty": "0.05",
863
+ # "avgPrice": "0.00",
864
+ # "createdTime": 1641252564000,
865
+ # "updatedTime": 1641252564000
866
+ # "clientOrderId": "93d2a838-e272-405d-91e7-3a7bc6d3a003"
867
+ # }
868
+ #
846
869
  created = self.safe_integer(order, 'createdTime')
847
870
  updated = self.safe_integer(order, 'updatedTime')
848
871
  marketId = self.safe_string(order, 'symbol')
@@ -857,7 +880,7 @@ class wazirx(Exchange, ImplicitAPI):
857
880
  return self.safe_order({
858
881
  'info': order,
859
882
  'id': id,
860
- 'clientOrderId': None,
883
+ 'clientOrderId': self.safe_string(order, 'clientOrderId'),
861
884
  'timestamp': created,
862
885
  'datetime': self.iso8601(created),
863
886
  'lastTradeTimestamp': updated,
@@ -873,7 +896,7 @@ class wazirx(Exchange, ImplicitAPI):
873
896
  'remaining': None,
874
897
  'cost': None,
875
898
  'fee': None,
876
- 'average': None,
899
+ 'average': self.safe_string(order, 'avgPrice'),
877
900
  'trades': [],
878
901
  }, market)
879
902
 
ccxt/zonda.py CHANGED
@@ -449,6 +449,13 @@ class zonda(Exchange, ImplicitAPI):
449
449
  # "secondBalanceId": "ab43023b-4079-414c-b340-056e3430a3af"
450
450
  # }
451
451
  #
452
+ # cancelOrder
453
+ #
454
+ # {
455
+ # status: "Ok",
456
+ # errors: []
457
+ # }
458
+ #
452
459
  marketId = self.safe_string(order, 'market')
453
460
  symbol = self.safe_symbol(marketId, market, '-')
454
461
  timestamp = self.safe_integer(order, 'time')
@@ -1455,9 +1462,10 @@ class zonda(Exchange, ImplicitAPI):
1455
1462
  'side': side,
1456
1463
  'price': price,
1457
1464
  }
1465
+ response = self.v1_01PrivateDeleteTradingOfferSymbolIdSidePrice(self.extend(request, params))
1458
1466
  # {status: "Fail", errors: ["NOT_RECOGNIZED_OFFER_TYPE"]} -- if required params are missing
1459
1467
  # {status: "Ok", errors: []}
1460
- return self.v1_01PrivateDeleteTradingOfferSymbolIdSidePrice(self.extend(request, params))
1468
+ return self.parse_order(response)
1461
1469
 
1462
1470
  def is_fiat(self, currency):
1463
1471
  fiatCurrencies: dict = {
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ccxt
3
- Version: 4.3.42
3
+ Version: 4.3.43
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
@@ -94,7 +94,7 @@ Current feature list:
94
94
  | [![bybit](https://user-images.githubusercontent.com/51840849/76547799-daff5b80-649e-11ea-87fb-3be9bac08954.jpg)](https://www.bybit.com/register?affiliate_id=35953) | bybit | [Bybit](https://www.bybit.com/register?affiliate_id=35953) | [![API Version 5](https://img.shields.io/badge/5-lightgray)](https://bybit-exchange.github.io/docs/inverse/) | [![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) | |
95
95
  | [![coinbase](https://user-images.githubusercontent.com/1294454/40811661-b6eceae2-653a-11e8-829e-10bfadb078cf.jpg)](https://www.coinbase.com/join/58cbe25a355148797479dbd2) | coinbase | [Coinbase Advanced](https://www.coinbase.com/join/58cbe25a355148797479dbd2) | [![API Version 2](https://img.shields.io/badge/2-lightgray)](https://developers.coinbase.com/api/v2) | [![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) | |
96
96
  | [![coinbaseinternational](https://github.com/ccxt/ccxt/assets/43336371/866ae638-6ab5-4ebf-ab2c-cdcce9545625)](https://international.coinbase.com) | coinbaseinternational | [Coinbase International](https://international.coinbase.com) | [![API Version 1](https://img.shields.io/badge/1-lightgray)](https://docs.cloud.coinbase.com/intx/docs) | [![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) | |
97
- | [![coinex](https://user-images.githubusercontent.com/51840849/87182089-1e05fa00-c2ec-11ea-8da9-cc73b45abbbc.jpg)](https://www.coinex.com/register?refer_code=yw5fz) | coinex | [CoinEx](https://www.coinex.com/register?refer_code=yw5fz) | [![API Version 1](https://img.shields.io/badge/1-lightgray)](https://docs.coinex.com/api/v2) | [![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) | |
97
+ | [![coinex](https://user-images.githubusercontent.com/51840849/87182089-1e05fa00-c2ec-11ea-8da9-cc73b45abbbc.jpg)](https://www.coinex.com/register?refer_code=yw5fz) | coinex | [CoinEx](https://www.coinex.com/register?refer_code=yw5fz) | [![API Version 2](https://img.shields.io/badge/2-lightgray)](https://docs.coinex.com/api/v2) | [![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) | |
98
98
  | [![cryptocom](https://user-images.githubusercontent.com/1294454/147792121-38ed5e36-c229-48d6-b49a-48d05fc19ed4.jpeg)](https://crypto.com/exch/kdacthrnxt) | cryptocom | [Crypto.com](https://crypto.com/exch/kdacthrnxt) | [![API Version 2](https://img.shields.io/badge/2-lightgray)](https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html) | [![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 Crypto.com using CCXT's referral link for a 15% discount!](https://img.shields.io/static/v1?label=Fee&message=%2d15%25&color=orange)](https://crypto.com/exch/kdacthrnxt) |
99
99
  | [![gate](https://user-images.githubusercontent.com/1294454/31784029-0313c702-b509-11e7-9ccc-bc0da6a0e435.jpg)](https://www.gate.io/signup/2436035) | gate | [Gate.io](https://www.gate.io/signup/2436035) | [![API Version 4](https://img.shields.io/badge/4-lightgray)](https://www.gate.io/docs/developers/apiv4/en/) | [![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 Gate.io using CCXT's referral link for a 20% discount!](https://img.shields.io/static/v1?label=Fee&message=%2d20%25&color=orange)](https://www.gate.io/signup/2436035) |
100
100
  | [![htx](https://user-images.githubusercontent.com/1294454/76137448-22748a80-604e-11ea-8069-6e389271911d.jpg)](https://www.huobi.com/en-us/v/register/double-invite/?inviter_id=11343840&invite_code=6rmm2223) | htx | [HTX](https://www.huobi.com/en-us/v/register/double-invite/?inviter_id=11343840&invite_code=6rmm2223) | [![API Version 1](https://img.shields.io/badge/1-lightgray)](https://huobiapi.github.io/docs/spot/v1/en/) | [![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 HTX using CCXT's referral link for a 15% discount!](https://img.shields.io/static/v1?label=Fee&message=%2d15%25&color=orange)](https://www.huobi.com/en-us/v/register/double-invite/?inviter_id=11343840&invite_code=6rmm2223) |
@@ -150,7 +150,7 @@ The CCXT library currently supports the following 98 cryptocurrency exchange mar
150
150
  | [![coinbaseexchange](https://github.com/ccxt/ccxt/assets/43336371/34a65553-88aa-4a38-a714-064bd228b97e)](https://coinbase.com/) | coinbaseexchange | [Coinbase Exchange](https://coinbase.com/) | [![API Version *](https://img.shields.io/badge/*-lightgray)](https://docs.cloud.coinbase.com/exchange/docs/) | | [![CCXT Pro](https://img.shields.io/badge/CCXT-Pro-black)](https://ccxt.pro) |
151
151
  | [![coinbaseinternational](https://github.com/ccxt/ccxt/assets/43336371/866ae638-6ab5-4ebf-ab2c-cdcce9545625)](https://international.coinbase.com) | coinbaseinternational | [Coinbase International](https://international.coinbase.com) | [![API Version 1](https://img.shields.io/badge/1-lightgray)](https://docs.cloud.coinbase.com/intx/docs) | [![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) |
152
152
  | [![coincheck](https://user-images.githubusercontent.com/51840849/87182088-1d6d6380-c2ec-11ea-9c64-8ab9f9b289f5.jpg)](https://coincheck.com) | coincheck | [coincheck](https://coincheck.com) | [![API Version *](https://img.shields.io/badge/*-lightgray)](https://coincheck.com/documents/exchange/api) | | |
153
- | [![coinex](https://user-images.githubusercontent.com/51840849/87182089-1e05fa00-c2ec-11ea-8da9-cc73b45abbbc.jpg)](https://www.coinex.com/register?refer_code=yw5fz) | coinex | [CoinEx](https://www.coinex.com/register?refer_code=yw5fz) | [![API Version 1](https://img.shields.io/badge/1-lightgray)](https://docs.coinex.com/api/v2) | [![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) |
153
+ | [![coinex](https://user-images.githubusercontent.com/51840849/87182089-1e05fa00-c2ec-11ea-8da9-cc73b45abbbc.jpg)](https://www.coinex.com/register?refer_code=yw5fz) | coinex | [CoinEx](https://www.coinex.com/register?refer_code=yw5fz) | [![API Version 2](https://img.shields.io/badge/2-lightgray)](https://docs.coinex.com/api/v2) | [![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) |
154
154
  | [![coinlist](https://github-production-user-asset-6210df.s3.amazonaws.com/1294454/281108917-eff2ae1d-ce8a-4b2a-950d-8678b12da965.jpg)](https://coinlist.co) | coinlist | [Coinlist](https://coinlist.co) | [![API Version 1](https://img.shields.io/badge/1-lightgray)](https://trade-docs.coinlist.co) | | |
155
155
  | [![coinmate](https://user-images.githubusercontent.com/51840849/87460806-1c9f3f00-c616-11ea-8c46-a77018a8f3f4.jpg)](https://coinmate.io?referral=YTFkM1RsOWFObVpmY1ZjMGREQmpTRnBsWjJJNVp3PT0) | coinmate | [CoinMate](https://coinmate.io?referral=YTFkM1RsOWFObVpmY1ZjMGREQmpTRnBsWjJJNVp3PT0) | [![API Version *](https://img.shields.io/badge/*-lightgray)](https://coinmate.docs.apiary.io) | | |
156
156
  | [![coinmetro](https://github.com/ccxt/ccxt/assets/43336371/e86f87ec-6ba3-4410-962b-f7988c5db539)](https://go.coinmetro.com/?ref=crypto24) | coinmetro | [Coinmetro](https://go.coinmetro.com/?ref=crypto24) | [![API Version 1](https://img.shields.io/badge/1-lightgray)](https://documenter.getpostman.com/view/3653795/SVfWN6KS) | | |
@@ -266,13 +266,13 @@ console.log(version, Object.keys(exchanges));
266
266
 
267
267
  All-in-one browser bundle (dependencies included), served from a CDN of your choice:
268
268
 
269
- * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.3.42/dist/ccxt.browser.min.js
270
- * unpkg: https://unpkg.com/ccxt@4.3.42/dist/ccxt.browser.min.js
269
+ * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.3.43/dist/ccxt.browser.min.js
270
+ * unpkg: https://unpkg.com/ccxt@4.3.43/dist/ccxt.browser.min.js
271
271
 
272
272
  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.
273
273
 
274
274
  ```HTML
275
- <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.3.42/dist/ccxt.browser.min.js"></script>
275
+ <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.3.43/dist/ccxt.browser.min.js"></script>
276
276
  ```
277
277
 
278
278
  Creates a global `ccxt` object: