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