ccxt 4.2.76__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 +25 -0
  44. ccxt/abstract/kucoinfutures.py +35 -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 +3513 -1511
  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 +3105 -881
  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 +239 -50
  89. ccxt/async_support/bitget.py +1513 -563
  90. ccxt/async_support/bithumb.py +201 -67
  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 +403 -150
  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 +2326 -1255
  107. ccxt/async_support/cex.py +1409 -1329
  108. ccxt/async_support/coinbase.py +1455 -288
  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 +467 -158
  125. ccxt/async_support/deribit.py +558 -324
  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 +1473 -464
  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 +1634 -269
  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 +1050 -355
  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 +1777 -455
  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 +1155 -295
  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 +1729 -482
  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 +3513 -1511
  187. ccxt/binancecoinm.py +2 -1
  188. ccxt/binanceus.py +12 -1
  189. ccxt/binanceusdm.py +3 -1
  190. ccxt/bingx.py +3105 -881
  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 +239 -50
  197. ccxt/bitget.py +1513 -563
  198. ccxt/bithumb.py +200 -67
  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 +403 -150
  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 +2326 -1255
  215. ccxt/cex.py +1408 -1329
  216. ccxt/coinbase.py +1455 -288
  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 +467 -158
  233. ccxt/deribit.py +558 -324
  234. ccxt/digifinex.py +340 -223
  235. ccxt/ellipx.py +1826 -0
  236. ccxt/exmo.py +259 -128
  237. ccxt/gate.py +1473 -464
  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 +1633 -269
  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 +1050 -355
  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 +1777 -455
  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 +63 -15
  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 +204 -82
  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 +967 -661
  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 +168 -32
  309. ccxt/pro/exmo.py +253 -21
  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 +93 -34
  336. ccxt/pro/poloniex.py +129 -50
  337. ccxt/pro/poloniexfutures.py +53 -32
  338. ccxt/pro/probit.py +93 -86
  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 +486 -70
  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} +465 -407
  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} +465 -409
  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 +1155 -295
  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.76.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.76.dist-info/METADATA +0 -626
  545. ccxt-4.2.76.dist-info/RECORD +0 -534
  546. {ccxt-4.2.76.dist-info → ccxt-4.4.48.dist-info}/top_level.txt +0 -0
ccxt/idex.py CHANGED
@@ -6,9 +6,10 @@
6
6
  from ccxt.base.exchange import Exchange
7
7
  from ccxt.abstract.idex import ImplicitAPI
8
8
  import hashlib
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, TradingFees, 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 BadRequest
13
14
  from ccxt.base.errors import InsufficientFunds
14
15
  from ccxt.base.errors import InvalidAddress
@@ -16,10 +17,8 @@ from ccxt.base.errors import InvalidOrder
16
17
  from ccxt.base.errors import NotSupported
17
18
  from ccxt.base.errors import DDoSProtection
18
19
  from ccxt.base.errors import ExchangeNotAvailable
19
- from ccxt.base.errors import AuthenticationError
20
20
  from ccxt.base.decimal_to_precision import ROUND
21
21
  from ccxt.base.decimal_to_precision import TRUNCATE
22
- from ccxt.base.decimal_to_precision import DECIMAL_PLACES
23
22
  from ccxt.base.decimal_to_precision import TICK_SIZE
24
23
  from ccxt.base.decimal_to_precision import PAD_WITH_ZERO
25
24
  from ccxt.base.precise import Precise
@@ -35,6 +34,7 @@ class idex(Exchange, ImplicitAPI):
35
34
  'rateLimit': 1000,
36
35
  'version': 'v3',
37
36
  'pro': True,
37
+ 'dex': True,
38
38
  'certified': False,
39
39
  'requiresWeb3': True,
40
40
  'has': {
@@ -88,8 +88,11 @@ class idex(Exchange, ImplicitAPI):
88
88
  'fetchOrderBook': True,
89
89
  'fetchOrders': False,
90
90
  'fetchPosition': False,
91
+ 'fetchPositionHistory': False,
91
92
  'fetchPositionMode': False,
92
93
  'fetchPositions': False,
94
+ 'fetchPositionsForSymbol': False,
95
+ 'fetchPositionsHistory': False,
93
96
  'fetchPositionsRisk': False,
94
97
  'fetchPremiumIndexOHLCV': False,
95
98
  'fetchStatus': True,
@@ -103,6 +106,7 @@ class idex(Exchange, ImplicitAPI):
103
106
  'fetchWithdrawal': True,
104
107
  'fetchWithdrawals': True,
105
108
  'reduceMargin': False,
109
+ 'sandbox': True,
106
110
  'setLeverage': False,
107
111
  'setMarginMode': False,
108
112
  'setPositionMode': False,
@@ -173,13 +177,15 @@ class idex(Exchange, ImplicitAPI):
173
177
  'network': 'MATIC',
174
178
  },
175
179
  'exceptions': {
176
- 'INVALID_ORDER_QUANTITY': InvalidOrder,
177
- 'INSUFFICIENT_FUNDS': InsufficientFunds,
178
- 'SERVICE_UNAVAILABLE': ExchangeNotAvailable,
179
- 'EXCEEDED_RATE_LIMIT': DDoSProtection,
180
- 'INVALID_PARAMETER': BadRequest,
181
- 'WALLET_NOT_ASSOCIATED': InvalidAddress,
182
- 'INVALID_WALLET_SIGNATURE': AuthenticationError,
180
+ 'exact': {
181
+ 'INVALID_ORDER_QUANTITY': InvalidOrder,
182
+ 'INSUFFICIENT_FUNDS': InsufficientFunds,
183
+ 'SERVICE_UNAVAILABLE': ExchangeNotAvailable,
184
+ 'EXCEEDED_RATE_LIMIT': DDoSProtection,
185
+ 'INVALID_PARAMETER': BadRequest,
186
+ 'WALLET_NOT_ASSOCIATED': InvalidAddress,
187
+ 'INVALID_WALLET_SIGNATURE': AuthenticationError,
188
+ },
183
189
  },
184
190
  'requiredCredentials': {
185
191
  'walletAddress': True,
@@ -199,15 +205,15 @@ class idex(Exchange, ImplicitAPI):
199
205
  # {"code":"INVALID_PARAMETER","message":"invalid value provided for request parameter \"price\": all quantities and prices must be below 100 billion, above 0, need to be provided, and always require 4 decimals ending with 4 zeroes"}
200
206
  #
201
207
  market = self.market(symbol)
202
- info = self.safe_value(market, 'info', {})
203
- quoteAssetPrecision = self.safe_integer(info, 'quoteAssetPrecision')
204
208
  price = self.decimal_to_precision(price, ROUND, market['precision']['price'], self.precisionMode)
205
- return self.decimal_to_precision(price, TRUNCATE, quoteAssetPrecision, DECIMAL_PLACES, PAD_WITH_ZERO)
209
+ return self.decimal_to_precision(price, TRUNCATE, market['precision']['quote'], TICK_SIZE, PAD_WITH_ZERO)
206
210
 
207
- def fetch_markets(self, params={}):
211
+ def fetch_markets(self, params={}) -> List[Market]:
208
212
  """
209
213
  retrieves data on all markets for idex
210
- :see: https://api-docs-v3.idex.io/#get-markets
214
+
215
+ https://api-docs-v3.idex.io/#get-markets
216
+
211
217
  :param dict [params]: extra parameters specific to the exchange API endpoint
212
218
  :returns dict[]: an array of objects representing market data
213
219
  """
@@ -307,6 +313,8 @@ class idex(Exchange, ImplicitAPI):
307
313
  'precision': {
308
314
  'amount': basePrecision,
309
315
  'price': self.safe_number(entry, 'tickSize'),
316
+ 'base': basePrecision,
317
+ 'quote': quotePrecision,
310
318
  },
311
319
  'limits': {
312
320
  'leverage': {
@@ -334,14 +342,16 @@ class idex(Exchange, ImplicitAPI):
334
342
  def fetch_ticker(self, symbol: str, params={}) -> Ticker:
335
343
  """
336
344
  fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
337
- :see: https://api-docs-v3.idex.io/#get-tickers
345
+
346
+ https://api-docs-v3.idex.io/#get-tickers
347
+
338
348
  :param str symbol: unified symbol of the market to fetch the ticker for
339
349
  :param dict [params]: extra parameters specific to the exchange API endpoint
340
350
  :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
341
351
  """
342
352
  self.load_markets()
343
353
  market = self.market(symbol)
344
- request = {
354
+ request: dict = {
345
355
  'market': market['id'],
346
356
  }
347
357
  # [
@@ -363,13 +373,15 @@ class idex(Exchange, ImplicitAPI):
363
373
  # }
364
374
  # ]
365
375
  response = self.publicGetTickers(self.extend(request, params))
366
- ticker = self.safe_value(response, 0)
376
+ ticker = self.safe_dict(response, 0)
367
377
  return self.parse_ticker(ticker, market)
368
378
 
369
379
  def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
370
380
  """
371
381
  fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
372
- :see: https://api-docs-v3.idex.io/#get-tickers
382
+
383
+ https://api-docs-v3.idex.io/#get-tickers
384
+
373
385
  :param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
374
386
  :param dict [params]: extra parameters specific to the exchange API endpoint
375
387
  :returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
@@ -396,7 +408,7 @@ class idex(Exchange, ImplicitAPI):
396
408
  response = self.publicGetTickers(params)
397
409
  return self.parse_tickers(response, symbols)
398
410
 
399
- def parse_ticker(self, ticker, market: Market = None) -> Ticker:
411
+ def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
400
412
  # {
401
413
  # "market": "DIL-ETH",
402
414
  # "time": 1598367493008,
@@ -444,7 +456,9 @@ class idex(Exchange, ImplicitAPI):
444
456
  def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
445
457
  """
446
458
  fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
447
- :see: https://api-docs-v3.idex.io/#get-candles
459
+
460
+ https://api-docs-v3.idex.io/#get-candles
461
+
448
462
  :param str symbol: unified symbol of the market to fetch OHLCV data for
449
463
  :param str timeframe: the length of time each candle represents
450
464
  :param int [since]: timestamp in ms of the earliest candle to fetch
@@ -454,14 +468,14 @@ class idex(Exchange, ImplicitAPI):
454
468
  """
455
469
  self.load_markets()
456
470
  market = self.market(symbol)
457
- request = {
471
+ request: dict = {
458
472
  'market': market['id'],
459
473
  'interval': timeframe,
460
474
  }
461
475
  if since is not None:
462
476
  request['start'] = since
463
477
  if limit is not None:
464
- request['limit'] = limit
478
+ request['limit'] = min(limit, 1000)
465
479
  response = self.publicGetCandles(self.extend(request, params))
466
480
  if isinstance(response, list):
467
481
  # [
@@ -501,7 +515,9 @@ class idex(Exchange, ImplicitAPI):
501
515
  def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
502
516
  """
503
517
  get the list of most recent trades for a particular symbol
504
- :see: https://api-docs-v3.idex.io/#get-trades
518
+
519
+ https://api-docs-v3.idex.io/#get-trades
520
+
505
521
  :param str symbol: unified symbol of the market to fetch trades for
506
522
  :param int [since]: timestamp in ms of the earliest trade to fetch
507
523
  :param int [limit]: the maximum amount of trades to fetch
@@ -510,7 +526,7 @@ class idex(Exchange, ImplicitAPI):
510
526
  """
511
527
  self.load_markets()
512
528
  market = self.market(symbol)
513
- request = {
529
+ request: dict = {
514
530
  'market': market['id'],
515
531
  }
516
532
  if since is not None:
@@ -531,7 +547,7 @@ class idex(Exchange, ImplicitAPI):
531
547
  response = self.publicGetTrades(self.extend(request, params))
532
548
  return self.parse_trades(response, market, since, limit)
533
549
 
534
- def parse_trade(self, trade, market: Market = None) -> Trade:
550
+ def parse_trade(self, trade: dict, market: Market = None) -> Trade:
535
551
  #
536
552
  # public trades
537
553
  # {
@@ -607,17 +623,19 @@ class idex(Exchange, ImplicitAPI):
607
623
  'fee': fee,
608
624
  }, market)
609
625
 
610
- def fetch_trading_fees(self, params={}):
626
+ def fetch_trading_fees(self, params={}) -> TradingFees:
611
627
  """
612
628
  fetch the trading fees for multiple markets
613
- :see: https://api-docs-v3.idex.io/#get-api-account
629
+
630
+ https://api-docs-v3.idex.io/#get-api-account
631
+
614
632
  :param dict [params]: extra parameters specific to the exchange API endpoint
615
633
  :returns dict: a dictionary of `fee structures <https://docs.ccxt.com/#/?id=fee-structure>` indexed by market symbols
616
634
  """
617
635
  self.check_required_credentials()
618
636
  self.load_markets()
619
637
  nonce = self.uuidv1()
620
- request = {
638
+ request: dict = {
621
639
  'nonce': nonce,
622
640
  }
623
641
  response = None
@@ -637,7 +655,7 @@ class idex(Exchange, ImplicitAPI):
637
655
  #
638
656
  maker = self.safe_number(response, 'makerFeeRate')
639
657
  taker = self.safe_number(response, 'takerFeeRate')
640
- result = {}
658
+ result: dict = {}
641
659
  for i in range(0, len(self.symbols)):
642
660
  symbol = self.symbols[i]
643
661
  result[symbol] = {
@@ -653,7 +671,9 @@ class idex(Exchange, ImplicitAPI):
653
671
  def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
654
672
  """
655
673
  fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
656
- :see: https://api-docs-v3.idex.io/#get-order-books
674
+
675
+ https://api-docs-v3.idex.io/#get-order-books
676
+
657
677
  :param str symbol: unified symbol of the market to fetch the order book for
658
678
  :param int [limit]: the maximum amount of order book entries to return
659
679
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -661,7 +681,7 @@ class idex(Exchange, ImplicitAPI):
661
681
  """
662
682
  self.load_markets()
663
683
  market = self.market(symbol)
664
- request = {
684
+ request: dict = {
665
685
  'market': market['id'],
666
686
  'level': 2,
667
687
  }
@@ -710,10 +730,12 @@ class idex(Exchange, ImplicitAPI):
710
730
  descending = side == 'bids'
711
731
  return self.sort_by(result, 0, descending)
712
732
 
713
- def fetch_currencies(self, params={}):
733
+ def fetch_currencies(self, params={}) -> Currencies:
714
734
  """
715
735
  fetches all available currencies on an exchange
716
- :see: https://api-docs-v3.idex.io/#get-assets
736
+
737
+ https://api-docs-v3.idex.io/#get-assets
738
+
717
739
  :param dict [params]: extra parameters specific to the exchange API endpoint
718
740
  :returns dict: an associative dictionary of currencies
719
741
  """
@@ -730,7 +752,7 @@ class idex(Exchange, ImplicitAPI):
730
752
  # },
731
753
  # ]
732
754
  #
733
- result = {}
755
+ result: dict = {}
734
756
  for i in range(0, len(response)):
735
757
  entry = response[i]
736
758
  name = self.safe_string(entry, 'name')
@@ -756,7 +778,7 @@ class idex(Exchange, ImplicitAPI):
756
778
  return result
757
779
 
758
780
  def parse_balance(self, response) -> Balances:
759
- result = {
781
+ result: dict = {
760
782
  'info': response,
761
783
  'timestamp': None,
762
784
  'datetime': None,
@@ -775,14 +797,16 @@ class idex(Exchange, ImplicitAPI):
775
797
  def fetch_balance(self, params={}) -> Balances:
776
798
  """
777
799
  query for balance and get the amount of funds available for trading or funds locked in orders
778
- :see: https://api-docs-v3.idex.io/#get-balances
800
+
801
+ https://api-docs-v3.idex.io/#get-balances
802
+
779
803
  :param dict [params]: extra parameters specific to the exchange API endpoint
780
804
  :returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
781
805
  """
782
806
  self.check_required_credentials()
783
807
  self.load_markets()
784
808
  nonce1 = self.uuidv1()
785
- request = {
809
+ request: dict = {
786
810
  'nonce': nonce1,
787
811
  'wallet': self.walletAddress,
788
812
  }
@@ -813,7 +837,9 @@ class idex(Exchange, ImplicitAPI):
813
837
  def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
814
838
  """
815
839
  fetch all trades made by the user
816
- :see: https://api-docs-v3.idex.io/#get-fills
840
+
841
+ https://api-docs-v3.idex.io/#get-fills
842
+
817
843
  :param str symbol: unified market symbol
818
844
  :param int [since]: the earliest time in ms to fetch trades for
819
845
  :param int [limit]: the maximum number of trades structures to retrieve
@@ -823,7 +849,7 @@ class idex(Exchange, ImplicitAPI):
823
849
  self.check_required_credentials()
824
850
  self.load_markets()
825
851
  market = None
826
- request = {
852
+ request: dict = {
827
853
  'nonce': self.uuidv1(),
828
854
  'wallet': self.walletAddress,
829
855
  }
@@ -872,12 +898,15 @@ class idex(Exchange, ImplicitAPI):
872
898
  def fetch_order(self, id: str, symbol: Str = None, params={}):
873
899
  """
874
900
  fetches information on an order made by the user
875
- :see: https://api-docs-v3.idex.io/#get-orders
901
+
902
+ https://api-docs-v3.idex.io/#get-orders
903
+
904
+ :param str id: order id
876
905
  :param str symbol: unified symbol of the market the order was made in
877
906
  :param dict [params]: extra parameters specific to the exchange API endpoint
878
907
  :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
879
908
  """
880
- request = {
909
+ request: dict = {
881
910
  'orderId': id,
882
911
  }
883
912
  return self.fetch_orders_helper(symbol, None, None, self.extend(request, params))
@@ -885,14 +914,16 @@ class idex(Exchange, ImplicitAPI):
885
914
  def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
886
915
  """
887
916
  fetch all unfilled currently open orders
888
- :see: https://api-docs-v3.idex.io/#get-orders
917
+
918
+ https://api-docs-v3.idex.io/#get-orders
919
+
889
920
  :param str symbol: unified market symbol
890
921
  :param int [since]: the earliest time in ms to fetch open orders for
891
922
  :param int [limit]: the maximum number of open orders structures to retrieve
892
923
  :param dict [params]: extra parameters specific to the exchange API endpoint
893
924
  :returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
894
925
  """
895
- request = {
926
+ request: dict = {
896
927
  'closed': False,
897
928
  }
898
929
  return self.fetch_orders_helper(symbol, since, limit, self.extend(request, params))
@@ -900,21 +931,23 @@ class idex(Exchange, ImplicitAPI):
900
931
  def fetch_closed_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
901
932
  """
902
933
  fetches information on multiple closed orders made by the user
903
- :see: https://api-docs-v3.idex.io/#get-orders
934
+
935
+ https://api-docs-v3.idex.io/#get-orders
936
+
904
937
  :param str symbol: unified market symbol of the market orders were made in
905
938
  :param int [since]: the earliest time in ms to fetch orders for
906
939
  :param int [limit]: the maximum number of order structures to retrieve
907
940
  :param dict [params]: extra parameters specific to the exchange API endpoint
908
941
  :returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
909
942
  """
910
- request = {
943
+ request: dict = {
911
944
  'closed': True,
912
945
  }
913
946
  return self.fetch_orders_helper(symbol, since, limit, self.extend(request, params))
914
947
 
915
948
  def fetch_orders_helper(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
916
949
  self.load_markets()
917
- request = {
950
+ request: dict = {
918
951
  'nonce': self.uuidv1(),
919
952
  'wallet': self.walletAddress,
920
953
  }
@@ -993,9 +1026,9 @@ class idex(Exchange, ImplicitAPI):
993
1026
  else:
994
1027
  return self.parse_order(response, market)
995
1028
 
996
- def parse_order_status(self, status):
1029
+ def parse_order_status(self, status: Str):
997
1030
  # https://docs.idex.io/#order-states-amp-lifecycle
998
- statuses = {
1031
+ statuses: dict = {
999
1032
  'active': 'open',
1000
1033
  'partiallyFilled': 'open',
1001
1034
  'rejected': 'canceled',
@@ -1003,7 +1036,7 @@ class idex(Exchange, ImplicitAPI):
1003
1036
  }
1004
1037
  return self.safe_string(statuses, status, status)
1005
1038
 
1006
- def parse_order(self, order, market: Market = None) -> Order:
1039
+ def parse_order(self, order: dict, market: Market = None) -> Order:
1007
1040
  #
1008
1041
  # {
1009
1042
  # "market": "DIL-ETH",
@@ -1065,7 +1098,6 @@ class idex(Exchange, ImplicitAPI):
1065
1098
  'postOnly': None,
1066
1099
  'side': side,
1067
1100
  'price': price,
1068
- 'stopPrice': None,
1069
1101
  'triggerPrice': None,
1070
1102
  'amount': amount,
1071
1103
  'cost': None,
@@ -1092,7 +1124,7 @@ class idex(Exchange, ImplicitAPI):
1092
1124
  # "totalPortfolioValueUsd": "0.00",
1093
1125
  # "time": 1598468353626
1094
1126
  # }
1095
- request = {
1127
+ request: dict = {
1096
1128
  'parameters': {
1097
1129
  'nonce': nonce,
1098
1130
  'wallet': walletAddress,
@@ -1105,12 +1137,14 @@ class idex(Exchange, ImplicitAPI):
1105
1137
  def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
1106
1138
  """
1107
1139
  create a trade order, https://docs.idex.io/#create-order
1108
- :see: https://api-docs-v3.idex.io/#create-order
1140
+
1141
+ https://api-docs-v3.idex.io/#create-order
1142
+
1109
1143
  :param str symbol: unified symbol of the market to create an order in
1110
1144
  :param str type: 'market' or 'limit'
1111
1145
  :param str side: 'buy' or 'sell'
1112
1146
  :param float amount: how much of currency you want to trade in units of base currency
1113
- :param float [price]: the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders
1147
+ :param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
1114
1148
  :param dict [params]: extra parameters specific to the exchange API endpoint
1115
1149
  :param bool [params.test]: set to True to test an order, no order will be created but the request will be validated
1116
1150
  :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
@@ -1122,18 +1156,19 @@ class idex(Exchange, ImplicitAPI):
1122
1156
  market = self.market(symbol)
1123
1157
  nonce = self.uuidv1()
1124
1158
  typeEnum = None
1125
- stopLossTypeEnums = {
1159
+ stopLossTypeEnums: dict = {
1126
1160
  'stopLoss': 3,
1127
1161
  'stopLossLimit': 4,
1128
1162
  'takeProfit': 5,
1129
1163
  'takeProfitLimit': 6,
1130
1164
  }
1131
- stopPriceString = None
1132
- if (type == 'stopLossLimit') or (type == 'takeProfitLimit') or ('stopPrice' in params):
1133
- if not ('stopPrice' in params):
1134
- raise BadRequest(self.id + ' createOrder() stopPrice is a required parameter for ' + type + 'orders')
1135
- stopPriceString = self.price_to_precision(symbol, params['stopPrice'])
1136
- limitTypeEnums = {
1165
+ triggerPrice = self.safe_string(params, 'triggerPrice', 'stopPrice')
1166
+ triggerPriceString = None
1167
+ if (type == 'stopLossLimit') or (type == 'takeProfitLimit'):
1168
+ if triggerPrice is None:
1169
+ raise BadRequest(self.id + ' createOrder() triggerPrice is a required parameter for ' + type + 'orders')
1170
+ triggerPriceString = self.price_to_precision(symbol, triggerPrice)
1171
+ limitTypeEnums: dict = {
1137
1172
  'limit': 1,
1138
1173
  'limitMaker': 2,
1139
1174
  }
@@ -1166,7 +1201,7 @@ class idex(Exchange, ImplicitAPI):
1166
1201
  })
1167
1202
  amountString = self.amount_to_precision(symbol, amount)
1168
1203
  # https://docs.idex.io/#time-in-force
1169
- timeInForceEnums = {
1204
+ timeInForceEnums: dict = {
1170
1205
  'gtc': 0,
1171
1206
  'ioc': 2,
1172
1207
  'fok': 3,
@@ -1181,7 +1216,7 @@ class idex(Exchange, ImplicitAPI):
1181
1216
  asString = ', '.join(allOptions)
1182
1217
  raise BadRequest(self.id + ' ' + timeInForce + ' is not a valid timeInForce, please choose one of ' + asString)
1183
1218
  # https://docs.idex.io/#self-trade-prevention
1184
- selfTradePreventionEnums = {
1219
+ selfTradePreventionEnums: dict = {
1185
1220
  'dc': 0,
1186
1221
  'co': 1,
1187
1222
  'cn': 2,
@@ -1210,7 +1245,7 @@ class idex(Exchange, ImplicitAPI):
1210
1245
  encodedPrice = self.encode(priceString)
1211
1246
  byteArray.append(encodedPrice)
1212
1247
  if type in stopLossTypeEnums:
1213
- encodedPrice = self.encode(stopPriceString or priceString)
1248
+ encodedPrice = self.encode(triggerPriceString or priceString)
1214
1249
  byteArray.append(encodedPrice)
1215
1250
  clientOrderId = self.safe_string(params, 'clientOrderId')
1216
1251
  if clientOrderId is not None:
@@ -1224,7 +1259,7 @@ class idex(Exchange, ImplicitAPI):
1224
1259
  binary = self.binary_concat_array(allBytes)
1225
1260
  hash = self.hash(binary, 'keccak', 'hex')
1226
1261
  signature = self.sign_message_string(hash, self.privateKey)
1227
- request = {
1262
+ request: dict = {
1228
1263
  'parameters': {
1229
1264
  'nonce': nonce,
1230
1265
  'market': market['id'],
@@ -1240,7 +1275,7 @@ class idex(Exchange, ImplicitAPI):
1240
1275
  if limitOrder:
1241
1276
  request['parameters']['price'] = priceString
1242
1277
  if type in stopLossTypeEnums:
1243
- request['parameters']['stopPrice'] = stopPriceString or priceString
1278
+ request['parameters']['stopPrice'] = triggerPriceString or priceString
1244
1279
  if amountEnum == 0:
1245
1280
  request['parameters']['quantity'] = amountString
1246
1281
  else:
@@ -1285,10 +1320,12 @@ class idex(Exchange, ImplicitAPI):
1285
1320
  response = self.privatePostOrders(request)
1286
1321
  return self.parse_order(response, market)
1287
1322
 
1288
- def withdraw(self, code: str, amount: float, address, tag=None, params={}):
1323
+ def withdraw(self, code: str, amount: float, address: str, tag=None, params={}) -> Transaction:
1289
1324
  """
1290
1325
  make a withdrawal
1291
- :see: https://api-docs-v3.idex.io/#withdraw-funds
1326
+
1327
+ https://api-docs-v3.idex.io/#withdraw-funds
1328
+
1292
1329
  :param str code: unified currency code
1293
1330
  :param float amount: the amount to withdraw
1294
1331
  :param str address: the address to withdraw to
@@ -1313,7 +1350,7 @@ class idex(Exchange, ImplicitAPI):
1313
1350
  binary = self.binary_concat_array(byteArray)
1314
1351
  hash = self.hash(binary, 'keccak', 'hex')
1315
1352
  signature = self.sign_message_string(hash, self.privateKey)
1316
- request = {
1353
+ request: dict = {
1317
1354
  'parameters': {
1318
1355
  'nonce': nonce,
1319
1356
  'wallet': address,
@@ -1340,7 +1377,9 @@ class idex(Exchange, ImplicitAPI):
1340
1377
  def cancel_all_orders(self, symbol: Str = None, params={}):
1341
1378
  """
1342
1379
  cancel all open orders
1343
- :see: https://api-docs-v3.idex.io/#cancel-order
1380
+
1381
+ https://api-docs-v3.idex.io/#cancel-order
1382
+
1344
1383
  :param str symbol: unified market symbol, only orders in the market of self symbol are cancelled when symbol is not None
1345
1384
  :param dict [params]: extra parameters specific to the exchange API endpoint
1346
1385
  :returns dict[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
@@ -1351,7 +1390,7 @@ class idex(Exchange, ImplicitAPI):
1351
1390
  if symbol is not None:
1352
1391
  market = self.market(symbol)
1353
1392
  nonce = self.uuidv1()
1354
- request = {
1393
+ request: dict = {
1355
1394
  'parameters': {
1356
1395
  'nonce': nonce,
1357
1396
  'wallet': self.walletAddress,
@@ -1376,7 +1415,9 @@ class idex(Exchange, ImplicitAPI):
1376
1415
  def cancel_order(self, id: str, symbol: Str = None, params={}):
1377
1416
  """
1378
1417
  cancels an open order
1379
- :see: https://api-docs-v3.idex.io/#cancel-order
1418
+
1419
+ https://api-docs-v3.idex.io/#cancel-order
1420
+
1380
1421
  :param str id: order id
1381
1422
  :param str symbol: unified symbol of the market the order was made in
1382
1423
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -1397,7 +1438,7 @@ class idex(Exchange, ImplicitAPI):
1397
1438
  binary = self.binary_concat_array(byteArray)
1398
1439
  hash = self.hash(binary, 'keccak', 'hex')
1399
1440
  signature = self.sign_message_string(hash, self.privateKey)
1400
- request = {
1441
+ request: dict = {
1401
1442
  'parameters': {
1402
1443
  'nonce': nonce,
1403
1444
  'wallet': self.walletAddress,
@@ -1407,23 +1448,23 @@ class idex(Exchange, ImplicitAPI):
1407
1448
  }
1408
1449
  # [{orderId: "688336f0-ec50-11ea-9842-b332f8a34d0e"}]
1409
1450
  response = self.privateDeleteOrders(self.extend(request, params))
1410
- canceledOrder = self.safe_value(response, 0)
1451
+ canceledOrder = self.safe_dict(response, 0)
1411
1452
  return self.parse_order(canceledOrder, market)
1412
1453
 
1413
- def handle_errors(self, code, reason, url, method, headers, body, response, requestHeaders, requestBody):
1454
+ def handle_errors(self, code: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
1414
1455
  errorCode = self.safe_string(response, 'code')
1415
1456
  message = self.safe_string(response, 'message')
1416
- if errorCode in self.exceptions:
1417
- Exception = self.exceptions[errorCode]
1418
- raise Exception(self.id + ' ' + message)
1419
1457
  if errorCode is not None:
1458
+ self.throw_exactly_matched_exception(self.exceptions['exact'], errorCode, message)
1420
1459
  raise ExchangeError(self.id + ' ' + message)
1421
1460
  return None
1422
1461
 
1423
1462
  def fetch_deposit(self, id: str, code: Str = None, params={}):
1424
1463
  """
1425
1464
  fetch information on a deposit
1426
- :see: https://api-docs-v3.idex.io/#get-deposits
1465
+
1466
+ https://api-docs-v3.idex.io/#get-deposits
1467
+
1427
1468
  :param str id: deposit id
1428
1469
  :param str code: not used by idex fetchDeposit()
1429
1470
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -1431,7 +1472,7 @@ class idex(Exchange, ImplicitAPI):
1431
1472
  """
1432
1473
  self.load_markets()
1433
1474
  nonce = self.uuidv1()
1434
- request = {
1475
+ request: dict = {
1435
1476
  'nonce': nonce,
1436
1477
  'wallet': self.walletAddress,
1437
1478
  'depositId': id,
@@ -1442,7 +1483,9 @@ class idex(Exchange, ImplicitAPI):
1442
1483
  def fetch_deposits(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
1443
1484
  """
1444
1485
  fetch all deposits made to an account
1445
- :see: https://api-docs-v3.idex.io/#get-deposits
1486
+
1487
+ https://api-docs-v3.idex.io/#get-deposits
1488
+
1446
1489
  :param str code: unified currency code
1447
1490
  :param int [since]: the earliest time in ms to fetch deposits for
1448
1491
  :param int [limit]: the maximum number of deposits structures to retrieve
@@ -1457,7 +1500,9 @@ class idex(Exchange, ImplicitAPI):
1457
1500
  def fetch_status(self, params={}):
1458
1501
  """
1459
1502
  the latest known information on the availability of the exchange API
1460
- :see: https://api-docs-v3.idex.io/#get-ping
1503
+
1504
+ https://api-docs-v3.idex.io/#get-ping
1505
+
1461
1506
  :param dict [params]: extra parameters specific to the exchange API endpoint
1462
1507
  :returns dict: a `status structure <https://docs.ccxt.com/#/?id=exchange-status-structure>`
1463
1508
  """
@@ -1473,7 +1518,9 @@ class idex(Exchange, ImplicitAPI):
1473
1518
  def fetch_time(self, params={}):
1474
1519
  """
1475
1520
  fetches the current integer timestamp in milliseconds from the exchange server
1476
- :see: https://api-docs-v3.idex.io/#get-time
1521
+
1522
+ https://api-docs-v3.idex.io/#get-time
1523
+
1477
1524
  :param dict [params]: extra parameters specific to the exchange API endpoint
1478
1525
  :returns int: the current integer timestamp in milliseconds from the exchange server
1479
1526
  """
@@ -1486,7 +1533,9 @@ class idex(Exchange, ImplicitAPI):
1486
1533
  def fetch_withdrawal(self, id: str, code: Str = None, params={}):
1487
1534
  """
1488
1535
  fetch data on a currency withdrawal via the withdrawal id
1489
- :see: https://api-docs-v3.idex.io/#get-withdrawals
1536
+
1537
+ https://api-docs-v3.idex.io/#get-withdrawals
1538
+
1490
1539
  :param str id: withdrawal id
1491
1540
  :param str code: not used by idex.fetchWithdrawal
1492
1541
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -1494,7 +1543,7 @@ class idex(Exchange, ImplicitAPI):
1494
1543
  """
1495
1544
  self.load_markets()
1496
1545
  nonce = self.uuidv1()
1497
- request = {
1546
+ request: dict = {
1498
1547
  'nonce': nonce,
1499
1548
  'wallet': self.walletAddress,
1500
1549
  'withdrawalId': id,
@@ -1505,7 +1554,9 @@ class idex(Exchange, ImplicitAPI):
1505
1554
  def fetch_withdrawals(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
1506
1555
  """
1507
1556
  fetch all withdrawals made from an account
1508
- :see: https://api-docs-v3.idex.io/#get-withdrawals
1557
+
1558
+ https://api-docs-v3.idex.io/#get-withdrawals
1559
+
1509
1560
  :param str code: unified currency code
1510
1561
  :param int [since]: the earliest time in ms to fetch withdrawals for
1511
1562
  :param int [limit]: the maximum number of withdrawals structures to retrieve
@@ -1520,7 +1571,7 @@ class idex(Exchange, ImplicitAPI):
1520
1571
  def fetch_transactions_helper(self, code: Str = None, since: Int = None, limit: Int = None, params={}):
1521
1572
  self.load_markets()
1522
1573
  nonce = self.uuidv1()
1523
- request = {
1574
+ request: dict = {
1524
1575
  'nonce': nonce,
1525
1576
  'wallet': self.walletAddress,
1526
1577
  }
@@ -1553,13 +1604,13 @@ class idex(Exchange, ImplicitAPI):
1553
1604
  raise NotSupported(self.id + ' fetchTransactionsHelper() not support self method')
1554
1605
  return self.parse_transactions(response, currency, since, limit)
1555
1606
 
1556
- def parse_transaction_status(self, status):
1557
- statuses = {
1607
+ def parse_transaction_status(self, status: Str):
1608
+ statuses: dict = {
1558
1609
  'mined': 'ok',
1559
1610
  }
1560
1611
  return self.safe_string(statuses, status, status)
1561
1612
 
1562
- def parse_transaction(self, transaction, currency: Currency = None) -> Transaction:
1613
+ def parse_transaction(self, transaction: dict, currency: Currency = None) -> Transaction:
1563
1614
  #
1564
1615
  # fetchDeposits
1565
1616
  #
@@ -1650,15 +1701,17 @@ class idex(Exchange, ImplicitAPI):
1650
1701
  authenticated = hasApiKey and hasSecret and hasWalletAddress and hasPrivateKey
1651
1702
  return(defaultCost / 2) if authenticated else defaultCost
1652
1703
 
1653
- def fetch_deposit_address(self, code: Str = None, params={}):
1704
+ def fetch_deposit_address(self, code: Str = None, params={}) -> DepositAddress:
1654
1705
  """
1655
1706
  fetch the Polygon address of the wallet
1656
- :see: https://api-docs-v3.idex.io/#get-wallets
1707
+
1708
+ https://api-docs-v3.idex.io/#get-wallets
1709
+
1657
1710
  :param str code: not used by idex
1658
1711
  :param dict [params]: extra parameters specific to the exchange API endpoint
1659
1712
  :returns dict: an `address structure <https://docs.ccxt.com/#/?id=address-structure>`
1660
1713
  """
1661
- request = {}
1714
+ request: dict = {}
1662
1715
  request['nonce'] = self.uuidv1()
1663
1716
  response = self.privateGetWallets(self.extend(request, params))
1664
1717
  #
@@ -1677,7 +1730,7 @@ class idex(Exchange, ImplicitAPI):
1677
1730
  #
1678
1731
  return self.parse_deposit_address(response)
1679
1732
 
1680
- def parse_deposit_address(self, depositAddress, currency: Currency = None):
1733
+ def parse_deposit_address(self, depositAddress, currency: Currency = None) -> DepositAddress:
1681
1734
  #
1682
1735
  # [
1683
1736
  # {
@@ -1699,9 +1752,9 @@ class idex(Exchange, ImplicitAPI):
1699
1752
  return {
1700
1753
  'info': depositAddress,
1701
1754
  'currency': None,
1755
+ 'network': 'MATIC',
1702
1756
  'address': address,
1703
1757
  'tag': None,
1704
- 'network': 'MATIC',
1705
1758
  }
1706
1759
 
1707
1760
  def sign(self, path, api='public', method='GET', params={}, headers=None, body=None):