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/novadax.py CHANGED
@@ -9,6 +9,7 @@ import hashlib
9
9
  from ccxt.base.types import Account, Balances, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction, TransferEntry
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 PermissionDenied
13
14
  from ccxt.base.errors import AccountNotEnabled
14
15
  from ccxt.base.errors import AccountSuspended
@@ -18,10 +19,9 @@ from ccxt.base.errors import BadSymbol
18
19
  from ccxt.base.errors import InsufficientFunds
19
20
  from ccxt.base.errors import InvalidOrder
20
21
  from ccxt.base.errors import OrderNotFound
21
- from ccxt.base.errors import CancelPending
22
22
  from ccxt.base.errors import RateLimitExceeded
23
23
  from ccxt.base.errors import OnMaintenance
24
- from ccxt.base.errors import AuthenticationError
24
+ from ccxt.base.errors import CancelPending
25
25
  from ccxt.base.decimal_to_precision import TICK_SIZE
26
26
  from ccxt.base.precise import Precise
27
27
 
@@ -89,7 +89,11 @@ class novadax(Exchange, ImplicitAPI):
89
89
  'fetchOrders': True,
90
90
  'fetchOrderTrades': True,
91
91
  'fetchPosition': False,
92
+ 'fetchPositionHistory': False,
93
+ 'fetchPositionMode': False,
92
94
  'fetchPositions': False,
95
+ 'fetchPositionsForSymbol': False,
96
+ 'fetchPositionsHistory': False,
93
97
  'fetchPositionsRisk': False,
94
98
  'fetchPremiumIndexOHLCV': False,
95
99
  'fetchTicker': True,
@@ -219,12 +223,88 @@ class novadax(Exchange, ImplicitAPI):
219
223
  'fillResponseFromRequest': True,
220
224
  },
221
225
  },
226
+ 'features': {
227
+ 'spot': {
228
+ 'sandbox': False,
229
+ 'createOrder': {
230
+ 'marginMode': False,
231
+ 'triggerPrice': True,
232
+ 'triggerDirection': True, # todo
233
+ 'triggerPriceType': None,
234
+ 'stopLossPrice': False, # todo
235
+ 'takeProfitPrice': False, # todo
236
+ 'attachedStopLossTakeProfit': None,
237
+ # todo
238
+ 'timeInForce': {
239
+ 'IOC': False,
240
+ 'FOK': False,
241
+ 'PO': False,
242
+ 'GTD': False,
243
+ },
244
+ 'hedged': False,
245
+ 'trailing': False,
246
+ 'leverage': False,
247
+ 'marketBuyByCost': True,
248
+ 'marketBuyRequiresPrice': False,
249
+ 'selfTradePrevention': False,
250
+ 'iceberg': True, # todo
251
+ },
252
+ 'createOrders': None, # todo: add implementation
253
+ 'fetchMyTrades': {
254
+ 'marginMode': False,
255
+ 'limit': 100,
256
+ 'daysBack': 100000, # todo
257
+ 'untilDays': 100000, # todo
258
+ },
259
+ 'fetchOrder': {
260
+ 'marginMode': False,
261
+ 'trigger': False,
262
+ 'trailing': False,
263
+ },
264
+ 'fetchOpenOrders': {
265
+ 'marginMode': False,
266
+ 'limit': None,
267
+ 'trigger': False,
268
+ 'trailing': False,
269
+ },
270
+ 'fetchOrders': {
271
+ 'marginMode': False,
272
+ 'limit': 100,
273
+ 'daysBack': 100000, # todo
274
+ 'untilDays': 100000, # todo
275
+ 'trigger': False,
276
+ 'trailing': False,
277
+ },
278
+ 'fetchClosedOrders': {
279
+ 'marginMode': False,
280
+ 'limit': 100,
281
+ 'daysBack': 100000, # todo
282
+ 'daysBackCanceled': 1, # todo
283
+ 'untilDays': 100000, # todo
284
+ 'trigger': False,
285
+ 'trailing': False,
286
+ },
287
+ 'fetchOHLCV': {
288
+ 'limit': None, # todo max 3000
289
+ },
290
+ },
291
+ 'swap': {
292
+ 'linear': None,
293
+ 'inverse': None,
294
+ },
295
+ 'future': {
296
+ 'linear': None,
297
+ 'inverse': None,
298
+ },
299
+ },
222
300
  })
223
301
 
224
302
  def fetch_time(self, params={}):
225
303
  """
226
304
  fetches the current integer timestamp in milliseconds from the exchange server
227
- :see: https://doc.novadax.com/en-US/#get-current-system-time
305
+
306
+ https://doc.novadax.com/en-US/#get-current-system-time
307
+
228
308
  :param dict [params]: extra parameters specific to the exchange API endpoint
229
309
  :returns int: the current integer timestamp in milliseconds from the exchange server
230
310
  """
@@ -238,10 +318,12 @@ class novadax(Exchange, ImplicitAPI):
238
318
  #
239
319
  return self.safe_integer(response, 'data')
240
320
 
241
- def fetch_markets(self, params={}):
321
+ def fetch_markets(self, params={}) -> List[Market]:
242
322
  """
243
323
  retrieves data on all markets for novadax
244
- :see: https://doc.novadax.com/en-US/#get-all-supported-trading-symbol
324
+
325
+ https://doc.novadax.com/en-US/#get-all-supported-trading-symbol
326
+
245
327
  :param dict [params]: extra parameters specific to the exchange API endpoint
246
328
  :returns dict[]: an array of objects representing market data
247
329
  """
@@ -268,7 +350,7 @@ class novadax(Exchange, ImplicitAPI):
268
350
  data = self.safe_value(response, 'data', [])
269
351
  return self.parse_markets(data)
270
352
 
271
- def parse_market(self, market) -> Market:
353
+ def parse_market(self, market: dict) -> Market:
272
354
  baseId = self.safe_string(market, 'baseCurrency')
273
355
  quoteId = self.safe_string(market, 'quoteCurrency')
274
356
  id = self.safe_string(market, 'symbol')
@@ -326,7 +408,7 @@ class novadax(Exchange, ImplicitAPI):
326
408
  'info': market,
327
409
  }
328
410
 
329
- def parse_ticker(self, ticker, market: Market = None) -> Ticker:
411
+ def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
330
412
  #
331
413
  # fetchTicker, fetchTickers
332
414
  #
@@ -376,14 +458,16 @@ class novadax(Exchange, ImplicitAPI):
376
458
  def fetch_ticker(self, symbol: str, params={}) -> Ticker:
377
459
  """
378
460
  fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
379
- :see: https://doc.novadax.com/en-US/#get-latest-ticker-for-specific-pair
461
+
462
+ https://doc.novadax.com/en-US/#get-latest-ticker-for-specific-pair
463
+
380
464
  :param str symbol: unified symbol of the market to fetch the ticker for
381
465
  :param dict [params]: extra parameters specific to the exchange API endpoint
382
466
  :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
383
467
  """
384
468
  self.load_markets()
385
469
  market = self.market(symbol)
386
- request = {
470
+ request: dict = {
387
471
  'symbol': market['id'],
388
472
  }
389
473
  response = self.publicGetMarketTicker(self.extend(request, params))
@@ -405,13 +489,15 @@ class novadax(Exchange, ImplicitAPI):
405
489
  # "message":"Success"
406
490
  # }
407
491
  #
408
- data = self.safe_value(response, 'data', {})
492
+ data = self.safe_dict(response, 'data', {})
409
493
  return self.parse_ticker(data, market)
410
494
 
411
495
  def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
412
496
  """
413
497
  fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
414
- :see: https://doc.novadax.com/en-US/#get-latest-tickers-for-all-trading-pairs
498
+
499
+ https://doc.novadax.com/en-US/#get-latest-tickers-for-all-trading-pairs
500
+
415
501
  :param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
416
502
  :param dict [params]: extra parameters specific to the exchange API endpoint
417
503
  :returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
@@ -440,7 +526,7 @@ class novadax(Exchange, ImplicitAPI):
440
526
  # }
441
527
  #
442
528
  data = self.safe_value(response, 'data', [])
443
- result = {}
529
+ result: dict = {}
444
530
  for i in range(0, len(data)):
445
531
  ticker = self.parse_ticker(data[i])
446
532
  symbol = ticker['symbol']
@@ -450,7 +536,9 @@ class novadax(Exchange, ImplicitAPI):
450
536
  def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
451
537
  """
452
538
  fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
453
- :see: https://doc.novadax.com/en-US/#get-market-depth
539
+
540
+ https://doc.novadax.com/en-US/#get-market-depth
541
+
454
542
  :param str symbol: unified symbol of the market to fetch the order book for
455
543
  :param int [limit]: the maximum amount of order book entries to return
456
544
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -458,7 +546,7 @@ class novadax(Exchange, ImplicitAPI):
458
546
  """
459
547
  self.load_markets()
460
548
  market = self.market(symbol)
461
- request = {
549
+ request: dict = {
462
550
  'symbol': market['id'],
463
551
  }
464
552
  if limit is not None:
@@ -487,7 +575,7 @@ class novadax(Exchange, ImplicitAPI):
487
575
  timestamp = self.safe_integer(data, 'timestamp')
488
576
  return self.parse_order_book(data, market['symbol'], timestamp, 'bids', 'asks')
489
577
 
490
- def parse_trade(self, trade, market: Market = None) -> Trade:
578
+ def parse_trade(self, trade: dict, market: Market = None) -> Trade:
491
579
  #
492
580
  # public fetchTrades
493
581
  #
@@ -567,7 +655,9 @@ class novadax(Exchange, ImplicitAPI):
567
655
  def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
568
656
  """
569
657
  get the list of most recent trades for a particular symbol
570
- :see: https://doc.novadax.com/en-US/#get-recent-trades
658
+
659
+ https://doc.novadax.com/en-US/#get-recent-trades
660
+
571
661
  :param str symbol: unified symbol of the market to fetch trades for
572
662
  :param int [since]: timestamp in ms of the earliest trade to fetch
573
663
  :param int [limit]: the maximum amount of trades to fetch
@@ -576,7 +666,7 @@ class novadax(Exchange, ImplicitAPI):
576
666
  """
577
667
  self.load_markets()
578
668
  market = self.market(symbol)
579
- request = {
669
+ request: dict = {
580
670
  'symbol': market['id'],
581
671
  }
582
672
  if limit is not None:
@@ -593,13 +683,15 @@ class novadax(Exchange, ImplicitAPI):
593
683
  # "message":"Success"
594
684
  # }
595
685
  #
596
- data = self.safe_value(response, 'data', [])
686
+ data = self.safe_list(response, 'data', [])
597
687
  return self.parse_trades(data, market, since, limit)
598
688
 
599
689
  def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
600
690
  """
601
691
  fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
602
- :see: https://doc.novadax.com/en-US/#get-kline-data
692
+
693
+ https://doc.novadax.com/en-US/#get-kline-data
694
+
603
695
  :param str symbol: unified symbol of the market to fetch OHLCV data for
604
696
  :param str timeframe: the length of time each candle represents
605
697
  :param int [since]: timestamp in ms of the earliest candle to fetch
@@ -609,7 +701,7 @@ class novadax(Exchange, ImplicitAPI):
609
701
  """
610
702
  self.load_markets()
611
703
  market = self.market(symbol)
612
- request = {
704
+ request: dict = {
613
705
  'symbol': market['id'],
614
706
  'unit': self.safe_string(self.timeframes, timeframe, timeframe),
615
707
  }
@@ -644,7 +736,7 @@ class novadax(Exchange, ImplicitAPI):
644
736
  # "message": "Success"
645
737
  # }
646
738
  #
647
- data = self.safe_value(response, 'data', [])
739
+ data = self.safe_list(response, 'data', [])
648
740
  return self.parse_ohlcvs(data, market, timeframe, since, limit)
649
741
 
650
742
  def parse_ohlcv(self, ohlcv, market: Market = None) -> list:
@@ -674,7 +766,7 @@ class novadax(Exchange, ImplicitAPI):
674
766
 
675
767
  def parse_balance(self, response) -> Balances:
676
768
  data = self.safe_value(response, 'data', [])
677
- result = {
769
+ result: dict = {
678
770
  'info': response,
679
771
  'timestamp': None,
680
772
  'datetime': None,
@@ -693,7 +785,9 @@ class novadax(Exchange, ImplicitAPI):
693
785
  def fetch_balance(self, params={}) -> Balances:
694
786
  """
695
787
  query for balance and get the amount of funds available for trading or funds locked in orders
696
- :see: https://doc.novadax.com/en-US/#get-account-balance
788
+
789
+ https://doc.novadax.com/en-US/#get-account-balance
790
+
697
791
  :param dict [params]: extra parameters specific to the exchange API endpoint
698
792
  :returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
699
793
  """
@@ -718,12 +812,14 @@ class novadax(Exchange, ImplicitAPI):
718
812
  def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
719
813
  """
720
814
  create a trade order
721
- :see: https://doc.novadax.com/en-US/#order-introduction
815
+
816
+ https://doc.novadax.com/en-US/#order-introduction
817
+
722
818
  :param str symbol: unified symbol of the market to create an order in
723
819
  :param str type: 'market' or 'limit'
724
820
  :param str side: 'buy' or 'sell'
725
821
  :param float amount: how much you want to trade in units of the base currency
726
- :param float [price]: the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders
822
+ :param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
727
823
  :param dict [params]: extra parameters specific to the exchange API endpoint
728
824
  :param float [params.cost]: for spot market buy orders, the quote quantity that can be used alternative for the amount
729
825
  :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
@@ -732,7 +828,7 @@ class novadax(Exchange, ImplicitAPI):
732
828
  market = self.market(symbol)
733
829
  uppercaseType = type.upper()
734
830
  uppercaseSide = side.upper()
735
- request = {
831
+ request: dict = {
736
832
  'symbol': market['id'],
737
833
  'side': uppercaseSide, # or SELL
738
834
  # "amount": self.amount_to_precision(symbol, amount),
@@ -741,8 +837,8 @@ class novadax(Exchange, ImplicitAPI):
741
837
  # "stopPrice": self.price_to_precision(symbol, stopPrice),
742
838
  # "accountId": "...", # subaccount id, optional
743
839
  }
744
- stopPrice = self.safe_value_2(params, 'triggerPrice', 'stopPrice')
745
- if stopPrice is None:
840
+ triggerPrice = self.safe_value_2(params, 'triggerPrice', 'stopPrice')
841
+ if triggerPrice is None:
746
842
  if (uppercaseType == 'STOP_LIMIT') or (uppercaseType == 'STOP_MARKET'):
747
843
  raise ArgumentsRequired(self.id + ' createOrder() requires a stopPrice parameter for ' + uppercaseType + ' orders')
748
844
  else:
@@ -752,7 +848,7 @@ class novadax(Exchange, ImplicitAPI):
752
848
  uppercaseType = 'STOP_MARKET'
753
849
  defaultOperator = 'LTE' if (uppercaseSide == 'BUY') else 'GTE'
754
850
  request['operator'] = self.safe_string(params, 'operator', defaultOperator)
755
- request['stopPrice'] = self.price_to_precision(symbol, stopPrice)
851
+ request['stopPrice'] = self.price_to_precision(symbol, triggerPrice)
756
852
  params = self.omit(params, ['triggerPrice', 'stopPrice'])
757
853
  if (uppercaseType == 'LIMIT') or (uppercaseType == 'STOP_LIMIT'):
758
854
  request['price'] = self.price_to_precision(symbol, price)
@@ -804,20 +900,22 @@ class novadax(Exchange, ImplicitAPI):
804
900
  # "message": "Success"
805
901
  # }
806
902
  #
807
- data = self.safe_value(response, 'data', {})
903
+ data = self.safe_dict(response, 'data', {})
808
904
  return self.parse_order(data, market)
809
905
 
810
906
  def cancel_order(self, id: str, symbol: Str = None, params={}):
811
907
  """
812
908
  cancels an open order
813
- :see: https://doc.novadax.com/en-US/#cancel-an-order
909
+
910
+ https://doc.novadax.com/en-US/#cancel-an-order
911
+
814
912
  :param str id: order id
815
913
  :param str symbol: not used by novadax cancelOrder()
816
914
  :param dict [params]: extra parameters specific to the exchange API endpoint
817
915
  :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
818
916
  """
819
917
  self.load_markets()
820
- request = {
918
+ request: dict = {
821
919
  'id': id,
822
920
  }
823
921
  response = self.privatePostOrdersCancel(self.extend(request, params))
@@ -830,19 +928,22 @@ class novadax(Exchange, ImplicitAPI):
830
928
  # "message": "Success"
831
929
  # }
832
930
  #
833
- data = self.safe_value(response, 'data', {})
931
+ data = self.safe_dict(response, 'data', {})
834
932
  return self.parse_order(data)
835
933
 
836
934
  def fetch_order(self, id: str, symbol: Str = None, params={}):
837
935
  """
838
936
  fetches information on an order made by the user
839
- :see: https://doc.novadax.com/en-US/#get-order-details
937
+
938
+ https://doc.novadax.com/en-US/#get-order-details
939
+
940
+ :param str id: order id
840
941
  :param str symbol: not used by novadax fetchOrder
841
942
  :param dict [params]: extra parameters specific to the exchange API endpoint
842
943
  :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
843
944
  """
844
945
  self.load_markets()
845
- request = {
946
+ request: dict = {
846
947
  'id': id,
847
948
  }
848
949
  response = self.privateGetOrdersGet(self.extend(request, params))
@@ -867,13 +968,15 @@ class novadax(Exchange, ImplicitAPI):
867
968
  # "message": "Success"
868
969
  # }
869
970
  #
870
- data = self.safe_value(response, 'data', {})
971
+ data = self.safe_dict(response, 'data', {})
871
972
  return self.parse_order(data)
872
973
 
873
974
  def fetch_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
874
975
  """
875
976
  fetches information on multiple orders made by the user
876
- :see: https://doc.novadax.com/en-US/#get-order-history
977
+
978
+ https://doc.novadax.com/en-US/#get-order-history
979
+
877
980
  :param str symbol: unified market symbol of the market orders were made in
878
981
  :param int [since]: the earliest time in ms to fetch orders for
879
982
  :param int [limit]: the maximum number of order structures to retrieve
@@ -881,7 +984,7 @@ class novadax(Exchange, ImplicitAPI):
881
984
  :returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
882
985
  """
883
986
  self.load_markets()
884
- request = {
987
+ request: dict = {
885
988
  # 'symbol': market['id'],
886
989
  # 'status': 'SUBMITTED,PROCESSING', # SUBMITTED, PROCESSING, PARTIAL_FILLED, CANCELING, FILLED, CANCELED, REJECTED
887
990
  # 'fromId': '...', # order id to begin with
@@ -922,20 +1025,22 @@ class novadax(Exchange, ImplicitAPI):
922
1025
  # "message": "Success"
923
1026
  # }
924
1027
  #
925
- data = self.safe_value(response, 'data', [])
1028
+ data = self.safe_list(response, 'data', [])
926
1029
  return self.parse_orders(data, market, since, limit)
927
1030
 
928
1031
  def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
929
1032
  """
930
1033
  fetch all unfilled currently open orders
931
- :see: https://doc.novadax.com/en-US/#get-order-history
1034
+
1035
+ https://doc.novadax.com/en-US/#get-order-history
1036
+
932
1037
  :param str symbol: unified market symbol
933
1038
  :param int [since]: the earliest time in ms to fetch open orders for
934
1039
  :param int [limit]: the maximum number of open orders structures to retrieve
935
1040
  :param dict [params]: extra parameters specific to the exchange API endpoint
936
1041
  :returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
937
1042
  """
938
- request = {
1043
+ request: dict = {
939
1044
  'status': 'SUBMITTED,PROCESSING,PARTIAL_FILLED,CANCELING',
940
1045
  }
941
1046
  return self.fetch_orders(symbol, since, limit, self.extend(request, params))
@@ -943,14 +1048,16 @@ class novadax(Exchange, ImplicitAPI):
943
1048
  def fetch_closed_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
944
1049
  """
945
1050
  fetches information on multiple closed orders made by the user
946
- :see: https://doc.novadax.com/en-US/#get-order-history
1051
+
1052
+ https://doc.novadax.com/en-US/#get-order-history
1053
+
947
1054
  :param str symbol: unified market symbol of the market orders were made in
948
1055
  :param int [since]: the earliest time in ms to fetch orders for
949
1056
  :param int [limit]: the maximum number of order structures to retrieve
950
1057
  :param dict [params]: extra parameters specific to the exchange API endpoint
951
1058
  :returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
952
1059
  """
953
- request = {
1060
+ request: dict = {
954
1061
  'status': 'FILLED,CANCELED,REJECTED',
955
1062
  }
956
1063
  return self.fetch_orders(symbol, since, limit, self.extend(request, params))
@@ -958,7 +1065,9 @@ class novadax(Exchange, ImplicitAPI):
958
1065
  def fetch_order_trades(self, id: str, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
959
1066
  """
960
1067
  fetch all the trades made from a single order
961
- :see: https://doc.novadax.com/en-US/#get-order-match-details
1068
+
1069
+ https://doc.novadax.com/en-US/#get-order-match-details
1070
+
962
1071
  :param str id: order id
963
1072
  :param str symbol: unified market symbol
964
1073
  :param int [since]: the earliest time in ms to fetch trades for
@@ -967,7 +1076,7 @@ class novadax(Exchange, ImplicitAPI):
967
1076
  :returns dict[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
968
1077
  """
969
1078
  self.load_markets()
970
- request = {
1079
+ request: dict = {
971
1080
  'id': id,
972
1081
  }
973
1082
  response = self.privateGetOrdersFill(self.extend(request, params))
@@ -998,8 +1107,8 @@ class novadax(Exchange, ImplicitAPI):
998
1107
  #
999
1108
  return self.parse_trades(data, market, since, limit)
1000
1109
 
1001
- def parse_order_status(self, status):
1002
- statuses = {
1110
+ def parse_order_status(self, status: Str):
1111
+ statuses: dict = {
1003
1112
  'SUBMITTED': 'open',
1004
1113
  'PROCESSING': 'open',
1005
1114
  'PARTIAL_FILLED': 'open',
@@ -1010,7 +1119,7 @@ class novadax(Exchange, ImplicitAPI):
1010
1119
  }
1011
1120
  return self.safe_string(statuses, status, status)
1012
1121
 
1013
- def parse_order(self, order, market: Market = None) -> Order:
1122
+ def parse_order(self, order: dict, market: Market = None) -> Order:
1014
1123
  #
1015
1124
  # createOrder, fetchOrders, fetchOrder
1016
1125
  #
@@ -1057,7 +1166,6 @@ class novadax(Exchange, ImplicitAPI):
1057
1166
  }
1058
1167
  marketId = self.safe_string(order, 'symbol')
1059
1168
  symbol = self.safe_symbol(marketId, market, '_')
1060
- stopPrice = self.safe_number(order, 'stopPrice')
1061
1169
  return self.safe_order({
1062
1170
  'id': id,
1063
1171
  'clientOrderId': None,
@@ -1071,8 +1179,7 @@ class novadax(Exchange, ImplicitAPI):
1071
1179
  'postOnly': None,
1072
1180
  'side': side,
1073
1181
  'price': price,
1074
- 'stopPrice': stopPrice,
1075
- 'triggerPrice': stopPrice,
1182
+ 'triggerPrice': self.safe_number(order, 'stopPrice'),
1076
1183
  'amount': amount,
1077
1184
  'cost': cost,
1078
1185
  'average': average,
@@ -1086,7 +1193,9 @@ class novadax(Exchange, ImplicitAPI):
1086
1193
  def transfer(self, code: str, amount: float, fromAccount: str, toAccount: str, params={}) -> TransferEntry:
1087
1194
  """
1088
1195
  transfer currency internally between wallets on the same account
1089
- :see: https://doc.novadax.com/en-US/#get-sub-account-transfer
1196
+
1197
+ https://doc.novadax.com/en-US/#get-sub-account-transfer
1198
+
1090
1199
  :param str code: unified currency code
1091
1200
  :param float amount: amount to transfer
1092
1201
  :param str fromAccount: account to transfer from
@@ -1101,7 +1210,7 @@ class novadax(Exchange, ImplicitAPI):
1101
1210
  # master-transfer-in = from master account to subaccount
1102
1211
  # master-transfer-out = from subaccount to master account
1103
1212
  type = 'master-transfer-in' if (fromAccount == 'main') else 'master-transfer-out'
1104
- request = {
1213
+ request: dict = {
1105
1214
  'transferAmount': self.currency_to_precision(code, amount),
1106
1215
  'currency': currency['id'],
1107
1216
  'subId': toAccount if (type == 'master-transfer-in') else fromAccount,
@@ -1124,7 +1233,7 @@ class novadax(Exchange, ImplicitAPI):
1124
1233
  transfer['amount'] = amount
1125
1234
  return transfer
1126
1235
 
1127
- def parse_transfer(self, transfer, currency: Currency = None):
1236
+ def parse_transfer(self, transfer: dict, currency: Currency = None) -> TransferEntry:
1128
1237
  #
1129
1238
  # {
1130
1239
  # "code":"A10000",
@@ -1139,7 +1248,6 @@ class novadax(Exchange, ImplicitAPI):
1139
1248
  'info': transfer,
1140
1249
  'id': id,
1141
1250
  'amount': None,
1142
- 'code': currencyCode, # kept here for backward-compatibility, but will be removed soon
1143
1251
  'currency': currencyCode,
1144
1252
  'fromAccount': None,
1145
1253
  'toAccount': None,
@@ -1148,16 +1256,18 @@ class novadax(Exchange, ImplicitAPI):
1148
1256
  'status': status,
1149
1257
  }
1150
1258
 
1151
- def parse_transfer_status(self, status):
1152
- statuses = {
1259
+ def parse_transfer_status(self, status: Str) -> Str:
1260
+ statuses: dict = {
1153
1261
  'SUCCESS': 'pending',
1154
1262
  }
1155
1263
  return self.safe_string(statuses, status, 'failed')
1156
1264
 
1157
- def withdraw(self, code: str, amount: float, address, tag=None, params={}):
1265
+ def withdraw(self, code: str, amount: float, address: str, tag=None, params={}) -> Transaction:
1158
1266
  """
1159
1267
  make a withdrawal
1160
- :see: https://doc.novadax.com/en-US/#send-cryptocurrencies
1268
+
1269
+ https://doc.novadax.com/en-US/#send-cryptocurrencies
1270
+
1161
1271
  :param str code: unified currency code
1162
1272
  :param float amount: the amount to withdraw
1163
1273
  :param str address: the address to withdraw to
@@ -1168,7 +1278,7 @@ class novadax(Exchange, ImplicitAPI):
1168
1278
  tag, params = self.handle_withdraw_tag_and_params(tag, params)
1169
1279
  self.load_markets()
1170
1280
  currency = self.currency(code)
1171
- request = {
1281
+ request: dict = {
1172
1282
  'code': currency['id'],
1173
1283
  'amount': self.currency_to_precision(code, amount),
1174
1284
  'wallet': address,
@@ -1188,7 +1298,9 @@ class novadax(Exchange, ImplicitAPI):
1188
1298
  def fetch_accounts(self, params={}) -> List[Account]:
1189
1299
  """
1190
1300
  fetch all the accounts associated with a profile
1191
- :see: https://doc.novadax.com/en-US/#get-sub-account-list
1301
+
1302
+ https://doc.novadax.com/en-US/#get-sub-account-list
1303
+
1192
1304
  :param dict [params]: extra parameters specific to the exchange API endpoint
1193
1305
  :returns dict: a dictionary of `account structures <https://docs.ccxt.com/#/?id=account-structure>` indexed by the account type
1194
1306
  """
@@ -1224,14 +1336,16 @@ class novadax(Exchange, ImplicitAPI):
1224
1336
  def fetch_deposits(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
1225
1337
  """
1226
1338
  fetch all deposits made to an account
1227
- :see: https://doc.novadax.com/en-US/#wallet-records-of-deposits-and-withdraws
1339
+
1340
+ https://doc.novadax.com/en-US/#wallet-records-of-deposits-and-withdraws
1341
+
1228
1342
  :param str code: unified currency code
1229
1343
  :param int [since]: the earliest time in ms to fetch deposits for
1230
1344
  :param int [limit]: the maximum number of deposits structures to retrieve
1231
1345
  :param dict [params]: extra parameters specific to the exchange API endpoint
1232
1346
  :returns dict[]: a list of `transaction structures <https://docs.ccxt.com/#/?id=transaction-structure>`
1233
1347
  """
1234
- request = {
1348
+ request: dict = {
1235
1349
  'type': 'coin_in',
1236
1350
  }
1237
1351
  return self.fetch_deposits_withdrawals(code, since, limit, self.extend(request, params))
@@ -1239,14 +1353,16 @@ class novadax(Exchange, ImplicitAPI):
1239
1353
  def fetch_withdrawals(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
1240
1354
  """
1241
1355
  fetch all withdrawals made from an account
1242
- :see: https://doc.novadax.com/en-US/#wallet-records-of-deposits-and-withdraws
1356
+
1357
+ https://doc.novadax.com/en-US/#wallet-records-of-deposits-and-withdraws
1358
+
1243
1359
  :param str code: unified currency code
1244
1360
  :param int [since]: the earliest time in ms to fetch withdrawals for
1245
1361
  :param int [limit]: the maximum number of withdrawals structures to retrieve
1246
1362
  :param dict [params]: extra parameters specific to the exchange API endpoint
1247
1363
  :returns dict[]: a list of `transaction structures <https://docs.ccxt.com/#/?id=transaction-structure>`
1248
1364
  """
1249
- request = {
1365
+ request: dict = {
1250
1366
  'type': 'coin_out',
1251
1367
  }
1252
1368
  return self.fetch_deposits_withdrawals(code, since, limit, self.extend(request, params))
@@ -1254,7 +1370,9 @@ class novadax(Exchange, ImplicitAPI):
1254
1370
  def fetch_deposits_withdrawals(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
1255
1371
  """
1256
1372
  fetch history of deposits and withdrawals
1257
- :see: https://doc.novadax.com/en-US/#wallet-records-of-deposits-and-withdraws
1373
+
1374
+ https://doc.novadax.com/en-US/#wallet-records-of-deposits-and-withdraws
1375
+
1258
1376
  :param str [code]: unified currency code for the currency of the deposit/withdrawals, default is None
1259
1377
  :param int [since]: timestamp in ms of the earliest deposit/withdrawal, default is None
1260
1378
  :param int [limit]: max number of deposit/withdrawals to return, default is None
@@ -1262,7 +1380,7 @@ class novadax(Exchange, ImplicitAPI):
1262
1380
  :returns dict: a list of `transaction structure <https://docs.ccxt.com/#/?id=transaction-structure>`
1263
1381
  """
1264
1382
  self.load_markets()
1265
- request = {
1383
+ request: dict = {
1266
1384
  # 'currency': currency['id'],
1267
1385
  # 'type': 'coin_in', # 'coin_out'
1268
1386
  # 'direct': 'asc', # 'desc'
@@ -1297,17 +1415,17 @@ class novadax(Exchange, ImplicitAPI):
1297
1415
  # "message": "Success"
1298
1416
  # }
1299
1417
  #
1300
- data = self.safe_value(response, 'data', [])
1418
+ data = self.safe_list(response, 'data', [])
1301
1419
  return self.parse_transactions(data, currency, since, limit)
1302
1420
 
1303
- def parse_transaction_status(self, status):
1421
+ def parse_transaction_status(self, status: Str):
1304
1422
  # Pending the record is wait broadcast to chain
1305
1423
  # x/M confirming the comfirming state of tx, the M is total confirmings needed
1306
1424
  # SUCCESS the record is success full
1307
1425
  # FAIL the record failed
1308
1426
  parts = status.split(' ')
1309
1427
  status = self.safe_string(parts, 1, status)
1310
- statuses = {
1428
+ statuses: dict = {
1311
1429
  'Pending': 'pending',
1312
1430
  'confirming': 'pending',
1313
1431
  'SUCCESS': 'ok',
@@ -1315,7 +1433,7 @@ class novadax(Exchange, ImplicitAPI):
1315
1433
  }
1316
1434
  return self.safe_string(statuses, status, status)
1317
1435
 
1318
- def parse_transaction(self, transaction, currency: Currency = None) -> Transaction:
1436
+ def parse_transaction(self, transaction: dict, currency: Currency = None) -> Transaction:
1319
1437
  #
1320
1438
  # withdraw
1321
1439
  #
@@ -1387,7 +1505,9 @@ class novadax(Exchange, ImplicitAPI):
1387
1505
  def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
1388
1506
  """
1389
1507
  fetch all trades made by the user
1390
- :see: https://doc.novadax.com/en-US/#get-order-history
1508
+
1509
+ https://doc.novadax.com/en-US/#get-order-history
1510
+
1391
1511
  :param str symbol: unified market symbol
1392
1512
  :param int [since]: the earliest time in ms to fetch trades for
1393
1513
  :param int [limit]: the maximum number of trades structures to retrieve
@@ -1395,7 +1515,7 @@ class novadax(Exchange, ImplicitAPI):
1395
1515
  :returns Trade[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
1396
1516
  """
1397
1517
  self.load_markets()
1398
- request = {
1518
+ request: dict = {
1399
1519
  # 'orderId': id, # Order ID, string
1400
1520
  # 'symbol': market['id'], # The trading symbol, like BTC_BRL, string
1401
1521
  # 'fromId': fromId, # Search fill id to begin with, string
@@ -1435,7 +1555,7 @@ class novadax(Exchange, ImplicitAPI):
1435
1555
  # "message": "Success"
1436
1556
  # }
1437
1557
  #
1438
- data = self.safe_value(response, 'data', [])
1558
+ data = self.safe_list(response, 'data', [])
1439
1559
  return self.parse_trades(data, market, since, limit)
1440
1560
 
1441
1561
  def sign(self, path, api='public', method='GET', params={}, headers=None, body=None):
@@ -1465,7 +1585,7 @@ class novadax(Exchange, ImplicitAPI):
1465
1585
  headers['X-Nova-Signature'] = self.hmac(self.encode(auth), self.encode(self.secret), hashlib.sha256)
1466
1586
  return {'url': url, 'method': method, 'body': body, 'headers': headers}
1467
1587
 
1468
- def handle_errors(self, code, reason, url, method, headers, body, response, requestHeaders, requestBody):
1588
+ def handle_errors(self, code: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
1469
1589
  if response is None:
1470
1590
  return None
1471
1591
  #