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/ndax.py CHANGED
@@ -7,13 +7,13 @@ from ccxt.base.exchange import Exchange
7
7
  from ccxt.abstract.ndax import ImplicitAPI
8
8
  import hashlib
9
9
  import json
10
- from ccxt.base.types import Account, Balances, Currency, IndexType, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Ticker, Trade, Transaction
10
+ from ccxt.base.types import Account, Balances, Currencies, Currency, DepositAddress, IndexType, Int, LedgerEntry, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Ticker, Trade, Transaction
11
11
  from typing import List
12
12
  from ccxt.base.errors import ExchangeError
13
+ from ccxt.base.errors import AuthenticationError
13
14
  from ccxt.base.errors import BadSymbol
14
15
  from ccxt.base.errors import InsufficientFunds
15
16
  from ccxt.base.errors import OrderNotFound
16
- from ccxt.base.errors import AuthenticationError
17
17
  from ccxt.base.decimal_to_precision import TICK_SIZE
18
18
  from ccxt.base.precise import Precise
19
19
 
@@ -48,46 +48,79 @@ class ndax(Exchange, ImplicitAPI):
48
48
  'editOrder': True,
49
49
  'fetchAccounts': True,
50
50
  'fetchBalance': True,
51
+ 'fetchBorrowInterest': False,
52
+ 'fetchBorrowRate': False,
51
53
  'fetchBorrowRateHistories': False,
52
54
  'fetchBorrowRateHistory': False,
55
+ 'fetchBorrowRates': False,
56
+ 'fetchBorrowRatesPerSymbol': False,
53
57
  'fetchCrossBorrowRate': False,
54
58
  'fetchCrossBorrowRates': False,
55
59
  'fetchCurrencies': True,
56
60
  'fetchDepositAddress': True,
61
+ 'fetchDepositAddresses': False,
62
+ 'fetchDepositAddressesByNetwork': False,
57
63
  'fetchDeposits': True,
58
64
  'fetchFundingHistory': False,
65
+ 'fetchFundingInterval': False,
66
+ 'fetchFundingIntervals': False,
59
67
  'fetchFundingRate': False,
60
68
  'fetchFundingRateHistory': False,
61
69
  'fetchFundingRates': False,
70
+ 'fetchGreeks': False,
62
71
  'fetchIndexOHLCV': False,
63
72
  'fetchIsolatedBorrowRate': False,
64
73
  'fetchIsolatedBorrowRates': False,
74
+ 'fetchIsolatedPositions': False,
65
75
  'fetchLedger': True,
66
76
  'fetchLeverage': False,
77
+ 'fetchLeverages': False,
67
78
  'fetchLeverageTiers': False,
79
+ 'fetchLiquidations': False,
80
+ 'fetchMarginAdjustmentHistory': False,
81
+ 'fetchMarginMode': False,
82
+ 'fetchMarginModes': False,
83
+ 'fetchMarketLeverageTiers': False,
68
84
  'fetchMarkets': True,
69
85
  'fetchMarkOHLCV': False,
86
+ 'fetchMarkPrices': False,
87
+ 'fetchMyLiquidations': False,
88
+ 'fetchMySettlementHistory': False,
70
89
  'fetchMyTrades': True,
71
90
  'fetchOHLCV': True,
91
+ 'fetchOpenInterest': False,
72
92
  'fetchOpenInterestHistory': False,
73
93
  'fetchOpenOrders': True,
94
+ 'fetchOption': False,
95
+ 'fetchOptionChain': False,
74
96
  'fetchOrder': True,
75
97
  'fetchOrderBook': True,
76
98
  'fetchOrders': True,
77
99
  'fetchOrderTrades': True,
78
100
  'fetchPosition': False,
101
+ 'fetchPositionHistory': False,
102
+ 'fetchPositionMode': False,
79
103
  'fetchPositions': False,
104
+ 'fetchPositionsForSymbol': False,
105
+ 'fetchPositionsHistory': False,
80
106
  'fetchPositionsRisk': False,
81
107
  'fetchPremiumIndexOHLCV': False,
108
+ 'fetchSettlementHistory': False,
82
109
  'fetchTicker': True,
83
110
  'fetchTickers': False,
84
111
  'fetchTime': False,
85
112
  'fetchTrades': True,
86
113
  'fetchTradingFee': False,
87
114
  'fetchTradingFees': False,
115
+ 'fetchUnderlyingAssets': False,
116
+ 'fetchVolatilityHistory': False,
88
117
  'fetchWithdrawals': True,
89
118
  'reduceMargin': False,
119
+ 'repayCrossMargin': False,
120
+ 'repayIsolatedMargin': False,
121
+ 'sandbox': True,
90
122
  'setLeverage': False,
123
+ 'setMargin': False,
91
124
  'setMarginMode': False,
92
125
  'setPositionMode': False,
93
126
  'signIn': True,
@@ -231,6 +264,77 @@ class ndax(Exchange, ImplicitAPI):
231
264
  },
232
265
  },
233
266
  },
267
+ 'features': {
268
+ 'spot': {
269
+ 'sandbox': True,
270
+ 'createOrder': {
271
+ 'marginMode': False,
272
+ 'triggerPrice': True,
273
+ 'triggerDirection': False,
274
+ 'triggerPriceType': {
275
+ 'last': True,
276
+ 'mark': False,
277
+ 'index': False,
278
+ # bid & ask
279
+ },
280
+ 'stopLossPrice': False, # todo
281
+ 'takeProfitPrice': False, # todo
282
+ 'attachedStopLossTakeProfit': None,
283
+ # todo
284
+ 'timeInForce': {
285
+ 'IOC': True,
286
+ 'FOK': True,
287
+ 'PO': True,
288
+ 'GTD': False,
289
+ },
290
+ 'hedged': False,
291
+ 'trailing': False,
292
+ 'leverage': False,
293
+ 'marketBuyByCost': False,
294
+ 'marketBuyRequiresPrice': False,
295
+ 'selfTradePrevention': False,
296
+ 'iceberg': True, # todo
297
+ },
298
+ 'createOrders': None,
299
+ 'fetchMyTrades': {
300
+ 'marginMode': False,
301
+ 'limit': 100, # todo
302
+ 'daysBack': 100000, # todo
303
+ 'untilDays': 100000, # todo
304
+ },
305
+ 'fetchOrder': {
306
+ 'marginMode': False,
307
+ 'trigger': False,
308
+ 'trailing': False,
309
+ },
310
+ 'fetchOpenOrders': {
311
+ 'marginMode': False,
312
+ 'limit': None,
313
+ 'trigger': False,
314
+ 'trailing': False,
315
+ },
316
+ 'fetchOrders': {
317
+ 'marginMode': False,
318
+ 'limit': None,
319
+ 'daysBack': None,
320
+ 'untilDays': None,
321
+ 'trigger': False,
322
+ 'trailing': False,
323
+ },
324
+ 'fetchClosedOrders': None,
325
+ 'fetchOHLCV': {
326
+ 'limit': None,
327
+ },
328
+ },
329
+ 'swap': {
330
+ 'linear': None,
331
+ 'inverse': None,
332
+ },
333
+ 'future': {
334
+ 'linear': None,
335
+ 'inverse': None,
336
+ },
337
+ },
234
338
  'fees': {
235
339
  'trading': {
236
340
  'tierBased': False,
@@ -284,14 +388,16 @@ class ndax(Exchange, ImplicitAPI):
284
388
  def sign_in(self, params={}):
285
389
  """
286
390
  sign in, must be called prior to using other authenticated methods
287
- :see: https://apidoc.ndax.io/#authenticate2fa
391
+
392
+ https://apidoc.ndax.io/#authenticate2fa
393
+
288
394
  :param dict [params]: extra parameters specific to the exchange API endpoint
289
395
  :returns: response from exchange
290
396
  """
291
397
  self.check_required_credentials()
292
398
  if self.login is None or self.password is None:
293
399
  raise AuthenticationError(self.id + ' signIn() requires exchange.login, exchange.password')
294
- request = {
400
+ request: dict = {
295
401
  'grant_type': 'client_credentials', # the only supported value
296
402
  }
297
403
  response = self.publicGetAuthenticate(self.extend(request, params))
@@ -320,7 +426,7 @@ class ndax(Exchange, ImplicitAPI):
320
426
  #
321
427
  # {
322
428
  # "Authenticated": True,
323
- # "UserId":57765,
429
+ # "UserId":57764,
324
430
  # "SessionToken":"4a2a5857-c4e5-4fac-b09e-2c4c30b591a0"
325
431
  # }
326
432
  #
@@ -329,15 +435,17 @@ class ndax(Exchange, ImplicitAPI):
329
435
  return responseInner
330
436
  return response
331
437
 
332
- def fetch_currencies(self, params={}):
438
+ def fetch_currencies(self, params={}) -> Currencies:
333
439
  """
334
440
  fetches all available currencies on an exchange
335
- :see: https://apidoc.ndax.io/#getproduct
441
+
442
+ https://apidoc.ndax.io/#getproduct
443
+
336
444
  :param dict [params]: extra parameters specific to the exchange API endpoint
337
445
  :returns dict: an associative dictionary of currencies
338
446
  """
339
447
  omsId = self.safe_integer(self.options, 'omsId', 1)
340
- request = {
448
+ request: dict = {
341
449
  'omsId': omsId,
342
450
  }
343
451
  response = self.publicGetGetProducts(self.extend(request, params))
@@ -357,7 +465,7 @@ class ndax(Exchange, ImplicitAPI):
357
465
  # },
358
466
  # ]
359
467
  #
360
- result = {}
468
+ result: dict = {}
361
469
  for i in range(0, len(response)):
362
470
  currency = response[i]
363
471
  id = self.safe_string(currency, 'ProductId')
@@ -395,15 +503,17 @@ class ndax(Exchange, ImplicitAPI):
395
503
  }
396
504
  return result
397
505
 
398
- def fetch_markets(self, params={}):
506
+ def fetch_markets(self, params={}) -> List[Market]:
399
507
  """
400
508
  retrieves data on all markets for ndax
401
- :see: https://apidoc.ndax.io/#getinstruments
509
+
510
+ https://apidoc.ndax.io/#getinstruments
511
+
402
512
  :param dict [params]: extra parameters specific to the exchange API endpoint
403
513
  :returns dict[]: an array of objects representing market data
404
514
  """
405
515
  omsId = self.safe_integer(self.options, 'omsId', 1)
406
- request = {
516
+ request: dict = {
407
517
  'omsId': omsId,
408
518
  }
409
519
  response = self.publicGetGetInstruments(self.extend(request, params))
@@ -455,7 +565,7 @@ class ndax(Exchange, ImplicitAPI):
455
565
  #
456
566
  return self.parse_markets(response)
457
567
 
458
- def parse_market(self, market) -> Market:
568
+ def parse_market(self, market: dict) -> Market:
459
569
  id = self.safe_string(market, 'InstrumentId')
460
570
  # lowercaseId = self.safe_string_lower(market, 'symbol')
461
571
  baseId = self.safe_string(market, 'Product1')
@@ -517,7 +627,7 @@ class ndax(Exchange, ImplicitAPI):
517
627
 
518
628
  def parse_order_book(self, orderbook, symbol, timestamp=None, bidsKey='bids', asksKey='asks', priceKey: IndexType = 6, amountKey: IndexType = 8, countOrIdKey: IndexType = 2):
519
629
  nonce = None
520
- result = {
630
+ result: dict = {
521
631
  'symbol': symbol,
522
632
  'bids': [],
523
633
  'asks': [],
@@ -551,7 +661,9 @@ class ndax(Exchange, ImplicitAPI):
551
661
  def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
552
662
  """
553
663
  fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
554
- :see: https://apidoc.ndax.io/#getl2snapshot
664
+
665
+ https://apidoc.ndax.io/#getl2snapshot
666
+
555
667
  :param str symbol: unified symbol of the market to fetch the order book for
556
668
  :param int [limit]: the maximum amount of order book entries to return
557
669
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -561,7 +673,7 @@ class ndax(Exchange, ImplicitAPI):
561
673
  self.load_markets()
562
674
  market = self.market(symbol)
563
675
  limit = 100 if (limit is None) else limit # default 100
564
- request = {
676
+ request: dict = {
565
677
  'omsId': omsId,
566
678
  'InstrumentId': market['id'],
567
679
  'Depth': limit, # default 100
@@ -591,7 +703,7 @@ class ndax(Exchange, ImplicitAPI):
591
703
  #
592
704
  return self.parse_order_book(response, symbol)
593
705
 
594
- def parse_ticker(self, ticker, market: Market = None) -> Ticker:
706
+ def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
595
707
  #
596
708
  # fetchTicker
597
709
  #
@@ -660,7 +772,9 @@ class ndax(Exchange, ImplicitAPI):
660
772
  def fetch_ticker(self, symbol: str, params={}) -> Ticker:
661
773
  """
662
774
  fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
663
- :see: https://apidoc.ndax.io/#getlevel1
775
+
776
+ https://apidoc.ndax.io/#getlevel1
777
+
664
778
  :param str symbol: unified symbol of the market to fetch the ticker for
665
779
  :param dict [params]: extra parameters specific to the exchange API endpoint
666
780
  :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
@@ -668,7 +782,7 @@ class ndax(Exchange, ImplicitAPI):
668
782
  omsId = self.safe_integer(self.options, 'omsId', 1)
669
783
  self.load_markets()
670
784
  market = self.market(symbol)
671
- request = {
785
+ request: dict = {
672
786
  'omsId': omsId,
673
787
  'InstrumentId': market['id'],
674
788
  }
@@ -731,7 +845,9 @@ class ndax(Exchange, ImplicitAPI):
731
845
  def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
732
846
  """
733
847
  fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
734
- :see: https://apidoc.ndax.io/#gettickerhistory
848
+
849
+ https://apidoc.ndax.io/#gettickerhistory
850
+
735
851
  :param str symbol: unified symbol of the market to fetch OHLCV data for
736
852
  :param str timeframe: the length of time each candle represents
737
853
  :param int [since]: timestamp in ms of the earliest candle to fetch
@@ -742,7 +858,7 @@ class ndax(Exchange, ImplicitAPI):
742
858
  omsId = self.safe_integer(self.options, 'omsId', 1)
743
859
  self.load_markets()
744
860
  market = self.market(symbol)
745
- request = {
861
+ request: dict = {
746
862
  'omsId': omsId,
747
863
  'InstrumentId': market['id'],
748
864
  'Interval': self.safe_string(self.timeframes, timeframe, timeframe),
@@ -769,7 +885,7 @@ class ndax(Exchange, ImplicitAPI):
769
885
  #
770
886
  return self.parse_ohlcvs(response, market, timeframe, since, limit)
771
887
 
772
- def parse_trade(self, trade, market: Market = None) -> Trade:
888
+ def parse_trade(self, trade: dict, market: Market = None) -> Trade:
773
889
  #
774
890
  # fetchTrades(public)
775
891
  #
@@ -946,7 +1062,7 @@ class ndax(Exchange, ImplicitAPI):
946
1062
  omsId = self.safe_integer(self.options, 'omsId', 1)
947
1063
  self.load_markets()
948
1064
  market = self.market(symbol)
949
- request = {
1065
+ request: dict = {
950
1066
  'omsId': omsId,
951
1067
  'InstrumentId': market['id'],
952
1068
  }
@@ -965,7 +1081,9 @@ class ndax(Exchange, ImplicitAPI):
965
1081
  def fetch_accounts(self, params={}) -> List[Account]:
966
1082
  """
967
1083
  fetch all the accounts associated with a profile
968
- :see: https://apidoc.ndax.io/#getuseraccounts
1084
+
1085
+ https://apidoc.ndax.io/#getuseraccounts
1086
+
969
1087
  :param dict [params]: extra parameters specific to the exchange API endpoint
970
1088
  :returns dict: a dictionary of `account structures <https://docs.ccxt.com/#/?id=account-structure>` indexed by the account type
971
1089
  """
@@ -973,7 +1091,7 @@ class ndax(Exchange, ImplicitAPI):
973
1091
  raise AuthenticationError(self.id + ' fetchAccounts() requires exchange.login email credential')
974
1092
  omsId = self.safe_integer(self.options, 'omsId', 1)
975
1093
  self.check_required_credentials()
976
- request = {
1094
+ request: dict = {
977
1095
  'omsId': omsId,
978
1096
  'UserId': self.uid,
979
1097
  'UserName': self.login,
@@ -994,7 +1112,7 @@ class ndax(Exchange, ImplicitAPI):
994
1112
  return result
995
1113
 
996
1114
  def parse_balance(self, response) -> Balances:
997
- result = {
1115
+ result: dict = {
998
1116
  'info': response,
999
1117
  'timestamp': None,
1000
1118
  'datetime': None,
@@ -1013,17 +1131,21 @@ class ndax(Exchange, ImplicitAPI):
1013
1131
  def fetch_balance(self, params={}) -> Balances:
1014
1132
  """
1015
1133
  query for balance and get the amount of funds available for trading or funds locked in orders
1016
- :see: https://apidoc.ndax.io/#getaccountpositions
1134
+
1135
+ https://apidoc.ndax.io/#getaccountpositions
1136
+
1017
1137
  :param dict [params]: extra parameters specific to the exchange API endpoint
1018
1138
  :returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
1019
1139
  """
1020
1140
  omsId = self.safe_integer(self.options, 'omsId', 1)
1021
1141
  self.load_markets()
1022
1142
  self.load_accounts()
1023
- defaultAccountId = self.safe_integer_2(self.options, 'accountId', 'AccountId', int(self.accounts[0]['id']))
1143
+ defaultAccountId = self.safe_integer_2(self.options, 'accountId', 'AccountId')
1024
1144
  accountId = self.safe_integer_2(params, 'accountId', 'AccountId', defaultAccountId)
1145
+ if accountId is None:
1146
+ accountId = int(self.accounts[0]['id'])
1025
1147
  params = self.omit(params, ['accountId', 'AccountId'])
1026
- request = {
1148
+ request: dict = {
1027
1149
  'omsId': omsId,
1028
1150
  'AccountId': accountId,
1029
1151
  }
@@ -1062,7 +1184,7 @@ class ndax(Exchange, ImplicitAPI):
1062
1184
  return self.parse_balance(response)
1063
1185
 
1064
1186
  def parse_ledger_entry_type(self, type):
1065
- types = {
1187
+ types: dict = {
1066
1188
  'Trade': 'trade',
1067
1189
  'Deposit': 'transaction',
1068
1190
  'Withdraw': 'transaction',
@@ -1079,7 +1201,7 @@ class ndax(Exchange, ImplicitAPI):
1079
1201
  }
1080
1202
  return self.safe_string(types, type, type)
1081
1203
 
1082
- def parse_ledger_entry(self, item, currency: Currency = None):
1204
+ def parse_ledger_entry(self, item: dict, currency: Currency = None) -> LedgerEntry:
1083
1205
  #
1084
1206
  # {
1085
1207
  # "TransactionId": 2663709493,
@@ -1097,6 +1219,7 @@ class ndax(Exchange, ImplicitAPI):
1097
1219
  # }
1098
1220
  #
1099
1221
  currencyId = self.safe_string(item, 'ProductId')
1222
+ currency = self.safe_currency(currencyId, currency)
1100
1223
  credit = self.safe_string(item, 'CR')
1101
1224
  debit = self.safe_string(item, 'DR')
1102
1225
  amount = None
@@ -1114,7 +1237,7 @@ class ndax(Exchange, ImplicitAPI):
1114
1237
  elif direction == 'in':
1115
1238
  before = Precise.string_max('0', Precise.string_sub(after, amount))
1116
1239
  timestamp = self.safe_integer(item, 'TimeStamp')
1117
- return {
1240
+ return self.safe_ledger_entry({
1118
1241
  'info': item,
1119
1242
  'id': self.safe_string(item, 'TransactionId'),
1120
1243
  'direction': direction,
@@ -1130,17 +1253,19 @@ class ndax(Exchange, ImplicitAPI):
1130
1253
  'timestamp': timestamp,
1131
1254
  'datetime': self.iso8601(timestamp),
1132
1255
  'fee': None,
1133
- }
1256
+ }, currency)
1134
1257
 
1135
- def fetch_ledger(self, code: Str = None, since: Int = None, limit: Int = None, params={}):
1258
+ def fetch_ledger(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[LedgerEntry]:
1136
1259
  """
1137
- fetch the history of changes, actions done by the user or operations that altered balance of the user
1138
- :see: https://apidoc.ndax.io/#getaccounttransactions
1139
- :param str code: unified currency code, default is None
1260
+ fetch the history of changes, actions done by the user or operations that altered the balance of the user
1261
+
1262
+ https://apidoc.ndax.io/#getaccounttransactions
1263
+
1264
+ :param str [code]: unified currency code, default is None
1140
1265
  :param int [since]: timestamp in ms of the earliest ledger entry, default is None
1141
- :param int [limit]: max number of ledger entrys to return, default is None
1266
+ :param int [limit]: max number of ledger entries to return, default is None
1142
1267
  :param dict [params]: extra parameters specific to the exchange API endpoint
1143
- :returns dict: a `ledger structure <https://docs.ccxt.com/#/?id=ledger-structure>`
1268
+ :returns dict: a `ledger structure <https://docs.ccxt.com/#/?id=ledger>`
1144
1269
  """
1145
1270
  omsId = self.safe_integer(self.options, 'omsId', 1)
1146
1271
  self.load_markets()
@@ -1148,7 +1273,7 @@ class ndax(Exchange, ImplicitAPI):
1148
1273
  defaultAccountId = self.safe_integer_2(self.options, 'accountId', 'AccountId', int(self.accounts[0]['id']))
1149
1274
  accountId = self.safe_integer_2(params, 'accountId', 'AccountId', defaultAccountId)
1150
1275
  params = self.omit(params, ['accountId', 'AccountId'])
1151
- request = {
1276
+ request: dict = {
1152
1277
  'omsId': omsId,
1153
1278
  'AccountId': accountId,
1154
1279
  }
@@ -1178,8 +1303,8 @@ class ndax(Exchange, ImplicitAPI):
1178
1303
  currency = self.currency(code)
1179
1304
  return self.parse_ledger(response, currency, since, limit)
1180
1305
 
1181
- def parse_order_status(self, status):
1182
- statuses = {
1306
+ def parse_order_status(self, status: Str):
1307
+ statuses: dict = {
1183
1308
  'Accepted': 'open',
1184
1309
  'Rejected': 'rejected',
1185
1310
  'Working': 'open',
@@ -1189,7 +1314,7 @@ class ndax(Exchange, ImplicitAPI):
1189
1314
  }
1190
1315
  return self.safe_string(statuses, status, status)
1191
1316
 
1192
- def parse_order(self, order, market: Market = None) -> Order:
1317
+ def parse_order(self, order: dict, market: Market = None) -> Order:
1193
1318
  #
1194
1319
  # createOrder
1195
1320
  #
@@ -1273,7 +1398,7 @@ class ndax(Exchange, ImplicitAPI):
1273
1398
  'postOnly': None,
1274
1399
  'side': self.safe_string_lower(order, 'Side'),
1275
1400
  'price': self.safe_string(order, 'Price'),
1276
- 'stopPrice': self.parse_number(self.omit_zero(self.safe_string(order, 'StopPrice'))),
1401
+ 'triggerPrice': self.parse_number(self.omit_zero(self.safe_string(order, 'StopPrice'))),
1277
1402
  'cost': self.safe_string(order, 'GrossValueExecuted'),
1278
1403
  'amount': self.safe_string(order, 'OrigQuantity'),
1279
1404
  'filled': self.safe_string(order, 'QuantityExecuted'),
@@ -1286,14 +1411,17 @@ class ndax(Exchange, ImplicitAPI):
1286
1411
  def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
1287
1412
  """
1288
1413
  create a trade order
1289
- :see: https://apidoc.ndax.io/#sendorder
1414
+
1415
+ https://apidoc.ndax.io/#sendorder
1416
+
1290
1417
  :param str symbol: unified symbol of the market to create an order in
1291
1418
  :param str type: 'market' or 'limit'
1292
1419
  :param str side: 'buy' or 'sell'
1293
1420
  :param float amount: how much of currency you want to trade in units of base currency
1294
- :param float [price]: the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders
1421
+ :param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
1295
1422
  :param dict [params]: extra parameters specific to the exchange API endpoint
1296
1423
  :param float [params.triggerPrice]: the price at which a trigger order would be triggered
1424
+ :param str [params.clientOrderId]: a unique id for the order
1297
1425
  :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
1298
1426
  """
1299
1427
  omsId = self.safe_integer(self.options, 'omsId', 1)
@@ -1312,7 +1440,7 @@ class ndax(Exchange, ImplicitAPI):
1312
1440
  params = self.omit(params, ['accountId', 'AccountId', 'clientOrderId', 'ClientOrderId', 'triggerPrice'])
1313
1441
  market = self.market(symbol)
1314
1442
  orderSide = 0 if (side == 'buy') else 1
1315
- request = {
1443
+ request: dict = {
1316
1444
  'InstrumentId': int(market['id']),
1317
1445
  'omsId': omsId,
1318
1446
  'AccountId': accountId,
@@ -1357,7 +1485,7 @@ class ndax(Exchange, ImplicitAPI):
1357
1485
  params = self.omit(params, ['accountId', 'AccountId', 'clientOrderId', 'ClientOrderId'])
1358
1486
  market = self.market(symbol)
1359
1487
  orderSide = 0 if (side == 'buy') else 1
1360
- request = {
1488
+ request: dict = {
1361
1489
  'OrderIdToReplace': int(id),
1362
1490
  'InstrumentId': int(market['id']),
1363
1491
  'omsId': omsId,
@@ -1395,7 +1523,9 @@ class ndax(Exchange, ImplicitAPI):
1395
1523
  def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
1396
1524
  """
1397
1525
  fetch all trades made by the user
1398
- :see: https://apidoc.ndax.io/#gettradeshistory
1526
+
1527
+ https://apidoc.ndax.io/#gettradeshistory
1528
+
1399
1529
  :param str symbol: unified market symbol
1400
1530
  :param int [since]: the earliest time in ms to fetch trades for
1401
1531
  :param int [limit]: the maximum number of trades structures to retrieve
@@ -1408,7 +1538,7 @@ class ndax(Exchange, ImplicitAPI):
1408
1538
  defaultAccountId = self.safe_integer_2(self.options, 'accountId', 'AccountId', int(self.accounts[0]['id']))
1409
1539
  accountId = self.safe_integer_2(params, 'accountId', 'AccountId', defaultAccountId)
1410
1540
  params = self.omit(params, ['accountId', 'AccountId'])
1411
- request = {
1541
+ request: dict = {
1412
1542
  'omsId': omsId,
1413
1543
  'AccountId': accountId,
1414
1544
  # 'InstrumentId': market['id'],
@@ -1478,7 +1608,9 @@ class ndax(Exchange, ImplicitAPI):
1478
1608
  def cancel_all_orders(self, symbol: Str = None, params={}):
1479
1609
  """
1480
1610
  cancel all open orders
1481
- :see: https://apidoc.ndax.io/#cancelallorders
1611
+
1612
+ https://apidoc.ndax.io/#cancelallorders
1613
+
1482
1614
  :param str symbol: unified market symbol, only orders in the market of self symbol are cancelled when symbol is not None
1483
1615
  :param dict [params]: extra parameters specific to the exchange API endpoint
1484
1616
  :returns dict[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
@@ -1489,7 +1621,7 @@ class ndax(Exchange, ImplicitAPI):
1489
1621
  defaultAccountId = self.safe_integer_2(self.options, 'accountId', 'AccountId', int(self.accounts[0]['id']))
1490
1622
  accountId = self.safe_integer_2(params, 'accountId', 'AccountId', defaultAccountId)
1491
1623
  params = self.omit(params, ['accountId', 'AccountId'])
1492
- request = {
1624
+ request: dict = {
1493
1625
  'omsId': omsId,
1494
1626
  'AccountId': accountId,
1495
1627
  }
@@ -1505,15 +1637,22 @@ class ndax(Exchange, ImplicitAPI):
1505
1637
  # "detail":null
1506
1638
  # }
1507
1639
  #
1508
- return response
1640
+ return [
1641
+ self.safe_order({
1642
+ 'info': response,
1643
+ }),
1644
+ ]
1509
1645
 
1510
1646
  def cancel_order(self, id: str, symbol: Str = None, params={}):
1511
1647
  """
1512
1648
  cancels an open order
1513
- :see: https://apidoc.ndax.io/#cancelorder
1649
+
1650
+ https://apidoc.ndax.io/#cancelorder
1651
+
1514
1652
  :param str id: order id
1515
1653
  :param str symbol: unified symbol of the market the order was made in
1516
1654
  :param dict [params]: extra parameters specific to the exchange API endpoint
1655
+ :param str [params.clientOrderId]: a unique id for the order
1517
1656
  :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
1518
1657
  """
1519
1658
  omsId = self.safe_integer(self.options, 'omsId', 1)
@@ -1525,7 +1664,7 @@ class ndax(Exchange, ImplicitAPI):
1525
1664
  market = None
1526
1665
  if symbol is not None:
1527
1666
  market = self.market(symbol)
1528
- request = {
1667
+ request: dict = {
1529
1668
  'omsId': omsId,
1530
1669
  # 'AccountId': accountId,
1531
1670
  }
@@ -1545,7 +1684,9 @@ class ndax(Exchange, ImplicitAPI):
1545
1684
  def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
1546
1685
  """
1547
1686
  fetch all unfilled currently open orders
1548
- :see: https://apidoc.ndax.io/#getopenorders
1687
+
1688
+ https://apidoc.ndax.io/#getopenorders
1689
+
1549
1690
  :param str symbol: unified market symbol
1550
1691
  :param int [since]: the earliest time in ms to fetch open orders for
1551
1692
  :param int [limit]: the maximum number of open orders structures to retrieve
@@ -1561,7 +1702,7 @@ class ndax(Exchange, ImplicitAPI):
1561
1702
  market = None
1562
1703
  if symbol is not None:
1563
1704
  market = self.market(symbol)
1564
- request = {
1705
+ request: dict = {
1565
1706
  'omsId': omsId,
1566
1707
  'AccountId': accountId,
1567
1708
  }
@@ -1621,7 +1762,9 @@ class ndax(Exchange, ImplicitAPI):
1621
1762
  def fetch_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
1622
1763
  """
1623
1764
  fetches information on multiple orders made by the user
1624
- :see: https://apidoc.ndax.io/#getorderhistory
1765
+
1766
+ https://apidoc.ndax.io/#getorderhistory
1767
+
1625
1768
  :param str symbol: unified market symbol of the market orders were made in
1626
1769
  :param int [since]: the earliest time in ms to fetch orders for
1627
1770
  :param int [limit]: the maximum number of order structures to retrieve
@@ -1634,7 +1777,7 @@ class ndax(Exchange, ImplicitAPI):
1634
1777
  defaultAccountId = self.safe_integer_2(self.options, 'accountId', 'AccountId', int(self.accounts[0]['id']))
1635
1778
  accountId = self.safe_integer_2(params, 'accountId', 'AccountId', defaultAccountId)
1636
1779
  params = self.omit(params, ['accountId', 'AccountId'])
1637
- request = {
1780
+ request: dict = {
1638
1781
  'omsId': omsId,
1639
1782
  'AccountId': accountId,
1640
1783
  # 'ClientOrderId': clientOrderId,
@@ -1711,7 +1854,10 @@ class ndax(Exchange, ImplicitAPI):
1711
1854
  def fetch_order(self, id: str, symbol: Str = None, params={}):
1712
1855
  """
1713
1856
  fetches information on an order made by the user
1714
- :see: https://apidoc.ndax.io/#getorderstatus
1857
+
1858
+ https://apidoc.ndax.io/#getorderstatus
1859
+
1860
+ :param str id: order id
1715
1861
  :param str symbol: unified symbol of the market the order was made in
1716
1862
  :param dict [params]: extra parameters specific to the exchange API endpoint
1717
1863
  :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
@@ -1725,7 +1871,7 @@ class ndax(Exchange, ImplicitAPI):
1725
1871
  market = None
1726
1872
  if symbol is not None:
1727
1873
  market = self.market(symbol)
1728
- request = {
1874
+ request: dict = {
1729
1875
  'omsId': omsId,
1730
1876
  'AccountId': accountId,
1731
1877
  'OrderId': int(id),
@@ -1784,7 +1930,9 @@ class ndax(Exchange, ImplicitAPI):
1784
1930
  def fetch_order_trades(self, id: str, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
1785
1931
  """
1786
1932
  fetch all the trades made from a single order
1787
- :see: https://apidoc.ndax.io/#getorderhistorybyorderid
1933
+
1934
+ https://apidoc.ndax.io/#getorderhistorybyorderid
1935
+
1788
1936
  :param str id: order id
1789
1937
  :param str symbol: unified market symbol
1790
1938
  :param int [since]: the earliest time in ms to fetch trades for
@@ -1801,7 +1949,7 @@ class ndax(Exchange, ImplicitAPI):
1801
1949
  market = None
1802
1950
  if symbol is not None:
1803
1951
  market = self.market(symbol)
1804
- request = {
1952
+ request: dict = {
1805
1953
  'OMSId': self.parse_to_int(omsId),
1806
1954
  # 'AccountId': accountId,
1807
1955
  'OrderId': int(id),
@@ -1858,10 +2006,10 @@ class ndax(Exchange, ImplicitAPI):
1858
2006
  # ]
1859
2007
  #
1860
2008
  grouped = self.group_by(response, 'ChangeReason')
1861
- trades = self.safe_value(grouped, 'Trade', [])
2009
+ trades = self.safe_list(grouped, 'Trade', [])
1862
2010
  return self.parse_trades(trades, market, since, limit)
1863
2011
 
1864
- def fetch_deposit_address(self, code: str, params={}):
2012
+ def fetch_deposit_address(self, code: str, params={}) -> DepositAddress:
1865
2013
  """
1866
2014
  fetch the deposit address for a currency associated with self account
1867
2015
  :param str code: unified currency code
@@ -1875,7 +2023,7 @@ class ndax(Exchange, ImplicitAPI):
1875
2023
  accountId = self.safe_integer_2(params, 'accountId', 'AccountId', defaultAccountId)
1876
2024
  params = self.omit(params, ['accountId', 'AccountId'])
1877
2025
  currency = self.currency(code)
1878
- request = {
2026
+ request: dict = {
1879
2027
  'omsId': omsId,
1880
2028
  'AccountId': accountId,
1881
2029
  'ProductId': currency['id'],
@@ -1896,7 +2044,7 @@ class ndax(Exchange, ImplicitAPI):
1896
2044
  #
1897
2045
  return self.parse_deposit_address(response, currency)
1898
2046
 
1899
- def parse_deposit_address(self, depositAddress, currency: Currency = None):
2047
+ def parse_deposit_address(self, depositAddress, currency: Currency = None) -> DepositAddress:
1900
2048
  #
1901
2049
  # fetchDepositAddress, createDepositAddress
1902
2050
  #
@@ -1923,11 +2071,11 @@ class ndax(Exchange, ImplicitAPI):
1923
2071
  code = currency['code']
1924
2072
  self.check_address(address)
1925
2073
  return {
2074
+ 'info': depositAddress,
1926
2075
  'currency': code,
2076
+ 'network': None,
1927
2077
  'address': address,
1928
2078
  'tag': tag,
1929
- 'network': None,
1930
- 'info': depositAddress,
1931
2079
  }
1932
2080
 
1933
2081
  def create_deposit_address(self, code: str, params={}):
@@ -1937,7 +2085,7 @@ class ndax(Exchange, ImplicitAPI):
1937
2085
  :param dict [params]: extra parameters specific to the exchange API endpoint
1938
2086
  :returns dict: an `address structure <https://docs.ccxt.com/#/?id=address-structure>`
1939
2087
  """
1940
- request = {
2088
+ request: dict = {
1941
2089
  'GenerateNewKey': True,
1942
2090
  }
1943
2091
  return self.fetch_deposit_address(code, self.extend(request, params))
@@ -1945,7 +2093,9 @@ class ndax(Exchange, ImplicitAPI):
1945
2093
  def fetch_deposits(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
1946
2094
  """
1947
2095
  fetch all deposits made to an account
1948
- :see: https://apidoc.ndax.io/#getdeposits
2096
+
2097
+ https://apidoc.ndax.io/#getdeposits
2098
+
1949
2099
  :param str code: unified currency code
1950
2100
  :param int [since]: not used by ndax fetchDeposits
1951
2101
  :param int [limit]: the maximum number of deposits structures to retrieve
@@ -1961,7 +2111,7 @@ class ndax(Exchange, ImplicitAPI):
1961
2111
  currency = None
1962
2112
  if code is not None:
1963
2113
  currency = self.currency(code)
1964
- request = {
2114
+ request: dict = {
1965
2115
  'omsId': omsId,
1966
2116
  'AccountId': accountId,
1967
2117
  }
@@ -2001,7 +2151,9 @@ class ndax(Exchange, ImplicitAPI):
2001
2151
  def fetch_withdrawals(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
2002
2152
  """
2003
2153
  fetch all withdrawals made from an account
2004
- :see: https://apidoc.ndax.io/#getwithdraws
2154
+
2155
+ https://apidoc.ndax.io/#getwithdraws
2156
+
2005
2157
  :param str code: unified currency code
2006
2158
  :param int [since]: the earliest time in ms to fetch withdrawals for
2007
2159
  :param int [limit]: the maximum number of withdrawals structures to retrieve
@@ -2017,7 +2169,7 @@ class ndax(Exchange, ImplicitAPI):
2017
2169
  currency = None
2018
2170
  if code is not None:
2019
2171
  currency = self.currency(code)
2020
- request = {
2172
+ request: dict = {
2021
2173
  'omsId': omsId,
2022
2174
  'AccountId': accountId,
2023
2175
  }
@@ -2049,7 +2201,7 @@ class ndax(Exchange, ImplicitAPI):
2049
2201
  return self.parse_transactions(response, currency, since, limit)
2050
2202
 
2051
2203
  def parse_transaction_status_by_type(self, status, type=None):
2052
- statusesByType = {
2204
+ statusesByType: dict = {
2053
2205
  'deposit': {
2054
2206
  'New': 'pending', # new ticket awaiting operator review
2055
2207
  'AdminProcessing': 'pending', # an admin is looking at the ticket
@@ -2096,7 +2248,7 @@ class ndax(Exchange, ImplicitAPI):
2096
2248
  statuses = self.safe_value(statusesByType, type, {})
2097
2249
  return self.safe_string(statuses, status, status)
2098
2250
 
2099
- def parse_transaction(self, transaction, currency: Currency = None) -> Transaction:
2251
+ def parse_transaction(self, transaction: dict, currency: Currency = None) -> Transaction:
2100
2252
  #
2101
2253
  # fetchDeposits
2102
2254
  #
@@ -2191,7 +2343,7 @@ class ndax(Exchange, ImplicitAPI):
2191
2343
  'network': None,
2192
2344
  }
2193
2345
 
2194
- def withdraw(self, code: str, amount: float, address, tag=None, params={}):
2346
+ def withdraw(self, code: str, amount: float, address: str, tag=None, params={}) -> Transaction:
2195
2347
  """
2196
2348
  make a withdrawal
2197
2349
  :param str code: unified currency code
@@ -2216,7 +2368,7 @@ class ndax(Exchange, ImplicitAPI):
2216
2368
  accountId = self.safe_integer_2(params, 'accountId', 'AccountId', defaultAccountId)
2217
2369
  params = self.omit(params, ['accountId', 'AccountId'])
2218
2370
  currency = self.currency(code)
2219
- withdrawTemplateTypesRequest = {
2371
+ withdrawTemplateTypesRequest: dict = {
2220
2372
  'omsId': omsId,
2221
2373
  'AccountId': accountId,
2222
2374
  'ProductId': currency['id'],
@@ -2239,7 +2391,7 @@ class ndax(Exchange, ImplicitAPI):
2239
2391
  if firstTemplateType is None:
2240
2392
  raise ExchangeError(self.id + ' withdraw() could not find a withdraw template type for ' + currency['code'])
2241
2393
  templateName = self.safe_string(firstTemplateType, 'TemplateName')
2242
- withdrawTemplateRequest = {
2394
+ withdrawTemplateRequest: dict = {
2243
2395
  'omsId': omsId,
2244
2396
  'AccountId': accountId,
2245
2397
  'ProductId': currency['id'],
@@ -2263,14 +2415,14 @@ class ndax(Exchange, ImplicitAPI):
2263
2415
  if tag is not None:
2264
2416
  if 'Memo' in withdrawTemplate:
2265
2417
  withdrawTemplate['Memo'] = tag
2266
- withdrawPayload = {
2418
+ withdrawPayload: dict = {
2267
2419
  'omsId': omsId,
2268
2420
  'AccountId': accountId,
2269
2421
  'ProductId': currency['id'],
2270
2422
  'TemplateForm': self.json(withdrawTemplate),
2271
2423
  'TemplateType': templateName,
2272
2424
  }
2273
- withdrawRequest = {
2425
+ withdrawRequest: dict = {
2274
2426
  'TfaType': 'Google',
2275
2427
  'TFaCode': self.totp(self.twofa),
2276
2428
  'Payload': self.json(withdrawPayload),
@@ -2327,7 +2479,7 @@ class ndax(Exchange, ImplicitAPI):
2327
2479
  url += '?' + self.urlencode(query)
2328
2480
  return {'url': url, 'method': method, 'body': body, 'headers': headers}
2329
2481
 
2330
- def handle_errors(self, code, reason, url, method, headers, body, response, requestHeaders, requestBody):
2482
+ def handle_errors(self, code: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
2331
2483
  if code == 404:
2332
2484
  raise AuthenticationError(self.id + ' ' + body)
2333
2485
  if response is None: