ccxt 4.2.76__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 +25 -0
  44. ccxt/abstract/kucoinfutures.py +35 -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 +3513 -1511
  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 +3105 -881
  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 +239 -50
  89. ccxt/async_support/bitget.py +1513 -563
  90. ccxt/async_support/bithumb.py +201 -67
  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 +403 -150
  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 +2326 -1255
  107. ccxt/async_support/cex.py +1409 -1329
  108. ccxt/async_support/coinbase.py +1455 -288
  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 +467 -158
  125. ccxt/async_support/deribit.py +558 -324
  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 +1473 -464
  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 +1634 -269
  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 +1050 -355
  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 +1777 -455
  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 +1155 -295
  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 +1729 -482
  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 +3513 -1511
  187. ccxt/binancecoinm.py +2 -1
  188. ccxt/binanceus.py +12 -1
  189. ccxt/binanceusdm.py +3 -1
  190. ccxt/bingx.py +3105 -881
  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 +239 -50
  197. ccxt/bitget.py +1513 -563
  198. ccxt/bithumb.py +200 -67
  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 +403 -150
  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 +2326 -1255
  215. ccxt/cex.py +1408 -1329
  216. ccxt/coinbase.py +1455 -288
  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 +467 -158
  233. ccxt/deribit.py +558 -324
  234. ccxt/digifinex.py +340 -223
  235. ccxt/ellipx.py +1826 -0
  236. ccxt/exmo.py +259 -128
  237. ccxt/gate.py +1473 -464
  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 +1633 -269
  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 +1050 -355
  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 +1777 -455
  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 +63 -15
  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 +204 -82
  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 +967 -661
  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 +168 -32
  309. ccxt/pro/exmo.py +253 -21
  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 +93 -34
  336. ccxt/pro/poloniex.py +129 -50
  337. ccxt/pro/poloniexfutures.py +53 -32
  338. ccxt/pro/probit.py +93 -86
  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 +486 -70
  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} +465 -407
  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} +465 -409
  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 +1155 -295
  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.76.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.76.dist-info/METADATA +0 -626
  545. ccxt-4.2.76.dist-info/RECORD +0 -534
  546. {ccxt-4.2.76.dist-info → ccxt-4.4.48.dist-info}/top_level.txt +0 -0
ccxt/luno.py CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  from ccxt.base.exchange import Exchange
7
7
  from ccxt.abstract.luno import ImplicitAPI
8
- from ccxt.base.types import Account, Balances, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade
8
+ from ccxt.base.types import Account, Balances, Currency, Int, LedgerEntry, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFeeInterface
9
9
  from typing import List
10
10
  from ccxt.base.errors import ExchangeError
11
11
  from ccxt.base.errors import ArgumentsRequired
@@ -64,8 +64,11 @@ class luno(Exchange, ImplicitAPI):
64
64
  'fetchOrderBook': True,
65
65
  'fetchOrders': True,
66
66
  'fetchPosition': False,
67
+ 'fetchPositionHistory': False,
67
68
  'fetchPositionMode': False,
68
69
  'fetchPositions': False,
70
+ 'fetchPositionsForSymbol': False,
71
+ 'fetchPositionsHistory': False,
69
72
  'fetchPositionsRisk': False,
70
73
  'fetchPremiumIndexOHLCV': False,
71
74
  'fetchTicker': True,
@@ -147,6 +150,7 @@ class luno(Exchange, ImplicitAPI):
147
150
  'withdrawals': 1,
148
151
  'send': 1,
149
152
  'oauth2/grant': 1,
153
+ 'beneficiaries': 1,
150
154
  # POST /api/exchange/1/move
151
155
  },
152
156
  'put': {
@@ -154,6 +158,7 @@ class luno(Exchange, ImplicitAPI):
154
158
  },
155
159
  'delete': {
156
160
  'withdrawals/{id}': 1,
161
+ 'beneficiaries/{id}': 1,
157
162
  },
158
163
  },
159
164
  },
@@ -180,10 +185,12 @@ class luno(Exchange, ImplicitAPI):
180
185
  'precisionMode': TICK_SIZE,
181
186
  })
182
187
 
183
- def fetch_markets(self, params={}):
188
+ def fetch_markets(self, params={}) -> List[Market]:
184
189
  """
185
190
  retrieves data on all markets for luno
186
- :see: https://www.luno.com/en/developers/api#tag/Market/operation/Markets
191
+
192
+ https://www.luno.com/en/developers/api#tag/Market/operation/Markets
193
+
187
194
  :param dict [params]: extra parameters specific to the exchange API endpoint
188
195
  :returns dict[]: an array of objects representing market data
189
196
  """
@@ -271,7 +278,9 @@ class luno(Exchange, ImplicitAPI):
271
278
  def fetch_accounts(self, params={}) -> List[Account]:
272
279
  """
273
280
  fetch all the accounts associated with a profile
274
- :see: https://www.luno.com/en/developers/api#tag/Accounts/operation/getBalances
281
+
282
+ https://www.luno.com/en/developers/api#tag/Accounts/operation/getBalances
283
+
275
284
  :param dict [params]: extra parameters specific to the exchange API endpoint
276
285
  :returns dict: a dictionary of `account structures <https://docs.ccxt.com/#/?id=account-structure>` indexed by the account type
277
286
  """
@@ -293,7 +302,7 @@ class luno(Exchange, ImplicitAPI):
293
302
 
294
303
  def parse_balance(self, response) -> Balances:
295
304
  wallets = self.safe_value(response, 'balance', [])
296
- result = {
305
+ result: dict = {
297
306
  'info': response,
298
307
  'timestamp': None,
299
308
  'datetime': None,
@@ -320,7 +329,9 @@ class luno(Exchange, ImplicitAPI):
320
329
  def fetch_balance(self, params={}) -> Balances:
321
330
  """
322
331
  query for balance and get the amount of funds available for trading or funds locked in orders
323
- :see: https://www.luno.com/en/developers/api#tag/Accounts/operation/getBalances
332
+
333
+ https://www.luno.com/en/developers/api#tag/Accounts/operation/getBalances
334
+
324
335
  :param dict [params]: extra parameters specific to the exchange API endpoint
325
336
  :returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
326
337
  """
@@ -341,8 +352,10 @@ class luno(Exchange, ImplicitAPI):
341
352
  def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
342
353
  """
343
354
  fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
344
- :see: https://www.luno.com/en/developers/api#tag/Market/operation/GetOrderBookFull
345
- :see: https://www.luno.com/en/developers/api#tag/Market/operation/GetOrderBook
355
+
356
+ https://www.luno.com/en/developers/api#tag/Market/operation/GetOrderBookFull
357
+ https://www.luno.com/en/developers/api#tag/Market/operation/GetOrderBook
358
+
346
359
  :param str symbol: unified symbol of the market to fetch the order book for
347
360
  :param int [limit]: the maximum amount of order book entries to return
348
361
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -350,7 +363,7 @@ class luno(Exchange, ImplicitAPI):
350
363
  """
351
364
  self.load_markets()
352
365
  market = self.market(symbol)
353
- request = {
366
+ request: dict = {
354
367
  'pair': market['id'],
355
368
  }
356
369
  response = None
@@ -361,14 +374,14 @@ class luno(Exchange, ImplicitAPI):
361
374
  timestamp = self.safe_integer(response, 'timestamp')
362
375
  return self.parse_order_book(response, market['symbol'], timestamp, 'bids', 'asks', 'price', 'volume')
363
376
 
364
- def parse_order_status(self, status):
365
- statuses = {
377
+ def parse_order_status(self, status: Str):
378
+ statuses: dict = {
366
379
  # todo add other statuses
367
380
  'PENDING': 'open',
368
381
  }
369
382
  return self.safe_string(statuses, status, status)
370
383
 
371
- def parse_order(self, order, market: Market = None) -> Order:
384
+ def parse_order(self, order: dict, market: Market = None) -> Order:
372
385
  #
373
386
  # {
374
387
  # "base": "string",
@@ -428,7 +441,6 @@ class luno(Exchange, ImplicitAPI):
428
441
  'postOnly': None,
429
442
  'side': side,
430
443
  'price': price,
431
- 'stopPrice': None,
432
444
  'triggerPrice': None,
433
445
  'amount': amount,
434
446
  'filled': filled,
@@ -443,13 +455,16 @@ class luno(Exchange, ImplicitAPI):
443
455
  def fetch_order(self, id: str, symbol: Str = None, params={}):
444
456
  """
445
457
  fetches information on an order made by the user
446
- :see: https://www.luno.com/en/developers/api#tag/Orders/operation/GetOrder
458
+
459
+ https://www.luno.com/en/developers/api#tag/Orders/operation/GetOrder
460
+
461
+ :param str id: order id
447
462
  :param str symbol: not used by luno fetchOrder
448
463
  :param dict [params]: extra parameters specific to the exchange API endpoint
449
464
  :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
450
465
  """
451
466
  self.load_markets()
452
- request = {
467
+ request: dict = {
453
468
  'id': id,
454
469
  }
455
470
  response = self.privateGetOrdersId(self.extend(request, params))
@@ -457,7 +472,7 @@ class luno(Exchange, ImplicitAPI):
457
472
 
458
473
  def fetch_orders_by_state(self, state=None, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
459
474
  self.load_markets()
460
- request = {}
475
+ request: dict = {}
461
476
  market = None
462
477
  if state is not None:
463
478
  request['state'] = state
@@ -465,13 +480,15 @@ class luno(Exchange, ImplicitAPI):
465
480
  market = self.market(symbol)
466
481
  request['pair'] = market['id']
467
482
  response = self.privateGetListorders(self.extend(request, params))
468
- orders = self.safe_value(response, 'orders', [])
483
+ orders = self.safe_list(response, 'orders', [])
469
484
  return self.parse_orders(orders, market, since, limit)
470
485
 
471
486
  def fetch_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
472
487
  """
473
488
  fetches information on multiple orders made by the user
474
- :see: https://www.luno.com/en/developers/api#tag/Orders/operation/ListOrders
489
+
490
+ https://www.luno.com/en/developers/api#tag/Orders/operation/ListOrders
491
+
475
492
  :param str symbol: unified market symbol of the market orders were made in
476
493
  :param int [since]: the earliest time in ms to fetch orders for
477
494
  :param int [limit]: the maximum number of order structures to retrieve
@@ -483,7 +500,9 @@ class luno(Exchange, ImplicitAPI):
483
500
  def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
484
501
  """
485
502
  fetch all unfilled currently open orders
486
- :see: https://www.luno.com/en/developers/api#tag/Orders/operation/ListOrders
503
+
504
+ https://www.luno.com/en/developers/api#tag/Orders/operation/ListOrders
505
+
487
506
  :param str symbol: unified market symbol
488
507
  :param int [since]: the earliest time in ms to fetch open orders for
489
508
  :param int [limit]: the maximum number of open orders structures to retrieve
@@ -495,7 +514,9 @@ class luno(Exchange, ImplicitAPI):
495
514
  def fetch_closed_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
496
515
  """
497
516
  fetches information on multiple closed orders made by the user
498
- :see: https://www.luno.com/en/developers/api#tag/Orders/operation/ListOrders
517
+
518
+ https://www.luno.com/en/developers/api#tag/Orders/operation/ListOrders
519
+
499
520
  :param str symbol: unified market symbol of the market orders were made in
500
521
  :param int [since]: the earliest time in ms to fetch orders for
501
522
  :param int [limit]: the maximum number of order structures to retrieve
@@ -504,7 +525,7 @@ class luno(Exchange, ImplicitAPI):
504
525
  """
505
526
  return self.fetch_orders_by_state('COMPLETE', symbol, since, limit, params)
506
527
 
507
- def parse_ticker(self, ticker, market: Market = None) -> Ticker:
528
+ def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
508
529
  # {
509
530
  # "pair":"XBTAUD",
510
531
  # "timestamp":1642201439301,
@@ -544,7 +565,9 @@ class luno(Exchange, ImplicitAPI):
544
565
  def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
545
566
  """
546
567
  fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
547
- :see: https://www.luno.com/en/developers/api#tag/Market/operation/GetTickers
568
+
569
+ https://www.luno.com/en/developers/api#tag/Market/operation/GetTickers
570
+
548
571
  :param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
549
572
  :param dict [params]: extra parameters specific to the exchange API endpoint
550
573
  :returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
@@ -554,7 +577,7 @@ class luno(Exchange, ImplicitAPI):
554
577
  response = self.publicGetTickers(params)
555
578
  tickers = self.index_by(response['tickers'], 'pair')
556
579
  ids = list(tickers.keys())
557
- result = {}
580
+ result: dict = {}
558
581
  for i in range(0, len(ids)):
559
582
  id = ids[i]
560
583
  market = self.safe_market(id)
@@ -566,14 +589,16 @@ class luno(Exchange, ImplicitAPI):
566
589
  def fetch_ticker(self, symbol: str, params={}) -> Ticker:
567
590
  """
568
591
  fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
569
- :see: https://www.luno.com/en/developers/api#tag/Market/operation/GetTicker
592
+
593
+ https://www.luno.com/en/developers/api#tag/Market/operation/GetTicker
594
+
570
595
  :param str symbol: unified symbol of the market to fetch the ticker for
571
596
  :param dict [params]: extra parameters specific to the exchange API endpoint
572
597
  :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
573
598
  """
574
599
  self.load_markets()
575
600
  market = self.market(symbol)
576
- request = {
601
+ request: dict = {
577
602
  'pair': market['id'],
578
603
  }
579
604
  response = self.publicGetTicker(self.extend(request, params))
@@ -588,7 +613,7 @@ class luno(Exchange, ImplicitAPI):
588
613
  # }
589
614
  return self.parse_ticker(response, market)
590
615
 
591
- def parse_trade(self, trade, market: Market = None) -> Trade:
616
+ def parse_trade(self, trade: dict, market: Market = None) -> Trade:
592
617
  #
593
618
  # fetchTrades(public)
594
619
  #
@@ -675,7 +700,9 @@ class luno(Exchange, ImplicitAPI):
675
700
  def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
676
701
  """
677
702
  get the list of most recent trades for a particular symbol
678
- :see: https://www.luno.com/en/developers/api#tag/Market/operation/ListTrades
703
+
704
+ https://www.luno.com/en/developers/api#tag/Market/operation/ListTrades
705
+
679
706
  :param str symbol: unified symbol of the market to fetch trades for
680
707
  :param int [since]: timestamp in ms of the earliest trade to fetch
681
708
  :param int [limit]: the maximum amount of trades to fetch
@@ -684,7 +711,7 @@ class luno(Exchange, ImplicitAPI):
684
711
  """
685
712
  self.load_markets()
686
713
  market = self.market(symbol)
687
- request = {
714
+ request: dict = {
688
715
  'pair': market['id'],
689
716
  }
690
717
  if since is not None:
@@ -703,12 +730,14 @@ class luno(Exchange, ImplicitAPI):
703
730
  # ]
704
731
  # }
705
732
  #
706
- trades = self.safe_value(response, 'trades', [])
733
+ trades = self.safe_list(response, 'trades', [])
707
734
  return self.parse_trades(trades, market, since, limit)
708
735
 
709
736
  def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}):
710
737
  """
711
- :see: https://www.luno.com/en/developers/api#tag/Market/operation/GetCandles
738
+
739
+ https://www.luno.com/en/developers/api#tag/Market/operation/GetCandles
740
+
712
741
  fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
713
742
  :param str symbol: unified symbol of the market to fetch OHLCV data for
714
743
  :param str timeframe: the length of time each candle represents
@@ -719,7 +748,7 @@ class luno(Exchange, ImplicitAPI):
719
748
  """
720
749
  self.load_markets()
721
750
  market = self.market(symbol)
722
- request = {
751
+ request: dict = {
723
752
  'duration': self.safe_value(self.timeframes, timeframe, timeframe),
724
753
  'pair': market['id'],
725
754
  }
@@ -745,7 +774,7 @@ class luno(Exchange, ImplicitAPI):
745
774
  # "pair": "XBTEUR"
746
775
  # }
747
776
  #
748
- ohlcvs = self.safe_value(response, 'candles', [])
777
+ ohlcvs = self.safe_list(response, 'candles', [])
749
778
  return self.parse_ohlcvs(ohlcvs, market, timeframe, since, limit)
750
779
 
751
780
  def parse_ohlcv(self, ohlcv, market: Market = None) -> list:
@@ -769,7 +798,9 @@ class luno(Exchange, ImplicitAPI):
769
798
  def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
770
799
  """
771
800
  fetch all trades made by the user
772
- :see: https://www.luno.com/en/developers/api#tag/Orders/operation/ListUserTrades
801
+
802
+ https://www.luno.com/en/developers/api#tag/Orders/operation/ListUserTrades
803
+
773
804
  :param str symbol: unified market symbol
774
805
  :param int [since]: the earliest time in ms to fetch trades for
775
806
  :param int [limit]: the maximum number of trades structures to retrieve
@@ -780,7 +811,7 @@ class luno(Exchange, ImplicitAPI):
780
811
  raise ArgumentsRequired(self.id + ' fetchMyTrades() requires a symbol argument')
781
812
  self.load_markets()
782
813
  market = self.market(symbol)
783
- request = {
814
+ request: dict = {
784
815
  'pair': market['id'],
785
816
  }
786
817
  if since is not None:
@@ -809,20 +840,22 @@ class luno(Exchange, ImplicitAPI):
809
840
  # ]
810
841
  # }
811
842
  #
812
- trades = self.safe_value(response, 'trades', [])
843
+ trades = self.safe_list(response, 'trades', [])
813
844
  return self.parse_trades(trades, market, since, limit)
814
845
 
815
- def fetch_trading_fee(self, symbol: str, params={}):
846
+ def fetch_trading_fee(self, symbol: str, params={}) -> TradingFeeInterface:
816
847
  """
817
848
  fetch the trading fees for a market
818
- :see: https://www.luno.com/en/developers/api#tag/Orders/operation/getFeeInfo
849
+
850
+ https://www.luno.com/en/developers/api#tag/Orders/operation/getFeeInfo
851
+
819
852
  :param str symbol: unified market symbol
820
853
  :param dict [params]: extra parameters specific to the exchange API endpoint
821
854
  :returns dict: a `fee structure <https://docs.ccxt.com/#/?id=fee-structure>`
822
855
  """
823
856
  self.load_markets()
824
857
  market = self.market(symbol)
825
- request = {
858
+ request: dict = {
826
859
  'pair': market['id'],
827
860
  }
828
861
  response = self.privateGetFeeInfo(self.extend(request, params))
@@ -838,24 +871,28 @@ class luno(Exchange, ImplicitAPI):
838
871
  'symbol': symbol,
839
872
  'maker': self.safe_number(response, 'maker_fee'),
840
873
  'taker': self.safe_number(response, 'taker_fee'),
874
+ 'percentage': None,
875
+ 'tierBased': None,
841
876
  }
842
877
 
843
878
  def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
844
879
  """
845
880
  create a trade order
846
- :see: https://www.luno.com/en/developers/api#tag/Orders/operation/PostMarketOrder
847
- :see: https://www.luno.com/en/developers/api#tag/Orders/operation/PostLimitOrder
881
+
882
+ https://www.luno.com/en/developers/api#tag/Orders/operation/PostMarketOrder
883
+ https://www.luno.com/en/developers/api#tag/Orders/operation/PostLimitOrder
884
+
848
885
  :param str symbol: unified symbol of the market to create an order in
849
886
  :param str type: 'market' or 'limit'
850
887
  :param str side: 'buy' or 'sell'
851
888
  :param float amount: how much of currency you want to trade in units of base currency
852
- :param float [price]: the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders
889
+ :param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
853
890
  :param dict [params]: extra parameters specific to the exchange API endpoint
854
891
  :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
855
892
  """
856
893
  self.load_markets()
857
894
  market = self.market(symbol)
858
- request = {
895
+ request: dict = {
859
896
  'pair': market['id'],
860
897
  }
861
898
  response = None
@@ -880,17 +917,27 @@ class luno(Exchange, ImplicitAPI):
880
917
  def cancel_order(self, id: str, symbol: Str = None, params={}):
881
918
  """
882
919
  cancels an open order
883
- :see: https://www.luno.com/en/developers/api#tag/Orders/operation/StopOrder
920
+
921
+ https://www.luno.com/en/developers/api#tag/Orders/operation/StopOrder
922
+
884
923
  :param str id: order id
885
924
  :param str symbol: unified symbol of the market the order was made in
886
925
  :param dict [params]: extra parameters specific to the exchange API endpoint
887
926
  :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
888
927
  """
889
928
  self.load_markets()
890
- request = {
929
+ request: dict = {
891
930
  'order_id': id,
892
931
  }
893
- return self.privatePostStoporder(self.extend(request, params))
932
+ response = self.privatePostStoporder(self.extend(request, params))
933
+ #
934
+ # {
935
+ # "success": True
936
+ # }
937
+ #
938
+ return self.safe_order({
939
+ 'info': response,
940
+ })
894
941
 
895
942
  def fetch_ledger_by_entries(self, code: Str = None, entry=None, limit=None, params={}):
896
943
  # by default without entry number or limit number, return most recent entry
@@ -899,21 +946,23 @@ class luno(Exchange, ImplicitAPI):
899
946
  if limit is None:
900
947
  limit = 1
901
948
  since = None
902
- request = {
949
+ request: dict = {
903
950
  'min_row': entry,
904
951
  'max_row': self.sum(entry, limit),
905
952
  }
906
953
  return self.fetch_ledger(code, since, limit, self.extend(request, params))
907
954
 
908
- def fetch_ledger(self, code: Str = None, since: Int = None, limit: Int = None, params={}):
955
+ def fetch_ledger(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[LedgerEntry]:
909
956
  """
910
- fetch the history of changes, actions done by the user or operations that altered balance of the user
911
- :see: https://www.luno.com/en/developers/api#tag/Accounts/operation/ListTransactions
912
- :param str code: unified currency code, default is None
957
+ fetch the history of changes, actions done by the user or operations that altered the balance of the user
958
+
959
+ https://www.luno.com/en/developers/api#tag/Accounts/operation/ListTransactions
960
+
961
+ :param str [code]: unified currency code, default is None
913
962
  :param int [since]: timestamp in ms of the earliest ledger entry, default is None
914
- :param int [limit]: max number of ledger entrys to return, default is None
963
+ :param int [limit]: max number of ledger entries to return, default is None
915
964
  :param dict [params]: extra parameters specific to the exchange API endpoint
916
- :returns dict: a `ledger structure <https://docs.ccxt.com/#/?id=ledger-structure>`
965
+ :returns dict: a `ledger structure <https://docs.ccxt.com/#/?id=ledger>`
917
966
  """
918
967
  self.load_markets()
919
968
  self.load_accounts()
@@ -942,7 +991,7 @@ class luno(Exchange, ImplicitAPI):
942
991
  max_row = min_row + limit
943
992
  if max_row - min_row > 1000:
944
993
  raise ExchangeError(self.id + " fetchLedger() requires the params 'max_row' - 'min_row' <= 1000")
945
- request = {
994
+ request: dict = {
946
995
  'id': id,
947
996
  'min_row': min_row,
948
997
  'max_row': max_row,
@@ -953,7 +1002,7 @@ class luno(Exchange, ImplicitAPI):
953
1002
 
954
1003
  def parse_ledger_comment(self, comment):
955
1004
  words = comment.split(' ')
956
- types = {
1005
+ types: dict = {
957
1006
  'Withdrawal': 'fee',
958
1007
  'Trading': 'fee',
959
1008
  'Payment': 'transaction',
@@ -980,13 +1029,14 @@ class luno(Exchange, ImplicitAPI):
980
1029
  'referenceId': referenceId,
981
1030
  }
982
1031
 
983
- def parse_ledger_entry(self, entry, currency: Currency = None):
1032
+ def parse_ledger_entry(self, entry, currency: Currency = None) -> LedgerEntry:
984
1033
  # details = self.safe_value(entry, 'details', {})
985
1034
  id = self.safe_string(entry, 'row_index')
986
1035
  account_id = self.safe_string(entry, 'account_id')
987
1036
  timestamp = self.safe_integer(entry, 'timestamp')
988
1037
  currencyId = self.safe_string(entry, 'currency')
989
1038
  code = self.safe_currency_code(currencyId, currency)
1039
+ currency = self.safe_currency(currencyId, currency)
990
1040
  available_delta = self.safe_string(entry, 'available_delta')
991
1041
  balance_delta = self.safe_string(entry, 'balance_delta')
992
1042
  after = self.safe_string(entry, 'balance')
@@ -1012,7 +1062,8 @@ class luno(Exchange, ImplicitAPI):
1012
1062
  direction = 'in'
1013
1063
  elif Precise.string_lt(balance_delta, '0') or Precise.string_lt(available_delta, '0'):
1014
1064
  direction = 'out'
1015
- return {
1065
+ return self.safe_ledger_entry({
1066
+ 'info': entry,
1016
1067
  'id': id,
1017
1068
  'direction': direction,
1018
1069
  'account': account_id,
@@ -1020,15 +1071,14 @@ class luno(Exchange, ImplicitAPI):
1020
1071
  'referenceAccount': None,
1021
1072
  'type': type,
1022
1073
  'currency': code,
1023
- 'amount': self.parse_number(amount),
1074
+ 'amount': self.parse_to_numeric(amount),
1024
1075
  'timestamp': timestamp,
1025
1076
  'datetime': self.iso8601(timestamp),
1026
- 'before': self.parse_number(before),
1027
- 'after': self.parse_number(after),
1077
+ 'before': self.parse_to_numeric(before),
1078
+ 'after': self.parse_to_numeric(after),
1028
1079
  'status': status,
1029
1080
  'fee': None,
1030
- 'info': entry,
1031
- }
1081
+ }, currency)
1032
1082
 
1033
1083
  def sign(self, path, api='public', method='GET', params={}, headers=None, body=None):
1034
1084
  url = self.urls['api'][api] + '/' + self.version + '/' + self.implode_params(path, params)
@@ -1043,7 +1093,7 @@ class luno(Exchange, ImplicitAPI):
1043
1093
  }
1044
1094
  return {'url': url, 'method': method, 'body': body, 'headers': headers}
1045
1095
 
1046
- def handle_errors(self, httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody):
1096
+ def handle_errors(self, httpCode: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
1047
1097
  if response is None:
1048
1098
  return None
1049
1099
  error = self.safe_value(response, 'error')