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/lbank.py CHANGED
@@ -6,9 +6,10 @@
6
6
  from ccxt.base.exchange import Exchange
7
7
  from ccxt.abstract.lbank import ImplicitAPI
8
8
  import hashlib
9
- from ccxt.base.types import Balances, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction
9
+ from ccxt.base.types import Balances, Currency, DepositAddress, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, FundingRate, FundingRates, Trade, TradingFeeInterface, TradingFees, Transaction
10
10
  from typing import List
11
11
  from ccxt.base.errors import ExchangeError
12
+ from ccxt.base.errors import AuthenticationError
12
13
  from ccxt.base.errors import PermissionDenied
13
14
  from ccxt.base.errors import ArgumentsRequired
14
15
  from ccxt.base.errors import BadRequest
@@ -20,7 +21,6 @@ from ccxt.base.errors import DuplicateOrderId
20
21
  from ccxt.base.errors import NotSupported
21
22
  from ccxt.base.errors import RateLimitExceeded
22
23
  from ccxt.base.errors import InvalidNonce
23
- from ccxt.base.errors import AuthenticationError
24
24
  from ccxt.base.decimal_to_precision import TICK_SIZE
25
25
  from ccxt.base.precise import Precise
26
26
 
@@ -62,12 +62,14 @@ class lbank(Exchange, ImplicitAPI):
62
62
  'fetchCrossBorrowRate': False,
63
63
  'fetchCrossBorrowRates': False,
64
64
  'fetchDepositAddress': True,
65
+ 'fetchDepositAddresses': False,
66
+ 'fetchDepositAddressesByNetwork': False,
65
67
  'fetchDepositWithdrawFee': 'emulated',
66
68
  'fetchDepositWithdrawFees': True,
67
69
  'fetchFundingHistory': False,
68
70
  'fetchFundingRate': False,
69
71
  'fetchFundingRateHistory': False,
70
- 'fetchFundingRates': False,
72
+ 'fetchFundingRates': True,
71
73
  'fetchIndexOHLCV': False,
72
74
  'fetchIsolatedBorrowRate': False,
73
75
  'fetchIsolatedBorrowRates': False,
@@ -219,6 +221,7 @@ class lbank(Exchange, ImplicitAPI):
219
221
  },
220
222
  },
221
223
  'commonCurrencies': {
224
+ 'HIT': 'Hiver',
222
225
  'VET_ERC20': 'VEN',
223
226
  'PNT': 'Penta',
224
227
  },
@@ -305,13 +308,85 @@ class lbank(Exchange, ImplicitAPI):
305
308
  'USDT': 'TRC20',
306
309
  },
307
310
  },
311
+ 'features': {
312
+ 'default': {
313
+ 'sandbox': False,
314
+ 'createOrder': {
315
+ 'marginMode': False,
316
+ 'triggerPrice': False,
317
+ 'triggerPriceType': None,
318
+ 'triggerDirection': False,
319
+ 'stopLossPrice': False,
320
+ 'takeProfitPrice': False,
321
+ 'attachedStopLossTakeProfit': None,
322
+ 'timeInForce': {
323
+ 'IOC': True,
324
+ 'FOK': True,
325
+ 'PO': False,
326
+ 'GTD': False,
327
+ },
328
+ 'hedged': False,
329
+ 'selfTradePrevention': False,
330
+ 'trailing': False,
331
+ 'leverage': False,
332
+ 'marketBuyByCost': True,
333
+ 'marketBuyRequiresPrice': False,
334
+ 'iceberg': False,
335
+ },
336
+ 'createOrders': None, # todo
337
+ 'fetchMyTrades': {
338
+ 'marginMode': False,
339
+ 'limit': 100,
340
+ 'daysBack': 100000, # todo
341
+ 'untilDays': 2,
342
+ },
343
+ 'fetchOrder': {
344
+ 'marginMode': False,
345
+ 'trigger': False,
346
+ 'trailing': False,
347
+ },
348
+ 'fetchOpenOrders': {
349
+ 'marginMode': False,
350
+ 'limit': 200,
351
+ 'trigger': False,
352
+ 'trailing': False,
353
+ },
354
+ 'fetchOrders': {
355
+ 'marginMode': False,
356
+ 'limit': 200,
357
+ 'daysBack': None,
358
+ 'untilDays': None,
359
+ 'trigger': False,
360
+ 'trailing': False,
361
+ },
362
+ 'fetchClosedOrders': None, # todo: through fetchOrders "status" -1: Cancelled 0: Unfilled 1: Partially filled 2: Completely filled 3: Partially filled has been cancelled 4: Cancellation is being processed
363
+ 'fetchOHLCV': {
364
+ 'limit': 2000,
365
+ },
366
+ },
367
+ 'spot': {
368
+ 'extends': 'default',
369
+ },
370
+ 'swap': {
371
+ 'linear': {
372
+ 'extends': 'default',
373
+ },
374
+ 'inverse': None,
375
+ },
376
+ 'future': {
377
+ 'linear': None,
378
+ 'inverse': None,
379
+ },
380
+ },
308
381
  })
309
382
 
310
383
  def fetch_time(self, params={}):
311
384
  """
312
385
  fetches the current integer timestamp in milliseconds from the exchange server
313
- :see: https://www.lbank.com/en-US/docs/index.html#get-timestamp
314
- :see: https://www.lbank.com/en-US/docs/contract.html#get-the-current-time
386
+
387
+ https://www.lbank.com/en-US/docs/index.html#get-timestamp
388
+ https://www.lbank.com/en-US/docs/contract.html#get-the-current-time
389
+
315
390
  :param dict [params]: extra parameters specific to the exchange API endpoint
316
391
  :returns int: the current integer timestamp in milliseconds from the exchange server
317
392
  """
@@ -344,11 +419,13 @@ class lbank(Exchange, ImplicitAPI):
344
419
  #
345
420
  return self.safe_integer(response, 'data')
346
421
 
347
- def fetch_markets(self, params={}):
422
+ def fetch_markets(self, params={}) -> List[Market]:
348
423
  """
349
424
  retrieves data on all markets for lbank
350
- :see: https://www.lbank.com/en-US/docs/index.html#trading-pairs
351
- :see: https://www.lbank.com/en-US/docs/contract.html#query-contract-information-list
425
+
426
+ https://www.lbank.com/en-US/docs/index.html#trading-pairs
427
+ https://www.lbank.com/en-US/docs/contract.html#query-contract-information-list
428
+
352
429
  :param dict [params]: extra parameters specific to the exchange API endpoint
353
430
  :returns dict[]: an array of objects representing market data
354
431
  """
@@ -439,7 +516,7 @@ class lbank(Exchange, ImplicitAPI):
439
516
  return result
440
517
 
441
518
  def fetch_swap_markets(self, params={}):
442
- request = {
519
+ request: dict = {
443
520
  'productGroup': 'SwapU',
444
521
  }
445
522
  response = self.contractPublicGetCfdOpenApiV1PubInstrument(self.extend(request, params))
@@ -534,7 +611,7 @@ class lbank(Exchange, ImplicitAPI):
534
611
  })
535
612
  return result
536
613
 
537
- def parse_ticker(self, ticker, market: Market = None) -> Ticker:
614
+ def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
538
615
  #
539
616
  # spot: fetchTicker, fetchTickers
540
617
  #
@@ -597,7 +674,9 @@ class lbank(Exchange, ImplicitAPI):
597
674
  def fetch_ticker(self, symbol: str, params={}) -> Ticker:
598
675
  """
599
676
  fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
600
- :see: https://www.lbank.com/en-US/docs/index.html#query-current-market-data-new
677
+
678
+ https://www.lbank.com/en-US/docs/index.html#query-current-market-data-new
679
+
601
680
  :param str symbol: unified symbol of the market to fetch the ticker for
602
681
  :param dict [params]: extra parameters specific to the exchange API endpoint
603
682
  :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
@@ -607,7 +686,7 @@ class lbank(Exchange, ImplicitAPI):
607
686
  if market['swap']:
608
687
  responseForSwap = self.fetch_tickers([market['symbol']], params)
609
688
  return self.safe_value(responseForSwap, market['symbol'])
610
- request = {
689
+ request: dict = {
611
690
  'symbol': market['id'],
612
691
  }
613
692
  response = self.spotPublicGetTicker24hr(self.extend(request, params))
@@ -633,14 +712,16 @@ class lbank(Exchange, ImplicitAPI):
633
712
  # }
634
713
  #
635
714
  data = self.safe_value(response, 'data', [])
636
- first = self.safe_value(data, 0, {})
715
+ first = self.safe_dict(data, 0, {})
637
716
  return self.parse_ticker(first, market)
638
717
 
639
718
  def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
640
719
  """
641
720
  fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
642
- :see: https://www.lbank.com/en-US/docs/index.html#query-current-market-data-new
643
- :see: https://www.lbank.com/en-US/docs/contract.html#query-contract-market-list
721
+
722
+ https://www.lbank.com/en-US/docs/index.html#query-current-market-data-new
723
+ https://www.lbank.com/en-US/docs/contract.html#query-contract-market-list
724
+
644
725
  :param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
645
726
  :param dict [params]: extra parameters specific to the exchange API endpoint
646
727
  :returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
@@ -652,7 +733,7 @@ class lbank(Exchange, ImplicitAPI):
652
733
  symbolsLength = len(symbols)
653
734
  if symbolsLength > 0:
654
735
  market = self.market(symbols[0])
655
- request = {}
736
+ request: dict = {}
656
737
  type = None
657
738
  type, params = self.handle_market_type_and_params('fetchTickers', market, params)
658
739
  response = None
@@ -707,14 +788,16 @@ class lbank(Exchange, ImplicitAPI):
707
788
  # "success": True
708
789
  # }
709
790
  #
710
- data = self.safe_value(response, 'data', [])
791
+ data = self.safe_list(response, 'data', [])
711
792
  return self.parse_tickers(data, symbols)
712
793
 
713
794
  def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
714
795
  """
715
796
  fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
716
- :see: https://www.lbank.com/en-US/docs/index.html#query-market-depth
717
- :see: https://www.lbank.com/en-US/docs/contract.html#get-handicap
797
+
798
+ https://www.lbank.com/en-US/docs/index.html#query-market-depth
799
+ https://www.lbank.com/en-US/docs/contract.html#get-handicap
800
+
718
801
  :param str symbol: unified symbol of the market to fetch the order book for
719
802
  :param int [limit]: the maximum amount of order book entries to return
720
803
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -724,7 +807,7 @@ class lbank(Exchange, ImplicitAPI):
724
807
  market = self.market(symbol)
725
808
  if limit is None:
726
809
  limit = 60
727
- request = {
810
+ request: dict = {
728
811
  'symbol': market['id'],
729
812
  }
730
813
  type = None
@@ -790,7 +873,7 @@ class lbank(Exchange, ImplicitAPI):
790
873
  return self.parse_order_book(orderbook, market['symbol'], timestamp, 'bids', 'asks', 'price', 'volume')
791
874
  return self.parse_order_book(orderbook, market['symbol'], timestamp)
792
875
 
793
- def parse_trade(self, trade, market: Market = None) -> Trade:
876
+ def parse_trade(self, trade: dict, market: Market = None) -> Trade:
794
877
  #
795
878
  # fetchTrades(old) spotPublicGetTrades
796
879
  #
@@ -886,8 +969,10 @@ class lbank(Exchange, ImplicitAPI):
886
969
  def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
887
970
  """
888
971
  get the list of most recent trades for a particular symbol
889
- :see: https://www.lbank.com/en-US/docs/index.html#query-historical-transactions
890
- :see: https://www.lbank.com/en-US/docs/index.html#recent-transactions-list
972
+
973
+ https://www.lbank.com/en-US/docs/index.html#query-historical-transactions
974
+ https://www.lbank.com/en-US/docs/index.html#recent-transactions-list
975
+
891
976
  :param str symbol: unified symbol of the market to fetch trades for
892
977
  :param int [since]: timestamp in ms of the earliest trade to fetch
893
978
  :param int [limit]: the maximum amount of trades to fetch
@@ -896,7 +981,7 @@ class lbank(Exchange, ImplicitAPI):
896
981
  """
897
982
  self.load_markets()
898
983
  market = self.market(symbol)
899
- request = {
984
+ request: dict = {
900
985
  'symbol': market['id'],
901
986
  }
902
987
  if since is not None:
@@ -930,7 +1015,7 @@ class lbank(Exchange, ImplicitAPI):
930
1015
  # "ts":1647021999308
931
1016
  # }
932
1017
  #
933
- trades = self.safe_value(response, 'data', [])
1018
+ trades = self.safe_list(response, 'data', [])
934
1019
  return self.parse_trades(trades, market, since, limit)
935
1020
 
936
1021
  def parse_ohlcv(self, ohlcv, market: Market = None) -> list:
@@ -956,7 +1041,9 @@ class lbank(Exchange, ImplicitAPI):
956
1041
  def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
957
1042
  """
958
1043
  fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
959
- :see: https://www.lbank.com/en-US/docs/index.html#query-k-bar-data
1044
+
1045
+ https://www.lbank.com/en-US/docs/index.html#query-k-bar-data
1046
+
960
1047
  :param str symbol: unified symbol of the market to fetch OHLCV data for
961
1048
  :param str timeframe: the length of time each candle represents
962
1049
  :param int [since]: timestamp in ms of the earliest candle to fetch
@@ -969,17 +1056,19 @@ class lbank(Exchange, ImplicitAPI):
969
1056
  market = self.market(symbol)
970
1057
  if limit is None:
971
1058
  limit = 100
1059
+ else:
1060
+ limit = min(limit, 2000)
972
1061
  if since is None:
973
1062
  duration = self.parse_timeframe(timeframe)
974
- since = self.milliseconds() - duration * 1000 * limit
975
- request = {
1063
+ since = self.milliseconds() - (duration * 1000 * limit)
1064
+ request: dict = {
976
1065
  'symbol': market['id'],
977
1066
  'type': self.safe_string(self.timeframes, timeframe, timeframe),
978
1067
  'time': self.parse_to_int(since / 1000),
979
- 'size': limit, # max 2000
1068
+ 'size': min(limit + 1, 2000), # max 2000
980
1069
  }
981
1070
  response = self.spotPublicGetKline(self.extend(request, params))
982
- ohlcvs = self.safe_value(response, 'data', [])
1071
+ ohlcvs = self.safe_list(response, 'data', [])
983
1072
  #
984
1073
  #
985
1074
  # [
@@ -1082,7 +1171,7 @@ class lbank(Exchange, ImplicitAPI):
1082
1171
  # ]
1083
1172
  #
1084
1173
  timestamp = self.safe_integer(response, 'ts')
1085
- result = {
1174
+ result: dict = {
1086
1175
  'info': response,
1087
1176
  'timestamp': timestamp,
1088
1177
  'datetime': self.iso8601(timestamp),
@@ -1128,12 +1217,117 @@ class lbank(Exchange, ImplicitAPI):
1128
1217
  return self.safe_balance(result)
1129
1218
  return None
1130
1219
 
1220
+ def parse_funding_rate(self, ticker, market: Market = None) -> FundingRate:
1221
+ # {
1222
+ # "symbol": "BTCUSDT",
1223
+ # "highestPrice": "69495.5",
1224
+ # "underlyingPrice": "68455.904",
1225
+ # "lowestPrice": "68182.1",
1226
+ # "openPrice": "68762.4",
1227
+ # "positionFeeRate": "0.0001",
1228
+ # "volume": "33534.2858",
1229
+ # "markedPrice": "68434.1",
1230
+ # "turnover": "1200636218.210558",
1231
+ # "positionFeeTime": "28800",
1232
+ # "lastPrice": "68427.3",
1233
+ # "nextFeeTime": "1730736000000",
1234
+ # "fundingRate": "0.0001",
1235
+ # }
1236
+ marketId = self.safe_string(ticker, 'symbol')
1237
+ symbol = self.safe_symbol(marketId, market)
1238
+ markPrice = self.safe_number(ticker, 'markedPrice')
1239
+ indexPrice = self.safe_number(ticker, 'underlyingPrice')
1240
+ fundingRate = self.safe_number(ticker, 'fundingRate')
1241
+ fundingTime = self.safe_integer(ticker, 'nextFeeTime')
1242
+ positionFeeTime = self.safe_integer(ticker, 'positionFeeTime')
1243
+ intervalString = None
1244
+ if positionFeeTime is not None:
1245
+ interval = self.parse_to_int(positionFeeTime / 60 / 60)
1246
+ intervalString = str(interval) + 'h'
1247
+ return {
1248
+ 'info': ticker,
1249
+ 'symbol': symbol,
1250
+ 'markPrice': markPrice,
1251
+ 'indexPrice': indexPrice,
1252
+ 'fundingRate': fundingRate,
1253
+ 'fundingTimestamp': fundingTime,
1254
+ 'fundingDatetime': self.iso8601(fundingTime),
1255
+ 'timestamp': None,
1256
+ 'datetime': None,
1257
+ 'nextFundingRate': None,
1258
+ 'nextFundingTimestamp': None,
1259
+ 'nextFundingDatetime': None,
1260
+ 'previousFundingRate': None,
1261
+ 'previousFundingTimestamp': None,
1262
+ 'previousFundingDatetime': None,
1263
+ 'interval': intervalString,
1264
+ }
1265
+
1266
+ def fetch_funding_rate(self, symbol: str, params={}) -> FundingRate:
1267
+ """
1268
+ fetch the current funding rate
1269
+
1270
+ https://www.lbank.com/en-US/docs/contract.html#query-contract-market-list
1271
+
1272
+ :param str symbol: unified market symbol
1273
+ :param dict [params]: extra parameters specific to the exchange API endpoint
1274
+ :returns dict: a `funding rate structure <https://docs.ccxt.com/#/?id=funding-rate-structure>`
1275
+ """
1276
+ self.load_markets()
1277
+ market = self.market(symbol)
1278
+ responseForSwap = self.fetch_funding_rates([market['symbol']], params)
1279
+ return self.safe_value(responseForSwap, market['symbol'])
1280
+
1281
+ def fetch_funding_rates(self, symbols: Strings = None, params={}) -> FundingRates:
1282
+ """
1283
+ fetch the funding rate for multiple markets
1284
+
1285
+ https://www.lbank.com/en-US/docs/contract.html#query-contract-market-list
1286
+
1287
+ :param str[]|None symbols: list of unified market symbols
1288
+ :param dict [params]: extra parameters specific to the exchange API endpoint
1289
+ :returns dict: a dictionary of `funding rate structures <https://docs.ccxt.com/#/?id=funding-rates-structure>`, indexed by market symbols
1290
+ """
1291
+ self.load_markets()
1292
+ symbols = self.market_symbols(symbols)
1293
+ request: dict = {
1294
+ 'productGroup': 'SwapU',
1295
+ }
1296
+ response = self.contractPublicGetCfdOpenApiV1PubMarketData(self.extend(request, params))
1297
+ # {
1298
+ # "data": [
1299
+ # {
1300
+ # "symbol": "BTCUSDT",
1301
+ # "highestPrice": "69495.5",
1302
+ # "underlyingPrice": "68455.904",
1303
+ # "lowestPrice": "68182.1",
1304
+ # "openPrice": "68762.4",
1305
+ # "positionFeeRate": "0.0001",
1306
+ # "volume": "33534.2858",
1307
+ # "markedPrice": "68434.1",
1308
+ # "turnover": "1200636218.210558",
1309
+ # "positionFeeTime": "28800",
1310
+ # "lastPrice": "68427.3",
1311
+ # "nextFeeTime": "1730736000000",
1312
+ # "fundingRate": "0.0001",
1313
+ # }
1314
+ # ],
1315
+ # "error_code": "0",
1316
+ # "msg": "Success",
1317
+ # "result": "true",
1318
+ # "success": True,
1319
+ # }
1320
+ data = self.safe_list(response, 'data', [])
1321
+ return self.parse_funding_rates(data, symbols)
1322
+
1131
1323
  def fetch_balance(self, params={}) -> Balances:
1132
1324
  """
1133
1325
  query for balance and get the amount of funds available for trading or funds locked in orders
1134
- :see: https://www.lbank.com/en-US/docs/index.html#asset-information
1135
- :see: https://www.lbank.com/en-US/docs/index.html#account-information
1136
- :see: https://www.lbank.com/en-US/docs/index.html#get-all-coins-information
1326
+
1327
+ https://www.lbank.com/en-US/docs/index.html#asset-information
1328
+ https://www.lbank.com/en-US/docs/index.html#account-information
1329
+ https://www.lbank.com/en-US/docs/index.html#get-all-coins-information
1330
+
1137
1331
  :param dict [params]: extra parameters specific to the exchange API endpoint
1138
1332
  :returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
1139
1333
  """
@@ -1180,7 +1374,7 @@ class lbank(Exchange, ImplicitAPI):
1180
1374
  #
1181
1375
  return self.parse_balance(response)
1182
1376
 
1183
- def parse_trading_fee(self, fee, market: Market = None):
1377
+ def parse_trading_fee(self, fee: dict, market: Market = None) -> TradingFeeInterface:
1184
1378
  #
1185
1379
  # {
1186
1380
  # "symbol":"skt_usdt",
@@ -1195,32 +1389,38 @@ class lbank(Exchange, ImplicitAPI):
1195
1389
  'symbol': symbol,
1196
1390
  'maker': self.safe_number(fee, 'makerCommission'),
1197
1391
  'taker': self.safe_number(fee, 'takerCommission'),
1392
+ 'percentage': None,
1393
+ 'tierBased': None,
1198
1394
  }
1199
1395
 
1200
- def fetch_trading_fee(self, symbol: str, params={}):
1396
+ def fetch_trading_fee(self, symbol: str, params={}) -> TradingFeeInterface:
1201
1397
  """
1202
1398
  fetch the trading fees for a market
1203
- :see: https://www.lbank.com/en-US/docs/index.html#transaction-fee-rate-query
1399
+
1400
+ https://www.lbank.com/en-US/docs/index.html#transaction-fee-rate-query
1401
+
1204
1402
  :param str symbol: unified market symbol
1205
1403
  :param dict [params]: extra parameters specific to the exchange API endpoint
1206
1404
  :returns dict: a `fee structure <https://docs.ccxt.com/#/?id=fee-structure>`
1207
1405
  """
1208
1406
  market = self.market(symbol)
1209
1407
  result = self.fetch_trading_fees(self.extend(params, {'category': market['id']}))
1210
- return result
1408
+ return self.safe_dict(result, symbol)
1211
1409
 
1212
- def fetch_trading_fees(self, params={}):
1410
+ def fetch_trading_fees(self, params={}) -> TradingFees:
1213
1411
  """
1214
1412
  fetch the trading fees for multiple markets
1215
- :see: https://www.lbank.com/en-US/docs/index.html#transaction-fee-rate-query
1413
+
1414
+ https://www.lbank.com/en-US/docs/index.html#transaction-fee-rate-query
1415
+
1216
1416
  :param dict [params]: extra parameters specific to the exchange API endpoint
1217
1417
  :returns dict: a dictionary of `fee structures <https://docs.ccxt.com/#/?id=fee-structure>` indexed by market symbols
1218
1418
  """
1219
1419
  self.load_markets()
1220
- request = {}
1420
+ request: dict = {}
1221
1421
  response = self.spotPrivatePostSupplementCustomerTradeFee(self.extend(request, params))
1222
1422
  fees = self.safe_value(response, 'data', [])
1223
- result = {}
1423
+ result: dict = {}
1224
1424
  for i in range(0, len(fees)):
1225
1425
  fee = self.parse_trading_fee(fees[i])
1226
1426
  symbol = fee['symbol']
@@ -1230,8 +1430,10 @@ class lbank(Exchange, ImplicitAPI):
1230
1430
  def create_market_buy_order_with_cost(self, symbol: str, cost: float, params={}):
1231
1431
  """
1232
1432
  create a market buy order by providing the symbol and cost
1233
- :see: https://www.lbank.com/en-US/docs/index.html#place-order
1234
- :see: https://www.lbank.com/en-US/docs/index.html#place-an-order
1433
+
1434
+ https://www.lbank.com/en-US/docs/index.html#place-order
1435
+ https://www.lbank.com/en-US/docs/index.html#place-an-order
1436
+
1235
1437
  :param str symbol: unified symbol of the market to create an order in
1236
1438
  :param float cost: how much you want to trade in units of the quote currency
1237
1439
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -1247,13 +1449,15 @@ class lbank(Exchange, ImplicitAPI):
1247
1449
  def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
1248
1450
  """
1249
1451
  create a trade order
1250
- :see: https://www.lbank.com/en-US/docs/index.html#place-order
1251
- :see: https://www.lbank.com/en-US/docs/index.html#place-an-order
1452
+
1453
+ https://www.lbank.com/en-US/docs/index.html#place-order
1454
+ https://www.lbank.com/en-US/docs/index.html#place-an-order
1455
+
1252
1456
  :param str symbol: unified symbol of the market to create an order in
1253
1457
  :param str type: 'market' or 'limit'
1254
1458
  :param str side: 'buy' or 'sell'
1255
1459
  :param float amount: how much of currency you want to trade in units of base currency
1256
- :param float [price]: the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders
1460
+ :param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
1257
1461
  :param dict [params]: extra parameters specific to the exchange API endpoint
1258
1462
  :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
1259
1463
  """
@@ -1263,7 +1467,7 @@ class lbank(Exchange, ImplicitAPI):
1263
1467
  postOnly = self.safe_bool(params, 'postOnly', False)
1264
1468
  timeInForce = self.safe_string_upper(params, 'timeInForce')
1265
1469
  params = self.omit(params, ['custom_id', 'clientOrderId', 'timeInForce', 'postOnly'])
1266
- request = {
1470
+ request: dict = {
1267
1471
  'symbol': market['id'],
1268
1472
  }
1269
1473
  ioc = (timeInForce == 'IOC')
@@ -1334,8 +1538,8 @@ class lbank(Exchange, ImplicitAPI):
1334
1538
  'info': result,
1335
1539
  }, market)
1336
1540
 
1337
- def parse_order_status(self, status):
1338
- statuses = {
1541
+ def parse_order_status(self, status: Str):
1542
+ statuses: dict = {
1339
1543
  '-1': 'canceled', # canceled
1340
1544
  '0': 'open', # not traded
1341
1545
  '1': 'open', # partial deal
@@ -1345,7 +1549,7 @@ class lbank(Exchange, ImplicitAPI):
1345
1549
  }
1346
1550
  return self.safe_string(statuses, status, status)
1347
1551
 
1348
- def parse_order(self, order, market: Market = None) -> Order:
1552
+ def parse_order(self, order: dict, market: Market = None) -> Order:
1349
1553
  #
1350
1554
  # fetchOrderSupplement(private)
1351
1555
  #
@@ -1412,6 +1616,27 @@ class lbank(Exchange, ImplicitAPI):
1412
1616
  # "status":-1
1413
1617
  # }
1414
1618
  #
1619
+ # cancelOrder
1620
+ #
1621
+ # {
1622
+ # "executedQty":0.0,
1623
+ # "price":0.05,
1624
+ # "origQty":100.0,
1625
+ # "tradeType":"buy",
1626
+ # "status":0
1627
+ # }
1628
+ #
1629
+ # cancelAllOrders
1630
+ #
1631
+ # {
1632
+ # "executedQty":0.00000000000000000000,
1633
+ # "orderId":"293ef71b-3e67-4962-af93-aa06990a045f",
1634
+ # "price":0.05000000000000000000,
1635
+ # "origQty":100.00000000000000000000,
1636
+ # "tradeType":"buy",
1637
+ # "status":0
1638
+ # }
1639
+ #
1415
1640
  id = self.safe_string_2(order, 'orderId', 'order_id')
1416
1641
  clientOrderId = self.safe_string_2(order, 'clientOrderId', 'custom_id')
1417
1642
  timestamp = self.safe_integer_2(order, 'time', 'create_time')
@@ -1421,7 +1646,7 @@ class lbank(Exchange, ImplicitAPI):
1421
1646
  timeInForce = None
1422
1647
  postOnly = False
1423
1648
  type = 'limit'
1424
- rawType = self.safe_string(order, 'type') # buy, sell, buy_market, sell_market, buy_maker,sell_maker,buy_ioc,sell_ioc, buy_fok, sell_fok
1649
+ rawType = self.safe_string_2(order, 'type', 'tradeType') # buy, sell, buy_market, sell_market, buy_maker,sell_maker,buy_ioc,sell_ioc, buy_fok, sell_fok
1425
1650
  parts = rawType.split('_')
1426
1651
  side = self.safe_string(parts, 0)
1427
1652
  typePart = self.safe_string(parts, 1) # market, maker, ioc, fok or None(limit)
@@ -1453,7 +1678,6 @@ class lbank(Exchange, ImplicitAPI):
1453
1678
  'postOnly': postOnly,
1454
1679
  'side': side,
1455
1680
  'price': price,
1456
- 'stopPrice': None,
1457
1681
  'triggerPrice': None,
1458
1682
  'cost': costString,
1459
1683
  'amount': amountString,
@@ -1468,8 +1692,11 @@ class lbank(Exchange, ImplicitAPI):
1468
1692
  def fetch_order(self, id: str, symbol: Str = None, params={}):
1469
1693
  """
1470
1694
  fetches information on an order made by the user
1471
- :see: https://www.lbank.com/en-US/docs/index.html#query-order
1472
- :see: https://www.lbank.com/en-US/docs/index.html#query-order-new
1695
+
1696
+ https://www.lbank.com/en-US/docs/index.html#query-order
1697
+ https://www.lbank.com/en-US/docs/index.html#query-order-new
1698
+
1699
+ :param str id: order id
1473
1700
  :param str symbol: unified symbol of the market the order was made in
1474
1701
  :param dict [params]: extra parameters specific to the exchange API endpoint
1475
1702
  :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
@@ -1488,7 +1715,7 @@ class lbank(Exchange, ImplicitAPI):
1488
1715
  raise ArgumentsRequired(self.id + ' fetchOrder() requires a symbol argument')
1489
1716
  self.load_markets()
1490
1717
  market = self.market(symbol)
1491
- request = {
1718
+ request: dict = {
1492
1719
  'symbol': market['id'],
1493
1720
  'orderId': id,
1494
1721
  }
@@ -1514,7 +1741,7 @@ class lbank(Exchange, ImplicitAPI):
1514
1741
  # "ts":1648164471827
1515
1742
  # }
1516
1743
  #
1517
- result = self.safe_value(response, 'data', {})
1744
+ result = self.safe_dict(response, 'data', {})
1518
1745
  return self.parse_order(result)
1519
1746
 
1520
1747
  def fetch_order_default(self, id: str, symbol: Str = None, params={}):
@@ -1523,7 +1750,7 @@ class lbank(Exchange, ImplicitAPI):
1523
1750
  raise ArgumentsRequired(self.id + ' fetchOrder() requires a symbol argument')
1524
1751
  self.load_markets()
1525
1752
  market = self.market(symbol)
1526
- request = {
1753
+ request: dict = {
1527
1754
  'symbol': market['id'],
1528
1755
  'order_id': id,
1529
1756
  }
@@ -1564,7 +1791,9 @@ class lbank(Exchange, ImplicitAPI):
1564
1791
  def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
1565
1792
  """
1566
1793
  fetch all trades made by the user
1567
- :see: https://www.lbank.com/en-US/docs/index.html#past-transaction-details
1794
+
1795
+ https://www.lbank.com/en-US/docs/index.html#past-transaction-details
1796
+
1568
1797
  :param str symbol: unified market symbol
1569
1798
  :param int [since]: the earliest time in ms to fetch trades for
1570
1799
  :param int [limit]: the maximum number of trade structures to retrieve
@@ -1577,7 +1806,7 @@ class lbank(Exchange, ImplicitAPI):
1577
1806
  market = self.market(symbol)
1578
1807
  since = self.safe_value(params, 'start_date', since)
1579
1808
  params = self.omit(params, 'start_date')
1580
- request = {
1809
+ request: dict = {
1581
1810
  'symbol': market['id'],
1582
1811
  # 'start_date' Start time yyyy-mm-dd, the maximum is today, the default is yesterday
1583
1812
  # 'end_date' Finish time yyyy-mm-dd, the maximum is today, the default is today
@@ -1612,13 +1841,15 @@ class lbank(Exchange, ImplicitAPI):
1612
1841
  # "ts":1648509742164
1613
1842
  # }
1614
1843
  #
1615
- trades = self.safe_value(response, 'data', [])
1844
+ trades = self.safe_list(response, 'data', [])
1616
1845
  return self.parse_trades(trades, market, since, limit)
1617
1846
 
1618
1847
  def fetch_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
1619
1848
  """
1620
1849
  fetches information on multiple orders made by the user
1621
- :see: https://www.lbank.com/en-US/docs/index.html#query-all-orders
1850
+
1851
+ https://www.lbank.com/en-US/docs/index.html#query-all-orders
1852
+
1622
1853
  :param str symbol: unified market symbol of the market orders were made in
1623
1854
  :param int [since]: the earliest time in ms to fetch orders for
1624
1855
  :param int [limit]: the maximum number of order structures to retrieve
@@ -1633,7 +1864,7 @@ class lbank(Exchange, ImplicitAPI):
1633
1864
  market = self.market(symbol)
1634
1865
  if limit is None:
1635
1866
  limit = 100
1636
- request = {
1867
+ request: dict = {
1637
1868
  'symbol': market['id'],
1638
1869
  'current_page': 1,
1639
1870
  'page_length': limit,
@@ -1668,13 +1899,15 @@ class lbank(Exchange, ImplicitAPI):
1668
1899
  # }
1669
1900
  #
1670
1901
  result = self.safe_value(response, 'data', {})
1671
- orders = self.safe_value(result, 'orders', [])
1902
+ orders = self.safe_list(result, 'orders', [])
1672
1903
  return self.parse_orders(orders, market, since, limit)
1673
1904
 
1674
1905
  def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
1675
1906
  """
1676
1907
  fetch all unfilled currently open orders
1677
- :see: https://www.lbank.com/en-US/docs/index.html#current-pending-order
1908
+
1909
+ https://www.lbank.com/en-US/docs/index.html#current-pending-order
1910
+
1678
1911
  :param str symbol: unified market symbol
1679
1912
  :param int [since]: the earliest time in ms to fetch open orders for
1680
1913
  :param int [limit]: the maximum number of open order structures to retrieve
@@ -1687,7 +1920,7 @@ class lbank(Exchange, ImplicitAPI):
1687
1920
  market = self.market(symbol)
1688
1921
  if limit is None:
1689
1922
  limit = 100
1690
- request = {
1923
+ request: dict = {
1691
1924
  'symbol': market['id'],
1692
1925
  'current_page': 1,
1693
1926
  'page_length': limit,
@@ -1721,13 +1954,15 @@ class lbank(Exchange, ImplicitAPI):
1721
1954
  # }
1722
1955
  #
1723
1956
  result = self.safe_value(response, 'data', {})
1724
- orders = self.safe_value(result, 'orders', [])
1957
+ orders = self.safe_list(result, 'orders', [])
1725
1958
  return self.parse_orders(orders, market, since, limit)
1726
1959
 
1727
1960
  def cancel_order(self, id: str, symbol: Str = None, params={}):
1728
1961
  """
1729
1962
  cancels an open order
1730
- :see: https://www.lbank.com/en-US/docs/index.html#cancel-order-new
1963
+
1964
+ https://www.lbank.com/en-US/docs/index.html#cancel-order-new
1965
+
1731
1966
  :param str id: order id
1732
1967
  :param str symbol: unified symbol of the market the order was made in
1733
1968
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -1739,7 +1974,7 @@ class lbank(Exchange, ImplicitAPI):
1739
1974
  clientOrderId = self.safe_string_2(params, 'origClientOrderId', 'clientOrderId')
1740
1975
  params = self.omit(params, ['origClientOrderId', 'clientOrderId'])
1741
1976
  market = self.market(symbol)
1742
- request = {
1977
+ request: dict = {
1743
1978
  'symbol': market['id'],
1744
1979
  'orderId': id,
1745
1980
  }
@@ -1755,17 +1990,19 @@ class lbank(Exchange, ImplicitAPI):
1755
1990
  # "origQty":100.0,
1756
1991
  # "tradeType":"buy",
1757
1992
  # "status":0
1758
- # },
1993
+ # },
1759
1994
  # "error_code":0,
1760
1995
  # "ts":1648501286196
1761
1996
  # }
1762
- result = self.safe_value(response, 'data', {})
1763
- return result
1997
+ data = self.safe_dict(response, 'data', {})
1998
+ return self.parse_order(data)
1764
1999
 
1765
2000
  def cancel_all_orders(self, symbol: Str = None, params={}):
1766
2001
  """
1767
2002
  cancel all open orders in a market
1768
- :see: https://www.lbank.com/en-US/docs/index.html#cancel-all-pending-orders-for-a-single-trading-pair
2003
+
2004
+ https://www.lbank.com/en-US/docs/index.html#cancel-all-pending-orders-for-a-single-trading-pair
2005
+
1769
2006
  :param str symbol: unified market symbol of the market to cancel orders in
1770
2007
  :param dict [params]: extra parameters specific to the exchange API endpoint
1771
2008
  :returns dict[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
@@ -1774,7 +2011,7 @@ class lbank(Exchange, ImplicitAPI):
1774
2011
  raise ArgumentsRequired(self.id + ' cancelAllOrders() requires a symbol argument')
1775
2012
  self.load_markets()
1776
2013
  market = self.market(symbol)
1777
- request = {
2014
+ request: dict = {
1778
2015
  'symbol': market['id'],
1779
2016
  }
1780
2017
  response = self.spotPrivatePostSupplementCancelOrderBySymbol(self.extend(request, params))
@@ -1795,8 +2032,8 @@ class lbank(Exchange, ImplicitAPI):
1795
2032
  # "ts":1648506641469
1796
2033
  # }
1797
2034
  #
1798
- result = self.safe_value(response, 'data', [])
1799
- return result
2035
+ data = self.safe_list(response, 'data', [])
2036
+ return self.parse_orders(data)
1800
2037
 
1801
2038
  def get_network_code_for_currency(self, currencyCode, params):
1802
2039
  defaultNetworks = self.safe_value(self.options, 'defaultNetworks')
@@ -1806,11 +2043,13 @@ class lbank(Exchange, ImplicitAPI):
1806
2043
  network = self.safe_string(networks, network, network) # handle ERC20>ETH alias
1807
2044
  return network
1808
2045
 
1809
- def fetch_deposit_address(self, code: str, params={}):
2046
+ def fetch_deposit_address(self, code: str, params={}) -> DepositAddress:
1810
2047
  """
1811
2048
  fetch the deposit address for a currency associated with self account
1812
- :see: https://www.lbank.com/en-US/docs/index.html#get-deposit-address
1813
- :see: https://www.lbank.com/en-US/docs/index.html#the-user-obtains-the-deposit-address
2049
+
2050
+ https://www.lbank.com/en-US/docs/index.html#get-deposit-address
2051
+ https://www.lbank.com/en-US/docs/index.html#the-user-obtains-the-deposit-address
2052
+
1814
2053
  :param str code: unified currency code
1815
2054
  :param dict [params]: extra parameters specific to the exchange API endpoint
1816
2055
  :returns dict: an `address structure <https://docs.ccxt.com/#/?id=address-structure>`
@@ -1827,10 +2066,10 @@ class lbank(Exchange, ImplicitAPI):
1827
2066
  response = self.fetch_deposit_address_default(code, params)
1828
2067
  return response
1829
2068
 
1830
- def fetch_deposit_address_default(self, code: str, params={}):
2069
+ def fetch_deposit_address_default(self, code: str, params={}) -> DepositAddress:
1831
2070
  self.load_markets()
1832
2071
  currency = self.currency(code)
1833
- request = {
2072
+ request: dict = {
1834
2073
  'assetCode': currency['id'],
1835
2074
  }
1836
2075
  network = self.get_network_code_for_currency(code, params)
@@ -1858,18 +2097,18 @@ class lbank(Exchange, ImplicitAPI):
1858
2097
  inverseNetworks = self.safe_value(self.options, 'inverse-networks', {})
1859
2098
  networkCode = self.safe_string_upper(inverseNetworks, networkId, networkId)
1860
2099
  return {
2100
+ 'info': response,
1861
2101
  'currency': code,
2102
+ 'network': networkCode,
1862
2103
  'address': address,
1863
2104
  'tag': tag,
1864
- 'network': networkCode,
1865
- 'info': response,
1866
2105
  }
1867
2106
 
1868
- def fetch_deposit_address_supplement(self, code: str, params={}):
2107
+ def fetch_deposit_address_supplement(self, code: str, params={}) -> DepositAddress:
1869
2108
  # returns the address for whatever the default network is...
1870
2109
  self.load_markets()
1871
2110
  currency = self.currency(code)
1872
- request = {
2111
+ request: dict = {
1873
2112
  'coin': currency['id'],
1874
2113
  }
1875
2114
  networks = self.safe_value(self.options, 'networks')
@@ -1897,17 +2136,19 @@ class lbank(Exchange, ImplicitAPI):
1897
2136
  inverseNetworks = self.safe_value(self.options, 'inverse-networks', {})
1898
2137
  networkCode = self.safe_string_upper(inverseNetworks, network, network)
1899
2138
  return {
2139
+ 'info': response,
1900
2140
  'currency': code,
2141
+ 'network': networkCode, # will be None if not specified in request
1901
2142
  'address': address,
1902
2143
  'tag': tag,
1903
- 'network': networkCode, # will be None if not specified in request
1904
- 'info': response,
1905
2144
  }
1906
2145
 
1907
- def withdraw(self, code: str, amount: float, address, tag=None, params={}) -> Transaction:
2146
+ def withdraw(self, code: str, amount: float, address: str, tag=None, params={}) -> Transaction:
1908
2147
  """
1909
2148
  make a withdrawal
1910
- :see: https://www.lbank.com/en-US/docs/index.html#withdrawal
2149
+
2150
+ https://www.lbank.com/en-US/docs/index.html#withdrawal
2151
+
1911
2152
  :param str code: unified currency code
1912
2153
  :param float amount: the amount to withdraw
1913
2154
  :param str address: the address to withdraw to
@@ -1923,7 +2164,7 @@ class lbank(Exchange, ImplicitAPI):
1923
2164
  # The relevant coin network fee can be found by calling fetchDepositWithdrawFees(), note: if no network param is supplied then the default network will be used, self can also be found in fetchDepositWithdrawFees().
1924
2165
  self.check_required_argument('withdraw', fee, 'fee')
1925
2166
  currency = self.currency(code)
1926
- request = {
2167
+ request: dict = {
1927
2168
  'address': address,
1928
2169
  'coin': currency['id'],
1929
2170
  'amount': amount,
@@ -1962,7 +2203,7 @@ class lbank(Exchange, ImplicitAPI):
1962
2203
  }
1963
2204
 
1964
2205
  def parse_transaction_status(self, status, type):
1965
- statuses = {
2206
+ statuses: dict = {
1966
2207
  'deposit': {
1967
2208
  '1': 'pending',
1968
2209
  '2': 'ok',
@@ -1979,7 +2220,7 @@ class lbank(Exchange, ImplicitAPI):
1979
2220
  }
1980
2221
  return self.safe_string(self.safe_value(statuses, type, {}), status, status)
1981
2222
 
1982
- def parse_transaction(self, transaction, currency: Currency = None) -> Transaction:
2223
+ def parse_transaction(self, transaction: dict, currency: Currency = None) -> Transaction:
1983
2224
  #
1984
2225
  # fetchDeposits(private)
1985
2226
  #
@@ -2064,7 +2305,9 @@ class lbank(Exchange, ImplicitAPI):
2064
2305
  def fetch_deposits(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
2065
2306
  """
2066
2307
  fetch all deposits made to an account
2067
- :see: https://www.lbank.com/en-US/docs/index.html#get-recharge-history
2308
+
2309
+ https://www.lbank.com/en-US/docs/index.html#get-recharge-history
2310
+
2068
2311
  :param str code: unified currency code
2069
2312
  :param int [since]: the earliest time in ms to fetch deposits for
2070
2313
  :param int [limit]: the maximum number of deposits structures to retrieve
@@ -2072,7 +2315,7 @@ class lbank(Exchange, ImplicitAPI):
2072
2315
  :returns dict[]: a list of `transaction structures <https://docs.ccxt.com/#/?id=transaction-structure>`
2073
2316
  """
2074
2317
  self.load_markets()
2075
- request = {
2318
+ request: dict = {
2076
2319
  # 'status': Recharge status: ("1","Applying"),("2","Recharge successful"),("3","Recharge failed"),("4","Already Cancel"),("5", "Transfer")
2077
2320
  # 'endTime': end time, timestamp in milliseconds, default now
2078
2321
  }
@@ -2107,13 +2350,15 @@ class lbank(Exchange, ImplicitAPI):
2107
2350
  # }
2108
2351
  #
2109
2352
  data = self.safe_value(response, 'data', {})
2110
- deposits = self.safe_value(data, 'depositOrders', [])
2353
+ deposits = self.safe_list(data, 'depositOrders', [])
2111
2354
  return self.parse_transactions(deposits, currency, since, limit)
2112
2355
 
2113
2356
  def fetch_withdrawals(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
2114
2357
  """
2115
2358
  fetch all withdrawals made from an account
2116
- :see: https://www.lbank.com/en-US/docs/index.html#get-withdrawal-history
2359
+
2360
+ https://www.lbank.com/en-US/docs/index.html#get-withdrawal-history
2361
+
2117
2362
  :param str code: unified currency code
2118
2363
  :param int [since]: the earliest time in ms to fetch withdrawals for
2119
2364
  :param int [limit]: the maximum number of withdrawals structures to retrieve
@@ -2121,7 +2366,7 @@ class lbank(Exchange, ImplicitAPI):
2121
2366
  :returns dict[]: a list of `transaction structures <https://docs.ccxt.com/#/?id=transaction-structure>`
2122
2367
  """
2123
2368
  self.load_markets()
2124
- request = {
2369
+ request: dict = {
2125
2370
  # 'status': Recharge status: ("1","Applying"),("2","Recharge successful"),("3","Recharge failed"),("4","Already Cancel"),("5", "Transfer")
2126
2371
  # 'endTime': end time, timestamp in milliseconds, default now
2127
2372
  # 'withdrawOrderId': Custom withdrawal id
@@ -2160,12 +2405,12 @@ class lbank(Exchange, ImplicitAPI):
2160
2405
  # }
2161
2406
  #
2162
2407
  data = self.safe_value(response, 'data', {})
2163
- withdraws = self.safe_value(data, 'withdraws', [])
2408
+ withdraws = self.safe_list(data, 'withdraws', [])
2164
2409
  return self.parse_transactions(withdraws, currency, since, limit)
2165
2410
 
2166
- def fetch_transaction_fees(self, codes: List[str] = None, params={}):
2411
+ def fetch_transaction_fees(self, codes: Strings = None, params={}):
2167
2412
  """
2168
- * @deprecated
2413
+ @deprecated
2169
2414
  please use fetchDepositWithdrawFees instead
2170
2415
  :param str[]|None codes: not used by lbank fetchTransactionFees()
2171
2416
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -2224,7 +2469,7 @@ class lbank(Exchange, ImplicitAPI):
2224
2469
  # }
2225
2470
  #
2226
2471
  result = self.safe_value(response, 'data', [])
2227
- withdrawFees = {}
2472
+ withdrawFees: dict = {}
2228
2473
  for i in range(0, len(result)):
2229
2474
  entry = result[i]
2230
2475
  currencyId = self.safe_string(entry, 'coin')
@@ -2250,7 +2495,7 @@ class lbank(Exchange, ImplicitAPI):
2250
2495
  self.load_markets()
2251
2496
  code = self.safe_string_2(params, 'coin', 'assetCode')
2252
2497
  params = self.omit(params, ['coin', 'assetCode'])
2253
- request = {}
2498
+ request: dict = {}
2254
2499
  if code is not None:
2255
2500
  currency = self.currency(code)
2256
2501
  request['assetCode'] = currency['id']
@@ -2277,7 +2522,7 @@ class lbank(Exchange, ImplicitAPI):
2277
2522
  # }
2278
2523
  #
2279
2524
  result = self.safe_value(response, 'data', [])
2280
- withdrawFees = {}
2525
+ withdrawFees: dict = {}
2281
2526
  for i in range(0, len(result)):
2282
2527
  item = result[i]
2283
2528
  canWithdraw = self.safe_value(item, 'canWithDraw')
@@ -2301,9 +2546,11 @@ class lbank(Exchange, ImplicitAPI):
2301
2546
  def fetch_deposit_withdraw_fees(self, codes: Strings = None, params={}):
2302
2547
  """
2303
2548
  when using private endpoint, only returns information for currencies with non-zero balance, use public method by specifying self.options['fetchDepositWithdrawFees']['method'] = 'fetchPublicDepositWithdrawFees'
2304
- :see: https://www.lbank.com/en-US/docs/index.html#get-all-coins-information
2305
- :see: https://www.lbank.com/en-US/docs/index.html#withdrawal-configurations
2306
- :param str[]|None codes: array of unified currency codes
2549
+
2550
+ https://www.lbank.com/en-US/docs/index.html#get-all-coins-information
2551
+ https://www.lbank.com/en-US/docs/index.html#withdrawal-configurations
2552
+
2553
+ :param str[] [codes]: array of unified currency codes
2307
2554
  :param dict [params]: extra parameters specific to the exchange API endpoint
2308
2555
  :returns dict: a list of `fee structures <https://docs.ccxt.com/#/?id=fee-structure>`
2309
2556
  """
@@ -2316,11 +2563,11 @@ class lbank(Exchange, ImplicitAPI):
2316
2563
  method = self.safe_string(params, 'method', defaultMethod)
2317
2564
  params = self.omit(params, 'method')
2318
2565
  if method == 'fetchPublicDepositWithdrawFees':
2319
- self.fetch_public_deposit_withdraw_fees(codes, params)
2566
+ response = self.fetch_public_deposit_withdraw_fees(codes, params)
2320
2567
  else:
2321
- self.fetch_private_deposit_withdraw_fees(codes, params)
2568
+ response = self.fetch_private_deposit_withdraw_fees(codes, params)
2322
2569
  else:
2323
- self.fetch_public_deposit_withdraw_fees(codes, params)
2570
+ response = self.fetch_public_deposit_withdraw_fees(codes, params)
2324
2571
  return response
2325
2572
 
2326
2573
  def fetch_private_deposit_withdraw_fees(self, codes=None, params={}):
@@ -2358,14 +2605,14 @@ class lbank(Exchange, ImplicitAPI):
2358
2605
  # "code": 0
2359
2606
  # }
2360
2607
  #
2361
- data = self.safe_value(response, 'data', [])
2608
+ data = self.safe_list(response, 'data', [])
2362
2609
  return self.parse_deposit_withdraw_fees(data, codes, 'coin')
2363
2610
 
2364
2611
  def fetch_public_deposit_withdraw_fees(self, codes=None, params={}):
2365
2612
  # extremely incomplete response
2366
2613
  # vast majority fees None
2367
2614
  self.load_markets()
2368
- request = {}
2615
+ request: dict = {}
2369
2616
  response = self.spotPublicGetWithdrawConfigs(self.extend(request, params))
2370
2617
  #
2371
2618
  # {
@@ -2408,7 +2655,7 @@ class lbank(Exchange, ImplicitAPI):
2408
2655
  # ...
2409
2656
  # ]
2410
2657
  #
2411
- result = {}
2658
+ result: dict = {}
2412
2659
  for i in range(0, len(response)):
2413
2660
  fee = response[i]
2414
2661
  canWithdraw = self.safe_value(fee, 'canWithDraw')
@@ -2563,7 +2810,7 @@ class lbank(Exchange, ImplicitAPI):
2563
2810
  pem += self.secret[start:end] + "\n" # eslint-disable-line
2564
2811
  return pem + '-----END PRIVATE KEY-----'
2565
2812
 
2566
- def handle_errors(self, httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody):
2813
+ def handle_errors(self, httpCode: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
2567
2814
  if response is None:
2568
2815
  return None
2569
2816
  success = self.safe_value(response, 'result')