ccxt 4.2.77__py2.py3-none-any.whl → 4.4.48__py2.py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (546) hide show
  1. ccxt/__init__.py +36 -14
  2. ccxt/abstract/alpaca.py +4 -0
  3. ccxt/abstract/bigone.py +1 -1
  4. ccxt/abstract/binance.py +112 -48
  5. ccxt/abstract/binancecoinm.py +112 -48
  6. ccxt/abstract/binanceus.py +147 -83
  7. ccxt/abstract/binanceusdm.py +112 -48
  8. ccxt/abstract/bingx.py +133 -78
  9. ccxt/abstract/bitbank.py +5 -0
  10. ccxt/abstract/bitfinex.py +136 -65
  11. ccxt/abstract/bitfinex1.py +69 -0
  12. ccxt/abstract/bitflyer.py +1 -0
  13. ccxt/abstract/bitget.py +8 -1
  14. ccxt/abstract/bitmart.py +13 -1
  15. ccxt/abstract/bitopro.py +1 -0
  16. ccxt/abstract/bitpanda.py +0 -12
  17. ccxt/abstract/bitrue.py +3 -3
  18. ccxt/abstract/bitstamp.py +26 -3
  19. ccxt/abstract/blofin.py +24 -0
  20. ccxt/abstract/btcbox.py +1 -0
  21. ccxt/abstract/bybit.py +29 -14
  22. ccxt/abstract/cex.py +28 -29
  23. ccxt/abstract/coinbase.py +6 -0
  24. ccxt/abstract/coinbaseadvanced.py +94 -0
  25. ccxt/abstract/{coinbasepro.py → coinbaseexchange.py} +1 -0
  26. ccxt/abstract/coinbaseinternational.py +1 -1
  27. ccxt/abstract/coincatch.py +94 -0
  28. ccxt/abstract/coinex.py +233 -123
  29. ccxt/abstract/coinmetro.py +1 -0
  30. ccxt/abstract/cryptocom.py +14 -0
  31. ccxt/abstract/defx.py +69 -0
  32. ccxt/abstract/deribit.py +1 -0
  33. ccxt/abstract/digifinex.py +1 -0
  34. ccxt/abstract/ellipx.py +25 -0
  35. ccxt/abstract/gate.py +20 -0
  36. ccxt/abstract/gateio.py +20 -0
  37. ccxt/abstract/gemini.py +1 -0
  38. ccxt/abstract/hashkey.py +67 -0
  39. ccxt/abstract/hyperliquid.py +1 -1
  40. ccxt/abstract/independentreserve.py +6 -0
  41. ccxt/abstract/kraken.py +4 -3
  42. ccxt/abstract/krakenfutures.py +4 -0
  43. ccxt/abstract/kucoin.py +24 -0
  44. ccxt/abstract/kucoinfutures.py +34 -0
  45. ccxt/abstract/luno.py +2 -0
  46. ccxt/abstract/mexc.py +4 -0
  47. ccxt/abstract/myokx.py +340 -0
  48. ccxt/abstract/oceanex.py +5 -0
  49. ccxt/abstract/okx.py +30 -0
  50. ccxt/abstract/onetrading.py +0 -12
  51. ccxt/abstract/oxfun.py +34 -0
  52. ccxt/abstract/paradex.py +40 -0
  53. ccxt/abstract/phemex.py +1 -0
  54. ccxt/abstract/upbit.py +4 -0
  55. ccxt/abstract/vertex.py +19 -0
  56. ccxt/abstract/whitebit.py +31 -1
  57. ccxt/abstract/woo.py +6 -2
  58. ccxt/abstract/woofipro.py +119 -0
  59. ccxt/abstract/xt.py +153 -0
  60. ccxt/abstract/zonda.py +6 -0
  61. ccxt/ace.py +164 -60
  62. ccxt/alpaca.py +727 -63
  63. ccxt/ascendex.py +395 -249
  64. ccxt/async_support/__init__.py +36 -14
  65. ccxt/async_support/ace.py +164 -60
  66. ccxt/async_support/alpaca.py +727 -63
  67. ccxt/async_support/ascendex.py +396 -249
  68. ccxt/async_support/base/exchange.py +531 -155
  69. ccxt/async_support/base/ws/aiohttp_client.py +28 -5
  70. ccxt/async_support/base/ws/cache.py +3 -2
  71. ccxt/async_support/base/ws/client.py +26 -5
  72. ccxt/async_support/base/ws/fast_client.py +4 -3
  73. ccxt/async_support/base/ws/functions.py +1 -1
  74. ccxt/async_support/base/ws/future.py +40 -31
  75. ccxt/async_support/base/ws/order_book_side.py +3 -0
  76. ccxt/async_support/bequant.py +1 -1
  77. ccxt/async_support/bigone.py +329 -202
  78. ccxt/async_support/binance.py +3030 -1087
  79. ccxt/async_support/binancecoinm.py +2 -1
  80. ccxt/async_support/binanceus.py +12 -1
  81. ccxt/async_support/binanceusdm.py +3 -1
  82. ccxt/async_support/bingx.py +3104 -880
  83. ccxt/async_support/bit2c.py +119 -38
  84. ccxt/async_support/bitbank.py +215 -76
  85. ccxt/async_support/bitbns.py +124 -53
  86. ccxt/async_support/bitfinex.py +3236 -1078
  87. ccxt/async_support/bitfinex1.py +1711 -0
  88. ccxt/async_support/bitflyer.py +238 -49
  89. ccxt/async_support/bitget.py +1513 -563
  90. ccxt/async_support/bithumb.py +199 -65
  91. ccxt/async_support/bitmart.py +1320 -435
  92. ccxt/async_support/bitmex.py +308 -111
  93. ccxt/async_support/bitopro.py +256 -96
  94. ccxt/async_support/bitrue.py +365 -233
  95. ccxt/async_support/bitso.py +201 -89
  96. ccxt/async_support/bitstamp.py +438 -269
  97. ccxt/async_support/bitteam.py +179 -73
  98. ccxt/async_support/bitvavo.py +180 -70
  99. ccxt/async_support/bl3p.py +92 -25
  100. ccxt/async_support/blockchaincom.py +193 -79
  101. ccxt/async_support/blofin.py +392 -148
  102. ccxt/async_support/btcalpha.py +161 -55
  103. ccxt/async_support/btcbox.py +250 -34
  104. ccxt/async_support/btcmarkets.py +232 -85
  105. ccxt/async_support/btcturk.py +159 -60
  106. ccxt/async_support/bybit.py +2231 -1193
  107. ccxt/async_support/cex.py +1409 -1329
  108. ccxt/async_support/coinbase.py +1454 -287
  109. ccxt/async_support/coinbaseadvanced.py +17 -0
  110. ccxt/async_support/{coinbasepro.py → coinbaseexchange.py} +233 -99
  111. ccxt/async_support/coinbaseinternational.py +428 -88
  112. ccxt/async_support/coincatch.py +5152 -0
  113. ccxt/async_support/coincheck.py +121 -38
  114. ccxt/async_support/coinex.py +4020 -3339
  115. ccxt/async_support/coinlist.py +273 -116
  116. ccxt/async_support/coinmate.py +204 -97
  117. ccxt/async_support/coinmetro.py +203 -110
  118. ccxt/async_support/coinone.py +142 -68
  119. ccxt/async_support/coinsph.py +206 -89
  120. ccxt/async_support/coinspot.py +137 -62
  121. ccxt/async_support/cryptocom.py +515 -185
  122. ccxt/async_support/currencycom.py +203 -85
  123. ccxt/async_support/defx.py +2066 -0
  124. ccxt/async_support/delta.py +404 -109
  125. ccxt/async_support/deribit.py +557 -323
  126. ccxt/async_support/digifinex.py +340 -223
  127. ccxt/async_support/ellipx.py +1826 -0
  128. ccxt/async_support/exmo.py +259 -128
  129. ccxt/async_support/gate.py +1472 -463
  130. ccxt/async_support/gemini.py +206 -84
  131. ccxt/async_support/hashkey.py +4164 -0
  132. ccxt/async_support/hitbtc.py +334 -178
  133. ccxt/async_support/hollaex.py +134 -83
  134. ccxt/async_support/htx.py +1095 -563
  135. ccxt/async_support/huobijp.py +105 -56
  136. ccxt/async_support/hyperliquid.py +1633 -268
  137. ccxt/async_support/idex.py +148 -95
  138. ccxt/async_support/independentreserve.py +236 -31
  139. ccxt/async_support/indodax.py +165 -62
  140. ccxt/async_support/kraken.py +871 -354
  141. ccxt/async_support/krakenfutures.py +324 -100
  142. ccxt/async_support/kucoin.py +917 -357
  143. ccxt/async_support/kucoinfutures.py +1004 -149
  144. ccxt/async_support/kuna.py +138 -106
  145. ccxt/async_support/latoken.py +135 -79
  146. ccxt/async_support/lbank.py +290 -113
  147. ccxt/async_support/luno.py +112 -62
  148. ccxt/async_support/lykke.py +104 -55
  149. ccxt/async_support/mercado.py +36 -29
  150. ccxt/async_support/mexc.py +995 -429
  151. ccxt/async_support/myokx.py +43 -0
  152. ccxt/async_support/ndax.py +163 -82
  153. ccxt/async_support/novadax.py +121 -75
  154. ccxt/async_support/oceanex.py +175 -59
  155. ccxt/async_support/okcoin.py +222 -163
  156. ccxt/async_support/okx.py +1776 -454
  157. ccxt/async_support/onetrading.py +132 -414
  158. ccxt/async_support/oxfun.py +2832 -0
  159. ccxt/async_support/p2b.py +79 -51
  160. ccxt/async_support/paradex.py +2017 -0
  161. ccxt/async_support/paymium.py +56 -32
  162. ccxt/async_support/phemex.py +572 -196
  163. ccxt/async_support/poloniex.py +218 -95
  164. ccxt/async_support/poloniexfutures.py +260 -92
  165. ccxt/async_support/probit.py +143 -110
  166. ccxt/async_support/timex.py +123 -70
  167. ccxt/async_support/tokocrypto.py +129 -93
  168. ccxt/async_support/tradeogre.py +39 -25
  169. ccxt/async_support/upbit.py +322 -113
  170. ccxt/async_support/vertex.py +2983 -0
  171. ccxt/async_support/wavesexchange.py +227 -173
  172. ccxt/async_support/wazirx.py +145 -65
  173. ccxt/async_support/whitebit.py +533 -138
  174. ccxt/async_support/woo.py +1137 -296
  175. ccxt/async_support/woofipro.py +2716 -0
  176. ccxt/async_support/xt.py +4628 -0
  177. ccxt/async_support/yobit.py +160 -92
  178. ccxt/async_support/zaif.py +80 -33
  179. ccxt/async_support/zonda.py +140 -69
  180. ccxt/base/errors.py +51 -20
  181. ccxt/base/exchange.py +1722 -480
  182. ccxt/base/precise.py +10 -0
  183. ccxt/base/types.py +223 -4
  184. ccxt/bequant.py +1 -1
  185. ccxt/bigone.py +329 -202
  186. ccxt/binance.py +3030 -1087
  187. ccxt/binancecoinm.py +2 -1
  188. ccxt/binanceus.py +12 -1
  189. ccxt/binanceusdm.py +3 -1
  190. ccxt/bingx.py +3104 -880
  191. ccxt/bit2c.py +119 -38
  192. ccxt/bitbank.py +215 -76
  193. ccxt/bitbns.py +124 -53
  194. ccxt/bitfinex.py +3235 -1078
  195. ccxt/bitfinex1.py +1710 -0
  196. ccxt/bitflyer.py +238 -49
  197. ccxt/bitget.py +1513 -563
  198. ccxt/bithumb.py +198 -65
  199. ccxt/bitmart.py +1320 -435
  200. ccxt/bitmex.py +308 -111
  201. ccxt/bitopro.py +256 -96
  202. ccxt/bitrue.py +365 -233
  203. ccxt/bitso.py +201 -89
  204. ccxt/bitstamp.py +438 -269
  205. ccxt/bitteam.py +179 -73
  206. ccxt/bitvavo.py +180 -70
  207. ccxt/bl3p.py +92 -25
  208. ccxt/blockchaincom.py +193 -79
  209. ccxt/blofin.py +392 -148
  210. ccxt/btcalpha.py +161 -55
  211. ccxt/btcbox.py +250 -34
  212. ccxt/btcmarkets.py +232 -85
  213. ccxt/btcturk.py +159 -60
  214. ccxt/bybit.py +2231 -1193
  215. ccxt/cex.py +1408 -1329
  216. ccxt/coinbase.py +1454 -287
  217. ccxt/coinbaseadvanced.py +17 -0
  218. ccxt/{coinbasepro.py → coinbaseexchange.py} +233 -99
  219. ccxt/coinbaseinternational.py +428 -88
  220. ccxt/coincatch.py +5152 -0
  221. ccxt/coincheck.py +121 -38
  222. ccxt/coinex.py +4020 -3339
  223. ccxt/coinlist.py +273 -116
  224. ccxt/coinmate.py +204 -97
  225. ccxt/coinmetro.py +203 -110
  226. ccxt/coinone.py +142 -68
  227. ccxt/coinsph.py +206 -89
  228. ccxt/coinspot.py +137 -62
  229. ccxt/cryptocom.py +515 -185
  230. ccxt/currencycom.py +203 -85
  231. ccxt/defx.py +2065 -0
  232. ccxt/delta.py +404 -109
  233. ccxt/deribit.py +557 -323
  234. ccxt/digifinex.py +340 -223
  235. ccxt/ellipx.py +1826 -0
  236. ccxt/exmo.py +259 -128
  237. ccxt/gate.py +1472 -463
  238. ccxt/gemini.py +206 -84
  239. ccxt/hashkey.py +4164 -0
  240. ccxt/hitbtc.py +334 -178
  241. ccxt/hollaex.py +134 -83
  242. ccxt/htx.py +1095 -563
  243. ccxt/huobijp.py +105 -56
  244. ccxt/hyperliquid.py +1632 -268
  245. ccxt/idex.py +148 -95
  246. ccxt/independentreserve.py +235 -31
  247. ccxt/indodax.py +165 -62
  248. ccxt/kraken.py +871 -354
  249. ccxt/krakenfutures.py +324 -100
  250. ccxt/kucoin.py +917 -357
  251. ccxt/kucoinfutures.py +1004 -149
  252. ccxt/kuna.py +138 -106
  253. ccxt/latoken.py +135 -79
  254. ccxt/lbank.py +290 -113
  255. ccxt/luno.py +112 -62
  256. ccxt/lykke.py +104 -55
  257. ccxt/mercado.py +36 -29
  258. ccxt/mexc.py +994 -429
  259. ccxt/myokx.py +43 -0
  260. ccxt/ndax.py +163 -82
  261. ccxt/novadax.py +121 -75
  262. ccxt/oceanex.py +175 -59
  263. ccxt/okcoin.py +222 -163
  264. ccxt/okx.py +1776 -454
  265. ccxt/onetrading.py +132 -414
  266. ccxt/oxfun.py +2831 -0
  267. ccxt/p2b.py +79 -51
  268. ccxt/paradex.py +2017 -0
  269. ccxt/paymium.py +56 -32
  270. ccxt/phemex.py +572 -196
  271. ccxt/poloniex.py +218 -95
  272. ccxt/poloniexfutures.py +260 -92
  273. ccxt/pro/__init__.py +29 -5
  274. ccxt/pro/alpaca.py +32 -17
  275. ccxt/pro/ascendex.py +62 -14
  276. ccxt/pro/bequant.py +4 -0
  277. ccxt/pro/binance.py +1596 -329
  278. ccxt/pro/binancecoinm.py +1 -0
  279. ccxt/pro/binanceus.py +2 -9
  280. ccxt/pro/binanceusdm.py +2 -0
  281. ccxt/pro/bingx.py +527 -134
  282. ccxt/pro/bitcoincom.py +4 -1
  283. ccxt/pro/bitfinex.py +731 -266
  284. ccxt/pro/bitfinex1.py +635 -0
  285. ccxt/pro/bitget.py +726 -357
  286. ccxt/pro/bithumb.py +380 -0
  287. ccxt/pro/bitmart.py +138 -39
  288. ccxt/pro/bitmex.py +199 -40
  289. ccxt/pro/bitopro.py +25 -13
  290. ccxt/pro/bitrue.py +31 -32
  291. ccxt/pro/bitstamp.py +7 -6
  292. ccxt/pro/bitvavo.py +203 -81
  293. ccxt/pro/blockchaincom.py +30 -17
  294. ccxt/pro/blofin.py +692 -0
  295. ccxt/pro/bybit.py +791 -82
  296. ccxt/pro/cex.py +99 -51
  297. ccxt/pro/coinbase.py +220 -30
  298. ccxt/{async_support/hitbtc3.py → pro/coinbaseadvanced.py} +5 -5
  299. ccxt/pro/{coinbasepro.py → coinbaseexchange.py} +19 -19
  300. ccxt/pro/coinbaseinternational.py +193 -30
  301. ccxt/pro/coincatch.py +1464 -0
  302. ccxt/pro/coincheck.py +11 -6
  303. ccxt/pro/coinex.py +965 -665
  304. ccxt/pro/coinone.py +17 -10
  305. ccxt/pro/cryptocom.py +446 -66
  306. ccxt/pro/currencycom.py +11 -10
  307. ccxt/pro/defx.py +832 -0
  308. ccxt/pro/deribit.py +167 -31
  309. ccxt/pro/exmo.py +252 -20
  310. ccxt/pro/gate.py +729 -64
  311. ccxt/pro/gemini.py +44 -26
  312. ccxt/pro/hashkey.py +802 -0
  313. ccxt/pro/hitbtc.py +208 -103
  314. ccxt/pro/hollaex.py +25 -9
  315. ccxt/pro/htx.py +83 -39
  316. ccxt/pro/huobijp.py +17 -16
  317. ccxt/pro/hyperliquid.py +502 -31
  318. ccxt/pro/idex.py +28 -13
  319. ccxt/pro/independentreserve.py +21 -16
  320. ccxt/pro/kraken.py +298 -51
  321. ccxt/pro/krakenfutures.py +166 -75
  322. ccxt/pro/kucoin.py +395 -77
  323. ccxt/pro/kucoinfutures.py +400 -99
  324. ccxt/pro/lbank.py +52 -31
  325. ccxt/pro/luno.py +12 -10
  326. ccxt/pro/mexc.py +400 -50
  327. ccxt/pro/myokx.py +28 -0
  328. ccxt/pro/ndax.py +25 -12
  329. ccxt/pro/okcoin.py +28 -9
  330. ccxt/pro/okx.py +935 -124
  331. ccxt/pro/onetrading.py +41 -24
  332. ccxt/pro/oxfun.py +1054 -0
  333. ccxt/pro/p2b.py +100 -24
  334. ccxt/pro/paradex.py +352 -0
  335. ccxt/pro/phemex.py +92 -33
  336. ccxt/pro/poloniex.py +128 -49
  337. ccxt/pro/poloniexfutures.py +53 -32
  338. ccxt/pro/probit.py +92 -85
  339. ccxt/pro/upbit.py +401 -8
  340. ccxt/pro/vertex.py +943 -0
  341. ccxt/pro/wazirx.py +46 -28
  342. ccxt/pro/whitebit.py +65 -12
  343. ccxt/pro/woo.py +437 -65
  344. ccxt/pro/woofipro.py +1271 -0
  345. ccxt/pro/xt.py +1067 -0
  346. ccxt/probit.py +143 -110
  347. ccxt/static_dependencies/__init__.py +1 -1
  348. ccxt/static_dependencies/lark/__init__.py +38 -0
  349. ccxt/static_dependencies/lark/__pyinstaller/__init__.py +6 -0
  350. ccxt/static_dependencies/lark/__pyinstaller/hook-lark.py +14 -0
  351. ccxt/static_dependencies/lark/ast_utils.py +59 -0
  352. ccxt/static_dependencies/lark/common.py +86 -0
  353. ccxt/static_dependencies/lark/exceptions.py +292 -0
  354. ccxt/static_dependencies/lark/grammar.py +130 -0
  355. ccxt/static_dependencies/lark/grammars/__init__.py +0 -0
  356. ccxt/static_dependencies/lark/indenter.py +143 -0
  357. ccxt/static_dependencies/lark/lark.py +658 -0
  358. ccxt/static_dependencies/lark/lexer.py +678 -0
  359. ccxt/static_dependencies/lark/load_grammar.py +1428 -0
  360. ccxt/static_dependencies/lark/parse_tree_builder.py +391 -0
  361. ccxt/static_dependencies/lark/parser_frontends.py +257 -0
  362. ccxt/static_dependencies/lark/parsers/__init__.py +0 -0
  363. ccxt/static_dependencies/lark/parsers/cyk.py +340 -0
  364. ccxt/static_dependencies/lark/parsers/earley.py +314 -0
  365. ccxt/static_dependencies/lark/parsers/earley_common.py +42 -0
  366. ccxt/static_dependencies/lark/parsers/earley_forest.py +801 -0
  367. ccxt/static_dependencies/lark/parsers/grammar_analysis.py +203 -0
  368. ccxt/static_dependencies/lark/parsers/lalr_analysis.py +332 -0
  369. ccxt/static_dependencies/lark/parsers/lalr_interactive_parser.py +158 -0
  370. ccxt/static_dependencies/lark/parsers/lalr_parser.py +122 -0
  371. ccxt/static_dependencies/lark/parsers/lalr_parser_state.py +110 -0
  372. ccxt/static_dependencies/lark/parsers/xearley.py +165 -0
  373. ccxt/static_dependencies/lark/py.typed +0 -0
  374. ccxt/static_dependencies/lark/reconstruct.py +107 -0
  375. ccxt/static_dependencies/lark/tools/__init__.py +70 -0
  376. ccxt/static_dependencies/lark/tools/nearley.py +202 -0
  377. ccxt/static_dependencies/lark/tools/serialize.py +32 -0
  378. ccxt/static_dependencies/lark/tools/standalone.py +196 -0
  379. ccxt/static_dependencies/lark/tree.py +267 -0
  380. ccxt/static_dependencies/lark/tree_matcher.py +186 -0
  381. ccxt/static_dependencies/lark/tree_templates.py +180 -0
  382. ccxt/static_dependencies/lark/utils.py +343 -0
  383. ccxt/static_dependencies/lark/visitors.py +596 -0
  384. ccxt/static_dependencies/marshmallow/__init__.py +81 -0
  385. ccxt/static_dependencies/marshmallow/base.py +65 -0
  386. ccxt/static_dependencies/marshmallow/class_registry.py +94 -0
  387. ccxt/static_dependencies/marshmallow/decorators.py +231 -0
  388. ccxt/static_dependencies/marshmallow/error_store.py +60 -0
  389. ccxt/static_dependencies/marshmallow/exceptions.py +71 -0
  390. ccxt/static_dependencies/marshmallow/fields.py +2114 -0
  391. ccxt/static_dependencies/marshmallow/orderedset.py +89 -0
  392. ccxt/static_dependencies/marshmallow/py.typed +0 -0
  393. ccxt/static_dependencies/marshmallow/schema.py +1228 -0
  394. ccxt/static_dependencies/marshmallow/types.py +12 -0
  395. ccxt/static_dependencies/marshmallow/utils.py +378 -0
  396. ccxt/static_dependencies/marshmallow/validate.py +678 -0
  397. ccxt/static_dependencies/marshmallow/warnings.py +2 -0
  398. ccxt/static_dependencies/marshmallow_dataclass/__init__.py +1047 -0
  399. ccxt/static_dependencies/marshmallow_dataclass/collection_field.py +51 -0
  400. ccxt/static_dependencies/marshmallow_dataclass/lazy_class_attribute.py +45 -0
  401. ccxt/static_dependencies/marshmallow_dataclass/mypy.py +71 -0
  402. ccxt/static_dependencies/marshmallow_dataclass/py.typed +0 -0
  403. ccxt/static_dependencies/marshmallow_dataclass/typing.py +14 -0
  404. ccxt/static_dependencies/marshmallow_dataclass/union_field.py +82 -0
  405. ccxt/static_dependencies/marshmallow_oneofschema/__init__.py +1 -0
  406. ccxt/static_dependencies/marshmallow_oneofschema/one_of_schema.py +193 -0
  407. ccxt/static_dependencies/marshmallow_oneofschema/py.typed +0 -0
  408. ccxt/static_dependencies/starknet/__init__.py +0 -0
  409. ccxt/static_dependencies/starknet/cairo/__init__.py +0 -0
  410. ccxt/static_dependencies/starknet/cairo/data_types.py +123 -0
  411. ccxt/static_dependencies/starknet/cairo/deprecated_parse/__init__.py +0 -0
  412. ccxt/static_dependencies/starknet/cairo/deprecated_parse/cairo_types.py +77 -0
  413. ccxt/static_dependencies/starknet/cairo/deprecated_parse/parser.py +46 -0
  414. ccxt/static_dependencies/starknet/cairo/deprecated_parse/parser_transformer.py +138 -0
  415. ccxt/static_dependencies/starknet/cairo/felt.py +64 -0
  416. ccxt/static_dependencies/starknet/cairo/type_parser.py +121 -0
  417. ccxt/static_dependencies/starknet/cairo/v1/__init__.py +0 -0
  418. ccxt/static_dependencies/starknet/cairo/v1/type_parser.py +59 -0
  419. ccxt/static_dependencies/starknet/cairo/v2/__init__.py +0 -0
  420. ccxt/static_dependencies/starknet/cairo/v2/type_parser.py +77 -0
  421. ccxt/static_dependencies/starknet/ccxt_utils.py +7 -0
  422. ccxt/static_dependencies/starknet/common.py +15 -0
  423. ccxt/static_dependencies/starknet/constants.py +39 -0
  424. ccxt/static_dependencies/starknet/hash/__init__.py +0 -0
  425. ccxt/static_dependencies/starknet/hash/address.py +79 -0
  426. ccxt/static_dependencies/starknet/hash/compiled_class_hash_objects.py +111 -0
  427. ccxt/static_dependencies/starknet/hash/selector.py +16 -0
  428. ccxt/static_dependencies/starknet/hash/storage.py +12 -0
  429. ccxt/static_dependencies/starknet/hash/utils.py +78 -0
  430. ccxt/static_dependencies/starknet/models/__init__.py +0 -0
  431. ccxt/static_dependencies/starknet/models/typed_data.py +45 -0
  432. ccxt/static_dependencies/starknet/serialization/__init__.py +24 -0
  433. ccxt/static_dependencies/starknet/serialization/_calldata_reader.py +40 -0
  434. ccxt/static_dependencies/starknet/serialization/_context.py +142 -0
  435. ccxt/static_dependencies/starknet/serialization/data_serializers/__init__.py +10 -0
  436. ccxt/static_dependencies/starknet/serialization/data_serializers/_common.py +82 -0
  437. ccxt/static_dependencies/starknet/serialization/data_serializers/array_serializer.py +43 -0
  438. ccxt/static_dependencies/starknet/serialization/data_serializers/bool_serializer.py +37 -0
  439. ccxt/static_dependencies/starknet/serialization/data_serializers/byte_array_serializer.py +66 -0
  440. ccxt/static_dependencies/starknet/serialization/data_serializers/cairo_data_serializer.py +71 -0
  441. ccxt/static_dependencies/starknet/serialization/data_serializers/enum_serializer.py +71 -0
  442. ccxt/static_dependencies/starknet/serialization/data_serializers/felt_serializer.py +50 -0
  443. ccxt/static_dependencies/starknet/serialization/data_serializers/named_tuple_serializer.py +58 -0
  444. ccxt/static_dependencies/starknet/serialization/data_serializers/option_serializer.py +43 -0
  445. ccxt/static_dependencies/starknet/serialization/data_serializers/output_serializer.py +40 -0
  446. ccxt/static_dependencies/starknet/serialization/data_serializers/payload_serializer.py +72 -0
  447. ccxt/static_dependencies/starknet/serialization/data_serializers/struct_serializer.py +36 -0
  448. ccxt/static_dependencies/starknet/serialization/data_serializers/tuple_serializer.py +36 -0
  449. ccxt/static_dependencies/starknet/serialization/data_serializers/uint256_serializer.py +76 -0
  450. ccxt/static_dependencies/starknet/serialization/data_serializers/uint_serializer.py +100 -0
  451. ccxt/static_dependencies/starknet/serialization/data_serializers/unit_serializer.py +32 -0
  452. ccxt/static_dependencies/starknet/serialization/errors.py +10 -0
  453. ccxt/static_dependencies/starknet/serialization/factory.py +229 -0
  454. ccxt/static_dependencies/starknet/serialization/function_serialization_adapter.py +110 -0
  455. ccxt/static_dependencies/starknet/serialization/tuple_dataclass.py +59 -0
  456. ccxt/static_dependencies/starknet/utils/__init__.py +0 -0
  457. ccxt/static_dependencies/starknet/utils/constructor_args_translator.py +86 -0
  458. ccxt/static_dependencies/starknet/utils/iterable.py +13 -0
  459. ccxt/static_dependencies/starknet/utils/schema.py +13 -0
  460. ccxt/static_dependencies/starknet/utils/typed_data.py +182 -0
  461. ccxt/static_dependencies/starkware/__init__.py +0 -0
  462. ccxt/static_dependencies/starkware/crypto/__init__.py +0 -0
  463. ccxt/static_dependencies/starkware/crypto/fast_pedersen_hash.py +50 -0
  464. ccxt/static_dependencies/starkware/crypto/math_utils.py +78 -0
  465. ccxt/static_dependencies/starkware/crypto/signature.py +2344 -0
  466. ccxt/static_dependencies/starkware/crypto/utils.py +63 -0
  467. ccxt/static_dependencies/sympy/__init__.py +0 -0
  468. ccxt/static_dependencies/sympy/core/__init__.py +0 -0
  469. ccxt/static_dependencies/sympy/core/intfunc.py +35 -0
  470. ccxt/static_dependencies/sympy/external/__init__.py +0 -0
  471. ccxt/static_dependencies/sympy/external/gmpy.py +345 -0
  472. ccxt/static_dependencies/sympy/external/importtools.py +187 -0
  473. ccxt/static_dependencies/sympy/external/ntheory.py +637 -0
  474. ccxt/static_dependencies/sympy/external/pythonmpq.py +341 -0
  475. ccxt/static_dependencies/typing_inspect/__init__.py +0 -0
  476. ccxt/static_dependencies/typing_inspect/typing_inspect.py +851 -0
  477. ccxt/test/{test_async.py → tests_async.py} +456 -391
  478. ccxt/test/tests_helpers.py +285 -0
  479. ccxt/test/tests_init.py +39 -0
  480. ccxt/test/{test_sync.py → tests_sync.py} +456 -393
  481. ccxt/timex.py +123 -70
  482. ccxt/tokocrypto.py +129 -93
  483. ccxt/tradeogre.py +39 -25
  484. ccxt/upbit.py +322 -113
  485. ccxt/vertex.py +2983 -0
  486. ccxt/wavesexchange.py +227 -173
  487. ccxt/wazirx.py +145 -65
  488. ccxt/whitebit.py +533 -138
  489. ccxt/woo.py +1137 -296
  490. ccxt/woofipro.py +2716 -0
  491. ccxt/xt.py +4627 -0
  492. ccxt/yobit.py +159 -92
  493. ccxt/zaif.py +80 -33
  494. ccxt/zonda.py +140 -69
  495. ccxt-4.4.48.dist-info/LICENSE.txt +21 -0
  496. ccxt-4.4.48.dist-info/METADATA +646 -0
  497. ccxt-4.4.48.dist-info/RECORD +669 -0
  498. {ccxt-4.2.77.dist-info → ccxt-4.4.48.dist-info}/WHEEL +1 -1
  499. ccxt/abstract/bitbay.py +0 -47
  500. ccxt/abstract/bitfinex2.py +0 -139
  501. ccxt/abstract/hitbtc3.py +0 -115
  502. ccxt/async_support/bitbay.py +0 -17
  503. ccxt/async_support/bitfinex2.py +0 -3496
  504. ccxt/async_support/flowbtc.py +0 -34
  505. ccxt/bitbay.py +0 -17
  506. ccxt/bitfinex2.py +0 -3496
  507. ccxt/flowbtc.py +0 -34
  508. ccxt/hitbtc3.py +0 -16
  509. ccxt/pro/bitfinex2.py +0 -1081
  510. ccxt/test/base/__init__.py +0 -28
  511. ccxt/test/base/test_account.py +0 -26
  512. ccxt/test/base/test_balance.py +0 -56
  513. ccxt/test/base/test_borrow_interest.py +0 -35
  514. ccxt/test/base/test_borrow_rate.py +0 -32
  515. ccxt/test/base/test_calculate_fee.py +0 -51
  516. ccxt/test/base/test_crypto.py +0 -127
  517. ccxt/test/base/test_currency.py +0 -76
  518. ccxt/test/base/test_datetime.py +0 -103
  519. ccxt/test/base/test_decimal_to_precision.py +0 -392
  520. ccxt/test/base/test_deep_extend.py +0 -68
  521. ccxt/test/base/test_deposit_withdrawal.py +0 -50
  522. ccxt/test/base/test_exchange_datetime_functions.py +0 -76
  523. ccxt/test/base/test_funding_rate_history.py +0 -29
  524. ccxt/test/base/test_last_price.py +0 -32
  525. ccxt/test/base/test_ledger_entry.py +0 -45
  526. ccxt/test/base/test_ledger_item.py +0 -48
  527. ccxt/test/base/test_leverage_tier.py +0 -33
  528. ccxt/test/base/test_margin_mode.py +0 -24
  529. ccxt/test/base/test_margin_modification.py +0 -35
  530. ccxt/test/base/test_market.py +0 -190
  531. ccxt/test/base/test_number.py +0 -411
  532. ccxt/test/base/test_ohlcv.py +0 -32
  533. ccxt/test/base/test_open_interest.py +0 -32
  534. ccxt/test/base/test_order.py +0 -64
  535. ccxt/test/base/test_order_book.py +0 -63
  536. ccxt/test/base/test_position.py +0 -60
  537. ccxt/test/base/test_shared_methods.py +0 -345
  538. ccxt/test/base/test_status.py +0 -24
  539. ccxt/test/base/test_throttle.py +0 -126
  540. ccxt/test/base/test_ticker.py +0 -86
  541. ccxt/test/base/test_trade.py +0 -47
  542. ccxt/test/base/test_trading_fee.py +0 -26
  543. ccxt/test/base/test_transaction.py +0 -39
  544. ccxt-4.2.77.dist-info/METADATA +0 -626
  545. ccxt-4.2.77.dist-info/RECORD +0 -534
  546. {ccxt-4.2.77.dist-info → ccxt-4.4.48.dist-info}/top_level.txt +0 -0
@@ -7,13 +7,13 @@ from ccxt.async_support.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,
@@ -284,14 +317,16 @@ class ndax(Exchange, ImplicitAPI):
284
317
  async def sign_in(self, params={}):
285
318
  """
286
319
  sign in, must be called prior to using other authenticated methods
287
- :see: https://apidoc.ndax.io/#authenticate2fa
320
+
321
+ https://apidoc.ndax.io/#authenticate2fa
322
+
288
323
  :param dict [params]: extra parameters specific to the exchange API endpoint
289
324
  :returns: response from exchange
290
325
  """
291
326
  self.check_required_credentials()
292
327
  if self.login is None or self.password is None:
293
328
  raise AuthenticationError(self.id + ' signIn() requires exchange.login, exchange.password')
294
- request = {
329
+ request: dict = {
295
330
  'grant_type': 'client_credentials', # the only supported value
296
331
  }
297
332
  response = await self.publicGetAuthenticate(self.extend(request, params))
@@ -320,7 +355,7 @@ class ndax(Exchange, ImplicitAPI):
320
355
  #
321
356
  # {
322
357
  # "Authenticated": True,
323
- # "UserId":57765,
358
+ # "UserId":57764,
324
359
  # "SessionToken":"4a2a5857-c4e5-4fac-b09e-2c4c30b591a0"
325
360
  # }
326
361
  #
@@ -329,15 +364,17 @@ class ndax(Exchange, ImplicitAPI):
329
364
  return responseInner
330
365
  return response
331
366
 
332
- async def fetch_currencies(self, params={}):
367
+ async def fetch_currencies(self, params={}) -> Currencies:
333
368
  """
334
369
  fetches all available currencies on an exchange
335
- :see: https://apidoc.ndax.io/#getproduct
370
+
371
+ https://apidoc.ndax.io/#getproduct
372
+
336
373
  :param dict [params]: extra parameters specific to the exchange API endpoint
337
374
  :returns dict: an associative dictionary of currencies
338
375
  """
339
376
  omsId = self.safe_integer(self.options, 'omsId', 1)
340
- request = {
377
+ request: dict = {
341
378
  'omsId': omsId,
342
379
  }
343
380
  response = await self.publicGetGetProducts(self.extend(request, params))
@@ -357,7 +394,7 @@ class ndax(Exchange, ImplicitAPI):
357
394
  # },
358
395
  # ]
359
396
  #
360
- result = {}
397
+ result: dict = {}
361
398
  for i in range(0, len(response)):
362
399
  currency = response[i]
363
400
  id = self.safe_string(currency, 'ProductId')
@@ -395,15 +432,17 @@ class ndax(Exchange, ImplicitAPI):
395
432
  }
396
433
  return result
397
434
 
398
- async def fetch_markets(self, params={}):
435
+ async def fetch_markets(self, params={}) -> List[Market]:
399
436
  """
400
437
  retrieves data on all markets for ndax
401
- :see: https://apidoc.ndax.io/#getinstruments
438
+
439
+ https://apidoc.ndax.io/#getinstruments
440
+
402
441
  :param dict [params]: extra parameters specific to the exchange API endpoint
403
442
  :returns dict[]: an array of objects representing market data
404
443
  """
405
444
  omsId = self.safe_integer(self.options, 'omsId', 1)
406
- request = {
445
+ request: dict = {
407
446
  'omsId': omsId,
408
447
  }
409
448
  response = await self.publicGetGetInstruments(self.extend(request, params))
@@ -455,7 +494,7 @@ class ndax(Exchange, ImplicitAPI):
455
494
  #
456
495
  return self.parse_markets(response)
457
496
 
458
- def parse_market(self, market) -> Market:
497
+ def parse_market(self, market: dict) -> Market:
459
498
  id = self.safe_string(market, 'InstrumentId')
460
499
  # lowercaseId = self.safe_string_lower(market, 'symbol')
461
500
  baseId = self.safe_string(market, 'Product1')
@@ -517,7 +556,7 @@ class ndax(Exchange, ImplicitAPI):
517
556
 
518
557
  def parse_order_book(self, orderbook, symbol, timestamp=None, bidsKey='bids', asksKey='asks', priceKey: IndexType = 6, amountKey: IndexType = 8, countOrIdKey: IndexType = 2):
519
558
  nonce = None
520
- result = {
559
+ result: dict = {
521
560
  'symbol': symbol,
522
561
  'bids': [],
523
562
  'asks': [],
@@ -551,7 +590,9 @@ class ndax(Exchange, ImplicitAPI):
551
590
  async def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
552
591
  """
553
592
  fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
554
- :see: https://apidoc.ndax.io/#getl2snapshot
593
+
594
+ https://apidoc.ndax.io/#getl2snapshot
595
+
555
596
  :param str symbol: unified symbol of the market to fetch the order book for
556
597
  :param int [limit]: the maximum amount of order book entries to return
557
598
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -561,7 +602,7 @@ class ndax(Exchange, ImplicitAPI):
561
602
  await self.load_markets()
562
603
  market = self.market(symbol)
563
604
  limit = 100 if (limit is None) else limit # default 100
564
- request = {
605
+ request: dict = {
565
606
  'omsId': omsId,
566
607
  'InstrumentId': market['id'],
567
608
  'Depth': limit, # default 100
@@ -591,7 +632,7 @@ class ndax(Exchange, ImplicitAPI):
591
632
  #
592
633
  return self.parse_order_book(response, symbol)
593
634
 
594
- def parse_ticker(self, ticker, market: Market = None) -> Ticker:
635
+ def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
595
636
  #
596
637
  # fetchTicker
597
638
  #
@@ -660,7 +701,9 @@ class ndax(Exchange, ImplicitAPI):
660
701
  async def fetch_ticker(self, symbol: str, params={}) -> Ticker:
661
702
  """
662
703
  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
704
+
705
+ https://apidoc.ndax.io/#getlevel1
706
+
664
707
  :param str symbol: unified symbol of the market to fetch the ticker for
665
708
  :param dict [params]: extra parameters specific to the exchange API endpoint
666
709
  :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
@@ -668,7 +711,7 @@ class ndax(Exchange, ImplicitAPI):
668
711
  omsId = self.safe_integer(self.options, 'omsId', 1)
669
712
  await self.load_markets()
670
713
  market = self.market(symbol)
671
- request = {
714
+ request: dict = {
672
715
  'omsId': omsId,
673
716
  'InstrumentId': market['id'],
674
717
  }
@@ -731,7 +774,9 @@ class ndax(Exchange, ImplicitAPI):
731
774
  async def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
732
775
  """
733
776
  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
777
+
778
+ https://apidoc.ndax.io/#gettickerhistory
779
+
735
780
  :param str symbol: unified symbol of the market to fetch OHLCV data for
736
781
  :param str timeframe: the length of time each candle represents
737
782
  :param int [since]: timestamp in ms of the earliest candle to fetch
@@ -742,7 +787,7 @@ class ndax(Exchange, ImplicitAPI):
742
787
  omsId = self.safe_integer(self.options, 'omsId', 1)
743
788
  await self.load_markets()
744
789
  market = self.market(symbol)
745
- request = {
790
+ request: dict = {
746
791
  'omsId': omsId,
747
792
  'InstrumentId': market['id'],
748
793
  'Interval': self.safe_string(self.timeframes, timeframe, timeframe),
@@ -769,7 +814,7 @@ class ndax(Exchange, ImplicitAPI):
769
814
  #
770
815
  return self.parse_ohlcvs(response, market, timeframe, since, limit)
771
816
 
772
- def parse_trade(self, trade, market: Market = None) -> Trade:
817
+ def parse_trade(self, trade: dict, market: Market = None) -> Trade:
773
818
  #
774
819
  # fetchTrades(public)
775
820
  #
@@ -946,7 +991,7 @@ class ndax(Exchange, ImplicitAPI):
946
991
  omsId = self.safe_integer(self.options, 'omsId', 1)
947
992
  await self.load_markets()
948
993
  market = self.market(symbol)
949
- request = {
994
+ request: dict = {
950
995
  'omsId': omsId,
951
996
  'InstrumentId': market['id'],
952
997
  }
@@ -965,7 +1010,9 @@ class ndax(Exchange, ImplicitAPI):
965
1010
  async def fetch_accounts(self, params={}) -> List[Account]:
966
1011
  """
967
1012
  fetch all the accounts associated with a profile
968
- :see: https://apidoc.ndax.io/#getuseraccounts
1013
+
1014
+ https://apidoc.ndax.io/#getuseraccounts
1015
+
969
1016
  :param dict [params]: extra parameters specific to the exchange API endpoint
970
1017
  :returns dict: a dictionary of `account structures <https://docs.ccxt.com/#/?id=account-structure>` indexed by the account type
971
1018
  """
@@ -973,7 +1020,7 @@ class ndax(Exchange, ImplicitAPI):
973
1020
  raise AuthenticationError(self.id + ' fetchAccounts() requires exchange.login email credential')
974
1021
  omsId = self.safe_integer(self.options, 'omsId', 1)
975
1022
  self.check_required_credentials()
976
- request = {
1023
+ request: dict = {
977
1024
  'omsId': omsId,
978
1025
  'UserId': self.uid,
979
1026
  'UserName': self.login,
@@ -994,7 +1041,7 @@ class ndax(Exchange, ImplicitAPI):
994
1041
  return result
995
1042
 
996
1043
  def parse_balance(self, response) -> Balances:
997
- result = {
1044
+ result: dict = {
998
1045
  'info': response,
999
1046
  'timestamp': None,
1000
1047
  'datetime': None,
@@ -1013,17 +1060,21 @@ class ndax(Exchange, ImplicitAPI):
1013
1060
  async def fetch_balance(self, params={}) -> Balances:
1014
1061
  """
1015
1062
  query for balance and get the amount of funds available for trading or funds locked in orders
1016
- :see: https://apidoc.ndax.io/#getaccountpositions
1063
+
1064
+ https://apidoc.ndax.io/#getaccountpositions
1065
+
1017
1066
  :param dict [params]: extra parameters specific to the exchange API endpoint
1018
1067
  :returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
1019
1068
  """
1020
1069
  omsId = self.safe_integer(self.options, 'omsId', 1)
1021
1070
  await self.load_markets()
1022
1071
  await self.load_accounts()
1023
- defaultAccountId = self.safe_integer_2(self.options, 'accountId', 'AccountId', int(self.accounts[0]['id']))
1072
+ defaultAccountId = self.safe_integer_2(self.options, 'accountId', 'AccountId')
1024
1073
  accountId = self.safe_integer_2(params, 'accountId', 'AccountId', defaultAccountId)
1074
+ if accountId is None:
1075
+ accountId = int(self.accounts[0]['id'])
1025
1076
  params = self.omit(params, ['accountId', 'AccountId'])
1026
- request = {
1077
+ request: dict = {
1027
1078
  'omsId': omsId,
1028
1079
  'AccountId': accountId,
1029
1080
  }
@@ -1062,7 +1113,7 @@ class ndax(Exchange, ImplicitAPI):
1062
1113
  return self.parse_balance(response)
1063
1114
 
1064
1115
  def parse_ledger_entry_type(self, type):
1065
- types = {
1116
+ types: dict = {
1066
1117
  'Trade': 'trade',
1067
1118
  'Deposit': 'transaction',
1068
1119
  'Withdraw': 'transaction',
@@ -1079,7 +1130,7 @@ class ndax(Exchange, ImplicitAPI):
1079
1130
  }
1080
1131
  return self.safe_string(types, type, type)
1081
1132
 
1082
- def parse_ledger_entry(self, item, currency: Currency = None):
1133
+ def parse_ledger_entry(self, item: dict, currency: Currency = None) -> LedgerEntry:
1083
1134
  #
1084
1135
  # {
1085
1136
  # "TransactionId": 2663709493,
@@ -1097,6 +1148,7 @@ class ndax(Exchange, ImplicitAPI):
1097
1148
  # }
1098
1149
  #
1099
1150
  currencyId = self.safe_string(item, 'ProductId')
1151
+ currency = self.safe_currency(currencyId, currency)
1100
1152
  credit = self.safe_string(item, 'CR')
1101
1153
  debit = self.safe_string(item, 'DR')
1102
1154
  amount = None
@@ -1114,7 +1166,7 @@ class ndax(Exchange, ImplicitAPI):
1114
1166
  elif direction == 'in':
1115
1167
  before = Precise.string_max('0', Precise.string_sub(after, amount))
1116
1168
  timestamp = self.safe_integer(item, 'TimeStamp')
1117
- return {
1169
+ return self.safe_ledger_entry({
1118
1170
  'info': item,
1119
1171
  'id': self.safe_string(item, 'TransactionId'),
1120
1172
  'direction': direction,
@@ -1130,17 +1182,19 @@ class ndax(Exchange, ImplicitAPI):
1130
1182
  'timestamp': timestamp,
1131
1183
  'datetime': self.iso8601(timestamp),
1132
1184
  'fee': None,
1133
- }
1185
+ }, currency)
1134
1186
 
1135
- async def fetch_ledger(self, code: Str = None, since: Int = None, limit: Int = None, params={}):
1187
+ async def fetch_ledger(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[LedgerEntry]:
1136
1188
  """
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
1189
+ fetch the history of changes, actions done by the user or operations that altered the balance of the user
1190
+
1191
+ https://apidoc.ndax.io/#getaccounttransactions
1192
+
1193
+ :param str [code]: unified currency code, default is None
1140
1194
  :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
1195
+ :param int [limit]: max number of ledger entries to return, default is None
1142
1196
  :param dict [params]: extra parameters specific to the exchange API endpoint
1143
- :returns dict: a `ledger structure <https://docs.ccxt.com/#/?id=ledger-structure>`
1197
+ :returns dict: a `ledger structure <https://docs.ccxt.com/#/?id=ledger>`
1144
1198
  """
1145
1199
  omsId = self.safe_integer(self.options, 'omsId', 1)
1146
1200
  await self.load_markets()
@@ -1148,7 +1202,7 @@ class ndax(Exchange, ImplicitAPI):
1148
1202
  defaultAccountId = self.safe_integer_2(self.options, 'accountId', 'AccountId', int(self.accounts[0]['id']))
1149
1203
  accountId = self.safe_integer_2(params, 'accountId', 'AccountId', defaultAccountId)
1150
1204
  params = self.omit(params, ['accountId', 'AccountId'])
1151
- request = {
1205
+ request: dict = {
1152
1206
  'omsId': omsId,
1153
1207
  'AccountId': accountId,
1154
1208
  }
@@ -1178,8 +1232,8 @@ class ndax(Exchange, ImplicitAPI):
1178
1232
  currency = self.currency(code)
1179
1233
  return self.parse_ledger(response, currency, since, limit)
1180
1234
 
1181
- def parse_order_status(self, status):
1182
- statuses = {
1235
+ def parse_order_status(self, status: Str):
1236
+ statuses: dict = {
1183
1237
  'Accepted': 'open',
1184
1238
  'Rejected': 'rejected',
1185
1239
  'Working': 'open',
@@ -1189,7 +1243,7 @@ class ndax(Exchange, ImplicitAPI):
1189
1243
  }
1190
1244
  return self.safe_string(statuses, status, status)
1191
1245
 
1192
- def parse_order(self, order, market: Market = None) -> Order:
1246
+ def parse_order(self, order: dict, market: Market = None) -> Order:
1193
1247
  #
1194
1248
  # createOrder
1195
1249
  #
@@ -1273,7 +1327,7 @@ class ndax(Exchange, ImplicitAPI):
1273
1327
  'postOnly': None,
1274
1328
  'side': self.safe_string_lower(order, 'Side'),
1275
1329
  'price': self.safe_string(order, 'Price'),
1276
- 'stopPrice': self.parse_number(self.omit_zero(self.safe_string(order, 'StopPrice'))),
1330
+ 'triggerPrice': self.parse_number(self.omit_zero(self.safe_string(order, 'StopPrice'))),
1277
1331
  'cost': self.safe_string(order, 'GrossValueExecuted'),
1278
1332
  'amount': self.safe_string(order, 'OrigQuantity'),
1279
1333
  'filled': self.safe_string(order, 'QuantityExecuted'),
@@ -1286,14 +1340,17 @@ class ndax(Exchange, ImplicitAPI):
1286
1340
  async def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
1287
1341
  """
1288
1342
  create a trade order
1289
- :see: https://apidoc.ndax.io/#sendorder
1343
+
1344
+ https://apidoc.ndax.io/#sendorder
1345
+
1290
1346
  :param str symbol: unified symbol of the market to create an order in
1291
1347
  :param str type: 'market' or 'limit'
1292
1348
  :param str side: 'buy' or 'sell'
1293
1349
  :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
1350
+ :param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
1295
1351
  :param dict [params]: extra parameters specific to the exchange API endpoint
1296
1352
  :param float [params.triggerPrice]: the price at which a trigger order would be triggered
1353
+ :param str [params.clientOrderId]: a unique id for the order
1297
1354
  :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
1298
1355
  """
1299
1356
  omsId = self.safe_integer(self.options, 'omsId', 1)
@@ -1312,7 +1369,7 @@ class ndax(Exchange, ImplicitAPI):
1312
1369
  params = self.omit(params, ['accountId', 'AccountId', 'clientOrderId', 'ClientOrderId', 'triggerPrice'])
1313
1370
  market = self.market(symbol)
1314
1371
  orderSide = 0 if (side == 'buy') else 1
1315
- request = {
1372
+ request: dict = {
1316
1373
  'InstrumentId': int(market['id']),
1317
1374
  'omsId': omsId,
1318
1375
  'AccountId': accountId,
@@ -1357,7 +1414,7 @@ class ndax(Exchange, ImplicitAPI):
1357
1414
  params = self.omit(params, ['accountId', 'AccountId', 'clientOrderId', 'ClientOrderId'])
1358
1415
  market = self.market(symbol)
1359
1416
  orderSide = 0 if (side == 'buy') else 1
1360
- request = {
1417
+ request: dict = {
1361
1418
  'OrderIdToReplace': int(id),
1362
1419
  'InstrumentId': int(market['id']),
1363
1420
  'omsId': omsId,
@@ -1395,7 +1452,9 @@ class ndax(Exchange, ImplicitAPI):
1395
1452
  async def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
1396
1453
  """
1397
1454
  fetch all trades made by the user
1398
- :see: https://apidoc.ndax.io/#gettradeshistory
1455
+
1456
+ https://apidoc.ndax.io/#gettradeshistory
1457
+
1399
1458
  :param str symbol: unified market symbol
1400
1459
  :param int [since]: the earliest time in ms to fetch trades for
1401
1460
  :param int [limit]: the maximum number of trades structures to retrieve
@@ -1408,7 +1467,7 @@ class ndax(Exchange, ImplicitAPI):
1408
1467
  defaultAccountId = self.safe_integer_2(self.options, 'accountId', 'AccountId', int(self.accounts[0]['id']))
1409
1468
  accountId = self.safe_integer_2(params, 'accountId', 'AccountId', defaultAccountId)
1410
1469
  params = self.omit(params, ['accountId', 'AccountId'])
1411
- request = {
1470
+ request: dict = {
1412
1471
  'omsId': omsId,
1413
1472
  'AccountId': accountId,
1414
1473
  # 'InstrumentId': market['id'],
@@ -1478,7 +1537,9 @@ class ndax(Exchange, ImplicitAPI):
1478
1537
  async def cancel_all_orders(self, symbol: Str = None, params={}):
1479
1538
  """
1480
1539
  cancel all open orders
1481
- :see: https://apidoc.ndax.io/#cancelallorders
1540
+
1541
+ https://apidoc.ndax.io/#cancelallorders
1542
+
1482
1543
  :param str symbol: unified market symbol, only orders in the market of self symbol are cancelled when symbol is not None
1483
1544
  :param dict [params]: extra parameters specific to the exchange API endpoint
1484
1545
  :returns dict[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
@@ -1489,7 +1550,7 @@ class ndax(Exchange, ImplicitAPI):
1489
1550
  defaultAccountId = self.safe_integer_2(self.options, 'accountId', 'AccountId', int(self.accounts[0]['id']))
1490
1551
  accountId = self.safe_integer_2(params, 'accountId', 'AccountId', defaultAccountId)
1491
1552
  params = self.omit(params, ['accountId', 'AccountId'])
1492
- request = {
1553
+ request: dict = {
1493
1554
  'omsId': omsId,
1494
1555
  'AccountId': accountId,
1495
1556
  }
@@ -1505,15 +1566,22 @@ class ndax(Exchange, ImplicitAPI):
1505
1566
  # "detail":null
1506
1567
  # }
1507
1568
  #
1508
- return response
1569
+ return [
1570
+ self.safe_order({
1571
+ 'info': response,
1572
+ }),
1573
+ ]
1509
1574
 
1510
1575
  async def cancel_order(self, id: str, symbol: Str = None, params={}):
1511
1576
  """
1512
1577
  cancels an open order
1513
- :see: https://apidoc.ndax.io/#cancelorder
1578
+
1579
+ https://apidoc.ndax.io/#cancelorder
1580
+
1514
1581
  :param str id: order id
1515
1582
  :param str symbol: unified symbol of the market the order was made in
1516
1583
  :param dict [params]: extra parameters specific to the exchange API endpoint
1584
+ :param str [params.clientOrderId]: a unique id for the order
1517
1585
  :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
1518
1586
  """
1519
1587
  omsId = self.safe_integer(self.options, 'omsId', 1)
@@ -1525,7 +1593,7 @@ class ndax(Exchange, ImplicitAPI):
1525
1593
  market = None
1526
1594
  if symbol is not None:
1527
1595
  market = self.market(symbol)
1528
- request = {
1596
+ request: dict = {
1529
1597
  'omsId': omsId,
1530
1598
  # 'AccountId': accountId,
1531
1599
  }
@@ -1545,7 +1613,9 @@ class ndax(Exchange, ImplicitAPI):
1545
1613
  async def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
1546
1614
  """
1547
1615
  fetch all unfilled currently open orders
1548
- :see: https://apidoc.ndax.io/#getopenorders
1616
+
1617
+ https://apidoc.ndax.io/#getopenorders
1618
+
1549
1619
  :param str symbol: unified market symbol
1550
1620
  :param int [since]: the earliest time in ms to fetch open orders for
1551
1621
  :param int [limit]: the maximum number of open orders structures to retrieve
@@ -1561,7 +1631,7 @@ class ndax(Exchange, ImplicitAPI):
1561
1631
  market = None
1562
1632
  if symbol is not None:
1563
1633
  market = self.market(symbol)
1564
- request = {
1634
+ request: dict = {
1565
1635
  'omsId': omsId,
1566
1636
  'AccountId': accountId,
1567
1637
  }
@@ -1621,7 +1691,9 @@ class ndax(Exchange, ImplicitAPI):
1621
1691
  async def fetch_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
1622
1692
  """
1623
1693
  fetches information on multiple orders made by the user
1624
- :see: https://apidoc.ndax.io/#getorderhistory
1694
+
1695
+ https://apidoc.ndax.io/#getorderhistory
1696
+
1625
1697
  :param str symbol: unified market symbol of the market orders were made in
1626
1698
  :param int [since]: the earliest time in ms to fetch orders for
1627
1699
  :param int [limit]: the maximum number of order structures to retrieve
@@ -1634,7 +1706,7 @@ class ndax(Exchange, ImplicitAPI):
1634
1706
  defaultAccountId = self.safe_integer_2(self.options, 'accountId', 'AccountId', int(self.accounts[0]['id']))
1635
1707
  accountId = self.safe_integer_2(params, 'accountId', 'AccountId', defaultAccountId)
1636
1708
  params = self.omit(params, ['accountId', 'AccountId'])
1637
- request = {
1709
+ request: dict = {
1638
1710
  'omsId': omsId,
1639
1711
  'AccountId': accountId,
1640
1712
  # 'ClientOrderId': clientOrderId,
@@ -1711,7 +1783,10 @@ class ndax(Exchange, ImplicitAPI):
1711
1783
  async def fetch_order(self, id: str, symbol: Str = None, params={}):
1712
1784
  """
1713
1785
  fetches information on an order made by the user
1714
- :see: https://apidoc.ndax.io/#getorderstatus
1786
+
1787
+ https://apidoc.ndax.io/#getorderstatus
1788
+
1789
+ :param str id: order id
1715
1790
  :param str symbol: unified symbol of the market the order was made in
1716
1791
  :param dict [params]: extra parameters specific to the exchange API endpoint
1717
1792
  :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
@@ -1725,7 +1800,7 @@ class ndax(Exchange, ImplicitAPI):
1725
1800
  market = None
1726
1801
  if symbol is not None:
1727
1802
  market = self.market(symbol)
1728
- request = {
1803
+ request: dict = {
1729
1804
  'omsId': omsId,
1730
1805
  'AccountId': accountId,
1731
1806
  'OrderId': int(id),
@@ -1784,7 +1859,9 @@ class ndax(Exchange, ImplicitAPI):
1784
1859
  async def fetch_order_trades(self, id: str, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
1785
1860
  """
1786
1861
  fetch all the trades made from a single order
1787
- :see: https://apidoc.ndax.io/#getorderhistorybyorderid
1862
+
1863
+ https://apidoc.ndax.io/#getorderhistorybyorderid
1864
+
1788
1865
  :param str id: order id
1789
1866
  :param str symbol: unified market symbol
1790
1867
  :param int [since]: the earliest time in ms to fetch trades for
@@ -1801,7 +1878,7 @@ class ndax(Exchange, ImplicitAPI):
1801
1878
  market = None
1802
1879
  if symbol is not None:
1803
1880
  market = self.market(symbol)
1804
- request = {
1881
+ request: dict = {
1805
1882
  'OMSId': self.parse_to_int(omsId),
1806
1883
  # 'AccountId': accountId,
1807
1884
  'OrderId': int(id),
@@ -1858,10 +1935,10 @@ class ndax(Exchange, ImplicitAPI):
1858
1935
  # ]
1859
1936
  #
1860
1937
  grouped = self.group_by(response, 'ChangeReason')
1861
- trades = self.safe_value(grouped, 'Trade', [])
1938
+ trades = self.safe_list(grouped, 'Trade', [])
1862
1939
  return self.parse_trades(trades, market, since, limit)
1863
1940
 
1864
- async def fetch_deposit_address(self, code: str, params={}):
1941
+ async def fetch_deposit_address(self, code: str, params={}) -> DepositAddress:
1865
1942
  """
1866
1943
  fetch the deposit address for a currency associated with self account
1867
1944
  :param str code: unified currency code
@@ -1875,7 +1952,7 @@ class ndax(Exchange, ImplicitAPI):
1875
1952
  accountId = self.safe_integer_2(params, 'accountId', 'AccountId', defaultAccountId)
1876
1953
  params = self.omit(params, ['accountId', 'AccountId'])
1877
1954
  currency = self.currency(code)
1878
- request = {
1955
+ request: dict = {
1879
1956
  'omsId': omsId,
1880
1957
  'AccountId': accountId,
1881
1958
  'ProductId': currency['id'],
@@ -1896,7 +1973,7 @@ class ndax(Exchange, ImplicitAPI):
1896
1973
  #
1897
1974
  return self.parse_deposit_address(response, currency)
1898
1975
 
1899
- def parse_deposit_address(self, depositAddress, currency: Currency = None):
1976
+ def parse_deposit_address(self, depositAddress, currency: Currency = None) -> DepositAddress:
1900
1977
  #
1901
1978
  # fetchDepositAddress, createDepositAddress
1902
1979
  #
@@ -1923,11 +2000,11 @@ class ndax(Exchange, ImplicitAPI):
1923
2000
  code = currency['code']
1924
2001
  self.check_address(address)
1925
2002
  return {
2003
+ 'info': depositAddress,
1926
2004
  'currency': code,
2005
+ 'network': None,
1927
2006
  'address': address,
1928
2007
  'tag': tag,
1929
- 'network': None,
1930
- 'info': depositAddress,
1931
2008
  }
1932
2009
 
1933
2010
  async def create_deposit_address(self, code: str, params={}):
@@ -1937,7 +2014,7 @@ class ndax(Exchange, ImplicitAPI):
1937
2014
  :param dict [params]: extra parameters specific to the exchange API endpoint
1938
2015
  :returns dict: an `address structure <https://docs.ccxt.com/#/?id=address-structure>`
1939
2016
  """
1940
- request = {
2017
+ request: dict = {
1941
2018
  'GenerateNewKey': True,
1942
2019
  }
1943
2020
  return await self.fetch_deposit_address(code, self.extend(request, params))
@@ -1945,7 +2022,9 @@ class ndax(Exchange, ImplicitAPI):
1945
2022
  async def fetch_deposits(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
1946
2023
  """
1947
2024
  fetch all deposits made to an account
1948
- :see: https://apidoc.ndax.io/#getdeposits
2025
+
2026
+ https://apidoc.ndax.io/#getdeposits
2027
+
1949
2028
  :param str code: unified currency code
1950
2029
  :param int [since]: not used by ndax fetchDeposits
1951
2030
  :param int [limit]: the maximum number of deposits structures to retrieve
@@ -1961,7 +2040,7 @@ class ndax(Exchange, ImplicitAPI):
1961
2040
  currency = None
1962
2041
  if code is not None:
1963
2042
  currency = self.currency(code)
1964
- request = {
2043
+ request: dict = {
1965
2044
  'omsId': omsId,
1966
2045
  'AccountId': accountId,
1967
2046
  }
@@ -2001,7 +2080,9 @@ class ndax(Exchange, ImplicitAPI):
2001
2080
  async def fetch_withdrawals(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
2002
2081
  """
2003
2082
  fetch all withdrawals made from an account
2004
- :see: https://apidoc.ndax.io/#getwithdraws
2083
+
2084
+ https://apidoc.ndax.io/#getwithdraws
2085
+
2005
2086
  :param str code: unified currency code
2006
2087
  :param int [since]: the earliest time in ms to fetch withdrawals for
2007
2088
  :param int [limit]: the maximum number of withdrawals structures to retrieve
@@ -2017,7 +2098,7 @@ class ndax(Exchange, ImplicitAPI):
2017
2098
  currency = None
2018
2099
  if code is not None:
2019
2100
  currency = self.currency(code)
2020
- request = {
2101
+ request: dict = {
2021
2102
  'omsId': omsId,
2022
2103
  'AccountId': accountId,
2023
2104
  }
@@ -2049,7 +2130,7 @@ class ndax(Exchange, ImplicitAPI):
2049
2130
  return self.parse_transactions(response, currency, since, limit)
2050
2131
 
2051
2132
  def parse_transaction_status_by_type(self, status, type=None):
2052
- statusesByType = {
2133
+ statusesByType: dict = {
2053
2134
  'deposit': {
2054
2135
  'New': 'pending', # new ticket awaiting operator review
2055
2136
  'AdminProcessing': 'pending', # an admin is looking at the ticket
@@ -2096,7 +2177,7 @@ class ndax(Exchange, ImplicitAPI):
2096
2177
  statuses = self.safe_value(statusesByType, type, {})
2097
2178
  return self.safe_string(statuses, status, status)
2098
2179
 
2099
- def parse_transaction(self, transaction, currency: Currency = None) -> Transaction:
2180
+ def parse_transaction(self, transaction: dict, currency: Currency = None) -> Transaction:
2100
2181
  #
2101
2182
  # fetchDeposits
2102
2183
  #
@@ -2191,7 +2272,7 @@ class ndax(Exchange, ImplicitAPI):
2191
2272
  'network': None,
2192
2273
  }
2193
2274
 
2194
- async def withdraw(self, code: str, amount: float, address, tag=None, params={}):
2275
+ async def withdraw(self, code: str, amount: float, address: str, tag=None, params={}) -> Transaction:
2195
2276
  """
2196
2277
  make a withdrawal
2197
2278
  :param str code: unified currency code
@@ -2216,7 +2297,7 @@ class ndax(Exchange, ImplicitAPI):
2216
2297
  accountId = self.safe_integer_2(params, 'accountId', 'AccountId', defaultAccountId)
2217
2298
  params = self.omit(params, ['accountId', 'AccountId'])
2218
2299
  currency = self.currency(code)
2219
- withdrawTemplateTypesRequest = {
2300
+ withdrawTemplateTypesRequest: dict = {
2220
2301
  'omsId': omsId,
2221
2302
  'AccountId': accountId,
2222
2303
  'ProductId': currency['id'],
@@ -2239,7 +2320,7 @@ class ndax(Exchange, ImplicitAPI):
2239
2320
  if firstTemplateType is None:
2240
2321
  raise ExchangeError(self.id + ' withdraw() could not find a withdraw template type for ' + currency['code'])
2241
2322
  templateName = self.safe_string(firstTemplateType, 'TemplateName')
2242
- withdrawTemplateRequest = {
2323
+ withdrawTemplateRequest: dict = {
2243
2324
  'omsId': omsId,
2244
2325
  'AccountId': accountId,
2245
2326
  'ProductId': currency['id'],
@@ -2263,14 +2344,14 @@ class ndax(Exchange, ImplicitAPI):
2263
2344
  if tag is not None:
2264
2345
  if 'Memo' in withdrawTemplate:
2265
2346
  withdrawTemplate['Memo'] = tag
2266
- withdrawPayload = {
2347
+ withdrawPayload: dict = {
2267
2348
  'omsId': omsId,
2268
2349
  'AccountId': accountId,
2269
2350
  'ProductId': currency['id'],
2270
2351
  'TemplateForm': self.json(withdrawTemplate),
2271
2352
  'TemplateType': templateName,
2272
2353
  }
2273
- withdrawRequest = {
2354
+ withdrawRequest: dict = {
2274
2355
  'TfaType': 'Google',
2275
2356
  'TFaCode': self.totp(self.twofa),
2276
2357
  'Payload': self.json(withdrawPayload),
@@ -2327,7 +2408,7 @@ class ndax(Exchange, ImplicitAPI):
2327
2408
  url += '?' + self.urlencode(query)
2328
2409
  return {'url': url, 'method': method, 'body': body, 'headers': headers}
2329
2410
 
2330
- def handle_errors(self, code, reason, url, method, headers, body, response, requestHeaders, requestBody):
2411
+ def handle_errors(self, code: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
2331
2412
  if code == 404:
2332
2413
  raise AuthenticationError(self.id + ' ' + body)
2333
2414
  if response is None: