ccxt 4.2.100__py2.py3-none-any.whl → 4.3.1__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/bitget.py CHANGED
@@ -58,6 +58,7 @@ class bitget(Exchange, ImplicitAPI):
58
58
  'cancelOrders': True,
59
59
  'closeAllPositions': True,
60
60
  'closePosition': True,
61
+ 'createConvertTrade': True,
61
62
  'createDepositAddress': False,
62
63
  'createMarketBuyOrderWithCost': True,
63
64
  'createMarketOrderWithCost': False,
@@ -7866,8 +7867,8 @@ class bitget(Exchange, ImplicitAPI):
7866
7867
  """
7867
7868
  self.load_markets()
7868
7869
  request = {
7869
- 'fromCoin': fromCode.upper(),
7870
- 'toCoin': toCode.upper(),
7870
+ 'fromCoin': fromCode,
7871
+ 'toCoin': toCode,
7871
7872
  'fromCoinSize': self.number_to_string(amount),
7872
7873
  }
7873
7874
  response = self.privateConvertGetV2ConvertQuotedPrice(self.extend(request, params))
@@ -7894,6 +7895,54 @@ class bitget(Exchange, ImplicitAPI):
7894
7895
  toCurrency = self.currency(toCurrencyId)
7895
7896
  return self.parse_conversion(data, fromCurrency, toCurrency)
7896
7897
 
7898
+ def create_convert_trade(self, id: str, fromCode: str, toCode: str, amount: Num = None, params={}) -> Conversion:
7899
+ """
7900
+ convert from one currency to another
7901
+ :see: https://www.bitget.com/api-doc/common/convert/Trade
7902
+ :param str id: the id of the trade that you want to make
7903
+ :param str fromCode: the currency that you want to sell and convert from
7904
+ :param str toCode: the currency that you want to buy and convert into
7905
+ :param float amount: how much you want to trade in units of the from currency
7906
+ :param dict [params]: extra parameters specific to the exchange API endpoint
7907
+ :param str params['price']: the price of the conversion, obtained from fetchConvertQuote()
7908
+ :param str params['toAmount']: the amount you want to trade in units of the toCurrency, obtained from fetchConvertQuote()
7909
+ :returns dict: a `conversion structure <https://docs.ccxt.com/#/?id=conversion-structure>`
7910
+ """
7911
+ self.load_markets()
7912
+ price = self.safe_string_2(params, 'price', 'cnvtPrice')
7913
+ if price is None:
7914
+ raise ArgumentsRequired(self.id + ' createConvertTrade() requires a price parameter')
7915
+ toAmount = self.safe_string_2(params, 'toAmount', 'toCoinSize')
7916
+ if toAmount is None:
7917
+ raise ArgumentsRequired(self.id + ' createConvertTrade() requires a toAmount parameter')
7918
+ params = self.omit(params, ['price', 'toAmount'])
7919
+ request = {
7920
+ 'traceId': id,
7921
+ 'fromCoin': fromCode,
7922
+ 'toCoin': toCode,
7923
+ 'fromCoinSize': self.number_to_string(amount),
7924
+ 'toCoinSize': toAmount,
7925
+ 'cnvtPrice': price,
7926
+ }
7927
+ response = self.privateConvertPostV2ConvertTrade(self.extend(request, params))
7928
+ #
7929
+ # {
7930
+ # "code": "00000",
7931
+ # "msg": "success",
7932
+ # "requestTime": 1712123746203,
7933
+ # "data": {
7934
+ # "cnvtPrice": "0.99940076",
7935
+ # "toCoin": "USDC",
7936
+ # "toCoinSize": "4.99700379",
7937
+ # "ts": "1712123746217"
7938
+ # }
7939
+ # }
7940
+ #
7941
+ data = self.safe_dict(response, 'data', {})
7942
+ toCurrencyId = self.safe_string(data, 'toCoin', toCode)
7943
+ toCurrency = self.currency(toCurrencyId)
7944
+ return self.parse_conversion(data, None, toCurrency)
7945
+
7897
7946
  def parse_conversion(self, conversion, fromCurrency: Currency = None, toCurrency: Currency = None) -> Conversion:
7898
7947
  #
7899
7948
  # fetchConvertQuote
@@ -7908,6 +7957,15 @@ class bitget(Exchange, ImplicitAPI):
7908
7957
  # "fee": "0"
7909
7958
  # }
7910
7959
  #
7960
+ # createConvertTrade
7961
+ #
7962
+ # {
7963
+ # "cnvtPrice": "0.99940076",
7964
+ # "toCoin": "USDC",
7965
+ # "toCoinSize": "4.99700379",
7966
+ # "ts": "1712123746217"
7967
+ # }
7968
+ #
7911
7969
  timestamp = self.safe_integer(conversion, 'ts')
7912
7970
  fromCoin = self.safe_string(conversion, 'fromCoin')
7913
7971
  fromCode = self.safe_currency_code(fromCoin, fromCurrency)
ccxt/bybit.py CHANGED
@@ -4997,7 +4997,7 @@ class bybit(Exchange, ImplicitAPI):
4997
4997
  coin = self.safe_string(result, 'coin')
4998
4998
  currency = self.currency(coin)
4999
4999
  parsed = self.parse_deposit_addresses(chains, [currency['code']], False, {
5000
- 'currency': currency['id'],
5000
+ 'currency': currency['code'],
5001
5001
  })
5002
5002
  return self.index_by(parsed, 'network')
5003
5003
 
ccxt/coinex.py CHANGED
@@ -616,54 +616,52 @@ class coinex(Exchange, ImplicitAPI):
616
616
  def fetch_markets(self, params={}) -> List[Market]:
617
617
  """
618
618
  retrieves data on all markets for coinex
619
- :see: https://viabtc.github.io/coinex_api_en_doc/spot/#docsspot001_market002_all_market_info
620
- :see: https://viabtc.github.io/coinex_api_en_doc/futures/#docsfutures001_http006_market_list
619
+ :see: https://docs.coinex.com/api/v2/spot/market/http/list-market
620
+ :see: https://docs.coinex.com/api/v2/futures/market/http/list-market
621
621
  :param dict [params]: extra parameters specific to the exchange API endpoint
622
622
  :returns dict[]: an array of objects representing market data
623
623
  """
624
- promises = [
624
+ promisesUnresolved = [
625
625
  self.fetch_spot_markets(params),
626
626
  self.fetch_contract_markets(params),
627
627
  ]
628
- promises = promises
628
+ promises = promisesUnresolved
629
629
  spotMarkets = promises[0]
630
630
  swapMarkets = promises[1]
631
631
  return self.array_concat(spotMarkets, swapMarkets)
632
632
 
633
633
  def fetch_spot_markets(self, params):
634
- response = self.v1PublicGetMarketInfo(params)
634
+ response = self.v2PublicGetSpotMarket(params)
635
635
  #
636
636
  # {
637
637
  # "code": 0,
638
- # "data": {
639
- # "WAVESBTC": {
640
- # "name": "WAVESBTC",
641
- # "min_amount": "1",
642
- # "maker_fee_rate": "0.001",
643
- # "taker_fee_rate": "0.001",
644
- # "pricing_name": "BTC",
645
- # "pricing_decimal": 8,
646
- # "trading_name": "WAVES",
647
- # "trading_decimal": 8
648
- # }
649
- # }
638
+ # "data": [
639
+ # {
640
+ # "base_ccy": "SORA",
641
+ # "base_ccy_precision": 8,
642
+ # "is_amm_available": True,
643
+ # "is_margin_available": False,
644
+ # "maker_fee_rate": "0.003",
645
+ # "market": "SORAUSDT",
646
+ # "min_amount": "500",
647
+ # "quote_ccy": "USDT",
648
+ # "quote_ccy_precision": 6,
649
+ # "taker_fee_rate": "0.003"
650
+ # },
651
+ # ],
652
+ # "message": "OK"
650
653
  # }
651
654
  #
652
- markets = self.safe_value(response, 'data', {})
655
+ markets = self.safe_list(response, 'data', [])
653
656
  result = []
654
- keys = list(markets.keys())
655
- for i in range(0, len(keys)):
656
- key = keys[i]
657
- market = markets[key]
658
- id = self.safe_string(market, 'name')
659
- tradingName = self.safe_string(market, 'trading_name')
660
- baseId = tradingName
661
- quoteId = self.safe_string(market, 'pricing_name')
657
+ for i in range(0, len(markets)):
658
+ market = markets[i]
659
+ id = self.safe_string(market, 'market')
660
+ baseId = self.safe_string(market, 'base_ccy')
661
+ quoteId = self.safe_string(market, 'quote_ccy')
662
662
  base = self.safe_currency_code(baseId)
663
663
  quote = self.safe_currency_code(quoteId)
664
664
  symbol = base + '/' + quote
665
- if tradingName == id:
666
- symbol = id
667
665
  result.append({
668
666
  'id': id,
669
667
  'symbol': symbol,
@@ -691,8 +689,8 @@ class coinex(Exchange, ImplicitAPI):
691
689
  'strike': None,
692
690
  'optionType': None,
693
691
  'precision': {
694
- 'amount': self.parse_number(self.parse_precision(self.safe_string(market, 'trading_decimal'))),
695
- 'price': self.parse_number(self.parse_precision(self.safe_string(market, 'pricing_decimal'))),
692
+ 'amount': self.parse_number(self.parse_precision(self.safe_string(market, 'base_ccy_precision'))),
693
+ 'price': self.parse_number(self.parse_precision(self.safe_string(market, 'quote_ccy_precision'))),
696
694
  },
697
695
  'limits': {
698
696
  'leverage': {
@@ -718,45 +716,43 @@ class coinex(Exchange, ImplicitAPI):
718
716
  return result
719
717
 
720
718
  def fetch_contract_markets(self, params):
721
- response = self.v1PerpetualPublicGetMarketList(params)
719
+ response = self.v2PublicGetFuturesMarket(params)
722
720
  #
723
721
  # {
724
722
  # "code": 0,
725
723
  # "data": [
726
724
  # {
727
- # "name": "BTCUSD",
728
- # "type": 2, # 1: USDT-M Contracts, 2: Coin-M Contracts
729
- # "leverages": ["3", "5", "8", "10", "15", "20", "30", "50", "100"],
730
- # "stock": "BTC",
731
- # "money": "USD",
732
- # "fee_prec": 5,
733
- # "stock_prec": 8,
734
- # "money_prec": 1,
735
- # "amount_prec": 0,
736
- # "amount_min": "10",
737
- # "multiplier": "1",
738
- # "tick_size": "0.1", # Min. Price Increment
739
- # "available": True
725
+ # "base_ccy": "BTC",
726
+ # "base_ccy_precision": 8,
727
+ # "contract_type": "inverse",
728
+ # "leverage": ["1","2","3","5","8","10","15","20","30","50","100"],
729
+ # "maker_fee_rate": "0",
730
+ # "market": "BTCUSD",
731
+ # "min_amount": "10",
732
+ # "open_interest_volume": "2566879",
733
+ # "quote_ccy": "USD",
734
+ # "quote_ccy_precision": 2,
735
+ # "taker_fee_rate": "0"
740
736
  # },
741
737
  # ],
742
738
  # "message": "OK"
743
739
  # }
744
740
  #
745
- markets = self.safe_value(response, 'data', [])
741
+ markets = self.safe_list(response, 'data', [])
746
742
  result = []
747
743
  for i in range(0, len(markets)):
748
744
  entry = markets[i]
749
745
  fees = self.fees
750
- leverages = self.safe_value(entry, 'leverages', [])
751
- subType = self.safe_integer(entry, 'type')
752
- linear = (subType == 1)
753
- inverse = (subType == 2)
754
- id = self.safe_string(entry, 'name')
755
- baseId = self.safe_string(entry, 'stock')
756
- quoteId = self.safe_string(entry, 'money')
746
+ leverages = self.safe_list(entry, 'leverage', [])
747
+ subType = self.safe_string(entry, 'contract_type')
748
+ linear = (subType == 'linear')
749
+ inverse = (subType == 'inverse')
750
+ id = self.safe_string(entry, 'market')
751
+ baseId = self.safe_string(entry, 'base_ccy')
752
+ quoteId = self.safe_string(entry, 'quote_ccy')
757
753
  base = self.safe_currency_code(baseId)
758
754
  quote = self.safe_currency_code(quoteId)
759
- settleId = 'USDT' if (subType == 1) else baseId
755
+ settleId = 'USDT' if (subType == 'linear') else baseId
760
756
  settle = self.safe_currency_code(settleId)
761
757
  symbol = base + '/' + quote + ':' + settle
762
758
  leveragesLength = len(leverages)
@@ -775,20 +771,20 @@ class coinex(Exchange, ImplicitAPI):
775
771
  'swap': True,
776
772
  'future': False,
777
773
  'option': False,
778
- 'active': self.safe_value(entry, 'available'),
774
+ 'active': None,
779
775
  'contract': True,
780
776
  'linear': linear,
781
777
  'inverse': inverse,
782
778
  'taker': fees['trading']['taker'],
783
779
  'maker': fees['trading']['maker'],
784
- 'contractSize': self.safe_number(entry, 'multiplier'),
780
+ 'contractSize': self.parse_number('1'),
785
781
  'expiry': None,
786
782
  'expiryDatetime': None,
787
783
  'strike': None,
788
784
  'optionType': None,
789
785
  'precision': {
790
- 'amount': self.parse_number(self.parse_precision(self.safe_string(entry, 'amount_prec'))),
791
- 'price': self.parse_number(self.parse_precision(self.safe_string(entry, 'money_prec'))),
786
+ 'amount': self.parse_number(self.parse_precision(self.safe_string(entry, 'base_ccy_precision'))),
787
+ 'price': self.parse_number(self.parse_precision(self.safe_string(entry, 'quote_ccy_precision'))),
792
788
  },
793
789
  'limits': {
794
790
  'leverage': {
@@ -796,7 +792,7 @@ class coinex(Exchange, ImplicitAPI):
796
792
  'max': self.safe_number(leverages, leveragesLength - 1),
797
793
  },
798
794
  'amount': {
799
- 'min': self.safe_number(entry, 'amount_min'),
795
+ 'min': self.safe_number(entry, 'min_amount'),
800
796
  'max': None,
801
797
  },
802
798
  'price': {
ccxt/okx.py CHANGED
@@ -58,6 +58,7 @@ class okx(Exchange, ImplicitAPI):
58
58
  'cancelOrders': True,
59
59
  'closeAllPositions': False,
60
60
  'closePosition': True,
61
+ 'createConvertTrade': True,
61
62
  'createDepositAddress': False,
62
63
  'createMarketBuyOrderWithCost': True,
63
64
  'createMarketSellOrderWithCost': True,
@@ -7150,6 +7151,57 @@ class okx(Exchange, ImplicitAPI):
7150
7151
  toCurrency = self.currency(toCurrencyId)
7151
7152
  return self.parse_conversion(result, fromCurrency, toCurrency)
7152
7153
 
7154
+ def create_convert_trade(self, id: str, fromCode: str, toCode: str, amount: Num = None, params={}) -> Conversion:
7155
+ """
7156
+ convert from one currency to another
7157
+ :see: https://www.okx.com/docs-v5/en/#funding-account-rest-api-convert-trade
7158
+ :param str id: the id of the trade that you want to make
7159
+ :param str fromCode: the currency that you want to sell and convert from
7160
+ :param str toCode: the currency that you want to buy and convert into
7161
+ :param float [amount]: how much you want to trade in units of the from currency
7162
+ :param dict [params]: extra parameters specific to the exchange API endpoint
7163
+ :returns dict: a `conversion structure <https://docs.ccxt.com/#/?id=conversion-structure>`
7164
+ """
7165
+ self.load_markets()
7166
+ request = {
7167
+ 'quoteId': id,
7168
+ 'baseCcy': fromCode,
7169
+ 'quoteCcy': toCode,
7170
+ 'szCcy': fromCode,
7171
+ 'sz': self.number_to_string(amount),
7172
+ 'side': 'sell',
7173
+ }
7174
+ response = self.privatePostAssetConvertTrade(self.extend(request, params))
7175
+ #
7176
+ # {
7177
+ # "code": "0",
7178
+ # "data": [
7179
+ # {
7180
+ # "baseCcy": "ETH",
7181
+ # "clTReqId": "",
7182
+ # "fillBaseSz": "0.01023052",
7183
+ # "fillPx": "2932.40104429",
7184
+ # "fillQuoteSz": "30",
7185
+ # "instId": "ETH-USDT",
7186
+ # "quoteCcy": "USDT",
7187
+ # "quoteId": "quoterETH-USDT16461885104612381",
7188
+ # "side": "buy",
7189
+ # "state": "fullyFilled",
7190
+ # "tradeId": "trader16461885203381437",
7191
+ # "ts": "1646188520338"
7192
+ # }
7193
+ # ],
7194
+ # "msg": ""
7195
+ # }
7196
+ #
7197
+ data = self.safe_list(response, 'data', [])
7198
+ result = self.safe_dict(data, 0, {})
7199
+ fromCurrencyId = self.safe_string(result, 'baseCcy', fromCode)
7200
+ fromCurrency = self.currency(fromCurrencyId)
7201
+ toCurrencyId = self.safe_string(result, 'quoteCcy', toCode)
7202
+ toCurrency = self.currency(toCurrencyId)
7203
+ return self.parse_conversion(result, fromCurrency, toCurrency)
7204
+
7153
7205
  def parse_conversion(self, conversion, fromCurrency: Currency = None, toCurrency: Currency = None) -> Conversion:
7154
7206
  #
7155
7207
  # fetchConvertQuote
@@ -7170,7 +7222,24 @@ class okx(Exchange, ImplicitAPI):
7170
7222
  # "ttlMs": "10000"
7171
7223
  # }
7172
7224
  #
7173
- timestamp = self.safe_integer(conversion, 'quoteTime')
7225
+ # createConvertTrade
7226
+ #
7227
+ # {
7228
+ # "baseCcy": "ETH",
7229
+ # "clTReqId": "",
7230
+ # "fillBaseSz": "0.01023052",
7231
+ # "fillPx": "2932.40104429",
7232
+ # "fillQuoteSz": "30",
7233
+ # "instId": "ETH-USDT",
7234
+ # "quoteCcy": "USDT",
7235
+ # "quoteId": "quoterETH-USDT16461885104612381",
7236
+ # "side": "buy",
7237
+ # "state": "fullyFilled",
7238
+ # "tradeId": "trader16461885203381437",
7239
+ # "ts": "1646188520338"
7240
+ # }
7241
+ #
7242
+ timestamp = self.safe_integer_2(conversion, 'quoteTime', 'ts')
7174
7243
  fromCoin = self.safe_string(conversion, 'baseCcy')
7175
7244
  fromCode = self.safe_currency_code(fromCoin, fromCurrency)
7176
7245
  to = self.safe_string(conversion, 'quoteCcy')
@@ -7179,12 +7248,12 @@ class okx(Exchange, ImplicitAPI):
7179
7248
  'info': conversion,
7180
7249
  'timestamp': timestamp,
7181
7250
  'datetime': self.iso8601(timestamp),
7182
- 'id': self.safe_string(conversion, 'clQReqId'),
7251
+ 'id': self.safe_string_n(conversion, ['clQReqId', 'tradeId', 'quoteId']),
7183
7252
  'fromCurrency': fromCode,
7184
- 'fromAmount': self.safe_number(conversion, 'baseSz'),
7253
+ 'fromAmount': self.safe_number_2(conversion, 'baseSz', 'fillBaseSz'),
7185
7254
  'toCurrency': toCode,
7186
- 'toAmount': self.safe_number(conversion, 'quoteSz'),
7187
- 'price': self.safe_number(conversion, 'cnvtPx'),
7255
+ 'toAmount': self.safe_number_2(conversion, 'quoteSz', 'fillQuoteSz'),
7256
+ 'price': self.safe_number_2(conversion, 'cnvtPx', 'fillPx'),
7188
7257
  'fee': None,
7189
7258
  }
7190
7259
 
ccxt/pro/__init__.py CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  # ----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.2.100'
7
+ __version__ = '4.3.1'
8
8
 
9
9
  # ----------------------------------------------------------------------------
10
10
 
ccxt/pro/kraken.py CHANGED
@@ -150,7 +150,7 @@ class kraken(ccxt.async_support.kraken):
150
150
  'pair': market['wsId'],
151
151
  'volume': self.amount_to_precision(symbol, amount),
152
152
  }
153
- request, params = self.orderRequest('createOrderWs()', symbol, type, request, price, params)
153
+ request, params = self.orderRequest('createOrderWs', symbol, type, request, price, params)
154
154
  return await self.watch(url, messageHash, self.extend(request, params), messageHash)
155
155
 
156
156
  def handle_create_edit_order(self, client, message):
@@ -204,7 +204,7 @@ class kraken(ccxt.async_support.kraken):
204
204
  'pair': market['wsId'],
205
205
  'volume': self.amount_to_precision(symbol, amount),
206
206
  }
207
- request, params = self.orderRequest('editOrderWs()', symbol, type, request, price, params)
207
+ request, params = self.orderRequest('editOrderWs', symbol, type, request, price, params)
208
208
  return await self.watch(url, messageHash, self.extend(request, params), messageHash)
209
209
 
210
210
  async def cancel_orders_ws(self, ids: List[str], symbol: Str = None, params={}):
ccxt/woo.py CHANGED
@@ -45,6 +45,7 @@ class woo(Exchange, ImplicitAPI):
45
45
  'cancelWithdraw': False, # exchange have that endpoint disabled atm, but was once implemented in ccxt per old docs: https://kronosresearch.github.io/wootrade-documents/#cancel-withdraw-request
46
46
  'closeAllPositions': False,
47
47
  'closePosition': False,
48
+ 'createConvertTrade': True,
48
49
  'createDepositAddress': False,
49
50
  'createMarketBuyOrderWithCost': True,
50
51
  'createMarketOrder': False,
@@ -2823,6 +2824,35 @@ class woo(Exchange, ImplicitAPI):
2823
2824
  toCurrency = self.currency(toCurrencyId)
2824
2825
  return self.parse_conversion(data, fromCurrency, toCurrency)
2825
2826
 
2827
+ def create_convert_trade(self, id: str, fromCode: str, toCode: str, amount: Num = None, params={}) -> Conversion:
2828
+ """
2829
+ convert from one currency to another
2830
+ :see: https://docs.woo.org/#send-quote-rft
2831
+ :param str id: the id of the trade that you want to make
2832
+ :param str fromCode: the currency that you want to sell and convert from
2833
+ :param str toCode: the currency that you want to buy and convert into
2834
+ :param float [amount]: how much you want to trade in units of the from currency
2835
+ :param dict [params]: extra parameters specific to the exchange API endpoint
2836
+ :returns dict: a `conversion structure <https://docs.ccxt.com/#/?id=conversion-structure>`
2837
+ """
2838
+ self.load_markets()
2839
+ request = {
2840
+ 'quoteId': id,
2841
+ }
2842
+ response = self.v3PrivatePostConvertRft(self.extend(request, params))
2843
+ #
2844
+ # {
2845
+ # "success": True,
2846
+ # "data": {
2847
+ # "quoteId": 123123123,
2848
+ # "counterPartyId": "",
2849
+ # "rftAccepted": 1 # 1 -> success; 2 -> processing; 3 -> fail
2850
+ # }
2851
+ # }
2852
+ #
2853
+ data = self.safe_dict(response, 'data', {})
2854
+ return self.parse_conversion(data)
2855
+
2826
2856
  def parse_conversion(self, conversion, fromCurrency: Currency = None, toCurrency: Currency = None) -> Conversion:
2827
2857
  #
2828
2858
  # fetchConvertQuote
@@ -2839,6 +2869,14 @@ class woo(Exchange, ImplicitAPI):
2839
2869
  # "message": 1659084466000
2840
2870
  # }
2841
2871
  #
2872
+ # createConvertTrade
2873
+ #
2874
+ # {
2875
+ # "quoteId": 123123123,
2876
+ # "counterPartyId": "",
2877
+ # "rftAccepted": 1 # 1 -> success; 2 -> processing; 3 -> fail
2878
+ # }
2879
+ #
2842
2880
  timestamp = self.safe_integer(conversion, 'expireTimestamp')
2843
2881
  fromCoin = self.safe_string(conversion, 'sellToken')
2844
2882
  fromCode = self.safe_currency_code(fromCoin, fromCurrency)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ccxt
3
- Version: 4.2.100
3
+ Version: 4.3.1
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
@@ -261,13 +261,13 @@ console.log(version, Object.keys(exchanges));
261
261
 
262
262
  All-in-one browser bundle (dependencies included), served from a CDN of your choice:
263
263
 
264
- * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.2.100/dist/ccxt.browser.js
265
- * unpkg: https://unpkg.com/ccxt@4.2.100/dist/ccxt.browser.js
264
+ * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.3.1/dist/ccxt.browser.js
265
+ * unpkg: https://unpkg.com/ccxt@4.3.1/dist/ccxt.browser.js
266
266
 
267
267
  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.
268
268
 
269
269
  ```HTML
270
- <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.2.100/dist/ccxt.browser.js"></script>
270
+ <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.3.1/dist/ccxt.browser.js"></script>
271
271
  ```
272
272
 
273
273
  Creates a global `ccxt` object: