ccxt 4.3.7__py2.py3-none-any.whl → 4.3.8__py2.py3-none-any.whl

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

Potentially problematic release.


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

ccxt/__init__.py CHANGED
@@ -22,7 +22,7 @@
22
22
 
23
23
  # ----------------------------------------------------------------------------
24
24
 
25
- __version__ = '4.3.7'
25
+ __version__ = '4.3.8'
26
26
 
27
27
  # ----------------------------------------------------------------------------
28
28
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.3.7'
7
+ __version__ = '4.3.8'
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # -----------------------------------------------------------------------------
4
4
 
5
- __version__ = '4.3.7'
5
+ __version__ = '4.3.8'
6
6
 
7
7
  # -----------------------------------------------------------------------------
8
8
 
@@ -11884,7 +11884,7 @@ class binance(Exchange, ImplicitAPI):
11884
11884
  # }
11885
11885
  #
11886
11886
  rows = self.safe_list(response, responseQuery, [])
11887
- return self.parse_conversions(rows, fromCurrencyKey, toCurrencyKey, since, limit)
11887
+ return self.parse_conversions(rows, code, fromCurrencyKey, toCurrencyKey, since, limit)
11888
11888
 
11889
11889
  def parse_conversion(self, conversion, fromCurrency: Currency = None, toCurrency: Currency = None) -> Conversion:
11890
11890
  #
@@ -2318,7 +2318,7 @@ class bingx(Exchange, ImplicitAPI):
2318
2318
  return self.safe_order({
2319
2319
  'info': info,
2320
2320
  'id': self.safe_string_2(order, 'orderId', 'i'),
2321
- 'clientOrderId': self.safe_string_n(order, ['clientOrderID', 'origClientOrderId', 'c']),
2321
+ 'clientOrderId': self.safe_string_n(order, ['clientOrderID', 'clientOrderId', 'origClientOrderId', 'c']),
2322
2322
  'symbol': self.safe_symbol(marketId, market, '-', marketType),
2323
2323
  'timestamp': timestamp,
2324
2324
  'datetime': self.iso8601(timestamp),
@@ -8063,7 +8063,7 @@ class bitget(Exchange, ImplicitAPI):
8063
8063
  #
8064
8064
  data = self.safe_dict(response, 'data', {})
8065
8065
  dataList = self.safe_list(data, 'dataList', [])
8066
- return self.parse_conversions(dataList, 'fromCoin', 'toCoin', since, limit)
8066
+ return self.parse_conversions(dataList, code, 'fromCoin', 'toCoin', since, limit)
8067
8067
 
8068
8068
  def parse_conversion(self, conversion, fromCurrency: Currency = None, toCurrency: Currency = None) -> Conversion:
8069
8069
  #
@@ -1488,196 +1488,151 @@ class coinex(Exchange, ImplicitAPI):
1488
1488
 
1489
1489
  async def fetch_margin_balance(self, params={}):
1490
1490
  await self.load_markets()
1491
- symbol = self.safe_string(params, 'symbol')
1492
- marketId = self.safe_string(params, 'market')
1493
- market: Market = None
1494
- if symbol is not None:
1495
- market = self.market(symbol)
1496
- marketId = market['id']
1497
- elif marketId is None:
1498
- raise ArgumentsRequired(self.id + ' fetchMarginBalance() fetching a margin account requires a market parameter or a symbol parameter')
1499
- params = self.omit(params, ['symbol', 'market'])
1500
- request = {
1501
- 'market': marketId,
1502
- }
1503
- response = await self.v1PrivateGetMarginAccount(self.extend(request, params))
1491
+ response = await self.v2PrivateGetAssetsMarginBalance(params)
1504
1492
  #
1505
- # {
1506
- # "code": 0,
1507
- # "data": {
1508
- # "account_id": 126,
1509
- # "leverage": 3,
1510
- # "market_type": "AAVEUSDT",
1511
- # "sell_asset_type": "AAVE",
1512
- # "buy_asset_type": "USDT",
1513
- # "balance": {
1514
- # "sell_type": "0.3", # borrowed
1515
- # "buy_type": "30"
1516
- # },
1517
- # "frozen": {
1518
- # "sell_type": "0",
1519
- # "buy_type": "0"
1520
- # },
1521
- # "loan": {
1522
- # "sell_type": "0.3", # loan
1523
- # "buy_type": "0"
1524
- # },
1525
- # "interest": {
1526
- # "sell_type": "0.0000125",
1527
- # "buy_type": "0"
1528
- # },
1529
- # "can_transfer": {
1530
- # "sell_type": "0.02500646",
1531
- # "buy_type": "4.28635738"
1532
- # },
1533
- # "warn_rate": "",
1534
- # "liquidation_price": ""
1535
- # },
1536
- # "message": "Success"
1537
- # }
1493
+ # {
1494
+ # "data": [
1495
+ # {
1496
+ # "margin_account": "BTCUSDT",
1497
+ # "base_ccy": "BTC",
1498
+ # "quote_ccy": "USDT",
1499
+ # "available": {
1500
+ # "base_ccy": "0.00000026",
1501
+ # "quote_ccy": "0"
1502
+ # },
1503
+ # "frozen": {
1504
+ # "base_ccy": "0",
1505
+ # "quote_ccy": "0"
1506
+ # },
1507
+ # "repaid": {
1508
+ # "base_ccy": "0",
1509
+ # "quote_ccy": "0"
1510
+ # },
1511
+ # "interest": {
1512
+ # "base_ccy": "0",
1513
+ # "quote_ccy": "0"
1514
+ # },
1515
+ # "rik_rate": "",
1516
+ # "liq_price": ""
1517
+ # },
1518
+ # ],
1519
+ # "code": 0,
1520
+ # "message": "OK"
1521
+ # }
1538
1522
  #
1539
1523
  result = {'info': response}
1540
- data = self.safe_value(response, 'data', {})
1541
- free = self.safe_value(data, 'can_transfer', {})
1542
- total = self.safe_value(data, 'balance', {})
1543
- loan = self.safe_value(data, 'loan', {})
1544
- interest = self.safe_value(data, 'interest', {})
1545
- #
1546
- sellAccount = self.account()
1547
- sellCurrencyId = self.safe_string(data, 'sell_asset_type')
1548
- sellCurrencyCode = self.safe_currency_code(sellCurrencyId)
1549
- sellAccount['free'] = self.safe_string(free, 'sell_type')
1550
- sellAccount['total'] = self.safe_string(total, 'sell_type')
1551
- sellDebt = self.safe_string(loan, 'sell_type')
1552
- sellInterest = self.safe_string(interest, 'sell_type')
1553
- sellAccount['debt'] = Precise.string_add(sellDebt, sellInterest)
1554
- result[sellCurrencyCode] = sellAccount
1555
- #
1556
- buyAccount = self.account()
1557
- buyCurrencyId = self.safe_string(data, 'buy_asset_type')
1558
- buyCurrencyCode = self.safe_currency_code(buyCurrencyId)
1559
- buyAccount['free'] = self.safe_string(free, 'buy_type')
1560
- buyAccount['total'] = self.safe_string(total, 'buy_type')
1561
- buyDebt = self.safe_string(loan, 'buy_type')
1562
- buyInterest = self.safe_string(interest, 'buy_type')
1563
- buyAccount['debt'] = Precise.string_add(buyDebt, buyInterest)
1564
- result[buyCurrencyCode] = buyAccount
1565
- #
1524
+ balances = self.safe_list(response, 'data', [])
1525
+ for i in range(0, len(balances)):
1526
+ entry = balances[i]
1527
+ free = self.safe_dict(entry, 'available', {})
1528
+ used = self.safe_dict(entry, 'frozen', {})
1529
+ loan = self.safe_dict(entry, 'repaid', {})
1530
+ interest = self.safe_dict(entry, 'interest', {})
1531
+ baseAccount = self.account()
1532
+ baseCurrencyId = self.safe_string(entry, 'base_ccy')
1533
+ baseCurrencyCode = self.safe_currency_code(baseCurrencyId)
1534
+ baseAccount['free'] = self.safe_string(free, 'base_ccy')
1535
+ baseAccount['used'] = self.safe_string(used, 'base_ccy')
1536
+ baseDebt = self.safe_string(loan, 'base_ccy')
1537
+ baseInterest = self.safe_string(interest, 'base_ccy')
1538
+ baseAccount['debt'] = Precise.string_add(baseDebt, baseInterest)
1539
+ result[baseCurrencyCode] = baseAccount
1566
1540
  return self.safe_balance(result)
1567
1541
 
1568
1542
  async def fetch_spot_balance(self, params={}):
1569
1543
  await self.load_markets()
1570
- response = await self.v1PrivateGetBalanceInfo(params)
1544
+ response = await self.v2PrivateGetAssetsSpotBalance(params)
1571
1545
  #
1572
1546
  # {
1573
- # "code": 0,
1574
- # "data": {
1575
- # "BCH": { # BCH account
1576
- # "available": "13.60109", # Available BCH
1577
- # "frozen": "0.00000" # Frozen BCH
1578
- # },
1579
- # "BTC": { # BTC account
1580
- # "available": "32590.16", # Available BTC
1581
- # "frozen": "7000.00" # Frozen BTC
1582
- # },
1583
- # "ETH": { # ETH account
1584
- # "available": "5.06000", # Available ETH
1585
- # "frozen": "0.00000" # Frozen ETH
1586
- # }
1587
- # },
1588
- # "message": "Ok"
1547
+ # "code": 0,
1548
+ # "data": [
1549
+ # {
1550
+ # "available": "0.00000046",
1551
+ # "ccy": "USDT",
1552
+ # "frozen": "0"
1553
+ # }
1554
+ # ],
1555
+ # "message": "OK"
1589
1556
  # }
1590
1557
  #
1591
1558
  result = {'info': response}
1592
- balances = self.safe_value(response, 'data', {})
1593
- currencyIds = list(balances.keys())
1594
- for i in range(0, len(currencyIds)):
1595
- currencyId = currencyIds[i]
1559
+ balances = self.safe_list(response, 'data', [])
1560
+ for i in range(0, len(balances)):
1561
+ entry = balances[i]
1562
+ currencyId = self.safe_string(entry, 'ccy')
1596
1563
  code = self.safe_currency_code(currencyId)
1597
- balance = self.safe_value(balances, currencyId, {})
1598
1564
  account = self.account()
1599
- account['free'] = self.safe_string(balance, 'available')
1600
- account['used'] = self.safe_string(balance, 'frozen')
1565
+ account['free'] = self.safe_string(entry, 'available')
1566
+ account['used'] = self.safe_string(entry, 'frozen')
1601
1567
  result[code] = account
1602
1568
  return self.safe_balance(result)
1603
1569
 
1604
1570
  async def fetch_swap_balance(self, params={}):
1605
1571
  await self.load_markets()
1606
- response = await self.v1PerpetualPrivateGetAssetQuery(params)
1572
+ response = await self.v2PrivateGetAssetsFuturesBalance(params)
1607
1573
  #
1608
1574
  # {
1609
1575
  # "code": 0,
1610
- # "data": {
1611
- # "USDT": {
1612
- # "available": "37.24817690383456000000",
1613
- # "balance_total": "37.24817690383456000000",
1614
- # "frozen": "0.00000000000000000000",
1615
- # "margin": "0.00000000000000000000",
1616
- # "profit_unreal": "0.00000000000000000000",
1617
- # "transfer": "37.24817690383456000000"
1576
+ # "data": [
1577
+ # {
1578
+ # "available": "0.00000046",
1579
+ # "ccy": "USDT",
1580
+ # "frozen": "0",
1581
+ # "margin": "0",
1582
+ # "transferrable": "0.00000046",
1583
+ # "unrealized_pnl": "0"
1618
1584
  # }
1619
- # },
1585
+ # ],
1620
1586
  # "message": "OK"
1621
1587
  # }
1622
1588
  #
1623
1589
  result = {'info': response}
1624
- balances = self.safe_value(response, 'data', {})
1625
- currencyIds = list(balances.keys())
1626
- for i in range(0, len(currencyIds)):
1627
- currencyId = currencyIds[i]
1590
+ balances = self.safe_list(response, 'data', [])
1591
+ for i in range(0, len(balances)):
1592
+ entry = balances[i]
1593
+ currencyId = self.safe_string(entry, 'ccy')
1628
1594
  code = self.safe_currency_code(currencyId)
1629
- balance = self.safe_value(balances, currencyId, {})
1630
1595
  account = self.account()
1631
- account['free'] = self.safe_string(balance, 'available')
1632
- account['used'] = self.safe_string(balance, 'frozen')
1633
- account['total'] = self.safe_string(balance, 'balance_total')
1596
+ account['free'] = self.safe_string(entry, 'available')
1597
+ account['used'] = self.safe_string(entry, 'frozen')
1634
1598
  result[code] = account
1635
1599
  return self.safe_balance(result)
1636
1600
 
1637
1601
  async def fetch_financial_balance(self, params={}):
1638
1602
  await self.load_markets()
1639
- response = await self.v1PrivateGetAccountInvestmentBalance(params)
1603
+ response = await self.v2PrivateGetAssetsFinancialBalance(params)
1640
1604
  #
1641
1605
  # {
1642
- # "code": 0,
1643
- # "data": [
1644
- # {
1645
- # "asset": "CET",
1646
- # "available": "0",
1647
- # "frozen": "0",
1648
- # "lock": "0",
1649
- # },
1650
- # {
1651
- # "asset": "USDT",
1652
- # "available": "999900",
1653
- # "frozen": "0",
1654
- # "lock": "0"
1655
- # }
1656
- # ],
1657
- # "message": "Success"
1658
- # }
1606
+ # "code": 0,
1607
+ # "data": [
1608
+ # {
1609
+ # "available": "0.00000046",
1610
+ # "ccy": "USDT",
1611
+ # "frozen": "0"
1612
+ # }
1613
+ # ],
1614
+ # "message": "OK"
1615
+ # }
1659
1616
  #
1660
1617
  result = {'info': response}
1661
- balances = self.safe_value(response, 'data', {})
1618
+ balances = self.safe_list(response, 'data', [])
1662
1619
  for i in range(0, len(balances)):
1663
- balance = balances[i]
1664
- currencyId = self.safe_string(balance, 'asset')
1620
+ entry = balances[i]
1621
+ currencyId = self.safe_string(entry, 'ccy')
1665
1622
  code = self.safe_currency_code(currencyId)
1666
1623
  account = self.account()
1667
- account['free'] = self.safe_string(balance, 'available')
1668
- frozen = self.safe_string(balance, 'frozen')
1669
- locked = self.safe_string(balance, 'lock')
1670
- account['used'] = Precise.string_add(frozen, locked)
1624
+ account['free'] = self.safe_string(entry, 'available')
1625
+ account['used'] = self.safe_string(entry, 'frozen')
1671
1626
  result[code] = account
1672
1627
  return self.safe_balance(result)
1673
1628
 
1674
1629
  async def fetch_balance(self, params={}) -> Balances:
1675
1630
  """
1676
1631
  query for balance and get the amount of funds available for trading or funds locked in orders
1677
- :see: https://viabtc.github.io/coinex_api_en_doc/spot/#docsspot002_account001_account_info # spot
1678
- :see: https://viabtc.github.io/coinex_api_en_doc/spot/#docsspot002_account004_investment_balance # financial
1679
- :see: https://viabtc.github.io/coinex_api_en_doc/spot/#docsspot002_account006_margin_account # margin
1680
- :see: https://viabtc.github.io/coinex_api_en_doc/futures/#docsfutures001_http016_asset_query # swap
1632
+ :see: https://docs.coinex.com/api/v2/assets/balance/http/get-spot-balance # spot
1633
+ :see: https://docs.coinex.com/api/v2/assets/balance/http/get-futures-balance # swap
1634
+ :see: https://docs.coinex.com/api/v2/assets/balance/http/get-marigin-balance # margin
1635
+ :see: https://docs.coinex.com/api/v2/assets/balance/http/get-financial-balance # financial
1681
1636
  :param dict [params]: extra parameters specific to the exchange API endpoint
1682
1637
  :param str [params.type]: 'margin', 'swap', 'financial', or 'spot'
1683
1638
  :returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
@@ -5448,7 +5403,10 @@ class coinex(Exchange, ImplicitAPI):
5448
5403
  self.check_required_credentials()
5449
5404
  query = self.keysort(query)
5450
5405
  urlencoded = self.rawencode(query)
5451
- preparedString = method + '/' + version + '/' + path + '?' + urlencoded + nonce + self.secret
5406
+ preparedString = method + '/' + version + '/' + path
5407
+ if urlencoded:
5408
+ preparedString += '?' + urlencoded
5409
+ preparedString += nonce + self.secret
5452
5410
  signature = self.hash(self.encode(preparedString), 'sha256')
5453
5411
  headers = {
5454
5412
  'X-COINEX-KEY': self.apiKey,
@@ -5456,7 +5414,8 @@ class coinex(Exchange, ImplicitAPI):
5456
5414
  'X-COINEX-TIMESTAMP': nonce,
5457
5415
  }
5458
5416
  if (method == 'GET') or (method == 'DELETE') or (method == 'PUT'):
5459
- url += '?' + urlencoded
5417
+ if urlencoded:
5418
+ url += '?' + urlencoded
5460
5419
  else:
5461
5420
  body = self.json(query)
5462
5421
  return {'url': url, 'method': method, 'body': body, 'headers': headers}
ccxt/async_support/okx.py CHANGED
@@ -7398,7 +7398,7 @@ class okx(Exchange, ImplicitAPI):
7398
7398
  # }
7399
7399
  #
7400
7400
  rows = self.safe_list(response, 'data', [])
7401
- return self.parse_conversions(rows, 'baseCcy', 'quoteCcy', since, limit)
7401
+ return self.parse_conversions(rows, code, 'baseCcy', 'quoteCcy', since, limit)
7402
7402
 
7403
7403
  def parse_conversion(self, conversion, fromCurrency: Currency = None, toCurrency: Currency = None) -> Conversion:
7404
7404
  #
ccxt/async_support/woo.py CHANGED
@@ -2964,7 +2964,7 @@ class woo(Exchange, ImplicitAPI):
2964
2964
  #
2965
2965
  data = self.safe_dict(response, 'data', {})
2966
2966
  rows = self.safe_list(data, 'tradeVos', [])
2967
- return self.parse_conversions(rows, 'sellAsset', 'buyAsset', since, limit)
2967
+ return self.parse_conversions(rows, code, 'sellAsset', 'buyAsset', since, limit)
2968
2968
 
2969
2969
  def parse_conversion(self, conversion, fromCurrency: Currency = None, toCurrency: Currency = None) -> Conversion:
2970
2970
  #
ccxt/base/exchange.py CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.3.7'
7
+ __version__ = '4.3.8'
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
@@ -5683,7 +5683,7 @@ class Exchange(object):
5683
5683
  def parse_leverage(self, leverage, market: Market = None):
5684
5684
  raise NotSupported(self.id + ' parseLeverage() is not supported yet')
5685
5685
 
5686
- def parse_conversions(self, conversions: List[Any], fromCurrencyKey: Str = None, toCurrencyKey: Str = None, since: Int = None, limit: Int = None, params={}):
5686
+ def parse_conversions(self, conversions: List[Any], code: Str = None, fromCurrencyKey: Str = None, toCurrencyKey: Str = None, since: Int = None, limit: Int = None, params={}):
5687
5687
  conversions = self.to_array(conversions)
5688
5688
  result = []
5689
5689
  fromCurrency = None
@@ -5699,8 +5699,16 @@ class Exchange(object):
5699
5699
  conversion = self.extend(self.parseConversion(entry, fromCurrency, toCurrency), params)
5700
5700
  result.append(conversion)
5701
5701
  sorted = self.sort_by(result, 'timestamp')
5702
- code = fromCurrency['code'] if (fromCurrency is not None) else None
5703
- return self.filter_by_currency_since_limit(sorted, code, since, limit)
5702
+ currency = None
5703
+ if code is not None:
5704
+ currency = self.currency(code)
5705
+ code = currency['code']
5706
+ if code is None:
5707
+ return self.filter_by_since_limit(sorted, since, limit)
5708
+ fromConversion = self.filter_by(sorted, 'fromCurrency', code)
5709
+ toConversion = self.filter_by(sorted, 'toCurrency', code)
5710
+ both = self.array_concat(fromConversion, toConversion)
5711
+ return self.filter_by_since_limit(both, since, limit)
5704
5712
 
5705
5713
  def parse_conversion(self, conversion, fromCurrency: Currency = None, toCurrency: Currency = None):
5706
5714
  raise NotSupported(self.id + ' parseConversion() is not supported yet')
ccxt/binance.py CHANGED
@@ -11883,7 +11883,7 @@ class binance(Exchange, ImplicitAPI):
11883
11883
  # }
11884
11884
  #
11885
11885
  rows = self.safe_list(response, responseQuery, [])
11886
- return self.parse_conversions(rows, fromCurrencyKey, toCurrencyKey, since, limit)
11886
+ return self.parse_conversions(rows, code, fromCurrencyKey, toCurrencyKey, since, limit)
11887
11887
 
11888
11888
  def parse_conversion(self, conversion, fromCurrency: Currency = None, toCurrency: Currency = None) -> Conversion:
11889
11889
  #
ccxt/bingx.py CHANGED
@@ -2317,7 +2317,7 @@ class bingx(Exchange, ImplicitAPI):
2317
2317
  return self.safe_order({
2318
2318
  'info': info,
2319
2319
  'id': self.safe_string_2(order, 'orderId', 'i'),
2320
- 'clientOrderId': self.safe_string_n(order, ['clientOrderID', 'origClientOrderId', 'c']),
2320
+ 'clientOrderId': self.safe_string_n(order, ['clientOrderID', 'clientOrderId', 'origClientOrderId', 'c']),
2321
2321
  'symbol': self.safe_symbol(marketId, market, '-', marketType),
2322
2322
  'timestamp': timestamp,
2323
2323
  'datetime': self.iso8601(timestamp),
ccxt/bitget.py CHANGED
@@ -8062,7 +8062,7 @@ class bitget(Exchange, ImplicitAPI):
8062
8062
  #
8063
8063
  data = self.safe_dict(response, 'data', {})
8064
8064
  dataList = self.safe_list(data, 'dataList', [])
8065
- return self.parse_conversions(dataList, 'fromCoin', 'toCoin', since, limit)
8065
+ return self.parse_conversions(dataList, code, 'fromCoin', 'toCoin', since, limit)
8066
8066
 
8067
8067
  def parse_conversion(self, conversion, fromCurrency: Currency = None, toCurrency: Currency = None) -> Conversion:
8068
8068
  #
ccxt/coinex.py CHANGED
@@ -1487,196 +1487,151 @@ class coinex(Exchange, ImplicitAPI):
1487
1487
 
1488
1488
  def fetch_margin_balance(self, params={}):
1489
1489
  self.load_markets()
1490
- symbol = self.safe_string(params, 'symbol')
1491
- marketId = self.safe_string(params, 'market')
1492
- market: Market = None
1493
- if symbol is not None:
1494
- market = self.market(symbol)
1495
- marketId = market['id']
1496
- elif marketId is None:
1497
- raise ArgumentsRequired(self.id + ' fetchMarginBalance() fetching a margin account requires a market parameter or a symbol parameter')
1498
- params = self.omit(params, ['symbol', 'market'])
1499
- request = {
1500
- 'market': marketId,
1501
- }
1502
- response = self.v1PrivateGetMarginAccount(self.extend(request, params))
1490
+ response = self.v2PrivateGetAssetsMarginBalance(params)
1503
1491
  #
1504
- # {
1505
- # "code": 0,
1506
- # "data": {
1507
- # "account_id": 126,
1508
- # "leverage": 3,
1509
- # "market_type": "AAVEUSDT",
1510
- # "sell_asset_type": "AAVE",
1511
- # "buy_asset_type": "USDT",
1512
- # "balance": {
1513
- # "sell_type": "0.3", # borrowed
1514
- # "buy_type": "30"
1515
- # },
1516
- # "frozen": {
1517
- # "sell_type": "0",
1518
- # "buy_type": "0"
1519
- # },
1520
- # "loan": {
1521
- # "sell_type": "0.3", # loan
1522
- # "buy_type": "0"
1523
- # },
1524
- # "interest": {
1525
- # "sell_type": "0.0000125",
1526
- # "buy_type": "0"
1527
- # },
1528
- # "can_transfer": {
1529
- # "sell_type": "0.02500646",
1530
- # "buy_type": "4.28635738"
1531
- # },
1532
- # "warn_rate": "",
1533
- # "liquidation_price": ""
1534
- # },
1535
- # "message": "Success"
1536
- # }
1492
+ # {
1493
+ # "data": [
1494
+ # {
1495
+ # "margin_account": "BTCUSDT",
1496
+ # "base_ccy": "BTC",
1497
+ # "quote_ccy": "USDT",
1498
+ # "available": {
1499
+ # "base_ccy": "0.00000026",
1500
+ # "quote_ccy": "0"
1501
+ # },
1502
+ # "frozen": {
1503
+ # "base_ccy": "0",
1504
+ # "quote_ccy": "0"
1505
+ # },
1506
+ # "repaid": {
1507
+ # "base_ccy": "0",
1508
+ # "quote_ccy": "0"
1509
+ # },
1510
+ # "interest": {
1511
+ # "base_ccy": "0",
1512
+ # "quote_ccy": "0"
1513
+ # },
1514
+ # "rik_rate": "",
1515
+ # "liq_price": ""
1516
+ # },
1517
+ # ],
1518
+ # "code": 0,
1519
+ # "message": "OK"
1520
+ # }
1537
1521
  #
1538
1522
  result = {'info': response}
1539
- data = self.safe_value(response, 'data', {})
1540
- free = self.safe_value(data, 'can_transfer', {})
1541
- total = self.safe_value(data, 'balance', {})
1542
- loan = self.safe_value(data, 'loan', {})
1543
- interest = self.safe_value(data, 'interest', {})
1544
- #
1545
- sellAccount = self.account()
1546
- sellCurrencyId = self.safe_string(data, 'sell_asset_type')
1547
- sellCurrencyCode = self.safe_currency_code(sellCurrencyId)
1548
- sellAccount['free'] = self.safe_string(free, 'sell_type')
1549
- sellAccount['total'] = self.safe_string(total, 'sell_type')
1550
- sellDebt = self.safe_string(loan, 'sell_type')
1551
- sellInterest = self.safe_string(interest, 'sell_type')
1552
- sellAccount['debt'] = Precise.string_add(sellDebt, sellInterest)
1553
- result[sellCurrencyCode] = sellAccount
1554
- #
1555
- buyAccount = self.account()
1556
- buyCurrencyId = self.safe_string(data, 'buy_asset_type')
1557
- buyCurrencyCode = self.safe_currency_code(buyCurrencyId)
1558
- buyAccount['free'] = self.safe_string(free, 'buy_type')
1559
- buyAccount['total'] = self.safe_string(total, 'buy_type')
1560
- buyDebt = self.safe_string(loan, 'buy_type')
1561
- buyInterest = self.safe_string(interest, 'buy_type')
1562
- buyAccount['debt'] = Precise.string_add(buyDebt, buyInterest)
1563
- result[buyCurrencyCode] = buyAccount
1564
- #
1523
+ balances = self.safe_list(response, 'data', [])
1524
+ for i in range(0, len(balances)):
1525
+ entry = balances[i]
1526
+ free = self.safe_dict(entry, 'available', {})
1527
+ used = self.safe_dict(entry, 'frozen', {})
1528
+ loan = self.safe_dict(entry, 'repaid', {})
1529
+ interest = self.safe_dict(entry, 'interest', {})
1530
+ baseAccount = self.account()
1531
+ baseCurrencyId = self.safe_string(entry, 'base_ccy')
1532
+ baseCurrencyCode = self.safe_currency_code(baseCurrencyId)
1533
+ baseAccount['free'] = self.safe_string(free, 'base_ccy')
1534
+ baseAccount['used'] = self.safe_string(used, 'base_ccy')
1535
+ baseDebt = self.safe_string(loan, 'base_ccy')
1536
+ baseInterest = self.safe_string(interest, 'base_ccy')
1537
+ baseAccount['debt'] = Precise.string_add(baseDebt, baseInterest)
1538
+ result[baseCurrencyCode] = baseAccount
1565
1539
  return self.safe_balance(result)
1566
1540
 
1567
1541
  def fetch_spot_balance(self, params={}):
1568
1542
  self.load_markets()
1569
- response = self.v1PrivateGetBalanceInfo(params)
1543
+ response = self.v2PrivateGetAssetsSpotBalance(params)
1570
1544
  #
1571
1545
  # {
1572
- # "code": 0,
1573
- # "data": {
1574
- # "BCH": { # BCH account
1575
- # "available": "13.60109", # Available BCH
1576
- # "frozen": "0.00000" # Frozen BCH
1577
- # },
1578
- # "BTC": { # BTC account
1579
- # "available": "32590.16", # Available BTC
1580
- # "frozen": "7000.00" # Frozen BTC
1581
- # },
1582
- # "ETH": { # ETH account
1583
- # "available": "5.06000", # Available ETH
1584
- # "frozen": "0.00000" # Frozen ETH
1585
- # }
1586
- # },
1587
- # "message": "Ok"
1546
+ # "code": 0,
1547
+ # "data": [
1548
+ # {
1549
+ # "available": "0.00000046",
1550
+ # "ccy": "USDT",
1551
+ # "frozen": "0"
1552
+ # }
1553
+ # ],
1554
+ # "message": "OK"
1588
1555
  # }
1589
1556
  #
1590
1557
  result = {'info': response}
1591
- balances = self.safe_value(response, 'data', {})
1592
- currencyIds = list(balances.keys())
1593
- for i in range(0, len(currencyIds)):
1594
- currencyId = currencyIds[i]
1558
+ balances = self.safe_list(response, 'data', [])
1559
+ for i in range(0, len(balances)):
1560
+ entry = balances[i]
1561
+ currencyId = self.safe_string(entry, 'ccy')
1595
1562
  code = self.safe_currency_code(currencyId)
1596
- balance = self.safe_value(balances, currencyId, {})
1597
1563
  account = self.account()
1598
- account['free'] = self.safe_string(balance, 'available')
1599
- account['used'] = self.safe_string(balance, 'frozen')
1564
+ account['free'] = self.safe_string(entry, 'available')
1565
+ account['used'] = self.safe_string(entry, 'frozen')
1600
1566
  result[code] = account
1601
1567
  return self.safe_balance(result)
1602
1568
 
1603
1569
  def fetch_swap_balance(self, params={}):
1604
1570
  self.load_markets()
1605
- response = self.v1PerpetualPrivateGetAssetQuery(params)
1571
+ response = self.v2PrivateGetAssetsFuturesBalance(params)
1606
1572
  #
1607
1573
  # {
1608
1574
  # "code": 0,
1609
- # "data": {
1610
- # "USDT": {
1611
- # "available": "37.24817690383456000000",
1612
- # "balance_total": "37.24817690383456000000",
1613
- # "frozen": "0.00000000000000000000",
1614
- # "margin": "0.00000000000000000000",
1615
- # "profit_unreal": "0.00000000000000000000",
1616
- # "transfer": "37.24817690383456000000"
1575
+ # "data": [
1576
+ # {
1577
+ # "available": "0.00000046",
1578
+ # "ccy": "USDT",
1579
+ # "frozen": "0",
1580
+ # "margin": "0",
1581
+ # "transferrable": "0.00000046",
1582
+ # "unrealized_pnl": "0"
1617
1583
  # }
1618
- # },
1584
+ # ],
1619
1585
  # "message": "OK"
1620
1586
  # }
1621
1587
  #
1622
1588
  result = {'info': response}
1623
- balances = self.safe_value(response, 'data', {})
1624
- currencyIds = list(balances.keys())
1625
- for i in range(0, len(currencyIds)):
1626
- currencyId = currencyIds[i]
1589
+ balances = self.safe_list(response, 'data', [])
1590
+ for i in range(0, len(balances)):
1591
+ entry = balances[i]
1592
+ currencyId = self.safe_string(entry, 'ccy')
1627
1593
  code = self.safe_currency_code(currencyId)
1628
- balance = self.safe_value(balances, currencyId, {})
1629
1594
  account = self.account()
1630
- account['free'] = self.safe_string(balance, 'available')
1631
- account['used'] = self.safe_string(balance, 'frozen')
1632
- account['total'] = self.safe_string(balance, 'balance_total')
1595
+ account['free'] = self.safe_string(entry, 'available')
1596
+ account['used'] = self.safe_string(entry, 'frozen')
1633
1597
  result[code] = account
1634
1598
  return self.safe_balance(result)
1635
1599
 
1636
1600
  def fetch_financial_balance(self, params={}):
1637
1601
  self.load_markets()
1638
- response = self.v1PrivateGetAccountInvestmentBalance(params)
1602
+ response = self.v2PrivateGetAssetsFinancialBalance(params)
1639
1603
  #
1640
1604
  # {
1641
- # "code": 0,
1642
- # "data": [
1643
- # {
1644
- # "asset": "CET",
1645
- # "available": "0",
1646
- # "frozen": "0",
1647
- # "lock": "0",
1648
- # },
1649
- # {
1650
- # "asset": "USDT",
1651
- # "available": "999900",
1652
- # "frozen": "0",
1653
- # "lock": "0"
1654
- # }
1655
- # ],
1656
- # "message": "Success"
1657
- # }
1605
+ # "code": 0,
1606
+ # "data": [
1607
+ # {
1608
+ # "available": "0.00000046",
1609
+ # "ccy": "USDT",
1610
+ # "frozen": "0"
1611
+ # }
1612
+ # ],
1613
+ # "message": "OK"
1614
+ # }
1658
1615
  #
1659
1616
  result = {'info': response}
1660
- balances = self.safe_value(response, 'data', {})
1617
+ balances = self.safe_list(response, 'data', [])
1661
1618
  for i in range(0, len(balances)):
1662
- balance = balances[i]
1663
- currencyId = self.safe_string(balance, 'asset')
1619
+ entry = balances[i]
1620
+ currencyId = self.safe_string(entry, 'ccy')
1664
1621
  code = self.safe_currency_code(currencyId)
1665
1622
  account = self.account()
1666
- account['free'] = self.safe_string(balance, 'available')
1667
- frozen = self.safe_string(balance, 'frozen')
1668
- locked = self.safe_string(balance, 'lock')
1669
- account['used'] = Precise.string_add(frozen, locked)
1623
+ account['free'] = self.safe_string(entry, 'available')
1624
+ account['used'] = self.safe_string(entry, 'frozen')
1670
1625
  result[code] = account
1671
1626
  return self.safe_balance(result)
1672
1627
 
1673
1628
  def fetch_balance(self, params={}) -> Balances:
1674
1629
  """
1675
1630
  query for balance and get the amount of funds available for trading or funds locked in orders
1676
- :see: https://viabtc.github.io/coinex_api_en_doc/spot/#docsspot002_account001_account_info # spot
1677
- :see: https://viabtc.github.io/coinex_api_en_doc/spot/#docsspot002_account004_investment_balance # financial
1678
- :see: https://viabtc.github.io/coinex_api_en_doc/spot/#docsspot002_account006_margin_account # margin
1679
- :see: https://viabtc.github.io/coinex_api_en_doc/futures/#docsfutures001_http016_asset_query # swap
1631
+ :see: https://docs.coinex.com/api/v2/assets/balance/http/get-spot-balance # spot
1632
+ :see: https://docs.coinex.com/api/v2/assets/balance/http/get-futures-balance # swap
1633
+ :see: https://docs.coinex.com/api/v2/assets/balance/http/get-marigin-balance # margin
1634
+ :see: https://docs.coinex.com/api/v2/assets/balance/http/get-financial-balance # financial
1680
1635
  :param dict [params]: extra parameters specific to the exchange API endpoint
1681
1636
  :param str [params.type]: 'margin', 'swap', 'financial', or 'spot'
1682
1637
  :returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
@@ -5447,7 +5402,10 @@ class coinex(Exchange, ImplicitAPI):
5447
5402
  self.check_required_credentials()
5448
5403
  query = self.keysort(query)
5449
5404
  urlencoded = self.rawencode(query)
5450
- preparedString = method + '/' + version + '/' + path + '?' + urlencoded + nonce + self.secret
5405
+ preparedString = method + '/' + version + '/' + path
5406
+ if urlencoded:
5407
+ preparedString += '?' + urlencoded
5408
+ preparedString += nonce + self.secret
5451
5409
  signature = self.hash(self.encode(preparedString), 'sha256')
5452
5410
  headers = {
5453
5411
  'X-COINEX-KEY': self.apiKey,
@@ -5455,7 +5413,8 @@ class coinex(Exchange, ImplicitAPI):
5455
5413
  'X-COINEX-TIMESTAMP': nonce,
5456
5414
  }
5457
5415
  if (method == 'GET') or (method == 'DELETE') or (method == 'PUT'):
5458
- url += '?' + urlencoded
5416
+ if urlencoded:
5417
+ url += '?' + urlencoded
5459
5418
  else:
5460
5419
  body = self.json(query)
5461
5420
  return {'url': url, 'method': method, 'body': body, 'headers': headers}
ccxt/okx.py CHANGED
@@ -7397,7 +7397,7 @@ class okx(Exchange, ImplicitAPI):
7397
7397
  # }
7398
7398
  #
7399
7399
  rows = self.safe_list(response, 'data', [])
7400
- return self.parse_conversions(rows, 'baseCcy', 'quoteCcy', since, limit)
7400
+ return self.parse_conversions(rows, code, 'baseCcy', 'quoteCcy', since, limit)
7401
7401
 
7402
7402
  def parse_conversion(self, conversion, fromCurrency: Currency = None, toCurrency: Currency = None) -> Conversion:
7403
7403
  #
ccxt/pro/__init__.py CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  # ----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.3.7'
7
+ __version__ = '4.3.8'
8
8
 
9
9
  # ----------------------------------------------------------------------------
10
10
 
ccxt/woo.py CHANGED
@@ -2964,7 +2964,7 @@ class woo(Exchange, ImplicitAPI):
2964
2964
  #
2965
2965
  data = self.safe_dict(response, 'data', {})
2966
2966
  rows = self.safe_list(data, 'tradeVos', [])
2967
- return self.parse_conversions(rows, 'sellAsset', 'buyAsset', since, limit)
2967
+ return self.parse_conversions(rows, code, 'sellAsset', 'buyAsset', since, limit)
2968
2968
 
2969
2969
  def parse_conversion(self, conversion, fromCurrency: Currency = None, toCurrency: Currency = None) -> Conversion:
2970
2970
  #
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ccxt
3
- Version: 4.3.7
3
+ Version: 4.3.8
4
4
  Summary: A JavaScript / TypeScript / Python / C# / PHP cryptocurrency trading library with support for 100+ exchanges
5
5
  Home-page: https://ccxt.com
6
6
  Author: Igor Kroitor
@@ -262,13 +262,13 @@ console.log(version, Object.keys(exchanges));
262
262
 
263
263
  All-in-one browser bundle (dependencies included), served from a CDN of your choice:
264
264
 
265
- * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.3.7/dist/ccxt.browser.js
266
- * unpkg: https://unpkg.com/ccxt@4.3.7/dist/ccxt.browser.js
265
+ * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.3.8/dist/ccxt.browser.js
266
+ * unpkg: https://unpkg.com/ccxt@4.3.8/dist/ccxt.browser.js
267
267
 
268
268
  CDNs are not updated in real-time and may have delays. Defaulting to the most recent version without specifying the version number is not recommended. Please, keep in mind that we are not responsible for the correct operation of those CDN servers.
269
269
 
270
270
  ```HTML
271
- <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.3.7/dist/ccxt.browser.js"></script>
271
+ <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.3.8/dist/ccxt.browser.js"></script>
272
272
  ```
273
273
 
274
274
  Creates a global `ccxt` object:
@@ -1,14 +1,14 @@
1
- ccxt/__init__.py,sha256=8WUA2zrEL80wCb5tY0lxWCzHFJE0ONIby0x6dWPyiRI,15655
1
+ ccxt/__init__.py,sha256=l_tRqR9xi1JXkm8GzE-Dii9BEAhXn65qC9d3BALIh5o,15655
2
2
  ccxt/ace.py,sha256=j7Aq0hnsMTcUCIrWCm-ZZMkptWzAY23D8zi3jZWjq3c,41650
3
3
  ccxt/alpaca.py,sha256=h9GWMKpoPOXTcYESHQKM3MWGrrqEgFvs8sLkQx0YSLs,47182
4
4
  ccxt/ascendex.py,sha256=kxKDSqysYC_VHWsRHgNqEwGbQmKw8WIH_Cp2z6vouyg,151398
5
5
  ccxt/bequant.py,sha256=RBiAmaTbL35DgiV3Hl6uchLUd78V0z1T9riTlNsrpdc,1174
6
6
  ccxt/bigone.py,sha256=G2cga-cesMkY6knbLH02JQuHxdF9J1jEEohb0uYuibo,92190
7
- ccxt/binance.py,sha256=L4uvmgqj2kyrJhc411SqOzpsG8-WwGKAMQjhuyY3FjM,611565
7
+ ccxt/binance.py,sha256=1IuamjDC4olbwojJoa-1p7s8ZaNPxdRD64_yJgBZka0,611571
8
8
  ccxt/binancecoinm.py,sha256=pncdw6Xw2X1Po-vEvAB4nL37scoS_axGAVxetPy1YQs,1645
9
9
  ccxt/binanceus.py,sha256=hdcT4OnadcdFFFjF3GtM0nWv90jqojqwdVS3xWGuW40,9163
10
10
  ccxt/binanceusdm.py,sha256=KPQGlCalQ0eGlPCs2tSanOxaP8O0zFRQjGntA16Yprw,2480
11
- ccxt/bingx.py,sha256=3wlA-eboZU2Sq9T1_wMLPdm4LAF3XKqOQ2-Ve7j0sxw,184181
11
+ ccxt/bingx.py,sha256=fbkFsAM4cyYhIg-D5bmLBySK0N11pgXU7ctGDQVmOPU,184198
12
12
  ccxt/bit2c.py,sha256=zDMcQVszvO39Lo4Km_aU16AN0MoVz7WhJrLnTua5Pm0,36901
13
13
  ccxt/bitbank.py,sha256=XC2n0jpXEV7L7JoaIgjroAd__FQzucDRZnNJPfmwHWg,41839
14
14
  ccxt/bitbay.py,sha256=xAIjzGRDVGwoy-Gygd99H0YN4wiaz_0lR0Z14oxaaxc,478
@@ -17,7 +17,7 @@ ccxt/bitcoincom.py,sha256=PyWIl4nC4jp5Uba2lI1At0N_hhNyWD0DoZC_MSyL_s4,502
17
17
  ccxt/bitfinex.py,sha256=xSmo7t-2TfigOBugw7xXpjUcI1hmgCwXNA7FkLy5KiQ,71533
18
18
  ccxt/bitfinex2.py,sha256=nqT65ZaSnJt6-Rv983FslGHpw4l7Z6XY1DIIhI7NPwo,158134
19
19
  ccxt/bitflyer.py,sha256=VYJ65ZGm_gYXSDQxvLqZaTwgQQCaxclpn2xaMn9m0HM,41391
20
- ccxt/bitget.py,sha256=pbtzdr63-FdFgF_wdOwWYX7-I7WGJUDnepjkbaxJlr8,422157
20
+ ccxt/bitget.py,sha256=ialRv3fxuXbjf0JmJ_uG6eDkc2IvwS8qX3QbYJCqsBo,422163
21
21
  ccxt/bithumb.py,sha256=pBq910z_-PWLxtxLCwbP91UZuFwpCfL3ziuhhZa7OWg,45528
22
22
  ccxt/bitmart.py,sha256=QeL2trt3hgvySGL4cI6YP40z5OvLZ4RqzFoUK-3E11w,199108
23
23
  ccxt/bitmex.py,sha256=CPC5c6ibCFTWF9JbgLc_sdgQ03mvdtPR-093E_aFZU4,126416
@@ -41,7 +41,7 @@ ccxt/coinbase.py,sha256=sw1ZNrDkujIerdB3fF9N-BgAmsIEmIwOHbABNpMrwAw,206918
41
41
  ccxt/coinbaseinternational.py,sha256=wr00A8TLih3_Ipur1NhhC3_tCtNaV3SOQ72eOGKE9hQ,87223
42
42
  ccxt/coinbasepro.py,sha256=MHlfA0VS0PrYyTjcwcit7I04nD-P6zgICkYzAI611Rc,78665
43
43
  ccxt/coincheck.py,sha256=GYkK5BTSFsJOuR5fSCysUqNK5b2FjEjz7dIBHXmc1Xs,35658
44
- ccxt/coinex.py,sha256=PSLLmgN3r27LsOWXAkqBjJ-0iIOsgXTgiwEBqtp9ctM,248951
44
+ ccxt/coinex.py,sha256=KPxW3BgMtLekkIZ-sIK06NXDEWWGAX2WhLLflq7e_YQ,246642
45
45
  ccxt/coinlist.py,sha256=LQ1qHxVMS-5dtYtXVzZBtAJjqY1VdmMCEOSph68HdUk,103195
46
46
  ccxt/coinmate.py,sha256=bFSSHuOSL2OQdMZXa_5sNkXoM0FIxWgiCd0tgJjIo4M,45940
47
47
  ccxt/coinmetro.py,sha256=vmYo2m-s58gCaol0xvOtnANQsG8_vPSYUh0Tf36QBLw,80409
@@ -84,7 +84,7 @@ ccxt/ndax.py,sha256=FQOxlMyj8m9wND2i5qiTxrog4eFASzCxhGRw1Nxu4eE,108562
84
84
  ccxt/novadax.py,sha256=h9U_ckSCN4ZDgvXrrb7MmcOTioqG_3DsmR-2Gjpx6yw,64299
85
85
  ccxt/oceanex.py,sha256=YH3tUzegvfG0fUCjtmtb3USOQtlL1tlqQ40B_i-xx7w,37860
86
86
  ccxt/okcoin.py,sha256=oJDR1yRlV_3HlgI6Uii6zr5cKDg9IaUSrhdlJZAXIMc,151110
87
- ccxt/okx.py,sha256=7ssFmF_uP1rDwmuk3xtam3mqGxA8V1yIouWP8Nk4jDE,370860
87
+ ccxt/okx.py,sha256=9a11R-S3jvumPsepjZeX3NcMN702OxAzF4IYtdif5BM,370866
88
88
  ccxt/onetrading.py,sha256=T68x4qfncbcnXU-YdMTVEGwnr3zKvcbbfdQZa8Zourc,88107
89
89
  ccxt/p2b.py,sha256=FYxL36KwtaLIIQ793frJEtqtHyzm39hNK0mJEzAAH0U,54213
90
90
  ccxt/paymium.py,sha256=2mBwmyT93k-dXBEKEix48G8PsA2IEN_5yScEM985Z10,24203
@@ -99,7 +99,7 @@ ccxt/upbit.py,sha256=rYJ2n8d52-6q0CuaflZs4KsM-ytgdPYNjOx76jao-7I,81605
99
99
  ccxt/wavesexchange.py,sha256=SCBZNlH4v8QojSVQn70PjhO-9vvUIRuu6a8f_62k_QU,113550
100
100
  ccxt/wazirx.py,sha256=c63acRjogThVdpkvt3F1U93EPrJx3CfmoMpDFpAaZfY,51336
101
101
  ccxt/whitebit.py,sha256=B-na5mCC3Yp1-ohdJp-Z8c7_FM_R_AsrQidINUpBljM,108191
102
- ccxt/woo.py,sha256=44gDuv_eKLJiJ6OBkyYbxG4Kgbvc7ocqnPabFjYsHYY,138544
102
+ ccxt/woo.py,sha256=1jmC7paC-QaXHydtOuKqEmQ-o9JEf9VmeloT7WoQ77s,138550
103
103
  ccxt/yobit.py,sha256=KGyZulJpFsbWRPMCK2VIqXy9ZopLH1v3IO_fmZVIsi4,53216
104
104
  ccxt/zaif.py,sha256=4aZ8iZmow4TEw_IZZCPX8VDPaU7PVRJ_lNpYhN-LSCA,27957
105
105
  ccxt/zonda.py,sha256=Sxq8MsluLNKk1_9PNkdAa2zy8jP_tklrEax4P5TwISQ,80557
@@ -207,17 +207,17 @@ ccxt/abstract/woo.py,sha256=yH0aXeyohXdyS3jZrztapwRmzNWk7JGpbrrf7pX_LKU,10368
207
207
  ccxt/abstract/yobit.py,sha256=8ycfCO8ORFly9hc0Aa47sZyX4_ZKPXS9h9yJzI-uQ7Q,1339
208
208
  ccxt/abstract/zaif.py,sha256=m15WHdl3gYy0GOXNZ8NEH8eE7sVh8c0T_ITNuU8vXeU,3935
209
209
  ccxt/abstract/zonda.py,sha256=aSfewvRojzmuymX6QbOnDR8v9VFqWTULMHX9Y7kKD1M,5820
210
- ccxt/async_support/__init__.py,sha256=rUDGJsADNGlHSudJoUk9wqIuHla2p_vr5kjh73hfaeU,15408
210
+ ccxt/async_support/__init__.py,sha256=3Rkznjx-YbTYEtnz0IQCaMJWTxfDqsb78gp8ol63Hhw,15408
211
211
  ccxt/async_support/ace.py,sha256=FNZKajNtvFhDEmBYzgv46pGMwvHbPQcqhsWRpAk9iwU,41874
212
212
  ccxt/async_support/alpaca.py,sha256=A1g6mT4lc8Ab5f5Hi7U_10XltruXHlE8268s45dDd6I,47394
213
213
  ccxt/async_support/ascendex.py,sha256=GJJxZnAu_OSTv3l15DbAaIsIz5QdyWAgD0-yfsTjAf4,152186
214
214
  ccxt/async_support/bequant.py,sha256=1hTwHovo1bW1XTIc8ZKjvJ-Xg6LfmpGdzT7TepykaVM,1188
215
215
  ccxt/async_support/bigone.py,sha256=fh6RPPrLRuPfVkbB_hC5RLKfF3y8fr_wmdizNE0QVjk,92644
216
- ccxt/async_support/binance.py,sha256=x24GW72fLK8dRufL0VdwpcnCv5RnMVVp9d5j0Ir9Xs4,614233
216
+ ccxt/async_support/binance.py,sha256=wDnO4pY1Coo_sX3mRffuD_w5t4HS2YTDVKo7HdXOmcQ,614239
217
217
  ccxt/async_support/binancecoinm.py,sha256=IY3RLZptQA2nmZaUYRGfTa5ZY4VMWBpFYfwHc8zTHw0,1683
218
218
  ccxt/async_support/binanceus.py,sha256=c-K3Tk7LaRJjmYdCx8vBOqsx01uXrtvt0PC2ekBiD0g,9177
219
219
  ccxt/async_support/binanceusdm.py,sha256=-1r4A4tmV2pCiLGO80hzq7MIIj4MTzOD7buZGv6JauA,2518
220
- ccxt/async_support/bingx.py,sha256=fZCKKIdt4kusnYdFxhysrDaiM8ZXz3L-ZJhFPZn8_RU,185217
220
+ ccxt/async_support/bingx.py,sha256=F4o26bQPigtTEpGOQEFJAJjUi4jCLqzj0OKUpg9IROw,185234
221
221
  ccxt/async_support/bit2c.py,sha256=vCfbtsUTI0j9wU51FnvzPpFwmzC3ozN4h1I4IXVgMGI,37113
222
222
  ccxt/async_support/bitbank.py,sha256=48plnjcFdy6Ovd66hm32fa0qjedmkkjfnSwDB99NwbI,42099
223
223
  ccxt/async_support/bitbay.py,sha256=jcaEXi2IhYTva8ezO_SfJhwxEZk7HST4J3NaxD16BQA,492
@@ -226,7 +226,7 @@ ccxt/async_support/bitcoincom.py,sha256=RiqwhK3RfxQ_PXTa860fphDCvwA8dalL-_rXlK85
226
226
  ccxt/async_support/bitfinex.py,sha256=U7Rx6v0EAi4vv-eV6aJqjn9ZNLZHRXnaQX0Kdqsndog,71973
227
227
  ccxt/async_support/bitfinex2.py,sha256=9GxRBCGHQQ-aA-KUd7uvbnPtogKtB28hnoIJ0jNm4GY,158868
228
228
  ccxt/async_support/bitflyer.py,sha256=jehWPOEapP8emHK_WJUey8Lt4VFQwK4-Hrmchkh-VbQ,41699
229
- ccxt/async_support/bitget.py,sha256=VzW5EfNFMz7xJLzkB2D0tae2Vpc_K-nNqpfDJ3p2kP0,423781
229
+ ccxt/async_support/bitget.py,sha256=6401z1rfk6VHJre9CRKKGp2gREqrHPdcb8cWA2gIYM0,423787
230
230
  ccxt/async_support/bithumb.py,sha256=Ii7K6dga0USJr8mvmQub0-QSCsOu6VNA1luFP8ZfT-Y,45758
231
231
  ccxt/async_support/bitmart.py,sha256=NrArkE68Vx5JZZMHtDsYesyaU1GKAkiBBQeIgENCPeA,200028
232
232
  ccxt/async_support/bitmex.py,sha256=GvHFtIp7QTDkSzyVxqZaRE5a_4OmO6gSjROQ_lUT_2w,126994
@@ -250,7 +250,7 @@ ccxt/async_support/coinbase.py,sha256=Z4Oto79qtEkoluthFnw3pTxhpQbBxthrr72xh8AGmk
250
250
  ccxt/async_support/coinbaseinternational.py,sha256=wmfQAP2reUj_R-xYJTiTp69OtB9-oSzc1j_VR-rPdlY,87777
251
251
  ccxt/async_support/coinbasepro.py,sha256=450ObJYcli-6Fkpqx8iTT-Z6TB4Uek0bIXmSWLWVsFA,79171
252
252
  ccxt/async_support/coincheck.py,sha256=B_qzNQzd3j-me0km8lEg7bnfp--A16fpa_W902ut5Lo,35864
253
- ccxt/async_support/coinex.py,sha256=w-67pcUwQLP3nbwjazf2Nbt9aKnOhr765DhZtz1OIws,250239
253
+ ccxt/async_support/coinex.py,sha256=LxymCWCepxE-1aP6FQi-HMegO1XmT6PmFOORIIJlZKE,247930
254
254
  ccxt/async_support/coinlist.py,sha256=Zr8vYxBeJMPxTmoWRDboser04I_yE_1Z4YWOuayyRAY,103683
255
255
  ccxt/async_support/coinmate.py,sha256=XQJDqDPD2JFBDZqKzWC9AfBKV3MY3msBuYkMgUaT5M0,46206
256
256
  ccxt/async_support/coinmetro.py,sha256=I7ZmXVoZK-OcyMrqJ-a19NMmMuk81UoQk6UQtKKnXk4,80729
@@ -293,7 +293,7 @@ ccxt/async_support/ndax.py,sha256=JtBK0pbR5OvnWuLTHr2pNV8lsoXkZ8A161b5K366v00,10
293
293
  ccxt/async_support/novadax.py,sha256=ttRfw2h1Nc-9RUgBHefTuAPLUNjp9hxfxZTxoJDViwQ,64667
294
294
  ccxt/async_support/oceanex.py,sha256=aYdYRl42FDFpaPaoLaiGYxvDM_7aq0dEjAhUa0NsJQQ,38180
295
295
  ccxt/async_support/okcoin.py,sha256=HQSAZdG_yFP9oHyJYJaZrWsRZ9IHB6qrIgDp4b0zetA,151634
296
- ccxt/async_support/okx.py,sha256=XbIbUkkrI4V-RKnelc3PEZdGw_z7jbIHYUcZJdRL6Tw,372435
296
+ ccxt/async_support/okx.py,sha256=fnyuunAWpMYfBZel29DRqAaAgwRKUFric-VuiSnekGI,372441
297
297
  ccxt/async_support/onetrading.py,sha256=2O3d2_E-oUZABQEyR9igcke0AJ-to-_J9579iDyGKfo,88559
298
298
  ccxt/async_support/p2b.py,sha256=KrNc3sLbHQCxbgShyqWytuQVaQfKa42Q6_HcUYNUaKI,54455
299
299
  ccxt/async_support/paymium.py,sha256=3P1J9OcDOqQKG5fUs6Xte9Xu8NB5lWu-OD-AHHGZbkM,24391
@@ -308,12 +308,12 @@ ccxt/async_support/upbit.py,sha256=aHWltVeWCuBHFepQpdTt5fLIDjgxDu0m-pra9_UZSJs,8
308
308
  ccxt/async_support/wavesexchange.py,sha256=42GGcYgVOZrbBvB6f7ur_p8NZP6SAReGBVJF3Ifvroc,114100
309
309
  ccxt/async_support/wazirx.py,sha256=70T3kb8SbUXtUnYb_Yjfue3XOcIo7MKMkrG0-XipAMo,51638
310
310
  ccxt/async_support/whitebit.py,sha256=yb655hUqvYOCrpCu7WOeDHaR8KiEb1zRchXizLBMUZw,108793
311
- ccxt/async_support/woo.py,sha256=F_eXE0-Xx2_R1hKgYUrNJU1kSNO2-kswI5NKje7SD8o,139434
311
+ ccxt/async_support/woo.py,sha256=XYiynPgseXXlMAJHocpAj9Cj0geDrwz5GK1ZKqjGZi4,139440
312
312
  ccxt/async_support/yobit.py,sha256=6eqYOcSBmXhJgcKDRMj8oRH_7aoz2E21hxgzvA1TzrA,53500
313
313
  ccxt/async_support/zaif.py,sha256=chPFWbPvYNn0KPHY0fX_nXl60WuvueRO9GNnNMpuYeo,28139
314
314
  ccxt/async_support/zonda.py,sha256=nHlJJSlr_zBSiw4WrKOp2FbO33_UFMK5YyLuf2Pvjr0,80871
315
315
  ccxt/async_support/base/__init__.py,sha256=aVYSsFi--b4InRs9zDN_wtCpj8odosAB726JdUHavrk,67
316
- ccxt/async_support/base/exchange.py,sha256=-ODDp7uJsNRZy6Is03U66FPyusHae86E1KuHR6kIRvw,107190
316
+ ccxt/async_support/base/exchange.py,sha256=I1kH2KjcXhwry4lH4ghvYMP9IDRgWTa0dMICCKPrGB8,107190
317
317
  ccxt/async_support/base/throttler.py,sha256=tvDVcdRUVYi8fZRlEcnqtgzcgB_KMUMRs5Pu8tuU-tU,1847
318
318
  ccxt/async_support/base/ws/__init__.py,sha256=uockzpLuwntKGZbs5EOWFe-Zg-k6Cj7GhNJLc_RX0so,1791
319
319
  ccxt/async_support/base/ws/aiohttp_client.py,sha256=Ed1765emEde2Hj8Ys6f5EjS54ZI1wQ0qIhd04eB7yhU,5751
@@ -327,10 +327,10 @@ ccxt/async_support/base/ws/order_book_side.py,sha256=Pxrq22nCODckJ6G1OXkYEmUunIu
327
327
  ccxt/base/__init__.py,sha256=eTx1OE3HJjspFUQjGm6LBhaQiMKJnXjkdP-JUXknyQ0,1320
328
328
  ccxt/base/decimal_to_precision.py,sha256=fgWRBzRTtsf3r2INyS4f7WHlzgjB5YM1ekiwqD21aac,6634
329
329
  ccxt/base/errors.py,sha256=u_zxABGVPU_K5oLEEZQWOI0_F5Q-SAUq1g1q6AFh7IM,4107
330
- ccxt/base/exchange.py,sha256=yMa_T8Kh7Fi9m2pjMRGulhDfPc3SFff2Pr7kfq_NgZY,274740
330
+ ccxt/base/exchange.py,sha256=BwIzHwYb4Sh4Sal6LVjQKvw8qkexXbbFwsq8PKRz7qo,275089
331
331
  ccxt/base/precise.py,sha256=_xfu54sV0vWNnOfGTKRFykeuWP8mn4K1m9lk1tcllX4,8565
332
332
  ccxt/base/types.py,sha256=ZDDuKtyi-6j98YdcFSa8SS1OfwuSer_PJp1QXTsaMb0,7992
333
- ccxt/pro/__init__.py,sha256=DvdZvmVwsngDqhUocIxGLNaFlafbGwICL8wt8YZzoOY,6998
333
+ ccxt/pro/__init__.py,sha256=GV-tHeSbyfEVy2GUbLd1mzJUhyVeSFggx7LHIGzFB3M,6998
334
334
  ccxt/pro/alpaca.py,sha256=7ePyWli0949ti5UheIn553xmnFpedrNc2W5CKauSZio,27167
335
335
  ccxt/pro/ascendex.py,sha256=fCM3EujSfJvtvffqI56UAstTtwjXFIocwukm15cF8rE,35432
336
336
  ccxt/pro/bequant.py,sha256=5zbsP8BHQTUZ8ZNL6uaACxDbUClgkOV4SYfXT_LfQVg,1351
@@ -529,7 +529,7 @@ ccxt/test/base/test_ticker.py,sha256=cMTIMb1oySNORUCmqI5ZzMswlEyCF6gJMah3vfvo8wQ
529
529
  ccxt/test/base/test_trade.py,sha256=PMtmB8V38dpaP-eb8h488xYMlR6D69yCOhsA1RuWrUA,2336
530
530
  ccxt/test/base/test_trading_fee.py,sha256=2aDCNJtqBkTC_AieO0l1HYGq5hz5qkWlkWb9Nv_fcwk,1066
531
531
  ccxt/test/base/test_transaction.py,sha256=BTbB4UHHXkrvYgwbrhh867nVRlevmIkIrz1W_odlQJI,1434
532
- ccxt-4.3.7.dist-info/METADATA,sha256=igthJB8JKKi9BXo901MXsbNfiEG_u147nFleMjGVsZ4,111189
533
- ccxt-4.3.7.dist-info/WHEEL,sha256=P2T-6epvtXQ2cBOE_U1K4_noqlJFN3tj15djMgEu4NM,110
534
- ccxt-4.3.7.dist-info/top_level.txt,sha256=CkQDuCTDKNcImPV60t36G6MdYfxsAPNiSaEwifVoVMo,5
535
- ccxt-4.3.7.dist-info/RECORD,,
532
+ ccxt-4.3.8.dist-info/METADATA,sha256=--yLmF4JlM5W6P5HxHg7-EehZxRYOxWCvIHk2UFLNr4,111189
533
+ ccxt-4.3.8.dist-info/WHEEL,sha256=P2T-6epvtXQ2cBOE_U1K4_noqlJFN3tj15djMgEu4NM,110
534
+ ccxt-4.3.8.dist-info/top_level.txt,sha256=CkQDuCTDKNcImPV60t36G6MdYfxsAPNiSaEwifVoVMo,5
535
+ ccxt-4.3.8.dist-info/RECORD,,
File without changes