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
ccxt/async_support/ace.py CHANGED
@@ -7,11 +7,11 @@ from ccxt.async_support.base.exchange import Exchange
7
7
  from ccxt.abstract.ace import ImplicitAPI
8
8
  from ccxt.base.types import Balances, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade
9
9
  from typing import List
10
+ from ccxt.base.errors import AuthenticationError
10
11
  from ccxt.base.errors import ArgumentsRequired
11
12
  from ccxt.base.errors import BadRequest
12
13
  from ccxt.base.errors import InsufficientFunds
13
14
  from ccxt.base.errors import InvalidOrder
14
- from ccxt.base.errors import AuthenticationError
15
15
  from ccxt.base.decimal_to_precision import TICK_SIZE
16
16
  from ccxt.base.precise import Precise
17
17
 
@@ -67,8 +67,13 @@ class ace(Exchange, ImplicitAPI):
67
67
  'fetchOrderBook': True,
68
68
  'fetchOrders': False,
69
69
  'fetchOrderTrades': True,
70
+ 'fetchPosition': False,
71
+ 'fetchPositionHistory': False,
70
72
  'fetchPositionMode': False,
71
73
  'fetchPositions': False,
74
+ 'fetchPositionsForSymbol': False,
75
+ 'fetchPositionsHistory': False,
76
+ 'fetchPositionsRisk': False,
72
77
  'fetchPremiumIndexOHLCV': False,
73
78
  'fetchTicker': True,
74
79
  'fetchTickers': True,
@@ -103,7 +108,7 @@ class ace(Exchange, ImplicitAPI):
103
108
  '1M': 31,
104
109
  },
105
110
  'urls': {
106
- 'logo': 'https://user-images.githubusercontent.com/1294454/216908003-fb314cf6-e66e-471c-b91d-1d86e4baaa90.jpg',
111
+ 'logo': 'https://github.com/user-attachments/assets/115f1e4a-0fd0-4b76-85d5-a49ebf64d1c8',
107
112
  'api': {
108
113
  'public': 'https://ace.io/polarisex',
109
114
  'private': 'https://ace.io/polarisex/open',
@@ -149,6 +154,64 @@ class ace(Exchange, ImplicitAPI):
149
154
  'options': {
150
155
  'brokerId': 'ccxt',
151
156
  },
157
+ 'features': {
158
+ 'spot': {
159
+ 'sandbox': False,
160
+ 'createOrder': {
161
+ 'marginMode': False,
162
+ 'triggerPrice': False,
163
+ 'triggerPriceType': None,
164
+ 'triggerDirection': False,
165
+ 'stopLossPrice': False,
166
+ 'takeProfitPrice': False,
167
+ 'attachedStopLossTakeProfit': None, # not supported
168
+ 'timeInForce': {
169
+ 'IOC': False,
170
+ 'FOK': False,
171
+ 'PO': False,
172
+ 'GTD': False,
173
+ },
174
+ 'hedged': False,
175
+ 'leverage': False,
176
+ 'marketBuyRequiresPrice': False,
177
+ 'marketBuyByCost': False,
178
+ 'selfTradePrevention': False,
179
+ 'trailing': False,
180
+ 'iceberg': False,
181
+ },
182
+ 'createOrders': None,
183
+ 'fetchMyTrades': {
184
+ 'marginMode': False,
185
+ 'limit': 500,
186
+ 'daysBack': None,
187
+ 'untilDays': None,
188
+ },
189
+ 'fetchOrder': {
190
+ 'marginMode': False,
191
+ 'trigger': False,
192
+ 'trailing': False,
193
+ },
194
+ 'fetchOpenOrders': {
195
+ 'marginMode': False,
196
+ 'limit': None,
197
+ 'trigger': False,
198
+ 'trailing': False,
199
+ },
200
+ 'fetchOrders': None,
201
+ 'fetchClosedOrders': None,
202
+ 'fetchOHLCV': {
203
+ 'limit': 2000,
204
+ },
205
+ },
206
+ 'swap': {
207
+ 'linear': None,
208
+ 'inverse': None,
209
+ },
210
+ 'future': {
211
+ 'linear': None,
212
+ 'inverse': None,
213
+ },
214
+ },
152
215
  'precisionMode': TICK_SIZE,
153
216
  'exceptions': {
154
217
  'exact': {
@@ -173,10 +236,12 @@ class ace(Exchange, ImplicitAPI):
173
236
  },
174
237
  })
175
238
 
176
- async def fetch_markets(self, params={}):
239
+ async def fetch_markets(self, params={}) -> List[Market]:
177
240
  """
178
241
  retrieves data on all markets for ace
179
- :see: https://github.com/ace-exchange/ace-official-api-docs/blob/master/api_v2.md#oapi-api---market-pair
242
+
243
+ https://github.com/ace-exchange/ace-official-api-docs/blob/master/api_v2.md#oapi-api---market-pair
244
+
180
245
  :param dict [params]: extra parameters specific to the exchange API endpoint
181
246
  :returns dict[]: an array of objects representing market data
182
247
  """
@@ -197,11 +262,24 @@ class ace(Exchange, ImplicitAPI):
197
262
  #
198
263
  return self.parse_markets(response)
199
264
 
200
- def parse_market(self, market) -> Market:
201
- baseId = self.safe_string(market, 'base')
202
- base = self.safe_currency_code(baseId)
203
- quoteId = self.safe_string(market, 'quote')
204
- quote = self.safe_currency_code(quoteId)
265
+ def parse_market(self, market: dict) -> Market:
266
+ #
267
+ # {
268
+ # "symbol": "ADA/TWD",
269
+ # "base": "ADA",
270
+ # "baseCurrencyId": "122",
271
+ # "quote": "TWD",
272
+ # "quoteCurrencyId": "1",
273
+ # "basePrecision": "2",
274
+ # "quotePrecision": "3",
275
+ # "minLimitBaseAmount": "1.0",
276
+ # "maxLimitBaseAmount": "150000.0"
277
+ # }
278
+ #
279
+ baseId = self.safe_string(market, 'baseCurrencyId')
280
+ base = self.safe_currency_code(self.safe_string(market, 'base'))
281
+ quoteId = self.safe_string(market, 'quoteCurrencyId')
282
+ quote = self.safe_currency_code(self.safe_string(market, 'quote'))
205
283
  symbol = base + '/' + quote
206
284
  return {
207
285
  'id': self.safe_string(market, 'symbol'),
@@ -254,7 +332,7 @@ class ace(Exchange, ImplicitAPI):
254
332
  'info': market,
255
333
  }
256
334
 
257
- def parse_ticker(self, ticker, market: Market = None) -> Ticker:
335
+ def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
258
336
  #
259
337
  # {
260
338
  # "base_volume":229196.34035399999,
@@ -290,7 +368,9 @@ class ace(Exchange, ImplicitAPI):
290
368
  async def fetch_ticker(self, symbol: str, params={}) -> Ticker:
291
369
  """
292
370
  fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
293
- :see: https://github.com/ace-exchange/ace-official-api-docs/blob/master/api_v2.md#oapi-api---trade-data
371
+
372
+ https://github.com/ace-exchange/ace-official-api-docs/blob/master/api_v2.md#oapi-api---trade-data
373
+
294
374
  :param str symbol: unified symbol of the market to fetch the ticker for
295
375
  :param dict [params]: extra parameters specific to the exchange API endpoint
296
376
  :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
@@ -299,7 +379,7 @@ class ace(Exchange, ImplicitAPI):
299
379
  market = self.market(symbol)
300
380
  response = await self.publicGetOapiV2ListTradePrice(params)
301
381
  marketId = market['id']
302
- ticker = self.safe_value(response, marketId, {})
382
+ ticker = self.safe_dict(response, marketId, {})
303
383
  #
304
384
  # {
305
385
  # "BTC/USDT":{
@@ -314,7 +394,9 @@ class ace(Exchange, ImplicitAPI):
314
394
  async def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
315
395
  """
316
396
  fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
317
- :see: https://github.com/ace-exchange/ace-official-api-docs/blob/master/api_v2.md#oapi-api---trade-data
397
+
398
+ https://github.com/ace-exchange/ace-official-api-docs/blob/master/api_v2.md#oapi-api---trade-data
399
+
318
400
  :param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
319
401
  :param dict [params]: extra parameters specific to the exchange API endpoint
320
402
  :returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
@@ -335,7 +417,7 @@ class ace(Exchange, ImplicitAPI):
335
417
  for i in range(0, len(pairs)):
336
418
  marketId = pairs[i]
337
419
  market = self.safe_market(marketId)
338
- rawTicker = self.safe_value(response, marketId)
420
+ rawTicker = self.safe_dict(response, marketId, {})
339
421
  ticker = self.parse_ticker(rawTicker, market)
340
422
  tickers.append(ticker)
341
423
  return self.filter_by_array_tickers(tickers, 'symbol', symbols)
@@ -343,7 +425,9 @@ class ace(Exchange, ImplicitAPI):
343
425
  async def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
344
426
  """
345
427
  fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
346
- :see: https://github.com/ace-exchange/ace-official-api-docs/blob/master/api_v2.md#open-api---order-books
428
+
429
+ https://github.com/ace-exchange/ace-official-api-docs/blob/master/api_v2.md#open-api---order-books
430
+
347
431
  :param str symbol: unified symbol of the market to fetch the order book for
348
432
  :param int [limit]: the maximum amount of order book entries to return
349
433
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -351,7 +435,7 @@ class ace(Exchange, ImplicitAPI):
351
435
  """
352
436
  await self.load_markets()
353
437
  market = self.market(symbol)
354
- request = {
438
+ request: dict = {
355
439
  'quoteCurrencyId': market['quoteId'],
356
440
  'baseCurrencyId': market['baseId'],
357
441
  }
@@ -395,8 +479,8 @@ class ace(Exchange, ImplicitAPI):
395
479
  # "status": 200
396
480
  # }
397
481
  #
398
- orderBook = self.safe_value(response, 'attachment')
399
- return self.parse_order_book(orderBook, market['symbol'], None, 'bids', 'asks')
482
+ orderBook = self.safe_dict(response, 'attachment')
483
+ return self.parse_order_book(orderBook, market['symbol'], None, 'bids', 'asks', 1, 0)
400
484
 
401
485
  def parse_ohlcv(self, ohlcv, market: Market = None) -> list:
402
486
  #
@@ -429,7 +513,9 @@ class ace(Exchange, ImplicitAPI):
429
513
  async def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
430
514
  """
431
515
  fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
432
- :see: https://github.com/ace-exchange/ace-official-api-docs/blob/master/api_v2.md#open-api---klinecandlestick-data
516
+
517
+ https://github.com/ace-exchange/ace-official-api-docs/blob/master/api_v2.md#open-api---klinecandlestick-data
518
+
433
519
  :param str symbol: unified symbol of the market to fetch OHLCV data for
434
520
  :param str timeframe: the length of time each candle represents
435
521
  :param int [since]: timestamp in ms of the earliest candle to fetch
@@ -439,7 +525,7 @@ class ace(Exchange, ImplicitAPI):
439
525
  """
440
526
  await self.load_markets()
441
527
  market = self.market(symbol)
442
- request = {
528
+ request: dict = {
443
529
  'duration': self.timeframes[timeframe],
444
530
  'quoteCurrencyId': market['quoteId'],
445
531
  'baseCurrencyId': market['baseId'],
@@ -449,7 +535,7 @@ class ace(Exchange, ImplicitAPI):
449
535
  if since is not None:
450
536
  request['startTime'] = since
451
537
  response = await self.privatePostV2KlineGetKline(self.extend(request, params))
452
- data = self.safe_value(response, 'attachment', [])
538
+ data = self.safe_list(response, 'attachment', [])
453
539
  #
454
540
  # {
455
541
  # "attachment":[
@@ -470,8 +556,8 @@ class ace(Exchange, ImplicitAPI):
470
556
  #
471
557
  return self.parse_ohlcvs(data, market, timeframe, since, limit)
472
558
 
473
- def parse_order_status(self, status):
474
- statuses = {
559
+ def parse_order_status(self, status: Str):
560
+ statuses: dict = {
475
561
  '0': 'open',
476
562
  '1': 'open',
477
563
  '2': 'closed',
@@ -480,7 +566,7 @@ class ace(Exchange, ImplicitAPI):
480
566
  }
481
567
  return self.safe_string(statuses, status, None)
482
568
 
483
- def parse_order(self, order, market: Market = None) -> Order:
569
+ def parse_order(self, order: dict, market: Market = None) -> Order:
484
570
  #
485
571
  # createOrder
486
572
  # "15697850529570392100421100482693"
@@ -528,18 +614,18 @@ class ace(Exchange, ImplicitAPI):
528
614
  if dateTime is not None:
529
615
  timestamp = self.parse8601(dateTime)
530
616
  timestamp = timestamp - 28800000 # 8 hours
531
- orderSide = self.safe_number(order, 'buyOrSell')
617
+ orderSide = self.safe_string(order, 'buyOrSell')
532
618
  if orderSide is not None:
533
- side = 'buy' if (orderSide == 1) else 'sell'
619
+ side = 'buy' if (orderSide == '1') else 'sell'
534
620
  amount = self.safe_string(order, 'num')
535
621
  price = self.safe_string(order, 'price')
536
622
  quoteId = self.safe_string(order, 'quoteCurrencyName')
537
623
  baseId = self.safe_string(order, 'baseCurrencyName')
538
624
  if quoteId is not None and baseId is not None:
539
625
  symbol = baseId + '/' + quoteId
540
- orderType = self.safe_number(order, 'type')
626
+ orderType = self.safe_string(order, 'type')
541
627
  if orderType is not None:
542
- type = 'limit' if (orderType == 1) else 'market'
628
+ type = 'limit' if (orderType == '1') else 'market'
543
629
  filled = self.safe_string(order, 'tradeNum')
544
630
  remaining = self.safe_string(order, 'remainNum')
545
631
  status = self.parse_order_status(self.safe_string(order, 'status'))
@@ -556,7 +642,7 @@ class ace(Exchange, ImplicitAPI):
556
642
  'postOnly': None,
557
643
  'side': side,
558
644
  'price': price,
559
- 'stopPrice': None,
645
+ 'triggerPrice': None,
560
646
  'amount': amount,
561
647
  'cost': None,
562
648
  'average': average,
@@ -571,12 +657,14 @@ class ace(Exchange, ImplicitAPI):
571
657
  async def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
572
658
  """
573
659
  create a trade order
574
- :see: https://github.com/ace-exchange/ace-official-api-docs/blob/master/api_v2.md#open-api---new-order
660
+
661
+ https://github.com/ace-exchange/ace-official-api-docs/blob/master/api_v2.md#open-api---new-order
662
+
575
663
  :param str symbol: unified symbol of the market to create an order in
576
664
  :param str type: 'market' or 'limit'
577
665
  :param str side: 'buy' or 'sell'
578
666
  :param float amount: how much of currency you want to trade in units of base currency
579
- :param float [price]: the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders
667
+ :param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
580
668
  :param dict [params]: extra parameters specific to the exchange API endpoint
581
669
  :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
582
670
  """
@@ -584,7 +672,7 @@ class ace(Exchange, ImplicitAPI):
584
672
  market = self.market(symbol)
585
673
  orderType = type.upper()
586
674
  orderSide = side.upper()
587
- request = {
675
+ request: dict = {
588
676
  'baseCurrencyId': market['baseId'],
589
677
  'quoteCurrencyId': market['quoteId'],
590
678
  'type': 1 if (orderType == 'LIMIT') else 2,
@@ -602,20 +690,22 @@ class ace(Exchange, ImplicitAPI):
602
690
  # "status": 200
603
691
  # }
604
692
  #
605
- data = self.safe_value(response, 'attachment')
693
+ data = self.safe_dict(response, 'attachment')
606
694
  return self.parse_order(data, market)
607
695
 
608
696
  async def cancel_order(self, id: str, symbol: Str = None, params={}):
609
697
  """
610
698
  cancels an open order
611
- :see: https://github.com/ace-exchange/ace-official-api-docs/blob/master/api_v2.md#open-api---cancel-order
699
+
700
+ https://github.com/ace-exchange/ace-official-api-docs/blob/master/api_v2.md#open-api---cancel-order
701
+
612
702
  :param str id: order id
613
703
  :param str symbol: unified symbol of the market the order was made in
614
704
  :param dict [params]: extra parameters specific to the exchange API endpoint
615
705
  :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
616
706
  """
617
707
  await self.load_markets()
618
- request = {
708
+ request: dict = {
619
709
  'orderNo': id,
620
710
  }
621
711
  response = await self.privatePostV2OrderCancel(self.extend(request, params))
@@ -632,13 +722,16 @@ class ace(Exchange, ImplicitAPI):
632
722
  async def fetch_order(self, id: str, symbol: Str = None, params={}):
633
723
  """
634
724
  fetches information on an order made by the user
635
- :see: https://github.com/ace-exchange/ace-official-api-docs/blob/master/api_v2.md#open-api---order-status
725
+
726
+ https://github.com/ace-exchange/ace-official-api-docs/blob/master/api_v2.md#open-api---order-status
727
+
728
+ :param str id: the order id
636
729
  :param str symbol: unified symbol of the market the order was made in
637
730
  :param dict [params]: extra parameters specific to the exchange API endpoint
638
731
  :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
639
732
  """
640
733
  await self.load_markets()
641
- request = {
734
+ request: dict = {
642
735
  'orderNo': id,
643
736
  }
644
737
  response = await self.privatePostV2OrderShowOrderStatus(self.extend(request, params))
@@ -664,13 +757,15 @@ class ace(Exchange, ImplicitAPI):
664
757
  # "status": 200
665
758
  # }
666
759
  #
667
- data = self.safe_value(response, 'attachment')
760
+ data = self.safe_dict(response, 'attachment')
668
761
  return self.parse_order(data, None)
669
762
 
670
763
  async def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
671
764
  """
672
765
  fetch all unfilled currently open orders
673
- :see: https://github.com/ace-exchange/ace-official-api-docs/blob/master/api_v2.md#open-api---order-list
766
+
767
+ https://github.com/ace-exchange/ace-official-api-docs/blob/master/api_v2.md#open-api---order-list
768
+
674
769
  :param str symbol: unified market symbol of the market orders were made in
675
770
  :param int [since]: the earliest time in ms to fetch orders for
676
771
  :param int [limit]: the maximum number of order structures to retrieve
@@ -681,7 +776,7 @@ class ace(Exchange, ImplicitAPI):
681
776
  raise ArgumentsRequired(self.id + ' fetchOpenOrders() requires a symbol argument')
682
777
  await self.load_markets()
683
778
  market = self.market(symbol)
684
- request = {
779
+ request: dict = {
685
780
  'quoteCurrencyId': market['quoteId'],
686
781
  'baseCurrencyId': market['baseId'],
687
782
  # 'start': 0,
@@ -689,7 +784,7 @@ class ace(Exchange, ImplicitAPI):
689
784
  if limit is not None:
690
785
  request['size'] = limit
691
786
  response = await self.privatePostV2OrderGetOrderList(self.extend(request, params))
692
- orders = self.safe_value(response, 'attachment')
787
+ orders = self.safe_list(response, 'attachment')
693
788
  #
694
789
  # {
695
790
  # "attachment": [
@@ -721,7 +816,7 @@ class ace(Exchange, ImplicitAPI):
721
816
  #
722
817
  return self.parse_orders(orders, market, since, limit)
723
818
 
724
- def parse_trade(self, trade, market: Market = None) -> Trade:
819
+ def parse_trade(self, trade: dict, market: Market = None) -> Trade:
725
820
  #
726
821
  # fetchOrderTrades
727
822
  # {
@@ -799,7 +894,9 @@ class ace(Exchange, ImplicitAPI):
799
894
  async def fetch_order_trades(self, id: str, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
800
895
  """
801
896
  fetch all the trades made from a single order
802
- :see: https://github.com/ace-exchange/ace-official-api-docs/blob/master/api_v2.md#open-api---order-history
897
+
898
+ https://github.com/ace-exchange/ace-official-api-docs/blob/master/api_v2.md#open-api---order-history
899
+
803
900
  :param str id: order id
804
901
  :param str symbol: unified market symbol
805
902
  :param int [since]: the earliest time in ms to fetch trades for
@@ -809,7 +906,7 @@ class ace(Exchange, ImplicitAPI):
809
906
  """
810
907
  await self.load_markets()
811
908
  market = self.safe_market(symbol)
812
- request = {
909
+ request: dict = {
813
910
  'orderNo': id,
814
911
  }
815
912
  response = await self.privatePostV2OrderShowOrderHistory(self.extend(request, params))
@@ -846,14 +943,16 @@ class ace(Exchange, ImplicitAPI):
846
943
  # "status": 200
847
944
  # }
848
945
  #
849
- data = self.safe_value(response, 'attachment')
850
- trades = self.safe_value(data, 'trades', [])
946
+ data = self.safe_dict(response, 'attachment')
947
+ trades = self.safe_list(data, 'trades', [])
851
948
  return self.parse_trades(trades, market, since, limit)
852
949
 
853
950
  async def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
854
951
  """
855
952
  fetch all trades made by the user
856
- :see: https://github.com/ace-exchange/ace-official-api-docs/blob/master/api_v2.md#open-api---trade-list
953
+
954
+ https://github.com/ace-exchange/ace-official-api-docs/blob/master/api_v2.md#open-api---trade-list
955
+
857
956
  :param str symbol: unified symbol of the market to fetch trades for
858
957
  :param int [since]: timestamp in ms of the earliest trade to fetch
859
958
  :param int [limit]: the maximum amount of trades to fetch
@@ -862,7 +961,7 @@ class ace(Exchange, ImplicitAPI):
862
961
  """
863
962
  await self.load_markets()
864
963
  market = self.safe_market(symbol)
865
- request = {
964
+ request: dict = {
866
965
  # 'buyOrSell': 1,
867
966
  # 'start': 0,
868
967
  }
@@ -902,7 +1001,7 @@ class ace(Exchange, ImplicitAPI):
902
1001
  # "status": 200
903
1002
  # }
904
1003
  #
905
- trades = self.safe_value(response, 'attachment', [])
1004
+ trades = self.safe_list(response, 'attachment', [])
906
1005
  return self.parse_trades(trades, market, since, limit)
907
1006
 
908
1007
  def parse_balance(self, response) -> Balances:
@@ -917,7 +1016,7 @@ class ace(Exchange, ImplicitAPI):
917
1016
  # }
918
1017
  # ]
919
1018
  #
920
- result = {
1019
+ result: dict = {
921
1020
  'info': response,
922
1021
  }
923
1022
  for i in range(0, len(response)):
@@ -926,7 +1025,7 @@ class ace(Exchange, ImplicitAPI):
926
1025
  code = self.safe_currency_code(currencyId)
927
1026
  amount = self.safe_string(balance, 'amount')
928
1027
  available = self.safe_string(balance, 'cashAmount')
929
- account = {
1028
+ account: dict = {
930
1029
  'free': available,
931
1030
  'total': amount,
932
1031
  }
@@ -936,13 +1035,15 @@ class ace(Exchange, ImplicitAPI):
936
1035
  async def fetch_balance(self, params={}) -> Balances:
937
1036
  """
938
1037
  query for balance and get the amount of funds available for trading or funds locked in orders
939
- :see: https://github.com/ace-exchange/ace-official-api-docs/blob/master/api_v2.md#open-api---account-balance
1038
+
1039
+ https://github.com/ace-exchange/ace-official-api-docs/blob/master/api_v2.md#open-api---account-balance
1040
+
940
1041
  :param dict [params]: extra parameters specific to the exchange API endpoint
941
1042
  :returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
942
1043
  """
943
1044
  await self.load_markets()
944
1045
  response = await self.privatePostV2CoinCustomerAccount(params)
945
- balances = self.safe_value(response, 'attachment', [])
1046
+ balances = self.safe_list(response, 'attachment', [])
946
1047
  #
947
1048
  # {
948
1049
  # "attachment":[
@@ -972,13 +1073,16 @@ class ace(Exchange, ImplicitAPI):
972
1073
  auth = 'ACE_SIGN' + self.secret
973
1074
  data = self.extend({
974
1075
  'apiKey': self.apiKey,
975
- 'timeStamp': nonce,
1076
+ 'timeStamp': self.number_to_string(nonce),
976
1077
  }, params)
977
- dataKeys = list(data.keys())
978
- sortedDataKeys = self.sort_by(dataKeys, 0, False, '')
979
- for i in range(0, len(sortedDataKeys)):
980
- key = sortedDataKeys[i]
981
- auth += self.safe_string(data, key)
1078
+ sortedData = self.keysort(data)
1079
+ values = list(sortedData.values())
1080
+ stringifiedValues = []
1081
+ for i in range(0, len(values)):
1082
+ value = values[i]
1083
+ strValue = str(value)
1084
+ stringifiedValues.append(strValue)
1085
+ auth += ''.join(stringifiedValues)
982
1086
  signature = self.hash(self.encode(auth), 'sha256', 'hex')
983
1087
  data['signKey'] = signature
984
1088
  headers = {
@@ -995,7 +1099,7 @@ class ace(Exchange, ImplicitAPI):
995
1099
  url = self.urls['api'][api] + url
996
1100
  return {'url': url, 'method': method, 'body': body, 'headers': headers}
997
1101
 
998
- def handle_errors(self, code, reason, url, method, headers, body, response, requestHeaders, requestBody):
1102
+ def handle_errors(self, code: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
999
1103
  if response is None:
1000
1104
  return None # fallback to the default error handler
1001
1105
  feedback = self.id + ' ' + body