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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (546) hide show
  1. ccxt/__init__.py +36 -14
  2. ccxt/abstract/alpaca.py +4 -0
  3. ccxt/abstract/bigone.py +1 -1
  4. ccxt/abstract/binance.py +112 -48
  5. ccxt/abstract/binancecoinm.py +112 -48
  6. ccxt/abstract/binanceus.py +147 -83
  7. ccxt/abstract/binanceusdm.py +112 -48
  8. ccxt/abstract/bingx.py +133 -78
  9. ccxt/abstract/bitbank.py +5 -0
  10. ccxt/abstract/bitfinex.py +136 -65
  11. ccxt/abstract/bitfinex1.py +69 -0
  12. ccxt/abstract/bitflyer.py +1 -0
  13. ccxt/abstract/bitget.py +8 -1
  14. ccxt/abstract/bitmart.py +13 -1
  15. ccxt/abstract/bitopro.py +1 -0
  16. ccxt/abstract/bitpanda.py +0 -12
  17. ccxt/abstract/bitrue.py +3 -3
  18. ccxt/abstract/bitstamp.py +26 -3
  19. ccxt/abstract/blofin.py +24 -0
  20. ccxt/abstract/btcbox.py +1 -0
  21. ccxt/abstract/bybit.py +29 -14
  22. ccxt/abstract/cex.py +28 -29
  23. ccxt/abstract/coinbase.py +6 -0
  24. ccxt/abstract/coinbaseadvanced.py +94 -0
  25. ccxt/abstract/{coinbasepro.py → coinbaseexchange.py} +1 -0
  26. ccxt/abstract/coinbaseinternational.py +1 -1
  27. ccxt/abstract/coincatch.py +94 -0
  28. ccxt/abstract/coinex.py +233 -123
  29. ccxt/abstract/coinmetro.py +1 -0
  30. ccxt/abstract/cryptocom.py +14 -0
  31. ccxt/abstract/defx.py +69 -0
  32. ccxt/abstract/deribit.py +1 -0
  33. ccxt/abstract/digifinex.py +1 -0
  34. ccxt/abstract/ellipx.py +25 -0
  35. ccxt/abstract/gate.py +20 -0
  36. ccxt/abstract/gateio.py +20 -0
  37. ccxt/abstract/gemini.py +1 -0
  38. ccxt/abstract/hashkey.py +67 -0
  39. ccxt/abstract/hyperliquid.py +1 -1
  40. ccxt/abstract/independentreserve.py +6 -0
  41. ccxt/abstract/kraken.py +4 -3
  42. ccxt/abstract/krakenfutures.py +4 -0
  43. ccxt/abstract/kucoin.py +24 -0
  44. ccxt/abstract/kucoinfutures.py +34 -0
  45. ccxt/abstract/luno.py +2 -0
  46. ccxt/abstract/mexc.py +4 -0
  47. ccxt/abstract/myokx.py +340 -0
  48. ccxt/abstract/oceanex.py +5 -0
  49. ccxt/abstract/okx.py +30 -0
  50. ccxt/abstract/onetrading.py +0 -12
  51. ccxt/abstract/oxfun.py +34 -0
  52. ccxt/abstract/paradex.py +40 -0
  53. ccxt/abstract/phemex.py +1 -0
  54. ccxt/abstract/upbit.py +4 -0
  55. ccxt/abstract/vertex.py +19 -0
  56. ccxt/abstract/whitebit.py +31 -1
  57. ccxt/abstract/woo.py +6 -2
  58. ccxt/abstract/woofipro.py +119 -0
  59. ccxt/abstract/xt.py +153 -0
  60. ccxt/abstract/zonda.py +6 -0
  61. ccxt/ace.py +164 -60
  62. ccxt/alpaca.py +727 -63
  63. ccxt/ascendex.py +395 -249
  64. ccxt/async_support/__init__.py +36 -14
  65. ccxt/async_support/ace.py +164 -60
  66. ccxt/async_support/alpaca.py +727 -63
  67. ccxt/async_support/ascendex.py +396 -249
  68. ccxt/async_support/base/exchange.py +531 -155
  69. ccxt/async_support/base/ws/aiohttp_client.py +28 -5
  70. ccxt/async_support/base/ws/cache.py +3 -2
  71. ccxt/async_support/base/ws/client.py +26 -5
  72. ccxt/async_support/base/ws/fast_client.py +4 -3
  73. ccxt/async_support/base/ws/functions.py +1 -1
  74. ccxt/async_support/base/ws/future.py +40 -31
  75. ccxt/async_support/base/ws/order_book_side.py +3 -0
  76. ccxt/async_support/bequant.py +1 -1
  77. ccxt/async_support/bigone.py +329 -202
  78. ccxt/async_support/binance.py +3030 -1087
  79. ccxt/async_support/binancecoinm.py +2 -1
  80. ccxt/async_support/binanceus.py +12 -1
  81. ccxt/async_support/binanceusdm.py +3 -1
  82. ccxt/async_support/bingx.py +3205 -937
  83. ccxt/async_support/bit2c.py +119 -38
  84. ccxt/async_support/bitbank.py +215 -76
  85. ccxt/async_support/bitbns.py +124 -53
  86. ccxt/async_support/bitfinex.py +3236 -1078
  87. ccxt/async_support/bitfinex1.py +1711 -0
  88. ccxt/async_support/bitflyer.py +238 -49
  89. ccxt/async_support/bitget.py +1525 -573
  90. ccxt/async_support/bithumb.py +199 -65
  91. ccxt/async_support/bitmart.py +1320 -435
  92. ccxt/async_support/bitmex.py +308 -111
  93. ccxt/async_support/bitopro.py +256 -96
  94. ccxt/async_support/bitrue.py +365 -233
  95. ccxt/async_support/bitso.py +201 -89
  96. ccxt/async_support/bitstamp.py +438 -269
  97. ccxt/async_support/bitteam.py +179 -73
  98. ccxt/async_support/bitvavo.py +180 -70
  99. ccxt/async_support/bl3p.py +92 -25
  100. ccxt/async_support/blockchaincom.py +193 -79
  101. ccxt/async_support/blofin.py +392 -148
  102. ccxt/async_support/btcalpha.py +161 -55
  103. ccxt/async_support/btcbox.py +250 -34
  104. ccxt/async_support/btcmarkets.py +232 -85
  105. ccxt/async_support/btcturk.py +159 -60
  106. ccxt/async_support/bybit.py +2231 -1193
  107. ccxt/async_support/cex.py +1409 -1329
  108. ccxt/async_support/coinbase.py +1454 -287
  109. ccxt/async_support/coinbaseadvanced.py +17 -0
  110. ccxt/async_support/{coinbasepro.py → coinbaseexchange.py} +233 -99
  111. ccxt/async_support/coinbaseinternational.py +428 -88
  112. ccxt/async_support/coincatch.py +5152 -0
  113. ccxt/async_support/coincheck.py +121 -38
  114. ccxt/async_support/coinex.py +4020 -3339
  115. ccxt/async_support/coinlist.py +273 -116
  116. ccxt/async_support/coinmate.py +204 -97
  117. ccxt/async_support/coinmetro.py +203 -110
  118. ccxt/async_support/coinone.py +142 -68
  119. ccxt/async_support/coinsph.py +223 -97
  120. ccxt/async_support/coinspot.py +137 -62
  121. ccxt/async_support/cryptocom.py +515 -185
  122. ccxt/async_support/currencycom.py +203 -85
  123. ccxt/async_support/defx.py +2066 -0
  124. ccxt/async_support/delta.py +404 -109
  125. ccxt/async_support/deribit.py +639 -323
  126. ccxt/async_support/digifinex.py +465 -233
  127. ccxt/async_support/ellipx.py +1887 -0
  128. ccxt/async_support/exmo.py +317 -128
  129. ccxt/async_support/gate.py +1472 -463
  130. ccxt/async_support/gemini.py +206 -84
  131. ccxt/async_support/hashkey.py +4164 -0
  132. ccxt/async_support/hitbtc.py +433 -178
  133. ccxt/async_support/hollaex.py +207 -83
  134. ccxt/async_support/htx.py +1095 -563
  135. ccxt/async_support/huobijp.py +178 -56
  136. ccxt/async_support/hyperliquid.py +1678 -292
  137. ccxt/async_support/idex.py +219 -95
  138. ccxt/async_support/independentreserve.py +300 -31
  139. ccxt/async_support/indodax.py +226 -62
  140. ccxt/async_support/kraken.py +871 -354
  141. ccxt/async_support/krakenfutures.py +324 -100
  142. ccxt/async_support/kucoin.py +917 -357
  143. ccxt/async_support/kucoinfutures.py +1004 -149
  144. ccxt/async_support/kuna.py +198 -107
  145. ccxt/async_support/latoken.py +199 -79
  146. ccxt/async_support/lbank.py +360 -113
  147. ccxt/async_support/luno.py +185 -62
  148. ccxt/async_support/lykke.py +168 -55
  149. ccxt/async_support/mercado.py +101 -29
  150. ccxt/async_support/mexc.py +995 -429
  151. ccxt/async_support/myokx.py +53 -0
  152. ccxt/async_support/ndax.py +234 -82
  153. ccxt/async_support/novadax.py +195 -75
  154. ccxt/async_support/oceanex.py +244 -59
  155. ccxt/async_support/okcoin.py +301 -165
  156. ccxt/async_support/okx.py +1776 -454
  157. ccxt/async_support/onetrading.py +198 -414
  158. ccxt/async_support/oxfun.py +2898 -0
  159. ccxt/async_support/p2b.py +142 -52
  160. ccxt/async_support/paradex.py +2085 -0
  161. ccxt/async_support/paymium.py +56 -32
  162. ccxt/async_support/phemex.py +572 -196
  163. ccxt/async_support/poloniex.py +218 -95
  164. ccxt/async_support/poloniexfutures.py +260 -92
  165. ccxt/async_support/probit.py +143 -110
  166. ccxt/async_support/timex.py +123 -70
  167. ccxt/async_support/tokocrypto.py +129 -93
  168. ccxt/async_support/tradeogre.py +39 -25
  169. ccxt/async_support/upbit.py +322 -113
  170. ccxt/async_support/vertex.py +2983 -0
  171. ccxt/async_support/wavesexchange.py +227 -173
  172. ccxt/async_support/wazirx.py +145 -65
  173. ccxt/async_support/whitebit.py +533 -138
  174. ccxt/async_support/woo.py +1137 -296
  175. ccxt/async_support/woofipro.py +2716 -0
  176. ccxt/async_support/xt.py +4628 -0
  177. ccxt/async_support/yobit.py +160 -92
  178. ccxt/async_support/zaif.py +80 -33
  179. ccxt/async_support/zonda.py +140 -69
  180. ccxt/base/errors.py +51 -20
  181. ccxt/base/exchange.py +1722 -480
  182. ccxt/base/precise.py +10 -0
  183. ccxt/base/types.py +223 -4
  184. ccxt/bequant.py +1 -1
  185. ccxt/bigone.py +329 -202
  186. ccxt/binance.py +3030 -1087
  187. ccxt/binancecoinm.py +2 -1
  188. ccxt/binanceus.py +12 -1
  189. ccxt/binanceusdm.py +3 -1
  190. ccxt/bingx.py +3205 -937
  191. ccxt/bit2c.py +119 -38
  192. ccxt/bitbank.py +215 -76
  193. ccxt/bitbns.py +124 -53
  194. ccxt/bitfinex.py +3235 -1078
  195. ccxt/bitfinex1.py +1710 -0
  196. ccxt/bitflyer.py +238 -49
  197. ccxt/bitget.py +1525 -573
  198. ccxt/bithumb.py +198 -65
  199. ccxt/bitmart.py +1320 -435
  200. ccxt/bitmex.py +308 -111
  201. ccxt/bitopro.py +256 -96
  202. ccxt/bitrue.py +365 -233
  203. ccxt/bitso.py +201 -89
  204. ccxt/bitstamp.py +438 -269
  205. ccxt/bitteam.py +179 -73
  206. ccxt/bitvavo.py +180 -70
  207. ccxt/bl3p.py +92 -25
  208. ccxt/blockchaincom.py +193 -79
  209. ccxt/blofin.py +392 -148
  210. ccxt/btcalpha.py +161 -55
  211. ccxt/btcbox.py +250 -34
  212. ccxt/btcmarkets.py +232 -85
  213. ccxt/btcturk.py +159 -60
  214. ccxt/bybit.py +2231 -1193
  215. ccxt/cex.py +1408 -1329
  216. ccxt/coinbase.py +1454 -287
  217. ccxt/coinbaseadvanced.py +17 -0
  218. ccxt/{coinbasepro.py → coinbaseexchange.py} +233 -99
  219. ccxt/coinbaseinternational.py +428 -88
  220. ccxt/coincatch.py +5152 -0
  221. ccxt/coincheck.py +121 -38
  222. ccxt/coinex.py +4020 -3339
  223. ccxt/coinlist.py +273 -116
  224. ccxt/coinmate.py +204 -97
  225. ccxt/coinmetro.py +203 -110
  226. ccxt/coinone.py +142 -68
  227. ccxt/coinsph.py +223 -97
  228. ccxt/coinspot.py +137 -62
  229. ccxt/cryptocom.py +515 -185
  230. ccxt/currencycom.py +203 -85
  231. ccxt/defx.py +2065 -0
  232. ccxt/delta.py +404 -109
  233. ccxt/deribit.py +639 -323
  234. ccxt/digifinex.py +465 -233
  235. ccxt/ellipx.py +1887 -0
  236. ccxt/exmo.py +317 -128
  237. ccxt/gate.py +1472 -463
  238. ccxt/gemini.py +206 -84
  239. ccxt/hashkey.py +4164 -0
  240. ccxt/hitbtc.py +433 -178
  241. ccxt/hollaex.py +207 -83
  242. ccxt/htx.py +1095 -563
  243. ccxt/huobijp.py +178 -56
  244. ccxt/hyperliquid.py +1677 -292
  245. ccxt/idex.py +219 -95
  246. ccxt/independentreserve.py +299 -31
  247. ccxt/indodax.py +226 -62
  248. ccxt/kraken.py +871 -354
  249. ccxt/krakenfutures.py +324 -100
  250. ccxt/kucoin.py +917 -357
  251. ccxt/kucoinfutures.py +1004 -149
  252. ccxt/kuna.py +198 -107
  253. ccxt/latoken.py +199 -79
  254. ccxt/lbank.py +360 -113
  255. ccxt/luno.py +185 -62
  256. ccxt/lykke.py +168 -55
  257. ccxt/mercado.py +101 -29
  258. ccxt/mexc.py +994 -429
  259. ccxt/myokx.py +53 -0
  260. ccxt/ndax.py +234 -82
  261. ccxt/novadax.py +195 -75
  262. ccxt/oceanex.py +244 -59
  263. ccxt/okcoin.py +301 -165
  264. ccxt/okx.py +1776 -454
  265. ccxt/onetrading.py +198 -414
  266. ccxt/oxfun.py +2897 -0
  267. ccxt/p2b.py +142 -52
  268. ccxt/paradex.py +2085 -0
  269. ccxt/paymium.py +56 -32
  270. ccxt/phemex.py +572 -196
  271. ccxt/poloniex.py +218 -95
  272. ccxt/poloniexfutures.py +260 -92
  273. ccxt/pro/__init__.py +29 -5
  274. ccxt/pro/alpaca.py +32 -17
  275. ccxt/pro/ascendex.py +62 -14
  276. ccxt/pro/bequant.py +4 -0
  277. ccxt/pro/binance.py +1596 -329
  278. ccxt/pro/binancecoinm.py +1 -0
  279. ccxt/pro/binanceus.py +2 -9
  280. ccxt/pro/binanceusdm.py +2 -0
  281. ccxt/pro/bingx.py +527 -134
  282. ccxt/pro/bitcoincom.py +4 -1
  283. ccxt/pro/bitfinex.py +731 -266
  284. ccxt/pro/bitfinex1.py +635 -0
  285. ccxt/pro/bitget.py +726 -357
  286. ccxt/pro/bithumb.py +380 -0
  287. ccxt/pro/bitmart.py +143 -39
  288. ccxt/pro/bitmex.py +199 -40
  289. ccxt/pro/bitopro.py +25 -13
  290. ccxt/pro/bitrue.py +31 -32
  291. ccxt/pro/bitstamp.py +7 -6
  292. ccxt/pro/bitvavo.py +203 -81
  293. ccxt/pro/blockchaincom.py +30 -17
  294. ccxt/pro/blofin.py +692 -0
  295. ccxt/pro/bybit.py +791 -82
  296. ccxt/pro/cex.py +99 -51
  297. ccxt/pro/coinbase.py +220 -30
  298. ccxt/{async_support/hitbtc3.py → pro/coinbaseadvanced.py} +5 -5
  299. ccxt/pro/{coinbasepro.py → coinbaseexchange.py} +19 -19
  300. ccxt/pro/coinbaseinternational.py +193 -30
  301. ccxt/pro/coincatch.py +1464 -0
  302. ccxt/pro/coincheck.py +11 -6
  303. ccxt/pro/coinex.py +965 -665
  304. ccxt/pro/coinone.py +17 -10
  305. ccxt/pro/cryptocom.py +446 -66
  306. ccxt/pro/currencycom.py +11 -10
  307. ccxt/pro/defx.py +832 -0
  308. ccxt/pro/deribit.py +167 -31
  309. ccxt/pro/exmo.py +252 -20
  310. ccxt/pro/gate.py +729 -64
  311. ccxt/pro/gemini.py +44 -26
  312. ccxt/pro/hashkey.py +802 -0
  313. ccxt/pro/hitbtc.py +208 -103
  314. ccxt/pro/hollaex.py +25 -9
  315. ccxt/pro/htx.py +83 -39
  316. ccxt/pro/huobijp.py +17 -16
  317. ccxt/pro/hyperliquid.py +502 -31
  318. ccxt/pro/idex.py +28 -13
  319. ccxt/pro/independentreserve.py +21 -16
  320. ccxt/pro/kraken.py +298 -51
  321. ccxt/pro/krakenfutures.py +166 -75
  322. ccxt/pro/kucoin.py +395 -77
  323. ccxt/pro/kucoinfutures.py +400 -99
  324. ccxt/pro/lbank.py +52 -31
  325. ccxt/pro/luno.py +12 -10
  326. ccxt/pro/mexc.py +400 -50
  327. ccxt/pro/myokx.py +28 -0
  328. ccxt/pro/ndax.py +25 -12
  329. ccxt/pro/okcoin.py +28 -9
  330. ccxt/pro/okx.py +935 -124
  331. ccxt/pro/onetrading.py +41 -24
  332. ccxt/pro/oxfun.py +1054 -0
  333. ccxt/pro/p2b.py +100 -24
  334. ccxt/pro/paradex.py +352 -0
  335. ccxt/pro/phemex.py +92 -33
  336. ccxt/pro/poloniex.py +128 -49
  337. ccxt/pro/poloniexfutures.py +53 -32
  338. ccxt/pro/probit.py +92 -85
  339. ccxt/pro/upbit.py +401 -8
  340. ccxt/pro/vertex.py +943 -0
  341. ccxt/pro/wazirx.py +46 -28
  342. ccxt/pro/whitebit.py +65 -12
  343. ccxt/pro/woo.py +437 -65
  344. ccxt/pro/woofipro.py +1271 -0
  345. ccxt/pro/xt.py +1067 -0
  346. ccxt/probit.py +143 -110
  347. ccxt/static_dependencies/__init__.py +1 -1
  348. ccxt/static_dependencies/lark/__init__.py +38 -0
  349. ccxt/static_dependencies/lark/__pyinstaller/__init__.py +6 -0
  350. ccxt/static_dependencies/lark/__pyinstaller/hook-lark.py +14 -0
  351. ccxt/static_dependencies/lark/ast_utils.py +59 -0
  352. ccxt/static_dependencies/lark/common.py +86 -0
  353. ccxt/static_dependencies/lark/exceptions.py +292 -0
  354. ccxt/static_dependencies/lark/grammar.py +130 -0
  355. ccxt/static_dependencies/lark/grammars/__init__.py +0 -0
  356. ccxt/static_dependencies/lark/indenter.py +143 -0
  357. ccxt/static_dependencies/lark/lark.py +658 -0
  358. ccxt/static_dependencies/lark/lexer.py +678 -0
  359. ccxt/static_dependencies/lark/load_grammar.py +1428 -0
  360. ccxt/static_dependencies/lark/parse_tree_builder.py +391 -0
  361. ccxt/static_dependencies/lark/parser_frontends.py +257 -0
  362. ccxt/static_dependencies/lark/parsers/__init__.py +0 -0
  363. ccxt/static_dependencies/lark/parsers/cyk.py +340 -0
  364. ccxt/static_dependencies/lark/parsers/earley.py +314 -0
  365. ccxt/static_dependencies/lark/parsers/earley_common.py +42 -0
  366. ccxt/static_dependencies/lark/parsers/earley_forest.py +801 -0
  367. ccxt/static_dependencies/lark/parsers/grammar_analysis.py +203 -0
  368. ccxt/static_dependencies/lark/parsers/lalr_analysis.py +332 -0
  369. ccxt/static_dependencies/lark/parsers/lalr_interactive_parser.py +158 -0
  370. ccxt/static_dependencies/lark/parsers/lalr_parser.py +122 -0
  371. ccxt/static_dependencies/lark/parsers/lalr_parser_state.py +110 -0
  372. ccxt/static_dependencies/lark/parsers/xearley.py +165 -0
  373. ccxt/static_dependencies/lark/py.typed +0 -0
  374. ccxt/static_dependencies/lark/reconstruct.py +107 -0
  375. ccxt/static_dependencies/lark/tools/__init__.py +70 -0
  376. ccxt/static_dependencies/lark/tools/nearley.py +202 -0
  377. ccxt/static_dependencies/lark/tools/serialize.py +32 -0
  378. ccxt/static_dependencies/lark/tools/standalone.py +196 -0
  379. ccxt/static_dependencies/lark/tree.py +267 -0
  380. ccxt/static_dependencies/lark/tree_matcher.py +186 -0
  381. ccxt/static_dependencies/lark/tree_templates.py +180 -0
  382. ccxt/static_dependencies/lark/utils.py +343 -0
  383. ccxt/static_dependencies/lark/visitors.py +596 -0
  384. ccxt/static_dependencies/marshmallow/__init__.py +81 -0
  385. ccxt/static_dependencies/marshmallow/base.py +65 -0
  386. ccxt/static_dependencies/marshmallow/class_registry.py +94 -0
  387. ccxt/static_dependencies/marshmallow/decorators.py +231 -0
  388. ccxt/static_dependencies/marshmallow/error_store.py +60 -0
  389. ccxt/static_dependencies/marshmallow/exceptions.py +71 -0
  390. ccxt/static_dependencies/marshmallow/fields.py +2114 -0
  391. ccxt/static_dependencies/marshmallow/orderedset.py +89 -0
  392. ccxt/static_dependencies/marshmallow/py.typed +0 -0
  393. ccxt/static_dependencies/marshmallow/schema.py +1228 -0
  394. ccxt/static_dependencies/marshmallow/types.py +12 -0
  395. ccxt/static_dependencies/marshmallow/utils.py +378 -0
  396. ccxt/static_dependencies/marshmallow/validate.py +678 -0
  397. ccxt/static_dependencies/marshmallow/warnings.py +2 -0
  398. ccxt/static_dependencies/marshmallow_dataclass/__init__.py +1047 -0
  399. ccxt/static_dependencies/marshmallow_dataclass/collection_field.py +51 -0
  400. ccxt/static_dependencies/marshmallow_dataclass/lazy_class_attribute.py +45 -0
  401. ccxt/static_dependencies/marshmallow_dataclass/mypy.py +71 -0
  402. ccxt/static_dependencies/marshmallow_dataclass/py.typed +0 -0
  403. ccxt/static_dependencies/marshmallow_dataclass/typing.py +14 -0
  404. ccxt/static_dependencies/marshmallow_dataclass/union_field.py +82 -0
  405. ccxt/static_dependencies/marshmallow_oneofschema/__init__.py +1 -0
  406. ccxt/static_dependencies/marshmallow_oneofschema/one_of_schema.py +193 -0
  407. ccxt/static_dependencies/marshmallow_oneofschema/py.typed +0 -0
  408. ccxt/static_dependencies/starknet/__init__.py +0 -0
  409. ccxt/static_dependencies/starknet/cairo/__init__.py +0 -0
  410. ccxt/static_dependencies/starknet/cairo/data_types.py +123 -0
  411. ccxt/static_dependencies/starknet/cairo/deprecated_parse/__init__.py +0 -0
  412. ccxt/static_dependencies/starknet/cairo/deprecated_parse/cairo_types.py +77 -0
  413. ccxt/static_dependencies/starknet/cairo/deprecated_parse/parser.py +46 -0
  414. ccxt/static_dependencies/starknet/cairo/deprecated_parse/parser_transformer.py +138 -0
  415. ccxt/static_dependencies/starknet/cairo/felt.py +64 -0
  416. ccxt/static_dependencies/starknet/cairo/type_parser.py +121 -0
  417. ccxt/static_dependencies/starknet/cairo/v1/__init__.py +0 -0
  418. ccxt/static_dependencies/starknet/cairo/v1/type_parser.py +59 -0
  419. ccxt/static_dependencies/starknet/cairo/v2/__init__.py +0 -0
  420. ccxt/static_dependencies/starknet/cairo/v2/type_parser.py +77 -0
  421. ccxt/static_dependencies/starknet/ccxt_utils.py +7 -0
  422. ccxt/static_dependencies/starknet/common.py +15 -0
  423. ccxt/static_dependencies/starknet/constants.py +39 -0
  424. ccxt/static_dependencies/starknet/hash/__init__.py +0 -0
  425. ccxt/static_dependencies/starknet/hash/address.py +79 -0
  426. ccxt/static_dependencies/starknet/hash/compiled_class_hash_objects.py +111 -0
  427. ccxt/static_dependencies/starknet/hash/selector.py +16 -0
  428. ccxt/static_dependencies/starknet/hash/storage.py +12 -0
  429. ccxt/static_dependencies/starknet/hash/utils.py +78 -0
  430. ccxt/static_dependencies/starknet/models/__init__.py +0 -0
  431. ccxt/static_dependencies/starknet/models/typed_data.py +45 -0
  432. ccxt/static_dependencies/starknet/serialization/__init__.py +24 -0
  433. ccxt/static_dependencies/starknet/serialization/_calldata_reader.py +40 -0
  434. ccxt/static_dependencies/starknet/serialization/_context.py +142 -0
  435. ccxt/static_dependencies/starknet/serialization/data_serializers/__init__.py +10 -0
  436. ccxt/static_dependencies/starknet/serialization/data_serializers/_common.py +82 -0
  437. ccxt/static_dependencies/starknet/serialization/data_serializers/array_serializer.py +43 -0
  438. ccxt/static_dependencies/starknet/serialization/data_serializers/bool_serializer.py +37 -0
  439. ccxt/static_dependencies/starknet/serialization/data_serializers/byte_array_serializer.py +66 -0
  440. ccxt/static_dependencies/starknet/serialization/data_serializers/cairo_data_serializer.py +71 -0
  441. ccxt/static_dependencies/starknet/serialization/data_serializers/enum_serializer.py +71 -0
  442. ccxt/static_dependencies/starknet/serialization/data_serializers/felt_serializer.py +50 -0
  443. ccxt/static_dependencies/starknet/serialization/data_serializers/named_tuple_serializer.py +58 -0
  444. ccxt/static_dependencies/starknet/serialization/data_serializers/option_serializer.py +43 -0
  445. ccxt/static_dependencies/starknet/serialization/data_serializers/output_serializer.py +40 -0
  446. ccxt/static_dependencies/starknet/serialization/data_serializers/payload_serializer.py +72 -0
  447. ccxt/static_dependencies/starknet/serialization/data_serializers/struct_serializer.py +36 -0
  448. ccxt/static_dependencies/starknet/serialization/data_serializers/tuple_serializer.py +36 -0
  449. ccxt/static_dependencies/starknet/serialization/data_serializers/uint256_serializer.py +76 -0
  450. ccxt/static_dependencies/starknet/serialization/data_serializers/uint_serializer.py +100 -0
  451. ccxt/static_dependencies/starknet/serialization/data_serializers/unit_serializer.py +32 -0
  452. ccxt/static_dependencies/starknet/serialization/errors.py +10 -0
  453. ccxt/static_dependencies/starknet/serialization/factory.py +229 -0
  454. ccxt/static_dependencies/starknet/serialization/function_serialization_adapter.py +110 -0
  455. ccxt/static_dependencies/starknet/serialization/tuple_dataclass.py +59 -0
  456. ccxt/static_dependencies/starknet/utils/__init__.py +0 -0
  457. ccxt/static_dependencies/starknet/utils/constructor_args_translator.py +86 -0
  458. ccxt/static_dependencies/starknet/utils/iterable.py +13 -0
  459. ccxt/static_dependencies/starknet/utils/schema.py +13 -0
  460. ccxt/static_dependencies/starknet/utils/typed_data.py +182 -0
  461. ccxt/static_dependencies/starkware/__init__.py +0 -0
  462. ccxt/static_dependencies/starkware/crypto/__init__.py +0 -0
  463. ccxt/static_dependencies/starkware/crypto/fast_pedersen_hash.py +50 -0
  464. ccxt/static_dependencies/starkware/crypto/math_utils.py +78 -0
  465. ccxt/static_dependencies/starkware/crypto/signature.py +2344 -0
  466. ccxt/static_dependencies/starkware/crypto/utils.py +63 -0
  467. ccxt/static_dependencies/sympy/__init__.py +0 -0
  468. ccxt/static_dependencies/sympy/core/__init__.py +0 -0
  469. ccxt/static_dependencies/sympy/core/intfunc.py +35 -0
  470. ccxt/static_dependencies/sympy/external/__init__.py +0 -0
  471. ccxt/static_dependencies/sympy/external/gmpy.py +345 -0
  472. ccxt/static_dependencies/sympy/external/importtools.py +187 -0
  473. ccxt/static_dependencies/sympy/external/ntheory.py +637 -0
  474. ccxt/static_dependencies/sympy/external/pythonmpq.py +341 -0
  475. ccxt/static_dependencies/typing_inspect/__init__.py +0 -0
  476. ccxt/static_dependencies/typing_inspect/typing_inspect.py +851 -0
  477. ccxt/test/{test_async.py → tests_async.py} +456 -391
  478. ccxt/test/tests_helpers.py +285 -0
  479. ccxt/test/tests_init.py +39 -0
  480. ccxt/test/{test_sync.py → tests_sync.py} +456 -393
  481. ccxt/timex.py +123 -70
  482. ccxt/tokocrypto.py +129 -93
  483. ccxt/tradeogre.py +39 -25
  484. ccxt/upbit.py +322 -113
  485. ccxt/vertex.py +2983 -0
  486. ccxt/wavesexchange.py +227 -173
  487. ccxt/wazirx.py +145 -65
  488. ccxt/whitebit.py +533 -138
  489. ccxt/woo.py +1137 -296
  490. ccxt/woofipro.py +2716 -0
  491. ccxt/xt.py +4627 -0
  492. ccxt/yobit.py +159 -92
  493. ccxt/zaif.py +80 -33
  494. ccxt/zonda.py +140 -69
  495. ccxt-4.4.49.dist-info/LICENSE.txt +21 -0
  496. ccxt-4.4.49.dist-info/METADATA +646 -0
  497. ccxt-4.4.49.dist-info/RECORD +669 -0
  498. {ccxt-4.2.77.dist-info → ccxt-4.4.49.dist-info}/WHEEL +1 -1
  499. ccxt/abstract/bitbay.py +0 -47
  500. ccxt/abstract/bitfinex2.py +0 -139
  501. ccxt/abstract/hitbtc3.py +0 -115
  502. ccxt/async_support/bitbay.py +0 -17
  503. ccxt/async_support/bitfinex2.py +0 -3496
  504. ccxt/async_support/flowbtc.py +0 -34
  505. ccxt/bitbay.py +0 -17
  506. ccxt/bitfinex2.py +0 -3496
  507. ccxt/flowbtc.py +0 -34
  508. ccxt/hitbtc3.py +0 -16
  509. ccxt/pro/bitfinex2.py +0 -1081
  510. ccxt/test/base/__init__.py +0 -28
  511. ccxt/test/base/test_account.py +0 -26
  512. ccxt/test/base/test_balance.py +0 -56
  513. ccxt/test/base/test_borrow_interest.py +0 -35
  514. ccxt/test/base/test_borrow_rate.py +0 -32
  515. ccxt/test/base/test_calculate_fee.py +0 -51
  516. ccxt/test/base/test_crypto.py +0 -127
  517. ccxt/test/base/test_currency.py +0 -76
  518. ccxt/test/base/test_datetime.py +0 -103
  519. ccxt/test/base/test_decimal_to_precision.py +0 -392
  520. ccxt/test/base/test_deep_extend.py +0 -68
  521. ccxt/test/base/test_deposit_withdrawal.py +0 -50
  522. ccxt/test/base/test_exchange_datetime_functions.py +0 -76
  523. ccxt/test/base/test_funding_rate_history.py +0 -29
  524. ccxt/test/base/test_last_price.py +0 -32
  525. ccxt/test/base/test_ledger_entry.py +0 -45
  526. ccxt/test/base/test_ledger_item.py +0 -48
  527. ccxt/test/base/test_leverage_tier.py +0 -33
  528. ccxt/test/base/test_margin_mode.py +0 -24
  529. ccxt/test/base/test_margin_modification.py +0 -35
  530. ccxt/test/base/test_market.py +0 -190
  531. ccxt/test/base/test_number.py +0 -411
  532. ccxt/test/base/test_ohlcv.py +0 -32
  533. ccxt/test/base/test_open_interest.py +0 -32
  534. ccxt/test/base/test_order.py +0 -64
  535. ccxt/test/base/test_order_book.py +0 -63
  536. ccxt/test/base/test_position.py +0 -60
  537. ccxt/test/base/test_shared_methods.py +0 -345
  538. ccxt/test/base/test_status.py +0 -24
  539. ccxt/test/base/test_throttle.py +0 -126
  540. ccxt/test/base/test_ticker.py +0 -86
  541. ccxt/test/base/test_trade.py +0 -47
  542. ccxt/test/base/test_trading_fee.py +0 -26
  543. ccxt/test/base/test_transaction.py +0 -39
  544. ccxt-4.2.77.dist-info/METADATA +0 -626
  545. ccxt-4.2.77.dist-info/RECORD +0 -534
  546. {ccxt-4.2.77.dist-info → ccxt-4.4.49.dist-info}/top_level.txt +0 -0
ccxt/latoken.py CHANGED
@@ -6,9 +6,10 @@
6
6
  from ccxt.base.exchange import Exchange
7
7
  from ccxt.abstract.latoken import ImplicitAPI
8
8
  import hashlib
9
- from ccxt.base.types import Balances, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction, TransferEntry
9
+ from ccxt.base.types import Balances, Currencies, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFeeInterface, Transaction, TransferEntry
10
10
  from typing import List
11
11
  from ccxt.base.errors import ExchangeError
12
+ from ccxt.base.errors import AuthenticationError
12
13
  from ccxt.base.errors import PermissionDenied
13
14
  from ccxt.base.errors import AccountSuspended
14
15
  from ccxt.base.errors import ArgumentsRequired
@@ -20,7 +21,6 @@ from ccxt.base.errors import NotSupported
20
21
  from ccxt.base.errors import RateLimitExceeded
21
22
  from ccxt.base.errors import ExchangeNotAvailable
22
23
  from ccxt.base.errors import InvalidNonce
23
- from ccxt.base.errors import AuthenticationError
24
24
  from ccxt.base.decimal_to_precision import TICK_SIZE
25
25
 
26
26
 
@@ -60,6 +60,12 @@ class latoken(Exchange, ImplicitAPI):
60
60
  'fetchDepositAddressesByNetwork': False,
61
61
  'fetchDepositsWithdrawals': True,
62
62
  'fetchDepositWithdrawFees': False,
63
+ 'fetchFundingHistory': False,
64
+ 'fetchFundingInterval': False,
65
+ 'fetchFundingIntervals': False,
66
+ 'fetchFundingRate': False,
67
+ 'fetchFundingRateHistory': False,
68
+ 'fetchFundingRates': False,
63
69
  'fetchIsolatedBorrowRate': False,
64
70
  'fetchIsolatedBorrowRates': False,
65
71
  'fetchMarginMode': False,
@@ -69,7 +75,13 @@ class latoken(Exchange, ImplicitAPI):
69
75
  'fetchOrder': True,
70
76
  'fetchOrderBook': True,
71
77
  'fetchOrders': True,
78
+ 'fetchPosition': False,
79
+ 'fetchPositionHistory': False,
72
80
  'fetchPositionMode': False,
81
+ 'fetchPositions': False,
82
+ 'fetchPositionsForSymbol': False,
83
+ 'fetchPositionsHistory': False,
84
+ 'fetchPositionsRisk': False,
73
85
  'fetchTicker': True,
74
86
  'fetchTickers': True,
75
87
  'fetchTime': True,
@@ -236,6 +248,70 @@ class latoken(Exchange, ImplicitAPI):
236
248
  'method': 'fetchPrivateTradingFee', # or 'fetchPublicTradingFee'
237
249
  },
238
250
  },
251
+ 'features': {
252
+ 'spot': {
253
+ 'sandbox': False,
254
+ 'createOrder': {
255
+ 'marginMode': False,
256
+ 'triggerPrice': True,
257
+ 'triggerPriceType': None,
258
+ 'triggerDirection': False,
259
+ 'stopLossPrice': False, # todo
260
+ 'takeProfitPrice': False, # todo
261
+ 'attachedStopLossTakeProfit': None,
262
+ 'timeInForce': {
263
+ 'IOC': True, # todo: for non-trigger orders
264
+ 'FOK': True,
265
+ 'PO': False,
266
+ 'GTD': False,
267
+ },
268
+ 'hedged': False,
269
+ 'selfTradePrevention': False,
270
+ 'trailing': False,
271
+ 'leverage': False,
272
+ 'marketBuyByCost': True,
273
+ 'marketBuyRequiresPrice': False,
274
+ 'iceberg': False,
275
+ },
276
+ 'createOrders': None,
277
+ 'fetchMyTrades': {
278
+ 'marginMode': False,
279
+ 'limit': 1000,
280
+ 'daysBack': 100000, # todo
281
+ 'untilDays': None,
282
+ },
283
+ 'fetchOrder': {
284
+ 'marginMode': False,
285
+ 'trigger': True,
286
+ 'trailing': False,
287
+ },
288
+ 'fetchOpenOrders': {
289
+ 'marginMode': False,
290
+ 'limit': None,
291
+ 'trigger': False,
292
+ 'trailing': False,
293
+ },
294
+ 'fetchOrders': None,
295
+ 'fetchClosedOrders': {
296
+ 'marginMode': False,
297
+ 'limit': 1000,
298
+ 'daysBack': 100000, # todo
299
+ 'daysBackCanceled': 1,
300
+ 'untilDays': None,
301
+ 'trigger': True,
302
+ 'trailing': False,
303
+ },
304
+ 'fetchOHLCV': None,
305
+ },
306
+ 'swap': {
307
+ 'linear': None,
308
+ 'inverse': None,
309
+ },
310
+ 'future': {
311
+ 'linear': None,
312
+ 'inverse': None,
313
+ },
314
+ },
239
315
  })
240
316
 
241
317
  def nonce(self):
@@ -244,7 +320,9 @@ class latoken(Exchange, ImplicitAPI):
244
320
  def fetch_time(self, params={}):
245
321
  """
246
322
  fetches the current integer timestamp in milliseconds from the exchange server
247
- :see: https://api.latoken.com/doc/v2/#tag/Time/operation/currentTime
323
+
324
+ https://api.latoken.com/doc/v2/#tag/Time/operation/currentTime
325
+
248
326
  :param dict [params]: extra parameters specific to the exchange API endpoint
249
327
  :returns int: the current integer timestamp in milliseconds from the exchange server
250
328
  """
@@ -256,10 +334,12 @@ class latoken(Exchange, ImplicitAPI):
256
334
  #
257
335
  return self.safe_integer(response, 'serverTime')
258
336
 
259
- def fetch_markets(self, params={}):
337
+ def fetch_markets(self, params={}) -> List[Market]:
260
338
  """
261
339
  retrieves data on all markets for latoken
262
- :see: https://api.latoken.com/doc/v2/#tag/Pair/operation/getActivePairs
340
+
341
+ https://api.latoken.com/doc/v2/#tag/Pair/operation/getActivePairs
342
+
263
343
  :param dict [params]: extra parameters specific to the exchange API endpoint
264
344
  :returns dict[]: an array of objects representing market data
265
345
  """
@@ -401,7 +481,7 @@ class latoken(Exchange, ImplicitAPI):
401
481
  })
402
482
  return self.safe_value(self.options['fetchCurrencies'], 'response')
403
483
 
404
- def fetch_currencies(self, params={}):
484
+ def fetch_currencies(self, params={}) -> Currencies:
405
485
  """
406
486
  fetches all available currencies on an exchange
407
487
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -440,7 +520,7 @@ class latoken(Exchange, ImplicitAPI):
440
520
  # },
441
521
  # ]
442
522
  #
443
- result = {}
523
+ result: dict = {}
444
524
  for i in range(0, len(response)):
445
525
  currency = response[i]
446
526
  id = self.safe_string(currency, 'id')
@@ -485,7 +565,9 @@ class latoken(Exchange, ImplicitAPI):
485
565
  def fetch_balance(self, params={}) -> Balances:
486
566
  """
487
567
  query for balance and get the amount of funds available for trading or funds locked in orders
488
- :see: https://api.latoken.com/doc/v2/#tag/Account/operation/getBalancesByUser
568
+
569
+ https://api.latoken.com/doc/v2/#tag/Account/operation/getBalancesByUser
570
+
489
571
  :param dict [params]: extra parameters specific to the exchange API endpoint
490
572
  :returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
491
573
  """
@@ -513,7 +595,7 @@ class latoken(Exchange, ImplicitAPI):
513
595
  # }
514
596
  # ]
515
597
  #
516
- result = {
598
+ result: dict = {
517
599
  'info': response,
518
600
  'timestamp': None,
519
601
  'datetime': None,
@@ -546,7 +628,9 @@ class latoken(Exchange, ImplicitAPI):
546
628
  def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
547
629
  """
548
630
  fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
549
- :see: https://api.latoken.com/doc/v2/#tag/Order-Book/operation/getOrderBook
631
+
632
+ https://api.latoken.com/doc/v2/#tag/Order-Book/operation/getOrderBook
633
+
550
634
  :param str symbol: unified symbol of the market to fetch the order book for
551
635
  :param int [limit]: the maximum amount of order book entries to return
552
636
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -554,7 +638,7 @@ class latoken(Exchange, ImplicitAPI):
554
638
  """
555
639
  self.load_markets()
556
640
  market = self.market(symbol)
557
- request = {
641
+ request: dict = {
558
642
  'currency': market['baseId'],
559
643
  'quote': market['quoteId'],
560
644
  }
@@ -579,7 +663,7 @@ class latoken(Exchange, ImplicitAPI):
579
663
  #
580
664
  return self.parse_order_book(response, symbol, None, 'bid', 'ask', 'price', 'quantity')
581
665
 
582
- def parse_ticker(self, ticker, market: Market = None) -> Ticker:
666
+ def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
583
667
  #
584
668
  # {
585
669
  # "symbol": "92151d82-df98-4d88-9a4d-284fa9eca49f/0c3a106d-bde3-4c13-a26e-3fd2394529e5",
@@ -602,7 +686,7 @@ class latoken(Exchange, ImplicitAPI):
602
686
  #
603
687
  marketId = self.safe_string(ticker, 'symbol')
604
688
  last = self.safe_string(ticker, 'lastPrice')
605
- timestamp = self.safe_integer(ticker, 'updateTimestamp')
689
+ timestamp = self.safe_integer_omit_zero(ticker, 'updateTimestamp') # sometimes latoken provided '0' ts from /ticker endpoint
606
690
  return self.safe_ticker({
607
691
  'symbol': self.safe_symbol(marketId, market),
608
692
  'timestamp': timestamp,
@@ -629,14 +713,16 @@ class latoken(Exchange, ImplicitAPI):
629
713
  def fetch_ticker(self, symbol: str, params={}) -> Ticker:
630
714
  """
631
715
  fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
632
- :see: https://api.latoken.com/doc/v2/#tag/Ticker/operation/getTicker
716
+
717
+ https://api.latoken.com/doc/v2/#tag/Ticker/operation/getTicker
718
+
633
719
  :param str symbol: unified symbol of the market to fetch the ticker for
634
720
  :param dict [params]: extra parameters specific to the exchange API endpoint
635
721
  :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
636
722
  """
637
723
  self.load_markets()
638
724
  market = self.market(symbol)
639
- request = {
725
+ request: dict = {
640
726
  'base': market['baseId'],
641
727
  'quote': market['quoteId'],
642
728
  }
@@ -666,7 +752,9 @@ class latoken(Exchange, ImplicitAPI):
666
752
  def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
667
753
  """
668
754
  fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
669
- :see: https://api.latoken.com/doc/v2/#tag/Ticker/operation/getAllTickers
755
+
756
+ https://api.latoken.com/doc/v2/#tag/Ticker/operation/getAllTickers
757
+
670
758
  :param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
671
759
  :param dict [params]: extra parameters specific to the exchange API endpoint
672
760
  :returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
@@ -697,7 +785,7 @@ class latoken(Exchange, ImplicitAPI):
697
785
  #
698
786
  return self.parse_tickers(response, symbols)
699
787
 
700
- def parse_trade(self, trade, market: Market = None) -> Trade:
788
+ def parse_trade(self, trade: dict, market: Market = None) -> Trade:
701
789
  #
702
790
  # fetchTrades(public)
703
791
  #
@@ -781,7 +869,9 @@ class latoken(Exchange, ImplicitAPI):
781
869
  def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
782
870
  """
783
871
  get the list of most recent trades for a particular symbol
784
- :see: https://api.latoken.com/doc/v2/#tag/Trade/operation/getTradesByPair
872
+
873
+ https://api.latoken.com/doc/v2/#tag/Trade/operation/getTradesByPair
874
+
785
875
  :param str symbol: unified symbol of the market to fetch trades for
786
876
  :param int [since]: timestamp in ms of the earliest trade to fetch
787
877
  :param int [limit]: the maximum amount of trades to fetch
@@ -790,7 +880,7 @@ class latoken(Exchange, ImplicitAPI):
790
880
  """
791
881
  self.load_markets()
792
882
  market = self.market(symbol)
793
- request = {
883
+ request: dict = {
794
884
  'currency': market['baseId'],
795
885
  'quote': market['quoteId'],
796
886
  # 'from': str(since), # milliseconds
@@ -808,11 +898,13 @@ class latoken(Exchange, ImplicitAPI):
808
898
  #
809
899
  return self.parse_trades(response, market, since, limit)
810
900
 
811
- def fetch_trading_fee(self, symbol: str, params={}):
901
+ def fetch_trading_fee(self, symbol: str, params={}) -> TradingFeeInterface:
812
902
  """
813
903
  fetch the trading fees for a market
814
- :see: https://api.latoken.com/doc/v2/#tag/Trade/operation/getFeeByPair
815
- :see: https://api.latoken.com/doc/v2/#tag/Trade/operation/getAuthFeeByPair
904
+
905
+ https://api.latoken.com/doc/v2/#tag/Trade/operation/getFeeByPair
906
+ https://api.latoken.com/doc/v2/#tag/Trade/operation/getAuthFeeByPair
907
+
816
908
  :param str symbol: unified market symbol
817
909
  :param dict [params]: extra parameters specific to the exchange API endpoint
818
910
  :returns dict: a `fee structure <https://docs.ccxt.com/#/?id=fee-structure>`
@@ -831,7 +923,7 @@ class latoken(Exchange, ImplicitAPI):
831
923
  def fetch_public_trading_fee(self, symbol: str, params={}):
832
924
  self.load_markets()
833
925
  market = self.market(symbol)
834
- request = {
926
+ request: dict = {
835
927
  'currency': market['baseId'],
836
928
  'quote': market['quoteId'],
837
929
  }
@@ -849,12 +941,14 @@ class latoken(Exchange, ImplicitAPI):
849
941
  'symbol': market['symbol'],
850
942
  'maker': self.safe_number(response, 'makerFee'),
851
943
  'taker': self.safe_number(response, 'takerFee'),
944
+ 'percentage': None,
945
+ 'tierBased': None,
852
946
  }
853
947
 
854
948
  def fetch_private_trading_fee(self, symbol: str, params={}):
855
949
  self.load_markets()
856
950
  market = self.market(symbol)
857
- request = {
951
+ request: dict = {
858
952
  'currency': market['baseId'],
859
953
  'quote': market['quoteId'],
860
954
  }
@@ -872,13 +966,17 @@ class latoken(Exchange, ImplicitAPI):
872
966
  'symbol': market['symbol'],
873
967
  'maker': self.safe_number(response, 'makerFee'),
874
968
  'taker': self.safe_number(response, 'takerFee'),
969
+ 'percentage': None,
970
+ 'tierBased': None,
875
971
  }
876
972
 
877
973
  def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
878
974
  """
879
975
  fetch all trades made by the user
880
- :see: https://api.latoken.com/doc/v2/#tag/Trade/operation/getTradesByTrader
881
- :see: https://api.latoken.com/doc/v2/#tag/Trade/operation/getTradesByAssetAndTrader
976
+
977
+ https://api.latoken.com/doc/v2/#tag/Trade/operation/getTradesByTrader
978
+ https://api.latoken.com/doc/v2/#tag/Trade/operation/getTradesByAssetAndTrader
979
+
882
980
  :param str symbol: unified market symbol
883
981
  :param int [since]: the earliest time in ms to fetch trades for
884
982
  :param int [limit]: the maximum number of trades structures to retrieve
@@ -886,7 +984,7 @@ class latoken(Exchange, ImplicitAPI):
886
984
  :returns Trade[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
887
985
  """
888
986
  self.load_markets()
889
- request = {
987
+ request: dict = {
890
988
  # 'currency': market['baseId'],
891
989
  # 'quote': market['quoteId'],
892
990
  # 'from': self.milliseconds(),
@@ -923,8 +1021,8 @@ class latoken(Exchange, ImplicitAPI):
923
1021
  #
924
1022
  return self.parse_trades(response, market, since, limit)
925
1023
 
926
- def parse_order_status(self, status):
927
- statuses = {
1024
+ def parse_order_status(self, status: Str):
1025
+ statuses: dict = {
928
1026
  'ORDER_STATUS_PLACED': 'open',
929
1027
  'ORDER_STATUS_CLOSED': 'closed',
930
1028
  'ORDER_STATUS_CANCELLED': 'canceled',
@@ -932,21 +1030,21 @@ class latoken(Exchange, ImplicitAPI):
932
1030
  return self.safe_string(statuses, status, status)
933
1031
 
934
1032
  def parse_order_type(self, status):
935
- statuses = {
1033
+ statuses: dict = {
936
1034
  'ORDER_TYPE_MARKET': 'market',
937
1035
  'ORDER_TYPE_LIMIT': 'limit',
938
1036
  }
939
1037
  return self.safe_string(statuses, status, status)
940
1038
 
941
- def parse_time_in_force(self, timeInForce):
942
- timeInForces = {
1039
+ def parse_time_in_force(self, timeInForce: Str):
1040
+ timeInForces: dict = {
943
1041
  'ORDER_CONDITION_GOOD_TILL_CANCELLED': 'GTC',
944
1042
  'ORDER_CONDITION_IMMEDIATE_OR_CANCEL': 'IOC',
945
1043
  'ORDER_CONDITION_FILL_OR_KILL': 'FOK',
946
1044
  }
947
1045
  return self.safe_string(timeInForces, timeInForce, timeInForce)
948
1046
 
949
- def parse_order(self, order, market: Market = None) -> Order:
1047
+ def parse_order(self, order: dict, market: Market = None) -> Order:
950
1048
  #
951
1049
  # createOrder
952
1050
  #
@@ -1021,7 +1119,6 @@ class latoken(Exchange, ImplicitAPI):
1021
1119
  status = 'open'
1022
1120
  clientOrderId = self.safe_string(order, 'clientOrderId')
1023
1121
  timeInForce = self.parse_time_in_force(self.safe_string(order, 'condition'))
1024
- triggerPrice = self.safe_string(order, 'stopPrice')
1025
1122
  return self.safe_order({
1026
1123
  'id': id,
1027
1124
  'clientOrderId': clientOrderId,
@@ -1036,8 +1133,7 @@ class latoken(Exchange, ImplicitAPI):
1036
1133
  'postOnly': None,
1037
1134
  'side': side,
1038
1135
  'price': price,
1039
- 'stopPrice': triggerPrice,
1040
- 'triggerPrice': triggerPrice,
1136
+ 'triggerPrice': self.safe_string(order, 'stopPrice'),
1041
1137
  'cost': cost,
1042
1138
  'amount': amount,
1043
1139
  'filled': filled,
@@ -1050,8 +1146,10 @@ class latoken(Exchange, ImplicitAPI):
1050
1146
  def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
1051
1147
  """
1052
1148
  fetch all unfilled currently open orders
1053
- :see: https://api.latoken.com/doc/v2/#tag/Order/operation/getMyActiveOrdersByPair
1054
- :see: https://api.latoken.com/doc/v2/#tag/StopOrder/operation/getMyActiveStopOrdersByPair # stop
1149
+
1150
+ https://api.latoken.com/doc/v2/#tag/Order/operation/getMyActiveOrdersByPair
1151
+ https://api.latoken.com/doc/v2/#tag/StopOrder/operation/getMyActiveStopOrdersByPair # stop
1152
+
1055
1153
  :param str symbol: unified market symbol
1056
1154
  :param int [since]: the earliest time in ms to fetch open orders for
1057
1155
  :param int [limit]: the maximum number of open orders structures to retrieve
@@ -1067,7 +1165,7 @@ class latoken(Exchange, ImplicitAPI):
1067
1165
  params = self.omit(params, 'stop')
1068
1166
  # privateGetAuthOrderActive doesn't work even though its listed at https://api.latoken.com/doc/v2/#tag/Order/operation/getMyActiveOrders
1069
1167
  market = self.market(symbol)
1070
- request = {
1168
+ request: dict = {
1071
1169
  'currency': market['baseId'],
1072
1170
  'quote': market['quoteId'],
1073
1171
  }
@@ -1102,10 +1200,12 @@ class latoken(Exchange, ImplicitAPI):
1102
1200
  def fetch_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
1103
1201
  """
1104
1202
  fetches information on multiple orders made by the user
1105
- :see: https://api.latoken.com/doc/v2/#tag/Order/operation/getMyOrders
1106
- :see: https://api.latoken.com/doc/v2/#tag/Order/operation/getMyOrdersByPair
1107
- :see: https://api.latoken.com/doc/v2/#tag/StopOrder/operation/getMyStopOrders # stop
1108
- :see: https://api.latoken.com/doc/v2/#tag/StopOrder/operation/getMyStopOrdersByPair # stop
1203
+
1204
+ https://api.latoken.com/doc/v2/#tag/Order/operation/getMyOrders
1205
+ https://api.latoken.com/doc/v2/#tag/Order/operation/getMyOrdersByPair
1206
+ https://api.latoken.com/doc/v2/#tag/StopOrder/operation/getMyStopOrders # stop
1207
+ https://api.latoken.com/doc/v2/#tag/StopOrder/operation/getMyStopOrdersByPair # stop
1208
+
1109
1209
  :param str symbol: unified market symbol of the market orders were made in
1110
1210
  :param int [since]: the earliest time in ms to fetch orders for
1111
1211
  :param int [limit]: the maximum number of order structures to retrieve
@@ -1114,7 +1214,7 @@ class latoken(Exchange, ImplicitAPI):
1114
1214
  :returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
1115
1215
  """
1116
1216
  self.load_markets()
1117
- request = {
1217
+ request: dict = {
1118
1218
  # 'currency': market['baseId'],
1119
1219
  # 'quote': market['quoteId'],
1120
1220
  # 'from': self.milliseconds(),
@@ -1166,15 +1266,18 @@ class latoken(Exchange, ImplicitAPI):
1166
1266
  def fetch_order(self, id: str, symbol: Str = None, params={}):
1167
1267
  """
1168
1268
  fetches information on an order made by the user
1169
- :see: https://api.latoken.com/doc/v2/#tag/Order/operation/getOrderById
1170
- :see: https://api.latoken.com/doc/v2/#tag/StopOrder/operation/getStopOrderById
1269
+
1270
+ https://api.latoken.com/doc/v2/#tag/Order/operation/getOrderById
1271
+ https://api.latoken.com/doc/v2/#tag/StopOrder/operation/getStopOrderById
1272
+
1273
+ :param str id: order id
1171
1274
  :param str [symbol]: not used by latoken fetchOrder
1172
1275
  :param dict [params]: extra parameters specific to the exchange API endpoint
1173
1276
  :param boolean [params.trigger]: True if fetching a trigger order
1174
1277
  :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
1175
1278
  """
1176
1279
  self.load_markets()
1177
- request = {
1280
+ request: dict = {
1178
1281
  'id': id,
1179
1282
  }
1180
1283
  isTrigger = self.safe_value_2(params, 'trigger', 'stop')
@@ -1209,17 +1312,19 @@ class latoken(Exchange, ImplicitAPI):
1209
1312
  def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
1210
1313
  """
1211
1314
  create a trade order
1212
- :see: https://api.latoken.com/doc/v2/#tag/Order/operation/placeOrder
1213
- :see: https://api.latoken.com/doc/v2/#tag/StopOrder/operation/placeStopOrder # stop
1315
+
1316
+ https://api.latoken.com/doc/v2/#tag/Order/operation/placeOrder
1317
+ https://api.latoken.com/doc/v2/#tag/StopOrder/operation/placeStopOrder # stop
1318
+
1214
1319
  :param str symbol: unified symbol of the market to create an order in
1215
1320
  :param str type: 'market' or 'limit'
1216
1321
  :param str side: 'buy' or 'sell'
1217
1322
  :param float amount: how much of currency you want to trade in units of base currency
1218
- :param float [price]: the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders
1323
+ :param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
1219
1324
  :param dict [params]: extra parameters specific to the exchange API endpoint
1220
1325
  :param float [params.triggerPrice]: the price at which a trigger order is triggered at
1221
- *
1222
- * EXCHANGE SPECIFIC PARAMETERS
1326
+
1327
+ EXCHANGE SPECIFIC PARAMETERS
1223
1328
  :param str [params.condition]: "GTC", "IOC", or "FOK"
1224
1329
  :param str [params.clientOrderId]: [0 .. 50] characters, client's custom order id(free field for your convenience)
1225
1330
  :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
@@ -1227,7 +1332,7 @@ class latoken(Exchange, ImplicitAPI):
1227
1332
  self.load_markets()
1228
1333
  market = self.market(symbol)
1229
1334
  uppercaseType = type.upper()
1230
- request = {
1335
+ request: dict = {
1231
1336
  'baseCurrency': market['baseId'],
1232
1337
  'quoteCurrency': market['quoteId'],
1233
1338
  'side': side.upper(), # "BUY", "BID", "SELL", "ASK"
@@ -1266,8 +1371,10 @@ class latoken(Exchange, ImplicitAPI):
1266
1371
  def cancel_order(self, id: str, symbol: Str = None, params={}):
1267
1372
  """
1268
1373
  cancels an open order
1269
- :see: https://api.latoken.com/doc/v2/#tag/Order/operation/cancelOrder
1270
- :see: https://api.latoken.com/doc/v2/#tag/StopOrder/operation/cancelStopOrder # stop
1374
+
1375
+ https://api.latoken.com/doc/v2/#tag/Order/operation/cancelOrder
1376
+ https://api.latoken.com/doc/v2/#tag/StopOrder/operation/cancelStopOrder # stop
1377
+
1271
1378
  :param str id: order id
1272
1379
  :param str symbol: not used by latoken cancelOrder()
1273
1380
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -1275,7 +1382,7 @@ class latoken(Exchange, ImplicitAPI):
1275
1382
  :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
1276
1383
  """
1277
1384
  self.load_markets()
1278
- request = {
1385
+ request: dict = {
1279
1386
  'id': id,
1280
1387
  }
1281
1388
  isTrigger = self.safe_value_2(params, 'trigger', 'stop')
@@ -1299,15 +1406,17 @@ class latoken(Exchange, ImplicitAPI):
1299
1406
  def cancel_all_orders(self, symbol: Str = None, params={}):
1300
1407
  """
1301
1408
  cancel all open orders in a market
1302
- :see: https://api.latoken.com/doc/v2/#tag/Order/operation/cancelAllOrders
1303
- :see: https://api.latoken.com/doc/v2/#tag/Order/operation/cancelAllOrdersByPair
1409
+
1410
+ https://api.latoken.com/doc/v2/#tag/Order/operation/cancelAllOrders
1411
+ https://api.latoken.com/doc/v2/#tag/Order/operation/cancelAllOrdersByPair
1412
+
1304
1413
  :param str symbol: unified market symbol of the market to cancel orders in
1305
1414
  :param dict [params]: extra parameters specific to the exchange API endpoint
1306
1415
  :param boolean [params.trigger]: True if cancelling trigger orders
1307
1416
  :returns dict[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
1308
1417
  """
1309
1418
  self.load_markets()
1310
- request = {
1419
+ request: dict = {
1311
1420
  # 'currency': market['baseId'],
1312
1421
  # 'quote': market['quoteId'],
1313
1422
  }
@@ -1334,13 +1443,19 @@ class latoken(Exchange, ImplicitAPI):
1334
1443
  # "status":"SUCCESS"
1335
1444
  # }
1336
1445
  #
1337
- return response
1446
+ return [
1447
+ self.safe_order({
1448
+ 'info': response,
1449
+ }),
1450
+ ]
1338
1451
 
1339
1452
  def fetch_transactions(self, code: Str = None, since: Int = None, limit: Int = None, params={}):
1340
1453
  """
1341
- * @deprecated
1454
+ @deprecated
1342
1455
  use fetchDepositsWithdrawals instead
1343
- :see: https://api.latoken.com/doc/v2/#tag/Transaction/operation/getUserTransactions
1456
+
1457
+ https://api.latoken.com/doc/v2/#tag/Transaction/operation/getUserTransactions
1458
+
1344
1459
  :param str code: unified currency code for the currency of the transactions, default is None
1345
1460
  :param int [since]: timestamp in ms of the earliest transaction, default is None
1346
1461
  :param int [limit]: max number of transactions to return, default is None
@@ -1348,7 +1463,7 @@ class latoken(Exchange, ImplicitAPI):
1348
1463
  :returns dict: a list of `transaction structure <https://docs.ccxt.com/#/?id=transaction-structure>`
1349
1464
  """
1350
1465
  self.load_markets()
1351
- request = {
1466
+ request: dict = {
1352
1467
  # 'page': '1',
1353
1468
  # 'size': 100,
1354
1469
  }
@@ -1382,10 +1497,10 @@ class latoken(Exchange, ImplicitAPI):
1382
1497
  currency = None
1383
1498
  if code is not None:
1384
1499
  currency = self.currency(code)
1385
- content = self.safe_value(response, 'content', [])
1500
+ content = self.safe_list(response, 'content', [])
1386
1501
  return self.parse_transactions(content, currency, since, limit)
1387
1502
 
1388
- def parse_transaction(self, transaction, currency: Currency = None) -> Transaction:
1503
+ def parse_transaction(self, transaction: dict, currency: Currency = None) -> Transaction:
1389
1504
  #
1390
1505
  # {
1391
1506
  # "id":"fbf7d0d1-2629-4ad8-9def-7a1dba423362",
@@ -1447,25 +1562,28 @@ class latoken(Exchange, ImplicitAPI):
1447
1562
  'fee': fee,
1448
1563
  }
1449
1564
 
1450
- def parse_transaction_status(self, status):
1451
- statuses = {
1565
+ def parse_transaction_status(self, status: Str):
1566
+ statuses: dict = {
1452
1567
  'TRANSACTION_STATUS_CONFIRMED': 'ok',
1453
1568
  'TRANSACTION_STATUS_EXECUTED': 'ok',
1569
+ 'TRANSACTION_STATUS_CHECKING': 'pending',
1454
1570
  'TRANSACTION_STATUS_CANCELLED': 'canceled',
1455
1571
  }
1456
1572
  return self.safe_string(statuses, status, status)
1457
1573
 
1458
1574
  def parse_transaction_type(self, type):
1459
- types = {
1575
+ types: dict = {
1460
1576
  'TRANSACTION_TYPE_DEPOSIT': 'deposit',
1461
1577
  'TRANSACTION_TYPE_WITHDRAWAL': 'withdrawal',
1462
1578
  }
1463
1579
  return self.safe_string(types, type, type)
1464
1580
 
1465
- def fetch_transfers(self, code: Str = None, since: Int = None, limit: Int = None, params={}):
1581
+ def fetch_transfers(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[TransferEntry]:
1466
1582
  """
1467
1583
  fetch a history of internal transfers made on an account
1468
- :see: https://api.latoken.com/doc/v2/#tag/Transfer/operation/getUsersTransfers
1584
+
1585
+ https://api.latoken.com/doc/v2/#tag/Transfer/operation/getUsersTransfers
1586
+
1469
1587
  :param str code: unified currency code of the currency transferred
1470
1588
  :param int [since]: the earliest time in ms to fetch transfers for
1471
1589
  :param int [limit]: the maximum number of transfers structures to retrieve
@@ -1506,15 +1624,17 @@ class latoken(Exchange, ImplicitAPI):
1506
1624
  # "hasContent": True
1507
1625
  # }
1508
1626
  #
1509
- transfers = self.safe_value(response, 'content', [])
1627
+ transfers = self.safe_list(response, 'content', [])
1510
1628
  return self.parse_transfers(transfers, currency, since, limit)
1511
1629
 
1512
1630
  def transfer(self, code: str, amount: float, fromAccount: str, toAccount: str, params={}) -> TransferEntry:
1513
1631
  """
1514
1632
  transfer currency internally between wallets on the same account
1515
- :see: https://api.latoken.com/doc/v2/#tag/Transfer/operation/transferByEmail
1516
- :see: https://api.latoken.com/doc/v2/#tag/Transfer/operation/transferById
1517
- :see: https://api.latoken.com/doc/v2/#tag/Transfer/operation/transferByPhone
1633
+
1634
+ https://api.latoken.com/doc/v2/#tag/Transfer/operation/transferByEmail
1635
+ https://api.latoken.com/doc/v2/#tag/Transfer/operation/transferById
1636
+ https://api.latoken.com/doc/v2/#tag/Transfer/operation/transferByPhone
1637
+
1518
1638
  :param str code: unified currency code
1519
1639
  :param float amount: amount to transfer
1520
1640
  :param str fromAccount: account to transfer from
@@ -1524,7 +1644,7 @@ class latoken(Exchange, ImplicitAPI):
1524
1644
  """
1525
1645
  self.load_markets()
1526
1646
  currency = self.currency(code)
1527
- request = {
1647
+ request: dict = {
1528
1648
  'currency': currency['id'],
1529
1649
  'recipient': toAccount,
1530
1650
  'value': self.currency_to_precision(code, amount),
@@ -1560,7 +1680,7 @@ class latoken(Exchange, ImplicitAPI):
1560
1680
  #
1561
1681
  return self.parse_transfer(response)
1562
1682
 
1563
- def parse_transfer(self, transfer, currency: Currency = None):
1683
+ def parse_transfer(self, transfer: dict, currency: Currency = None) -> TransferEntry:
1564
1684
  #
1565
1685
  # {
1566
1686
  # "id": "e6fc4ace-7750-44e4-b7e9-6af038ac7107",
@@ -1598,8 +1718,8 @@ class latoken(Exchange, ImplicitAPI):
1598
1718
  'status': self.parse_transfer_status(status),
1599
1719
  }
1600
1720
 
1601
- def parse_transfer_status(self, status):
1602
- statuses = {
1721
+ def parse_transfer_status(self, status: Str) -> Str:
1722
+ statuses: dict = {
1603
1723
  'TRANSFER_STATUS_COMPLETED': 'ok',
1604
1724
  'TRANSFER_STATUS_PENDING': 'pending',
1605
1725
  'TRANSFER_STATUS_REJECTED': 'failed',
@@ -1631,7 +1751,7 @@ class latoken(Exchange, ImplicitAPI):
1631
1751
  url = self.urls['api']['rest'] + requestString
1632
1752
  return {'url': url, 'method': method, 'body': body, 'headers': headers}
1633
1753
 
1634
- def handle_errors(self, code, reason, url, method, headers, body, response, requestHeaders, requestBody):
1754
+ def handle_errors(self, code: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
1635
1755
  if not response:
1636
1756
  return None
1637
1757
  #