ccxt 4.3.78__py2.py3-none-any.whl → 4.3.80__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.78'
25
+ __version__ = '4.3.80'
26
26
 
27
27
  # ----------------------------------------------------------------------------
28
28
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.3.78'
7
+ __version__ = '4.3.80'
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # -----------------------------------------------------------------------------
4
4
 
5
- __version__ = '4.3.78'
5
+ __version__ = '4.3.80'
6
6
 
7
7
  # -----------------------------------------------------------------------------
8
8
 
@@ -75,7 +75,7 @@ class binance(Exchange, ImplicitAPI):
75
75
  'createMarketSellOrderWithCost': True,
76
76
  'createOrder': True,
77
77
  'createOrders': True,
78
- 'createOrderWithTakeProfitAndStopLoss': True,
78
+ 'createOrderWithTakeProfitAndStopLoss': False,
79
79
  'createPostOnlyOrder': True,
80
80
  'createReduceOnlyOrder': True,
81
81
  'createStopLimitOrder': True,
@@ -3473,7 +3473,7 @@ class binance(Exchange, ImplicitAPI):
3473
3473
  #
3474
3474
  # futures(fapi)
3475
3475
  #
3476
- # fapiPrivateV2GetAccount
3476
+ # fapiPrivateV3GetAccount
3477
3477
  #
3478
3478
  # {
3479
3479
  # "feeTier":0,
@@ -8378,6 +8378,7 @@ class binance(Exchange, ImplicitAPI):
8378
8378
  :see: https://developers.binance.com/docs/wallet/asset/trade-fee
8379
8379
  :see: https://developers.binance.com/docs/derivatives/usds-margined-futures/account/rest-api/Account-Information-V2
8380
8380
  :see: https://developers.binance.com/docs/derivatives/coin-margined-futures/account/Account-Information
8381
+ :see: https://developers.binance.com/docs/derivatives/usds-margined-futures/account/rest-api/Account-Config
8381
8382
  :param dict [params]: extra parameters specific to the exchange API endpoint
8382
8383
  :param str [params.subType]: "linear" or "inverse"
8383
8384
  :returns dict: a dictionary of `fee structures <https://docs.ccxt.com/#/?id=fee-structure>` indexed by market symbols
@@ -8394,7 +8395,7 @@ class binance(Exchange, ImplicitAPI):
8394
8395
  if isSpotOrMargin:
8395
8396
  response = await self.sapiGetAssetTradeFee(params)
8396
8397
  elif isLinear:
8397
- response = await self.fapiPrivateV2GetAccount(params)
8398
+ response = await self.fapiPrivateGetAccountConfig(params)
8398
8399
  elif isInverse:
8399
8400
  response = await self.dapiPrivateGetAccount(params)
8400
8401
  #
@@ -9576,6 +9577,7 @@ class binance(Exchange, ImplicitAPI):
9576
9577
  :see: https://developers.binance.com/docs/derivatives/coin-margined-futures/account/Account-Information
9577
9578
  :see: https://developers.binance.com/docs/derivatives/usds-margined-futures/trade/rest-api/Position-Information-V2
9578
9579
  :see: https://developers.binance.com/docs/derivatives/coin-margined-futures/trade/Position-Information
9580
+ :see: https://developers.binance.com/docs/derivatives/usds-margined-futures/account/rest-api/Account-Information-V3
9579
9581
  :param str[] [symbols]: list of unified market symbols
9580
9582
  :param dict [params]: extra parameters specific to the exchange API endpoint
9581
9583
  :param boolean [params.portfolioMargin]: set to True if you would like to fetch positions in a portfolio margin account
@@ -9694,6 +9696,7 @@ class binance(Exchange, ImplicitAPI):
9694
9696
  :see: https://developers.binance.com/docs/derivatives/coin-margined-futures/trade/Position-Information
9695
9697
  :see: https://developers.binance.com/docs/derivatives/portfolio-margin/account/Query-UM-Position-Information
9696
9698
  :see: https://developers.binance.com/docs/derivatives/portfolio-margin/account/Query-CM-Position-Information
9699
+ :see: https://developers.binance.com/docs/derivatives/usds-margined-futures/trade/rest-api/Position-Information-V3
9697
9700
  :param str[]|None symbols: list of unified market symbols
9698
9701
  :param dict [params]: extra parameters specific to the exchange API endpoint
9699
9702
  :param boolean [params.portfolioMargin]: set to True if you would like to fetch positions for a portfolio margin account
@@ -10049,6 +10052,7 @@ class binance(Exchange, ImplicitAPI):
10049
10052
  :see: https://developers.binance.com/docs/derivatives/coin-margined-futures/account/Account-Information
10050
10053
  :see: https://developers.binance.com/docs/derivatives/portfolio-margin/account/Get-UM-Account-Detail
10051
10054
  :see: https://developers.binance.com/docs/derivatives/portfolio-margin/account/Get-CM-Account-Detail
10055
+ :see: https://developers.binance.com/docs/derivatives/usds-margined-futures/account/rest-api/Symbol-Config
10052
10056
  :param str[] [symbols]: a list of unified market symbols
10053
10057
  :param dict [params]: extra parameters specific to the exchange API endpoint
10054
10058
  :param str [params.subType]: "linear" or "inverse"
@@ -10067,7 +10071,7 @@ class binance(Exchange, ImplicitAPI):
10067
10071
  if isPortfolioMargin:
10068
10072
  response = await self.papiGetUmAccount(params)
10069
10073
  else:
10070
- response = await self.fapiPrivateV2GetAccount(params)
10074
+ response = await self.fapiPrivateGetSymbolConfig(params)
10071
10075
  elif self.is_inverse(type, subType):
10072
10076
  if isPortfolioMargin:
10073
10077
  response = await self.papiGetCmAccount(params)
@@ -10076,6 +10080,8 @@ class binance(Exchange, ImplicitAPI):
10076
10080
  else:
10077
10081
  raise NotSupported(self.id + ' fetchLeverages() supports linear and inverse contracts only')
10078
10082
  leverages = self.safe_list(response, 'positions', [])
10083
+ if isinstance(response, list):
10084
+ leverages = response
10079
10085
  return self.parse_leverages(leverages, symbols, 'symbol')
10080
10086
 
10081
10087
  def parse_leverage(self, leverage: dict, market: Market = None) -> Leverage:
@@ -10084,6 +10090,9 @@ class binance(Exchange, ImplicitAPI):
10084
10090
  marginMode = None
10085
10091
  if marginModeRaw is not None:
10086
10092
  marginMode = 'isolated' if marginModeRaw else 'cross'
10093
+ marginTypeRaw = self.safe_string_lower(leverage, 'marginType')
10094
+ if marginTypeRaw is not None:
10095
+ marginMode = 'cross' if (marginTypeRaw == 'crossed') else 'isolated'
10087
10096
  side = self.safe_string_lower(leverage, 'positionSide')
10088
10097
  longLeverage = None
10089
10098
  shortLeverage = None
@@ -11763,6 +11772,7 @@ class binance(Exchange, ImplicitAPI):
11763
11772
  fetches margin modes("isolated" or "cross") that the market for the symbol in in, with symbol=None all markets for a subType(linear/inverse) are returned
11764
11773
  :see: https://developers.binance.com/docs/derivatives/coin-margined-futures/account/Account-Information
11765
11774
  :see: https://developers.binance.com/docs/derivatives/usds-margined-futures/account/rest-api/Account-Information-V2
11775
+ :see: https://developers.binance.com/docs/derivatives/usds-margined-futures/account/rest-api/Symbol-Config
11766
11776
  :param str symbol: unified symbol of the market the order was made in
11767
11777
  :param dict [params]: extra parameters specific to the exchange API endpoint
11768
11778
  :param str [params.subType]: "linear" or "inverse"
@@ -11777,70 +11787,17 @@ class binance(Exchange, ImplicitAPI):
11777
11787
  subType, params = self.handle_sub_type_and_params('fetchMarginMode', market, params)
11778
11788
  response = None
11779
11789
  if subType == 'linear':
11780
- response = await self.fapiPrivateV2GetAccount(params)
11790
+ response = await self.fapiPrivateGetSymbolConfig(params)
11781
11791
  #
11782
- # {
11783
- # feeTier: '0',
11784
- # canTrade: True,
11785
- # canDeposit: True,
11786
- # canWithdraw: True,
11787
- # tradeGroupId: '-1',
11788
- # updateTime: '0',
11789
- # multiAssetsMargin: True,
11790
- # totalInitialMargin: '438.31134352',
11791
- # totalMaintMargin: '5.90847101',
11792
- # totalWalletBalance: '4345.15626338',
11793
- # totalUnrealizedProfit: '376.45220224',
11794
- # totalMarginBalance: '4721.60846562',
11795
- # totalPositionInitialMargin: '425.45252687',
11796
- # totalOpenOrderInitialMargin: '12.85881664',
11797
- # totalCrossWalletBalance: '4345.15626338',
11798
- # totalCrossUnPnl: '376.45220224',
11799
- # availableBalance: '4281.84764041',
11800
- # maxWithdrawAmount: '4281.84764041',
11801
- # assets: [
11802
- # {
11803
- # asset: 'ETH',
11804
- # walletBalance: '0.00000000',
11805
- # unrealizedProfit: '0.00000000',
11806
- # marginBalance: '0.00000000',
11807
- # maintMargin: '0.00000000',
11808
- # initialMargin: '0.00000000',
11809
- # positionInitialMargin: '0.00000000',
11810
- # openOrderInitialMargin: '0.00000000',
11811
- # maxWithdrawAmount: '0.00000000',
11812
- # crossWalletBalance: '0.00000000',
11813
- # crossUnPnl: '0.00000000',
11814
- # availableBalance: '1.26075574',
11815
- # marginAvailable: True,
11816
- # updateTime: '0'
11817
- # },
11818
- # ...
11819
- # ],
11820
- # positions: [
11821
- # {
11822
- # symbol: 'SNTUSDT',
11823
- # initialMargin: '0',
11824
- # maintMargin: '0',
11825
- # unrealizedProfit: '0.00000000',
11826
- # positionInitialMargin: '0',
11827
- # openOrderInitialMargin: '0',
11828
- # leverage: '20',
11829
- # isolated: False,
11830
- # entryPrice: '0.0',
11831
- # breakEvenPrice: '0.0',
11832
- # maxNotional: '25000',
11833
- # positionSide: 'BOTH',
11834
- # positionAmt: '0',
11835
- # notional: '0',
11836
- # isolatedWallet: '0',
11837
- # updateTime: '0',
11838
- # bidNotional: '0',
11839
- # askNotional: '0'
11840
- # },
11841
- # ...
11842
- # ]
11843
- # }
11792
+ # [
11793
+ # {
11794
+ # "symbol": "BTCUSDT",
11795
+ # "marginType": "CROSSED",
11796
+ # "isAutoAddMargin": "false",
11797
+ # "leverage": 21,
11798
+ # "maxNotionalValue": "1000000",
11799
+ # }
11800
+ # ]
11844
11801
  #
11845
11802
  elif subType == 'inverse':
11846
11803
  response = await self.dapiPrivateGetAccount(params)
@@ -11895,16 +11852,24 @@ class binance(Exchange, ImplicitAPI):
11895
11852
  else:
11896
11853
  raise BadRequest(self.id + ' fetchMarginModes() supports linear and inverse subTypes only')
11897
11854
  assets = self.safe_list(response, 'positions', [])
11855
+ if isinstance(response, list):
11856
+ assets = response
11898
11857
  return self.parse_margin_modes(assets, symbols, 'symbol', 'swap')
11899
11858
 
11900
11859
  def parse_margin_mode(self, marginMode: dict, market=None) -> MarginMode:
11901
11860
  marketId = self.safe_string(marginMode, 'symbol')
11902
11861
  market = self.safe_market(marketId, market)
11903
- isIsolated = self.safe_bool(marginMode, 'isolated')
11862
+ marginModeRaw = self.safe_bool(marginMode, 'isolated')
11863
+ reMarginMode = None
11864
+ if marginModeRaw is not None:
11865
+ reMarginMode = 'isolated' if marginModeRaw else 'cross'
11866
+ marginTypeRaw = self.safe_string_lower(marginMode, 'marginType')
11867
+ if marginTypeRaw is not None:
11868
+ reMarginMode = 'cross' if (marginTypeRaw == 'crossed') else 'isolated'
11904
11869
  return {
11905
11870
  'info': marginMode,
11906
11871
  'symbol': market['symbol'],
11907
- 'marginMode': 'isolated' if isIsolated else 'cross',
11872
+ 'marginMode': reMarginMode,
11908
11873
  }
11909
11874
 
11910
11875
  async def fetch_option(self, symbol: str, params={}) -> Option:
@@ -2364,8 +2364,6 @@ class bitmart(Exchange, ImplicitAPI):
2364
2364
  :see: https://developer-pro.bitmart.com/en/spot/#place-margin-order
2365
2365
  :see: https://developer-pro.bitmart.com/en/futures/#submit-order-signed
2366
2366
  :see: https://developer-pro.bitmart.com/en/futures/#submit-plan-order-signed
2367
- :see: https://developer-pro.bitmart.com/en/futures/#submit-order-signed
2368
- :see: https://developer-pro.bitmart.com/en/futures/#submit-plan-order-signed
2369
2367
  :see: https://developer-pro.bitmart.com/en/futuresv2/#submit-plan-order-signed
2370
2368
  :param str symbol: unified symbol of the market to create an order in
2371
2369
  :param str type: 'market', 'limit' or 'trailing' for swap markets only
@@ -2496,6 +2494,7 @@ class bitmart(Exchange, ImplicitAPI):
2496
2494
  create a trade order
2497
2495
  :see: https://developer-pro.bitmart.com/en/futures/#submit-order-signed
2498
2496
  :see: https://developer-pro.bitmart.com/en/futures/#submit-plan-order-signed
2497
+ :see: https://developer-pro.bitmart.com/en/futuresv2/#submit-plan-order-signed
2499
2498
  :param str symbol: unified symbol of the market to create an order in
2500
2499
  :param str type: 'market', 'limit' or 'trailing'
2501
2500
  :param str side: 'buy' or 'sell'
@@ -2549,7 +2548,8 @@ class bitmart(Exchange, ImplicitAPI):
2549
2548
  request['activation_price'] = self.price_to_precision(symbol, trailingTriggerPrice)
2550
2549
  request['activation_price_type'] = self.safe_integer(params, 'activation_price_type', 1)
2551
2550
  if isTriggerOrder:
2552
- request['executive_price'] = self.price_to_precision(symbol, price)
2551
+ if isLimitOrder or price is not None:
2552
+ request['executive_price'] = self.price_to_precision(symbol, price)
2553
2553
  request['trigger_price'] = self.price_to_precision(symbol, triggerPrice)
2554
2554
  request['price_type'] = self.safe_integer(params, 'price_type', 1)
2555
2555
  if side == 'buy':
@@ -5466,10 +5466,12 @@ class bybit(Exchange, ImplicitAPI):
5466
5466
  """
5467
5467
  fetch the history of changes, actions done by the user or operations that altered balance of the user
5468
5468
  :see: https://bybit-exchange.github.io/docs/v5/account/transaction-log
5469
+ :see: https://bybit-exchange.github.io/docs/v5/account/contract-transaction-log
5469
5470
  :param str code: unified currency code, default is None
5470
5471
  :param int [since]: timestamp in ms of the earliest ledger entry, default is None
5471
5472
  :param int [limit]: max number of ledger entrys to return, default is None
5472
5473
  :param dict [params]: extra parameters specific to the exchange API endpoint
5474
+ :param str [params.subType]: if inverse will use v5/account/contract-transaction-log
5473
5475
  :returns dict: a `ledger structure <https://docs.ccxt.com/#/?id=ledger-structure>`
5474
5476
  """
5475
5477
  await self.load_markets()
@@ -5507,9 +5509,14 @@ class bybit(Exchange, ImplicitAPI):
5507
5509
  request[currencyKey] = currency['id']
5508
5510
  if limit is not None:
5509
5511
  request['limit'] = limit
5512
+ subType = None
5513
+ subType, params = self.handle_sub_type_and_params('fetchLedger', None, params)
5510
5514
  response = None
5511
5515
  if enableUnified[1]:
5512
- response = await self.privateGetV5AccountTransactionLog(self.extend(request, params))
5516
+ if subType == 'inverse':
5517
+ response = await self.privateGetV5AccountContractTransactionLog(self.extend(request, params))
5518
+ else:
5519
+ response = await self.privateGetV5AccountTransactionLog(self.extend(request, params))
5513
5520
  else:
5514
5521
  response = await self.privateGetV2PrivateWalletFundRecords(self.extend(request, params))
5515
5522
  #
@@ -1088,8 +1088,9 @@ class poloniex(Exchange, ImplicitAPI):
1088
1088
  market = self.safe_market(marketId, market, '_')
1089
1089
  symbol = market['symbol']
1090
1090
  resultingTrades = self.safe_value(order, 'resultingTrades')
1091
- if not isinstance(resultingTrades, list):
1092
- resultingTrades = self.safe_value(resultingTrades, self.safe_string(market, 'id', marketId))
1091
+ if resultingTrades is not None:
1092
+ if not isinstance(resultingTrades, list):
1093
+ resultingTrades = self.safe_value(resultingTrades, self.safe_string(market, 'id', marketId))
1093
1094
  price = self.safe_string_2(order, 'price', 'rate')
1094
1095
  amount = self.safe_string(order, 'quantity')
1095
1096
  filled = self.safe_string(order, 'filledQuantity')
ccxt/base/exchange.py CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.3.78'
7
+ __version__ = '4.3.80'
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
@@ -1328,7 +1328,7 @@ class Exchange(object):
1328
1328
  def starknet_encode_structured_data (domain, messageTypes, messageData, address):
1329
1329
  types = list(messageTypes.keys())
1330
1330
  if len(types) > 1:
1331
- raise NotSupported(this.id + 'starknetEncodeStructuredData only support single type')
1331
+ raise NotSupported('starknetEncodeStructuredData only support single type')
1332
1332
 
1333
1333
  request = {
1334
1334
  'domain': domain,
@@ -2236,44 +2236,38 @@ class Exchange(object):
2236
2236
  httpsProxy = None
2237
2237
  socksProxy = None
2238
2238
  # httpProxy
2239
- if self.value_is_defined(self.httpProxy):
2239
+ isHttpProxyDefined = self.value_is_defined(self.httpProxy)
2240
+ isHttp_proxy_defined = self.value_is_defined(self.http_proxy)
2241
+ if isHttpProxyDefined or isHttp_proxy_defined:
2240
2242
  usedProxies.append('httpProxy')
2241
- httpProxy = self.httpProxy
2242
- if self.value_is_defined(self.http_proxy):
2243
- usedProxies.append('http_proxy')
2244
- httpProxy = self.http_proxy
2245
- if self.httpProxyCallback is not None:
2243
+ httpProxy = self.httpProxy if isHttpProxyDefined else self.http_proxy
2244
+ ishttpProxyCallbackDefined = self.value_is_defined(self.httpProxyCallback)
2245
+ ishttp_proxy_callback_defined = self.value_is_defined(self.http_proxy_callback)
2246
+ if ishttpProxyCallbackDefined or ishttp_proxy_callback_defined:
2246
2247
  usedProxies.append('httpProxyCallback')
2247
- httpProxy = self.httpProxyCallback(url, method, headers, body)
2248
- if self.http_proxy_callback is not None:
2249
- usedProxies.append('http_proxy_callback')
2250
- httpProxy = self.http_proxy_callback(url, method, headers, body)
2248
+ httpProxy = self.httpProxyCallback(url, method, headers, body) if ishttpProxyCallbackDefined else self.http_proxy_callback(url, method, headers, body)
2251
2249
  # httpsProxy
2252
- if self.value_is_defined(self.httpsProxy):
2250
+ isHttpsProxyDefined = self.value_is_defined(self.httpsProxy)
2251
+ isHttps_proxy_defined = self.value_is_defined(self.https_proxy)
2252
+ if isHttpsProxyDefined or isHttps_proxy_defined:
2253
2253
  usedProxies.append('httpsProxy')
2254
- httpsProxy = self.httpsProxy
2255
- if self.value_is_defined(self.https_proxy):
2256
- usedProxies.append('https_proxy')
2257
- httpsProxy = self.https_proxy
2258
- if self.httpsProxyCallback is not None:
2254
+ httpsProxy = self.httpsProxy if isHttpsProxyDefined else self.https_proxy
2255
+ ishttpsProxyCallbackDefined = self.value_is_defined(self.httpsProxyCallback)
2256
+ ishttps_proxy_callback_defined = self.value_is_defined(self.https_proxy_callback)
2257
+ if ishttpsProxyCallbackDefined or ishttps_proxy_callback_defined:
2259
2258
  usedProxies.append('httpsProxyCallback')
2260
- httpsProxy = self.httpsProxyCallback(url, method, headers, body)
2261
- if self.https_proxy_callback is not None:
2262
- usedProxies.append('https_proxy_callback')
2263
- httpsProxy = self.https_proxy_callback(url, method, headers, body)
2259
+ httpsProxy = self.httpsProxyCallback(url, method, headers, body) if ishttpsProxyCallbackDefined else self.https_proxy_callback(url, method, headers, body)
2264
2260
  # socksProxy
2265
- if self.value_is_defined(self.socksProxy):
2261
+ isSocksProxyDefined = self.value_is_defined(self.socksProxy)
2262
+ isSocks_proxy_defined = self.value_is_defined(self.socks_proxy)
2263
+ if isSocksProxyDefined or isSocks_proxy_defined:
2266
2264
  usedProxies.append('socksProxy')
2267
- socksProxy = self.socksProxy
2268
- if self.value_is_defined(self.socks_proxy):
2269
- usedProxies.append('socks_proxy')
2270
- socksProxy = self.socks_proxy
2271
- if self.socksProxyCallback is not None:
2265
+ socksProxy = self.socksProxy if isSocksProxyDefined else self.socks_proxy
2266
+ issocksProxyCallbackDefined = self.value_is_defined(self.socksProxyCallback)
2267
+ issocks_proxy_callback_defined = self.value_is_defined(self.socks_proxy_callback)
2268
+ if issocksProxyCallbackDefined or issocks_proxy_callback_defined:
2272
2269
  usedProxies.append('socksProxyCallback')
2273
- socksProxy = self.socksProxyCallback(url, method, headers, body)
2274
- if self.socks_proxy_callback is not None:
2275
- usedProxies.append('socks_proxy_callback')
2276
- socksProxy = self.socks_proxy_callback(url, method, headers, body)
2270
+ socksProxy = self.socksProxyCallback(url, method, headers, body) if issocksProxyCallbackDefined else self.socks_proxy_callback(url, method, headers, body)
2277
2271
  # check
2278
2272
  length = len(usedProxies)
2279
2273
  if length > 1:
@@ -6235,7 +6229,7 @@ class Exchange(object):
6235
6229
  def parse_margin_modification(self, data: dict, market: Market = None):
6236
6230
  raise NotSupported(self.id + ' parseMarginModification() is not supported yet')
6237
6231
 
6238
- def parse_margin_modifications(self, response: List[object], symbols: List[str] = None, symbolKey: Str = None, marketType: MarketType = None):
6232
+ def parse_margin_modifications(self, response: List[object], symbols: Strings = None, symbolKey: Str = None, marketType: MarketType = None):
6239
6233
  marginModifications = []
6240
6234
  for i in range(0, len(response)):
6241
6235
  info = response[i]
ccxt/binance.py CHANGED
@@ -74,7 +74,7 @@ class binance(Exchange, ImplicitAPI):
74
74
  'createMarketSellOrderWithCost': True,
75
75
  'createOrder': True,
76
76
  'createOrders': True,
77
- 'createOrderWithTakeProfitAndStopLoss': True,
77
+ 'createOrderWithTakeProfitAndStopLoss': False,
78
78
  'createPostOnlyOrder': True,
79
79
  'createReduceOnlyOrder': True,
80
80
  'createStopLimitOrder': True,
@@ -3472,7 +3472,7 @@ class binance(Exchange, ImplicitAPI):
3472
3472
  #
3473
3473
  # futures(fapi)
3474
3474
  #
3475
- # fapiPrivateV2GetAccount
3475
+ # fapiPrivateV3GetAccount
3476
3476
  #
3477
3477
  # {
3478
3478
  # "feeTier":0,
@@ -8377,6 +8377,7 @@ class binance(Exchange, ImplicitAPI):
8377
8377
  :see: https://developers.binance.com/docs/wallet/asset/trade-fee
8378
8378
  :see: https://developers.binance.com/docs/derivatives/usds-margined-futures/account/rest-api/Account-Information-V2
8379
8379
  :see: https://developers.binance.com/docs/derivatives/coin-margined-futures/account/Account-Information
8380
+ :see: https://developers.binance.com/docs/derivatives/usds-margined-futures/account/rest-api/Account-Config
8380
8381
  :param dict [params]: extra parameters specific to the exchange API endpoint
8381
8382
  :param str [params.subType]: "linear" or "inverse"
8382
8383
  :returns dict: a dictionary of `fee structures <https://docs.ccxt.com/#/?id=fee-structure>` indexed by market symbols
@@ -8393,7 +8394,7 @@ class binance(Exchange, ImplicitAPI):
8393
8394
  if isSpotOrMargin:
8394
8395
  response = self.sapiGetAssetTradeFee(params)
8395
8396
  elif isLinear:
8396
- response = self.fapiPrivateV2GetAccount(params)
8397
+ response = self.fapiPrivateGetAccountConfig(params)
8397
8398
  elif isInverse:
8398
8399
  response = self.dapiPrivateGetAccount(params)
8399
8400
  #
@@ -9575,6 +9576,7 @@ class binance(Exchange, ImplicitAPI):
9575
9576
  :see: https://developers.binance.com/docs/derivatives/coin-margined-futures/account/Account-Information
9576
9577
  :see: https://developers.binance.com/docs/derivatives/usds-margined-futures/trade/rest-api/Position-Information-V2
9577
9578
  :see: https://developers.binance.com/docs/derivatives/coin-margined-futures/trade/Position-Information
9579
+ :see: https://developers.binance.com/docs/derivatives/usds-margined-futures/account/rest-api/Account-Information-V3
9578
9580
  :param str[] [symbols]: list of unified market symbols
9579
9581
  :param dict [params]: extra parameters specific to the exchange API endpoint
9580
9582
  :param boolean [params.portfolioMargin]: set to True if you would like to fetch positions in a portfolio margin account
@@ -9693,6 +9695,7 @@ class binance(Exchange, ImplicitAPI):
9693
9695
  :see: https://developers.binance.com/docs/derivatives/coin-margined-futures/trade/Position-Information
9694
9696
  :see: https://developers.binance.com/docs/derivatives/portfolio-margin/account/Query-UM-Position-Information
9695
9697
  :see: https://developers.binance.com/docs/derivatives/portfolio-margin/account/Query-CM-Position-Information
9698
+ :see: https://developers.binance.com/docs/derivatives/usds-margined-futures/trade/rest-api/Position-Information-V3
9696
9699
  :param str[]|None symbols: list of unified market symbols
9697
9700
  :param dict [params]: extra parameters specific to the exchange API endpoint
9698
9701
  :param boolean [params.portfolioMargin]: set to True if you would like to fetch positions for a portfolio margin account
@@ -10048,6 +10051,7 @@ class binance(Exchange, ImplicitAPI):
10048
10051
  :see: https://developers.binance.com/docs/derivatives/coin-margined-futures/account/Account-Information
10049
10052
  :see: https://developers.binance.com/docs/derivatives/portfolio-margin/account/Get-UM-Account-Detail
10050
10053
  :see: https://developers.binance.com/docs/derivatives/portfolio-margin/account/Get-CM-Account-Detail
10054
+ :see: https://developers.binance.com/docs/derivatives/usds-margined-futures/account/rest-api/Symbol-Config
10051
10055
  :param str[] [symbols]: a list of unified market symbols
10052
10056
  :param dict [params]: extra parameters specific to the exchange API endpoint
10053
10057
  :param str [params.subType]: "linear" or "inverse"
@@ -10066,7 +10070,7 @@ class binance(Exchange, ImplicitAPI):
10066
10070
  if isPortfolioMargin:
10067
10071
  response = self.papiGetUmAccount(params)
10068
10072
  else:
10069
- response = self.fapiPrivateV2GetAccount(params)
10073
+ response = self.fapiPrivateGetSymbolConfig(params)
10070
10074
  elif self.is_inverse(type, subType):
10071
10075
  if isPortfolioMargin:
10072
10076
  response = self.papiGetCmAccount(params)
@@ -10075,6 +10079,8 @@ class binance(Exchange, ImplicitAPI):
10075
10079
  else:
10076
10080
  raise NotSupported(self.id + ' fetchLeverages() supports linear and inverse contracts only')
10077
10081
  leverages = self.safe_list(response, 'positions', [])
10082
+ if isinstance(response, list):
10083
+ leverages = response
10078
10084
  return self.parse_leverages(leverages, symbols, 'symbol')
10079
10085
 
10080
10086
  def parse_leverage(self, leverage: dict, market: Market = None) -> Leverage:
@@ -10083,6 +10089,9 @@ class binance(Exchange, ImplicitAPI):
10083
10089
  marginMode = None
10084
10090
  if marginModeRaw is not None:
10085
10091
  marginMode = 'isolated' if marginModeRaw else 'cross'
10092
+ marginTypeRaw = self.safe_string_lower(leverage, 'marginType')
10093
+ if marginTypeRaw is not None:
10094
+ marginMode = 'cross' if (marginTypeRaw == 'crossed') else 'isolated'
10086
10095
  side = self.safe_string_lower(leverage, 'positionSide')
10087
10096
  longLeverage = None
10088
10097
  shortLeverage = None
@@ -11762,6 +11771,7 @@ class binance(Exchange, ImplicitAPI):
11762
11771
  fetches margin modes("isolated" or "cross") that the market for the symbol in in, with symbol=None all markets for a subType(linear/inverse) are returned
11763
11772
  :see: https://developers.binance.com/docs/derivatives/coin-margined-futures/account/Account-Information
11764
11773
  :see: https://developers.binance.com/docs/derivatives/usds-margined-futures/account/rest-api/Account-Information-V2
11774
+ :see: https://developers.binance.com/docs/derivatives/usds-margined-futures/account/rest-api/Symbol-Config
11765
11775
  :param str symbol: unified symbol of the market the order was made in
11766
11776
  :param dict [params]: extra parameters specific to the exchange API endpoint
11767
11777
  :param str [params.subType]: "linear" or "inverse"
@@ -11776,70 +11786,17 @@ class binance(Exchange, ImplicitAPI):
11776
11786
  subType, params = self.handle_sub_type_and_params('fetchMarginMode', market, params)
11777
11787
  response = None
11778
11788
  if subType == 'linear':
11779
- response = self.fapiPrivateV2GetAccount(params)
11789
+ response = self.fapiPrivateGetSymbolConfig(params)
11780
11790
  #
11781
- # {
11782
- # feeTier: '0',
11783
- # canTrade: True,
11784
- # canDeposit: True,
11785
- # canWithdraw: True,
11786
- # tradeGroupId: '-1',
11787
- # updateTime: '0',
11788
- # multiAssetsMargin: True,
11789
- # totalInitialMargin: '438.31134352',
11790
- # totalMaintMargin: '5.90847101',
11791
- # totalWalletBalance: '4345.15626338',
11792
- # totalUnrealizedProfit: '376.45220224',
11793
- # totalMarginBalance: '4721.60846562',
11794
- # totalPositionInitialMargin: '425.45252687',
11795
- # totalOpenOrderInitialMargin: '12.85881664',
11796
- # totalCrossWalletBalance: '4345.15626338',
11797
- # totalCrossUnPnl: '376.45220224',
11798
- # availableBalance: '4281.84764041',
11799
- # maxWithdrawAmount: '4281.84764041',
11800
- # assets: [
11801
- # {
11802
- # asset: 'ETH',
11803
- # walletBalance: '0.00000000',
11804
- # unrealizedProfit: '0.00000000',
11805
- # marginBalance: '0.00000000',
11806
- # maintMargin: '0.00000000',
11807
- # initialMargin: '0.00000000',
11808
- # positionInitialMargin: '0.00000000',
11809
- # openOrderInitialMargin: '0.00000000',
11810
- # maxWithdrawAmount: '0.00000000',
11811
- # crossWalletBalance: '0.00000000',
11812
- # crossUnPnl: '0.00000000',
11813
- # availableBalance: '1.26075574',
11814
- # marginAvailable: True,
11815
- # updateTime: '0'
11816
- # },
11817
- # ...
11818
- # ],
11819
- # positions: [
11820
- # {
11821
- # symbol: 'SNTUSDT',
11822
- # initialMargin: '0',
11823
- # maintMargin: '0',
11824
- # unrealizedProfit: '0.00000000',
11825
- # positionInitialMargin: '0',
11826
- # openOrderInitialMargin: '0',
11827
- # leverage: '20',
11828
- # isolated: False,
11829
- # entryPrice: '0.0',
11830
- # breakEvenPrice: '0.0',
11831
- # maxNotional: '25000',
11832
- # positionSide: 'BOTH',
11833
- # positionAmt: '0',
11834
- # notional: '0',
11835
- # isolatedWallet: '0',
11836
- # updateTime: '0',
11837
- # bidNotional: '0',
11838
- # askNotional: '0'
11839
- # },
11840
- # ...
11841
- # ]
11842
- # }
11791
+ # [
11792
+ # {
11793
+ # "symbol": "BTCUSDT",
11794
+ # "marginType": "CROSSED",
11795
+ # "isAutoAddMargin": "false",
11796
+ # "leverage": 21,
11797
+ # "maxNotionalValue": "1000000",
11798
+ # }
11799
+ # ]
11843
11800
  #
11844
11801
  elif subType == 'inverse':
11845
11802
  response = self.dapiPrivateGetAccount(params)
@@ -11894,16 +11851,24 @@ class binance(Exchange, ImplicitAPI):
11894
11851
  else:
11895
11852
  raise BadRequest(self.id + ' fetchMarginModes() supports linear and inverse subTypes only')
11896
11853
  assets = self.safe_list(response, 'positions', [])
11854
+ if isinstance(response, list):
11855
+ assets = response
11897
11856
  return self.parse_margin_modes(assets, symbols, 'symbol', 'swap')
11898
11857
 
11899
11858
  def parse_margin_mode(self, marginMode: dict, market=None) -> MarginMode:
11900
11859
  marketId = self.safe_string(marginMode, 'symbol')
11901
11860
  market = self.safe_market(marketId, market)
11902
- isIsolated = self.safe_bool(marginMode, 'isolated')
11861
+ marginModeRaw = self.safe_bool(marginMode, 'isolated')
11862
+ reMarginMode = None
11863
+ if marginModeRaw is not None:
11864
+ reMarginMode = 'isolated' if marginModeRaw else 'cross'
11865
+ marginTypeRaw = self.safe_string_lower(marginMode, 'marginType')
11866
+ if marginTypeRaw is not None:
11867
+ reMarginMode = 'cross' if (marginTypeRaw == 'crossed') else 'isolated'
11903
11868
  return {
11904
11869
  'info': marginMode,
11905
11870
  'symbol': market['symbol'],
11906
- 'marginMode': 'isolated' if isIsolated else 'cross',
11871
+ 'marginMode': reMarginMode,
11907
11872
  }
11908
11873
 
11909
11874
  def fetch_option(self, symbol: str, params={}) -> Option:
ccxt/bitmart.py CHANGED
@@ -2364,8 +2364,6 @@ class bitmart(Exchange, ImplicitAPI):
2364
2364
  :see: https://developer-pro.bitmart.com/en/spot/#place-margin-order
2365
2365
  :see: https://developer-pro.bitmart.com/en/futures/#submit-order-signed
2366
2366
  :see: https://developer-pro.bitmart.com/en/futures/#submit-plan-order-signed
2367
- :see: https://developer-pro.bitmart.com/en/futures/#submit-order-signed
2368
- :see: https://developer-pro.bitmart.com/en/futures/#submit-plan-order-signed
2369
2367
  :see: https://developer-pro.bitmart.com/en/futuresv2/#submit-plan-order-signed
2370
2368
  :param str symbol: unified symbol of the market to create an order in
2371
2369
  :param str type: 'market', 'limit' or 'trailing' for swap markets only
@@ -2496,6 +2494,7 @@ class bitmart(Exchange, ImplicitAPI):
2496
2494
  create a trade order
2497
2495
  :see: https://developer-pro.bitmart.com/en/futures/#submit-order-signed
2498
2496
  :see: https://developer-pro.bitmart.com/en/futures/#submit-plan-order-signed
2497
+ :see: https://developer-pro.bitmart.com/en/futuresv2/#submit-plan-order-signed
2499
2498
  :param str symbol: unified symbol of the market to create an order in
2500
2499
  :param str type: 'market', 'limit' or 'trailing'
2501
2500
  :param str side: 'buy' or 'sell'
@@ -2549,7 +2548,8 @@ class bitmart(Exchange, ImplicitAPI):
2549
2548
  request['activation_price'] = self.price_to_precision(symbol, trailingTriggerPrice)
2550
2549
  request['activation_price_type'] = self.safe_integer(params, 'activation_price_type', 1)
2551
2550
  if isTriggerOrder:
2552
- request['executive_price'] = self.price_to_precision(symbol, price)
2551
+ if isLimitOrder or price is not None:
2552
+ request['executive_price'] = self.price_to_precision(symbol, price)
2553
2553
  request['trigger_price'] = self.price_to_precision(symbol, triggerPrice)
2554
2554
  request['price_type'] = self.safe_integer(params, 'price_type', 1)
2555
2555
  if side == 'buy':
ccxt/bybit.py CHANGED
@@ -5465,10 +5465,12 @@ class bybit(Exchange, ImplicitAPI):
5465
5465
  """
5466
5466
  fetch the history of changes, actions done by the user or operations that altered balance of the user
5467
5467
  :see: https://bybit-exchange.github.io/docs/v5/account/transaction-log
5468
+ :see: https://bybit-exchange.github.io/docs/v5/account/contract-transaction-log
5468
5469
  :param str code: unified currency code, default is None
5469
5470
  :param int [since]: timestamp in ms of the earliest ledger entry, default is None
5470
5471
  :param int [limit]: max number of ledger entrys to return, default is None
5471
5472
  :param dict [params]: extra parameters specific to the exchange API endpoint
5473
+ :param str [params.subType]: if inverse will use v5/account/contract-transaction-log
5472
5474
  :returns dict: a `ledger structure <https://docs.ccxt.com/#/?id=ledger-structure>`
5473
5475
  """
5474
5476
  self.load_markets()
@@ -5506,9 +5508,14 @@ class bybit(Exchange, ImplicitAPI):
5506
5508
  request[currencyKey] = currency['id']
5507
5509
  if limit is not None:
5508
5510
  request['limit'] = limit
5511
+ subType = None
5512
+ subType, params = self.handle_sub_type_and_params('fetchLedger', None, params)
5509
5513
  response = None
5510
5514
  if enableUnified[1]:
5511
- response = self.privateGetV5AccountTransactionLog(self.extend(request, params))
5515
+ if subType == 'inverse':
5516
+ response = self.privateGetV5AccountContractTransactionLog(self.extend(request, params))
5517
+ else:
5518
+ response = self.privateGetV5AccountTransactionLog(self.extend(request, params))
5512
5519
  else:
5513
5520
  response = self.privateGetV2PrivateWalletFundRecords(self.extend(request, params))
5514
5521
  #
ccxt/poloniex.py CHANGED
@@ -1088,8 +1088,9 @@ class poloniex(Exchange, ImplicitAPI):
1088
1088
  market = self.safe_market(marketId, market, '_')
1089
1089
  symbol = market['symbol']
1090
1090
  resultingTrades = self.safe_value(order, 'resultingTrades')
1091
- if not isinstance(resultingTrades, list):
1092
- resultingTrades = self.safe_value(resultingTrades, self.safe_string(market, 'id', marketId))
1091
+ if resultingTrades is not None:
1092
+ if not isinstance(resultingTrades, list):
1093
+ resultingTrades = self.safe_value(resultingTrades, self.safe_string(market, 'id', marketId))
1093
1094
  price = self.safe_string_2(order, 'price', 'rate')
1094
1095
  amount = self.safe_string(order, 'quantity')
1095
1096
  filled = self.safe_string(order, 'filledQuantity')
ccxt/pro/__init__.py CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  # ----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.3.78'
7
+ __version__ = '4.3.80'
8
8
 
9
9
  # ----------------------------------------------------------------------------
10
10
 
ccxt/pro/binance.py CHANGED
@@ -1888,7 +1888,7 @@ class binance(ccxt.async_support.binance):
1888
1888
  :param str|None [params.type]: 'future', 'delivery', 'savings', 'funding', or 'spot'
1889
1889
  :param str|None [params.marginMode]: 'cross' or 'isolated', for margin trading, uses self.options.defaultMarginMode if not passed, defaults to None/None/None
1890
1890
  :param str[]|None [params.symbols]: unified market symbols, only used in isolated margin mode
1891
- :param str|None [params.method]: method to use. Can be account.balance or account.status
1891
+ :param str|None [params.method]: method to use. Can be account.balance, account.status, v2/account.balance or v2/account.status
1892
1892
  :returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
1893
1893
  """
1894
1894
  await self.load_markets()
@@ -1919,8 +1919,14 @@ class binance(ccxt.async_support.binance):
1919
1919
  #
1920
1920
  #
1921
1921
  messageHash = self.safe_string(message, 'id')
1922
- result = self.safe_dict(message, 'result', {})
1923
- rawBalance = self.safe_list(result, 0, [])
1922
+ rawBalance = None
1923
+ if isinstance(message['result'], list):
1924
+ # account.balance
1925
+ rawBalance = self.safe_list(message, 'result', [])
1926
+ else:
1927
+ # account.status
1928
+ result = self.safe_dict(message, 'result', {})
1929
+ rawBalance = self.safe_list(result, 'assets', [])
1924
1930
  parsedBalances = self.parseBalanceCustom(rawBalance)
1925
1931
  client.resolve(parsedBalances, messageHash)
1926
1932
 
@@ -1993,6 +1999,7 @@ class binance(ccxt.async_support.binance):
1993
1999
  :param str[] [symbols]: list of unified market symbols
1994
2000
  :param dict [params]: extra parameters specific to the exchange API endpoint
1995
2001
  :param boolean [params.returnRateLimits]: set to True to return rate limit informations, defaults to False.
2002
+ :param str|None [params.method]: method to use. Can be account.position or v2/account.position
1996
2003
  :returns dict[]: a list of `position structure <https://docs.ccxt.com/#/?id=position-structure>`
1997
2004
  """
1998
2005
  await self.load_markets()
@@ -2008,9 +2015,11 @@ class binance(ccxt.async_support.binance):
2008
2015
  returnRateLimits = False
2009
2016
  returnRateLimits, params = self.handle_option_and_params(params, 'fetchPositionsWs', 'returnRateLimits', False)
2010
2017
  payload['returnRateLimits'] = returnRateLimits
2018
+ method = None
2019
+ method, params = self.handle_option_and_params(params, 'fetchPositionsWs', 'method', 'account.position')
2011
2020
  message: dict = {
2012
2021
  'id': messageHash,
2013
- 'method': 'account.position',
2022
+ 'method': method,
2014
2023
  'params': self.sign_params(self.extend(payload, params)),
2015
2024
  }
2016
2025
  subscription: dict = {
@@ -3029,7 +3038,7 @@ class binance(ccxt.async_support.binance):
3029
3038
  self.set_balance_cache(client, type, isPortfolioMargin)
3030
3039
  self.set_positions_cache(client, type, symbols, isPortfolioMargin)
3031
3040
  fetchPositionsSnapshot = self.handle_option('watchPositions', 'fetchPositionsSnapshot', True)
3032
- awaitPositionsSnapshot = self.safe_bool('watchPositions', 'awaitPositionsSnapshot', True)
3041
+ awaitPositionsSnapshot = self.handle_option('watchPositions', 'awaitPositionsSnapshot', True)
3033
3042
  cache = self.safe_value(self.positions, type)
3034
3043
  if fetchPositionsSnapshot and awaitPositionsSnapshot and cache is None:
3035
3044
  snapshot = await client.future(type + ':fetchPositionsSnapshot')
ccxt/pro/bybit.py CHANGED
@@ -1061,7 +1061,7 @@ class bybit(ccxt.async_support.bybit):
1061
1061
  self.set_positions_cache(client, symbols)
1062
1062
  cache = self.positions
1063
1063
  fetchPositionsSnapshot = self.handle_option('watchPositions', 'fetchPositionsSnapshot', True)
1064
- awaitPositionsSnapshot = self.safe_bool('watchPositions', 'awaitPositionsSnapshot', True)
1064
+ awaitPositionsSnapshot = self.handle_option('watchPositions', 'awaitPositionsSnapshot', True)
1065
1065
  if fetchPositionsSnapshot and awaitPositionsSnapshot and cache is None:
1066
1066
  snapshot = await client.future('fetchPositionsSnapshot')
1067
1067
  return self.filter_by_symbols_since_limit(snapshot, symbols, since, limit, True)
ccxt/pro/cryptocom.py CHANGED
@@ -524,7 +524,7 @@ class cryptocom(ccxt.async_support.cryptocom):
524
524
  client = self.client(url)
525
525
  self.set_positions_cache(client, symbols)
526
526
  fetchPositionsSnapshot = self.handle_option('watchPositions', 'fetchPositionsSnapshot', True)
527
- awaitPositionsSnapshot = self.safe_bool('watchPositions', 'awaitPositionsSnapshot', True)
527
+ awaitPositionsSnapshot = self.handle_option('watchPositions', 'awaitPositionsSnapshot', True)
528
528
  if fetchPositionsSnapshot and awaitPositionsSnapshot and self.positions is None:
529
529
  snapshot = await client.future('fetchPositionsSnapshot')
530
530
  return self.filter_by_symbols_since_limit(snapshot, symbols, since, limit, True)
ccxt/pro/gate.py CHANGED
@@ -1013,7 +1013,7 @@ class gate(ccxt.async_support.gate):
1013
1013
  client = self.client(url)
1014
1014
  self.set_positions_cache(client, type, symbols)
1015
1015
  fetchPositionsSnapshot = self.handle_option('watchPositions', 'fetchPositionsSnapshot', True)
1016
- awaitPositionsSnapshot = self.safe_bool('watchPositions', 'awaitPositionsSnapshot', True)
1016
+ awaitPositionsSnapshot = self.handle_option('watchPositions', 'awaitPositionsSnapshot', True)
1017
1017
  cache = self.safe_value(self.positions, type)
1018
1018
  if fetchPositionsSnapshot and awaitPositionsSnapshot and cache is None:
1019
1019
  return await client.future(type + ':fetchPositionsSnapshot')
ccxt/pro/kucoinfutures.py CHANGED
@@ -338,7 +338,7 @@ class kucoinfutures(ccxt.async_support.kucoinfutures):
338
338
  client = self.client(url)
339
339
  self.set_position_cache(client, symbol)
340
340
  fetchPositionSnapshot = self.handle_option('watchPosition', 'fetchPositionSnapshot', True)
341
- awaitPositionSnapshot = self.safe_bool('watchPosition', 'awaitPositionSnapshot', True)
341
+ awaitPositionSnapshot = self.handle_option('watchPosition', 'awaitPositionSnapshot', True)
342
342
  currentPosition = self.get_current_position(symbol)
343
343
  if fetchPositionSnapshot and awaitPositionSnapshot and currentPosition is None:
344
344
  snapshot = await client.future('fetchPositionSnapshot:' + symbol)
ccxt/pro/vertex.py CHANGED
@@ -545,7 +545,7 @@ class vertex(ccxt.async_support.vertex):
545
545
  client = self.client(url)
546
546
  self.set_positions_cache(client, symbols, params)
547
547
  fetchPositionsSnapshot = self.handle_option('watchPositions', 'fetchPositionsSnapshot', True)
548
- awaitPositionsSnapshot = self.safe_bool('watchPositions', 'awaitPositionsSnapshot', True)
548
+ awaitPositionsSnapshot = self.handle_option('watchPositions', 'awaitPositionsSnapshot', True)
549
549
  if fetchPositionsSnapshot and awaitPositionsSnapshot and self.positions is None:
550
550
  snapshot = await client.future('fetchPositionsSnapshot')
551
551
  return self.filter_by_symbols_since_limit(snapshot, symbols, since, limit, True)
ccxt/pro/woo.py CHANGED
@@ -909,7 +909,7 @@ class woo(ccxt.async_support.woo):
909
909
  client = self.client(url)
910
910
  self.set_positions_cache(client, symbols)
911
911
  fetchPositionsSnapshot = self.handle_option('watchPositions', 'fetchPositionsSnapshot', True)
912
- awaitPositionsSnapshot = self.safe_bool('watchPositions', 'awaitPositionsSnapshot', True)
912
+ awaitPositionsSnapshot = self.handle_option('watchPositions', 'awaitPositionsSnapshot', True)
913
913
  if fetchPositionsSnapshot and awaitPositionsSnapshot and self.positions is None:
914
914
  snapshot = await client.future('fetchPositionsSnapshot')
915
915
  return self.filter_by_symbols_since_limit(snapshot, symbols, since, limit, True)
ccxt/pro/woofipro.py CHANGED
@@ -866,7 +866,7 @@ class woofipro(ccxt.async_support.woofipro):
866
866
  client = self.client(url)
867
867
  self.set_positions_cache(client, symbols)
868
868
  fetchPositionsSnapshot = self.handle_option('watchPositions', 'fetchPositionsSnapshot', True)
869
- awaitPositionsSnapshot = self.safe_bool('watchPositions', 'awaitPositionsSnapshot', True)
869
+ awaitPositionsSnapshot = self.handle_option('watchPositions', 'awaitPositionsSnapshot', True)
870
870
  if fetchPositionsSnapshot and awaitPositionsSnapshot and self.positions is None:
871
871
  snapshot = await client.future('fetchPositionsSnapshot')
872
872
  return self.filter_by_symbols_since_limit(snapshot, symbols, since, limit, True)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ccxt
3
- Version: 4.3.78
3
+ Version: 4.3.80
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.78/dist/ccxt.browser.min.js
274
- * unpkg: https://unpkg.com/ccxt@4.3.78/dist/ccxt.browser.min.js
273
+ * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.3.80/dist/ccxt.browser.min.js
274
+ * unpkg: https://unpkg.com/ccxt@4.3.80/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.78/dist/ccxt.browser.min.js"></script>
279
+ <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.3.80/dist/ccxt.browser.min.js"></script>
280
280
  ```
281
281
 
282
282
  Creates a global `ccxt` object:
@@ -1,10 +1,10 @@
1
- ccxt/__init__.py,sha256=bQokervOh_2VKFrxmeGRdEVLgQvFzgKbHp9FR_quhtw,16417
1
+ ccxt/__init__.py,sha256=mXY0nDx2xo6TTvvOZOaLDW48wkmWcZ2nRKTRPgfneEY,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
5
5
  ccxt/bequant.py,sha256=RBiAmaTbL35DgiV3Hl6uchLUd78V0z1T9riTlNsrpdc,1174
6
6
  ccxt/bigone.py,sha256=PBciIENMufQQ6cxukdze5hhQ5vFOqBtMHDfTwT4nUuY,93086
7
- ccxt/binance.py,sha256=nLrtlBJqMwFmXrRE7GqEHVdV8G0tCdQR7xsQLiTrGP4,641536
7
+ ccxt/binance.py,sha256=bzrq8F5iCWbC1JnDkcmw63hJ3Toq4Mpv5V6bxMZGlC0,640182
8
8
  ccxt/binancecoinm.py,sha256=arFnEh8mErSyi23eVPWE4iwoT7PWQyxGGVJCKCy6UJY,1702
9
9
  ccxt/binanceus.py,sha256=hdcT4OnadcdFFFjF3GtM0nWv90jqojqwdVS3xWGuW40,9163
10
10
  ccxt/binanceusdm.py,sha256=bAPcJj5HLxoCdPolriM8sJpoTBwbV78vBTbKRmWhNP4,2632
@@ -19,7 +19,7 @@ ccxt/bitfinex2.py,sha256=m1PXKkM7tDf-ud-dmyqqYMF942IO3U0Du7AS3iVx-GU,160641
19
19
  ccxt/bitflyer.py,sha256=biQ8-J_HSb9_S6HE1LBDd6BGpIZSMxK5JyTZ3Xg1SdI,41683
20
20
  ccxt/bitget.py,sha256=ZQvtdW3pnv-LVHG3a1UwR72b-K8Fq-BZ-tu_haz-v60,424620
21
21
  ccxt/bithumb.py,sha256=8oTnFWi8Ai9fnm5FPXvNmaUAVJEOqYi-18VC23cWmXY,47935
22
- ccxt/bitmart.py,sha256=ZSy0ua1ymOfwrMLkWNrn6elI1c8RhMtTvKfENm_0VwA,211961
22
+ ccxt/bitmart.py,sha256=U-QuxcYA6rMGGuD6RiTo1Mx-39uWX1at4uCNkdJFaV0,211937
23
23
  ccxt/bitmex.py,sha256=oOFatIOxvXIPOdOeeVau-IdryOeYpdCtTPGxX05HA9A,126861
24
24
  ccxt/bitopro.py,sha256=0m104rrKQXuXa3dThHGgqq0leIIcdN_nQTR3a9YJLLM,69322
25
25
  ccxt/bitpanda.py,sha256=aiwPkx9lKbVzt4ggoYdq_mIbMGtg5ZtGl2yRHO5xyz8,471
@@ -35,7 +35,7 @@ ccxt/btcalpha.py,sha256=UcCCDZ_7EM-Q2tHU1IQPEA2DErFsLhrSfX-Oy-Q2uL4,36715
35
35
  ccxt/btcbox.py,sha256=9-P15L-OiZRzz0ZOtgO3bf73kuHro9u3NYf3QjeYv4k,27744
36
36
  ccxt/btcmarkets.py,sha256=0gMC0vvmuDJwcnllHMUZsQRV6QWA1-Cbq1N1F9rIUW8,52697
37
37
  ccxt/btcturk.py,sha256=bQ8sJq5iEj9oq2R17uDadPWKcnIQG8id5UmdlpHfFy8,36992
38
- ccxt/bybit.py,sha256=hAAoPAcxo6xBUygcQOjre7Z0EHyC3XlMB99K8WYgot4,417341
38
+ ccxt/bybit.py,sha256=eqP9ZKLYn9SfhZW8dYBdq0xagQRAKF7FJBLA73iuNi8,417795
39
39
  ccxt/cex.py,sha256=YQtARIBP7cY3y-AqRarEH_mVh7_ftt18jLebhpL3hxQ,70084
40
40
  ccxt/coinbase.py,sha256=3L5CDWhg4MQlDkdZnuJxxOjmsWEh-gnqcV4R6nCq7rg,217483
41
41
  ccxt/coinbaseadvanced.py,sha256=d5g6nRx-NCcCwZDdtp8FsI2D-pRjSvnAP9ISSKY_nCQ,538
@@ -91,7 +91,7 @@ ccxt/p2b.py,sha256=V_P8GTdb6SkeaVptVtc-LbjwUKUinfYFtO4nzmKG0N0,54333
91
91
  ccxt/paradex.py,sha256=-o0MAEgItYeo-juKgh2D-lnQIsjRKWMCupyMVPldsG8,85602
92
92
  ccxt/paymium.py,sha256=Xz-H66MQWQcQ1KJbciSMeremCD9kl2up_-IQUvBt22Y,24419
93
93
  ccxt/phemex.py,sha256=Xi0Cb6Zfe2_tZ0GZ_Iam_m2NEJ7fIDjHpOYc1vJ-VQk,223106
94
- ccxt/poloniex.py,sha256=Pqmr-FAeN5phqDZi1eIIGfc43Djey8cTHI0FCNTG-yw,102253
94
+ ccxt/poloniex.py,sha256=vaLhyTpZpzBvrrM6dCA_TVypLwLICXotixqiM27q-MA,102301
95
95
  ccxt/poloniexfutures.py,sha256=E0S38NKWPCKRM8RV-TJVxhhOj0vjF-9qR3cbtgmsIdk,78551
96
96
  ccxt/probit.py,sha256=MFA0bFG-xEx3ZDQIWebUKaP83mCjYKVcztk3e61Zx8Y,76165
97
97
  ccxt/timex.py,sha256=Un10iGNwAHPifpQftyXdUwoqS-10ho6ZIesz2Ts_Iqg,72068
@@ -218,13 +218,13 @@ 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=emYlNdNMxVKpXa3e-KxIgOUZdCXClMAOEi1kaDs8zx0,16230
221
+ ccxt/async_support/__init__.py,sha256=gvxdFG_MnNGhdGsC4FNnvGj1CnQ9umhcakuCO50RDQc,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
225
225
  ccxt/async_support/bequant.py,sha256=1hTwHovo1bW1XTIc8ZKjvJ-Xg6LfmpGdzT7TepykaVM,1188
226
226
  ccxt/async_support/bigone.py,sha256=PZcs9u6FI6uAyJKiiNGIGDA-uainz4aKEOrC1Q6KIk4,93540
227
- ccxt/async_support/binance.py,sha256=TG-2Cq3DF93VXoeXV3d_j2lgAW00eyHfXrCOgwb077U,644258
227
+ ccxt/async_support/binance.py,sha256=nYDNOInWD94OIpVhzb_JOmjh2zDYaBaPIi_YUJXxq7Q,642904
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
@@ -239,7 +239,7 @@ ccxt/async_support/bitfinex2.py,sha256=vTO61ELmw5d8A7xvmINff17pCWpoiIrVnc_RJzVic
239
239
  ccxt/async_support/bitflyer.py,sha256=hIrGMxaM78V1i-gHN2FRFAhI2aaLR21mPAoIE33fW70,41991
240
240
  ccxt/async_support/bitget.py,sha256=JloBQJwLONpLsNjzTxfabc-poDryi3xqwl66UNYi8DU,426244
241
241
  ccxt/async_support/bithumb.py,sha256=Q0Cx_cRKZRfdpBAhQyINm63Qw3M6BRYQRiF0UqYzfis,48214
242
- ccxt/async_support/bitmart.py,sha256=sNb0CAnVrxrlO2Htg4DCYJ12ti1eRjqtLczEj-fKM_g,212917
242
+ ccxt/async_support/bitmart.py,sha256=zIkhlHwCfAXP7Uli6PKZaZmsJV-CI8qFsKXqYo1XUxY,212893
243
243
  ccxt/async_support/bitmex.py,sha256=qSKH_dXDtpY5BUrLUbESI3a3WQhBFrc1ucv1N5GDuIU,127439
244
244
  ccxt/async_support/bitopro.py,sha256=HHESL0hiE0Rc0GRhFeIKnTs-eBzHEtOqqECANTSp0e0,69726
245
245
  ccxt/async_support/bitpanda.py,sha256=2k3URBWrpnh2xHa7JiYenI7_4MW5UeOPGzetlmRkR4U,485
@@ -255,7 +255,7 @@ ccxt/async_support/btcalpha.py,sha256=DgzrJ6cczUCDZr-QLUxMpazeudEFdQ_OzXiQiJM4Hb
255
255
  ccxt/async_support/btcbox.py,sha256=FGIj8il6VZL56_dDYsAMwp4DpdKNt_vbMXV6VZ2boCI,27968
256
256
  ccxt/async_support/btcmarkets.py,sha256=x1-s5uVioHyvNJoBxhxP8eUUslTDwQnZMU0FWfu1Fd4,53047
257
257
  ccxt/async_support/btcturk.py,sha256=P3bg0XG0sAi-8ge9ZFzQqZHsoGOGfxBjkhIDo4VPSK4,37210
258
- ccxt/async_support/bybit.py,sha256=hb6SpCChGiPdASz9BRXMXpoh5CfYe3tJ0-DW0jqyjDc,419211
258
+ ccxt/async_support/bybit.py,sha256=Q2BXgxR57AmDMVI_83LTAph_aL-vEFdPK2IJMYOGnjw,419671
259
259
  ccxt/async_support/cex.py,sha256=5KZ9qt4WsUAkH2rkHn7zW7SwlB9FumruLELdKF4LFoE,70434
260
260
  ccxt/async_support/coinbase.py,sha256=Ch_hFo2zj0qp4kuDUnebGD16pUeKs6h3HJxs5Fdpkco,218637
261
261
  ccxt/async_support/coinbaseadvanced.py,sha256=Kupwnuxiu_qTjwCNV2asacoDUNFQvcaHNAznUJPhdQs,552
@@ -311,7 +311,7 @@ ccxt/async_support/p2b.py,sha256=aU_69L8hyfZEQ_yFJb6UoR_l0EbaeCTRgNvdDtk4QPs,545
311
311
  ccxt/async_support/paradex.py,sha256=iN1obpvPvLikj30KiE4I7BGlBVBRLHpHifEH8vn8JdY,86210
312
312
  ccxt/async_support/paymium.py,sha256=GIAgyOjR11o1pfq8om4Pwr68jMkLoEwEz7sB8lIDMI0,24607
313
313
  ccxt/async_support/phemex.py,sha256=Xfa8kxrN6mEr6BGLNDnquGhMq0sk42qJ7P5Ckmb-0BE,223924
314
- ccxt/async_support/poloniex.py,sha256=m5zaJRKARuSmk05lKbaSlPOlcj4s9KsA5BX4aEmil8I,102801
314
+ ccxt/async_support/poloniex.py,sha256=hYmiGQfwKyYcaPp1Q1Qa4gPP0TaqJrG2367y-q0WxXE,102849
315
315
  ccxt/async_support/poloniexfutures.py,sha256=iXEtcjHZBTEhgwkp8xbIqxObZf-OhfUr2yVwq5WlsMg,78937
316
316
  ccxt/async_support/probit.py,sha256=8XCtYbAIIQNjfdLfMVwjaJ9vM_7QWnEQ86yYZYPlS8M,76557
317
317
  ccxt/async_support/timex.py,sha256=vRHjqc-6uMgZTY-sFTBApU_QBnrUri8gaHPNw_Na3Jo,72430
@@ -329,7 +329,7 @@ ccxt/async_support/yobit.py,sha256=JuH_yClCl_cd5L-BMTt3MPAvIF61Wpqc3W7H-fno6Hs,5
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=MLNPAkDoC9HYLicAqYdXVQEoJ5sxZhDA3SPc3RlnUSo,110799
332
+ ccxt/async_support/base/exchange.py,sha256=wmK5Ls6kXKaCJYNVXKVJQh1oZN7ljh7zGUg3E5JscUk,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=MCkIeoeCB9Olj1evw0e7nLk5YA9CKoXcQsTNZRPXjgM,295256
346
+ ccxt/base/exchange.py,sha256=QDmTRgOgGrNdilQd7oFL3sOhy2efnwu40KNIBOawixc,295715
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=17DdWskQWu59rykFUdivTVzQiFK0eUp0WzO2K1vxO-8,7608
349
+ ccxt/pro/__init__.py,sha256=dLg8Q9dPmtQU9OWcHNk7pfzsohkqpI0BjmVfCbusrOE,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=ErqjI0lbFKFj1LFv5C0kDYmFmy8zasJbQvJfHk4pTNk,177358
353
+ ccxt/pro/binance.py,sha256=thzqKZtSq4V0-JujAUbD6hxM_Vy9siCxUXYywP0xgc8,177852
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
@@ -369,7 +369,7 @@ ccxt/pro/bitstamp.py,sha256=P8Td5HqWiO6GMdLj-cKqPTZD28fltWlZQ7Z-omDbO60,20916
369
369
  ccxt/pro/bitvavo.py,sha256=POivGXYmz8GqYc_uErpS6BdG2Gv087BStiJ3lQwod-A,56219
370
370
  ccxt/pro/blockchaincom.py,sha256=LtCL3habcuB2IRXXK_oeqdzqpnkj01Gr79X82nK8Mnk,29600
371
371
  ccxt/pro/blofin.py,sha256=Wjw0coQ4TO1qdVVnBGSdRDVtADsl-t-hkOo-uEDZTbc,28659
372
- ccxt/pro/bybit.py,sha256=WNwgz1KwN11yQw6TzaNYvIfUg5aUOE1dHGEzpZ95xWs,92050
372
+ ccxt/pro/bybit.py,sha256=p4YRpTqU3nuCiW2ma1h2Lii0V8S8HX1FmU8t62UTg6A,92054
373
373
  ccxt/pro/cex.py,sha256=SFgOQmXEfuKodIzN_dISZ_iqU46B2TbVPFSXNbO7cY4,58493
374
374
  ccxt/pro/coinbase.py,sha256=hwd8lUuaW8WyQQOh9WvBVuiuOJTpmlCXU0hL3UE8UFQ,31411
375
375
  ccxt/pro/coinbaseexchange.py,sha256=eoDBwYvGK__zGtC0yNRk2evWwQAD6XpjMHcpubjBt2U,39027
@@ -377,11 +377,11 @@ ccxt/pro/coinbaseinternational.py,sha256=1ykwnp6XaOqvH0HILlZvrJdgvscF2lnZfIyn5U9
377
377
  ccxt/pro/coincheck.py,sha256=7krhoxpI5RoHTyeP9tHz-o_EXlhytIxHZ4Ld7ZK29CE,7803
378
378
  ccxt/pro/coinex.py,sha256=GkW0duPzwNXppQxHPTaa1QIjnVXa3NXr-BhwocwNYF0,45164
379
379
  ccxt/pro/coinone.py,sha256=8tnd60CfPzy6n74Ninxa1BhMIvNfCdqgRn_om3zUwLk,15686
380
- ccxt/pro/cryptocom.py,sha256=rNyJq2m4j5ngTdDJb8BgDnrzR4gIK_eD_nuk70jQggc,43314
380
+ ccxt/pro/cryptocom.py,sha256=Zrh6noBvrMIcSLgVUuzxW7SPcJzUQDlcqMFU4JsnwLE,43318
381
381
  ccxt/pro/currencycom.py,sha256=8B9pSuPyO0ROCWOROUFoNbJBeOU3bRmlKXSj1CBMkPI,22459
382
382
  ccxt/pro/deribit.py,sha256=DG3UJE8VWuydP64_CJzDqmRC0vqc9ViBvQr28gW_nhY,41094
383
383
  ccxt/pro/exmo.py,sha256=n44MqOwY-tSt0TFNhQKydjxRJoSbrMVBzL4NNswOZm4,24542
384
- ccxt/pro/gate.py,sha256=sdMZ3aTivVdhJ5rq_6Loy_0I2FbeGI1qteoH-3-oTQw,79243
384
+ ccxt/pro/gate.py,sha256=75uP48pcrhppAiSgrNiS7vQoTTraDj7qPzf8JZCXtgo,79247
385
385
  ccxt/pro/gateio.py,sha256=_uBWXYQbmsHRivKnZOJDmxJ9tWLO_0HAxmOjAEUy9nE,391
386
386
  ccxt/pro/gemini.py,sha256=8B8dbYPbKbZb3lzhlt8-x0oybQxOHr8Q4R_f5edLwbU,36899
387
387
  ccxt/pro/hitbtc.py,sha256=hhzNO9qGnALrRlMc7Bw0acIGHhFXVA6sUsTRGrWwYkc,56889
@@ -395,7 +395,7 @@ ccxt/pro/independentreserve.py,sha256=wLONq1yDOV-92ZaKaBLZwUxopu0MZR-Z-AjvPN-_fu
395
395
  ccxt/pro/kraken.py,sha256=hrYXzL-CLCgm0BbQBjNOoiAfC57Ca5JTiD_24eIvikM,63840
396
396
  ccxt/pro/krakenfutures.py,sha256=Y9vqrxNbr7OJ0BIMZqrVtMedUzk7XtOZuF_OGQ2tUJc,64033
397
397
  ccxt/pro/kucoin.py,sha256=Vsbt5k8zDSve31LiRlPQgdp1AxVtosT1c9nSCUCF364,54296
398
- ccxt/pro/kucoinfutures.py,sha256=rf7yP7uYDIP4G7uVPo0yiUZgG07fOjUd46LgK1Mm6ZI,50327
398
+ ccxt/pro/kucoinfutures.py,sha256=gMRflEtuO_S_cuhhVOtIwarL_Nk9ThAmGqyvUncVqHc,50331
399
399
  ccxt/pro/lbank.py,sha256=ip7zjZFvGKufpu30WN2_lFQ-ODcJVNkcJQHbz-uLfHo,35203
400
400
  ccxt/pro/luno.py,sha256=AzLK0_C0Hu25ukMNkMLP_sY3D4UG9FT38oawpo4jzTg,12336
401
401
  ccxt/pro/mexc.py,sha256=yiLfthMojs2T-sUzzhDjmTTNFc8Ob8S85ovpPb_I7Ts,43270
@@ -411,11 +411,11 @@ ccxt/pro/poloniex.py,sha256=e81Vkvg2oRW51nXECf6lF7Cjj5CbHv7Np2QSy6z0h3k,52108
411
411
  ccxt/pro/poloniexfutures.py,sha256=Iy8Q_Z8I3rUtNcZoxwVzMK2C1qLIiHjFXdZd_rr3Sww,41972
412
412
  ccxt/pro/probit.py,sha256=ngY30aRwNClc_q_Pirajg4-K-mJ3bvipgD2-jBuPs6g,23110
413
413
  ccxt/pro/upbit.py,sha256=M3RwAXlK7Mbu8zduZK7eprLOfNgJax_xSPUhzXQ2zfY,22094
414
- ccxt/pro/vertex.py,sha256=kE4UZNKB2zXTt3eVOXwtM5Z4F1LfcP1cfDC4_xMncPM,40528
414
+ ccxt/pro/vertex.py,sha256=sPo6hijgzFUIPqv3OcGuc6gf-MqdmXRRU8Zs13Zskl4,40532
415
415
  ccxt/pro/wazirx.py,sha256=LXpotTduk3fhtcJP2TWpssiOOAZGxhou5_MTK-0G7n0,30082
416
416
  ccxt/pro/whitebit.py,sha256=lpIDFgmVXtL77680Rz9hVTEXd3M6TsizhlFb0ruKfEM,35073
417
- ccxt/pro/woo.py,sha256=EkcUrQBTGFrVjULdrcfcLcpa48qnfjwMaAurXnM0YSg,48793
418
- ccxt/pro/woofipro.py,sha256=pwVXMDrl3zFZrEJJkk9_PEil9uTTtrV9TEvbCRFaNUM,49050
417
+ ccxt/pro/woo.py,sha256=IzDJz3wrlGHwu36R8WU3VCWyOZfOXy2ndHEl_dQstcQ,48797
418
+ ccxt/pro/woofipro.py,sha256=-O6PmE7wVg5HcJWY05-VxhRrvbBlqJGn8f3wXwP4FxY,49054
419
419
  ccxt/pro/xt.py,sha256=USN0l6AOLiKgT9Sfz0QX93yFXv-hnU2VEV_mzkSFuyQ,48369
420
420
  ccxt/static_dependencies/__init__.py,sha256=tzFje8cloqmiIE6kola3EaYC0SnD1izWnri69hzHsSw,168
421
421
  ccxt/static_dependencies/ecdsa/__init__.py,sha256=Xaj0G79BLtBt2YZcOOMV8qOlQZ7fIJznNiHhiEEZfQA,594
@@ -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.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,,
651
+ ccxt-4.3.80.dist-info/LICENSE.txt,sha256=EIb9221AhMHV7xF1_55STFdKTFsnJVJYkRpY2Lnvo5w,1068
652
+ ccxt-4.3.80.dist-info/METADATA,sha256=Q2E5zZZ8R_FKimgd6FpdPpSotXT_Xk42kdfCWlOBMf0,116642
653
+ ccxt-4.3.80.dist-info/WHEEL,sha256=z9j0xAa_JmUKMpmz72K0ZGALSM_n-wQVmGbleXx2VHg,110
654
+ ccxt-4.3.80.dist-info/top_level.txt,sha256=CkQDuCTDKNcImPV60t36G6MdYfxsAPNiSaEwifVoVMo,5
655
+ ccxt-4.3.80.dist-info/RECORD,,
File without changes