ccxt 4.3.77__py2.py3-none-any.whl → 4.3.78__py2.py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
ccxt/__init__.py CHANGED
@@ -22,7 +22,7 @@
22
22
 
23
23
  # ----------------------------------------------------------------------------
24
24
 
25
- __version__ = '4.3.77'
25
+ __version__ = '4.3.78'
26
26
 
27
27
  # ----------------------------------------------------------------------------
28
28
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.3.77'
7
+ __version__ = '4.3.78'
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # -----------------------------------------------------------------------------
4
4
 
5
- __version__ = '4.3.77'
5
+ __version__ = '4.3.78'
6
6
 
7
7
  # -----------------------------------------------------------------------------
8
8
 
@@ -1180,7 +1180,6 @@ class bingx(Exchange, ImplicitAPI):
1180
1180
  'fee': {
1181
1181
  'cost': self.parse_number(Precise.string_abs(self.safe_string_2(trade, 'commission', 'n'))),
1182
1182
  'currency': currencyCode,
1183
- 'rate': None,
1184
1183
  },
1185
1184
  }, market)
1186
1185
 
@@ -1331,6 +1331,7 @@ class bitget(Exchange, ImplicitAPI):
1331
1331
  'JADE': 'Jade Protocol',
1332
1332
  'DEGEN': 'DegenReborn',
1333
1333
  'TONCOIN': 'TON',
1334
+ 'OMNI': 'omni', # conflict with Omni Network
1334
1335
  },
1335
1336
  'options': {
1336
1337
  'timeframes': {
@@ -1886,7 +1886,6 @@ class bitteam(Exchange, ImplicitAPI):
1886
1886
  fee = {
1887
1887
  'currency': self.safe_currency_code(feeCurrencyId),
1888
1888
  'cost': feeCost,
1889
- 'rate': None,
1890
1889
  }
1891
1890
  intTs = self.parse_to_int(timestamp)
1892
1891
  return self.safe_trade({
@@ -3294,8 +3294,8 @@ class gate(Exchange, ImplicitAPI):
3294
3294
  side = self.safe_string_2(trade, 'side', 'type', contractSide)
3295
3295
  orderId = self.safe_string(trade, 'order_id')
3296
3296
  feeAmount = self.safe_string(trade, 'fee')
3297
- gtFee = self.safe_string(trade, 'gt_fee')
3298
- pointFee = self.safe_string(trade, 'point_fee')
3297
+ gtFee = self.omit_zero(self.safe_string(trade, 'gt_fee'))
3298
+ pointFee = self.omit_zero(self.safe_string(trade, 'point_fee'))
3299
3299
  fees = []
3300
3300
  if feeAmount is not None:
3301
3301
  feeCurrencyId = self.safe_string(trade, 'fee_currency')
@@ -1336,7 +1336,7 @@ class kraken(Exchange, ImplicitAPI):
1336
1336
  async def create_market_order_with_cost(self, symbol: str, side: OrderSide, cost: float, params={}):
1337
1337
  """
1338
1338
  create a market order by providing the symbol, side and cost
1339
- :see: https://docs.kraken.com/rest/#tag/Trading/operation/addOrder
1339
+ :see: https://docs.kraken.com/rest/#tag/Spot-Trading/operation/addOrder
1340
1340
  :param str symbol: unified symbol of the market to create an order in(only USD markets are supported)
1341
1341
  :param str side: 'buy' or 'sell'
1342
1342
  :param float cost: how much you want to trade in units of the quote currency
@@ -1351,7 +1351,7 @@ class kraken(Exchange, ImplicitAPI):
1351
1351
  async def create_market_buy_order_with_cost(self, symbol: str, cost: float, params={}):
1352
1352
  """
1353
1353
  create a market buy order by providing the symbol, side and cost
1354
- :see: https://docs.kraken.com/rest/#tag/Trading/operation/addOrder
1354
+ :see: https://docs.kraken.com/rest/#tag/Spot-Trading/operation/addOrder
1355
1355
  :param str symbol: unified symbol of the market to create an order in
1356
1356
  :param float cost: how much you want to trade in units of the quote currency
1357
1357
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -1362,7 +1362,7 @@ class kraken(Exchange, ImplicitAPI):
1362
1362
 
1363
1363
  async def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
1364
1364
  """
1365
- :see: https://docs.kraken.com/rest/#tag/Trading/operation/addOrder
1365
+ :see: https://docs.kraken.com/rest/#tag/Spot-Trading/operation/addOrder
1366
1366
  create a trade order
1367
1367
  :param str symbol: unified symbol of the market to create an order in
1368
1368
  :param str type: 'market' or 'limit'
@@ -1495,6 +1495,8 @@ class kraken(Exchange, ImplicitAPI):
1495
1495
  # "status": "ok",
1496
1496
  # "txid": "OAW2BO-7RWEK-PZY5UO",
1497
1497
  # "originaltxid": "OXL6SS-UPNMC-26WBE7",
1498
+ # "newuserref": 1234,
1499
+ # "olduserref": 123,
1498
1500
  # "volume": "0.00075000",
1499
1501
  # "price": "13500.0",
1500
1502
  # "orders_cancelled": 1,
@@ -1623,7 +1625,7 @@ class kraken(Exchange, ImplicitAPI):
1623
1625
  if (id is None) or (id.startswith('[')):
1624
1626
  txid = self.safe_list(order, 'txid')
1625
1627
  id = self.safe_string(txid, 0)
1626
- clientOrderId = self.safe_string(order, 'userref')
1628
+ clientOrderId = self.safe_string_2(order, 'userref', 'newuserref')
1627
1629
  rawTrades = self.safe_value(order, 'trades', [])
1628
1630
  trades = []
1629
1631
  for i in range(0, len(rawTrades)):
@@ -1750,7 +1752,7 @@ class kraken(Exchange, ImplicitAPI):
1750
1752
  if postOnly:
1751
1753
  extendedPostFlags = flags + ',post' if (flags is not None) else 'post'
1752
1754
  request['oflags'] = extendedPostFlags
1753
- if (flags is not None) and (request['oflags'] is None):
1755
+ if (flags is not None) and not ('oflags' in request):
1754
1756
  request['oflags'] = flags
1755
1757
  params = self.omit(params, ['timeInForce', 'reduceOnly', 'stopLossPrice', 'takeProfitPrice', 'trailingAmount', 'trailingLimitAmount', 'offset'])
1756
1758
  return [request, params]
@@ -1758,7 +1760,7 @@ class kraken(Exchange, ImplicitAPI):
1758
1760
  async def edit_order(self, id: str, symbol: str, type: OrderType, side: OrderSide, amount: Num = None, price: Num = None, params={}):
1759
1761
  """
1760
1762
  edit a trade order
1761
- :see: https://docs.kraken.com/rest/#tag/Trading/operation/editOrder
1763
+ :see: https://docs.kraken.com/rest/#tag/Spot-Trading/operation/editOrder
1762
1764
  :param str id: order id
1763
1765
  :param str symbol: unified symbol of the market to create an order in
1764
1766
  :param str type: 'market' or 'limit'
@@ -1817,15 +1819,13 @@ class kraken(Exchange, ImplicitAPI):
1817
1819
  clientOrderId = self.safe_value_2(params, 'userref', 'clientOrderId')
1818
1820
  request: dict = {
1819
1821
  'trades': True, # whether or not to include trades in output(optional, default False)
1820
- # 'txid': id, # do not comma separate a list of ids - use fetchOrdersByIds instead
1822
+ 'txid': id, # do not comma separate a list of ids - use fetchOrdersByIds instead
1821
1823
  # 'userref': 'optional', # restrict results to given user reference id(optional)
1822
1824
  }
1823
1825
  query = params
1824
1826
  if clientOrderId is not None:
1825
1827
  request['userref'] = clientOrderId
1826
1828
  query = self.omit(params, ['userref', 'clientOrderId'])
1827
- else:
1828
- request['txid'] = id
1829
1829
  response = await self.privatePostQueryOrders(self.extend(request, query))
1830
1830
  #
1831
1831
  # {
@@ -870,7 +870,6 @@ class kuna(Exchange, ImplicitAPI):
870
870
  'fee': {
871
871
  'cost': self.safe_string(trade, 'fee'),
872
872
  'currency': self.safe_currency_code(self.safe_string(trade, 'feeCurrency')),
873
- 'rate': None,
874
873
  },
875
874
  }, market)
876
875
 
@@ -658,6 +658,12 @@ class vertex(Exchange, ImplicitAPI):
658
658
  amount = None
659
659
  side = None
660
660
  fee = None
661
+ feeCost = self.convert_from_x18(self.safe_string(trade, 'fee'))
662
+ if feeCost is not None:
663
+ fee = {
664
+ 'cost': feeCost,
665
+ 'currency': None,
666
+ }
661
667
  id = self.safe_string_2(trade, 'trade_id', 'submission_idx')
662
668
  order = self.safe_string(trade, 'digest')
663
669
  timestamp = self.safe_timestamp(trade, 'timestamp')
@@ -673,10 +679,6 @@ class vertex(Exchange, ImplicitAPI):
673
679
  subOrder = self.safe_dict(trade, 'order', {})
674
680
  price = self.convert_from_x18(self.safe_string(subOrder, 'priceX18'))
675
681
  amount = self.convert_from_x18(self.safe_string(trade, 'base_filled'))
676
- fee = {
677
- 'cost': self.convert_from_x18(self.safe_string(trade, 'fee')),
678
- 'currency': None,
679
- }
680
682
  if Precise.string_lt(amount, '0'):
681
683
  side = 'sell'
682
684
  else:
ccxt/async_support/woo.py CHANGED
@@ -603,6 +603,9 @@ class woo(Exchange, ImplicitAPI):
603
603
  amount = self.safe_string(trade, 'executed_quantity')
604
604
  order_id = self.safe_string(trade, 'order_id')
605
605
  fee = self.parse_token_and_fee_temp(trade, 'fee_asset', 'fee')
606
+ feeCost = self.safe_string(fee, 'cost')
607
+ if feeCost is not None:
608
+ fee['cost'] = feeCost
606
609
  cost = Precise.string_mul(price, amount)
607
610
  side = self.safe_string_lower(trade, 'side')
608
611
  id = self.safe_string(trade, 'id')
@@ -673,6 +673,9 @@ class woofipro(Exchange, ImplicitAPI):
673
673
  amount = self.safe_string(trade, 'executed_quantity')
674
674
  order_id = self.safe_string(trade, 'order_id')
675
675
  fee = self.parse_token_and_fee_temp(trade, 'fee_asset', 'fee')
676
+ feeCost = self.safe_string(fee, 'cost')
677
+ if feeCost is not None:
678
+ fee['cost'] = feeCost
676
679
  cost = Precise.string_mul(price, amount)
677
680
  side = self.safe_string_lower(trade, 'side')
678
681
  id = self.safe_string(trade, 'id')
ccxt/async_support/xt.py CHANGED
@@ -2035,7 +2035,6 @@ class xt(Exchange, ImplicitAPI):
2035
2035
  'fee': {
2036
2036
  'currency': self.safe_currency_code(self.safe_string_2(trade, 'feeCurrency', 'feeCoin')),
2037
2037
  'cost': self.safe_string(trade, 'fee'),
2038
- 'rate': None,
2039
2038
  },
2040
2039
  }, market)
2041
2040
 
ccxt/base/exchange.py CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.3.77'
7
+ __version__ = '4.3.78'
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
@@ -3276,40 +3276,53 @@ class Exchange(object):
3276
3276
  multiplyPrice = Precise.string_div('1', price)
3277
3277
  multiplyPrice = Precise.string_mul(multiplyPrice, contractSize)
3278
3278
  cost = Precise.string_mul(multiplyPrice, amount)
3279
- parseFee = self.safe_value(trade, 'fee') is None
3280
- parseFees = self.safe_value(trade, 'fees') is None
3281
- shouldParseFees = parseFee or parseFees
3282
- fees = []
3283
- fee = self.safe_value(trade, 'fee')
3284
- if shouldParseFees:
3285
- reducedFees = self.reduce_fees_by_currency(fees) if self.reduceFees else fees
3286
- reducedLength = len(reducedFees)
3287
- for i in range(0, reducedLength):
3288
- reducedFees[i]['cost'] = self.safe_number(reducedFees[i], 'cost')
3289
- if 'rate' in reducedFees[i]:
3290
- reducedFees[i]['rate'] = self.safe_number(reducedFees[i], 'rate')
3291
- if not parseFee and (reducedLength == 0):
3292
- # copy fee to avoid modification by reference
3293
- feeCopy = self.deep_extend(fee)
3294
- feeCopy['cost'] = self.safe_number(feeCopy, 'cost')
3295
- if 'rate' in feeCopy:
3296
- feeCopy['rate'] = self.safe_number(feeCopy, 'rate')
3297
- reducedFees.append(feeCopy)
3298
- if parseFees:
3299
- trade['fees'] = reducedFees
3300
- if parseFee and (reducedLength == 1):
3301
- trade['fee'] = reducedFees[0]
3302
- tradeFee = self.safe_value(trade, 'fee')
3303
- if tradeFee is not None:
3304
- tradeFee['cost'] = self.safe_number(tradeFee, 'cost')
3305
- if 'rate' in tradeFee:
3306
- tradeFee['rate'] = self.safe_number(tradeFee, 'rate')
3307
- trade['fee'] = tradeFee
3279
+ resultFee, resultFees = self.parsed_fee_and_fees(trade)
3280
+ trade['fee'] = resultFee
3281
+ trade['fees'] = resultFees
3308
3282
  trade['amount'] = self.parse_number(amount)
3309
3283
  trade['price'] = self.parse_number(price)
3310
3284
  trade['cost'] = self.parse_number(cost)
3311
3285
  return trade
3312
3286
 
3287
+ def parsed_fee_and_fees(self, container: Any):
3288
+ fee = self.safe_dict(container, 'fee')
3289
+ fees = self.safe_list(container, 'fees')
3290
+ feeDefined = fee is not None
3291
+ feesDefined = fees is not None
3292
+ # parsing only if at least one of them is defined
3293
+ shouldParseFees = (feeDefined or feesDefined)
3294
+ if shouldParseFees:
3295
+ if feeDefined:
3296
+ fee = self.parse_fee_numeric(fee)
3297
+ if not feesDefined:
3298
+ # just set it directly, no further processing needed
3299
+ fees = [fee]
3300
+ # 'fees' were set, so reparse them
3301
+ reducedFees = self.reduce_fees_by_currency(fees) if self.reduceFees else fees
3302
+ reducedLength = len(reducedFees)
3303
+ for i in range(0, reducedLength):
3304
+ reducedFees[i] = self.parse_fee_numeric(reducedFees[i])
3305
+ fees = reducedFees
3306
+ if reducedLength == 1:
3307
+ fee = reducedFees[0]
3308
+ elif reducedLength == 0:
3309
+ fee = None
3310
+ # in case `fee & fees` are None, set `fees` array
3311
+ if fee is None:
3312
+ fee = {
3313
+ 'cost': None,
3314
+ 'currency': None,
3315
+ }
3316
+ if fees is None:
3317
+ fees = []
3318
+ return [fee, fees]
3319
+
3320
+ def parse_fee_numeric(self, fee: Any):
3321
+ fee['cost'] = self.safe_number(fee, 'cost') # ensure numeric
3322
+ if 'rate' in fee:
3323
+ fee['rate'] = self.safe_number(fee, 'rate')
3324
+ return fee
3325
+
3313
3326
  def find_nearest_ceiling(self, arr: List[float], providedValue: float):
3314
3327
  # i.e. findNearestCeiling([10, 30, 50], 23) returns 30
3315
3328
  length = len(arr)
@@ -3378,12 +3391,13 @@ class Exchange(object):
3378
3391
  reduced = {}
3379
3392
  for i in range(0, len(fees)):
3380
3393
  fee = fees[i]
3381
- feeCurrencyCode = self.safe_string(fee, 'currency')
3394
+ code = self.safe_string(fee, 'currency')
3395
+ feeCurrencyCode = code is not code if None else str(i)
3382
3396
  if feeCurrencyCode is not None:
3383
3397
  rate = self.safe_string(fee, 'rate')
3384
- cost = self.safe_value(fee, 'cost')
3385
- if Precise.string_eq(cost, '0'):
3386
- # omit zero cost fees
3398
+ cost = self.safe_string(fee, 'cost')
3399
+ if cost is None:
3400
+ # omit None cost, does not make sense, however, don't omit '0' costs, still make sense
3387
3401
  continue
3388
3402
  if not (feeCurrencyCode in reduced):
3389
3403
  reduced[feeCurrencyCode] = {}
@@ -3392,7 +3406,7 @@ class Exchange(object):
3392
3406
  reduced[feeCurrencyCode][rateKey]['cost'] = Precise.string_add(reduced[feeCurrencyCode][rateKey]['cost'], cost)
3393
3407
  else:
3394
3408
  reduced[feeCurrencyCode][rateKey] = {
3395
- 'currency': feeCurrencyCode,
3409
+ 'currency': code,
3396
3410
  'cost': cost,
3397
3411
  }
3398
3412
  if rate is not None:
@@ -3424,7 +3438,13 @@ class Exchange(object):
3424
3438
  if change is None:
3425
3439
  change = Precise.string_sub(last, open)
3426
3440
  if average is None:
3427
- average = Precise.string_div(Precise.string_add(last, open), '2')
3441
+ precision = 18
3442
+ if market is not None and self.is_tick_precision():
3443
+ marketPrecision = self.safe_dict(market, 'precision')
3444
+ precisionPrice = self.safe_string(marketPrecision, 'price')
3445
+ if precisionPrice is not None:
3446
+ precision = self.precision_from_string(precisionPrice)
3447
+ average = Precise.string_div(Precise.string_add(last, open), '2', precision)
3428
3448
  if (percentage is None) and (change is not None) and (open is not None) and Precise.string_gt(open, '0'):
3429
3449
  percentage = Precise.string_mul(Precise.string_div(change, open), '100')
3430
3450
  if (change is None) and (percentage is not None) and (open is not None):
ccxt/bingx.py CHANGED
@@ -1179,7 +1179,6 @@ class bingx(Exchange, ImplicitAPI):
1179
1179
  'fee': {
1180
1180
  'cost': self.parse_number(Precise.string_abs(self.safe_string_2(trade, 'commission', 'n'))),
1181
1181
  'currency': currencyCode,
1182
- 'rate': None,
1183
1182
  },
1184
1183
  }, market)
1185
1184
 
ccxt/bitget.py CHANGED
@@ -1330,6 +1330,7 @@ class bitget(Exchange, ImplicitAPI):
1330
1330
  'JADE': 'Jade Protocol',
1331
1331
  'DEGEN': 'DegenReborn',
1332
1332
  'TONCOIN': 'TON',
1333
+ 'OMNI': 'omni', # conflict with Omni Network
1333
1334
  },
1334
1335
  'options': {
1335
1336
  'timeframes': {
ccxt/bitteam.py CHANGED
@@ -1886,7 +1886,6 @@ class bitteam(Exchange, ImplicitAPI):
1886
1886
  fee = {
1887
1887
  'currency': self.safe_currency_code(feeCurrencyId),
1888
1888
  'cost': feeCost,
1889
- 'rate': None,
1890
1889
  }
1891
1890
  intTs = self.parse_to_int(timestamp)
1892
1891
  return self.safe_trade({
ccxt/gate.py CHANGED
@@ -3293,8 +3293,8 @@ class gate(Exchange, ImplicitAPI):
3293
3293
  side = self.safe_string_2(trade, 'side', 'type', contractSide)
3294
3294
  orderId = self.safe_string(trade, 'order_id')
3295
3295
  feeAmount = self.safe_string(trade, 'fee')
3296
- gtFee = self.safe_string(trade, 'gt_fee')
3297
- pointFee = self.safe_string(trade, 'point_fee')
3296
+ gtFee = self.omit_zero(self.safe_string(trade, 'gt_fee'))
3297
+ pointFee = self.omit_zero(self.safe_string(trade, 'point_fee'))
3298
3298
  fees = []
3299
3299
  if feeAmount is not None:
3300
3300
  feeCurrencyId = self.safe_string(trade, 'fee_currency')
ccxt/kraken.py CHANGED
@@ -1336,7 +1336,7 @@ class kraken(Exchange, ImplicitAPI):
1336
1336
  def create_market_order_with_cost(self, symbol: str, side: OrderSide, cost: float, params={}):
1337
1337
  """
1338
1338
  create a market order by providing the symbol, side and cost
1339
- :see: https://docs.kraken.com/rest/#tag/Trading/operation/addOrder
1339
+ :see: https://docs.kraken.com/rest/#tag/Spot-Trading/operation/addOrder
1340
1340
  :param str symbol: unified symbol of the market to create an order in(only USD markets are supported)
1341
1341
  :param str side: 'buy' or 'sell'
1342
1342
  :param float cost: how much you want to trade in units of the quote currency
@@ -1351,7 +1351,7 @@ class kraken(Exchange, ImplicitAPI):
1351
1351
  def create_market_buy_order_with_cost(self, symbol: str, cost: float, params={}):
1352
1352
  """
1353
1353
  create a market buy order by providing the symbol, side and cost
1354
- :see: https://docs.kraken.com/rest/#tag/Trading/operation/addOrder
1354
+ :see: https://docs.kraken.com/rest/#tag/Spot-Trading/operation/addOrder
1355
1355
  :param str symbol: unified symbol of the market to create an order in
1356
1356
  :param float cost: how much you want to trade in units of the quote currency
1357
1357
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -1362,7 +1362,7 @@ class kraken(Exchange, ImplicitAPI):
1362
1362
 
1363
1363
  def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
1364
1364
  """
1365
- :see: https://docs.kraken.com/rest/#tag/Trading/operation/addOrder
1365
+ :see: https://docs.kraken.com/rest/#tag/Spot-Trading/operation/addOrder
1366
1366
  create a trade order
1367
1367
  :param str symbol: unified symbol of the market to create an order in
1368
1368
  :param str type: 'market' or 'limit'
@@ -1495,6 +1495,8 @@ class kraken(Exchange, ImplicitAPI):
1495
1495
  # "status": "ok",
1496
1496
  # "txid": "OAW2BO-7RWEK-PZY5UO",
1497
1497
  # "originaltxid": "OXL6SS-UPNMC-26WBE7",
1498
+ # "newuserref": 1234,
1499
+ # "olduserref": 123,
1498
1500
  # "volume": "0.00075000",
1499
1501
  # "price": "13500.0",
1500
1502
  # "orders_cancelled": 1,
@@ -1623,7 +1625,7 @@ class kraken(Exchange, ImplicitAPI):
1623
1625
  if (id is None) or (id.startswith('[')):
1624
1626
  txid = self.safe_list(order, 'txid')
1625
1627
  id = self.safe_string(txid, 0)
1626
- clientOrderId = self.safe_string(order, 'userref')
1628
+ clientOrderId = self.safe_string_2(order, 'userref', 'newuserref')
1627
1629
  rawTrades = self.safe_value(order, 'trades', [])
1628
1630
  trades = []
1629
1631
  for i in range(0, len(rawTrades)):
@@ -1750,7 +1752,7 @@ class kraken(Exchange, ImplicitAPI):
1750
1752
  if postOnly:
1751
1753
  extendedPostFlags = flags + ',post' if (flags is not None) else 'post'
1752
1754
  request['oflags'] = extendedPostFlags
1753
- if (flags is not None) and (request['oflags'] is None):
1755
+ if (flags is not None) and not ('oflags' in request):
1754
1756
  request['oflags'] = flags
1755
1757
  params = self.omit(params, ['timeInForce', 'reduceOnly', 'stopLossPrice', 'takeProfitPrice', 'trailingAmount', 'trailingLimitAmount', 'offset'])
1756
1758
  return [request, params]
@@ -1758,7 +1760,7 @@ class kraken(Exchange, ImplicitAPI):
1758
1760
  def edit_order(self, id: str, symbol: str, type: OrderType, side: OrderSide, amount: Num = None, price: Num = None, params={}):
1759
1761
  """
1760
1762
  edit a trade order
1761
- :see: https://docs.kraken.com/rest/#tag/Trading/operation/editOrder
1763
+ :see: https://docs.kraken.com/rest/#tag/Spot-Trading/operation/editOrder
1762
1764
  :param str id: order id
1763
1765
  :param str symbol: unified symbol of the market to create an order in
1764
1766
  :param str type: 'market' or 'limit'
@@ -1817,15 +1819,13 @@ class kraken(Exchange, ImplicitAPI):
1817
1819
  clientOrderId = self.safe_value_2(params, 'userref', 'clientOrderId')
1818
1820
  request: dict = {
1819
1821
  'trades': True, # whether or not to include trades in output(optional, default False)
1820
- # 'txid': id, # do not comma separate a list of ids - use fetchOrdersByIds instead
1822
+ 'txid': id, # do not comma separate a list of ids - use fetchOrdersByIds instead
1821
1823
  # 'userref': 'optional', # restrict results to given user reference id(optional)
1822
1824
  }
1823
1825
  query = params
1824
1826
  if clientOrderId is not None:
1825
1827
  request['userref'] = clientOrderId
1826
1828
  query = self.omit(params, ['userref', 'clientOrderId'])
1827
- else:
1828
- request['txid'] = id
1829
1829
  response = self.privatePostQueryOrders(self.extend(request, query))
1830
1830
  #
1831
1831
  # {
ccxt/kuna.py CHANGED
@@ -870,7 +870,6 @@ class kuna(Exchange, ImplicitAPI):
870
870
  'fee': {
871
871
  'cost': self.safe_string(trade, 'fee'),
872
872
  'currency': self.safe_currency_code(self.safe_string(trade, 'feeCurrency')),
873
- 'rate': None,
874
873
  },
875
874
  }, market)
876
875
 
ccxt/pro/__init__.py CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  # ----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.3.77'
7
+ __version__ = '4.3.78'
8
8
 
9
9
  # ----------------------------------------------------------------------------
10
10
 
ccxt/pro/binance.py CHANGED
@@ -204,7 +204,7 @@ class binance(ccxt.async_support.binance):
204
204
  :param dict [params]: exchange specific parameters for the bitmex api endpoint
205
205
  :returns dict: an array of `liquidation structures <https://github.com/ccxt/ccxt/wiki/Manual#liquidation-structure>`
206
206
  """
207
- return self.watch_liquidations_for_symbols([symbol], since, limit, params)
207
+ return await self.watch_liquidations_for_symbols([symbol], since, limit, params)
208
208
 
209
209
  async def watch_liquidations_for_symbols(self, symbols: List[str] = None, since: Int = None, limit: Int = None, params={}) -> List[Liquidation]:
210
210
  """
ccxt/pro/paradex.py CHANGED
@@ -112,6 +112,7 @@ class paradex(ccxt.async_support.paradex):
112
112
  :param dict [params]: extra parameters specific to the exchange API endpoint
113
113
  :returns dict: A dictionary of `order book structures <https://docs.ccxt.com/#/?id=order-book-structure>` indexed by market symbols
114
114
  """
115
+ await self.load_markets()
115
116
  market = self.market(symbol)
116
117
  messageHash = 'order_book.' + market['id'] + '.snapshot@15@100ms'
117
118
  url = self.urls['api']['ws']
@@ -213,6 +214,7 @@ class paradex(ccxt.async_support.paradex):
213
214
  :param dict [params]: extra parameters specific to the exchange API endpoint
214
215
  :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
215
216
  """
217
+ await self.load_markets()
216
218
  symbols = self.market_symbols(symbols)
217
219
  channel = 'markets_summary'
218
220
  url = self.urls['api']['ws']
ccxt/vertex.py CHANGED
@@ -658,6 +658,12 @@ class vertex(Exchange, ImplicitAPI):
658
658
  amount = None
659
659
  side = None
660
660
  fee = None
661
+ feeCost = self.convert_from_x18(self.safe_string(trade, 'fee'))
662
+ if feeCost is not None:
663
+ fee = {
664
+ 'cost': feeCost,
665
+ 'currency': None,
666
+ }
661
667
  id = self.safe_string_2(trade, 'trade_id', 'submission_idx')
662
668
  order = self.safe_string(trade, 'digest')
663
669
  timestamp = self.safe_timestamp(trade, 'timestamp')
@@ -673,10 +679,6 @@ class vertex(Exchange, ImplicitAPI):
673
679
  subOrder = self.safe_dict(trade, 'order', {})
674
680
  price = self.convert_from_x18(self.safe_string(subOrder, 'priceX18'))
675
681
  amount = self.convert_from_x18(self.safe_string(trade, 'base_filled'))
676
- fee = {
677
- 'cost': self.convert_from_x18(self.safe_string(trade, 'fee')),
678
- 'currency': None,
679
- }
680
682
  if Precise.string_lt(amount, '0'):
681
683
  side = 'sell'
682
684
  else:
ccxt/woo.py CHANGED
@@ -603,6 +603,9 @@ class woo(Exchange, ImplicitAPI):
603
603
  amount = self.safe_string(trade, 'executed_quantity')
604
604
  order_id = self.safe_string(trade, 'order_id')
605
605
  fee = self.parse_token_and_fee_temp(trade, 'fee_asset', 'fee')
606
+ feeCost = self.safe_string(fee, 'cost')
607
+ if feeCost is not None:
608
+ fee['cost'] = feeCost
606
609
  cost = Precise.string_mul(price, amount)
607
610
  side = self.safe_string_lower(trade, 'side')
608
611
  id = self.safe_string(trade, 'id')
ccxt/woofipro.py CHANGED
@@ -673,6 +673,9 @@ class woofipro(Exchange, ImplicitAPI):
673
673
  amount = self.safe_string(trade, 'executed_quantity')
674
674
  order_id = self.safe_string(trade, 'order_id')
675
675
  fee = self.parse_token_and_fee_temp(trade, 'fee_asset', 'fee')
676
+ feeCost = self.safe_string(fee, 'cost')
677
+ if feeCost is not None:
678
+ fee['cost'] = feeCost
676
679
  cost = Precise.string_mul(price, amount)
677
680
  side = self.safe_string_lower(trade, 'side')
678
681
  id = self.safe_string(trade, 'id')
ccxt/xt.py CHANGED
@@ -2034,7 +2034,6 @@ class xt(Exchange, ImplicitAPI):
2034
2034
  'fee': {
2035
2035
  'currency': self.safe_currency_code(self.safe_string_2(trade, 'feeCurrency', 'feeCoin')),
2036
2036
  'cost': self.safe_string(trade, 'fee'),
2037
- 'rate': None,
2038
2037
  },
2039
2038
  }, market)
2040
2039
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ccxt
3
- Version: 4.3.77
3
+ Version: 4.3.78
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
@@ -270,13 +270,13 @@ console.log(version, Object.keys(exchanges));
270
270
 
271
271
  All-in-one browser bundle (dependencies included), served from a CDN of your choice:
272
272
 
273
- * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.3.77/dist/ccxt.browser.min.js
274
- * unpkg: https://unpkg.com/ccxt@4.3.77/dist/ccxt.browser.min.js
273
+ * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.3.78/dist/ccxt.browser.min.js
274
+ * unpkg: https://unpkg.com/ccxt@4.3.78/dist/ccxt.browser.min.js
275
275
 
276
276
  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.
277
277
 
278
278
  ```HTML
279
- <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.3.77/dist/ccxt.browser.min.js"></script>
279
+ <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.3.78/dist/ccxt.browser.min.js"></script>
280
280
  ```
281
281
 
282
282
  Creates a global `ccxt` object:
@@ -1,4 +1,4 @@
1
- ccxt/__init__.py,sha256=Y3UuPrkMOnSk2fY4JB8Tkpv5UqfX0HPi5TT21-zOCMI,16417
1
+ ccxt/__init__.py,sha256=bQokervOh_2VKFrxmeGRdEVLgQvFzgKbHp9FR_quhtw,16417
2
2
  ccxt/ace.py,sha256=Gee4ymA83iAuBFm3J8NaTb7qmu9buV2trA676KCtSVg,42383
3
3
  ccxt/alpaca.py,sha256=HQuhQZSFGRlT-BaCUSEZmxpzYp6tll2zn63qn3gTmoU,47470
4
4
  ccxt/ascendex.py,sha256=4aEwibO_me6khr66z8JFqDBxe2gtFOWIFBE7ulBEJPs,151933
@@ -8,7 +8,7 @@ ccxt/binance.py,sha256=nLrtlBJqMwFmXrRE7GqEHVdV8G0tCdQR7xsQLiTrGP4,641536
8
8
  ccxt/binancecoinm.py,sha256=arFnEh8mErSyi23eVPWE4iwoT7PWQyxGGVJCKCy6UJY,1702
9
9
  ccxt/binanceus.py,sha256=hdcT4OnadcdFFFjF3GtM0nWv90jqojqwdVS3xWGuW40,9163
10
10
  ccxt/binanceusdm.py,sha256=bAPcJj5HLxoCdPolriM8sJpoTBwbV78vBTbKRmWhNP4,2632
11
- ccxt/bingx.py,sha256=5HNR95wdPdZY9X41gUM5X8LNdrVFidd0XcmEhGd9UOw,244237
11
+ ccxt/bingx.py,sha256=dYb2tADqgxTglhSBNypxpd9pkLzekejQ1ISvgy3yeYQ,244207
12
12
  ccxt/bit2c.py,sha256=KwHefm2dfgcSR5LeGbHpFQlSI3LNot8tmDEgRJc2gBc,37061
13
13
  ccxt/bitbank.py,sha256=bHLOW6EAbNsjK2nXCtmxj23f2geW_-E_xfHXAvARMtw,43534
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=8GoogNrMLM0UZoWkrxXehN8AN77DHxdD3p1aVarLlp4,73440
18
18
  ccxt/bitfinex2.py,sha256=m1PXKkM7tDf-ud-dmyqqYMF942IO3U0Du7AS3iVx-GU,160641
19
19
  ccxt/bitflyer.py,sha256=biQ8-J_HSb9_S6HE1LBDd6BGpIZSMxK5JyTZ3Xg1SdI,41683
20
- ccxt/bitget.py,sha256=PmxXOKJA_fc_IehPm0cNa-fwCSdz1PnH6SHZm7BMgxk,424558
20
+ ccxt/bitget.py,sha256=ZQvtdW3pnv-LVHG3a1UwR72b-K8Fq-BZ-tu_haz-v60,424620
21
21
  ccxt/bithumb.py,sha256=8oTnFWi8Ai9fnm5FPXvNmaUAVJEOqYi-18VC23cWmXY,47935
22
22
  ccxt/bitmart.py,sha256=ZSy0ua1ymOfwrMLkWNrn6elI1c8RhMtTvKfENm_0VwA,211961
23
23
  ccxt/bitmex.py,sha256=oOFatIOxvXIPOdOeeVau-IdryOeYpdCtTPGxX05HA9A,126861
@@ -26,7 +26,7 @@ ccxt/bitpanda.py,sha256=aiwPkx9lKbVzt4ggoYdq_mIbMGtg5ZtGl2yRHO5xyz8,471
26
26
  ccxt/bitrue.py,sha256=Qy8YKJ0A3TdQv25oyc05wD6FHXBfLDp8GWHAaLDM71c,136636
27
27
  ccxt/bitso.py,sha256=CxUA6JyHHixIngDA-xld1nAqaRdcRN_GnEFh96jp8dk,71542
28
28
  ccxt/bitstamp.py,sha256=9rHhmzcQfYtWvKPFG0f-KeTmrQe_weG1s7dTRcYsPqM,94237
29
- ccxt/bitteam.py,sha256=Q37sYmrOAactWHghRzoKOEYvBrsyxQChXvJOAefWuaw,102290
29
+ ccxt/bitteam.py,sha256=S5gDVlmAqoK_bOuCUmfyStFAApq2kDxQaUHHDf4byQM,102264
30
30
  ccxt/bitvavo.py,sha256=2TPaTuITm7pd1Hwr0R6Bj_vveDdQ8BCjGN950P1NPDs,91773
31
31
  ccxt/bl3p.py,sha256=9i67YpJBrD-6pocvqq9ZyKjYXoOIwlJKuNHIW_jgmmM,20648
32
32
  ccxt/blockchaincom.py,sha256=hUYegjsT8e-eMRoEUH45l3916HgW00mJh_AOkwxNCCE,48795
@@ -56,7 +56,7 @@ ccxt/deribit.py,sha256=hs6yUT8s7sfmO-GJ9RZ9nQC7Y9vnp_2puTRrd9r1Plw,161350
56
56
  ccxt/digifinex.py,sha256=pUPM7EEeRFoenX_jzNJM1RNuIUjATy6GB4J2osJJ4bY,169282
57
57
  ccxt/exmo.py,sha256=KlQqGZey31br-SVwhQg6mWIESyeM_wiIKRDOzIekuSs,114638
58
58
  ccxt/fmfwio.py,sha256=RbVLvzPwnqfDsE7Ea-N13ISCC82eJVPsXYjrleASmew,1236
59
- ccxt/gate.py,sha256=1giHmuVDpdpS6wGMVjIoeRnrSO4Ay4CIXdny5VyyEcM,327567
59
+ ccxt/gate.py,sha256=IJjP0zfV_BUdQLR6UxweOyqNkRB83j4YYIWQa0DQmtk,327599
60
60
  ccxt/gateio.py,sha256=86AETJWODl_vA5VNeQRHZprmpNIY1HAxCddKZcnKSi8,445
61
61
  ccxt/gemini.py,sha256=ddoOnPZzu-l899JGVw4b9wwT9HI20mVqLz7iihhZxng,80876
62
62
  ccxt/hitbtc.py,sha256=iqyd0otbWmIHUJiJ6gzIfe34IOa8PCEeS8nG6s6Ogc0,153398
@@ -69,11 +69,11 @@ ccxt/hyperliquid.py,sha256=r_xDktfiSdLDbxwkN_vCKSAu4n9uPyKVlWio-ligUms,109612
69
69
  ccxt/idex.py,sha256=P2jNsxiwIlMgrfPKbtmjLJQrzFcWp_TjgJaLq793oco,73255
70
70
  ccxt/independentreserve.py,sha256=ChkSnahGsn0aN_cfaAonSk-V2Aa1UB-0cPTa1d3AdI4,37713
71
71
  ccxt/indodax.py,sha256=rFfAwlYalCXdHQvhjmb7Zt4fGYqjoPv_koL21CBv-O8,53431
72
- ccxt/kraken.py,sha256=guJXyTbgL1DDzun1FbtIRgHPPCthpwbusy5ZJGtbydY,130222
72
+ ccxt/kraken.py,sha256=Zv0sz1qtaKe8DlGQpTMdpjhc9Elk4I9ovu7CXFpUfqs,130282
73
73
  ccxt/krakenfutures.py,sha256=2K40RYEqHB2kgo9715eXc8O2SKcZpAb26iRdC70ftts,119521
74
74
  ccxt/kucoin.py,sha256=rwv5bdlaeFAMbo2vYpT3_mX_keeJmz5Nk5HF26Br3vA,226576
75
75
  ccxt/kucoinfutures.py,sha256=Mn9eflwmD_FmTCHYkRvyfxG3SU3Pgv9Hpj-6umYT3h8,124558
76
- ccxt/kuna.py,sha256=xkPCqoFB64f7mWNcXhhX4RrHzOtDGqOMMQ9gz7o0lcY,96187
76
+ ccxt/kuna.py,sha256=GnIMk8R_IL84FTUHDNP6jHxd2FKNX9YwfoCXoYG83uA,96157
77
77
  ccxt/latoken.py,sha256=JkfGMFYEQqE_2BG3EHQozelw6yxbHXu1TPebg4a3Cgg,79462
78
78
  ccxt/lbank.py,sha256=Glx9CN_jdQMiUngJLYioxzwDfgFTdusdOfK53_Bg6A8,116045
79
79
  ccxt/luno.py,sha256=mJqzQFX-DneQ6Wo0Dqfc7sG0OVmaPSKAkmRs1pM7Yj8,46191
@@ -98,13 +98,13 @@ ccxt/timex.py,sha256=Un10iGNwAHPifpQftyXdUwoqS-10ho6ZIesz2Ts_Iqg,72068
98
98
  ccxt/tokocrypto.py,sha256=aV-98hzr75iQO3GEmiUyTNufDqHfoze04Z2Fk195B3Q,123192
99
99
  ccxt/tradeogre.py,sha256=DCxTLjtGW7ADRA-jekCkGAn81-GIgdOAxbJFcBLYOFU,24211
100
100
  ccxt/upbit.py,sha256=W_W8aETJyopwhYfZd2tWvhPvi7BjQ4KSIOdn8nzyWv8,85413
101
- ccxt/vertex.py,sha256=lHM2VbZCIYS4EeJ7Y9KoZcEepF7Cue7YITItyNXLiqk,121703
101
+ ccxt/vertex.py,sha256=YoKnzxhem56C19SckA6yHUPH1bk86PfZ4Z-T01TFygg,121761
102
102
  ccxt/wavesexchange.py,sha256=8KrV-euIdDeARQ-h-T-nTlFJ9hk6TLuwGl8U7Xr_Lgk,114825
103
103
  ccxt/wazirx.py,sha256=LVHNdononi8FrZpT0pYiJoS-NrNi7_uIZ6Qbu8dJRPc,52405
104
104
  ccxt/whitebit.py,sha256=fkM0Clt74bSiOJ_L-CehR2Gkn3v3kZksCQT0JCCG5rs,119340
105
- ccxt/woo.py,sha256=NJejIgZqXPsVM3pIffDXbYOeaLDzFnfxR3tO3Ksf9pM,153028
106
- ccxt/woofipro.py,sha256=JQdGizBIOXPmCHnKZsH71CfzCum1_mNCpFymV-JaX-U,115350
107
- ccxt/xt.py,sha256=esWHEOeI7Kbm53GsZB-7Ds34yvyoJjanL_MIBvADuIE,202646
105
+ ccxt/woo.py,sha256=VSW2iQ6t9SCB5GYlRClLfUD468HNW2SOhM6uEo3A_e4,153142
106
+ ccxt/woofipro.py,sha256=-qGU-7u764-744FvsmqVTvWXsuGxjlNCgJfAj_Yq6PA,115464
107
+ ccxt/xt.py,sha256=a9f_Oq5KyDdytyCqW15jjXXdHGumbZwCqutt8cbfsPo,202616
108
108
  ccxt/yobit.py,sha256=q1oj-wf0VwNw3U7kC5AOyHRSxWVZO6s8xGscBJiSLhI,54553
109
109
  ccxt/zaif.py,sha256=LgeOsvAo4ShQW1s-RidgUYK4DnRU-Dk0eJG0Ca6M_9U,28862
110
110
  ccxt/zonda.py,sha256=KZfv46H6YsVpTQLSt4BvMiGFQr0WRLmbUpeODVv21O0,81419
@@ -218,7 +218,7 @@ ccxt/abstract/xt.py,sha256=JkWvsic3L2O968BCr9H5Wd5NIbRE9aTT2A-9WbAtl0c,27146
218
218
  ccxt/abstract/yobit.py,sha256=8ycfCO8ORFly9hc0Aa47sZyX4_ZKPXS9h9yJzI-uQ7Q,1339
219
219
  ccxt/abstract/zaif.py,sha256=m15WHdl3gYy0GOXNZ8NEH8eE7sVh8c0T_ITNuU8vXeU,3935
220
220
  ccxt/abstract/zonda.py,sha256=X-hCW0SdX3YKZWixDyW-O2211M58Rno8kKJ6quY7rw4,7183
221
- ccxt/async_support/__init__.py,sha256=omcQOOAT6PGan98OiYKqoPq7a5lP8v9ECXWenoOpCgg,16230
221
+ ccxt/async_support/__init__.py,sha256=emYlNdNMxVKpXa3e-KxIgOUZdCXClMAOEi1kaDs8zx0,16230
222
222
  ccxt/async_support/ace.py,sha256=zBmLUKH691a2BH1sPzlJPg-uO7lD6Ys92Rv8WSzNtoo,42607
223
223
  ccxt/async_support/alpaca.py,sha256=495vDvdF1IWlsh9QhUnMtkMuINdD0EzeFGlUVqCf8TE,47682
224
224
  ccxt/async_support/ascendex.py,sha256=LK259BdUqU0_STGRH6DmTgaR-7lXqFpZHFVACf2um5c,152721
@@ -228,7 +228,7 @@ ccxt/async_support/binance.py,sha256=TG-2Cq3DF93VXoeXV3d_j2lgAW00eyHfXrCOgwb077U
228
228
  ccxt/async_support/binancecoinm.py,sha256=yeE73xG5UXD_X3VPul6DMGnV_mgJfWYskpas1BUDdCU,1740
229
229
  ccxt/async_support/binanceus.py,sha256=c-K3Tk7LaRJjmYdCx8vBOqsx01uXrtvt0PC2ekBiD0g,9177
230
230
  ccxt/async_support/binanceusdm.py,sha256=8ugRkx7vyYmn67wdkEEf2f-DFMGAoC4t09usKlPVNyw,2670
231
- ccxt/async_support/bingx.py,sha256=eVJGhA-7Q_3ryeQMdMYl0NG9Wsxgvm-aNz0y5oIfGBg,245507
231
+ ccxt/async_support/bingx.py,sha256=U6ZHlGHPwJDMjitnXE5SOXFnLeKW-_ac-rJ1KdaT798,245477
232
232
  ccxt/async_support/bit2c.py,sha256=1s8GGFqdk9FHfG6-fCmJGePppIpHDHZkjN7u6gPekP8,37273
233
233
  ccxt/async_support/bitbank.py,sha256=To1wSMT8i2bVRZABSXIuB2pyeLhmKkE6CHP4i9LMQQU,43794
234
234
  ccxt/async_support/bitbay.py,sha256=jcaEXi2IhYTva8ezO_SfJhwxEZk7HST4J3NaxD16BQA,492
@@ -237,7 +237,7 @@ ccxt/async_support/bitcoincom.py,sha256=RiqwhK3RfxQ_PXTa860fphDCvwA8dalL-_rXlK85
237
237
  ccxt/async_support/bitfinex.py,sha256=gypR-TDeWWlamJIjEYwbsEhMQYgu9kqAVvuNxOVWVTo,73880
238
238
  ccxt/async_support/bitfinex2.py,sha256=vTO61ELmw5d8A7xvmINff17pCWpoiIrVnc_RJzVic3M,161375
239
239
  ccxt/async_support/bitflyer.py,sha256=hIrGMxaM78V1i-gHN2FRFAhI2aaLR21mPAoIE33fW70,41991
240
- ccxt/async_support/bitget.py,sha256=BT4wkYizx3UF5m0wRv0f0QVqrle2y5JXLPQD73uSjc8,426182
240
+ ccxt/async_support/bitget.py,sha256=JloBQJwLONpLsNjzTxfabc-poDryi3xqwl66UNYi8DU,426244
241
241
  ccxt/async_support/bithumb.py,sha256=Q0Cx_cRKZRfdpBAhQyINm63Qw3M6BRYQRiF0UqYzfis,48214
242
242
  ccxt/async_support/bitmart.py,sha256=sNb0CAnVrxrlO2Htg4DCYJ12ti1eRjqtLczEj-fKM_g,212917
243
243
  ccxt/async_support/bitmex.py,sha256=qSKH_dXDtpY5BUrLUbESI3a3WQhBFrc1ucv1N5GDuIU,127439
@@ -246,7 +246,7 @@ ccxt/async_support/bitpanda.py,sha256=2k3URBWrpnh2xHa7JiYenI7_4MW5UeOPGzetlmRkR4
246
246
  ccxt/async_support/bitrue.py,sha256=g2wFOSJhHEiBgGYx-mpROhWsqPExMBAS_Gewf1N7U6o,137294
247
247
  ccxt/async_support/bitso.py,sha256=ausf6GEbMrsdX0238fs_u8IEcrGGewVzp4Rb4hRx-rk,71928
248
248
  ccxt/async_support/bitstamp.py,sha256=MuqqoC34QElzhTeQBeMRRU2SRponfzvN2FkVaPMRILA,94737
249
- ccxt/async_support/bitteam.py,sha256=__dkwq-aya7s81-0licsoMmezTtvZea3KubDeJusEsA,102622
249
+ ccxt/async_support/bitteam.py,sha256=vPMTVr0bDCd5okV_tFA9gVVW4a5NmsabvEplOm2-uOo,102596
250
250
  ccxt/async_support/bitvavo.py,sha256=t11d0xzRETRJby8donxpDtlUr7NzPMR8E6xckRSviMw,92207
251
251
  ccxt/async_support/bl3p.py,sha256=6K1wuBI0uFjoN0N7V6Bps_jKeNCJUQrsXO9tubuZlyU,20776
252
252
  ccxt/async_support/blockchaincom.py,sha256=h5LUIfI916FbTANFanqUKYpK35aRkIsFSEPkZJGPJAA,49187
@@ -276,7 +276,7 @@ ccxt/async_support/deribit.py,sha256=JfdtFswWctlKE_GOjoxFIVKTNq-LUeuVik59MAx-u8s
276
276
  ccxt/async_support/digifinex.py,sha256=6fj4RPpxV8ArNSBXm5_y_Mt7fzjYxYOSO8mcxGKXpUU,170252
277
277
  ccxt/async_support/exmo.py,sha256=uVJsy3mfNLpfbY0ndl2EF9hipUylEw8J58J3wCGyyA0,115270
278
278
  ccxt/async_support/fmfwio.py,sha256=lzfSnPrB2ARcC3EIqAuBM4vyg6LJ6n8RE71Zvt3ez1s,1250
279
- ccxt/async_support/gate.py,sha256=3yuiDnxSW2zjMTIaIkvJsM-uVbUsOWV4JK6yQggSNEM,329287
279
+ ccxt/async_support/gate.py,sha256=LS5x5skfemCLaH9LFmVEs6g5oLVV3Uq1XCGMYYQoLy0,329319
280
280
  ccxt/async_support/gateio.py,sha256=6_t032F9p9x5KGTjtSuqGXITzFOx-XAQBYLpsuQjzxw,459
281
281
  ccxt/async_support/gemini.py,sha256=7X5-PE3rPrPycUVXu3FtAcDFjNR3QUwYd6lPRQYQeEw,81389
282
282
  ccxt/async_support/hitbtc.py,sha256=jWmyRAy_wkpEidgjCxU0gWur99YJjYHPjD9CN4vJbUE,154444
@@ -289,11 +289,11 @@ ccxt/async_support/hyperliquid.py,sha256=wFj9yXEojlPWK4JT6aOWFI08P9EwkWT9m7Furqi
289
289
  ccxt/async_support/idex.py,sha256=UcAvdMc2CP_6E8lET4rmQiIP-RaUfZHSo6pQeA17v-g,73731
290
290
  ccxt/async_support/independentreserve.py,sha256=fCTAQ1U74KOZHIoYbDxzEly1xSgykcYcdpeiJiCEXkU,37991
291
291
  ccxt/async_support/indodax.py,sha256=m6F8bSiEz9c6UQuadeOfC40rnmlAVKkj94C1uvsc9k0,53739
292
- ccxt/async_support/kraken.py,sha256=G5lTh1l1LNZcuPz4TphP3Hzg1t5lbRDkJ2sipUDz_8w,130872
292
+ ccxt/async_support/kraken.py,sha256=UUuukP50quWE_oK8AtN7XwTWrntNxumr-hL0JhBrrfw,130932
293
293
  ccxt/async_support/krakenfutures.py,sha256=2r88_rC1cY7t4s8dgeqRUlwNC2NVaagS9wPAEonLAQs,120009
294
294
  ccxt/async_support/kucoin.py,sha256=XAOfLEyRUeHfS3pB5elec6F1M_ryPyaEKZle2rPFZDM,227677
295
295
  ccxt/async_support/kucoinfutures.py,sha256=uy8gNsJOI6SggxhYMH1TSTFM6rlzWvLknZL_KgCDLBE,125196
296
- ccxt/async_support/kuna.py,sha256=7PMrbVQaW0OHC3MnKjmepZjuJ86LpdSKMFMXJM4L1dQ,96603
296
+ ccxt/async_support/kuna.py,sha256=QtzLgqgv8mLXECN2drWNVtdvm_vy-bawdxKvozDzbVE,96573
297
297
  ccxt/async_support/latoken.py,sha256=iLypvfxDSW3PGHWLraibz0hBZV4ch5LYH5D24VOnIqk,79938
298
298
  ccxt/async_support/lbank.py,sha256=MeqPjECSmsplCtatu7Ns6sHRwzAGP_6S5MwB2BomnXk,116757
299
299
  ccxt/async_support/luno.py,sha256=F4t6XgboOe688S6bZCEnaF_ZEh_6f1YTqV6wRaddWo0,46529
@@ -318,18 +318,18 @@ ccxt/async_support/timex.py,sha256=vRHjqc-6uMgZTY-sFTBApU_QBnrUri8gaHPNw_Na3Jo,7
318
318
  ccxt/async_support/tokocrypto.py,sha256=nzJhrGTCTWMbbjI4P_IKfO1O84td8pSssCgZhTqQ7o4,123554
319
319
  ccxt/async_support/tradeogre.py,sha256=A4DEbbRL_g_5WAp7WOB96s08-zgXfGQ9lYZnDX5H1eI,24405
320
320
  ccxt/async_support/upbit.py,sha256=GmhV24xdjd5NSCronYkqLCM8rr_hNdpt4NEDA5jEkLw,85895
321
- ccxt/async_support/vertex.py,sha256=6eOWWpuDaGHhSMkOb1CR7ZhlnaMVNWVLoIKOK_W4mT4,122203
321
+ ccxt/async_support/vertex.py,sha256=_KDPAVq5Bew-w77wiGQpivZCGRs6yGKoW9HGh8PhOLc,122261
322
322
  ccxt/async_support/wavesexchange.py,sha256=kdF7Nm5a34mtgIj2HWTLuV3plt4K3EBKMpLENIxtoMk,115375
323
323
  ccxt/async_support/wazirx.py,sha256=bnUpw9be3o4l2Hxm3jcfNXn5bMyZlgqoG8BGPusuIzs,52707
324
324
  ccxt/async_support/whitebit.py,sha256=haF5nFYGuJzkplHBIyLLDJ6N3ThIDPpgjeI3S-TYs98,119990
325
- ccxt/async_support/woo.py,sha256=JjarWyUMmZ2X2UaKFhHyo-SD_mk5kYIWkYoSUdIe3g0,153996
326
- ccxt/async_support/woofipro.py,sha256=xXfZj56dOmUZ67z7tsRiHL-XVtFlst-UXRPh6qRvrE0,116030
327
- ccxt/async_support/xt.py,sha256=9k__X07qzgB_NwSplLfJL4_4eKtHslL8Qlfv6xBwZKU,203800
325
+ ccxt/async_support/woo.py,sha256=uaNh3timNm6_DNhiOn5l4Za4wagj4AhlxkDh4Fbhxfk,154110
326
+ ccxt/async_support/woofipro.py,sha256=wLOSXkKdEqpw4q-9uzM67wFdhWDp0Li1wb8nPHmBwT4,116144
327
+ ccxt/async_support/xt.py,sha256=_U-r4Gp0oBCOE6Ngo98Sn_Q6tr_81CUDDSliF0FMezE,203770
328
328
  ccxt/async_support/yobit.py,sha256=JuH_yClCl_cd5L-BMTt3MPAvIF61Wpqc3W7H-fno6Hs,54881
329
329
  ccxt/async_support/zaif.py,sha256=-ZTr8M2JaIRCL90VrbCDXBMAsZwbiwsFChSQ2rWODuQ,29044
330
330
  ccxt/async_support/zonda.py,sha256=jncr6Wg12S72CTpu6mCKCse1pm1f8oefVQurQSrFvP0,81733
331
331
  ccxt/async_support/base/__init__.py,sha256=aVYSsFi--b4InRs9zDN_wtCpj8odosAB726JdUHavrk,67
332
- ccxt/async_support/base/exchange.py,sha256=7m37IiRUXsANAZdHbrx2q-yTCGZ7AdZxnvxj7QUGH7Y,110799
332
+ ccxt/async_support/base/exchange.py,sha256=MLNPAkDoC9HYLicAqYdXVQEoJ5sxZhDA3SPc3RlnUSo,110799
333
333
  ccxt/async_support/base/throttler.py,sha256=tvDVcdRUVYi8fZRlEcnqtgzcgB_KMUMRs5Pu8tuU-tU,1847
334
334
  ccxt/async_support/base/ws/__init__.py,sha256=uockzpLuwntKGZbs5EOWFe-Zg-k6Cj7GhNJLc_RX0so,1791
335
335
  ccxt/async_support/base/ws/aiohttp_client.py,sha256=5IEiT0elWI9a7Vr-KV0jgmlbpLJWBzIlrLaCkTKGaqY,5752
@@ -343,14 +343,14 @@ ccxt/async_support/base/ws/order_book_side.py,sha256=GhnGUt78pJ-AYL_Dq9produGjmB
343
343
  ccxt/base/__init__.py,sha256=eTx1OE3HJjspFUQjGm6LBhaQiMKJnXjkdP-JUXknyQ0,1320
344
344
  ccxt/base/decimal_to_precision.py,sha256=fgWRBzRTtsf3r2INyS4f7WHlzgjB5YM1ekiwqD21aac,6634
345
345
  ccxt/base/errors.py,sha256=tosnf1tDaBn4YMCbWVNWyDYzqft-ImVtyjqJb6q83Y4,4369
346
- ccxt/base/exchange.py,sha256=vidnImmlGXI_sK7tV5aXs7czc2CHUB1D5XbiQpllKFg,294641
346
+ ccxt/base/exchange.py,sha256=MCkIeoeCB9Olj1evw0e7nLk5YA9CKoXcQsTNZRPXjgM,295256
347
347
  ccxt/base/precise.py,sha256=koce64Yrp6vFbGijJtUt-QQ6XhJgeGTCksZ871FPp_A,8886
348
348
  ccxt/base/types.py,sha256=TaP_RElKjGEZWuzyp4o4u2YhREyTG3rUeVT6gDffY9A,9613
349
- ccxt/pro/__init__.py,sha256=NQB5OueFgi7sup0cZXXfAI3OkvwDIg11MZ_pC4B2Acc,7608
349
+ ccxt/pro/__init__.py,sha256=17DdWskQWu59rykFUdivTVzQiFK0eUp0WzO2K1vxO-8,7608
350
350
  ccxt/pro/alpaca.py,sha256=xh1yg1Ok-Zh_Mfx-MBjNrfJDs6MUU0exFfEj3GuQPC4,27631
351
351
  ccxt/pro/ascendex.py,sha256=181FIeztchLqGmgecRJEN8F8xEM45D5aMKhC-5nuNfU,35467
352
352
  ccxt/pro/bequant.py,sha256=33OEUWBi4D9-2w8CmkwN3aF1qS-AlLqX3pxrWwNbXPY,1552
353
- ccxt/pro/binance.py,sha256=9wZoA6DZ50oLbKEiTGN3mhJkiVbh0DFVvsZiBxQ1rrE,177352
353
+ ccxt/pro/binance.py,sha256=ErqjI0lbFKFj1LFv5C0kDYmFmy8zasJbQvJfHk4pTNk,177358
354
354
  ccxt/pro/binancecoinm.py,sha256=LlgF4rXHHrsQMaklhTEzSiE6U9V25AjHHg_DRat7Mf0,1036
355
355
  ccxt/pro/binanceus.py,sha256=_IXpS_wyH0nEtsLR7cJLtrUlsNQoG0MSUVo3PV0RDDc,1946
356
356
  ccxt/pro/binanceusdm.py,sha256=lLdOv0d-lM-1wfCc_y_POb6GdmVIiX7PFzmKTWsVyNw,1512
@@ -405,7 +405,7 @@ ccxt/pro/okx.py,sha256=Fw1vYXvik0E1l_IQ1ATymUtvxk5jXEMV-isVMbXQXQI,84823
405
405
  ccxt/pro/onetrading.py,sha256=Qlr6LRRqO8te7QyTIhCk5nXJnupH8MtRWhQnH3Zc9yE,54769
406
406
  ccxt/pro/oxfun.py,sha256=gcmnoD0pzEDVIaiHyuU2ABoQBrxi0CTP62H2xZD0T7g,43943
407
407
  ccxt/pro/p2b.py,sha256=qulHrptdJ48MtOQ0bOZH3h_An8Ybu14cU6cJrySV5KQ,17897
408
- ccxt/pro/paradex.py,sha256=jdvEKAOloQzUv1vuOOyM2D4rBJcWUxLih7ISl1AmQrs,14231
408
+ ccxt/pro/paradex.py,sha256=9SkO-QV08sGeh5e349hL36u4snxAYuqjdVvJlKgQhH0,14299
409
409
  ccxt/pro/phemex.py,sha256=iwdftOXQIiP_Ns7PHD-5vlL74H5vtPUWOQ1zh7fyuD8,61069
410
410
  ccxt/pro/poloniex.py,sha256=e81Vkvg2oRW51nXECf6lF7Cjj5CbHv7Np2QSy6z0h3k,52108
411
411
  ccxt/pro/poloniexfutures.py,sha256=Iy8Q_Z8I3rUtNcZoxwVzMK2C1qLIiHjFXdZd_rr3Sww,41972
@@ -648,8 +648,8 @@ ccxt/test/tests_async.py,sha256=NShOLO2-HzYsh07U7aiUGssiv-AZ_p88h-NuQub9OKU,8468
648
648
  ccxt/test/tests_helpers.py,sha256=xhOILoZ_x3RSfQjtKt6AQlkp9DkOtpTQe8GAUUZoM6s,10069
649
649
  ccxt/test/tests_init.py,sha256=eVwwUHujX9t4rjgo4TqEeg7DDhR1Hb_e2SJN8NVGyl0,998
650
650
  ccxt/test/tests_sync.py,sha256=6Arr2TcJpNg9eEpH_JQeBbLzaMPlb94J1P11HGlbpPg,83761
651
- ccxt-4.3.77.dist-info/LICENSE.txt,sha256=EIb9221AhMHV7xF1_55STFdKTFsnJVJYkRpY2Lnvo5w,1068
652
- ccxt-4.3.77.dist-info/METADATA,sha256=ghxfsenNNpj_8pLfM-5-ZLJfuhHHzMc7JZiN7N84PMM,116642
653
- ccxt-4.3.77.dist-info/WHEEL,sha256=z9j0xAa_JmUKMpmz72K0ZGALSM_n-wQVmGbleXx2VHg,110
654
- ccxt-4.3.77.dist-info/top_level.txt,sha256=CkQDuCTDKNcImPV60t36G6MdYfxsAPNiSaEwifVoVMo,5
655
- ccxt-4.3.77.dist-info/RECORD,,
651
+ ccxt-4.3.78.dist-info/LICENSE.txt,sha256=EIb9221AhMHV7xF1_55STFdKTFsnJVJYkRpY2Lnvo5w,1068
652
+ ccxt-4.3.78.dist-info/METADATA,sha256=l5vIdXHqkNGS6A1ABXgsVe-_jMajokQTk2GYSgAowx8,116642
653
+ ccxt-4.3.78.dist-info/WHEEL,sha256=z9j0xAa_JmUKMpmz72K0ZGALSM_n-wQVmGbleXx2VHg,110
654
+ ccxt-4.3.78.dist-info/top_level.txt,sha256=CkQDuCTDKNcImPV60t36G6MdYfxsAPNiSaEwifVoVMo,5
655
+ ccxt-4.3.78.dist-info/RECORD,,
File without changes