ccxt 4.2.77__py2.py3-none-any.whl → 4.4.48__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 (546) hide show
  1. ccxt/__init__.py +36 -14
  2. ccxt/abstract/alpaca.py +4 -0
  3. ccxt/abstract/bigone.py +1 -1
  4. ccxt/abstract/binance.py +112 -48
  5. ccxt/abstract/binancecoinm.py +112 -48
  6. ccxt/abstract/binanceus.py +147 -83
  7. ccxt/abstract/binanceusdm.py +112 -48
  8. ccxt/abstract/bingx.py +133 -78
  9. ccxt/abstract/bitbank.py +5 -0
  10. ccxt/abstract/bitfinex.py +136 -65
  11. ccxt/abstract/bitfinex1.py +69 -0
  12. ccxt/abstract/bitflyer.py +1 -0
  13. ccxt/abstract/bitget.py +8 -1
  14. ccxt/abstract/bitmart.py +13 -1
  15. ccxt/abstract/bitopro.py +1 -0
  16. ccxt/abstract/bitpanda.py +0 -12
  17. ccxt/abstract/bitrue.py +3 -3
  18. ccxt/abstract/bitstamp.py +26 -3
  19. ccxt/abstract/blofin.py +24 -0
  20. ccxt/abstract/btcbox.py +1 -0
  21. ccxt/abstract/bybit.py +29 -14
  22. ccxt/abstract/cex.py +28 -29
  23. ccxt/abstract/coinbase.py +6 -0
  24. ccxt/abstract/coinbaseadvanced.py +94 -0
  25. ccxt/abstract/{coinbasepro.py → coinbaseexchange.py} +1 -0
  26. ccxt/abstract/coinbaseinternational.py +1 -1
  27. ccxt/abstract/coincatch.py +94 -0
  28. ccxt/abstract/coinex.py +233 -123
  29. ccxt/abstract/coinmetro.py +1 -0
  30. ccxt/abstract/cryptocom.py +14 -0
  31. ccxt/abstract/defx.py +69 -0
  32. ccxt/abstract/deribit.py +1 -0
  33. ccxt/abstract/digifinex.py +1 -0
  34. ccxt/abstract/ellipx.py +25 -0
  35. ccxt/abstract/gate.py +20 -0
  36. ccxt/abstract/gateio.py +20 -0
  37. ccxt/abstract/gemini.py +1 -0
  38. ccxt/abstract/hashkey.py +67 -0
  39. ccxt/abstract/hyperliquid.py +1 -1
  40. ccxt/abstract/independentreserve.py +6 -0
  41. ccxt/abstract/kraken.py +4 -3
  42. ccxt/abstract/krakenfutures.py +4 -0
  43. ccxt/abstract/kucoin.py +24 -0
  44. ccxt/abstract/kucoinfutures.py +34 -0
  45. ccxt/abstract/luno.py +2 -0
  46. ccxt/abstract/mexc.py +4 -0
  47. ccxt/abstract/myokx.py +340 -0
  48. ccxt/abstract/oceanex.py +5 -0
  49. ccxt/abstract/okx.py +30 -0
  50. ccxt/abstract/onetrading.py +0 -12
  51. ccxt/abstract/oxfun.py +34 -0
  52. ccxt/abstract/paradex.py +40 -0
  53. ccxt/abstract/phemex.py +1 -0
  54. ccxt/abstract/upbit.py +4 -0
  55. ccxt/abstract/vertex.py +19 -0
  56. ccxt/abstract/whitebit.py +31 -1
  57. ccxt/abstract/woo.py +6 -2
  58. ccxt/abstract/woofipro.py +119 -0
  59. ccxt/abstract/xt.py +153 -0
  60. ccxt/abstract/zonda.py +6 -0
  61. ccxt/ace.py +164 -60
  62. ccxt/alpaca.py +727 -63
  63. ccxt/ascendex.py +395 -249
  64. ccxt/async_support/__init__.py +36 -14
  65. ccxt/async_support/ace.py +164 -60
  66. ccxt/async_support/alpaca.py +727 -63
  67. ccxt/async_support/ascendex.py +396 -249
  68. ccxt/async_support/base/exchange.py +531 -155
  69. ccxt/async_support/base/ws/aiohttp_client.py +28 -5
  70. ccxt/async_support/base/ws/cache.py +3 -2
  71. ccxt/async_support/base/ws/client.py +26 -5
  72. ccxt/async_support/base/ws/fast_client.py +4 -3
  73. ccxt/async_support/base/ws/functions.py +1 -1
  74. ccxt/async_support/base/ws/future.py +40 -31
  75. ccxt/async_support/base/ws/order_book_side.py +3 -0
  76. ccxt/async_support/bequant.py +1 -1
  77. ccxt/async_support/bigone.py +329 -202
  78. ccxt/async_support/binance.py +3030 -1087
  79. ccxt/async_support/binancecoinm.py +2 -1
  80. ccxt/async_support/binanceus.py +12 -1
  81. ccxt/async_support/binanceusdm.py +3 -1
  82. ccxt/async_support/bingx.py +3104 -880
  83. ccxt/async_support/bit2c.py +119 -38
  84. ccxt/async_support/bitbank.py +215 -76
  85. ccxt/async_support/bitbns.py +124 -53
  86. ccxt/async_support/bitfinex.py +3236 -1078
  87. ccxt/async_support/bitfinex1.py +1711 -0
  88. ccxt/async_support/bitflyer.py +238 -49
  89. ccxt/async_support/bitget.py +1513 -563
  90. ccxt/async_support/bithumb.py +199 -65
  91. ccxt/async_support/bitmart.py +1320 -435
  92. ccxt/async_support/bitmex.py +308 -111
  93. ccxt/async_support/bitopro.py +256 -96
  94. ccxt/async_support/bitrue.py +365 -233
  95. ccxt/async_support/bitso.py +201 -89
  96. ccxt/async_support/bitstamp.py +438 -269
  97. ccxt/async_support/bitteam.py +179 -73
  98. ccxt/async_support/bitvavo.py +180 -70
  99. ccxt/async_support/bl3p.py +92 -25
  100. ccxt/async_support/blockchaincom.py +193 -79
  101. ccxt/async_support/blofin.py +392 -148
  102. ccxt/async_support/btcalpha.py +161 -55
  103. ccxt/async_support/btcbox.py +250 -34
  104. ccxt/async_support/btcmarkets.py +232 -85
  105. ccxt/async_support/btcturk.py +159 -60
  106. ccxt/async_support/bybit.py +2231 -1193
  107. ccxt/async_support/cex.py +1409 -1329
  108. ccxt/async_support/coinbase.py +1454 -287
  109. ccxt/async_support/coinbaseadvanced.py +17 -0
  110. ccxt/async_support/{coinbasepro.py → coinbaseexchange.py} +233 -99
  111. ccxt/async_support/coinbaseinternational.py +428 -88
  112. ccxt/async_support/coincatch.py +5152 -0
  113. ccxt/async_support/coincheck.py +121 -38
  114. ccxt/async_support/coinex.py +4020 -3339
  115. ccxt/async_support/coinlist.py +273 -116
  116. ccxt/async_support/coinmate.py +204 -97
  117. ccxt/async_support/coinmetro.py +203 -110
  118. ccxt/async_support/coinone.py +142 -68
  119. ccxt/async_support/coinsph.py +206 -89
  120. ccxt/async_support/coinspot.py +137 -62
  121. ccxt/async_support/cryptocom.py +515 -185
  122. ccxt/async_support/currencycom.py +203 -85
  123. ccxt/async_support/defx.py +2066 -0
  124. ccxt/async_support/delta.py +404 -109
  125. ccxt/async_support/deribit.py +557 -323
  126. ccxt/async_support/digifinex.py +340 -223
  127. ccxt/async_support/ellipx.py +1826 -0
  128. ccxt/async_support/exmo.py +259 -128
  129. ccxt/async_support/gate.py +1472 -463
  130. ccxt/async_support/gemini.py +206 -84
  131. ccxt/async_support/hashkey.py +4164 -0
  132. ccxt/async_support/hitbtc.py +334 -178
  133. ccxt/async_support/hollaex.py +134 -83
  134. ccxt/async_support/htx.py +1095 -563
  135. ccxt/async_support/huobijp.py +105 -56
  136. ccxt/async_support/hyperliquid.py +1633 -268
  137. ccxt/async_support/idex.py +148 -95
  138. ccxt/async_support/independentreserve.py +236 -31
  139. ccxt/async_support/indodax.py +165 -62
  140. ccxt/async_support/kraken.py +871 -354
  141. ccxt/async_support/krakenfutures.py +324 -100
  142. ccxt/async_support/kucoin.py +917 -357
  143. ccxt/async_support/kucoinfutures.py +1004 -149
  144. ccxt/async_support/kuna.py +138 -106
  145. ccxt/async_support/latoken.py +135 -79
  146. ccxt/async_support/lbank.py +290 -113
  147. ccxt/async_support/luno.py +112 -62
  148. ccxt/async_support/lykke.py +104 -55
  149. ccxt/async_support/mercado.py +36 -29
  150. ccxt/async_support/mexc.py +995 -429
  151. ccxt/async_support/myokx.py +43 -0
  152. ccxt/async_support/ndax.py +163 -82
  153. ccxt/async_support/novadax.py +121 -75
  154. ccxt/async_support/oceanex.py +175 -59
  155. ccxt/async_support/okcoin.py +222 -163
  156. ccxt/async_support/okx.py +1776 -454
  157. ccxt/async_support/onetrading.py +132 -414
  158. ccxt/async_support/oxfun.py +2832 -0
  159. ccxt/async_support/p2b.py +79 -51
  160. ccxt/async_support/paradex.py +2017 -0
  161. ccxt/async_support/paymium.py +56 -32
  162. ccxt/async_support/phemex.py +572 -196
  163. ccxt/async_support/poloniex.py +218 -95
  164. ccxt/async_support/poloniexfutures.py +260 -92
  165. ccxt/async_support/probit.py +143 -110
  166. ccxt/async_support/timex.py +123 -70
  167. ccxt/async_support/tokocrypto.py +129 -93
  168. ccxt/async_support/tradeogre.py +39 -25
  169. ccxt/async_support/upbit.py +322 -113
  170. ccxt/async_support/vertex.py +2983 -0
  171. ccxt/async_support/wavesexchange.py +227 -173
  172. ccxt/async_support/wazirx.py +145 -65
  173. ccxt/async_support/whitebit.py +533 -138
  174. ccxt/async_support/woo.py +1137 -296
  175. ccxt/async_support/woofipro.py +2716 -0
  176. ccxt/async_support/xt.py +4628 -0
  177. ccxt/async_support/yobit.py +160 -92
  178. ccxt/async_support/zaif.py +80 -33
  179. ccxt/async_support/zonda.py +140 -69
  180. ccxt/base/errors.py +51 -20
  181. ccxt/base/exchange.py +1722 -480
  182. ccxt/base/precise.py +10 -0
  183. ccxt/base/types.py +223 -4
  184. ccxt/bequant.py +1 -1
  185. ccxt/bigone.py +329 -202
  186. ccxt/binance.py +3030 -1087
  187. ccxt/binancecoinm.py +2 -1
  188. ccxt/binanceus.py +12 -1
  189. ccxt/binanceusdm.py +3 -1
  190. ccxt/bingx.py +3104 -880
  191. ccxt/bit2c.py +119 -38
  192. ccxt/bitbank.py +215 -76
  193. ccxt/bitbns.py +124 -53
  194. ccxt/bitfinex.py +3235 -1078
  195. ccxt/bitfinex1.py +1710 -0
  196. ccxt/bitflyer.py +238 -49
  197. ccxt/bitget.py +1513 -563
  198. ccxt/bithumb.py +198 -65
  199. ccxt/bitmart.py +1320 -435
  200. ccxt/bitmex.py +308 -111
  201. ccxt/bitopro.py +256 -96
  202. ccxt/bitrue.py +365 -233
  203. ccxt/bitso.py +201 -89
  204. ccxt/bitstamp.py +438 -269
  205. ccxt/bitteam.py +179 -73
  206. ccxt/bitvavo.py +180 -70
  207. ccxt/bl3p.py +92 -25
  208. ccxt/blockchaincom.py +193 -79
  209. ccxt/blofin.py +392 -148
  210. ccxt/btcalpha.py +161 -55
  211. ccxt/btcbox.py +250 -34
  212. ccxt/btcmarkets.py +232 -85
  213. ccxt/btcturk.py +159 -60
  214. ccxt/bybit.py +2231 -1193
  215. ccxt/cex.py +1408 -1329
  216. ccxt/coinbase.py +1454 -287
  217. ccxt/coinbaseadvanced.py +17 -0
  218. ccxt/{coinbasepro.py → coinbaseexchange.py} +233 -99
  219. ccxt/coinbaseinternational.py +428 -88
  220. ccxt/coincatch.py +5152 -0
  221. ccxt/coincheck.py +121 -38
  222. ccxt/coinex.py +4020 -3339
  223. ccxt/coinlist.py +273 -116
  224. ccxt/coinmate.py +204 -97
  225. ccxt/coinmetro.py +203 -110
  226. ccxt/coinone.py +142 -68
  227. ccxt/coinsph.py +206 -89
  228. ccxt/coinspot.py +137 -62
  229. ccxt/cryptocom.py +515 -185
  230. ccxt/currencycom.py +203 -85
  231. ccxt/defx.py +2065 -0
  232. ccxt/delta.py +404 -109
  233. ccxt/deribit.py +557 -323
  234. ccxt/digifinex.py +340 -223
  235. ccxt/ellipx.py +1826 -0
  236. ccxt/exmo.py +259 -128
  237. ccxt/gate.py +1472 -463
  238. ccxt/gemini.py +206 -84
  239. ccxt/hashkey.py +4164 -0
  240. ccxt/hitbtc.py +334 -178
  241. ccxt/hollaex.py +134 -83
  242. ccxt/htx.py +1095 -563
  243. ccxt/huobijp.py +105 -56
  244. ccxt/hyperliquid.py +1632 -268
  245. ccxt/idex.py +148 -95
  246. ccxt/independentreserve.py +235 -31
  247. ccxt/indodax.py +165 -62
  248. ccxt/kraken.py +871 -354
  249. ccxt/krakenfutures.py +324 -100
  250. ccxt/kucoin.py +917 -357
  251. ccxt/kucoinfutures.py +1004 -149
  252. ccxt/kuna.py +138 -106
  253. ccxt/latoken.py +135 -79
  254. ccxt/lbank.py +290 -113
  255. ccxt/luno.py +112 -62
  256. ccxt/lykke.py +104 -55
  257. ccxt/mercado.py +36 -29
  258. ccxt/mexc.py +994 -429
  259. ccxt/myokx.py +43 -0
  260. ccxt/ndax.py +163 -82
  261. ccxt/novadax.py +121 -75
  262. ccxt/oceanex.py +175 -59
  263. ccxt/okcoin.py +222 -163
  264. ccxt/okx.py +1776 -454
  265. ccxt/onetrading.py +132 -414
  266. ccxt/oxfun.py +2831 -0
  267. ccxt/p2b.py +79 -51
  268. ccxt/paradex.py +2017 -0
  269. ccxt/paymium.py +56 -32
  270. ccxt/phemex.py +572 -196
  271. ccxt/poloniex.py +218 -95
  272. ccxt/poloniexfutures.py +260 -92
  273. ccxt/pro/__init__.py +29 -5
  274. ccxt/pro/alpaca.py +32 -17
  275. ccxt/pro/ascendex.py +62 -14
  276. ccxt/pro/bequant.py +4 -0
  277. ccxt/pro/binance.py +1596 -329
  278. ccxt/pro/binancecoinm.py +1 -0
  279. ccxt/pro/binanceus.py +2 -9
  280. ccxt/pro/binanceusdm.py +2 -0
  281. ccxt/pro/bingx.py +527 -134
  282. ccxt/pro/bitcoincom.py +4 -1
  283. ccxt/pro/bitfinex.py +731 -266
  284. ccxt/pro/bitfinex1.py +635 -0
  285. ccxt/pro/bitget.py +726 -357
  286. ccxt/pro/bithumb.py +380 -0
  287. ccxt/pro/bitmart.py +138 -39
  288. ccxt/pro/bitmex.py +199 -40
  289. ccxt/pro/bitopro.py +25 -13
  290. ccxt/pro/bitrue.py +31 -32
  291. ccxt/pro/bitstamp.py +7 -6
  292. ccxt/pro/bitvavo.py +203 -81
  293. ccxt/pro/blockchaincom.py +30 -17
  294. ccxt/pro/blofin.py +692 -0
  295. ccxt/pro/bybit.py +791 -82
  296. ccxt/pro/cex.py +99 -51
  297. ccxt/pro/coinbase.py +220 -30
  298. ccxt/{async_support/hitbtc3.py → pro/coinbaseadvanced.py} +5 -5
  299. ccxt/pro/{coinbasepro.py → coinbaseexchange.py} +19 -19
  300. ccxt/pro/coinbaseinternational.py +193 -30
  301. ccxt/pro/coincatch.py +1464 -0
  302. ccxt/pro/coincheck.py +11 -6
  303. ccxt/pro/coinex.py +965 -665
  304. ccxt/pro/coinone.py +17 -10
  305. ccxt/pro/cryptocom.py +446 -66
  306. ccxt/pro/currencycom.py +11 -10
  307. ccxt/pro/defx.py +832 -0
  308. ccxt/pro/deribit.py +167 -31
  309. ccxt/pro/exmo.py +252 -20
  310. ccxt/pro/gate.py +729 -64
  311. ccxt/pro/gemini.py +44 -26
  312. ccxt/pro/hashkey.py +802 -0
  313. ccxt/pro/hitbtc.py +208 -103
  314. ccxt/pro/hollaex.py +25 -9
  315. ccxt/pro/htx.py +83 -39
  316. ccxt/pro/huobijp.py +17 -16
  317. ccxt/pro/hyperliquid.py +502 -31
  318. ccxt/pro/idex.py +28 -13
  319. ccxt/pro/independentreserve.py +21 -16
  320. ccxt/pro/kraken.py +298 -51
  321. ccxt/pro/krakenfutures.py +166 -75
  322. ccxt/pro/kucoin.py +395 -77
  323. ccxt/pro/kucoinfutures.py +400 -99
  324. ccxt/pro/lbank.py +52 -31
  325. ccxt/pro/luno.py +12 -10
  326. ccxt/pro/mexc.py +400 -50
  327. ccxt/pro/myokx.py +28 -0
  328. ccxt/pro/ndax.py +25 -12
  329. ccxt/pro/okcoin.py +28 -9
  330. ccxt/pro/okx.py +935 -124
  331. ccxt/pro/onetrading.py +41 -24
  332. ccxt/pro/oxfun.py +1054 -0
  333. ccxt/pro/p2b.py +100 -24
  334. ccxt/pro/paradex.py +352 -0
  335. ccxt/pro/phemex.py +92 -33
  336. ccxt/pro/poloniex.py +128 -49
  337. ccxt/pro/poloniexfutures.py +53 -32
  338. ccxt/pro/probit.py +92 -85
  339. ccxt/pro/upbit.py +401 -8
  340. ccxt/pro/vertex.py +943 -0
  341. ccxt/pro/wazirx.py +46 -28
  342. ccxt/pro/whitebit.py +65 -12
  343. ccxt/pro/woo.py +437 -65
  344. ccxt/pro/woofipro.py +1271 -0
  345. ccxt/pro/xt.py +1067 -0
  346. ccxt/probit.py +143 -110
  347. ccxt/static_dependencies/__init__.py +1 -1
  348. ccxt/static_dependencies/lark/__init__.py +38 -0
  349. ccxt/static_dependencies/lark/__pyinstaller/__init__.py +6 -0
  350. ccxt/static_dependencies/lark/__pyinstaller/hook-lark.py +14 -0
  351. ccxt/static_dependencies/lark/ast_utils.py +59 -0
  352. ccxt/static_dependencies/lark/common.py +86 -0
  353. ccxt/static_dependencies/lark/exceptions.py +292 -0
  354. ccxt/static_dependencies/lark/grammar.py +130 -0
  355. ccxt/static_dependencies/lark/grammars/__init__.py +0 -0
  356. ccxt/static_dependencies/lark/indenter.py +143 -0
  357. ccxt/static_dependencies/lark/lark.py +658 -0
  358. ccxt/static_dependencies/lark/lexer.py +678 -0
  359. ccxt/static_dependencies/lark/load_grammar.py +1428 -0
  360. ccxt/static_dependencies/lark/parse_tree_builder.py +391 -0
  361. ccxt/static_dependencies/lark/parser_frontends.py +257 -0
  362. ccxt/static_dependencies/lark/parsers/__init__.py +0 -0
  363. ccxt/static_dependencies/lark/parsers/cyk.py +340 -0
  364. ccxt/static_dependencies/lark/parsers/earley.py +314 -0
  365. ccxt/static_dependencies/lark/parsers/earley_common.py +42 -0
  366. ccxt/static_dependencies/lark/parsers/earley_forest.py +801 -0
  367. ccxt/static_dependencies/lark/parsers/grammar_analysis.py +203 -0
  368. ccxt/static_dependencies/lark/parsers/lalr_analysis.py +332 -0
  369. ccxt/static_dependencies/lark/parsers/lalr_interactive_parser.py +158 -0
  370. ccxt/static_dependencies/lark/parsers/lalr_parser.py +122 -0
  371. ccxt/static_dependencies/lark/parsers/lalr_parser_state.py +110 -0
  372. ccxt/static_dependencies/lark/parsers/xearley.py +165 -0
  373. ccxt/static_dependencies/lark/py.typed +0 -0
  374. ccxt/static_dependencies/lark/reconstruct.py +107 -0
  375. ccxt/static_dependencies/lark/tools/__init__.py +70 -0
  376. ccxt/static_dependencies/lark/tools/nearley.py +202 -0
  377. ccxt/static_dependencies/lark/tools/serialize.py +32 -0
  378. ccxt/static_dependencies/lark/tools/standalone.py +196 -0
  379. ccxt/static_dependencies/lark/tree.py +267 -0
  380. ccxt/static_dependencies/lark/tree_matcher.py +186 -0
  381. ccxt/static_dependencies/lark/tree_templates.py +180 -0
  382. ccxt/static_dependencies/lark/utils.py +343 -0
  383. ccxt/static_dependencies/lark/visitors.py +596 -0
  384. ccxt/static_dependencies/marshmallow/__init__.py +81 -0
  385. ccxt/static_dependencies/marshmallow/base.py +65 -0
  386. ccxt/static_dependencies/marshmallow/class_registry.py +94 -0
  387. ccxt/static_dependencies/marshmallow/decorators.py +231 -0
  388. ccxt/static_dependencies/marshmallow/error_store.py +60 -0
  389. ccxt/static_dependencies/marshmallow/exceptions.py +71 -0
  390. ccxt/static_dependencies/marshmallow/fields.py +2114 -0
  391. ccxt/static_dependencies/marshmallow/orderedset.py +89 -0
  392. ccxt/static_dependencies/marshmallow/py.typed +0 -0
  393. ccxt/static_dependencies/marshmallow/schema.py +1228 -0
  394. ccxt/static_dependencies/marshmallow/types.py +12 -0
  395. ccxt/static_dependencies/marshmallow/utils.py +378 -0
  396. ccxt/static_dependencies/marshmallow/validate.py +678 -0
  397. ccxt/static_dependencies/marshmallow/warnings.py +2 -0
  398. ccxt/static_dependencies/marshmallow_dataclass/__init__.py +1047 -0
  399. ccxt/static_dependencies/marshmallow_dataclass/collection_field.py +51 -0
  400. ccxt/static_dependencies/marshmallow_dataclass/lazy_class_attribute.py +45 -0
  401. ccxt/static_dependencies/marshmallow_dataclass/mypy.py +71 -0
  402. ccxt/static_dependencies/marshmallow_dataclass/py.typed +0 -0
  403. ccxt/static_dependencies/marshmallow_dataclass/typing.py +14 -0
  404. ccxt/static_dependencies/marshmallow_dataclass/union_field.py +82 -0
  405. ccxt/static_dependencies/marshmallow_oneofschema/__init__.py +1 -0
  406. ccxt/static_dependencies/marshmallow_oneofschema/one_of_schema.py +193 -0
  407. ccxt/static_dependencies/marshmallow_oneofschema/py.typed +0 -0
  408. ccxt/static_dependencies/starknet/__init__.py +0 -0
  409. ccxt/static_dependencies/starknet/cairo/__init__.py +0 -0
  410. ccxt/static_dependencies/starknet/cairo/data_types.py +123 -0
  411. ccxt/static_dependencies/starknet/cairo/deprecated_parse/__init__.py +0 -0
  412. ccxt/static_dependencies/starknet/cairo/deprecated_parse/cairo_types.py +77 -0
  413. ccxt/static_dependencies/starknet/cairo/deprecated_parse/parser.py +46 -0
  414. ccxt/static_dependencies/starknet/cairo/deprecated_parse/parser_transformer.py +138 -0
  415. ccxt/static_dependencies/starknet/cairo/felt.py +64 -0
  416. ccxt/static_dependencies/starknet/cairo/type_parser.py +121 -0
  417. ccxt/static_dependencies/starknet/cairo/v1/__init__.py +0 -0
  418. ccxt/static_dependencies/starknet/cairo/v1/type_parser.py +59 -0
  419. ccxt/static_dependencies/starknet/cairo/v2/__init__.py +0 -0
  420. ccxt/static_dependencies/starknet/cairo/v2/type_parser.py +77 -0
  421. ccxt/static_dependencies/starknet/ccxt_utils.py +7 -0
  422. ccxt/static_dependencies/starknet/common.py +15 -0
  423. ccxt/static_dependencies/starknet/constants.py +39 -0
  424. ccxt/static_dependencies/starknet/hash/__init__.py +0 -0
  425. ccxt/static_dependencies/starknet/hash/address.py +79 -0
  426. ccxt/static_dependencies/starknet/hash/compiled_class_hash_objects.py +111 -0
  427. ccxt/static_dependencies/starknet/hash/selector.py +16 -0
  428. ccxt/static_dependencies/starknet/hash/storage.py +12 -0
  429. ccxt/static_dependencies/starknet/hash/utils.py +78 -0
  430. ccxt/static_dependencies/starknet/models/__init__.py +0 -0
  431. ccxt/static_dependencies/starknet/models/typed_data.py +45 -0
  432. ccxt/static_dependencies/starknet/serialization/__init__.py +24 -0
  433. ccxt/static_dependencies/starknet/serialization/_calldata_reader.py +40 -0
  434. ccxt/static_dependencies/starknet/serialization/_context.py +142 -0
  435. ccxt/static_dependencies/starknet/serialization/data_serializers/__init__.py +10 -0
  436. ccxt/static_dependencies/starknet/serialization/data_serializers/_common.py +82 -0
  437. ccxt/static_dependencies/starknet/serialization/data_serializers/array_serializer.py +43 -0
  438. ccxt/static_dependencies/starknet/serialization/data_serializers/bool_serializer.py +37 -0
  439. ccxt/static_dependencies/starknet/serialization/data_serializers/byte_array_serializer.py +66 -0
  440. ccxt/static_dependencies/starknet/serialization/data_serializers/cairo_data_serializer.py +71 -0
  441. ccxt/static_dependencies/starknet/serialization/data_serializers/enum_serializer.py +71 -0
  442. ccxt/static_dependencies/starknet/serialization/data_serializers/felt_serializer.py +50 -0
  443. ccxt/static_dependencies/starknet/serialization/data_serializers/named_tuple_serializer.py +58 -0
  444. ccxt/static_dependencies/starknet/serialization/data_serializers/option_serializer.py +43 -0
  445. ccxt/static_dependencies/starknet/serialization/data_serializers/output_serializer.py +40 -0
  446. ccxt/static_dependencies/starknet/serialization/data_serializers/payload_serializer.py +72 -0
  447. ccxt/static_dependencies/starknet/serialization/data_serializers/struct_serializer.py +36 -0
  448. ccxt/static_dependencies/starknet/serialization/data_serializers/tuple_serializer.py +36 -0
  449. ccxt/static_dependencies/starknet/serialization/data_serializers/uint256_serializer.py +76 -0
  450. ccxt/static_dependencies/starknet/serialization/data_serializers/uint_serializer.py +100 -0
  451. ccxt/static_dependencies/starknet/serialization/data_serializers/unit_serializer.py +32 -0
  452. ccxt/static_dependencies/starknet/serialization/errors.py +10 -0
  453. ccxt/static_dependencies/starknet/serialization/factory.py +229 -0
  454. ccxt/static_dependencies/starknet/serialization/function_serialization_adapter.py +110 -0
  455. ccxt/static_dependencies/starknet/serialization/tuple_dataclass.py +59 -0
  456. ccxt/static_dependencies/starknet/utils/__init__.py +0 -0
  457. ccxt/static_dependencies/starknet/utils/constructor_args_translator.py +86 -0
  458. ccxt/static_dependencies/starknet/utils/iterable.py +13 -0
  459. ccxt/static_dependencies/starknet/utils/schema.py +13 -0
  460. ccxt/static_dependencies/starknet/utils/typed_data.py +182 -0
  461. ccxt/static_dependencies/starkware/__init__.py +0 -0
  462. ccxt/static_dependencies/starkware/crypto/__init__.py +0 -0
  463. ccxt/static_dependencies/starkware/crypto/fast_pedersen_hash.py +50 -0
  464. ccxt/static_dependencies/starkware/crypto/math_utils.py +78 -0
  465. ccxt/static_dependencies/starkware/crypto/signature.py +2344 -0
  466. ccxt/static_dependencies/starkware/crypto/utils.py +63 -0
  467. ccxt/static_dependencies/sympy/__init__.py +0 -0
  468. ccxt/static_dependencies/sympy/core/__init__.py +0 -0
  469. ccxt/static_dependencies/sympy/core/intfunc.py +35 -0
  470. ccxt/static_dependencies/sympy/external/__init__.py +0 -0
  471. ccxt/static_dependencies/sympy/external/gmpy.py +345 -0
  472. ccxt/static_dependencies/sympy/external/importtools.py +187 -0
  473. ccxt/static_dependencies/sympy/external/ntheory.py +637 -0
  474. ccxt/static_dependencies/sympy/external/pythonmpq.py +341 -0
  475. ccxt/static_dependencies/typing_inspect/__init__.py +0 -0
  476. ccxt/static_dependencies/typing_inspect/typing_inspect.py +851 -0
  477. ccxt/test/{test_async.py → tests_async.py} +456 -391
  478. ccxt/test/tests_helpers.py +285 -0
  479. ccxt/test/tests_init.py +39 -0
  480. ccxt/test/{test_sync.py → tests_sync.py} +456 -393
  481. ccxt/timex.py +123 -70
  482. ccxt/tokocrypto.py +129 -93
  483. ccxt/tradeogre.py +39 -25
  484. ccxt/upbit.py +322 -113
  485. ccxt/vertex.py +2983 -0
  486. ccxt/wavesexchange.py +227 -173
  487. ccxt/wazirx.py +145 -65
  488. ccxt/whitebit.py +533 -138
  489. ccxt/woo.py +1137 -296
  490. ccxt/woofipro.py +2716 -0
  491. ccxt/xt.py +4627 -0
  492. ccxt/yobit.py +159 -92
  493. ccxt/zaif.py +80 -33
  494. ccxt/zonda.py +140 -69
  495. ccxt-4.4.48.dist-info/LICENSE.txt +21 -0
  496. ccxt-4.4.48.dist-info/METADATA +646 -0
  497. ccxt-4.4.48.dist-info/RECORD +669 -0
  498. {ccxt-4.2.77.dist-info → ccxt-4.4.48.dist-info}/WHEEL +1 -1
  499. ccxt/abstract/bitbay.py +0 -47
  500. ccxt/abstract/bitfinex2.py +0 -139
  501. ccxt/abstract/hitbtc3.py +0 -115
  502. ccxt/async_support/bitbay.py +0 -17
  503. ccxt/async_support/bitfinex2.py +0 -3496
  504. ccxt/async_support/flowbtc.py +0 -34
  505. ccxt/bitbay.py +0 -17
  506. ccxt/bitfinex2.py +0 -3496
  507. ccxt/flowbtc.py +0 -34
  508. ccxt/hitbtc3.py +0 -16
  509. ccxt/pro/bitfinex2.py +0 -1081
  510. ccxt/test/base/__init__.py +0 -28
  511. ccxt/test/base/test_account.py +0 -26
  512. ccxt/test/base/test_balance.py +0 -56
  513. ccxt/test/base/test_borrow_interest.py +0 -35
  514. ccxt/test/base/test_borrow_rate.py +0 -32
  515. ccxt/test/base/test_calculate_fee.py +0 -51
  516. ccxt/test/base/test_crypto.py +0 -127
  517. ccxt/test/base/test_currency.py +0 -76
  518. ccxt/test/base/test_datetime.py +0 -103
  519. ccxt/test/base/test_decimal_to_precision.py +0 -392
  520. ccxt/test/base/test_deep_extend.py +0 -68
  521. ccxt/test/base/test_deposit_withdrawal.py +0 -50
  522. ccxt/test/base/test_exchange_datetime_functions.py +0 -76
  523. ccxt/test/base/test_funding_rate_history.py +0 -29
  524. ccxt/test/base/test_last_price.py +0 -32
  525. ccxt/test/base/test_ledger_entry.py +0 -45
  526. ccxt/test/base/test_ledger_item.py +0 -48
  527. ccxt/test/base/test_leverage_tier.py +0 -33
  528. ccxt/test/base/test_margin_mode.py +0 -24
  529. ccxt/test/base/test_margin_modification.py +0 -35
  530. ccxt/test/base/test_market.py +0 -190
  531. ccxt/test/base/test_number.py +0 -411
  532. ccxt/test/base/test_ohlcv.py +0 -32
  533. ccxt/test/base/test_open_interest.py +0 -32
  534. ccxt/test/base/test_order.py +0 -64
  535. ccxt/test/base/test_order_book.py +0 -63
  536. ccxt/test/base/test_position.py +0 -60
  537. ccxt/test/base/test_shared_methods.py +0 -345
  538. ccxt/test/base/test_status.py +0 -24
  539. ccxt/test/base/test_throttle.py +0 -126
  540. ccxt/test/base/test_ticker.py +0 -86
  541. ccxt/test/base/test_trade.py +0 -47
  542. ccxt/test/base/test_trading_fee.py +0 -26
  543. ccxt/test/base/test_transaction.py +0 -39
  544. ccxt-4.2.77.dist-info/METADATA +0 -626
  545. ccxt-4.2.77.dist-info/RECORD +0 -534
  546. {ccxt-4.2.77.dist-info → ccxt-4.4.48.dist-info}/top_level.txt +0 -0
ccxt/probit.py CHANGED
@@ -6,20 +6,21 @@
6
6
  from ccxt.base.exchange import Exchange
7
7
  from ccxt.abstract.probit import ImplicitAPI
8
8
  import math
9
- from ccxt.base.types import Balances, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction
9
+ from ccxt.base.types import Balances, Currencies, Currency, DepositAddress, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction
10
10
  from typing import List
11
11
  from ccxt.base.errors import ExchangeError
12
+ from ccxt.base.errors import AuthenticationError
12
13
  from ccxt.base.errors import ArgumentsRequired
13
14
  from ccxt.base.errors import BadRequest
14
15
  from ccxt.base.errors import BadSymbol
15
- from ccxt.base.errors import BadResponse
16
+ from ccxt.base.errors import MarketClosed
16
17
  from ccxt.base.errors import InsufficientFunds
17
18
  from ccxt.base.errors import InvalidAddress
18
19
  from ccxt.base.errors import InvalidOrder
19
20
  from ccxt.base.errors import DDoSProtection
20
21
  from ccxt.base.errors import RateLimitExceeded
21
22
  from ccxt.base.errors import ExchangeNotAvailable
22
- from ccxt.base.errors import AuthenticationError
23
+ from ccxt.base.errors import BadResponse
23
24
  from ccxt.base.decimal_to_precision import TRUNCATE
24
25
  from ccxt.base.decimal_to_precision import TICK_SIZE
25
26
  from ccxt.base.precise import Precise
@@ -61,6 +62,7 @@ class probit(Exchange, ImplicitAPI):
61
62
  'fetchCurrencies': True,
62
63
  'fetchDepositAddress': True,
63
64
  'fetchDepositAddresses': True,
65
+ 'fetchDepositAddressesByNetwork': False,
64
66
  'fetchDeposits': True,
65
67
  'fetchDepositsWithdrawals': True,
66
68
  'fetchFundingHistory': False,
@@ -82,8 +84,11 @@ class probit(Exchange, ImplicitAPI):
82
84
  'fetchOrder': True,
83
85
  'fetchOrderBook': True,
84
86
  'fetchPosition': False,
87
+ 'fetchPositionHistory': False,
85
88
  'fetchPositionMode': False,
86
89
  'fetchPositions': False,
90
+ 'fetchPositionsForSymbol': False,
91
+ 'fetchPositionsHistory': False,
87
92
  'fetchPositionsRisk': False,
88
93
  'fetchPremiumIndexOHLCV': False,
89
94
  'fetchTicker': True,
@@ -98,6 +103,7 @@ class probit(Exchange, ImplicitAPI):
98
103
  'fetchWithdrawal': False,
99
104
  'fetchWithdrawals': True,
100
105
  'reduceMargin': False,
106
+ 'sandbox': True,
101
107
  'setLeverage': False,
102
108
  'setMarginMode': False,
103
109
  'setPositionMode': False,
@@ -190,7 +196,7 @@ class probit(Exchange, ImplicitAPI):
190
196
  'RATE_LIMIT_EXCEEDED': RateLimitExceeded, # You are sending requests too frequently. Please try it later.
191
197
  'MARKET_UNAVAILABLE': ExchangeNotAvailable, # Market is closed today
192
198
  'INVALID_MARKET': BadSymbol, # Requested market is not exist
193
- 'MARKET_CLOSED': BadSymbol, # {"errorCode":"MARKET_CLOSED"}
199
+ 'MARKET_CLOSED': MarketClosed, # {"errorCode":"MARKET_CLOSED"}
194
200
  'MARKET_NOT_FOUND': BadSymbol, # {"errorCode":"MARKET_NOT_FOUND","message":"8e2b8496-0a1e-5beb-b990-a205b902eabe","details":{}}
195
201
  'INVALID_CURRENCY': BadRequest, # Requested currency is not exist on ProBit system
196
202
  'TOO_MANY_OPEN_ORDERS': DDoSProtection, # Too many open orders
@@ -216,49 +222,32 @@ class probit(Exchange, ImplicitAPI):
216
222
  },
217
223
  },
218
224
  'commonCurrencies': {
219
- 'AUTO': 'Cube',
220
- 'AZU': 'Azultec',
221
- 'BCC': 'BCC',
222
- 'BDP': 'BidiPass',
223
- 'BIRD': 'Birdchain',
224
- 'BTCBEAR': 'BEAR',
225
- 'BTCBULL': 'BULL',
225
+ 'BB': 'Baby Bali',
226
226
  'CBC': 'CryptoBharatCoin',
227
- 'CHE': 'Chellit',
228
- 'CLR': 'Color Platform',
229
227
  'CTK': 'Cryptyk',
230
228
  'CTT': 'Castweet',
231
- 'DIP': 'Dipper',
232
229
  'DKT': 'DAKOTA',
233
230
  'EGC': 'EcoG9coin',
234
231
  'EPS': 'Epanus', # conflict with EPS Ellipsis https://github.com/ccxt/ccxt/issues/8909
235
232
  'FX': 'Fanzy',
236
- 'GDT': 'Gorilla Diamond',
237
233
  'GM': 'GM Holding',
238
234
  'GOGOL': 'GOL',
239
235
  'GOL': 'Goldofir',
240
- 'GRB': 'Global Reward Bank',
241
- 'HBC': 'Hybrid Bank Cash',
242
236
  'HUSL': 'The Hustle App',
243
237
  'LAND': 'Landbox',
244
- 'LBK': 'Legal Block',
245
- 'ORC': 'Oracle System',
246
- 'PXP': 'PIXSHOP COIN',
247
- 'PYE': 'CreamPYE',
248
- 'ROOK': 'Reckoon',
249
- 'SOC': 'Soda Coin',
250
238
  'SST': 'SocialSwap',
251
239
  'TCT': 'Top Coin Token',
252
240
  'TOR': 'Torex',
253
- 'TPAY': 'Tetra Pay',
254
241
  'UNI': 'UNICORN Token',
255
242
  'UNISWAP': 'UNI',
256
243
  },
257
244
  })
258
245
 
259
- def fetch_markets(self, params={}):
246
+ def fetch_markets(self, params={}) -> List[Market]:
260
247
  """
261
- :see: https://docs-en.probit.com/reference/market
248
+
249
+ https://docs-en.probit.com/reference/market
250
+
262
251
  retrieves data on all markets for probit
263
252
  :param dict [params]: extra parameters specific to the exchange API endpoint
264
253
  :returns dict[]: an array of objects representing market data
@@ -291,13 +280,15 @@ class probit(Exchange, ImplicitAPI):
291
280
  markets = self.safe_value(response, 'data', [])
292
281
  return self.parse_markets(markets)
293
282
 
294
- def parse_market(self, market) -> Market:
283
+ def parse_market(self, market: dict) -> Market:
295
284
  id = self.safe_string(market, 'id')
296
285
  baseId = self.safe_string(market, 'base_currency_id')
297
286
  quoteId = self.safe_string(market, 'quote_currency_id')
298
287
  base = self.safe_currency_code(baseId)
299
288
  quote = self.safe_currency_code(quoteId)
300
289
  closed = self.safe_bool(market, 'closed', False)
290
+ showInUI = self.safe_bool(market, 'show_in_ui', True)
291
+ active = not closed and showInUI
301
292
  takerFeeRate = self.safe_string(market, 'taker_fee_rate')
302
293
  taker = Precise.string_div(takerFeeRate, '100')
303
294
  makerFeeRate = self.safe_string(market, 'maker_fee_rate')
@@ -317,7 +308,7 @@ class probit(Exchange, ImplicitAPI):
317
308
  'swap': False,
318
309
  'future': False,
319
310
  'option': False,
320
- 'active': not closed,
311
+ 'active': active,
321
312
  'contract': False,
322
313
  'linear': None,
323
314
  'inverse': None,
@@ -355,9 +346,11 @@ class probit(Exchange, ImplicitAPI):
355
346
  'info': market,
356
347
  }
357
348
 
358
- def fetch_currencies(self, params={}):
349
+ def fetch_currencies(self, params={}) -> Currencies:
359
350
  """
360
- :see: https://docs-en.probit.com/reference/currency
351
+
352
+ https://docs-en.probit.com/reference/currency
353
+
361
354
  fetches all available currencies on an exchange
362
355
  :param dict [params]: extra parameters specific to the exchange API endpoint
363
356
  :returns dict: an associative dictionary of currencies
@@ -420,7 +413,7 @@ class probit(Exchange, ImplicitAPI):
420
413
  # }
421
414
  #
422
415
  currencies = self.safe_value(response, 'data', [])
423
- result = {}
416
+ result: dict = {}
424
417
  for i in range(0, len(currencies)):
425
418
  currency = currencies[i]
426
419
  id = self.safe_string(currency, 'id')
@@ -430,7 +423,7 @@ class probit(Exchange, ImplicitAPI):
430
423
  platforms = self.safe_value(currency, 'platform', [])
431
424
  platformsByPriority = self.sort_by(platforms, 'priority')
432
425
  platform = None
433
- networkList = {}
426
+ networkList: dict = {}
434
427
  for j in range(0, len(platformsByPriority)):
435
428
  network = platformsByPriority[j]
436
429
  idInner = self.safe_string(network, 'id')
@@ -520,7 +513,7 @@ class probit(Exchange, ImplicitAPI):
520
513
  return result
521
514
 
522
515
  def parse_balance(self, response) -> Balances:
523
- result = {
516
+ result: dict = {
524
517
  'info': response,
525
518
  'timestamp': None,
526
519
  'datetime': None,
@@ -538,7 +531,9 @@ class probit(Exchange, ImplicitAPI):
538
531
 
539
532
  def fetch_balance(self, params={}) -> Balances:
540
533
  """
541
- :see: https://docs-en.probit.com/reference/balance
534
+
535
+ https://docs-en.probit.com/reference/balance
536
+
542
537
  query for balance and get the amount of funds available for trading or funds locked in orders
543
538
  :param dict [params]: extra parameters specific to the exchange API endpoint
544
539
  :returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
@@ -560,7 +555,9 @@ class probit(Exchange, ImplicitAPI):
560
555
 
561
556
  def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
562
557
  """
563
- :see: https://docs-en.probit.com/reference/order_book
558
+
559
+ https://docs-en.probit.com/reference/order_book
560
+
564
561
  fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
565
562
  :param str symbol: unified symbol of the market to fetch the order book for
566
563
  :param int [limit]: the maximum amount of order book entries to return
@@ -569,7 +566,7 @@ class probit(Exchange, ImplicitAPI):
569
566
  """
570
567
  self.load_markets()
571
568
  market = self.market(symbol)
572
- request = {
569
+ request: dict = {
573
570
  'market_id': market['id'],
574
571
  }
575
572
  response = self.publicGetOrderBook(self.extend(request, params))
@@ -588,14 +585,16 @@ class probit(Exchange, ImplicitAPI):
588
585
 
589
586
  def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
590
587
  """
591
- :see: https://docs-en.probit.com/reference/ticker
588
+
589
+ https://docs-en.probit.com/reference/ticker
590
+
592
591
  fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
593
592
  :param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
594
593
  :param dict [params]: extra parameters specific to the exchange API endpoint
595
594
  :returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
596
595
  """
597
596
  self.load_markets()
598
- request = {}
597
+ request: dict = {}
599
598
  if symbols is not None:
600
599
  marketIds = self.market_ids(symbols)
601
600
  request['market_ids'] = ','.join(marketIds)
@@ -616,12 +615,14 @@ class probit(Exchange, ImplicitAPI):
616
615
  # ]
617
616
  # }
618
617
  #
619
- data = self.safe_value(response, 'data', [])
618
+ data = self.safe_list(response, 'data', [])
620
619
  return self.parse_tickers(data, symbols)
621
620
 
622
621
  def fetch_ticker(self, symbol: str, params={}) -> Ticker:
623
622
  """
624
- :see: https://docs-en.probit.com/reference/ticker
623
+
624
+ https://docs-en.probit.com/reference/ticker
625
+
625
626
  fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
626
627
  :param str symbol: unified symbol of the market to fetch the ticker for
627
628
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -629,7 +630,7 @@ class probit(Exchange, ImplicitAPI):
629
630
  """
630
631
  self.load_markets()
631
632
  market = self.market(symbol)
632
- request = {
633
+ request: dict = {
633
634
  'market_ids': market['id'],
634
635
  }
635
636
  response = self.publicGetTicker(self.extend(request, params))
@@ -655,7 +656,7 @@ class probit(Exchange, ImplicitAPI):
655
656
  raise BadResponse(self.id + ' fetchTicker() returned an empty response')
656
657
  return self.parse_ticker(ticker, market)
657
658
 
658
- def parse_ticker(self, ticker, market: Market = None) -> Ticker:
659
+ def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
659
660
  #
660
661
  # {
661
662
  # "last":"0.022902",
@@ -700,7 +701,9 @@ class probit(Exchange, ImplicitAPI):
700
701
 
701
702
  def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
702
703
  """
703
- :see: https://docs-en.probit.com/reference/trade
704
+
705
+ https://docs-en.probit.com/reference/trade
706
+
704
707
  fetch all trades made by the user
705
708
  :param str symbol: unified market symbol
706
709
  :param int [since]: the earliest time in ms to fetch trades for
@@ -711,7 +714,7 @@ class probit(Exchange, ImplicitAPI):
711
714
  self.load_markets()
712
715
  market: Market = None
713
716
  now = self.milliseconds()
714
- request = {
717
+ request: dict = {
715
718
  'limit': 100,
716
719
  'start_time': self.iso8601(now - 31536000000), # -365 days
717
720
  'end_time': self.iso8601(now),
@@ -744,12 +747,14 @@ class probit(Exchange, ImplicitAPI):
744
747
  # ]
745
748
  # }
746
749
  #
747
- data = self.safe_value(response, 'data', [])
750
+ data = self.safe_list(response, 'data', [])
748
751
  return self.parse_trades(data, market, since, limit)
749
752
 
750
753
  def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
751
754
  """
752
- :see: https://docs-en.probit.com/reference/trade-1
755
+
756
+ https://docs-en.probit.com/reference/trade-1
757
+
753
758
  get the list of most recent trades for a particular symbol
754
759
  :param str symbol: unified symbol of the market to fetch trades for
755
760
  :param int [since]: timestamp in ms of the earliest trade to fetch
@@ -759,7 +764,7 @@ class probit(Exchange, ImplicitAPI):
759
764
  """
760
765
  self.load_markets()
761
766
  market = self.market(symbol)
762
- request = {
767
+ request: dict = {
763
768
  'market_id': market['id'],
764
769
  'start_time': '1970-01-01T00:00:00.000Z',
765
770
  'end_time': self.iso8601(self.milliseconds()),
@@ -793,10 +798,10 @@ class probit(Exchange, ImplicitAPI):
793
798
  # ]
794
799
  # }
795
800
  #
796
- data = self.safe_value(response, 'data', [])
801
+ data = self.safe_list(response, 'data', [])
797
802
  return self.parse_trades(data, market, since, limit)
798
803
 
799
- def parse_trade(self, trade, market: Market = None) -> Trade:
804
+ def parse_trade(self, trade: dict, market: Market = None) -> Trade:
800
805
  #
801
806
  # fetchTrades(public)
802
807
  #
@@ -864,7 +869,9 @@ class probit(Exchange, ImplicitAPI):
864
869
 
865
870
  def fetch_time(self, params={}):
866
871
  """
867
- :see: https://docs-en.probit.com/reference/time
872
+
873
+ https://docs-en.probit.com/reference/time
874
+
868
875
  fetches the current integer timestamp in milliseconds from the exchange server
869
876
  :param dict [params]: extra parameters specific to the exchange API endpoint
870
877
  :returns int: the current integer timestamp in milliseconds from the exchange server
@@ -907,7 +914,9 @@ class probit(Exchange, ImplicitAPI):
907
914
 
908
915
  def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
909
916
  """
910
- :see: https://docs-en.probit.com/reference/candle
917
+
918
+ https://docs-en.probit.com/reference/candle
919
+
911
920
  fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
912
921
  :param str symbol: unified symbol of the market to fetch OHLCV data for
913
922
  :param str timeframe: the length of time each candle represents
@@ -922,7 +931,7 @@ class probit(Exchange, ImplicitAPI):
922
931
  limit = 100 if (limit is None) else limit
923
932
  requestLimit = self.sum(limit, 1)
924
933
  requestLimit = min(1000, requestLimit) # max 1000
925
- request = {
934
+ request: dict = {
926
935
  'market_ids': market['id'],
927
936
  'interval': interval,
928
937
  'sort': 'asc', # 'asc' will always include the start_time, 'desc' will always include end_time
@@ -963,7 +972,7 @@ class probit(Exchange, ImplicitAPI):
963
972
  # ]
964
973
  # }
965
974
  #
966
- data = self.safe_value(response, 'data', [])
975
+ data = self.safe_list(response, 'data', [])
967
976
  return self.parse_ohlcvs(data, market, timeframe, since, limit)
968
977
 
969
978
  def parse_ohlcv(self, ohlcv, market: Market = None) -> list:
@@ -991,7 +1000,9 @@ class probit(Exchange, ImplicitAPI):
991
1000
 
992
1001
  def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
993
1002
  """
994
- :see: https://docs-en.probit.com/reference/open_order-1
1003
+
1004
+ https://docs-en.probit.com/reference/open_order-1
1005
+
995
1006
  fetch all unfilled currently open orders
996
1007
  :param str symbol: unified market symbol
997
1008
  :param int [since]: the earliest time in ms to fetch open orders for
@@ -1001,18 +1012,20 @@ class probit(Exchange, ImplicitAPI):
1001
1012
  """
1002
1013
  self.load_markets()
1003
1014
  since = self.parse8601(since)
1004
- request = {}
1015
+ request: dict = {}
1005
1016
  market: Market = None
1006
1017
  if symbol is not None:
1007
1018
  market = self.market(symbol)
1008
1019
  request['market_id'] = market['id']
1009
1020
  response = self.privateGetOpenOrder(self.extend(request, params))
1010
- data = self.safe_value(response, 'data')
1021
+ data = self.safe_list(response, 'data')
1011
1022
  return self.parse_orders(data, market, since, limit)
1012
1023
 
1013
1024
  def fetch_closed_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
1014
1025
  """
1015
- :see: https://docs-en.probit.com/reference/order
1026
+
1027
+ https://docs-en.probit.com/reference/order
1028
+
1016
1029
  fetches information on multiple closed orders made by the user
1017
1030
  :param str symbol: unified market symbol of the market orders were made in
1018
1031
  :param int [since]: the earliest time in ms to fetch orders for
@@ -1021,7 +1034,7 @@ class probit(Exchange, ImplicitAPI):
1021
1034
  :returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
1022
1035
  """
1023
1036
  self.load_markets()
1024
- request = {
1037
+ request: dict = {
1025
1038
  'start_time': self.iso8601(0),
1026
1039
  'end_time': self.iso8601(self.milliseconds()),
1027
1040
  'limit': 100,
@@ -1035,13 +1048,16 @@ class probit(Exchange, ImplicitAPI):
1035
1048
  if limit:
1036
1049
  request['limit'] = limit
1037
1050
  response = self.privateGetOrderHistory(self.extend(request, params))
1038
- data = self.safe_value(response, 'data')
1051
+ data = self.safe_list(response, 'data')
1039
1052
  return self.parse_orders(data, market, since, limit)
1040
1053
 
1041
1054
  def fetch_order(self, id: str, symbol: Str = None, params={}):
1042
1055
  """
1043
- :see: https://docs-en.probit.com/reference/order-3
1056
+
1057
+ https://docs-en.probit.com/reference/order-3
1058
+
1044
1059
  fetches information on an order made by the user
1060
+ :param str id: the order id
1045
1061
  :param str symbol: unified symbol of the market the order was made in
1046
1062
  :param dict [params]: extra parameters specific to the exchange API endpoint
1047
1063
  :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
@@ -1050,7 +1066,7 @@ class probit(Exchange, ImplicitAPI):
1050
1066
  raise ArgumentsRequired(self.id + ' fetchOrder() requires a symbol argument')
1051
1067
  self.load_markets()
1052
1068
  market = self.market(symbol)
1053
- request = {
1069
+ request: dict = {
1054
1070
  'market_id': market['id'],
1055
1071
  }
1056
1072
  clientOrderId = self.safe_string_2(params, 'clientOrderId', 'client_order_id')
@@ -1061,18 +1077,18 @@ class probit(Exchange, ImplicitAPI):
1061
1077
  query = self.omit(params, ['clientOrderId', 'client_order_id'])
1062
1078
  response = self.privateGetOrder(self.extend(request, query))
1063
1079
  data = self.safe_value(response, 'data', [])
1064
- order = self.safe_value(data, 0)
1080
+ order = self.safe_dict(data, 0)
1065
1081
  return self.parse_order(order, market)
1066
1082
 
1067
- def parse_order_status(self, status):
1068
- statuses = {
1083
+ def parse_order_status(self, status: Str):
1084
+ statuses: dict = {
1069
1085
  'open': 'open',
1070
1086
  'cancelled': 'canceled',
1071
1087
  'filled': 'closed',
1072
1088
  }
1073
1089
  return self.safe_string(statuses, status, status)
1074
1090
 
1075
- def parse_order(self, order, market: Market = None) -> Order:
1091
+ def parse_order(self, order: dict, market: Market = None) -> Order:
1076
1092
  #
1077
1093
  # {
1078
1094
  # id,
@@ -1124,7 +1140,6 @@ class probit(Exchange, ImplicitAPI):
1124
1140
  'side': side,
1125
1141
  'status': status,
1126
1142
  'price': price,
1127
- 'stopPrice': None,
1128
1143
  'triggerPrice': None,
1129
1144
  'amount': amount,
1130
1145
  'filled': filled,
@@ -1141,12 +1156,14 @@ class probit(Exchange, ImplicitAPI):
1141
1156
  def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
1142
1157
  """
1143
1158
  create a trade order
1144
- :see: https://docs-en.probit.com/reference/order-1
1159
+
1160
+ https://docs-en.probit.com/reference/order-1
1161
+
1145
1162
  :param str symbol: unified symbol of the market to create an order in
1146
1163
  :param str type: 'market' or 'limit'
1147
1164
  :param str side: 'buy' or 'sell'
1148
1165
  :param float amount: how much you want to trade in units of the base currency
1149
- :param float [price]: the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders
1166
+ :param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
1150
1167
  :param dict [params]: extra parameters specific to the exchange API endpoint
1151
1168
  :param float [params.cost]: the quote quantity that can be used alternative for the amount for market buy orders
1152
1169
  :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
@@ -1156,7 +1173,7 @@ class probit(Exchange, ImplicitAPI):
1156
1173
  options = self.safe_value(self.options, 'timeInForce')
1157
1174
  defaultTimeInForce = self.safe_value(options, type)
1158
1175
  timeInForce = self.safe_string_2(params, 'timeInForce', 'time_in_force', defaultTimeInForce)
1159
- request = {
1176
+ request: dict = {
1160
1177
  'market_id': market['id'],
1161
1178
  'type': type,
1162
1179
  'side': side,
@@ -1226,7 +1243,9 @@ class probit(Exchange, ImplicitAPI):
1226
1243
 
1227
1244
  def cancel_order(self, id: str, symbol: Str = None, params={}):
1228
1245
  """
1229
- :see: https://docs-en.probit.com/reference/order-2
1246
+
1247
+ https://docs-en.probit.com/reference/order-2
1248
+
1230
1249
  cancels an open order
1231
1250
  :param str id: order id
1232
1251
  :param str symbol: unified symbol of the market the order was made in
@@ -1237,15 +1256,15 @@ class probit(Exchange, ImplicitAPI):
1237
1256
  raise ArgumentsRequired(self.id + ' cancelOrder() requires a symbol argument')
1238
1257
  self.load_markets()
1239
1258
  market = self.market(symbol)
1240
- request = {
1259
+ request: dict = {
1241
1260
  'market_id': market['id'],
1242
1261
  'order_id': id,
1243
1262
  }
1244
1263
  response = self.privatePostCancelOrder(self.extend(request, params))
1245
- data = self.safe_value(response, 'data')
1264
+ data = self.safe_dict(response, 'data')
1246
1265
  return self.parse_order(data)
1247
1266
 
1248
- def parse_deposit_address(self, depositAddress, currency: Currency = None):
1267
+ def parse_deposit_address(self, depositAddress, currency: Currency = None) -> DepositAddress:
1249
1268
  address = self.safe_string(depositAddress, 'address')
1250
1269
  tag = self.safe_string(depositAddress, 'destination_tag')
1251
1270
  currencyId = self.safe_string(depositAddress, 'currency_id')
@@ -1254,16 +1273,18 @@ class probit(Exchange, ImplicitAPI):
1254
1273
  network = self.safe_string(depositAddress, 'platform_id')
1255
1274
  self.check_address(address)
1256
1275
  return {
1276
+ 'info': depositAddress,
1257
1277
  'currency': code,
1278
+ 'network': network,
1258
1279
  'address': address,
1259
1280
  'tag': tag,
1260
- 'network': network,
1261
- 'info': depositAddress,
1262
1281
  }
1263
1282
 
1264
- def fetch_deposit_address(self, code: str, params={}):
1283
+ def fetch_deposit_address(self, code: str, params={}) -> DepositAddress:
1265
1284
  """
1266
- :see: https://docs-en.probit.com/reference/deposit_address
1285
+
1286
+ https://docs-en.probit.com/reference/deposit_address
1287
+
1267
1288
  fetch the deposit address for a currency associated with self account
1268
1289
  :param str code: unified currency code
1269
1290
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -1271,7 +1292,7 @@ class probit(Exchange, ImplicitAPI):
1271
1292
  """
1272
1293
  self.load_markets()
1273
1294
  currency = self.currency(code)
1274
- request = {
1295
+ request: dict = {
1275
1296
  'currency_id': currency['id'],
1276
1297
  # 'platform_id': 'TRON',(undocumented)
1277
1298
  }
@@ -1311,16 +1332,18 @@ class probit(Exchange, ImplicitAPI):
1311
1332
  raise InvalidAddress(self.id + ' fetchDepositAddress() returned an empty response')
1312
1333
  return self.parse_deposit_address(firstAddress, currency)
1313
1334
 
1314
- def fetch_deposit_addresses(self, codes: List[str] = None, params={}):
1335
+ def fetch_deposit_addresses(self, codes: Strings = None, params={}) -> List[DepositAddress]:
1315
1336
  """
1316
- :see: https://docs-en.probit.com/reference/deposit_address
1337
+
1338
+ https://docs-en.probit.com/reference/deposit_address
1339
+
1317
1340
  fetch deposit addresses for multiple currencies and chain types
1318
1341
  :param str[]|None codes: list of unified currency codes, default is None
1319
1342
  :param dict [params]: extra parameters specific to the exchange API endpoint
1320
1343
  :returns dict: a list of `address structures <https://docs.ccxt.com/#/?id=address-structure>`
1321
1344
  """
1322
1345
  self.load_markets()
1323
- request = {}
1346
+ request: dict = {}
1324
1347
  if codes:
1325
1348
  currencyIds = []
1326
1349
  for i in range(0, len(codes)):
@@ -1328,12 +1351,14 @@ class probit(Exchange, ImplicitAPI):
1328
1351
  currencyIds.append(currency['id'])
1329
1352
  request['currency_id'] = ','.join(codes)
1330
1353
  response = self.privateGetDepositAddress(self.extend(request, params))
1331
- data = self.safe_value(response, 'data', [])
1354
+ data = self.safe_list(response, 'data', [])
1332
1355
  return self.parse_deposit_addresses(data, codes)
1333
1356
 
1334
- def withdraw(self, code: str, amount: float, address, tag=None, params={}):
1357
+ def withdraw(self, code: str, amount: float, address: str, tag=None, params={}) -> Transaction:
1335
1358
  """
1336
- :see: https://docs-en.probit.com/reference/withdrawal
1359
+
1360
+ https://docs-en.probit.com/reference/withdrawal
1361
+
1337
1362
  make a withdrawal
1338
1363
  :param str code: unified currency code
1339
1364
  :param float amount: the amount to withdraw
@@ -1352,7 +1377,7 @@ class probit(Exchange, ImplicitAPI):
1352
1377
  currency = self.currency(code)
1353
1378
  if tag is None:
1354
1379
  tag = ''
1355
- request = {
1380
+ request: dict = {
1356
1381
  'currency_id': currency['id'],
1357
1382
  # 'platform_id': 'ETH', # if omitted it will use the default platform for the currency
1358
1383
  'address': address,
@@ -1371,7 +1396,7 @@ class probit(Exchange, ImplicitAPI):
1371
1396
  request['platform_id'] = network
1372
1397
  params = self.omit(params, 'network')
1373
1398
  response = self.privatePostWithdrawal(self.extend(request, params))
1374
- data = self.safe_value(response, 'data')
1399
+ data = self.safe_dict(response, 'data')
1375
1400
  return self.parse_transaction(data, currency)
1376
1401
 
1377
1402
  def fetch_deposits(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
@@ -1383,7 +1408,7 @@ class probit(Exchange, ImplicitAPI):
1383
1408
  :param dict [params]: extra parameters specific to the exchange API endpoint
1384
1409
  :returns dict[]: a list of `transaction structures <https://docs.ccxt.com/#/?id=transaction-structure>`
1385
1410
  """
1386
- request = {
1411
+ request: dict = {
1387
1412
  'type': 'deposit',
1388
1413
  }
1389
1414
  result = self.fetch_transactions(code, since, limit, self.extend(request, params))
@@ -1398,27 +1423,28 @@ class probit(Exchange, ImplicitAPI):
1398
1423
  :param dict [params]: extra parameters specific to the exchange API endpoint
1399
1424
  :returns dict[]: a list of `transaction structures <https://docs.ccxt.com/#/?id=transaction-structure>`
1400
1425
  """
1401
- request = {
1426
+ request: dict = {
1402
1427
  'type': 'withdrawal',
1403
1428
  }
1404
1429
  result = self.fetch_transactions(code, since, limit, self.extend(request, params))
1405
1430
  return result
1406
1431
 
1407
- def fetch_transactions(self, code: Str = None, since: Int = None, limit: Int = None, params={}):
1432
+ def fetch_deposits_withdrawals(self, code: Str = None, since: Int = None, limit: Int = None, params={}):
1408
1433
  """
1409
- * @deprecated
1410
- use fetchDepositsWithdrawals instead
1411
- :see: https://docs-en.probit.com/reference/transferpayment
1434
+ fetch history of deposits and withdrawals
1435
+
1436
+ https://docs-en.probit.com/reference/transferpayment
1437
+
1412
1438
  :param str code: unified currency code
1413
1439
  :param int [since]: the earliest time in ms to fetch transactions for
1414
1440
  :param int [limit]: the maximum number of transaction structures to retrieve
1415
- :param int [params.until]: the latest time in ms to fetch transactions for
1416
1441
  :param dict [params]: extra parameters specific to the exchange API endpoint
1442
+ :param int [params.until]: the latest time in ms to fetch transactions for
1417
1443
  :returns dict[]: a list of `transaction structures <https://docs.ccxt.com/#/?id=transaction-structure>`
1418
1444
  """
1419
1445
  self.load_markets()
1420
1446
  currency: Currency = None
1421
- request = {}
1447
+ request: dict = {}
1422
1448
  if code is not None:
1423
1449
  currency = self.currency(code)
1424
1450
  request['currency_id'] = currency['id']
@@ -1426,10 +1452,10 @@ class probit(Exchange, ImplicitAPI):
1426
1452
  request['start_time'] = self.iso8601(since)
1427
1453
  else:
1428
1454
  request['start_time'] = self.iso8601(1)
1429
- until = self.safe_integer_2(params, 'till', 'until')
1455
+ until = self.safe_integer(params, 'until')
1430
1456
  if until is not None:
1431
1457
  request['end_time'] = self.iso8601(until)
1432
- params = self.omit(params, ['until', 'till'])
1458
+ params = self.omit(params, ['until'])
1433
1459
  else:
1434
1460
  request['end_time'] = self.iso8601(self.milliseconds())
1435
1461
  if limit is not None:
@@ -1464,7 +1490,7 @@ class probit(Exchange, ImplicitAPI):
1464
1490
  data = self.safe_list(response, 'data', [])
1465
1491
  return self.parse_transactions(data, currency, since, limit)
1466
1492
 
1467
- def parse_transaction(self, transaction, currency: Currency = None) -> Transaction:
1493
+ def parse_transaction(self, transaction: dict, currency: Currency = None) -> Transaction:
1468
1494
  #
1469
1495
  # {
1470
1496
  # "id": "01211d4b-0e68-41d6-97cb-298bfe2cab67",
@@ -1527,8 +1553,8 @@ class probit(Exchange, ImplicitAPI):
1527
1553
  'info': transaction,
1528
1554
  }
1529
1555
 
1530
- def parse_transaction_status(self, status):
1531
- statuses = {
1556
+ def parse_transaction_status(self, status: Str):
1557
+ statuses: dict = {
1532
1558
  'requested': 'pending',
1533
1559
  'pending': 'pending',
1534
1560
  'confirming': 'pending',
@@ -1542,7 +1568,9 @@ class probit(Exchange, ImplicitAPI):
1542
1568
 
1543
1569
  def fetch_deposit_withdraw_fees(self, codes: Strings = None, params={}):
1544
1570
  """
1545
- :see: https://docs-en.probit.com/reference/currency
1571
+
1572
+ https://docs-en.probit.com/reference/currency
1573
+
1546
1574
  fetch deposit and withdraw fees
1547
1575
  :param str[]|None codes: list of unified currency codes
1548
1576
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -1605,7 +1633,7 @@ class probit(Exchange, ImplicitAPI):
1605
1633
  # ]
1606
1634
  # }
1607
1635
  #
1608
- data = self.safe_value(response, 'data')
1636
+ data = self.safe_list(response, 'data')
1609
1637
  return self.parse_deposit_withdraw_fees(data, codes, 'id')
1610
1638
 
1611
1639
  def parse_deposit_withdraw_fee(self, fee, currency: Currency = None):
@@ -1645,7 +1673,7 @@ class probit(Exchange, ImplicitAPI):
1645
1673
  #
1646
1674
  depositWithdrawFee = self.deposit_withdraw_fee({})
1647
1675
  platforms = self.safe_value(fee, 'platform', [])
1648
- depositResult = {
1676
+ depositResult: dict = {
1649
1677
  'fee': None,
1650
1678
  'percentage': None,
1651
1679
  }
@@ -1656,7 +1684,7 @@ class probit(Exchange, ImplicitAPI):
1656
1684
  withdrawalFees = self.safe_value(network, 'withdrawal_fee', {})
1657
1685
  withdrawFee = self.safe_number(withdrawalFees[0], 'amount')
1658
1686
  if len(withdrawalFees):
1659
- withdrawResult = {
1687
+ withdrawResult: dict = {
1660
1688
  'fee': withdrawFee,
1661
1689
  'percentage': False if (withdrawFee is not None) else None,
1662
1690
  }
@@ -1713,13 +1741,15 @@ class probit(Exchange, ImplicitAPI):
1713
1741
 
1714
1742
  def sign_in(self, params={}):
1715
1743
  """
1716
- :see: https://docs-en.probit.com/reference/token
1744
+
1745
+ https://docs-en.probit.com/reference/token
1746
+
1717
1747
  sign in, must be called prior to using other authenticated methods
1718
1748
  :param dict [params]: extra parameters specific to the exchange API endpoint
1719
1749
  :returns: response from exchange
1720
1750
  """
1721
1751
  self.check_required_credentials()
1722
- request = {
1752
+ request: dict = {
1723
1753
  'grant_type': 'client_credentials', # the only supported value
1724
1754
  }
1725
1755
  response = self.accountsPostToken(self.extend(request, params))
@@ -1736,15 +1766,18 @@ class probit(Exchange, ImplicitAPI):
1736
1766
  self.options['expires'] = self.sum(self.milliseconds(), expiresIn * 1000)
1737
1767
  return response
1738
1768
 
1739
- def handle_errors(self, code, reason, url, method, headers, body, response, requestHeaders, requestBody):
1769
+ def handle_errors(self, code: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
1740
1770
  if response is None:
1741
1771
  return None # fallback to default error handler
1742
1772
  if 'errorCode' in response:
1743
1773
  errorCode = self.safe_string(response, 'errorCode')
1744
- message = self.safe_string(response, 'message')
1745
1774
  if errorCode is not None:
1746
- feedback = self.id + ' ' + body
1747
- self.throw_exactly_matched_exception(self.exceptions['exact'], message, feedback)
1748
- self.throw_broadly_matched_exception(self.exceptions['exact'], errorCode, feedback)
1775
+ errMessage = self.safe_string(response, 'message', '')
1776
+ details = self.safe_value(response, 'details')
1777
+ feedback = self.id + ' ' + errorCode + ' ' + errMessage + ' ' + self.json(details)
1778
+ if 'exact' in self.exceptions:
1779
+ self.throw_exactly_matched_exception(self.exceptions['exact'], errorCode, feedback)
1780
+ if 'broad' in self.exceptions:
1781
+ self.throw_broadly_matched_exception(self.exceptions['broad'], errMessage, feedback)
1749
1782
  raise ExchangeError(feedback)
1750
1783
  return None