ccxt 4.3.32__py2.py3-none-any.whl → 4.3.34__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.
Files changed (201) hide show
  1. ccxt/__init__.py +1 -1
  2. ccxt/abstract/binance.py +1 -0
  3. ccxt/abstract/binancecoinm.py +1 -0
  4. ccxt/abstract/binanceus.py +1 -0
  5. ccxt/abstract/binanceusdm.py +1 -0
  6. ccxt/abstract/bitget.py +1 -1
  7. ccxt/ace.py +2 -2
  8. ccxt/alpaca.py +1 -1
  9. ccxt/ascendex.py +2 -2
  10. ccxt/async_support/__init__.py +1 -1
  11. ccxt/async_support/ace.py +2 -2
  12. ccxt/async_support/alpaca.py +1 -1
  13. ccxt/async_support/ascendex.py +2 -2
  14. ccxt/async_support/base/exchange.py +17 -1
  15. ccxt/async_support/bigone.py +2 -2
  16. ccxt/async_support/binance.py +4 -3
  17. ccxt/async_support/bingx.py +2 -2
  18. ccxt/async_support/bit2c.py +1 -1
  19. ccxt/async_support/bitbank.py +1 -1
  20. ccxt/async_support/bitbns.py +1 -1
  21. ccxt/async_support/bitfinex.py +2 -2
  22. ccxt/async_support/bitfinex2.py +1 -1
  23. ccxt/async_support/bitflyer.py +1 -1
  24. ccxt/async_support/bitget.py +4 -4
  25. ccxt/async_support/bithumb.py +1 -1
  26. ccxt/async_support/bitmart.py +2 -2
  27. ccxt/async_support/bitmex.py +3 -3
  28. ccxt/async_support/bitopro.py +3 -3
  29. ccxt/async_support/bitrue.py +2 -2
  30. ccxt/async_support/bitso.py +2 -2
  31. ccxt/async_support/bitstamp.py +2 -2
  32. ccxt/async_support/bitteam.py +3 -3
  33. ccxt/async_support/bitvavo.py +2 -2
  34. ccxt/async_support/blockchaincom.py +1 -1
  35. ccxt/async_support/blofin.py +3 -3
  36. ccxt/async_support/btcalpha.py +3 -3
  37. ccxt/async_support/btcbox.py +1 -1
  38. ccxt/async_support/btcmarkets.py +3 -3
  39. ccxt/async_support/btcturk.py +1 -1
  40. ccxt/async_support/bybit.py +2 -2
  41. ccxt/async_support/cex.py +1 -1
  42. ccxt/async_support/coinbase.py +96 -55
  43. ccxt/async_support/coinbaseexchange.py +1 -1
  44. ccxt/async_support/coinbaseinternational.py +3 -3
  45. ccxt/async_support/coincheck.py +2 -2
  46. ccxt/async_support/coinex.py +2 -2
  47. ccxt/async_support/coinlist.py +2 -2
  48. ccxt/async_support/coinmate.py +2 -2
  49. ccxt/async_support/coinmetro.py +2 -2
  50. ccxt/async_support/coinone.py +1 -1
  51. ccxt/async_support/coinsph.py +2 -2
  52. ccxt/async_support/cryptocom.py +1 -1
  53. ccxt/async_support/currencycom.py +2 -2
  54. ccxt/async_support/delta.py +1 -1
  55. ccxt/async_support/deribit.py +2 -2
  56. ccxt/async_support/digifinex.py +2 -2
  57. ccxt/async_support/exmo.py +2 -2
  58. ccxt/async_support/gate.py +2 -2
  59. ccxt/async_support/gemini.py +2 -2
  60. ccxt/async_support/hitbtc.py +2 -2
  61. ccxt/async_support/hollaex.py +1 -1
  62. ccxt/async_support/htx.py +2 -2
  63. ccxt/async_support/huobijp.py +2 -2
  64. ccxt/async_support/hyperliquid.py +2 -2
  65. ccxt/async_support/idex.py +2 -2
  66. ccxt/async_support/indodax.py +2 -2
  67. ccxt/async_support/kraken.py +2 -2
  68. ccxt/async_support/krakenfutures.py +1 -1
  69. ccxt/async_support/kucoin.py +2 -2
  70. ccxt/async_support/kuna.py +2 -2
  71. ccxt/async_support/latoken.py +2 -2
  72. ccxt/async_support/lbank.py +1 -1
  73. ccxt/async_support/luno.py +1 -1
  74. ccxt/async_support/lykke.py +1 -1
  75. ccxt/async_support/mercado.py +1 -1
  76. ccxt/async_support/mexc.py +1 -1
  77. ccxt/async_support/ndax.py +2 -2
  78. ccxt/async_support/novadax.py +3 -3
  79. ccxt/async_support/oceanex.py +2 -2
  80. ccxt/async_support/okcoin.py +3 -3
  81. ccxt/async_support/okx.py +3 -3
  82. ccxt/async_support/onetrading.py +2 -2
  83. ccxt/async_support/p2b.py +2 -2
  84. ccxt/async_support/paymium.py +1 -1
  85. ccxt/async_support/phemex.py +4 -4
  86. ccxt/async_support/poloniex.py +3 -3
  87. ccxt/async_support/poloniexfutures.py +2 -2
  88. ccxt/async_support/probit.py +3 -3
  89. ccxt/async_support/timex.py +2 -2
  90. ccxt/async_support/tokocrypto.py +1 -1
  91. ccxt/async_support/tradeogre.py +1 -1
  92. ccxt/async_support/upbit.py +3 -3
  93. ccxt/async_support/wavesexchange.py +1 -1
  94. ccxt/async_support/wazirx.py +3 -3
  95. ccxt/async_support/whitebit.py +3 -3
  96. ccxt/async_support/woo.py +3 -3
  97. ccxt/async_support/woofipro.py +3 -3
  98. ccxt/async_support/yobit.py +1 -1
  99. ccxt/async_support/zaif.py +2 -2
  100. ccxt/async_support/zonda.py +1 -1
  101. ccxt/base/exchange.py +25 -3
  102. ccxt/base/types.py +0 -1
  103. ccxt/bigone.py +2 -2
  104. ccxt/binance.py +4 -3
  105. ccxt/bingx.py +2 -2
  106. ccxt/bit2c.py +1 -1
  107. ccxt/bitbank.py +1 -1
  108. ccxt/bitbns.py +1 -1
  109. ccxt/bitfinex.py +2 -2
  110. ccxt/bitfinex2.py +1 -1
  111. ccxt/bitflyer.py +1 -1
  112. ccxt/bitget.py +4 -4
  113. ccxt/bithumb.py +1 -1
  114. ccxt/bitmart.py +2 -2
  115. ccxt/bitmex.py +3 -3
  116. ccxt/bitopro.py +3 -3
  117. ccxt/bitrue.py +2 -2
  118. ccxt/bitso.py +2 -2
  119. ccxt/bitstamp.py +2 -2
  120. ccxt/bitteam.py +3 -3
  121. ccxt/bitvavo.py +2 -2
  122. ccxt/blockchaincom.py +1 -1
  123. ccxt/blofin.py +3 -3
  124. ccxt/btcalpha.py +3 -3
  125. ccxt/btcbox.py +1 -1
  126. ccxt/btcmarkets.py +3 -3
  127. ccxt/btcturk.py +1 -1
  128. ccxt/bybit.py +2 -2
  129. ccxt/cex.py +1 -1
  130. ccxt/coinbase.py +96 -55
  131. ccxt/coinbaseexchange.py +1 -1
  132. ccxt/coinbaseinternational.py +3 -3
  133. ccxt/coincheck.py +2 -2
  134. ccxt/coinex.py +2 -2
  135. ccxt/coinlist.py +2 -2
  136. ccxt/coinmate.py +2 -2
  137. ccxt/coinmetro.py +2 -2
  138. ccxt/coinone.py +1 -1
  139. ccxt/coinsph.py +2 -2
  140. ccxt/cryptocom.py +1 -1
  141. ccxt/currencycom.py +2 -2
  142. ccxt/delta.py +1 -1
  143. ccxt/deribit.py +2 -2
  144. ccxt/digifinex.py +2 -2
  145. ccxt/exmo.py +2 -2
  146. ccxt/gate.py +2 -2
  147. ccxt/gemini.py +2 -2
  148. ccxt/hitbtc.py +2 -2
  149. ccxt/hollaex.py +1 -1
  150. ccxt/htx.py +2 -2
  151. ccxt/huobijp.py +2 -2
  152. ccxt/hyperliquid.py +2 -2
  153. ccxt/idex.py +2 -2
  154. ccxt/indodax.py +2 -2
  155. ccxt/kraken.py +2 -2
  156. ccxt/krakenfutures.py +1 -1
  157. ccxt/kucoin.py +2 -2
  158. ccxt/kuna.py +2 -2
  159. ccxt/latoken.py +2 -2
  160. ccxt/lbank.py +1 -1
  161. ccxt/luno.py +1 -1
  162. ccxt/lykke.py +1 -1
  163. ccxt/mercado.py +1 -1
  164. ccxt/mexc.py +1 -1
  165. ccxt/ndax.py +2 -2
  166. ccxt/novadax.py +3 -3
  167. ccxt/oceanex.py +2 -2
  168. ccxt/okcoin.py +3 -3
  169. ccxt/okx.py +3 -3
  170. ccxt/onetrading.py +2 -2
  171. ccxt/p2b.py +2 -2
  172. ccxt/paymium.py +1 -1
  173. ccxt/phemex.py +4 -4
  174. ccxt/poloniex.py +3 -3
  175. ccxt/poloniexfutures.py +2 -2
  176. ccxt/pro/__init__.py +1 -1
  177. ccxt/pro/binance.py +331 -2
  178. ccxt/pro/bitmex.py +98 -1
  179. ccxt/pro/bybit.py +82 -1
  180. ccxt/pro/gate.py +173 -1
  181. ccxt/pro/kucoinfutures.py +4 -0
  182. ccxt/pro/okx.py +245 -2
  183. ccxt/probit.py +3 -3
  184. ccxt/test/base/__init__.py +1 -0
  185. ccxt/test/base/test_liquidation.py +50 -0
  186. ccxt/timex.py +2 -2
  187. ccxt/tokocrypto.py +1 -1
  188. ccxt/tradeogre.py +1 -1
  189. ccxt/upbit.py +3 -3
  190. ccxt/wavesexchange.py +1 -1
  191. ccxt/wazirx.py +3 -3
  192. ccxt/whitebit.py +3 -3
  193. ccxt/woo.py +3 -3
  194. ccxt/woofipro.py +3 -3
  195. ccxt/yobit.py +1 -1
  196. ccxt/zaif.py +2 -2
  197. ccxt/zonda.py +1 -1
  198. {ccxt-4.3.32.dist-info → ccxt-4.3.34.dist-info}/METADATA +4 -4
  199. {ccxt-4.3.32.dist-info → ccxt-4.3.34.dist-info}/RECORD +201 -200
  200. {ccxt-4.3.32.dist-info → ccxt-4.3.34.dist-info}/WHEEL +0 -0
  201. {ccxt-4.3.32.dist-info → ccxt-4.3.34.dist-info}/top_level.txt +0 -0
@@ -423,7 +423,7 @@ class upbit(Exchange, ImplicitAPI):
423
423
  #
424
424
  return self.parse_markets(response)
425
425
 
426
- def parse_market(self, market) -> Market:
426
+ def parse_market(self, market: dict) -> Market:
427
427
  id = self.safe_string(market, 'market')
428
428
  quoteId, baseId = id.split('-')
429
429
  base = self.safe_currency_code(baseId)
@@ -1261,7 +1261,7 @@ class upbit(Exchange, ImplicitAPI):
1261
1261
  #
1262
1262
  return self.parse_transaction(response, currency)
1263
1263
 
1264
- def parse_transaction_status(self, status):
1264
+ def parse_transaction_status(self, status: Str):
1265
1265
  statuses: dict = {
1266
1266
  'submitting': 'pending', # 처리 중
1267
1267
  'submitted': 'pending', # 처리 완료
@@ -1801,7 +1801,7 @@ class upbit(Exchange, ImplicitAPI):
1801
1801
  headers['Content-Type'] = 'application/json'
1802
1802
  return {'url': url, 'method': method, 'body': body, 'headers': headers}
1803
1803
 
1804
- def handle_errors(self, httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody):
1804
+ def handle_errors(self, httpCode: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
1805
1805
  if response is None:
1806
1806
  return None # fallback to default error handler
1807
1807
  #
@@ -2280,7 +2280,7 @@ class wavesexchange(Exchange, ImplicitAPI):
2280
2280
  data = self.array_concat(data, items)
2281
2281
  return self.parse_deposit_withdraw_fees(data, codes, 'id')
2282
2282
 
2283
- def handle_errors(self, code, reason, url, method, headers, body, response, requestHeaders, requestBody):
2283
+ def handle_errors(self, code: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
2284
2284
  errorCode = self.safe_string(response, 'error')
2285
2285
  success = self.safe_bool(response, 'success', True)
2286
2286
  Exception = self.safe_value(self.exceptions, errorCode)
@@ -236,7 +236,7 @@ class wazirx(Exchange, ImplicitAPI):
236
236
  markets = self.safe_value(response, 'symbols', [])
237
237
  return self.parse_markets(markets)
238
238
 
239
- def parse_market(self, market) -> Market:
239
+ def parse_market(self, market: dict) -> Market:
240
240
  id = self.safe_string(market, 'symbol')
241
241
  baseId = self.safe_string(market, 'baseAsset')
242
242
  quoteId = self.safe_string(market, 'quoteAsset')
@@ -1107,7 +1107,7 @@ class wazirx(Exchange, ImplicitAPI):
1107
1107
  #
1108
1108
  return self.parse_transactions(response, currency, since, limit)
1109
1109
 
1110
- def parse_transaction_status(self, status):
1110
+ def parse_transaction_status(self, status: Str):
1111
1111
  statuses: dict = {
1112
1112
  '0': 'ok',
1113
1113
  '1': 'fail',
@@ -1187,7 +1187,7 @@ class wazirx(Exchange, ImplicitAPI):
1187
1187
  }
1188
1188
  return {'url': url, 'method': method, 'body': body, 'headers': headers}
1189
1189
 
1190
- def handle_errors(self, code, reason, url, method, headers, body, response, requestHeaders, requestBody):
1190
+ def handle_errors(self, code: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
1191
1191
  #
1192
1192
  # {"code":2098,"message":"Request out of receiving window."}
1193
1193
  #
@@ -349,7 +349,7 @@ class whitebit(Exchange, ImplicitAPI):
349
349
  #
350
350
  return self.parse_markets(markets)
351
351
 
352
- def parse_market(self, market) -> Market:
352
+ def parse_market(self, market: dict) -> Market:
353
353
  id = self.safe_string(market, 'name')
354
354
  baseId = self.safe_string(market, 'stock')
355
355
  quoteId = self.safe_string(market, 'money')
@@ -1961,7 +1961,7 @@ class whitebit(Exchange, ImplicitAPI):
1961
1961
  'info': transaction,
1962
1962
  }
1963
1963
 
1964
- def parse_transaction_status(self, status):
1964
+ def parse_transaction_status(self, status: Str):
1965
1965
  statuses: dict = {
1966
1966
  '1': 'pending',
1967
1967
  '2': 'pending',
@@ -2415,7 +2415,7 @@ class whitebit(Exchange, ImplicitAPI):
2415
2415
  }
2416
2416
  return {'url': url, 'method': method, 'body': body, 'headers': headers}
2417
2417
 
2418
- def handle_errors(self, code, reason, url, method, headers, body, response, requestHeaders, requestBody):
2418
+ def handle_errors(self, code: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
2419
2419
  if (code == 418) or (code == 429):
2420
2420
  raise DDoSProtection(self.id + ' ' + str(code) + ' ' + reason + ' ' + body)
2421
2421
  if code == 404:
ccxt/async_support/woo.py CHANGED
@@ -431,7 +431,7 @@ class woo(Exchange, ImplicitAPI):
431
431
  data = self.safe_list(response, 'rows', [])
432
432
  return self.parse_markets(data)
433
433
 
434
- def parse_market(self, market) -> Market:
434
+ def parse_market(self, market: dict) -> Market:
435
435
  marketId = self.safe_string(market, 'symbol')
436
436
  parts = marketId.split('_')
437
437
  first = self.safe_string(parts, 0)
@@ -2110,7 +2110,7 @@ class woo(Exchange, ImplicitAPI):
2110
2110
  'network': None,
2111
2111
  }
2112
2112
 
2113
- def parse_transaction_status(self, status):
2113
+ def parse_transaction_status(self, status: Str):
2114
2114
  statuses: dict = {
2115
2115
  'NEW': 'pending',
2116
2116
  'CONFIRMING': 'pending',
@@ -2400,7 +2400,7 @@ class woo(Exchange, ImplicitAPI):
2400
2400
  headers['x-api-signature'] = self.hmac(self.encode(auth), self.encode(self.secret), hashlib.sha256)
2401
2401
  return {'url': url, 'method': method, 'body': body, 'headers': headers}
2402
2402
 
2403
- def handle_errors(self, httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody):
2403
+ def handle_errors(self, httpCode: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
2404
2404
  if not response:
2405
2405
  return None # fallback to default error handler
2406
2406
  #
@@ -397,7 +397,7 @@ class woofipro(Exchange, ImplicitAPI):
397
397
  #
398
398
  return self.safe_integer(response, 'timestamp')
399
399
 
400
- def parse_market(self, market) -> Market:
400
+ def parse_market(self, market: dict) -> Market:
401
401
  #
402
402
  # {
403
403
  # "symbol": "PERP_BTC_USDC",
@@ -2054,7 +2054,7 @@ class woofipro(Exchange, ImplicitAPI):
2054
2054
  'network': None,
2055
2055
  }
2056
2056
 
2057
- def parse_transaction_status(self, status):
2057
+ def parse_transaction_status(self, status: Str):
2058
2058
  statuses: dict = {
2059
2059
  'NEW': 'pending',
2060
2060
  'CONFIRMING': 'pending',
@@ -2507,7 +2507,7 @@ class woofipro(Exchange, ImplicitAPI):
2507
2507
  headers['orderly-signature'] = self.urlencode_base64(self.base64_to_binary(signature))
2508
2508
  return {'url': url, 'method': method, 'body': body, 'headers': headers}
2509
2509
 
2510
- def handle_errors(self, httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody):
2510
+ def handle_errors(self, httpCode: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
2511
2511
  if not response:
2512
2512
  return None # fallback to default error handler
2513
2513
  #
@@ -1236,7 +1236,7 @@ class yobit(Exchange, ImplicitAPI):
1236
1236
  }
1237
1237
  return {'url': url, 'method': method, 'body': body, 'headers': headers}
1238
1238
 
1239
- def handle_errors(self, httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody):
1239
+ def handle_errors(self, httpCode: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
1240
1240
  if response is None:
1241
1241
  return None # fallback to default error handler
1242
1242
  if 'success' in response:
@@ -174,7 +174,7 @@ class zaif(Exchange, ImplicitAPI):
174
174
  #
175
175
  return self.parse_markets(markets)
176
176
 
177
- def parse_market(self, market) -> Market:
177
+ def parse_market(self, market: dict) -> Market:
178
178
  id = self.safe_string(market, 'currency_pair')
179
179
  name = self.safe_string(market, 'name')
180
180
  baseId, quoteId = name.split('/')
@@ -679,7 +679,7 @@ class zaif(Exchange, ImplicitAPI):
679
679
  }
680
680
  return {'url': url, 'method': method, 'body': body, 'headers': headers}
681
681
 
682
- def handle_errors(self, httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody):
682
+ def handle_errors(self, httpCode: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
683
683
  if response is None:
684
684
  return None
685
685
  #
@@ -1766,7 +1766,7 @@ class zonda(Exchange, ImplicitAPI):
1766
1766
  }
1767
1767
  return {'url': url, 'method': method, 'body': body, 'headers': headers}
1768
1768
 
1769
- def handle_errors(self, httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody):
1769
+ def handle_errors(self, httpCode: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
1770
1770
  if response is None:
1771
1771
  return None # fallback to default error handler
1772
1772
  if 'code' in response:
ccxt/base/exchange.py CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.3.32'
7
+ __version__ = '4.3.34'
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
@@ -254,9 +254,11 @@ class Exchange(object):
254
254
  '511': AuthenticationError,
255
255
  }
256
256
  balance = None
257
+ liquidations = None
257
258
  orderbooks = None
258
259
  orders = None
259
260
  triggerOrders = None
261
+ myLiquidations = None
260
262
  myTrades = None
261
263
  trades = None
262
264
  transactions = None
@@ -390,6 +392,10 @@ class Exchange(object):
390
392
  'watchOrderBookForSymbols': None,
391
393
  'watchOHLCVForSymbols': None,
392
394
  'watchBalance': None,
395
+ 'watchLiquidations': None,
396
+ 'watchLiquidationsForSymbols': None,
397
+ 'watchMyLiquidations': None,
398
+ 'watchMyLiquidationsForSymbols': None,
393
399
  'watchOHLCV': None,
394
400
  }
395
401
  precisionMode = DECIMAL_PLACES
@@ -2125,6 +2131,22 @@ class Exchange(object):
2125
2131
  def fetch_trades_ws(self, symbol: str, since: Int = None, limit: Int = None, params={}):
2126
2132
  raise NotSupported(self.id + ' fetchTradesWs() is not supported yet')
2127
2133
 
2134
+ def watch_liquidations(self, symbol: str, since: Int = None, limit: Int = None, params={}):
2135
+ if self.has['watchLiquidationsForSymbols']:
2136
+ return self.watchLiquidationsForSymbols([symbol], since, limit, params)
2137
+ raise NotSupported(self.id + ' watchLiquidations() is not supported yet')
2138
+
2139
+ def watch_liquidations_for_symbols(self, symbols: List[str], since: Int = None, limit: Int = None, params={}):
2140
+ raise NotSupported(self.id + ' watchLiquidationsForSymbols() is not supported yet')
2141
+
2142
+ def watch_my_liquidations(self, symbol: str, since: Int = None, limit: Int = None, params={}):
2143
+ if self.has['watchMyLiquidationsForSymbols']:
2144
+ return self.watchMyLiquidationsForSymbols([symbol], since, limit, params)
2145
+ raise NotSupported(self.id + ' watchMyLiquidations() is not supported yet')
2146
+
2147
+ def watch_my_liquidations_for_symbols(self, symbols: List[str], since: Int = None, limit: Int = None, params={}):
2148
+ raise NotSupported(self.id + ' watchMyLiquidationsForSymbols() is not supported yet')
2149
+
2128
2150
  def watch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}):
2129
2151
  raise NotSupported(self.id + ' watchTrades() is not supported yet')
2130
2152
 
@@ -2179,7 +2201,7 @@ class Exchange(object):
2179
2201
  def fetch_trading_limits(self, symbols: Strings = None, params={}):
2180
2202
  raise NotSupported(self.id + ' fetchTradingLimits() is not supported yet')
2181
2203
 
2182
- def parse_market(self, market):
2204
+ def parse_market(self, market: dict):
2183
2205
  raise NotSupported(self.id + ' parseMarket() is not supported yet')
2184
2206
 
2185
2207
  def parse_markets(self, markets):
@@ -4105,7 +4127,7 @@ class Exchange(object):
4105
4127
  return key
4106
4128
  return None
4107
4129
 
4108
- def handle_errors(self, statusCode, statusText, url, method, responseHeaders, responseBody, response, requestHeaders, requestBody):
4130
+ def handle_errors(self, statusCode: int, statusText: str, url: str, method: str, responseHeaders: dict, responseBody: str, response, requestHeaders, requestBody):
4109
4131
  # it is a stub method that must be overrided in the derived exchange classes
4110
4132
  # raise NotSupported(self.id + ' handleErrors() not implemented yet')
4111
4133
  return None
ccxt/base/types.py CHANGED
@@ -139,7 +139,6 @@ class Position(TypedDict):
139
139
  stopLossPrice: Num
140
140
  takeProfitPrice: Num
141
141
 
142
-
143
142
  class OrderRequest(TypedDict):
144
143
  symbol: Str
145
144
  type: Str
ccxt/bigone.py CHANGED
@@ -1780,7 +1780,7 @@ class bigone(Exchange, ImplicitAPI):
1780
1780
  'info': response,
1781
1781
  }
1782
1782
 
1783
- def parse_transaction_status(self, status):
1783
+ def parse_transaction_status(self, status: Str):
1784
1784
  statuses: dict = {
1785
1785
  # what are other statuses here?
1786
1786
  'WITHHOLD': 'ok', # deposits
@@ -2094,7 +2094,7 @@ class bigone(Exchange, ImplicitAPI):
2094
2094
  data = self.safe_dict(response, 'data', {})
2095
2095
  return self.parse_transaction(data, currency)
2096
2096
 
2097
- def handle_errors(self, httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody):
2097
+ def handle_errors(self, httpCode: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
2098
2098
  if response is None:
2099
2099
  return None # fallback to default error handler
2100
2100
  #
ccxt/binance.py CHANGED
@@ -262,6 +262,7 @@ class binance(Exchange, ImplicitAPI):
262
262
  'system/status': 0.1,
263
263
  # these endpoints require self.apiKey
264
264
  'accountSnapshot': 240, # Weight(IP): 2400 => cost = 0.1 * 2400 = 240
265
+ 'account/info': 0.1,
265
266
  'margin/asset': 1, # Weight(IP): 10 => cost = 0.1 * 10 = 1
266
267
  'margin/pair': 1,
267
268
  'margin/allAssets': 0.1,
@@ -3042,7 +3043,7 @@ class binance(Exchange, ImplicitAPI):
3042
3043
  result.append(self.parse_market(markets[i]))
3043
3044
  return result
3044
3045
 
3045
- def parse_market(self, market) -> Market:
3046
+ def parse_market(self, market: dict) -> Market:
3046
3047
  swap = False
3047
3048
  future = False
3048
3049
  option = False
@@ -10224,7 +10225,7 @@ class binance(Exchange, ImplicitAPI):
10224
10225
  url += '?' + self.urlencode(params)
10225
10226
  return {'url': url, 'method': method, 'body': body, 'headers': headers}
10226
10227
 
10227
- def get_exceptions_by_url(self, url, exactOrBroad):
10228
+ def get_exceptions_by_url(self, url: str, exactOrBroad: str):
10228
10229
  marketType = None
10229
10230
  hostname = self.hostname if (self.hostname is not None) else 'binance.com'
10230
10231
  if url.startswith('https://api.' + hostname + '/'):
@@ -10242,7 +10243,7 @@ class binance(Exchange, ImplicitAPI):
10242
10243
  return self.safe_dict(exceptionsForMarketType, exactOrBroad, {})
10243
10244
  return {}
10244
10245
 
10245
- def handle_errors(self, code, reason, url, method, headers, body, response, requestHeaders, requestBody):
10246
+ def handle_errors(self, code: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
10246
10247
  if (code == 418) or (code == 429):
10247
10248
  raise DDoSProtection(self.id + ' ' + str(code) + ' ' + reason + ' ' + body)
10248
10249
  # error response in a form: {"code": -1013, "msg": "Invalid quantity."}
ccxt/bingx.py CHANGED
@@ -635,7 +635,7 @@ class bingx(Exchange, ImplicitAPI):
635
635
  markets = self.safe_list(response, 'data', [])
636
636
  return self.parse_markets(markets)
637
637
 
638
- def parse_market(self, market) -> Market:
638
+ def parse_market(self, market: dict) -> Market:
639
639
  id = self.safe_string(market, 'symbol')
640
640
  symbolParts = id.split('-')
641
641
  baseId = symbolParts[0]
@@ -4263,7 +4263,7 @@ class bingx(Exchange, ImplicitAPI):
4263
4263
  super(bingx, self).set_sandbox_mode(enable)
4264
4264
  self.options['sandboxMode'] = enable
4265
4265
 
4266
- def handle_errors(self, httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody):
4266
+ def handle_errors(self, httpCode: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
4267
4267
  if response is None:
4268
4268
  return None # fallback to default error handler
4269
4269
  #
ccxt/bit2c.py CHANGED
@@ -846,7 +846,7 @@ class bit2c(Exchange, ImplicitAPI):
846
846
  }
847
847
  return {'url': url, 'method': method, 'body': body, 'headers': headers}
848
848
 
849
- def handle_errors(self, httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody):
849
+ def handle_errors(self, httpCode: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
850
850
  if response is None:
851
851
  return None # fallback to default error handler
852
852
  #
ccxt/bitbank.py CHANGED
@@ -881,7 +881,7 @@ class bitbank(Exchange, ImplicitAPI):
881
881
  }
882
882
  return {'url': url, 'method': method, 'body': body, 'headers': headers}
883
883
 
884
- def handle_errors(self, httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody):
884
+ def handle_errors(self, httpCode: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
885
885
  if response is None:
886
886
  return None
887
887
  success = self.safe_integer(response, 'success')
ccxt/bitbns.py CHANGED
@@ -1135,7 +1135,7 @@ class bitbns(Exchange, ImplicitAPI):
1135
1135
  headers['Content-Type'] = 'application/x-www-form-urlencoded'
1136
1136
  return {'url': url, 'method': method, 'body': body, 'headers': headers}
1137
1137
 
1138
- def handle_errors(self, httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody):
1138
+ def handle_errors(self, httpCode: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
1139
1139
  if response is None:
1140
1140
  return None # fallback to default error handler
1141
1141
  #
ccxt/bitfinex.py CHANGED
@@ -1477,7 +1477,7 @@ class bitfinex(Exchange, ImplicitAPI):
1477
1477
  },
1478
1478
  }
1479
1479
 
1480
- def parse_transaction_status(self, status):
1480
+ def parse_transaction_status(self, status: Str):
1481
1481
  statuses: dict = {
1482
1482
  'SENDING': 'pending',
1483
1483
  'CANCELED': 'canceled',
@@ -1594,7 +1594,7 @@ class bitfinex(Exchange, ImplicitAPI):
1594
1594
  }
1595
1595
  return {'url': url, 'method': method, 'body': body, 'headers': headers}
1596
1596
 
1597
- def handle_errors(self, code, reason, url, method, headers, body, response, requestHeaders, requestBody):
1597
+ def handle_errors(self, code: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
1598
1598
  if response is None:
1599
1599
  return None
1600
1600
  throwError = False
ccxt/bitfinex2.py CHANGED
@@ -2146,7 +2146,7 @@ class bitfinex2(Exchange, ImplicitAPI):
2146
2146
  'info': response,
2147
2147
  }
2148
2148
 
2149
- def parse_transaction_status(self, status):
2149
+ def parse_transaction_status(self, status: Str):
2150
2150
  statuses: dict = {
2151
2151
  'SUCCESS': 'ok',
2152
2152
  'COMPLETED': 'ok',
ccxt/bitflyer.py CHANGED
@@ -982,7 +982,7 @@ class bitflyer(Exchange, ImplicitAPI):
982
982
  }
983
983
  return {'url': url, 'method': method, 'body': body, 'headers': headers}
984
984
 
985
- def handle_errors(self, code, reason, url, method, headers, body, response, requestHeaders, requestBody):
985
+ def handle_errors(self, code: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
986
986
  if response is None:
987
987
  return None # fallback to the default error handler
988
988
  feedback = self.id + ' ' + body
ccxt/bitget.py CHANGED
@@ -504,7 +504,7 @@ class bitget(Exchange, ImplicitAPI):
504
504
  'v2/mix/account/set-margin': 4,
505
505
  'v2/mix/account/set-margin-mode': 4,
506
506
  'v2/mix/account/set-position-mode': 4,
507
- 'v2/mix/order/place-order': 20,
507
+ 'v2/mix/order/place-order': 2,
508
508
  'v2/mix/order/click-backhand': 20,
509
509
  'v2/mix/order/batch-place-order': 20,
510
510
  'v2/mix/order/modify-order': 2,
@@ -1558,7 +1558,7 @@ class bitget(Exchange, ImplicitAPI):
1558
1558
  result = self.array_concat(result, promises[i])
1559
1559
  return result
1560
1560
 
1561
- def parse_market(self, market) -> Market:
1561
+ def parse_market(self, market: dict) -> Market:
1562
1562
  #
1563
1563
  # spot
1564
1564
  #
@@ -2377,7 +2377,7 @@ class bitget(Exchange, ImplicitAPI):
2377
2377
  'fee': fee,
2378
2378
  }
2379
2379
 
2380
- def parse_transaction_status(self, status):
2380
+ def parse_transaction_status(self, status: Str):
2381
2381
  statuses: dict = {
2382
2382
  'success': 'ok',
2383
2383
  'Pending': 'pending',
@@ -8181,7 +8181,7 @@ class bitget(Exchange, ImplicitAPI):
8181
8181
  }
8182
8182
  return result
8183
8183
 
8184
- def handle_errors(self, code, reason, url, method, headers, body, response, requestHeaders, requestBody):
8184
+ def handle_errors(self, code: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
8185
8185
  if not response:
8186
8186
  return None # fallback to default error handler
8187
8187
  #
ccxt/bithumb.py CHANGED
@@ -1031,7 +1031,7 @@ class bithumb(Exchange, ImplicitAPI):
1031
1031
  }
1032
1032
  return {'url': url, 'method': method, 'body': body, 'headers': headers}
1033
1033
 
1034
- def handle_errors(self, httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody):
1034
+ def handle_errors(self, httpCode: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
1035
1035
  if response is None:
1036
1036
  return None # fallback to default error handler
1037
1037
  if 'status' in response:
ccxt/bitmart.py CHANGED
@@ -3282,7 +3282,7 @@ class bitmart(Exchange, ImplicitAPI):
3282
3282
  """
3283
3283
  return self.fetch_transactions_by_type('withdraw', code, since, limit, params)
3284
3284
 
3285
- def parse_transaction_status(self, status):
3285
+ def parse_transaction_status(self, status: Str):
3286
3286
  statuses: dict = {
3287
3287
  '0': 'pending', # Create
3288
3288
  '1': 'pending', # Submitted, waiting for withdrawal
@@ -4297,7 +4297,7 @@ class bitmart(Exchange, ImplicitAPI):
4297
4297
  headers['X-BM-SIGN'] = signature
4298
4298
  return {'url': url, 'method': method, 'body': body, 'headers': headers}
4299
4299
 
4300
- def handle_errors(self, code, reason, url, method, headers, body, response, requestHeaders, requestBody):
4300
+ def handle_errors(self, code: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
4301
4301
  if response is None:
4302
4302
  return None
4303
4303
  #
ccxt/bitmex.py CHANGED
@@ -580,7 +580,7 @@ class bitmex(Exchange, ImplicitAPI):
580
580
  #
581
581
  return self.parse_markets(response)
582
582
 
583
- def parse_market(self, market) -> Market:
583
+ def parse_market(self, market: dict) -> Market:
584
584
  id = self.safe_string(market, 'symbol')
585
585
  baseId = self.safe_string(market, 'underlying')
586
586
  quoteId = self.safe_string(market, 'quoteCurrency')
@@ -1220,7 +1220,7 @@ class bitmex(Exchange, ImplicitAPI):
1220
1220
  transactions = self.filter_by_array(response, 'transactType', ['Withdrawal', 'Deposit'], False)
1221
1221
  return self.parse_transactions(transactions, currency, since, limit)
1222
1222
 
1223
- def parse_transaction_status(self, status):
1223
+ def parse_transaction_status(self, status: Str):
1224
1224
  statuses: dict = {
1225
1225
  'Confirmed': 'pending',
1226
1226
  'Canceled': 'canceled',
@@ -2705,7 +2705,7 @@ class bitmex(Exchange, ImplicitAPI):
2705
2705
  'datetime': None,
2706
2706
  })
2707
2707
 
2708
- def handle_errors(self, code, reason, url, method, headers, body, response, requestHeaders, requestBody):
2708
+ def handle_errors(self, code: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
2709
2709
  if response is None:
2710
2710
  return None
2711
2711
  if code == 429:
ccxt/bitopro.py CHANGED
@@ -316,7 +316,7 @@ class bitopro(Exchange, ImplicitAPI):
316
316
  #
317
317
  return self.parse_markets(markets)
318
318
 
319
- def parse_market(self, market) -> Market:
319
+ def parse_market(self, market: dict) -> Market:
320
320
  active = not self.safe_value(market, 'maintain')
321
321
  id = self.safe_string(market, 'pair')
322
322
  uppercaseId = id.upper()
@@ -1259,7 +1259,7 @@ class bitopro(Exchange, ImplicitAPI):
1259
1259
  #
1260
1260
  return self.parse_trades(trades, market, since, limit)
1261
1261
 
1262
- def parse_transaction_status(self, status):
1262
+ def parse_transaction_status(self, status: Str):
1263
1263
  states: dict = {
1264
1264
  'COMPLETE': 'ok',
1265
1265
  'INVALID': 'failed',
@@ -1618,7 +1618,7 @@ class bitopro(Exchange, ImplicitAPI):
1618
1618
  url = self.urls['api']['rest'] + url
1619
1619
  return {'url': url, 'method': method, 'body': body, 'headers': headers}
1620
1620
 
1621
- def handle_errors(self, code, reason, url, method, headers, body, response, requestHeaders, requestBody):
1621
+ def handle_errors(self, code: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
1622
1622
  if response is None:
1623
1623
  return None # fallback to the default error handler
1624
1624
  if code >= 200 and code < 300:
ccxt/bitrue.py CHANGED
@@ -809,7 +809,7 @@ class bitrue(Exchange, ImplicitAPI):
809
809
  self.load_time_difference()
810
810
  return self.parse_markets(markets)
811
811
 
812
- def parse_market(self, market) -> Market:
812
+ def parse_market(self, market: dict) -> Market:
813
813
  id = self.safe_string(market, 'symbol')
814
814
  lowercaseId = self.safe_string_lower(market, 'symbol')
815
815
  side = self.safe_integer(market, 'side') # 1 linear, 0 inverse, None spot
@@ -2961,7 +2961,7 @@ class bitrue(Exchange, ImplicitAPI):
2961
2961
  url += '?' + self.urlencode(params)
2962
2962
  return {'url': url, 'method': method, 'body': body, 'headers': headers}
2963
2963
 
2964
- def handle_errors(self, code, reason, url, method, headers, body, response, requestHeaders, requestBody):
2964
+ def handle_errors(self, code: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
2965
2965
  if (code == 418) or (code == 429):
2966
2966
  raise DDoSProtection(self.id + ' ' + str(code) + ' ' + reason + ' ' + body)
2967
2967
  # error response in a form: {"code": -1013, "msg": "Invalid quantity."}
ccxt/bitso.py CHANGED
@@ -1611,7 +1611,7 @@ class bitso(Exchange, ImplicitAPI):
1611
1611
  'info': transaction,
1612
1612
  }
1613
1613
 
1614
- def parse_transaction_status(self, status):
1614
+ def parse_transaction_status(self, status: Str):
1615
1615
  statuses: dict = {
1616
1616
  'pending': 'pending',
1617
1617
  'in_progress': 'pending',
@@ -1646,7 +1646,7 @@ class bitso(Exchange, ImplicitAPI):
1646
1646
  }
1647
1647
  return {'url': url, 'method': method, 'body': body, 'headers': headers}
1648
1648
 
1649
- def handle_errors(self, httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody):
1649
+ def handle_errors(self, httpCode: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
1650
1650
  if response is None:
1651
1651
  return None # fallback to default error handler
1652
1652
  if 'success' in response:
ccxt/bitstamp.py CHANGED
@@ -1689,7 +1689,7 @@ class bitstamp(Exchange, ImplicitAPI):
1689
1689
  'fee': fee,
1690
1690
  }
1691
1691
 
1692
- def parse_transaction_status(self, status):
1692
+ def parse_transaction_status(self, status: Str):
1693
1693
  #
1694
1694
  # withdrawals:
1695
1695
  # 0(open), 1(in process), 2(finished), 3(canceled) or 4(failed).
@@ -2109,7 +2109,7 @@ class bitstamp(Exchange, ImplicitAPI):
2109
2109
  headers['X-Auth-Signature'] = signature
2110
2110
  return {'url': url, 'method': method, 'body': body, 'headers': headers}
2111
2111
 
2112
- def handle_errors(self, httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody):
2112
+ def handle_errors(self, httpCode: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
2113
2113
  if response is None:
2114
2114
  return None
2115
2115
  #
ccxt/bitteam.py CHANGED
@@ -349,7 +349,7 @@ class bitteam(Exchange, ImplicitAPI):
349
349
  markets = self.safe_value(result, 'pairs', [])
350
350
  return self.parse_markets(markets)
351
351
 
352
- def parse_market(self, market) -> Market:
352
+ def parse_market(self, market: dict) -> Market:
353
353
  id = self.safe_string(market, 'name')
354
354
  numericId = self.safe_integer(market, 'id')
355
355
  parts = id.split('_')
@@ -2190,7 +2190,7 @@ class bitteam(Exchange, ImplicitAPI):
2190
2190
  }
2191
2191
  return self.safe_string(types, type, type)
2192
2192
 
2193
- def parse_transaction_status(self, status):
2193
+ def parse_transaction_status(self, status: Str):
2194
2194
  statuses: dict = {
2195
2195
  'approving': 'pending',
2196
2196
  'success': 'ok',
@@ -2219,7 +2219,7 @@ class bitteam(Exchange, ImplicitAPI):
2219
2219
  url += '?' + query
2220
2220
  return {'url': url, 'method': method, 'body': body, 'headers': headers}
2221
2221
 
2222
- def handle_errors(self, code, reason, url, method, headers, body, response, requestHeaders, requestBody):
2222
+ def handle_errors(self, code: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
2223
2223
  if response is None:
2224
2224
  return None
2225
2225
  if code != 200:
ccxt/bitvavo.py CHANGED
@@ -1751,7 +1751,7 @@ class bitvavo(Exchange, ImplicitAPI):
1751
1751
  #
1752
1752
  return self.parse_transactions(response, currency, since, limit, {'type': 'deposit'})
1753
1753
 
1754
- def parse_transaction_status(self, status):
1754
+ def parse_transaction_status(self, status: Str):
1755
1755
  statuses: dict = {
1756
1756
  'awaiting_processing': 'pending',
1757
1757
  'awaiting_email_confirmation': 'pending',
@@ -1945,7 +1945,7 @@ class bitvavo(Exchange, ImplicitAPI):
1945
1945
  url = self.urls['api'][api] + url
1946
1946
  return {'url': url, 'method': method, 'body': body, 'headers': headers}
1947
1947
 
1948
- def handle_errors(self, httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody):
1948
+ def handle_errors(self, httpCode: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
1949
1949
  if response is None:
1950
1950
  return None # fallback to default error handler
1951
1951
  #