ccxt 4.2.77__py2.py3-none-any.whl → 4.4.49__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 +3205 -937
  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 +1525 -573
  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 +223 -97
  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 +639 -323
  126. ccxt/async_support/digifinex.py +465 -233
  127. ccxt/async_support/ellipx.py +1887 -0
  128. ccxt/async_support/exmo.py +317 -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 +433 -178
  133. ccxt/async_support/hollaex.py +207 -83
  134. ccxt/async_support/htx.py +1095 -563
  135. ccxt/async_support/huobijp.py +178 -56
  136. ccxt/async_support/hyperliquid.py +1678 -292
  137. ccxt/async_support/idex.py +219 -95
  138. ccxt/async_support/independentreserve.py +300 -31
  139. ccxt/async_support/indodax.py +226 -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 +198 -107
  145. ccxt/async_support/latoken.py +199 -79
  146. ccxt/async_support/lbank.py +360 -113
  147. ccxt/async_support/luno.py +185 -62
  148. ccxt/async_support/lykke.py +168 -55
  149. ccxt/async_support/mercado.py +101 -29
  150. ccxt/async_support/mexc.py +995 -429
  151. ccxt/async_support/myokx.py +53 -0
  152. ccxt/async_support/ndax.py +234 -82
  153. ccxt/async_support/novadax.py +195 -75
  154. ccxt/async_support/oceanex.py +244 -59
  155. ccxt/async_support/okcoin.py +301 -165
  156. ccxt/async_support/okx.py +1776 -454
  157. ccxt/async_support/onetrading.py +198 -414
  158. ccxt/async_support/oxfun.py +2898 -0
  159. ccxt/async_support/p2b.py +142 -52
  160. ccxt/async_support/paradex.py +2085 -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 +3205 -937
  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 +1525 -573
  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 +223 -97
  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 +639 -323
  234. ccxt/digifinex.py +465 -233
  235. ccxt/ellipx.py +1887 -0
  236. ccxt/exmo.py +317 -128
  237. ccxt/gate.py +1472 -463
  238. ccxt/gemini.py +206 -84
  239. ccxt/hashkey.py +4164 -0
  240. ccxt/hitbtc.py +433 -178
  241. ccxt/hollaex.py +207 -83
  242. ccxt/htx.py +1095 -563
  243. ccxt/huobijp.py +178 -56
  244. ccxt/hyperliquid.py +1677 -292
  245. ccxt/idex.py +219 -95
  246. ccxt/independentreserve.py +299 -31
  247. ccxt/indodax.py +226 -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 +198 -107
  253. ccxt/latoken.py +199 -79
  254. ccxt/lbank.py +360 -113
  255. ccxt/luno.py +185 -62
  256. ccxt/lykke.py +168 -55
  257. ccxt/mercado.py +101 -29
  258. ccxt/mexc.py +994 -429
  259. ccxt/myokx.py +53 -0
  260. ccxt/ndax.py +234 -82
  261. ccxt/novadax.py +195 -75
  262. ccxt/oceanex.py +244 -59
  263. ccxt/okcoin.py +301 -165
  264. ccxt/okx.py +1776 -454
  265. ccxt/onetrading.py +198 -414
  266. ccxt/oxfun.py +2897 -0
  267. ccxt/p2b.py +142 -52
  268. ccxt/paradex.py +2085 -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 +143 -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.49.dist-info/LICENSE.txt +21 -0
  496. ccxt-4.4.49.dist-info/METADATA +646 -0
  497. ccxt-4.4.49.dist-info/RECORD +669 -0
  498. {ccxt-4.2.77.dist-info → ccxt-4.4.49.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.49.dist-info}/top_level.txt +0 -0
ccxt/pro/hollaex.py CHANGED
@@ -9,9 +9,9 @@ import hashlib
9
9
  from ccxt.base.types import Balances, Int, Order, OrderBook, Str, Trade
10
10
  from ccxt.async_support.base.ws.client import Client
11
11
  from typing import List
12
+ from ccxt.base.errors import AuthenticationError
12
13
  from ccxt.base.errors import BadRequest
13
14
  from ccxt.base.errors import BadSymbol
14
- from ccxt.base.errors import AuthenticationError
15
15
 
16
16
 
17
17
  class hollaex(ccxt.async_support.hollaex):
@@ -28,6 +28,7 @@ class hollaex(ccxt.async_support.hollaex):
28
28
  'watchTicker': False,
29
29
  'watchTickers': False, # for now
30
30
  'watchTrades': True,
31
+ 'watchTradesForSymbols': False,
31
32
  },
32
33
  'urls': {
33
34
  'api': {
@@ -61,6 +62,9 @@ class hollaex(ccxt.async_support.hollaex):
61
62
  async def watch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
62
63
  """
63
64
  watches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
65
+
66
+ https://apidocs.hollaex.com/#sending-receiving-messages
67
+
64
68
  :param str symbol: unified symbol of the market to fetch the order book for
65
69
  :param int [limit]: the maximum amount of order book entries to return
66
70
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -115,6 +119,9 @@ class hollaex(ccxt.async_support.hollaex):
115
119
  async def watch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
116
120
  """
117
121
  get the list of most recent trades for a particular symbol
122
+
123
+ https://apidocs.hollaex.com/#sending-receiving-messages
124
+
118
125
  :param str symbol: unified symbol of the market to fetch trades for
119
126
  :param int [since]: timestamp in ms of the earliest trade to fetch
120
127
  :param int [limit]: the maximum amount of trades to fetch
@@ -166,11 +173,14 @@ class hollaex(ccxt.async_support.hollaex):
166
173
  async def watch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
167
174
  """
168
175
  watches information on multiple trades made by the user
176
+
177
+ https://apidocs.hollaex.com/#sending-receiving-messages
178
+
169
179
  :param str symbol: unified market symbol of the market trades were made in
170
180
  :param int [since]: the earliest time in ms to fetch trades for
171
181
  :param int [limit]: the maximum number of trade structures to retrieve
172
182
  :param dict [params]: extra parameters specific to the exchange API endpoint
173
- :returns dict[]: a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure
183
+ :returns dict[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
174
184
  """
175
185
  await self.load_markets()
176
186
  messageHash = 'usertrade'
@@ -218,7 +228,7 @@ class hollaex(ccxt.async_support.hollaex):
218
228
  limit = self.safe_integer(self.options, 'tradesLimit', 1000)
219
229
  self.myTrades = ArrayCache(limit)
220
230
  stored = self.myTrades
221
- marketIds = {}
231
+ marketIds: dict = {}
222
232
  for i in range(0, len(rawTrades)):
223
233
  trade = rawTrades[i]
224
234
  parsed = self.parse_trade(trade)
@@ -238,6 +248,9 @@ class hollaex(ccxt.async_support.hollaex):
238
248
  async def watch_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
239
249
  """
240
250
  watches information on multiple orders made by the user
251
+
252
+ https://apidocs.hollaex.com/#sending-receiving-messages
253
+
241
254
  :param str symbol: unified market symbol of the market orders were made in
242
255
  :param int [since]: the earliest time in ms to fetch orders for
243
256
  :param int [limit]: the maximum number of order structures to retrieve
@@ -329,7 +342,7 @@ class hollaex(ccxt.async_support.hollaex):
329
342
  rawOrders = [data]
330
343
  else:
331
344
  rawOrders = data
332
- marketIds = {}
345
+ marketIds: dict = {}
333
346
  for i in range(0, len(rawOrders)):
334
347
  order = rawOrders[i]
335
348
  parsed = self.parse_order(order)
@@ -349,6 +362,9 @@ class hollaex(ccxt.async_support.hollaex):
349
362
  async def watch_balance(self, params={}) -> Balances:
350
363
  """
351
364
  watch balance and get the amount of funds available for trading or funds locked in orders
365
+
366
+ https://apidocs.hollaex.com/#sending-receiving-messages
367
+
352
368
  :param dict [params]: extra parameters specific to the exchange API endpoint
353
369
  :returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
354
370
  """
@@ -394,7 +410,7 @@ class hollaex(ccxt.async_support.hollaex):
394
410
 
395
411
  async def watch_public(self, messageHash, params={}):
396
412
  url = self.urls['api']['ws']
397
- request = {
413
+ request: dict = {
398
414
  'op': 'subscribe',
399
415
  'args': [messageHash],
400
416
  }
@@ -414,13 +430,13 @@ class hollaex(ccxt.async_support.hollaex):
414
430
  url = self.urls['api']['ws']
415
431
  auth = 'CONNECT' + '/stream' + expires
416
432
  signature = self.hmac(self.encode(auth), self.encode(self.secret), hashlib.sha256)
417
- authParams = {
433
+ authParams: dict = {
418
434
  'api-key': self.apiKey,
419
435
  'api-signature': signature,
420
436
  'api-expires': expires,
421
437
  }
422
438
  signedUrl = url + '?' + self.urlencode(authParams)
423
- request = {
439
+ request: dict = {
424
440
  'op': 'subscribe',
425
441
  'args': [messageHash],
426
442
  }
@@ -534,7 +550,7 @@ class hollaex(ccxt.async_support.hollaex):
534
550
  if content == 'pong':
535
551
  self.handle_pong(client, message)
536
552
  return
537
- methods = {
553
+ methods: dict = {
538
554
  'trade': self.handle_trades,
539
555
  'orderbook': self.handle_order_book,
540
556
  'order': self.handle_order,
@@ -546,7 +562,7 @@ class hollaex(ccxt.async_support.hollaex):
546
562
  if method is not None:
547
563
  method(client, message)
548
564
 
549
- def ping(self, client):
565
+ def ping(self, client: Client):
550
566
  # hollaex does not support built-in ws protocol-level ping-pong
551
567
  return {'op': 'ping'}
552
568
 
ccxt/pro/htx.py CHANGED
@@ -10,12 +10,13 @@ from ccxt.base.types import Balances, Int, Order, OrderBook, Position, Str, Stri
10
10
  from ccxt.async_support.base.ws.client import Client
11
11
  from typing import List
12
12
  from ccxt.base.errors import ExchangeError
13
+ from ccxt.base.errors import AuthenticationError
13
14
  from ccxt.base.errors import ArgumentsRequired
14
15
  from ccxt.base.errors import BadRequest
15
16
  from ccxt.base.errors import BadSymbol
16
17
  from ccxt.base.errors import NetworkError
17
18
  from ccxt.base.errors import InvalidNonce
18
- from ccxt.base.errors import AuthenticationError
19
+ from ccxt.base.errors import ChecksumError
19
20
 
20
21
 
21
22
  class htx(ccxt.async_support.htx):
@@ -38,6 +39,7 @@ class htx(ccxt.async_support.htx):
38
39
  'watchTickers': False,
39
40
  'watchTicker': True,
40
41
  'watchTrades': True,
42
+ 'watchTradesForSymbols': False,
41
43
  'watchMyTrades': True,
42
44
  'watchBalance': True,
43
45
  'watchOHLCV': True,
@@ -109,6 +111,7 @@ class htx(ccxt.async_support.htx):
109
111
  'api': 'api', # or api-aws for clients hosted on AWS
110
112
  'watchOrderBook': {
111
113
  'maxRetries': 3,
114
+ 'checksum': True,
112
115
  },
113
116
  'ws': {
114
117
  'gunzip': True,
@@ -124,7 +127,7 @@ class htx(ccxt.async_support.htx):
124
127
  '2002': AuthenticationError, # {action: 'sub', code: 2002, ch: 'accounts.update#2', message: 'invalid.auth.state'}
125
128
  '2021': BadRequest,
126
129
  '2001': BadSymbol, # {action: 'sub', code: 2001, ch: 'orders#2ltcusdt', message: 'invalid.symbol'}
127
- '2011': BadSymbol, # {op: 'sub', cid: '1649149285', topic: 'orders_cross.hereltc-usdt', 'err-code': 2011, 'err-msg': "Contract doesn't exist.", ts: 1649149287637}
130
+ '2011': BadSymbol, # {op: 'sub', cid: '1649149285', topic: 'orders_cross.ltc-usdt', 'err-code': 2011, 'err-msg': "Contract doesn't exist.", ts: 1649149287637}
128
131
  '2040': BadRequest, # {op: 'sub', cid: '1649152947', 'err-code': 2040, 'err-msg': 'Missing required parameter.', ts: 1649152948684}
129
132
  '4007': BadRequest, # {op: 'sub', cid: '1', topic: 'accounts_unify.USDT', 'err-code': 4007, 'err-msg': 'Non - single account user is not available, please check through the cross and isolated account asset interface', ts: 1698419318540}
130
133
  },
@@ -140,6 +143,10 @@ class htx(ccxt.async_support.htx):
140
143
  async def watch_ticker(self, symbol: str, params={}) -> Ticker:
141
144
  """
142
145
  watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
146
+
147
+ https://www.htx.com/en-us/opend/newApiPages/?id=7ec53561-7773-11ed-9966-0242ac110003
148
+ https://www.htx.com/en-us/opend/newApiPages/?id=28c33ab2-77ae-11ed-9966-0242ac110003
149
+
143
150
  :param str symbol: unified symbol of the market to fetch the ticker for
144
151
  :param dict [params]: extra parameters specific to the exchange API endpoint
145
152
  :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
@@ -205,6 +212,11 @@ class htx(ccxt.async_support.htx):
205
212
  async def watch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
206
213
  """
207
214
  get the list of most recent trades for a particular symbol
215
+
216
+ https://www.htx.com/en-us/opend/newApiPages/?id=7ec53b69-7773-11ed-9966-0242ac110003
217
+ https://www.htx.com/en-us/opend/newApiPages/?id=28c33c21-77ae-11ed-9966-0242ac110003
218
+ https://www.htx.com/en-us/opend/newApiPages/?id=28c33cfe-77ae-11ed-9966-0242ac110003
219
+
208
220
  :param str symbol: unified symbol of the market to fetch trades for
209
221
  :param int [since]: timestamp in ms of the earliest trade to fetch
210
222
  :param int [limit]: the maximum amount of trades to fetch
@@ -263,6 +275,11 @@ class htx(ccxt.async_support.htx):
263
275
  async def watch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
264
276
  """
265
277
  watches historical candlestick data containing the open, high, low, and close price, and the volume of a market
278
+
279
+ https://www.htx.com/en-us/opend/newApiPages/?id=7ec53241-7773-11ed-9966-0242ac110003
280
+ https://www.htx.com/en-us/opend/newApiPages/?id=28c3346a-77ae-11ed-9966-0242ac110003
281
+ https://www.htx.com/en-us/opend/newApiPages/?id=28c33563-77ae-11ed-9966-0242ac110003
282
+
266
283
  :param str symbol: unified symbol of the market to fetch OHLCV data for
267
284
  :param str timeframe: the length of time each candle represents
268
285
  :param int [since]: timestamp in ms of the earliest candle to fetch
@@ -318,9 +335,11 @@ class htx(ccxt.async_support.htx):
318
335
 
319
336
  async def watch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
320
337
  """
321
- :see: https://huobiapi.github.io/docs/dm/v1/en/#subscribe-market-depth-data
322
- :see: https://huobiapi.github.io/docs/coin_margined_swap/v1/en/#subscribe-incremental-market-depth-data
323
- :see: https://huobiapi.github.io/docs/usdt_swap/v1/en/#general-subscribe-incremental-market-depth-data
338
+
339
+ https://huobiapi.github.io/docs/dm/v1/en/#subscribe-market-depth-data
340
+ https://huobiapi.github.io/docs/coin_margined_swap/v1/en/#subscribe-incremental-market-depth-data
341
+ https://huobiapi.github.io/docs/usdt_swap/v1/en/#general-subscribe-incremental-market-depth-data
342
+
324
343
  watches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
325
344
  :param str symbol: unified symbol of the market to fetch the order book for
326
345
  :param int [limit]: the maximum amount of order book entries to return
@@ -418,6 +437,8 @@ class htx(ccxt.async_support.htx):
418
437
  self.orderbooks[symbol] = orderbook
419
438
  client.resolve(orderbook, messageHash)
420
439
  except Exception as e:
440
+ del client.subscriptions[messageHash]
441
+ del self.orderbooks[symbol]
421
442
  client.reject(e, messageHash)
422
443
 
423
444
  async def watch_order_book_snapshot(self, client, message, subscription):
@@ -430,13 +451,13 @@ class htx(ccxt.async_support.htx):
430
451
  market = self.market(symbol)
431
452
  url = self.get_url_by_market_type(market['type'], market['linear'], False, True)
432
453
  requestId = self.request_id()
433
- request = {
454
+ request: dict = {
434
455
  'req': messageHash,
435
456
  'id': requestId,
436
457
  }
437
458
  # self is a temporary subscription by a specific requestId
438
459
  # it has a very short lifetime until the snapshot is received over ws
439
- snapshotSubscription = {
460
+ snapshotSubscription: dict = {
440
461
  'id': requestId,
441
462
  'messageHash': messageHash,
442
463
  'symbol': symbol,
@@ -547,7 +568,9 @@ class htx(ccxt.async_support.htx):
547
568
  orderbook.reset(snapshot)
548
569
  orderbook['nonce'] = version
549
570
  if (prevSeqNum is not None) and prevSeqNum > orderbook['nonce']:
550
- raise InvalidNonce(self.id + ' watchOrderBook() received a mesage out of order')
571
+ checksum = self.handle_option('watchOrderBook', 'checksum', True)
572
+ if checksum:
573
+ raise ChecksumError(self.id + ' ' + self.orderbook_checksum_message(symbol))
551
574
  spotConditon = market['spot'] and (prevSeqNum == orderbook['nonce'])
552
575
  nonSpotCondition = market['contract'] and (version - 1 == orderbook['nonce'])
553
576
  if spotConditon or nonSpotCondition:
@@ -606,19 +629,18 @@ class htx(ccxt.async_support.htx):
606
629
  # }
607
630
  #
608
631
  messageHash = self.safe_string(message, 'ch')
609
- tick = self.safe_value(message, 'tick')
632
+ tick = self.safe_dict(message, 'tick')
610
633
  event = self.safe_string(tick, 'event')
611
- ch = self.safe_value(message, 'ch')
634
+ ch = self.safe_string(message, 'ch')
612
635
  parts = ch.split('.')
613
636
  marketId = self.safe_string(parts, 1)
614
637
  symbol = self.safe_symbol(marketId)
615
- orderbook = self.safe_value(self.orderbooks, symbol)
616
- if orderbook is None:
638
+ if not (symbol in self.orderbooks):
617
639
  size = self.safe_string(parts, 3)
618
640
  sizeParts = size.split('_')
619
641
  limit = self.safe_integer(sizeParts, 1)
620
- orderbook = self.order_book({}, limit)
621
- self.orderbooks[symbol] = orderbook
642
+ self.orderbooks[symbol] = self.order_book({}, limit)
643
+ orderbook = self.orderbooks[symbol]
622
644
  if (event is None) and (orderbook['nonce'] is None):
623
645
  orderbook.cache.append(message)
624
646
  else:
@@ -636,11 +658,14 @@ class htx(ccxt.async_support.htx):
636
658
  async def watch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
637
659
  """
638
660
  watches information on multiple trades made by the user
661
+
662
+ https://www.htx.com/en-us/opend/newApiPages/?id=7ec53dd5-7773-11ed-9966-0242ac110003
663
+
639
664
  :param str symbol: unified market symbol of the market trades were made in
640
665
  :param int [since]: the earliest time in ms to fetch trades for
641
666
  :param int [limit]: the maximum number of trade structures to retrieve
642
667
  :param dict [params]: extra parameters specific to the exchange API endpoint
643
- :returns dict[]: a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure
668
+ :returns dict[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
644
669
  """
645
670
  self.check_required_credentials()
646
671
  await self.load_markets()
@@ -722,6 +747,9 @@ class htx(ccxt.async_support.htx):
722
747
  async def watch_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
723
748
  """
724
749
  watches information on multiple orders made by the user
750
+
751
+ https://www.htx.com/en-us/opend/newApiPages/?id=7ec53c8f-7773-11ed-9966-0242ac110003
752
+
725
753
  :param str symbol: unified market symbol of the market orders were made in
726
754
  :param int [since]: the earliest time in ms to fetch orders for
727
755
  :param int [limit]: the maximum number of order structures to retrieve
@@ -884,7 +912,7 @@ class htx(ccxt.async_support.htx):
884
912
  status = self.parse_order_status(self.safe_string_2(data, 'orderStatus', 'status', 'closed'))
885
913
  filled = self.safe_string(data, 'execAmt')
886
914
  remaining = self.safe_string(data, 'remainAmt')
887
- order = {
915
+ order: dict = {
888
916
  'id': orderId,
889
917
  'trades': trades,
890
918
  'status': status,
@@ -901,13 +929,13 @@ class htx(ccxt.async_support.htx):
901
929
  rawTrades = self.safe_value(message, 'trade', [])
902
930
  tradesLength = len(rawTrades)
903
931
  if tradesLength > 0:
904
- tradesObject = {
932
+ tradesObject: dict = {
905
933
  'trades': rawTrades,
906
934
  'ch': messageHash,
907
935
  'symbol': marketId,
908
936
  }
909
937
  # inject order params in every trade
910
- extendTradeParams = {
938
+ extendTradeParams: dict = {
911
939
  'order': self.safe_string(parsedOrder, 'id'),
912
940
  'type': self.safe_string(parsedOrder, 'type'),
913
941
  'side': self.safe_string(parsedOrder, 'side'),
@@ -1154,12 +1182,16 @@ class htx(ccxt.async_support.htx):
1154
1182
 
1155
1183
  async def watch_positions(self, symbols: Strings = None, since: Int = None, limit: Int = None, params={}) -> List[Position]:
1156
1184
  """
1157
- :see: https://www.huobi.com/en-in/opend/newApiPages/?id=8cb7de1c-77b5-11ed-9966-0242ac110003
1158
- :see: https://www.huobi.com/en-in/opend/newApiPages/?id=8cb7df0f-77b5-11ed-9966-0242ac110003
1159
- :see: https://www.huobi.com/en-in/opend/newApiPages/?id=28c34a7d-77ae-11ed-9966-0242ac110003
1160
- :see: https://www.huobi.com/en-in/opend/newApiPages/?id=5d5156b5-77b6-11ed-9966-0242ac110003
1185
+
1186
+ https://www.huobi.com/en-in/opend/newApiPages/?id=8cb7de1c-77b5-11ed-9966-0242ac110003
1187
+ https://www.huobi.com/en-in/opend/newApiPages/?id=8cb7df0f-77b5-11ed-9966-0242ac110003
1188
+ https://www.huobi.com/en-in/opend/newApiPages/?id=28c34a7d-77ae-11ed-9966-0242ac110003
1189
+ https://www.huobi.com/en-in/opend/newApiPages/?id=5d5156b5-77b6-11ed-9966-0242ac110003
1190
+
1161
1191
  watch all open positions. Note: huobi has one channel for each marginMode and type
1162
1192
  :param str[]|None symbols: list of unified market symbols
1193
+ @param since
1194
+ @param limit
1163
1195
  :param dict params: extra parameters specific to the exchange API endpoint
1164
1196
  :returns dict[]: a list of `position structure <https://docs.ccxt.com/en/latest/manual.html#position-structure>`
1165
1197
  """
@@ -1263,6 +1295,12 @@ class htx(ccxt.async_support.htx):
1263
1295
  async def watch_balance(self, params={}) -> Balances:
1264
1296
  """
1265
1297
  watch balance and get the amount of funds available for trading or funds locked in orders
1298
+
1299
+ https://www.htx.com/en-us/opend/newApiPages/?id=7ec52e28-7773-11ed-9966-0242ac110003
1300
+ https://www.htx.com/en-us/opend/newApiPages/?id=10000084-77b7-11ed-9966-0242ac110003
1301
+ https://www.htx.com/en-us/opend/newApiPages/?id=8cb7dcca-77b5-11ed-9966-0242ac110003
1302
+ https://www.htx.com/en-us/opend/newApiPages/?id=28c34995-77ae-11ed-9966-0242ac110003
1303
+
1266
1304
  :param dict [params]: extra parameters specific to the exchange API endpoint
1267
1305
  :returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
1268
1306
  """
@@ -1332,7 +1370,7 @@ class htx(ccxt.async_support.htx):
1332
1370
  else:
1333
1371
  # subscribe to all
1334
1372
  channel = prefix + '.' + '*'
1335
- subscriptionParams = {
1373
+ subscriptionParams: dict = {
1336
1374
  'type': type,
1337
1375
  'subType': subType,
1338
1376
  'margin': marginMode,
@@ -1539,7 +1577,7 @@ class htx(ccxt.async_support.htx):
1539
1577
  account = self.account()
1540
1578
  account['free'] = self.safe_string_2(balance, 'margin_balance', 'margin_available')
1541
1579
  account['used'] = self.safe_string(balance, 'margin_frozen')
1542
- accountsByCode = {}
1580
+ accountsByCode: dict = {}
1543
1581
  accountsByCode[code] = account
1544
1582
  symbol = market['symbol']
1545
1583
  self.balance[symbol] = self.safe_balance(accountsByCode)
@@ -1685,7 +1723,7 @@ class htx(ccxt.async_support.htx):
1685
1723
  type = self.safe_string(parts, 0)
1686
1724
  if type == 'market':
1687
1725
  methodName = self.safe_string(parts, 2)
1688
- methods = {
1726
+ methods: dict = {
1689
1727
  'depth': self.handle_order_book,
1690
1728
  'mbp': self.handle_order_book,
1691
1729
  'detail': self.handle_ticker,
@@ -1770,7 +1808,7 @@ class htx(ccxt.async_support.htx):
1770
1808
  # "data": {"user-id": "35930539"}
1771
1809
  # }
1772
1810
  #
1773
- promise = client.futures['authenticated']
1811
+ promise = client.futures['auth']
1774
1812
  promise.resolve(message)
1775
1813
 
1776
1814
  def handle_error_message(self, client: Client, message):
@@ -1798,6 +1836,12 @@ class htx(ccxt.async_support.htx):
1798
1836
  # 'err-msg': "Non - single account user is not available, please check through the cross and isolated account asset interface",
1799
1837
  # "ts": 1698419490189
1800
1838
  # }
1839
+ # {
1840
+ # "action":"req",
1841
+ # "code":2002,
1842
+ # "ch":"auth",
1843
+ # "message":"auth.fail"
1844
+ # }
1801
1845
  #
1802
1846
  status = self.safe_string(message, 'status')
1803
1847
  if status == 'error':
@@ -1808,6 +1852,7 @@ class htx(ccxt.async_support.htx):
1808
1852
  errorCode = self.safe_string(message, 'err-code')
1809
1853
  try:
1810
1854
  self.throw_exactly_matched_exception(self.exceptions['ws']['exact'], errorCode, self.json(message))
1855
+ raise ExchangeError(self.json(message))
1811
1856
  except Exception as e:
1812
1857
  messageHash = self.safe_string(subscription, 'messageHash')
1813
1858
  client.reject(e, messageHash)
@@ -1815,11 +1860,12 @@ class htx(ccxt.async_support.htx):
1815
1860
  if id in client.subscriptions:
1816
1861
  del client.subscriptions[id]
1817
1862
  return False
1818
- code = self.safe_integer_2(message, 'code', 'err-code')
1819
- if code is not None and ((code != 200) and (code != 0)):
1863
+ code = self.safe_string_2(message, 'code', 'err-code')
1864
+ if code is not None and ((code != '200') and (code != '0')):
1820
1865
  feedback = self.id + ' ' + self.json(message)
1821
1866
  try:
1822
1867
  self.throw_exactly_matched_exception(self.exceptions['ws']['exact'], code, feedback)
1868
+ raise ExchangeError(feedback)
1823
1869
  except Exception as e:
1824
1870
  if isinstance(e, AuthenticationError):
1825
1871
  client.reject(e, 'auth')
@@ -2073,7 +2119,7 @@ class htx(ccxt.async_support.htx):
2073
2119
 
2074
2120
  def get_url_by_market_type(self, type, isLinear=True, isPrivate=False, isFeed=False):
2075
2121
  api = self.safe_string(self.options, 'api', 'api')
2076
- hostname = {'hostname': self.hostname}
2122
+ hostname: dict = {'hostname': self.hostname}
2077
2123
  hostnameURL = None
2078
2124
  url = None
2079
2125
  if type == 'spot':
@@ -2093,11 +2139,11 @@ class htx(ccxt.async_support.htx):
2093
2139
 
2094
2140
  async def subscribe_public(self, url, symbol, messageHash, method=None, params={}):
2095
2141
  requestId = self.request_id()
2096
- request = {
2142
+ request: dict = {
2097
2143
  'sub': messageHash,
2098
2144
  'id': requestId,
2099
2145
  }
2100
- subscription = {
2146
+ subscription: dict = {
2101
2147
  'id': requestId,
2102
2148
  'messageHash': messageHash,
2103
2149
  'symbol': symbol,
@@ -2109,7 +2155,7 @@ class htx(ccxt.async_support.htx):
2109
2155
 
2110
2156
  async def subscribe_private(self, channel, messageHash, type, subtype, params={}, subscriptionParams={}):
2111
2157
  requestId = self.request_id()
2112
- subscription = {
2158
+ subscription: dict = {
2113
2159
  'id': requestId,
2114
2160
  'messageHash': messageHash,
2115
2161
  'params': params,
@@ -2130,13 +2176,11 @@ class htx(ccxt.async_support.htx):
2130
2176
  isLinear = subtype == 'linear'
2131
2177
  url = self.get_url_by_market_type(type, isLinear, True)
2132
2178
  hostname = self.urls['hostnames']['spot'] if (type == 'spot') else self.urls['hostnames']['contract']
2133
- authParams = {
2179
+ authParams: dict = {
2134
2180
  'type': type,
2135
2181
  'url': url,
2136
2182
  'hostname': hostname,
2137
2183
  }
2138
- if type == 'spot':
2139
- self.options['ws']['gunzip'] = False
2140
2184
  await self.authenticate(authParams)
2141
2185
  return await self.watch(url, messageHash, self.extend(request, params), channel, extendedSubsription)
2142
2186
 
@@ -2147,7 +2191,7 @@ class htx(ccxt.async_support.htx):
2147
2191
  if url is None or hostname is None or type is None:
2148
2192
  raise ArgumentsRequired(self.id + ' authenticate requires a url, hostname and type argument')
2149
2193
  self.check_required_credentials()
2150
- messageHash = 'authenticated'
2194
+ messageHash = 'auth'
2151
2195
  relativePath = url.replace('wss://' + hostname, '')
2152
2196
  client = self.client(url)
2153
2197
  future = client.future(messageHash)
@@ -2175,7 +2219,7 @@ class htx(ccxt.async_support.htx):
2175
2219
  signature = self.hmac(self.encode(payload), self.encode(self.secret), hashlib.sha256, 'base64')
2176
2220
  request = None
2177
2221
  if type == 'spot':
2178
- newParams = {
2222
+ newParams: dict = {
2179
2223
  'authType': 'api',
2180
2224
  'accessKey': self.apiKey,
2181
2225
  'signatureMethod': 'HmacSHA256',
@@ -2199,10 +2243,10 @@ class htx(ccxt.async_support.htx):
2199
2243
  'Signature': signature,
2200
2244
  }
2201
2245
  requestId = self.request_id()
2202
- subscription = {
2246
+ subscription: dict = {
2203
2247
  'id': requestId,
2204
2248
  'messageHash': messageHash,
2205
2249
  'params': params,
2206
2250
  }
2207
2251
  self.watch(url, messageHash, request, messageHash, subscription)
2208
- return future
2252
+ return await future
ccxt/pro/huobijp.py CHANGED
@@ -21,6 +21,7 @@ class huobijp(ccxt.async_support.huobijp):
21
21
  'watchTickers': False, # for now
22
22
  'watchTicker': True,
23
23
  'watchTrades': True,
24
+ 'watchTradesForSymbols': False,
24
25
  'watchBalance': False, # for now
25
26
  'watchOHLCV': True,
26
27
  },
@@ -62,14 +63,14 @@ class huobijp(ccxt.async_support.huobijp):
62
63
  # only supports a limit of 150 at self time
63
64
  messageHash = 'market.' + market['id'] + '.detail'
64
65
  api = self.safe_string(self.options, 'api', 'api')
65
- hostname = {'hostname': self.hostname}
66
+ hostname: dict = {'hostname': self.hostname}
66
67
  url = self.implode_params(self.urls['api']['ws'][api]['public'], hostname)
67
68
  requestId = self.request_id()
68
- request = {
69
+ request: dict = {
69
70
  'sub': messageHash,
70
71
  'id': requestId,
71
72
  }
72
- subscription = {
73
+ subscription: dict = {
73
74
  'id': requestId,
74
75
  'messageHash': messageHash,
75
76
  'symbol': symbol,
@@ -124,14 +125,14 @@ class huobijp(ccxt.async_support.huobijp):
124
125
  # only supports a limit of 150 at self time
125
126
  messageHash = 'market.' + market['id'] + '.trade.detail'
126
127
  api = self.safe_string(self.options, 'api', 'api')
127
- hostname = {'hostname': self.hostname}
128
+ hostname: dict = {'hostname': self.hostname}
128
129
  url = self.implode_params(self.urls['api']['ws'][api]['public'], hostname)
129
130
  requestId = self.request_id()
130
- request = {
131
+ request: dict = {
131
132
  'sub': messageHash,
132
133
  'id': requestId,
133
134
  }
134
- subscription = {
135
+ subscription: dict = {
135
136
  'id': requestId,
136
137
  'messageHash': messageHash,
137
138
  'symbol': symbol,
@@ -197,14 +198,14 @@ class huobijp(ccxt.async_support.huobijp):
197
198
  interval = self.safe_string(self.timeframes, timeframe, timeframe)
198
199
  messageHash = 'market.' + market['id'] + '.kline.' + interval
199
200
  api = self.safe_string(self.options, 'api', 'api')
200
- hostname = {'hostname': self.hostname}
201
+ hostname: dict = {'hostname': self.hostname}
201
202
  url = self.implode_params(self.urls['api']['ws'][api]['public'], hostname)
202
203
  requestId = self.request_id()
203
- request = {
204
+ request: dict = {
204
205
  'sub': messageHash,
205
206
  'id': requestId,
206
207
  }
207
- subscription = {
208
+ subscription: dict = {
208
209
  'id': requestId,
209
210
  'messageHash': messageHash,
210
211
  'symbol': symbol,
@@ -268,14 +269,14 @@ class huobijp(ccxt.async_support.huobijp):
268
269
  limit = 150 if (limit is None) else limit
269
270
  messageHash = 'market.' + market['id'] + '.mbp.' + str(limit)
270
271
  api = self.safe_string(self.options, 'api', 'api')
271
- hostname = {'hostname': self.hostname}
272
+ hostname: dict = {'hostname': self.hostname}
272
273
  url = self.implode_params(self.urls['api']['ws'][api]['public'], hostname)
273
274
  requestId = self.request_id()
274
- request = {
275
+ request: dict = {
275
276
  'sub': messageHash,
276
277
  'id': requestId,
277
278
  }
278
- subscription = {
279
+ subscription: dict = {
279
280
  'id': requestId,
280
281
  'messageHash': messageHash,
281
282
  'symbol': symbol,
@@ -328,16 +329,16 @@ class huobijp(ccxt.async_support.huobijp):
328
329
  limit = self.safe_integer(subscription, 'limit')
329
330
  params = self.safe_value(subscription, 'params')
330
331
  api = self.safe_string(self.options, 'api', 'api')
331
- hostname = {'hostname': self.hostname}
332
+ hostname: dict = {'hostname': self.hostname}
332
333
  url = self.implode_params(self.urls['api']['ws'][api]['public'], hostname)
333
334
  requestId = self.request_id()
334
- request = {
335
+ request: dict = {
335
336
  'req': messageHash,
336
337
  'id': requestId,
337
338
  }
338
339
  # self is a temporary subscription by a specific requestId
339
340
  # it has a very short lifetime until the snapshot is received over ws
340
- snapshotSubscription = {
341
+ snapshotSubscription: dict = {
341
342
  'id': requestId,
342
343
  'messageHash': messageHash,
343
344
  'symbol': symbol,
@@ -500,7 +501,7 @@ class huobijp(ccxt.async_support.huobijp):
500
501
  type = self.safe_string(parts, 0)
501
502
  if type == 'market':
502
503
  methodName = self.safe_string(parts, 2)
503
- methods = {
504
+ methods: dict = {
504
505
  'mbp': self.handle_order_book,
505
506
  'detail': self.handle_ticker,
506
507
  'trade': self.handle_trades,