ccxt 4.2.76__py2.py3-none-any.whl → 4.4.48__py2.py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (546) hide show
  1. ccxt/__init__.py +36 -14
  2. ccxt/abstract/alpaca.py +4 -0
  3. ccxt/abstract/bigone.py +1 -1
  4. ccxt/abstract/binance.py +112 -48
  5. ccxt/abstract/binancecoinm.py +112 -48
  6. ccxt/abstract/binanceus.py +147 -83
  7. ccxt/abstract/binanceusdm.py +112 -48
  8. ccxt/abstract/bingx.py +133 -78
  9. ccxt/abstract/bitbank.py +5 -0
  10. ccxt/abstract/bitfinex.py +136 -65
  11. ccxt/abstract/bitfinex1.py +69 -0
  12. ccxt/abstract/bitflyer.py +1 -0
  13. ccxt/abstract/bitget.py +8 -1
  14. ccxt/abstract/bitmart.py +13 -1
  15. ccxt/abstract/bitopro.py +1 -0
  16. ccxt/abstract/bitpanda.py +0 -12
  17. ccxt/abstract/bitrue.py +3 -3
  18. ccxt/abstract/bitstamp.py +26 -3
  19. ccxt/abstract/blofin.py +24 -0
  20. ccxt/abstract/btcbox.py +1 -0
  21. ccxt/abstract/bybit.py +29 -14
  22. ccxt/abstract/cex.py +28 -29
  23. ccxt/abstract/coinbase.py +6 -0
  24. ccxt/abstract/coinbaseadvanced.py +94 -0
  25. ccxt/abstract/{coinbasepro.py → coinbaseexchange.py} +1 -0
  26. ccxt/abstract/coinbaseinternational.py +1 -1
  27. ccxt/abstract/coincatch.py +94 -0
  28. ccxt/abstract/coinex.py +233 -123
  29. ccxt/abstract/coinmetro.py +1 -0
  30. ccxt/abstract/cryptocom.py +14 -0
  31. ccxt/abstract/defx.py +69 -0
  32. ccxt/abstract/deribit.py +1 -0
  33. ccxt/abstract/digifinex.py +1 -0
  34. ccxt/abstract/ellipx.py +25 -0
  35. ccxt/abstract/gate.py +20 -0
  36. ccxt/abstract/gateio.py +20 -0
  37. ccxt/abstract/gemini.py +1 -0
  38. ccxt/abstract/hashkey.py +67 -0
  39. ccxt/abstract/hyperliquid.py +1 -1
  40. ccxt/abstract/independentreserve.py +6 -0
  41. ccxt/abstract/kraken.py +4 -3
  42. ccxt/abstract/krakenfutures.py +4 -0
  43. ccxt/abstract/kucoin.py +25 -0
  44. ccxt/abstract/kucoinfutures.py +35 -0
  45. ccxt/abstract/luno.py +2 -0
  46. ccxt/abstract/mexc.py +4 -0
  47. ccxt/abstract/myokx.py +340 -0
  48. ccxt/abstract/oceanex.py +5 -0
  49. ccxt/abstract/okx.py +30 -0
  50. ccxt/abstract/onetrading.py +0 -12
  51. ccxt/abstract/oxfun.py +34 -0
  52. ccxt/abstract/paradex.py +40 -0
  53. ccxt/abstract/phemex.py +1 -0
  54. ccxt/abstract/upbit.py +4 -0
  55. ccxt/abstract/vertex.py +19 -0
  56. ccxt/abstract/whitebit.py +31 -1
  57. ccxt/abstract/woo.py +6 -2
  58. ccxt/abstract/woofipro.py +119 -0
  59. ccxt/abstract/xt.py +153 -0
  60. ccxt/abstract/zonda.py +6 -0
  61. ccxt/ace.py +164 -60
  62. ccxt/alpaca.py +727 -63
  63. ccxt/ascendex.py +395 -249
  64. ccxt/async_support/__init__.py +36 -14
  65. ccxt/async_support/ace.py +164 -60
  66. ccxt/async_support/alpaca.py +727 -63
  67. ccxt/async_support/ascendex.py +396 -249
  68. ccxt/async_support/base/exchange.py +531 -155
  69. ccxt/async_support/base/ws/aiohttp_client.py +28 -5
  70. ccxt/async_support/base/ws/cache.py +3 -2
  71. ccxt/async_support/base/ws/client.py +26 -5
  72. ccxt/async_support/base/ws/fast_client.py +4 -3
  73. ccxt/async_support/base/ws/functions.py +1 -1
  74. ccxt/async_support/base/ws/future.py +40 -31
  75. ccxt/async_support/base/ws/order_book_side.py +3 -0
  76. ccxt/async_support/bequant.py +1 -1
  77. ccxt/async_support/bigone.py +329 -202
  78. ccxt/async_support/binance.py +3513 -1511
  79. ccxt/async_support/binancecoinm.py +2 -1
  80. ccxt/async_support/binanceus.py +12 -1
  81. ccxt/async_support/binanceusdm.py +3 -1
  82. ccxt/async_support/bingx.py +3105 -881
  83. ccxt/async_support/bit2c.py +119 -38
  84. ccxt/async_support/bitbank.py +215 -76
  85. ccxt/async_support/bitbns.py +124 -53
  86. ccxt/async_support/bitfinex.py +3236 -1078
  87. ccxt/async_support/bitfinex1.py +1711 -0
  88. ccxt/async_support/bitflyer.py +239 -50
  89. ccxt/async_support/bitget.py +1513 -563
  90. ccxt/async_support/bithumb.py +201 -67
  91. ccxt/async_support/bitmart.py +1320 -435
  92. ccxt/async_support/bitmex.py +308 -111
  93. ccxt/async_support/bitopro.py +256 -96
  94. ccxt/async_support/bitrue.py +365 -233
  95. ccxt/async_support/bitso.py +201 -89
  96. ccxt/async_support/bitstamp.py +438 -269
  97. ccxt/async_support/bitteam.py +179 -73
  98. ccxt/async_support/bitvavo.py +180 -70
  99. ccxt/async_support/bl3p.py +92 -25
  100. ccxt/async_support/blockchaincom.py +193 -79
  101. ccxt/async_support/blofin.py +403 -150
  102. ccxt/async_support/btcalpha.py +161 -55
  103. ccxt/async_support/btcbox.py +250 -34
  104. ccxt/async_support/btcmarkets.py +232 -85
  105. ccxt/async_support/btcturk.py +159 -60
  106. ccxt/async_support/bybit.py +2326 -1255
  107. ccxt/async_support/cex.py +1409 -1329
  108. ccxt/async_support/coinbase.py +1455 -288
  109. ccxt/async_support/coinbaseadvanced.py +17 -0
  110. ccxt/async_support/{coinbasepro.py → coinbaseexchange.py} +233 -99
  111. ccxt/async_support/coinbaseinternational.py +428 -88
  112. ccxt/async_support/coincatch.py +5152 -0
  113. ccxt/async_support/coincheck.py +121 -38
  114. ccxt/async_support/coinex.py +4020 -3339
  115. ccxt/async_support/coinlist.py +273 -116
  116. ccxt/async_support/coinmate.py +204 -97
  117. ccxt/async_support/coinmetro.py +203 -110
  118. ccxt/async_support/coinone.py +142 -68
  119. ccxt/async_support/coinsph.py +206 -89
  120. ccxt/async_support/coinspot.py +137 -62
  121. ccxt/async_support/cryptocom.py +515 -185
  122. ccxt/async_support/currencycom.py +203 -85
  123. ccxt/async_support/defx.py +2066 -0
  124. ccxt/async_support/delta.py +467 -158
  125. ccxt/async_support/deribit.py +558 -324
  126. ccxt/async_support/digifinex.py +340 -223
  127. ccxt/async_support/ellipx.py +1826 -0
  128. ccxt/async_support/exmo.py +259 -128
  129. ccxt/async_support/gate.py +1473 -464
  130. ccxt/async_support/gemini.py +206 -84
  131. ccxt/async_support/hashkey.py +4164 -0
  132. ccxt/async_support/hitbtc.py +334 -178
  133. ccxt/async_support/hollaex.py +134 -83
  134. ccxt/async_support/htx.py +1095 -563
  135. ccxt/async_support/huobijp.py +105 -56
  136. ccxt/async_support/hyperliquid.py +1634 -269
  137. ccxt/async_support/idex.py +148 -95
  138. ccxt/async_support/independentreserve.py +236 -31
  139. ccxt/async_support/indodax.py +165 -62
  140. ccxt/async_support/kraken.py +871 -354
  141. ccxt/async_support/krakenfutures.py +324 -100
  142. ccxt/async_support/kucoin.py +1050 -355
  143. ccxt/async_support/kucoinfutures.py +1004 -149
  144. ccxt/async_support/kuna.py +138 -106
  145. ccxt/async_support/latoken.py +135 -79
  146. ccxt/async_support/lbank.py +290 -113
  147. ccxt/async_support/luno.py +112 -62
  148. ccxt/async_support/lykke.py +104 -55
  149. ccxt/async_support/mercado.py +36 -29
  150. ccxt/async_support/mexc.py +995 -429
  151. ccxt/async_support/myokx.py +43 -0
  152. ccxt/async_support/ndax.py +163 -82
  153. ccxt/async_support/novadax.py +121 -75
  154. ccxt/async_support/oceanex.py +175 -59
  155. ccxt/async_support/okcoin.py +222 -163
  156. ccxt/async_support/okx.py +1777 -455
  157. ccxt/async_support/onetrading.py +132 -414
  158. ccxt/async_support/oxfun.py +2832 -0
  159. ccxt/async_support/p2b.py +79 -51
  160. ccxt/async_support/paradex.py +2017 -0
  161. ccxt/async_support/paymium.py +56 -32
  162. ccxt/async_support/phemex.py +572 -196
  163. ccxt/async_support/poloniex.py +218 -95
  164. ccxt/async_support/poloniexfutures.py +260 -92
  165. ccxt/async_support/probit.py +143 -110
  166. ccxt/async_support/timex.py +123 -70
  167. ccxt/async_support/tokocrypto.py +129 -93
  168. ccxt/async_support/tradeogre.py +39 -25
  169. ccxt/async_support/upbit.py +322 -113
  170. ccxt/async_support/vertex.py +2983 -0
  171. ccxt/async_support/wavesexchange.py +227 -173
  172. ccxt/async_support/wazirx.py +145 -65
  173. ccxt/async_support/whitebit.py +533 -138
  174. ccxt/async_support/woo.py +1155 -295
  175. ccxt/async_support/woofipro.py +2716 -0
  176. ccxt/async_support/xt.py +4628 -0
  177. ccxt/async_support/yobit.py +160 -92
  178. ccxt/async_support/zaif.py +80 -33
  179. ccxt/async_support/zonda.py +140 -69
  180. ccxt/base/errors.py +51 -20
  181. ccxt/base/exchange.py +1729 -482
  182. ccxt/base/precise.py +10 -0
  183. ccxt/base/types.py +223 -4
  184. ccxt/bequant.py +1 -1
  185. ccxt/bigone.py +329 -202
  186. ccxt/binance.py +3513 -1511
  187. ccxt/binancecoinm.py +2 -1
  188. ccxt/binanceus.py +12 -1
  189. ccxt/binanceusdm.py +3 -1
  190. ccxt/bingx.py +3105 -881
  191. ccxt/bit2c.py +119 -38
  192. ccxt/bitbank.py +215 -76
  193. ccxt/bitbns.py +124 -53
  194. ccxt/bitfinex.py +3235 -1078
  195. ccxt/bitfinex1.py +1710 -0
  196. ccxt/bitflyer.py +239 -50
  197. ccxt/bitget.py +1513 -563
  198. ccxt/bithumb.py +200 -67
  199. ccxt/bitmart.py +1320 -435
  200. ccxt/bitmex.py +308 -111
  201. ccxt/bitopro.py +256 -96
  202. ccxt/bitrue.py +365 -233
  203. ccxt/bitso.py +201 -89
  204. ccxt/bitstamp.py +438 -269
  205. ccxt/bitteam.py +179 -73
  206. ccxt/bitvavo.py +180 -70
  207. ccxt/bl3p.py +92 -25
  208. ccxt/blockchaincom.py +193 -79
  209. ccxt/blofin.py +403 -150
  210. ccxt/btcalpha.py +161 -55
  211. ccxt/btcbox.py +250 -34
  212. ccxt/btcmarkets.py +232 -85
  213. ccxt/btcturk.py +159 -60
  214. ccxt/bybit.py +2326 -1255
  215. ccxt/cex.py +1408 -1329
  216. ccxt/coinbase.py +1455 -288
  217. ccxt/coinbaseadvanced.py +17 -0
  218. ccxt/{coinbasepro.py → coinbaseexchange.py} +233 -99
  219. ccxt/coinbaseinternational.py +428 -88
  220. ccxt/coincatch.py +5152 -0
  221. ccxt/coincheck.py +121 -38
  222. ccxt/coinex.py +4020 -3339
  223. ccxt/coinlist.py +273 -116
  224. ccxt/coinmate.py +204 -97
  225. ccxt/coinmetro.py +203 -110
  226. ccxt/coinone.py +142 -68
  227. ccxt/coinsph.py +206 -89
  228. ccxt/coinspot.py +137 -62
  229. ccxt/cryptocom.py +515 -185
  230. ccxt/currencycom.py +203 -85
  231. ccxt/defx.py +2065 -0
  232. ccxt/delta.py +467 -158
  233. ccxt/deribit.py +558 -324
  234. ccxt/digifinex.py +340 -223
  235. ccxt/ellipx.py +1826 -0
  236. ccxt/exmo.py +259 -128
  237. ccxt/gate.py +1473 -464
  238. ccxt/gemini.py +206 -84
  239. ccxt/hashkey.py +4164 -0
  240. ccxt/hitbtc.py +334 -178
  241. ccxt/hollaex.py +134 -83
  242. ccxt/htx.py +1095 -563
  243. ccxt/huobijp.py +105 -56
  244. ccxt/hyperliquid.py +1633 -269
  245. ccxt/idex.py +148 -95
  246. ccxt/independentreserve.py +235 -31
  247. ccxt/indodax.py +165 -62
  248. ccxt/kraken.py +871 -354
  249. ccxt/krakenfutures.py +324 -100
  250. ccxt/kucoin.py +1050 -355
  251. ccxt/kucoinfutures.py +1004 -149
  252. ccxt/kuna.py +138 -106
  253. ccxt/latoken.py +135 -79
  254. ccxt/lbank.py +290 -113
  255. ccxt/luno.py +112 -62
  256. ccxt/lykke.py +104 -55
  257. ccxt/mercado.py +36 -29
  258. ccxt/mexc.py +994 -429
  259. ccxt/myokx.py +43 -0
  260. ccxt/ndax.py +163 -82
  261. ccxt/novadax.py +121 -75
  262. ccxt/oceanex.py +175 -59
  263. ccxt/okcoin.py +222 -163
  264. ccxt/okx.py +1777 -455
  265. ccxt/onetrading.py +132 -414
  266. ccxt/oxfun.py +2831 -0
  267. ccxt/p2b.py +79 -51
  268. ccxt/paradex.py +2017 -0
  269. ccxt/paymium.py +56 -32
  270. ccxt/phemex.py +572 -196
  271. ccxt/poloniex.py +218 -95
  272. ccxt/poloniexfutures.py +260 -92
  273. ccxt/pro/__init__.py +29 -5
  274. ccxt/pro/alpaca.py +32 -17
  275. ccxt/pro/ascendex.py +63 -15
  276. ccxt/pro/bequant.py +4 -0
  277. ccxt/pro/binance.py +1596 -329
  278. ccxt/pro/binancecoinm.py +1 -0
  279. ccxt/pro/binanceus.py +2 -9
  280. ccxt/pro/binanceusdm.py +2 -0
  281. ccxt/pro/bingx.py +527 -134
  282. ccxt/pro/bitcoincom.py +4 -1
  283. ccxt/pro/bitfinex.py +731 -266
  284. ccxt/pro/bitfinex1.py +635 -0
  285. ccxt/pro/bitget.py +726 -357
  286. ccxt/pro/bithumb.py +380 -0
  287. ccxt/pro/bitmart.py +138 -39
  288. ccxt/pro/bitmex.py +199 -40
  289. ccxt/pro/bitopro.py +25 -13
  290. ccxt/pro/bitrue.py +31 -32
  291. ccxt/pro/bitstamp.py +7 -6
  292. ccxt/pro/bitvavo.py +204 -82
  293. ccxt/pro/blockchaincom.py +30 -17
  294. ccxt/pro/blofin.py +692 -0
  295. ccxt/pro/bybit.py +791 -82
  296. ccxt/pro/cex.py +99 -51
  297. ccxt/pro/coinbase.py +220 -30
  298. ccxt/{async_support/hitbtc3.py → pro/coinbaseadvanced.py} +5 -5
  299. ccxt/pro/{coinbasepro.py → coinbaseexchange.py} +19 -19
  300. ccxt/pro/coinbaseinternational.py +193 -30
  301. ccxt/pro/coincatch.py +1464 -0
  302. ccxt/pro/coincheck.py +11 -6
  303. ccxt/pro/coinex.py +967 -661
  304. ccxt/pro/coinone.py +17 -10
  305. ccxt/pro/cryptocom.py +446 -66
  306. ccxt/pro/currencycom.py +11 -10
  307. ccxt/pro/defx.py +832 -0
  308. ccxt/pro/deribit.py +168 -32
  309. ccxt/pro/exmo.py +253 -21
  310. ccxt/pro/gate.py +729 -64
  311. ccxt/pro/gemini.py +44 -26
  312. ccxt/pro/hashkey.py +802 -0
  313. ccxt/pro/hitbtc.py +208 -103
  314. ccxt/pro/hollaex.py +25 -9
  315. ccxt/pro/htx.py +83 -39
  316. ccxt/pro/huobijp.py +17 -16
  317. ccxt/pro/hyperliquid.py +502 -31
  318. ccxt/pro/idex.py +28 -13
  319. ccxt/pro/independentreserve.py +21 -16
  320. ccxt/pro/kraken.py +298 -51
  321. ccxt/pro/krakenfutures.py +166 -75
  322. ccxt/pro/kucoin.py +395 -77
  323. ccxt/pro/kucoinfutures.py +400 -99
  324. ccxt/pro/lbank.py +52 -31
  325. ccxt/pro/luno.py +12 -10
  326. ccxt/pro/mexc.py +400 -50
  327. ccxt/pro/myokx.py +28 -0
  328. ccxt/pro/ndax.py +25 -12
  329. ccxt/pro/okcoin.py +28 -9
  330. ccxt/pro/okx.py +935 -124
  331. ccxt/pro/onetrading.py +41 -24
  332. ccxt/pro/oxfun.py +1054 -0
  333. ccxt/pro/p2b.py +100 -24
  334. ccxt/pro/paradex.py +352 -0
  335. ccxt/pro/phemex.py +93 -34
  336. ccxt/pro/poloniex.py +129 -50
  337. ccxt/pro/poloniexfutures.py +53 -32
  338. ccxt/pro/probit.py +93 -86
  339. ccxt/pro/upbit.py +401 -8
  340. ccxt/pro/vertex.py +943 -0
  341. ccxt/pro/wazirx.py +46 -28
  342. ccxt/pro/whitebit.py +65 -12
  343. ccxt/pro/woo.py +486 -70
  344. ccxt/pro/woofipro.py +1271 -0
  345. ccxt/pro/xt.py +1067 -0
  346. ccxt/probit.py +143 -110
  347. ccxt/static_dependencies/__init__.py +1 -1
  348. ccxt/static_dependencies/lark/__init__.py +38 -0
  349. ccxt/static_dependencies/lark/__pyinstaller/__init__.py +6 -0
  350. ccxt/static_dependencies/lark/__pyinstaller/hook-lark.py +14 -0
  351. ccxt/static_dependencies/lark/ast_utils.py +59 -0
  352. ccxt/static_dependencies/lark/common.py +86 -0
  353. ccxt/static_dependencies/lark/exceptions.py +292 -0
  354. ccxt/static_dependencies/lark/grammar.py +130 -0
  355. ccxt/static_dependencies/lark/grammars/__init__.py +0 -0
  356. ccxt/static_dependencies/lark/indenter.py +143 -0
  357. ccxt/static_dependencies/lark/lark.py +658 -0
  358. ccxt/static_dependencies/lark/lexer.py +678 -0
  359. ccxt/static_dependencies/lark/load_grammar.py +1428 -0
  360. ccxt/static_dependencies/lark/parse_tree_builder.py +391 -0
  361. ccxt/static_dependencies/lark/parser_frontends.py +257 -0
  362. ccxt/static_dependencies/lark/parsers/__init__.py +0 -0
  363. ccxt/static_dependencies/lark/parsers/cyk.py +340 -0
  364. ccxt/static_dependencies/lark/parsers/earley.py +314 -0
  365. ccxt/static_dependencies/lark/parsers/earley_common.py +42 -0
  366. ccxt/static_dependencies/lark/parsers/earley_forest.py +801 -0
  367. ccxt/static_dependencies/lark/parsers/grammar_analysis.py +203 -0
  368. ccxt/static_dependencies/lark/parsers/lalr_analysis.py +332 -0
  369. ccxt/static_dependencies/lark/parsers/lalr_interactive_parser.py +158 -0
  370. ccxt/static_dependencies/lark/parsers/lalr_parser.py +122 -0
  371. ccxt/static_dependencies/lark/parsers/lalr_parser_state.py +110 -0
  372. ccxt/static_dependencies/lark/parsers/xearley.py +165 -0
  373. ccxt/static_dependencies/lark/py.typed +0 -0
  374. ccxt/static_dependencies/lark/reconstruct.py +107 -0
  375. ccxt/static_dependencies/lark/tools/__init__.py +70 -0
  376. ccxt/static_dependencies/lark/tools/nearley.py +202 -0
  377. ccxt/static_dependencies/lark/tools/serialize.py +32 -0
  378. ccxt/static_dependencies/lark/tools/standalone.py +196 -0
  379. ccxt/static_dependencies/lark/tree.py +267 -0
  380. ccxt/static_dependencies/lark/tree_matcher.py +186 -0
  381. ccxt/static_dependencies/lark/tree_templates.py +180 -0
  382. ccxt/static_dependencies/lark/utils.py +343 -0
  383. ccxt/static_dependencies/lark/visitors.py +596 -0
  384. ccxt/static_dependencies/marshmallow/__init__.py +81 -0
  385. ccxt/static_dependencies/marshmallow/base.py +65 -0
  386. ccxt/static_dependencies/marshmallow/class_registry.py +94 -0
  387. ccxt/static_dependencies/marshmallow/decorators.py +231 -0
  388. ccxt/static_dependencies/marshmallow/error_store.py +60 -0
  389. ccxt/static_dependencies/marshmallow/exceptions.py +71 -0
  390. ccxt/static_dependencies/marshmallow/fields.py +2114 -0
  391. ccxt/static_dependencies/marshmallow/orderedset.py +89 -0
  392. ccxt/static_dependencies/marshmallow/py.typed +0 -0
  393. ccxt/static_dependencies/marshmallow/schema.py +1228 -0
  394. ccxt/static_dependencies/marshmallow/types.py +12 -0
  395. ccxt/static_dependencies/marshmallow/utils.py +378 -0
  396. ccxt/static_dependencies/marshmallow/validate.py +678 -0
  397. ccxt/static_dependencies/marshmallow/warnings.py +2 -0
  398. ccxt/static_dependencies/marshmallow_dataclass/__init__.py +1047 -0
  399. ccxt/static_dependencies/marshmallow_dataclass/collection_field.py +51 -0
  400. ccxt/static_dependencies/marshmallow_dataclass/lazy_class_attribute.py +45 -0
  401. ccxt/static_dependencies/marshmallow_dataclass/mypy.py +71 -0
  402. ccxt/static_dependencies/marshmallow_dataclass/py.typed +0 -0
  403. ccxt/static_dependencies/marshmallow_dataclass/typing.py +14 -0
  404. ccxt/static_dependencies/marshmallow_dataclass/union_field.py +82 -0
  405. ccxt/static_dependencies/marshmallow_oneofschema/__init__.py +1 -0
  406. ccxt/static_dependencies/marshmallow_oneofschema/one_of_schema.py +193 -0
  407. ccxt/static_dependencies/marshmallow_oneofschema/py.typed +0 -0
  408. ccxt/static_dependencies/starknet/__init__.py +0 -0
  409. ccxt/static_dependencies/starknet/cairo/__init__.py +0 -0
  410. ccxt/static_dependencies/starknet/cairo/data_types.py +123 -0
  411. ccxt/static_dependencies/starknet/cairo/deprecated_parse/__init__.py +0 -0
  412. ccxt/static_dependencies/starknet/cairo/deprecated_parse/cairo_types.py +77 -0
  413. ccxt/static_dependencies/starknet/cairo/deprecated_parse/parser.py +46 -0
  414. ccxt/static_dependencies/starknet/cairo/deprecated_parse/parser_transformer.py +138 -0
  415. ccxt/static_dependencies/starknet/cairo/felt.py +64 -0
  416. ccxt/static_dependencies/starknet/cairo/type_parser.py +121 -0
  417. ccxt/static_dependencies/starknet/cairo/v1/__init__.py +0 -0
  418. ccxt/static_dependencies/starknet/cairo/v1/type_parser.py +59 -0
  419. ccxt/static_dependencies/starknet/cairo/v2/__init__.py +0 -0
  420. ccxt/static_dependencies/starknet/cairo/v2/type_parser.py +77 -0
  421. ccxt/static_dependencies/starknet/ccxt_utils.py +7 -0
  422. ccxt/static_dependencies/starknet/common.py +15 -0
  423. ccxt/static_dependencies/starknet/constants.py +39 -0
  424. ccxt/static_dependencies/starknet/hash/__init__.py +0 -0
  425. ccxt/static_dependencies/starknet/hash/address.py +79 -0
  426. ccxt/static_dependencies/starknet/hash/compiled_class_hash_objects.py +111 -0
  427. ccxt/static_dependencies/starknet/hash/selector.py +16 -0
  428. ccxt/static_dependencies/starknet/hash/storage.py +12 -0
  429. ccxt/static_dependencies/starknet/hash/utils.py +78 -0
  430. ccxt/static_dependencies/starknet/models/__init__.py +0 -0
  431. ccxt/static_dependencies/starknet/models/typed_data.py +45 -0
  432. ccxt/static_dependencies/starknet/serialization/__init__.py +24 -0
  433. ccxt/static_dependencies/starknet/serialization/_calldata_reader.py +40 -0
  434. ccxt/static_dependencies/starknet/serialization/_context.py +142 -0
  435. ccxt/static_dependencies/starknet/serialization/data_serializers/__init__.py +10 -0
  436. ccxt/static_dependencies/starknet/serialization/data_serializers/_common.py +82 -0
  437. ccxt/static_dependencies/starknet/serialization/data_serializers/array_serializer.py +43 -0
  438. ccxt/static_dependencies/starknet/serialization/data_serializers/bool_serializer.py +37 -0
  439. ccxt/static_dependencies/starknet/serialization/data_serializers/byte_array_serializer.py +66 -0
  440. ccxt/static_dependencies/starknet/serialization/data_serializers/cairo_data_serializer.py +71 -0
  441. ccxt/static_dependencies/starknet/serialization/data_serializers/enum_serializer.py +71 -0
  442. ccxt/static_dependencies/starknet/serialization/data_serializers/felt_serializer.py +50 -0
  443. ccxt/static_dependencies/starknet/serialization/data_serializers/named_tuple_serializer.py +58 -0
  444. ccxt/static_dependencies/starknet/serialization/data_serializers/option_serializer.py +43 -0
  445. ccxt/static_dependencies/starknet/serialization/data_serializers/output_serializer.py +40 -0
  446. ccxt/static_dependencies/starknet/serialization/data_serializers/payload_serializer.py +72 -0
  447. ccxt/static_dependencies/starknet/serialization/data_serializers/struct_serializer.py +36 -0
  448. ccxt/static_dependencies/starknet/serialization/data_serializers/tuple_serializer.py +36 -0
  449. ccxt/static_dependencies/starknet/serialization/data_serializers/uint256_serializer.py +76 -0
  450. ccxt/static_dependencies/starknet/serialization/data_serializers/uint_serializer.py +100 -0
  451. ccxt/static_dependencies/starknet/serialization/data_serializers/unit_serializer.py +32 -0
  452. ccxt/static_dependencies/starknet/serialization/errors.py +10 -0
  453. ccxt/static_dependencies/starknet/serialization/factory.py +229 -0
  454. ccxt/static_dependencies/starknet/serialization/function_serialization_adapter.py +110 -0
  455. ccxt/static_dependencies/starknet/serialization/tuple_dataclass.py +59 -0
  456. ccxt/static_dependencies/starknet/utils/__init__.py +0 -0
  457. ccxt/static_dependencies/starknet/utils/constructor_args_translator.py +86 -0
  458. ccxt/static_dependencies/starknet/utils/iterable.py +13 -0
  459. ccxt/static_dependencies/starknet/utils/schema.py +13 -0
  460. ccxt/static_dependencies/starknet/utils/typed_data.py +182 -0
  461. ccxt/static_dependencies/starkware/__init__.py +0 -0
  462. ccxt/static_dependencies/starkware/crypto/__init__.py +0 -0
  463. ccxt/static_dependencies/starkware/crypto/fast_pedersen_hash.py +50 -0
  464. ccxt/static_dependencies/starkware/crypto/math_utils.py +78 -0
  465. ccxt/static_dependencies/starkware/crypto/signature.py +2344 -0
  466. ccxt/static_dependencies/starkware/crypto/utils.py +63 -0
  467. ccxt/static_dependencies/sympy/__init__.py +0 -0
  468. ccxt/static_dependencies/sympy/core/__init__.py +0 -0
  469. ccxt/static_dependencies/sympy/core/intfunc.py +35 -0
  470. ccxt/static_dependencies/sympy/external/__init__.py +0 -0
  471. ccxt/static_dependencies/sympy/external/gmpy.py +345 -0
  472. ccxt/static_dependencies/sympy/external/importtools.py +187 -0
  473. ccxt/static_dependencies/sympy/external/ntheory.py +637 -0
  474. ccxt/static_dependencies/sympy/external/pythonmpq.py +341 -0
  475. ccxt/static_dependencies/typing_inspect/__init__.py +0 -0
  476. ccxt/static_dependencies/typing_inspect/typing_inspect.py +851 -0
  477. ccxt/test/{test_async.py → tests_async.py} +465 -407
  478. ccxt/test/tests_helpers.py +285 -0
  479. ccxt/test/tests_init.py +39 -0
  480. ccxt/test/{test_sync.py → tests_sync.py} +465 -409
  481. ccxt/timex.py +123 -70
  482. ccxt/tokocrypto.py +129 -93
  483. ccxt/tradeogre.py +39 -25
  484. ccxt/upbit.py +322 -113
  485. ccxt/vertex.py +2983 -0
  486. ccxt/wavesexchange.py +227 -173
  487. ccxt/wazirx.py +145 -65
  488. ccxt/whitebit.py +533 -138
  489. ccxt/woo.py +1155 -295
  490. ccxt/woofipro.py +2716 -0
  491. ccxt/xt.py +4627 -0
  492. ccxt/yobit.py +159 -92
  493. ccxt/zaif.py +80 -33
  494. ccxt/zonda.py +140 -69
  495. ccxt-4.4.48.dist-info/LICENSE.txt +21 -0
  496. ccxt-4.4.48.dist-info/METADATA +646 -0
  497. ccxt-4.4.48.dist-info/RECORD +669 -0
  498. {ccxt-4.2.76.dist-info → ccxt-4.4.48.dist-info}/WHEEL +1 -1
  499. ccxt/abstract/bitbay.py +0 -47
  500. ccxt/abstract/bitfinex2.py +0 -139
  501. ccxt/abstract/hitbtc3.py +0 -115
  502. ccxt/async_support/bitbay.py +0 -17
  503. ccxt/async_support/bitfinex2.py +0 -3496
  504. ccxt/async_support/flowbtc.py +0 -34
  505. ccxt/bitbay.py +0 -17
  506. ccxt/bitfinex2.py +0 -3496
  507. ccxt/flowbtc.py +0 -34
  508. ccxt/hitbtc3.py +0 -16
  509. ccxt/pro/bitfinex2.py +0 -1081
  510. ccxt/test/base/__init__.py +0 -28
  511. ccxt/test/base/test_account.py +0 -26
  512. ccxt/test/base/test_balance.py +0 -56
  513. ccxt/test/base/test_borrow_interest.py +0 -35
  514. ccxt/test/base/test_borrow_rate.py +0 -32
  515. ccxt/test/base/test_calculate_fee.py +0 -51
  516. ccxt/test/base/test_crypto.py +0 -127
  517. ccxt/test/base/test_currency.py +0 -76
  518. ccxt/test/base/test_datetime.py +0 -103
  519. ccxt/test/base/test_decimal_to_precision.py +0 -392
  520. ccxt/test/base/test_deep_extend.py +0 -68
  521. ccxt/test/base/test_deposit_withdrawal.py +0 -50
  522. ccxt/test/base/test_exchange_datetime_functions.py +0 -76
  523. ccxt/test/base/test_funding_rate_history.py +0 -29
  524. ccxt/test/base/test_last_price.py +0 -32
  525. ccxt/test/base/test_ledger_entry.py +0 -45
  526. ccxt/test/base/test_ledger_item.py +0 -48
  527. ccxt/test/base/test_leverage_tier.py +0 -33
  528. ccxt/test/base/test_margin_mode.py +0 -24
  529. ccxt/test/base/test_margin_modification.py +0 -35
  530. ccxt/test/base/test_market.py +0 -190
  531. ccxt/test/base/test_number.py +0 -411
  532. ccxt/test/base/test_ohlcv.py +0 -32
  533. ccxt/test/base/test_open_interest.py +0 -32
  534. ccxt/test/base/test_order.py +0 -64
  535. ccxt/test/base/test_order_book.py +0 -63
  536. ccxt/test/base/test_position.py +0 -60
  537. ccxt/test/base/test_shared_methods.py +0 -345
  538. ccxt/test/base/test_status.py +0 -24
  539. ccxt/test/base/test_throttle.py +0 -126
  540. ccxt/test/base/test_ticker.py +0 -86
  541. ccxt/test/base/test_trade.py +0 -47
  542. ccxt/test/base/test_trading_fee.py +0 -26
  543. ccxt/test/base/test_transaction.py +0 -39
  544. ccxt-4.2.76.dist-info/METADATA +0 -626
  545. ccxt-4.2.76.dist-info/RECORD +0 -534
  546. {ccxt-4.2.76.dist-info → ccxt-4.4.48.dist-info}/top_level.txt +0 -0
@@ -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
  },
@@ -311,8 +314,10 @@ class lbank(Exchange, ImplicitAPI):
311
314
  async def fetch_time(self, params={}):
312
315
  """
313
316
  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
317
+
318
+ https://www.lbank.com/en-US/docs/index.html#get-timestamp
319
+ https://www.lbank.com/en-US/docs/contract.html#get-the-current-time
320
+
316
321
  :param dict [params]: extra parameters specific to the exchange API endpoint
317
322
  :returns int: the current integer timestamp in milliseconds from the exchange server
318
323
  """
@@ -345,11 +350,13 @@ class lbank(Exchange, ImplicitAPI):
345
350
  #
346
351
  return self.safe_integer(response, 'data')
347
352
 
348
- async def fetch_markets(self, params={}):
353
+ async def fetch_markets(self, params={}) -> List[Market]:
349
354
  """
350
355
  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
356
+
357
+ https://www.lbank.com/en-US/docs/index.html#trading-pairs
358
+ https://www.lbank.com/en-US/docs/contract.html#query-contract-information-list
359
+
353
360
  :param dict [params]: extra parameters specific to the exchange API endpoint
354
361
  :returns dict[]: an array of objects representing market data
355
362
  """
@@ -440,7 +447,7 @@ class lbank(Exchange, ImplicitAPI):
440
447
  return result
441
448
 
442
449
  async def fetch_swap_markets(self, params={}):
443
- request = {
450
+ request: dict = {
444
451
  'productGroup': 'SwapU',
445
452
  }
446
453
  response = await self.contractPublicGetCfdOpenApiV1PubInstrument(self.extend(request, params))
@@ -535,7 +542,7 @@ class lbank(Exchange, ImplicitAPI):
535
542
  })
536
543
  return result
537
544
 
538
- def parse_ticker(self, ticker, market: Market = None) -> Ticker:
545
+ def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
539
546
  #
540
547
  # spot: fetchTicker, fetchTickers
541
548
  #
@@ -598,7 +605,9 @@ class lbank(Exchange, ImplicitAPI):
598
605
  async def fetch_ticker(self, symbol: str, params={}) -> Ticker:
599
606
  """
600
607
  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
608
+
609
+ https://www.lbank.com/en-US/docs/index.html#query-current-market-data-new
610
+
602
611
  :param str symbol: unified symbol of the market to fetch the ticker for
603
612
  :param dict [params]: extra parameters specific to the exchange API endpoint
604
613
  :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
@@ -608,7 +617,7 @@ class lbank(Exchange, ImplicitAPI):
608
617
  if market['swap']:
609
618
  responseForSwap = await self.fetch_tickers([market['symbol']], params)
610
619
  return self.safe_value(responseForSwap, market['symbol'])
611
- request = {
620
+ request: dict = {
612
621
  'symbol': market['id'],
613
622
  }
614
623
  response = await self.spotPublicGetTicker24hr(self.extend(request, params))
@@ -634,14 +643,16 @@ class lbank(Exchange, ImplicitAPI):
634
643
  # }
635
644
  #
636
645
  data = self.safe_value(response, 'data', [])
637
- first = self.safe_value(data, 0, {})
646
+ first = self.safe_dict(data, 0, {})
638
647
  return self.parse_ticker(first, market)
639
648
 
640
649
  async def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
641
650
  """
642
651
  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
652
+
653
+ https://www.lbank.com/en-US/docs/index.html#query-current-market-data-new
654
+ https://www.lbank.com/en-US/docs/contract.html#query-contract-market-list
655
+
645
656
  :param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
646
657
  :param dict [params]: extra parameters specific to the exchange API endpoint
647
658
  :returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
@@ -653,7 +664,7 @@ class lbank(Exchange, ImplicitAPI):
653
664
  symbolsLength = len(symbols)
654
665
  if symbolsLength > 0:
655
666
  market = self.market(symbols[0])
656
- request = {}
667
+ request: dict = {}
657
668
  type = None
658
669
  type, params = self.handle_market_type_and_params('fetchTickers', market, params)
659
670
  response = None
@@ -708,14 +719,16 @@ class lbank(Exchange, ImplicitAPI):
708
719
  # "success": True
709
720
  # }
710
721
  #
711
- data = self.safe_value(response, 'data', [])
722
+ data = self.safe_list(response, 'data', [])
712
723
  return self.parse_tickers(data, symbols)
713
724
 
714
725
  async def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
715
726
  """
716
727
  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
728
+
729
+ https://www.lbank.com/en-US/docs/index.html#query-market-depth
730
+ https://www.lbank.com/en-US/docs/contract.html#get-handicap
731
+
719
732
  :param str symbol: unified symbol of the market to fetch the order book for
720
733
  :param int [limit]: the maximum amount of order book entries to return
721
734
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -725,7 +738,7 @@ class lbank(Exchange, ImplicitAPI):
725
738
  market = self.market(symbol)
726
739
  if limit is None:
727
740
  limit = 60
728
- request = {
741
+ request: dict = {
729
742
  'symbol': market['id'],
730
743
  }
731
744
  type = None
@@ -791,7 +804,7 @@ class lbank(Exchange, ImplicitAPI):
791
804
  return self.parse_order_book(orderbook, market['symbol'], timestamp, 'bids', 'asks', 'price', 'volume')
792
805
  return self.parse_order_book(orderbook, market['symbol'], timestamp)
793
806
 
794
- def parse_trade(self, trade, market: Market = None) -> Trade:
807
+ def parse_trade(self, trade: dict, market: Market = None) -> Trade:
795
808
  #
796
809
  # fetchTrades(old) spotPublicGetTrades
797
810
  #
@@ -887,8 +900,10 @@ class lbank(Exchange, ImplicitAPI):
887
900
  async def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
888
901
  """
889
902
  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
903
+
904
+ https://www.lbank.com/en-US/docs/index.html#query-historical-transactions
905
+ https://www.lbank.com/en-US/docs/index.html#recent-transactions-list
906
+
892
907
  :param str symbol: unified symbol of the market to fetch trades for
893
908
  :param int [since]: timestamp in ms of the earliest trade to fetch
894
909
  :param int [limit]: the maximum amount of trades to fetch
@@ -897,7 +912,7 @@ class lbank(Exchange, ImplicitAPI):
897
912
  """
898
913
  await self.load_markets()
899
914
  market = self.market(symbol)
900
- request = {
915
+ request: dict = {
901
916
  'symbol': market['id'],
902
917
  }
903
918
  if since is not None:
@@ -931,7 +946,7 @@ class lbank(Exchange, ImplicitAPI):
931
946
  # "ts":1647021999308
932
947
  # }
933
948
  #
934
- trades = self.safe_value(response, 'data', [])
949
+ trades = self.safe_list(response, 'data', [])
935
950
  return self.parse_trades(trades, market, since, limit)
936
951
 
937
952
  def parse_ohlcv(self, ohlcv, market: Market = None) -> list:
@@ -957,7 +972,9 @@ class lbank(Exchange, ImplicitAPI):
957
972
  async def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
958
973
  """
959
974
  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
975
+
976
+ https://www.lbank.com/en-US/docs/index.html#query-k-bar-data
977
+
961
978
  :param str symbol: unified symbol of the market to fetch OHLCV data for
962
979
  :param str timeframe: the length of time each candle represents
963
980
  :param int [since]: timestamp in ms of the earliest candle to fetch
@@ -970,17 +987,19 @@ class lbank(Exchange, ImplicitAPI):
970
987
  market = self.market(symbol)
971
988
  if limit is None:
972
989
  limit = 100
990
+ else:
991
+ limit = min(limit, 2000)
973
992
  if since is None:
974
993
  duration = self.parse_timeframe(timeframe)
975
- since = self.milliseconds() - duration * 1000 * limit
976
- request = {
994
+ since = self.milliseconds() - (duration * 1000 * limit)
995
+ request: dict = {
977
996
  'symbol': market['id'],
978
997
  'type': self.safe_string(self.timeframes, timeframe, timeframe),
979
998
  'time': self.parse_to_int(since / 1000),
980
- 'size': limit, # max 2000
999
+ 'size': min(limit + 1, 2000), # max 2000
981
1000
  }
982
1001
  response = await self.spotPublicGetKline(self.extend(request, params))
983
- ohlcvs = self.safe_value(response, 'data', [])
1002
+ ohlcvs = self.safe_list(response, 'data', [])
984
1003
  #
985
1004
  #
986
1005
  # [
@@ -1083,7 +1102,7 @@ class lbank(Exchange, ImplicitAPI):
1083
1102
  # ]
1084
1103
  #
1085
1104
  timestamp = self.safe_integer(response, 'ts')
1086
- result = {
1105
+ result: dict = {
1087
1106
  'info': response,
1088
1107
  'timestamp': timestamp,
1089
1108
  'datetime': self.iso8601(timestamp),
@@ -1129,12 +1148,117 @@ class lbank(Exchange, ImplicitAPI):
1129
1148
  return self.safe_balance(result)
1130
1149
  return None
1131
1150
 
1151
+ def parse_funding_rate(self, ticker, market: Market = None) -> FundingRate:
1152
+ # {
1153
+ # "symbol": "BTCUSDT",
1154
+ # "highestPrice": "69495.5",
1155
+ # "underlyingPrice": "68455.904",
1156
+ # "lowestPrice": "68182.1",
1157
+ # "openPrice": "68762.4",
1158
+ # "positionFeeRate": "0.0001",
1159
+ # "volume": "33534.2858",
1160
+ # "markedPrice": "68434.1",
1161
+ # "turnover": "1200636218.210558",
1162
+ # "positionFeeTime": "28800",
1163
+ # "lastPrice": "68427.3",
1164
+ # "nextFeeTime": "1730736000000",
1165
+ # "fundingRate": "0.0001",
1166
+ # }
1167
+ marketId = self.safe_string(ticker, 'symbol')
1168
+ symbol = self.safe_symbol(marketId, market)
1169
+ markPrice = self.safe_number(ticker, 'markedPrice')
1170
+ indexPrice = self.safe_number(ticker, 'underlyingPrice')
1171
+ fundingRate = self.safe_number(ticker, 'fundingRate')
1172
+ fundingTime = self.safe_integer(ticker, 'nextFeeTime')
1173
+ positionFeeTime = self.safe_integer(ticker, 'positionFeeTime')
1174
+ intervalString = None
1175
+ if positionFeeTime is not None:
1176
+ interval = self.parse_to_int(positionFeeTime / 60 / 60)
1177
+ intervalString = str(interval) + 'h'
1178
+ return {
1179
+ 'info': ticker,
1180
+ 'symbol': symbol,
1181
+ 'markPrice': markPrice,
1182
+ 'indexPrice': indexPrice,
1183
+ 'fundingRate': fundingRate,
1184
+ 'fundingTimestamp': fundingTime,
1185
+ 'fundingDatetime': self.iso8601(fundingTime),
1186
+ 'timestamp': None,
1187
+ 'datetime': None,
1188
+ 'nextFundingRate': None,
1189
+ 'nextFundingTimestamp': None,
1190
+ 'nextFundingDatetime': None,
1191
+ 'previousFundingRate': None,
1192
+ 'previousFundingTimestamp': None,
1193
+ 'previousFundingDatetime': None,
1194
+ 'interval': intervalString,
1195
+ }
1196
+
1197
+ async def fetch_funding_rate(self, symbol: str, params={}) -> FundingRate:
1198
+ """
1199
+ fetch the current funding rate
1200
+
1201
+ https://www.lbank.com/en-US/docs/contract.html#query-contract-market-list
1202
+
1203
+ :param str symbol: unified market symbol
1204
+ :param dict [params]: extra parameters specific to the exchange API endpoint
1205
+ :returns dict: a `funding rate structure <https://docs.ccxt.com/#/?id=funding-rate-structure>`
1206
+ """
1207
+ await self.load_markets()
1208
+ market = self.market(symbol)
1209
+ responseForSwap = await self.fetch_funding_rates([market['symbol']], params)
1210
+ return self.safe_value(responseForSwap, market['symbol'])
1211
+
1212
+ async def fetch_funding_rates(self, symbols: Strings = None, params={}) -> FundingRates:
1213
+ """
1214
+ fetch the funding rate for multiple markets
1215
+
1216
+ https://www.lbank.com/en-US/docs/contract.html#query-contract-market-list
1217
+
1218
+ :param str[]|None symbols: list of unified market symbols
1219
+ :param dict [params]: extra parameters specific to the exchange API endpoint
1220
+ :returns dict: a dictionary of `funding rate structures <https://docs.ccxt.com/#/?id=funding-rates-structure>`, indexed by market symbols
1221
+ """
1222
+ await self.load_markets()
1223
+ symbols = self.market_symbols(symbols)
1224
+ request: dict = {
1225
+ 'productGroup': 'SwapU',
1226
+ }
1227
+ response = await self.contractPublicGetCfdOpenApiV1PubMarketData(self.extend(request, params))
1228
+ # {
1229
+ # "data": [
1230
+ # {
1231
+ # "symbol": "BTCUSDT",
1232
+ # "highestPrice": "69495.5",
1233
+ # "underlyingPrice": "68455.904",
1234
+ # "lowestPrice": "68182.1",
1235
+ # "openPrice": "68762.4",
1236
+ # "positionFeeRate": "0.0001",
1237
+ # "volume": "33534.2858",
1238
+ # "markedPrice": "68434.1",
1239
+ # "turnover": "1200636218.210558",
1240
+ # "positionFeeTime": "28800",
1241
+ # "lastPrice": "68427.3",
1242
+ # "nextFeeTime": "1730736000000",
1243
+ # "fundingRate": "0.0001",
1244
+ # }
1245
+ # ],
1246
+ # "error_code": "0",
1247
+ # "msg": "Success",
1248
+ # "result": "true",
1249
+ # "success": True,
1250
+ # }
1251
+ data = self.safe_list(response, 'data', [])
1252
+ return self.parse_funding_rates(data, symbols)
1253
+
1132
1254
  async def fetch_balance(self, params={}) -> Balances:
1133
1255
  """
1134
1256
  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
1257
+
1258
+ https://www.lbank.com/en-US/docs/index.html#asset-information
1259
+ https://www.lbank.com/en-US/docs/index.html#account-information
1260
+ https://www.lbank.com/en-US/docs/index.html#get-all-coins-information
1261
+
1138
1262
  :param dict [params]: extra parameters specific to the exchange API endpoint
1139
1263
  :returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
1140
1264
  """
@@ -1181,7 +1305,7 @@ class lbank(Exchange, ImplicitAPI):
1181
1305
  #
1182
1306
  return self.parse_balance(response)
1183
1307
 
1184
- def parse_trading_fee(self, fee, market: Market = None):
1308
+ def parse_trading_fee(self, fee: dict, market: Market = None) -> TradingFeeInterface:
1185
1309
  #
1186
1310
  # {
1187
1311
  # "symbol":"skt_usdt",
@@ -1196,32 +1320,38 @@ class lbank(Exchange, ImplicitAPI):
1196
1320
  'symbol': symbol,
1197
1321
  'maker': self.safe_number(fee, 'makerCommission'),
1198
1322
  'taker': self.safe_number(fee, 'takerCommission'),
1323
+ 'percentage': None,
1324
+ 'tierBased': None,
1199
1325
  }
1200
1326
 
1201
- async def fetch_trading_fee(self, symbol: str, params={}):
1327
+ async def fetch_trading_fee(self, symbol: str, params={}) -> TradingFeeInterface:
1202
1328
  """
1203
1329
  fetch the trading fees for a market
1204
- :see: https://www.lbank.com/en-US/docs/index.html#transaction-fee-rate-query
1330
+
1331
+ https://www.lbank.com/en-US/docs/index.html#transaction-fee-rate-query
1332
+
1205
1333
  :param str symbol: unified market symbol
1206
1334
  :param dict [params]: extra parameters specific to the exchange API endpoint
1207
1335
  :returns dict: a `fee structure <https://docs.ccxt.com/#/?id=fee-structure>`
1208
1336
  """
1209
1337
  market = self.market(symbol)
1210
1338
  result = await self.fetch_trading_fees(self.extend(params, {'category': market['id']}))
1211
- return result
1339
+ return self.safe_dict(result, symbol)
1212
1340
 
1213
- async def fetch_trading_fees(self, params={}):
1341
+ async def fetch_trading_fees(self, params={}) -> TradingFees:
1214
1342
  """
1215
1343
  fetch the trading fees for multiple markets
1216
- :see: https://www.lbank.com/en-US/docs/index.html#transaction-fee-rate-query
1344
+
1345
+ https://www.lbank.com/en-US/docs/index.html#transaction-fee-rate-query
1346
+
1217
1347
  :param dict [params]: extra parameters specific to the exchange API endpoint
1218
1348
  :returns dict: a dictionary of `fee structures <https://docs.ccxt.com/#/?id=fee-structure>` indexed by market symbols
1219
1349
  """
1220
1350
  await self.load_markets()
1221
- request = {}
1351
+ request: dict = {}
1222
1352
  response = await self.spotPrivatePostSupplementCustomerTradeFee(self.extend(request, params))
1223
1353
  fees = self.safe_value(response, 'data', [])
1224
- result = {}
1354
+ result: dict = {}
1225
1355
  for i in range(0, len(fees)):
1226
1356
  fee = self.parse_trading_fee(fees[i])
1227
1357
  symbol = fee['symbol']
@@ -1231,8 +1361,10 @@ class lbank(Exchange, ImplicitAPI):
1231
1361
  async def create_market_buy_order_with_cost(self, symbol: str, cost: float, params={}):
1232
1362
  """
1233
1363
  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
1364
+
1365
+ https://www.lbank.com/en-US/docs/index.html#place-order
1366
+ https://www.lbank.com/en-US/docs/index.html#place-an-order
1367
+
1236
1368
  :param str symbol: unified symbol of the market to create an order in
1237
1369
  :param float cost: how much you want to trade in units of the quote currency
1238
1370
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -1248,13 +1380,15 @@ class lbank(Exchange, ImplicitAPI):
1248
1380
  async def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
1249
1381
  """
1250
1382
  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
1383
+
1384
+ https://www.lbank.com/en-US/docs/index.html#place-order
1385
+ https://www.lbank.com/en-US/docs/index.html#place-an-order
1386
+
1253
1387
  :param str symbol: unified symbol of the market to create an order in
1254
1388
  :param str type: 'market' or 'limit'
1255
1389
  :param str side: 'buy' or 'sell'
1256
1390
  :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
1391
+ :param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
1258
1392
  :param dict [params]: extra parameters specific to the exchange API endpoint
1259
1393
  :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
1260
1394
  """
@@ -1264,7 +1398,7 @@ class lbank(Exchange, ImplicitAPI):
1264
1398
  postOnly = self.safe_bool(params, 'postOnly', False)
1265
1399
  timeInForce = self.safe_string_upper(params, 'timeInForce')
1266
1400
  params = self.omit(params, ['custom_id', 'clientOrderId', 'timeInForce', 'postOnly'])
1267
- request = {
1401
+ request: dict = {
1268
1402
  'symbol': market['id'],
1269
1403
  }
1270
1404
  ioc = (timeInForce == 'IOC')
@@ -1335,8 +1469,8 @@ class lbank(Exchange, ImplicitAPI):
1335
1469
  'info': result,
1336
1470
  }, market)
1337
1471
 
1338
- def parse_order_status(self, status):
1339
- statuses = {
1472
+ def parse_order_status(self, status: Str):
1473
+ statuses: dict = {
1340
1474
  '-1': 'canceled', # canceled
1341
1475
  '0': 'open', # not traded
1342
1476
  '1': 'open', # partial deal
@@ -1346,7 +1480,7 @@ class lbank(Exchange, ImplicitAPI):
1346
1480
  }
1347
1481
  return self.safe_string(statuses, status, status)
1348
1482
 
1349
- def parse_order(self, order, market: Market = None) -> Order:
1483
+ def parse_order(self, order: dict, market: Market = None) -> Order:
1350
1484
  #
1351
1485
  # fetchOrderSupplement(private)
1352
1486
  #
@@ -1413,6 +1547,27 @@ class lbank(Exchange, ImplicitAPI):
1413
1547
  # "status":-1
1414
1548
  # }
1415
1549
  #
1550
+ # cancelOrder
1551
+ #
1552
+ # {
1553
+ # "executedQty":0.0,
1554
+ # "price":0.05,
1555
+ # "origQty":100.0,
1556
+ # "tradeType":"buy",
1557
+ # "status":0
1558
+ # }
1559
+ #
1560
+ # cancelAllOrders
1561
+ #
1562
+ # {
1563
+ # "executedQty":0.00000000000000000000,
1564
+ # "orderId":"293ef71b-3e67-4962-af93-aa06990a045f",
1565
+ # "price":0.05000000000000000000,
1566
+ # "origQty":100.00000000000000000000,
1567
+ # "tradeType":"buy",
1568
+ # "status":0
1569
+ # }
1570
+ #
1416
1571
  id = self.safe_string_2(order, 'orderId', 'order_id')
1417
1572
  clientOrderId = self.safe_string_2(order, 'clientOrderId', 'custom_id')
1418
1573
  timestamp = self.safe_integer_2(order, 'time', 'create_time')
@@ -1422,7 +1577,7 @@ class lbank(Exchange, ImplicitAPI):
1422
1577
  timeInForce = None
1423
1578
  postOnly = False
1424
1579
  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
1580
+ 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
1581
  parts = rawType.split('_')
1427
1582
  side = self.safe_string(parts, 0)
1428
1583
  typePart = self.safe_string(parts, 1) # market, maker, ioc, fok or None(limit)
@@ -1454,7 +1609,6 @@ class lbank(Exchange, ImplicitAPI):
1454
1609
  'postOnly': postOnly,
1455
1610
  'side': side,
1456
1611
  'price': price,
1457
- 'stopPrice': None,
1458
1612
  'triggerPrice': None,
1459
1613
  'cost': costString,
1460
1614
  'amount': amountString,
@@ -1469,8 +1623,11 @@ class lbank(Exchange, ImplicitAPI):
1469
1623
  async def fetch_order(self, id: str, symbol: Str = None, params={}):
1470
1624
  """
1471
1625
  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
1626
+
1627
+ https://www.lbank.com/en-US/docs/index.html#query-order
1628
+ https://www.lbank.com/en-US/docs/index.html#query-order-new
1629
+
1630
+ :param str id: order id
1474
1631
  :param str symbol: unified symbol of the market the order was made in
1475
1632
  :param dict [params]: extra parameters specific to the exchange API endpoint
1476
1633
  :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
@@ -1489,7 +1646,7 @@ class lbank(Exchange, ImplicitAPI):
1489
1646
  raise ArgumentsRequired(self.id + ' fetchOrder() requires a symbol argument')
1490
1647
  await self.load_markets()
1491
1648
  market = self.market(symbol)
1492
- request = {
1649
+ request: dict = {
1493
1650
  'symbol': market['id'],
1494
1651
  'orderId': id,
1495
1652
  }
@@ -1515,7 +1672,7 @@ class lbank(Exchange, ImplicitAPI):
1515
1672
  # "ts":1648164471827
1516
1673
  # }
1517
1674
  #
1518
- result = self.safe_value(response, 'data', {})
1675
+ result = self.safe_dict(response, 'data', {})
1519
1676
  return self.parse_order(result)
1520
1677
 
1521
1678
  async def fetch_order_default(self, id: str, symbol: Str = None, params={}):
@@ -1524,7 +1681,7 @@ class lbank(Exchange, ImplicitAPI):
1524
1681
  raise ArgumentsRequired(self.id + ' fetchOrder() requires a symbol argument')
1525
1682
  await self.load_markets()
1526
1683
  market = self.market(symbol)
1527
- request = {
1684
+ request: dict = {
1528
1685
  'symbol': market['id'],
1529
1686
  'order_id': id,
1530
1687
  }
@@ -1565,7 +1722,9 @@ class lbank(Exchange, ImplicitAPI):
1565
1722
  async def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
1566
1723
  """
1567
1724
  fetch all trades made by the user
1568
- :see: https://www.lbank.com/en-US/docs/index.html#past-transaction-details
1725
+
1726
+ https://www.lbank.com/en-US/docs/index.html#past-transaction-details
1727
+
1569
1728
  :param str symbol: unified market symbol
1570
1729
  :param int [since]: the earliest time in ms to fetch trades for
1571
1730
  :param int [limit]: the maximum number of trade structures to retrieve
@@ -1578,7 +1737,7 @@ class lbank(Exchange, ImplicitAPI):
1578
1737
  market = self.market(symbol)
1579
1738
  since = self.safe_value(params, 'start_date', since)
1580
1739
  params = self.omit(params, 'start_date')
1581
- request = {
1740
+ request: dict = {
1582
1741
  'symbol': market['id'],
1583
1742
  # 'start_date' Start time yyyy-mm-dd, the maximum is today, the default is yesterday
1584
1743
  # 'end_date' Finish time yyyy-mm-dd, the maximum is today, the default is today
@@ -1613,13 +1772,15 @@ class lbank(Exchange, ImplicitAPI):
1613
1772
  # "ts":1648509742164
1614
1773
  # }
1615
1774
  #
1616
- trades = self.safe_value(response, 'data', [])
1775
+ trades = self.safe_list(response, 'data', [])
1617
1776
  return self.parse_trades(trades, market, since, limit)
1618
1777
 
1619
1778
  async def fetch_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
1620
1779
  """
1621
1780
  fetches information on multiple orders made by the user
1622
- :see: https://www.lbank.com/en-US/docs/index.html#query-all-orders
1781
+
1782
+ https://www.lbank.com/en-US/docs/index.html#query-all-orders
1783
+
1623
1784
  :param str symbol: unified market symbol of the market orders were made in
1624
1785
  :param int [since]: the earliest time in ms to fetch orders for
1625
1786
  :param int [limit]: the maximum number of order structures to retrieve
@@ -1634,7 +1795,7 @@ class lbank(Exchange, ImplicitAPI):
1634
1795
  market = self.market(symbol)
1635
1796
  if limit is None:
1636
1797
  limit = 100
1637
- request = {
1798
+ request: dict = {
1638
1799
  'symbol': market['id'],
1639
1800
  'current_page': 1,
1640
1801
  'page_length': limit,
@@ -1669,13 +1830,15 @@ class lbank(Exchange, ImplicitAPI):
1669
1830
  # }
1670
1831
  #
1671
1832
  result = self.safe_value(response, 'data', {})
1672
- orders = self.safe_value(result, 'orders', [])
1833
+ orders = self.safe_list(result, 'orders', [])
1673
1834
  return self.parse_orders(orders, market, since, limit)
1674
1835
 
1675
1836
  async def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
1676
1837
  """
1677
1838
  fetch all unfilled currently open orders
1678
- :see: https://www.lbank.com/en-US/docs/index.html#current-pending-order
1839
+
1840
+ https://www.lbank.com/en-US/docs/index.html#current-pending-order
1841
+
1679
1842
  :param str symbol: unified market symbol
1680
1843
  :param int [since]: the earliest time in ms to fetch open orders for
1681
1844
  :param int [limit]: the maximum number of open order structures to retrieve
@@ -1688,7 +1851,7 @@ class lbank(Exchange, ImplicitAPI):
1688
1851
  market = self.market(symbol)
1689
1852
  if limit is None:
1690
1853
  limit = 100
1691
- request = {
1854
+ request: dict = {
1692
1855
  'symbol': market['id'],
1693
1856
  'current_page': 1,
1694
1857
  'page_length': limit,
@@ -1722,13 +1885,15 @@ class lbank(Exchange, ImplicitAPI):
1722
1885
  # }
1723
1886
  #
1724
1887
  result = self.safe_value(response, 'data', {})
1725
- orders = self.safe_value(result, 'orders', [])
1888
+ orders = self.safe_list(result, 'orders', [])
1726
1889
  return self.parse_orders(orders, market, since, limit)
1727
1890
 
1728
1891
  async def cancel_order(self, id: str, symbol: Str = None, params={}):
1729
1892
  """
1730
1893
  cancels an open order
1731
- :see: https://www.lbank.com/en-US/docs/index.html#cancel-order-new
1894
+
1895
+ https://www.lbank.com/en-US/docs/index.html#cancel-order-new
1896
+
1732
1897
  :param str id: order id
1733
1898
  :param str symbol: unified symbol of the market the order was made in
1734
1899
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -1740,7 +1905,7 @@ class lbank(Exchange, ImplicitAPI):
1740
1905
  clientOrderId = self.safe_string_2(params, 'origClientOrderId', 'clientOrderId')
1741
1906
  params = self.omit(params, ['origClientOrderId', 'clientOrderId'])
1742
1907
  market = self.market(symbol)
1743
- request = {
1908
+ request: dict = {
1744
1909
  'symbol': market['id'],
1745
1910
  'orderId': id,
1746
1911
  }
@@ -1756,17 +1921,19 @@ class lbank(Exchange, ImplicitAPI):
1756
1921
  # "origQty":100.0,
1757
1922
  # "tradeType":"buy",
1758
1923
  # "status":0
1759
- # },
1924
+ # },
1760
1925
  # "error_code":0,
1761
1926
  # "ts":1648501286196
1762
1927
  # }
1763
- result = self.safe_value(response, 'data', {})
1764
- return result
1928
+ data = self.safe_dict(response, 'data', {})
1929
+ return self.parse_order(data)
1765
1930
 
1766
1931
  async def cancel_all_orders(self, symbol: Str = None, params={}):
1767
1932
  """
1768
1933
  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
1934
+
1935
+ https://www.lbank.com/en-US/docs/index.html#cancel-all-pending-orders-for-a-single-trading-pair
1936
+
1770
1937
  :param str symbol: unified market symbol of the market to cancel orders in
1771
1938
  :param dict [params]: extra parameters specific to the exchange API endpoint
1772
1939
  :returns dict[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
@@ -1775,7 +1942,7 @@ class lbank(Exchange, ImplicitAPI):
1775
1942
  raise ArgumentsRequired(self.id + ' cancelAllOrders() requires a symbol argument')
1776
1943
  await self.load_markets()
1777
1944
  market = self.market(symbol)
1778
- request = {
1945
+ request: dict = {
1779
1946
  'symbol': market['id'],
1780
1947
  }
1781
1948
  response = await self.spotPrivatePostSupplementCancelOrderBySymbol(self.extend(request, params))
@@ -1796,8 +1963,8 @@ class lbank(Exchange, ImplicitAPI):
1796
1963
  # "ts":1648506641469
1797
1964
  # }
1798
1965
  #
1799
- result = self.safe_value(response, 'data', [])
1800
- return result
1966
+ data = self.safe_list(response, 'data', [])
1967
+ return self.parse_orders(data)
1801
1968
 
1802
1969
  def get_network_code_for_currency(self, currencyCode, params):
1803
1970
  defaultNetworks = self.safe_value(self.options, 'defaultNetworks')
@@ -1807,11 +1974,13 @@ class lbank(Exchange, ImplicitAPI):
1807
1974
  network = self.safe_string(networks, network, network) # handle ERC20>ETH alias
1808
1975
  return network
1809
1976
 
1810
- async def fetch_deposit_address(self, code: str, params={}):
1977
+ async def fetch_deposit_address(self, code: str, params={}) -> DepositAddress:
1811
1978
  """
1812
1979
  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
1980
+
1981
+ https://www.lbank.com/en-US/docs/index.html#get-deposit-address
1982
+ https://www.lbank.com/en-US/docs/index.html#the-user-obtains-the-deposit-address
1983
+
1815
1984
  :param str code: unified currency code
1816
1985
  :param dict [params]: extra parameters specific to the exchange API endpoint
1817
1986
  :returns dict: an `address structure <https://docs.ccxt.com/#/?id=address-structure>`
@@ -1828,10 +1997,10 @@ class lbank(Exchange, ImplicitAPI):
1828
1997
  response = await self.fetch_deposit_address_default(code, params)
1829
1998
  return response
1830
1999
 
1831
- async def fetch_deposit_address_default(self, code: str, params={}):
2000
+ async def fetch_deposit_address_default(self, code: str, params={}) -> DepositAddress:
1832
2001
  await self.load_markets()
1833
2002
  currency = self.currency(code)
1834
- request = {
2003
+ request: dict = {
1835
2004
  'assetCode': currency['id'],
1836
2005
  }
1837
2006
  network = self.get_network_code_for_currency(code, params)
@@ -1859,18 +2028,18 @@ class lbank(Exchange, ImplicitAPI):
1859
2028
  inverseNetworks = self.safe_value(self.options, 'inverse-networks', {})
1860
2029
  networkCode = self.safe_string_upper(inverseNetworks, networkId, networkId)
1861
2030
  return {
2031
+ 'info': response,
1862
2032
  'currency': code,
2033
+ 'network': networkCode,
1863
2034
  'address': address,
1864
2035
  'tag': tag,
1865
- 'network': networkCode,
1866
- 'info': response,
1867
2036
  }
1868
2037
 
1869
- async def fetch_deposit_address_supplement(self, code: str, params={}):
2038
+ async def fetch_deposit_address_supplement(self, code: str, params={}) -> DepositAddress:
1870
2039
  # returns the address for whatever the default network is...
1871
2040
  await self.load_markets()
1872
2041
  currency = self.currency(code)
1873
- request = {
2042
+ request: dict = {
1874
2043
  'coin': currency['id'],
1875
2044
  }
1876
2045
  networks = self.safe_value(self.options, 'networks')
@@ -1898,17 +2067,19 @@ class lbank(Exchange, ImplicitAPI):
1898
2067
  inverseNetworks = self.safe_value(self.options, 'inverse-networks', {})
1899
2068
  networkCode = self.safe_string_upper(inverseNetworks, network, network)
1900
2069
  return {
2070
+ 'info': response,
1901
2071
  'currency': code,
2072
+ 'network': networkCode, # will be None if not specified in request
1902
2073
  'address': address,
1903
2074
  'tag': tag,
1904
- 'network': networkCode, # will be None if not specified in request
1905
- 'info': response,
1906
2075
  }
1907
2076
 
1908
- async def withdraw(self, code: str, amount: float, address, tag=None, params={}) -> Transaction:
2077
+ async def withdraw(self, code: str, amount: float, address: str, tag=None, params={}) -> Transaction:
1909
2078
  """
1910
2079
  make a withdrawal
1911
- :see: https://www.lbank.com/en-US/docs/index.html#withdrawal
2080
+
2081
+ https://www.lbank.com/en-US/docs/index.html#withdrawal
2082
+
1912
2083
  :param str code: unified currency code
1913
2084
  :param float amount: the amount to withdraw
1914
2085
  :param str address: the address to withdraw to
@@ -1924,7 +2095,7 @@ class lbank(Exchange, ImplicitAPI):
1924
2095
  # 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
2096
  self.check_required_argument('withdraw', fee, 'fee')
1926
2097
  currency = self.currency(code)
1927
- request = {
2098
+ request: dict = {
1928
2099
  'address': address,
1929
2100
  'coin': currency['id'],
1930
2101
  'amount': amount,
@@ -1963,7 +2134,7 @@ class lbank(Exchange, ImplicitAPI):
1963
2134
  }
1964
2135
 
1965
2136
  def parse_transaction_status(self, status, type):
1966
- statuses = {
2137
+ statuses: dict = {
1967
2138
  'deposit': {
1968
2139
  '1': 'pending',
1969
2140
  '2': 'ok',
@@ -1980,7 +2151,7 @@ class lbank(Exchange, ImplicitAPI):
1980
2151
  }
1981
2152
  return self.safe_string(self.safe_value(statuses, type, {}), status, status)
1982
2153
 
1983
- def parse_transaction(self, transaction, currency: Currency = None) -> Transaction:
2154
+ def parse_transaction(self, transaction: dict, currency: Currency = None) -> Transaction:
1984
2155
  #
1985
2156
  # fetchDeposits(private)
1986
2157
  #
@@ -2065,7 +2236,9 @@ class lbank(Exchange, ImplicitAPI):
2065
2236
  async def fetch_deposits(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
2066
2237
  """
2067
2238
  fetch all deposits made to an account
2068
- :see: https://www.lbank.com/en-US/docs/index.html#get-recharge-history
2239
+
2240
+ https://www.lbank.com/en-US/docs/index.html#get-recharge-history
2241
+
2069
2242
  :param str code: unified currency code
2070
2243
  :param int [since]: the earliest time in ms to fetch deposits for
2071
2244
  :param int [limit]: the maximum number of deposits structures to retrieve
@@ -2073,7 +2246,7 @@ class lbank(Exchange, ImplicitAPI):
2073
2246
  :returns dict[]: a list of `transaction structures <https://docs.ccxt.com/#/?id=transaction-structure>`
2074
2247
  """
2075
2248
  await self.load_markets()
2076
- request = {
2249
+ request: dict = {
2077
2250
  # 'status': Recharge status: ("1","Applying"),("2","Recharge successful"),("3","Recharge failed"),("4","Already Cancel"),("5", "Transfer")
2078
2251
  # 'endTime': end time, timestamp in milliseconds, default now
2079
2252
  }
@@ -2108,13 +2281,15 @@ class lbank(Exchange, ImplicitAPI):
2108
2281
  # }
2109
2282
  #
2110
2283
  data = self.safe_value(response, 'data', {})
2111
- deposits = self.safe_value(data, 'depositOrders', [])
2284
+ deposits = self.safe_list(data, 'depositOrders', [])
2112
2285
  return self.parse_transactions(deposits, currency, since, limit)
2113
2286
 
2114
2287
  async def fetch_withdrawals(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
2115
2288
  """
2116
2289
  fetch all withdrawals made from an account
2117
- :see: https://www.lbank.com/en-US/docs/index.html#get-withdrawal-history
2290
+
2291
+ https://www.lbank.com/en-US/docs/index.html#get-withdrawal-history
2292
+
2118
2293
  :param str code: unified currency code
2119
2294
  :param int [since]: the earliest time in ms to fetch withdrawals for
2120
2295
  :param int [limit]: the maximum number of withdrawals structures to retrieve
@@ -2122,7 +2297,7 @@ class lbank(Exchange, ImplicitAPI):
2122
2297
  :returns dict[]: a list of `transaction structures <https://docs.ccxt.com/#/?id=transaction-structure>`
2123
2298
  """
2124
2299
  await self.load_markets()
2125
- request = {
2300
+ request: dict = {
2126
2301
  # 'status': Recharge status: ("1","Applying"),("2","Recharge successful"),("3","Recharge failed"),("4","Already Cancel"),("5", "Transfer")
2127
2302
  # 'endTime': end time, timestamp in milliseconds, default now
2128
2303
  # 'withdrawOrderId': Custom withdrawal id
@@ -2161,12 +2336,12 @@ class lbank(Exchange, ImplicitAPI):
2161
2336
  # }
2162
2337
  #
2163
2338
  data = self.safe_value(response, 'data', {})
2164
- withdraws = self.safe_value(data, 'withdraws', [])
2339
+ withdraws = self.safe_list(data, 'withdraws', [])
2165
2340
  return self.parse_transactions(withdraws, currency, since, limit)
2166
2341
 
2167
- async def fetch_transaction_fees(self, codes: List[str] = None, params={}):
2342
+ async def fetch_transaction_fees(self, codes: Strings = None, params={}):
2168
2343
  """
2169
- * @deprecated
2344
+ @deprecated
2170
2345
  please use fetchDepositWithdrawFees instead
2171
2346
  :param str[]|None codes: not used by lbank fetchTransactionFees()
2172
2347
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -2225,7 +2400,7 @@ class lbank(Exchange, ImplicitAPI):
2225
2400
  # }
2226
2401
  #
2227
2402
  result = self.safe_value(response, 'data', [])
2228
- withdrawFees = {}
2403
+ withdrawFees: dict = {}
2229
2404
  for i in range(0, len(result)):
2230
2405
  entry = result[i]
2231
2406
  currencyId = self.safe_string(entry, 'coin')
@@ -2251,7 +2426,7 @@ class lbank(Exchange, ImplicitAPI):
2251
2426
  await self.load_markets()
2252
2427
  code = self.safe_string_2(params, 'coin', 'assetCode')
2253
2428
  params = self.omit(params, ['coin', 'assetCode'])
2254
- request = {}
2429
+ request: dict = {}
2255
2430
  if code is not None:
2256
2431
  currency = self.currency(code)
2257
2432
  request['assetCode'] = currency['id']
@@ -2278,7 +2453,7 @@ class lbank(Exchange, ImplicitAPI):
2278
2453
  # }
2279
2454
  #
2280
2455
  result = self.safe_value(response, 'data', [])
2281
- withdrawFees = {}
2456
+ withdrawFees: dict = {}
2282
2457
  for i in range(0, len(result)):
2283
2458
  item = result[i]
2284
2459
  canWithdraw = self.safe_value(item, 'canWithDraw')
@@ -2302,9 +2477,11 @@ class lbank(Exchange, ImplicitAPI):
2302
2477
  async def fetch_deposit_withdraw_fees(self, codes: Strings = None, params={}):
2303
2478
  """
2304
2479
  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
2480
+
2481
+ https://www.lbank.com/en-US/docs/index.html#get-all-coins-information
2482
+ https://www.lbank.com/en-US/docs/index.html#withdrawal-configurations
2483
+
2484
+ :param str[] [codes]: array of unified currency codes
2308
2485
  :param dict [params]: extra parameters specific to the exchange API endpoint
2309
2486
  :returns dict: a list of `fee structures <https://docs.ccxt.com/#/?id=fee-structure>`
2310
2487
  """
@@ -2317,11 +2494,11 @@ class lbank(Exchange, ImplicitAPI):
2317
2494
  method = self.safe_string(params, 'method', defaultMethod)
2318
2495
  params = self.omit(params, 'method')
2319
2496
  if method == 'fetchPublicDepositWithdrawFees':
2320
- await self.fetch_public_deposit_withdraw_fees(codes, params)
2497
+ response = await self.fetch_public_deposit_withdraw_fees(codes, params)
2321
2498
  else:
2322
- await self.fetch_private_deposit_withdraw_fees(codes, params)
2499
+ response = await self.fetch_private_deposit_withdraw_fees(codes, params)
2323
2500
  else:
2324
- await self.fetch_public_deposit_withdraw_fees(codes, params)
2501
+ response = await self.fetch_public_deposit_withdraw_fees(codes, params)
2325
2502
  return response
2326
2503
 
2327
2504
  async def fetch_private_deposit_withdraw_fees(self, codes=None, params={}):
@@ -2359,14 +2536,14 @@ class lbank(Exchange, ImplicitAPI):
2359
2536
  # "code": 0
2360
2537
  # }
2361
2538
  #
2362
- data = self.safe_value(response, 'data', [])
2539
+ data = self.safe_list(response, 'data', [])
2363
2540
  return self.parse_deposit_withdraw_fees(data, codes, 'coin')
2364
2541
 
2365
2542
  async def fetch_public_deposit_withdraw_fees(self, codes=None, params={}):
2366
2543
  # extremely incomplete response
2367
2544
  # vast majority fees None
2368
2545
  await self.load_markets()
2369
- request = {}
2546
+ request: dict = {}
2370
2547
  response = await self.spotPublicGetWithdrawConfigs(self.extend(request, params))
2371
2548
  #
2372
2549
  # {
@@ -2409,7 +2586,7 @@ class lbank(Exchange, ImplicitAPI):
2409
2586
  # ...
2410
2587
  # ]
2411
2588
  #
2412
- result = {}
2589
+ result: dict = {}
2413
2590
  for i in range(0, len(response)):
2414
2591
  fee = response[i]
2415
2592
  canWithdraw = self.safe_value(fee, 'canWithDraw')
@@ -2564,7 +2741,7 @@ class lbank(Exchange, ImplicitAPI):
2564
2741
  pem += self.secret[start:end] + "\n" # eslint-disable-line
2565
2742
  return pem + '-----END PRIVATE KEY-----'
2566
2743
 
2567
- def handle_errors(self, httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody):
2744
+ def handle_errors(self, httpCode: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
2568
2745
  if response is None:
2569
2746
  return None
2570
2747
  success = self.safe_value(response, 'result')