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/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
  },
@@ -178,12 +183,87 @@ class luno(Exchange, ImplicitAPI):
178
183
  },
179
184
  },
180
185
  'precisionMode': TICK_SIZE,
186
+ 'features': {
187
+ 'spot': {
188
+ 'sandbox': False,
189
+ 'createOrder': {
190
+ 'marginMode': False,
191
+ 'triggerPrice': True, # todo
192
+ 'triggerPriceType': None,
193
+ 'triggerDirection': True, # todo
194
+ 'stopLossPrice': False, # todo
195
+ 'takeProfitPrice': False, # todo
196
+ 'attachedStopLossTakeProfit': None,
197
+ 'timeInForce': {
198
+ 'IOC': True,
199
+ 'FOK': True,
200
+ 'PO': True,
201
+ 'GTD': False,
202
+ },
203
+ 'hedged': False,
204
+ 'trailing': False,
205
+ 'leverage': False,
206
+ 'marketBuyByCost': True,
207
+ 'marketBuyRequiresPrice': False,
208
+ 'selfTradePrevention': False,
209
+ 'iceberg': False,
210
+ },
211
+ 'createOrders': None,
212
+ 'fetchMyTrades': {
213
+ 'marginMode': False,
214
+ 'limit': 1000,
215
+ 'daysBack': 100000, # todo
216
+ 'untilDays': 100000, # todo
217
+ },
218
+ 'fetchOrder': {
219
+ 'marginMode': False,
220
+ 'trigger': False,
221
+ 'trailing': False,
222
+ },
223
+ 'fetchOpenOrders': {
224
+ 'marginMode': False,
225
+ 'limit': 1000,
226
+ 'trigger': False,
227
+ 'trailing': False,
228
+ },
229
+ 'fetchOrders': {
230
+ 'marginMode': False,
231
+ 'limit': 1000,
232
+ 'daysBack': 100000,
233
+ 'untilDays': None,
234
+ 'trigger': False,
235
+ 'trailing': False,
236
+ },
237
+ 'fetchClosedOrders': {
238
+ 'marginMode': False,
239
+ 'limit': 1000,
240
+ 'daysBack': 100000,
241
+ 'daysBackCanceled': 1,
242
+ 'untilDays': None,
243
+ 'trigger': False,
244
+ 'trailing': False,
245
+ },
246
+ 'fetchOHLCV': {
247
+ 'limit': None,
248
+ },
249
+ },
250
+ 'swap': {
251
+ 'linear': None,
252
+ 'inverse': None,
253
+ },
254
+ 'future': {
255
+ 'linear': None,
256
+ 'inverse': None,
257
+ },
258
+ },
181
259
  })
182
260
 
183
- def fetch_markets(self, params={}):
261
+ def fetch_markets(self, params={}) -> List[Market]:
184
262
  """
185
263
  retrieves data on all markets for luno
186
- :see: https://www.luno.com/en/developers/api#tag/Market/operation/Markets
264
+
265
+ https://www.luno.com/en/developers/api#tag/Market/operation/Markets
266
+
187
267
  :param dict [params]: extra parameters specific to the exchange API endpoint
188
268
  :returns dict[]: an array of objects representing market data
189
269
  """
@@ -271,7 +351,9 @@ class luno(Exchange, ImplicitAPI):
271
351
  def fetch_accounts(self, params={}) -> List[Account]:
272
352
  """
273
353
  fetch all the accounts associated with a profile
274
- :see: https://www.luno.com/en/developers/api#tag/Accounts/operation/getBalances
354
+
355
+ https://www.luno.com/en/developers/api#tag/Accounts/operation/getBalances
356
+
275
357
  :param dict [params]: extra parameters specific to the exchange API endpoint
276
358
  :returns dict: a dictionary of `account structures <https://docs.ccxt.com/#/?id=account-structure>` indexed by the account type
277
359
  """
@@ -293,7 +375,7 @@ class luno(Exchange, ImplicitAPI):
293
375
 
294
376
  def parse_balance(self, response) -> Balances:
295
377
  wallets = self.safe_value(response, 'balance', [])
296
- result = {
378
+ result: dict = {
297
379
  'info': response,
298
380
  'timestamp': None,
299
381
  'datetime': None,
@@ -320,7 +402,9 @@ class luno(Exchange, ImplicitAPI):
320
402
  def fetch_balance(self, params={}) -> Balances:
321
403
  """
322
404
  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
405
+
406
+ https://www.luno.com/en/developers/api#tag/Accounts/operation/getBalances
407
+
324
408
  :param dict [params]: extra parameters specific to the exchange API endpoint
325
409
  :returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
326
410
  """
@@ -341,8 +425,10 @@ class luno(Exchange, ImplicitAPI):
341
425
  def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
342
426
  """
343
427
  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
428
+
429
+ https://www.luno.com/en/developers/api#tag/Market/operation/GetOrderBookFull
430
+ https://www.luno.com/en/developers/api#tag/Market/operation/GetOrderBook
431
+
346
432
  :param str symbol: unified symbol of the market to fetch the order book for
347
433
  :param int [limit]: the maximum amount of order book entries to return
348
434
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -350,7 +436,7 @@ class luno(Exchange, ImplicitAPI):
350
436
  """
351
437
  self.load_markets()
352
438
  market = self.market(symbol)
353
- request = {
439
+ request: dict = {
354
440
  'pair': market['id'],
355
441
  }
356
442
  response = None
@@ -361,14 +447,14 @@ class luno(Exchange, ImplicitAPI):
361
447
  timestamp = self.safe_integer(response, 'timestamp')
362
448
  return self.parse_order_book(response, market['symbol'], timestamp, 'bids', 'asks', 'price', 'volume')
363
449
 
364
- def parse_order_status(self, status):
365
- statuses = {
450
+ def parse_order_status(self, status: Str):
451
+ statuses: dict = {
366
452
  # todo add other statuses
367
453
  'PENDING': 'open',
368
454
  }
369
455
  return self.safe_string(statuses, status, status)
370
456
 
371
- def parse_order(self, order, market: Market = None) -> Order:
457
+ def parse_order(self, order: dict, market: Market = None) -> Order:
372
458
  #
373
459
  # {
374
460
  # "base": "string",
@@ -428,7 +514,6 @@ class luno(Exchange, ImplicitAPI):
428
514
  'postOnly': None,
429
515
  'side': side,
430
516
  'price': price,
431
- 'stopPrice': None,
432
517
  'triggerPrice': None,
433
518
  'amount': amount,
434
519
  'filled': filled,
@@ -443,13 +528,16 @@ class luno(Exchange, ImplicitAPI):
443
528
  def fetch_order(self, id: str, symbol: Str = None, params={}):
444
529
  """
445
530
  fetches information on an order made by the user
446
- :see: https://www.luno.com/en/developers/api#tag/Orders/operation/GetOrder
531
+
532
+ https://www.luno.com/en/developers/api#tag/Orders/operation/GetOrder
533
+
534
+ :param str id: order id
447
535
  :param str symbol: not used by luno fetchOrder
448
536
  :param dict [params]: extra parameters specific to the exchange API endpoint
449
537
  :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
450
538
  """
451
539
  self.load_markets()
452
- request = {
540
+ request: dict = {
453
541
  'id': id,
454
542
  }
455
543
  response = self.privateGetOrdersId(self.extend(request, params))
@@ -457,7 +545,7 @@ class luno(Exchange, ImplicitAPI):
457
545
 
458
546
  def fetch_orders_by_state(self, state=None, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
459
547
  self.load_markets()
460
- request = {}
548
+ request: dict = {}
461
549
  market = None
462
550
  if state is not None:
463
551
  request['state'] = state
@@ -465,13 +553,15 @@ class luno(Exchange, ImplicitAPI):
465
553
  market = self.market(symbol)
466
554
  request['pair'] = market['id']
467
555
  response = self.privateGetListorders(self.extend(request, params))
468
- orders = self.safe_value(response, 'orders', [])
556
+ orders = self.safe_list(response, 'orders', [])
469
557
  return self.parse_orders(orders, market, since, limit)
470
558
 
471
559
  def fetch_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
472
560
  """
473
561
  fetches information on multiple orders made by the user
474
- :see: https://www.luno.com/en/developers/api#tag/Orders/operation/ListOrders
562
+
563
+ https://www.luno.com/en/developers/api#tag/Orders/operation/ListOrders
564
+
475
565
  :param str symbol: unified market symbol of the market orders were made in
476
566
  :param int [since]: the earliest time in ms to fetch orders for
477
567
  :param int [limit]: the maximum number of order structures to retrieve
@@ -483,7 +573,9 @@ class luno(Exchange, ImplicitAPI):
483
573
  def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
484
574
  """
485
575
  fetch all unfilled currently open orders
486
- :see: https://www.luno.com/en/developers/api#tag/Orders/operation/ListOrders
576
+
577
+ https://www.luno.com/en/developers/api#tag/Orders/operation/ListOrders
578
+
487
579
  :param str symbol: unified market symbol
488
580
  :param int [since]: the earliest time in ms to fetch open orders for
489
581
  :param int [limit]: the maximum number of open orders structures to retrieve
@@ -495,7 +587,9 @@ class luno(Exchange, ImplicitAPI):
495
587
  def fetch_closed_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
496
588
  """
497
589
  fetches information on multiple closed orders made by the user
498
- :see: https://www.luno.com/en/developers/api#tag/Orders/operation/ListOrders
590
+
591
+ https://www.luno.com/en/developers/api#tag/Orders/operation/ListOrders
592
+
499
593
  :param str symbol: unified market symbol of the market orders were made in
500
594
  :param int [since]: the earliest time in ms to fetch orders for
501
595
  :param int [limit]: the maximum number of order structures to retrieve
@@ -504,7 +598,7 @@ class luno(Exchange, ImplicitAPI):
504
598
  """
505
599
  return self.fetch_orders_by_state('COMPLETE', symbol, since, limit, params)
506
600
 
507
- def parse_ticker(self, ticker, market: Market = None) -> Ticker:
601
+ def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
508
602
  # {
509
603
  # "pair":"XBTAUD",
510
604
  # "timestamp":1642201439301,
@@ -544,7 +638,9 @@ class luno(Exchange, ImplicitAPI):
544
638
  def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
545
639
  """
546
640
  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
641
+
642
+ https://www.luno.com/en/developers/api#tag/Market/operation/GetTickers
643
+
548
644
  :param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
549
645
  :param dict [params]: extra parameters specific to the exchange API endpoint
550
646
  :returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
@@ -554,7 +650,7 @@ class luno(Exchange, ImplicitAPI):
554
650
  response = self.publicGetTickers(params)
555
651
  tickers = self.index_by(response['tickers'], 'pair')
556
652
  ids = list(tickers.keys())
557
- result = {}
653
+ result: dict = {}
558
654
  for i in range(0, len(ids)):
559
655
  id = ids[i]
560
656
  market = self.safe_market(id)
@@ -566,14 +662,16 @@ class luno(Exchange, ImplicitAPI):
566
662
  def fetch_ticker(self, symbol: str, params={}) -> Ticker:
567
663
  """
568
664
  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
665
+
666
+ https://www.luno.com/en/developers/api#tag/Market/operation/GetTicker
667
+
570
668
  :param str symbol: unified symbol of the market to fetch the ticker for
571
669
  :param dict [params]: extra parameters specific to the exchange API endpoint
572
670
  :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
573
671
  """
574
672
  self.load_markets()
575
673
  market = self.market(symbol)
576
- request = {
674
+ request: dict = {
577
675
  'pair': market['id'],
578
676
  }
579
677
  response = self.publicGetTicker(self.extend(request, params))
@@ -588,7 +686,7 @@ class luno(Exchange, ImplicitAPI):
588
686
  # }
589
687
  return self.parse_ticker(response, market)
590
688
 
591
- def parse_trade(self, trade, market: Market = None) -> Trade:
689
+ def parse_trade(self, trade: dict, market: Market = None) -> Trade:
592
690
  #
593
691
  # fetchTrades(public)
594
692
  #
@@ -675,7 +773,9 @@ class luno(Exchange, ImplicitAPI):
675
773
  def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
676
774
  """
677
775
  get the list of most recent trades for a particular symbol
678
- :see: https://www.luno.com/en/developers/api#tag/Market/operation/ListTrades
776
+
777
+ https://www.luno.com/en/developers/api#tag/Market/operation/ListTrades
778
+
679
779
  :param str symbol: unified symbol of the market to fetch trades for
680
780
  :param int [since]: timestamp in ms of the earliest trade to fetch
681
781
  :param int [limit]: the maximum amount of trades to fetch
@@ -684,7 +784,7 @@ class luno(Exchange, ImplicitAPI):
684
784
  """
685
785
  self.load_markets()
686
786
  market = self.market(symbol)
687
- request = {
787
+ request: dict = {
688
788
  'pair': market['id'],
689
789
  }
690
790
  if since is not None:
@@ -703,12 +803,14 @@ class luno(Exchange, ImplicitAPI):
703
803
  # ]
704
804
  # }
705
805
  #
706
- trades = self.safe_value(response, 'trades', [])
806
+ trades = self.safe_list(response, 'trades', [])
707
807
  return self.parse_trades(trades, market, since, limit)
708
808
 
709
809
  def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}):
710
810
  """
711
- :see: https://www.luno.com/en/developers/api#tag/Market/operation/GetCandles
811
+
812
+ https://www.luno.com/en/developers/api#tag/Market/operation/GetCandles
813
+
712
814
  fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
713
815
  :param str symbol: unified symbol of the market to fetch OHLCV data for
714
816
  :param str timeframe: the length of time each candle represents
@@ -719,7 +821,7 @@ class luno(Exchange, ImplicitAPI):
719
821
  """
720
822
  self.load_markets()
721
823
  market = self.market(symbol)
722
- request = {
824
+ request: dict = {
723
825
  'duration': self.safe_value(self.timeframes, timeframe, timeframe),
724
826
  'pair': market['id'],
725
827
  }
@@ -745,7 +847,7 @@ class luno(Exchange, ImplicitAPI):
745
847
  # "pair": "XBTEUR"
746
848
  # }
747
849
  #
748
- ohlcvs = self.safe_value(response, 'candles', [])
850
+ ohlcvs = self.safe_list(response, 'candles', [])
749
851
  return self.parse_ohlcvs(ohlcvs, market, timeframe, since, limit)
750
852
 
751
853
  def parse_ohlcv(self, ohlcv, market: Market = None) -> list:
@@ -769,7 +871,9 @@ class luno(Exchange, ImplicitAPI):
769
871
  def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
770
872
  """
771
873
  fetch all trades made by the user
772
- :see: https://www.luno.com/en/developers/api#tag/Orders/operation/ListUserTrades
874
+
875
+ https://www.luno.com/en/developers/api#tag/Orders/operation/ListUserTrades
876
+
773
877
  :param str symbol: unified market symbol
774
878
  :param int [since]: the earliest time in ms to fetch trades for
775
879
  :param int [limit]: the maximum number of trades structures to retrieve
@@ -780,7 +884,7 @@ class luno(Exchange, ImplicitAPI):
780
884
  raise ArgumentsRequired(self.id + ' fetchMyTrades() requires a symbol argument')
781
885
  self.load_markets()
782
886
  market = self.market(symbol)
783
- request = {
887
+ request: dict = {
784
888
  'pair': market['id'],
785
889
  }
786
890
  if since is not None:
@@ -809,20 +913,22 @@ class luno(Exchange, ImplicitAPI):
809
913
  # ]
810
914
  # }
811
915
  #
812
- trades = self.safe_value(response, 'trades', [])
916
+ trades = self.safe_list(response, 'trades', [])
813
917
  return self.parse_trades(trades, market, since, limit)
814
918
 
815
- def fetch_trading_fee(self, symbol: str, params={}):
919
+ def fetch_trading_fee(self, symbol: str, params={}) -> TradingFeeInterface:
816
920
  """
817
921
  fetch the trading fees for a market
818
- :see: https://www.luno.com/en/developers/api#tag/Orders/operation/getFeeInfo
922
+
923
+ https://www.luno.com/en/developers/api#tag/Orders/operation/getFeeInfo
924
+
819
925
  :param str symbol: unified market symbol
820
926
  :param dict [params]: extra parameters specific to the exchange API endpoint
821
927
  :returns dict: a `fee structure <https://docs.ccxt.com/#/?id=fee-structure>`
822
928
  """
823
929
  self.load_markets()
824
930
  market = self.market(symbol)
825
- request = {
931
+ request: dict = {
826
932
  'pair': market['id'],
827
933
  }
828
934
  response = self.privateGetFeeInfo(self.extend(request, params))
@@ -838,24 +944,28 @@ class luno(Exchange, ImplicitAPI):
838
944
  'symbol': symbol,
839
945
  'maker': self.safe_number(response, 'maker_fee'),
840
946
  'taker': self.safe_number(response, 'taker_fee'),
947
+ 'percentage': None,
948
+ 'tierBased': None,
841
949
  }
842
950
 
843
951
  def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
844
952
  """
845
953
  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
954
+
955
+ https://www.luno.com/en/developers/api#tag/Orders/operation/PostMarketOrder
956
+ https://www.luno.com/en/developers/api#tag/Orders/operation/PostLimitOrder
957
+
848
958
  :param str symbol: unified symbol of the market to create an order in
849
959
  :param str type: 'market' or 'limit'
850
960
  :param str side: 'buy' or 'sell'
851
961
  :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
962
+ :param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
853
963
  :param dict [params]: extra parameters specific to the exchange API endpoint
854
964
  :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
855
965
  """
856
966
  self.load_markets()
857
967
  market = self.market(symbol)
858
- request = {
968
+ request: dict = {
859
969
  'pair': market['id'],
860
970
  }
861
971
  response = None
@@ -880,17 +990,27 @@ class luno(Exchange, ImplicitAPI):
880
990
  def cancel_order(self, id: str, symbol: Str = None, params={}):
881
991
  """
882
992
  cancels an open order
883
- :see: https://www.luno.com/en/developers/api#tag/Orders/operation/StopOrder
993
+
994
+ https://www.luno.com/en/developers/api#tag/Orders/operation/StopOrder
995
+
884
996
  :param str id: order id
885
997
  :param str symbol: unified symbol of the market the order was made in
886
998
  :param dict [params]: extra parameters specific to the exchange API endpoint
887
999
  :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
888
1000
  """
889
1001
  self.load_markets()
890
- request = {
1002
+ request: dict = {
891
1003
  'order_id': id,
892
1004
  }
893
- return self.privatePostStoporder(self.extend(request, params))
1005
+ response = self.privatePostStoporder(self.extend(request, params))
1006
+ #
1007
+ # {
1008
+ # "success": True
1009
+ # }
1010
+ #
1011
+ return self.safe_order({
1012
+ 'info': response,
1013
+ })
894
1014
 
895
1015
  def fetch_ledger_by_entries(self, code: Str = None, entry=None, limit=None, params={}):
896
1016
  # by default without entry number or limit number, return most recent entry
@@ -899,21 +1019,23 @@ class luno(Exchange, ImplicitAPI):
899
1019
  if limit is None:
900
1020
  limit = 1
901
1021
  since = None
902
- request = {
1022
+ request: dict = {
903
1023
  'min_row': entry,
904
1024
  'max_row': self.sum(entry, limit),
905
1025
  }
906
1026
  return self.fetch_ledger(code, since, limit, self.extend(request, params))
907
1027
 
908
- def fetch_ledger(self, code: Str = None, since: Int = None, limit: Int = None, params={}):
1028
+ def fetch_ledger(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[LedgerEntry]:
909
1029
  """
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
1030
+ fetch the history of changes, actions done by the user or operations that altered the balance of the user
1031
+
1032
+ https://www.luno.com/en/developers/api#tag/Accounts/operation/ListTransactions
1033
+
1034
+ :param str [code]: unified currency code, default is None
913
1035
  :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
1036
+ :param int [limit]: max number of ledger entries to return, default is None
915
1037
  :param dict [params]: extra parameters specific to the exchange API endpoint
916
- :returns dict: a `ledger structure <https://docs.ccxt.com/#/?id=ledger-structure>`
1038
+ :returns dict: a `ledger structure <https://docs.ccxt.com/#/?id=ledger>`
917
1039
  """
918
1040
  self.load_markets()
919
1041
  self.load_accounts()
@@ -942,7 +1064,7 @@ class luno(Exchange, ImplicitAPI):
942
1064
  max_row = min_row + limit
943
1065
  if max_row - min_row > 1000:
944
1066
  raise ExchangeError(self.id + " fetchLedger() requires the params 'max_row' - 'min_row' <= 1000")
945
- request = {
1067
+ request: dict = {
946
1068
  'id': id,
947
1069
  'min_row': min_row,
948
1070
  'max_row': max_row,
@@ -953,7 +1075,7 @@ class luno(Exchange, ImplicitAPI):
953
1075
 
954
1076
  def parse_ledger_comment(self, comment):
955
1077
  words = comment.split(' ')
956
- types = {
1078
+ types: dict = {
957
1079
  'Withdrawal': 'fee',
958
1080
  'Trading': 'fee',
959
1081
  'Payment': 'transaction',
@@ -980,13 +1102,14 @@ class luno(Exchange, ImplicitAPI):
980
1102
  'referenceId': referenceId,
981
1103
  }
982
1104
 
983
- def parse_ledger_entry(self, entry, currency: Currency = None):
1105
+ def parse_ledger_entry(self, entry, currency: Currency = None) -> LedgerEntry:
984
1106
  # details = self.safe_value(entry, 'details', {})
985
1107
  id = self.safe_string(entry, 'row_index')
986
1108
  account_id = self.safe_string(entry, 'account_id')
987
1109
  timestamp = self.safe_integer(entry, 'timestamp')
988
1110
  currencyId = self.safe_string(entry, 'currency')
989
1111
  code = self.safe_currency_code(currencyId, currency)
1112
+ currency = self.safe_currency(currencyId, currency)
990
1113
  available_delta = self.safe_string(entry, 'available_delta')
991
1114
  balance_delta = self.safe_string(entry, 'balance_delta')
992
1115
  after = self.safe_string(entry, 'balance')
@@ -1012,7 +1135,8 @@ class luno(Exchange, ImplicitAPI):
1012
1135
  direction = 'in'
1013
1136
  elif Precise.string_lt(balance_delta, '0') or Precise.string_lt(available_delta, '0'):
1014
1137
  direction = 'out'
1015
- return {
1138
+ return self.safe_ledger_entry({
1139
+ 'info': entry,
1016
1140
  'id': id,
1017
1141
  'direction': direction,
1018
1142
  'account': account_id,
@@ -1020,15 +1144,14 @@ class luno(Exchange, ImplicitAPI):
1020
1144
  'referenceAccount': None,
1021
1145
  'type': type,
1022
1146
  'currency': code,
1023
- 'amount': self.parse_number(amount),
1147
+ 'amount': self.parse_to_numeric(amount),
1024
1148
  'timestamp': timestamp,
1025
1149
  'datetime': self.iso8601(timestamp),
1026
- 'before': self.parse_number(before),
1027
- 'after': self.parse_number(after),
1150
+ 'before': self.parse_to_numeric(before),
1151
+ 'after': self.parse_to_numeric(after),
1028
1152
  'status': status,
1029
1153
  'fee': None,
1030
- 'info': entry,
1031
- }
1154
+ }, currency)
1032
1155
 
1033
1156
  def sign(self, path, api='public', method='GET', params={}, headers=None, body=None):
1034
1157
  url = self.urls['api'][api] + '/' + self.version + '/' + self.implode_params(path, params)
@@ -1043,7 +1166,7 @@ class luno(Exchange, ImplicitAPI):
1043
1166
  }
1044
1167
  return {'url': url, 'method': method, 'body': body, 'headers': headers}
1045
1168
 
1046
- def handle_errors(self, httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody):
1169
+ def handle_errors(self, httpCode: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
1047
1170
  if response is None:
1048
1171
  return None
1049
1172
  error = self.safe_value(response, 'error')