ccxt-ir 4.3.46.0.3__py2.py3-none-any.whl → 4.5.0__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 (529) hide show
  1. ccxt/__init__.py +39 -35
  2. ccxt/abantether.py +8 -8
  3. ccxt/abstract/alpaca.py +4 -0
  4. ccxt/abstract/apex.py +31 -0
  5. ccxt/abstract/bigone.py +1 -1
  6. ccxt/abstract/binance.py +106 -48
  7. ccxt/abstract/binancecoinm.py +106 -48
  8. ccxt/abstract/binanceus.py +141 -83
  9. ccxt/abstract/binanceusdm.py +106 -48
  10. ccxt/abstract/bingx.py +50 -1
  11. ccxt/abstract/bitbank.py +5 -0
  12. ccxt/abstract/bitfinex.py +136 -65
  13. ccxt/abstract/bitflyer.py +1 -0
  14. ccxt/abstract/bitget.py +67 -0
  15. ccxt/abstract/bitmart.py +19 -1
  16. ccxt/abstract/bitopro.py +1 -0
  17. ccxt/abstract/bitrue.py +68 -68
  18. ccxt/abstract/bitstamp.py +1 -0
  19. ccxt/abstract/blofin.py +30 -0
  20. ccxt/abstract/btcbox.py +2 -0
  21. ccxt/abstract/bybit.py +28 -13
  22. ccxt/abstract/cex.py +28 -29
  23. ccxt/abstract/coinbaseexchange.py +1 -0
  24. ccxt/abstract/coinbaseinternational.py +1 -1
  25. ccxt/abstract/cryptocom.py +16 -0
  26. ccxt/abstract/cryptomus.py +20 -0
  27. ccxt/abstract/defx.py +69 -0
  28. ccxt/abstract/deribit.py +1 -0
  29. ccxt/abstract/derive.py +117 -0
  30. ccxt/abstract/digifinex.py +1 -0
  31. ccxt/abstract/ellipx.py +25 -0
  32. ccxt/abstract/foxbit.py +26 -0
  33. ccxt/abstract/gate.py +19 -0
  34. ccxt/abstract/gateio.py +19 -0
  35. ccxt/abstract/gemini.py +1 -0
  36. ccxt/abstract/hibachi.py +26 -0
  37. ccxt/abstract/hyperliquid.py +1 -1
  38. ccxt/abstract/independentreserve.py +6 -0
  39. ccxt/abstract/kraken.py +1 -0
  40. ccxt/abstract/krakenfutures.py +4 -0
  41. ccxt/abstract/kucoin.py +10 -0
  42. ccxt/abstract/kucoinfutures.py +18 -0
  43. ccxt/abstract/lbank.py +2 -1
  44. ccxt/abstract/luno.py +1 -0
  45. ccxt/abstract/mexc.py +2 -0
  46. ccxt/abstract/modetrade.py +119 -0
  47. ccxt/abstract/myokx.py +349 -0
  48. ccxt/abstract/oceanex.py +5 -0
  49. ccxt/abstract/okx.py +25 -0
  50. ccxt/abstract/okxus.py +349 -0
  51. ccxt/abstract/onetrading.py +0 -12
  52. ccxt/abstract/paradex.py +23 -0
  53. ccxt/abstract/phemex.py +2 -0
  54. ccxt/abstract/poloniex.py +36 -0
  55. ccxt/abstract/tradeogre.py +3 -1
  56. ccxt/abstract/upbit.py +51 -34
  57. ccxt/abstract/whitebit.py +16 -0
  58. ccxt/abstract/woo.py +64 -6
  59. ccxt/abstract/xt.py +10 -5
  60. ccxt/afratether.py +7 -7
  61. ccxt/alpaca.py +828 -51
  62. ccxt/apex.py +1875 -0
  63. ccxt/arzinja.py +7 -7
  64. ccxt/arzplus.py +9 -9
  65. ccxt/ascendex.py +501 -306
  66. ccxt/async_support/__init__.py +39 -35
  67. ccxt/async_support/abantether.py +8 -8
  68. ccxt/async_support/afratether.py +9 -9
  69. ccxt/async_support/alpaca.py +828 -51
  70. ccxt/async_support/apex.py +1875 -0
  71. ccxt/async_support/arzinja.py +10 -10
  72. ccxt/async_support/arzplus.py +12 -12
  73. ccxt/async_support/ascendex.py +502 -306
  74. ccxt/async_support/base/exchange.py +303 -89
  75. ccxt/async_support/base/ws/cache.py +9 -3
  76. ccxt/async_support/base/ws/client.py +173 -38
  77. ccxt/async_support/base/ws/future.py +25 -37
  78. ccxt/async_support/bequant.py +5 -3
  79. ccxt/async_support/bigone.py +279 -144
  80. ccxt/async_support/binance.py +2347 -1158
  81. ccxt/async_support/binancecoinm.py +9 -3
  82. ccxt/async_support/binanceus.py +17 -3
  83. ccxt/async_support/binanceusdm.py +9 -4
  84. ccxt/async_support/bingx.py +2962 -920
  85. ccxt/async_support/bit2c.py +147 -27
  86. ccxt/async_support/bitbank.py +151 -23
  87. ccxt/async_support/bitbns.py +104 -30
  88. ccxt/async_support/bitfinex.py +3291 -1113
  89. ccxt/async_support/bitflyer.py +202 -27
  90. ccxt/async_support/bitget.py +3683 -1538
  91. ccxt/async_support/bithumb.py +195 -38
  92. ccxt/async_support/bitimen.py +12 -12
  93. ccxt/async_support/bitir.py +38 -38
  94. ccxt/async_support/bitmart.py +1288 -350
  95. ccxt/async_support/bitmex.py +260 -75
  96. ccxt/async_support/bitopro.py +262 -62
  97. ccxt/async_support/bitpin.py +17 -16
  98. ccxt/async_support/bitrue.py +459 -290
  99. ccxt/async_support/bitso.py +199 -54
  100. ccxt/async_support/bitstamp.py +230 -96
  101. ccxt/async_support/bitteam.py +167 -25
  102. ccxt/async_support/{huobijp.py → bittrade.py} +158 -30
  103. ccxt/async_support/bitvavo.py +213 -49
  104. ccxt/async_support/blockchaincom.py +160 -46
  105. ccxt/async_support/blofin.py +502 -120
  106. ccxt/async_support/btcalpha.py +169 -31
  107. ccxt/async_support/btcbox.py +292 -23
  108. ccxt/async_support/btcmarkets.py +211 -58
  109. ccxt/async_support/btcturk.py +161 -38
  110. ccxt/async_support/bybit.py +1775 -1030
  111. ccxt/async_support/cex.py +1440 -1303
  112. ccxt/async_support/coinbase.py +724 -212
  113. ccxt/async_support/coinbaseadvanced.py +2 -1
  114. ccxt/async_support/coinbaseexchange.py +388 -89
  115. ccxt/async_support/coinbaseinternational.py +412 -57
  116. ccxt/async_support/coincatch.py +177 -78
  117. ccxt/async_support/coincheck.py +135 -19
  118. ccxt/async_support/coinex.py +606 -232
  119. ccxt/async_support/coinmate.py +189 -63
  120. ccxt/async_support/coinmetro.py +195 -54
  121. ccxt/async_support/coinone.py +158 -51
  122. ccxt/async_support/coinsph.py +336 -61
  123. ccxt/async_support/coinspot.py +151 -52
  124. ccxt/async_support/cryptocom.py +661 -111
  125. ccxt/async_support/cryptomus.py +1137 -0
  126. ccxt/async_support/defx.py +2071 -0
  127. ccxt/async_support/delta.py +299 -99
  128. ccxt/async_support/deribit.py +348 -126
  129. ccxt/async_support/derive.py +2572 -0
  130. ccxt/async_support/digifinex.py +430 -214
  131. ccxt/async_support/ellipx.py +2029 -0
  132. ccxt/async_support/eterex.py +10 -10
  133. ccxt/async_support/excoino.py +31 -31
  134. ccxt/async_support/exir.py +14 -14
  135. ccxt/async_support/exmo.py +344 -131
  136. ccxt/async_support/exnovin.py +10 -10
  137. ccxt/async_support/farhadexchange.py +12 -12
  138. ccxt/async_support/fmfwio.py +2 -1
  139. ccxt/async_support/foxbit.py +1935 -0
  140. ccxt/async_support/gate.py +1351 -529
  141. ccxt/async_support/gateio.py +2 -1
  142. ccxt/async_support/gemini.py +144 -39
  143. ccxt/async_support/hashkey.py +152 -109
  144. ccxt/async_support/hibachi.py +2080 -0
  145. ccxt/async_support/hitbtc.py +395 -167
  146. ccxt/async_support/hitobit.py +12 -12
  147. ccxt/async_support/hollaex.py +307 -119
  148. ccxt/async_support/htx.py +851 -383
  149. ccxt/async_support/huobi.py +2 -1
  150. ccxt/async_support/hyperliquid.py +1848 -536
  151. ccxt/async_support/independentreserve.py +288 -15
  152. ccxt/async_support/indodax.py +190 -33
  153. ccxt/async_support/jibitex.py +12 -12
  154. ccxt/async_support/kraken.py +795 -351
  155. ccxt/async_support/krakenfutures.py +214 -62
  156. ccxt/async_support/kucoin.py +715 -396
  157. ccxt/async_support/kucoinfutures.py +652 -89
  158. ccxt/async_support/latoken.py +217 -113
  159. ccxt/async_support/lbank.py +425 -97
  160. ccxt/async_support/luno.py +382 -35
  161. ccxt/async_support/mercado.py +113 -6
  162. ccxt/async_support/mexc.py +874 -437
  163. ccxt/async_support/modetrade.py +2818 -0
  164. ccxt/async_support/myokx.py +54 -0
  165. ccxt/async_support/ndax.py +221 -64
  166. ccxt/async_support/nobitex.py +31 -37
  167. ccxt/async_support/novadax.py +190 -34
  168. ccxt/async_support/oceanex.py +217 -28
  169. ccxt/async_support/okcoin.py +253 -145
  170. ccxt/async_support/okexchange.py +11 -11
  171. ccxt/async_support/okx.py +1088 -351
  172. ccxt/async_support/okxus.py +54 -0
  173. ccxt/async_support/ompfinex.py +25 -24
  174. ccxt/async_support/onetrading.py +213 -392
  175. ccxt/async_support/oxfun.py +245 -166
  176. ccxt/async_support/p2b.py +151 -29
  177. ccxt/async_support/paradex.py +562 -49
  178. ccxt/async_support/paymium.py +82 -19
  179. ccxt/async_support/phemex.py +713 -172
  180. ccxt/async_support/poloniex.py +1602 -283
  181. ccxt/async_support/probit.py +224 -95
  182. ccxt/async_support/ramzinex.py +30 -27
  183. ccxt/async_support/sarmayex.py +9 -9
  184. ccxt/async_support/sarrafex.py +13 -13
  185. ccxt/async_support/tabdeal.py +14 -13
  186. ccxt/async_support/tetherland.py +9 -9
  187. ccxt/async_support/timex.py +210 -51
  188. ccxt/async_support/tokocrypto.py +167 -47
  189. ccxt/async_support/tradeogre.py +266 -31
  190. ccxt/async_support/twox.py +9 -9
  191. ccxt/async_support/ubitex.py +12 -12
  192. ccxt/async_support/upbit.py +568 -165
  193. ccxt/async_support/vertex.py +160 -32
  194. ccxt/async_support/wallex.py +12 -12
  195. ccxt/async_support/wavesexchange.py +165 -30
  196. ccxt/async_support/whitebit.py +975 -127
  197. ccxt/async_support/woo.py +1918 -1016
  198. ccxt/async_support/woofipro.py +433 -141
  199. ccxt/async_support/xt.py +649 -193
  200. ccxt/async_support/yobit.py +195 -70
  201. ccxt/async_support/zaif.py +91 -15
  202. ccxt/async_support/zonda.py +151 -36
  203. ccxt/base/decimal_to_precision.py +14 -10
  204. ccxt/base/errors.py +49 -18
  205. ccxt/base/exchange.py +1556 -450
  206. ccxt/base/precise.py +10 -0
  207. ccxt/base/types.py +114 -6
  208. ccxt/bequant.py +5 -3
  209. ccxt/bigone.py +279 -144
  210. ccxt/binance.py +2347 -1158
  211. ccxt/binancecoinm.py +9 -3
  212. ccxt/binanceus.py +17 -3
  213. ccxt/binanceusdm.py +9 -4
  214. ccxt/bingx.py +2962 -920
  215. ccxt/bit2c.py +147 -27
  216. ccxt/bitbank.py +151 -23
  217. ccxt/bitbns.py +104 -30
  218. ccxt/bitfinex.py +3290 -1113
  219. ccxt/bitflyer.py +202 -27
  220. ccxt/bitget.py +3683 -1538
  221. ccxt/bithumb.py +194 -38
  222. ccxt/bitimen.py +9 -9
  223. ccxt/bitir.py +35 -35
  224. ccxt/bitmart.py +1288 -350
  225. ccxt/bitmex.py +260 -75
  226. ccxt/bitopro.py +262 -62
  227. ccxt/bitpin.py +15 -14
  228. ccxt/bitrue.py +459 -290
  229. ccxt/bitso.py +199 -54
  230. ccxt/bitstamp.py +230 -96
  231. ccxt/bitteam.py +167 -25
  232. ccxt/{huobijp.py → bittrade.py} +158 -30
  233. ccxt/bitvavo.py +213 -49
  234. ccxt/blockchaincom.py +160 -46
  235. ccxt/blofin.py +502 -120
  236. ccxt/btcalpha.py +169 -31
  237. ccxt/btcbox.py +291 -23
  238. ccxt/btcmarkets.py +211 -58
  239. ccxt/btcturk.py +161 -38
  240. ccxt/bybit.py +1775 -1030
  241. ccxt/cex.py +1439 -1303
  242. ccxt/coinbase.py +724 -212
  243. ccxt/coinbaseadvanced.py +2 -1
  244. ccxt/coinbaseexchange.py +388 -89
  245. ccxt/coinbaseinternational.py +412 -57
  246. ccxt/coincatch.py +177 -78
  247. ccxt/coincheck.py +135 -19
  248. ccxt/coinex.py +606 -232
  249. ccxt/coinmate.py +189 -63
  250. ccxt/coinmetro.py +194 -54
  251. ccxt/coinone.py +158 -51
  252. ccxt/coinsph.py +336 -61
  253. ccxt/coinspot.py +151 -52
  254. ccxt/cryptocom.py +661 -111
  255. ccxt/cryptomus.py +1137 -0
  256. ccxt/defx.py +2070 -0
  257. ccxt/delta.py +299 -99
  258. ccxt/deribit.py +348 -126
  259. ccxt/derive.py +2571 -0
  260. ccxt/digifinex.py +430 -214
  261. ccxt/ellipx.py +2029 -0
  262. ccxt/eterex.py +7 -7
  263. ccxt/excoino.py +29 -29
  264. ccxt/exir.py +11 -11
  265. ccxt/exmo.py +343 -131
  266. ccxt/exnovin.py +8 -8
  267. ccxt/farhadexchange.py +10 -10
  268. ccxt/fmfwio.py +2 -1
  269. ccxt/foxbit.py +1935 -0
  270. ccxt/gate.py +1351 -529
  271. ccxt/gateio.py +2 -1
  272. ccxt/gemini.py +144 -39
  273. ccxt/hashkey.py +152 -109
  274. ccxt/hibachi.py +2079 -0
  275. ccxt/hitbtc.py +395 -167
  276. ccxt/hitobit.py +9 -9
  277. ccxt/hollaex.py +307 -119
  278. ccxt/htx.py +851 -383
  279. ccxt/huobi.py +2 -1
  280. ccxt/hyperliquid.py +1848 -536
  281. ccxt/independentreserve.py +287 -15
  282. ccxt/indodax.py +190 -33
  283. ccxt/jibitex.py +9 -9
  284. ccxt/kraken.py +794 -351
  285. ccxt/krakenfutures.py +214 -62
  286. ccxt/kucoin.py +715 -396
  287. ccxt/kucoinfutures.py +652 -89
  288. ccxt/latoken.py +217 -113
  289. ccxt/lbank.py +425 -97
  290. ccxt/luno.py +382 -35
  291. ccxt/mercado.py +113 -6
  292. ccxt/mexc.py +873 -437
  293. ccxt/modetrade.py +2818 -0
  294. ccxt/myokx.py +54 -0
  295. ccxt/ndax.py +221 -64
  296. ccxt/nobitex.py +29 -35
  297. ccxt/novadax.py +190 -34
  298. ccxt/oceanex.py +217 -28
  299. ccxt/okcoin.py +253 -145
  300. ccxt/okexchange.py +9 -9
  301. ccxt/okx.py +1088 -351
  302. ccxt/okxus.py +54 -0
  303. ccxt/ompfinex.py +22 -21
  304. ccxt/onetrading.py +213 -392
  305. ccxt/oxfun.py +245 -166
  306. ccxt/p2b.py +151 -29
  307. ccxt/paradex.py +562 -49
  308. ccxt/paymium.py +82 -19
  309. ccxt/phemex.py +712 -172
  310. ccxt/poloniex.py +1601 -283
  311. ccxt/pro/__init__.py +76 -17
  312. ccxt/pro/alpaca.py +21 -6
  313. ccxt/pro/apex.py +984 -0
  314. ccxt/pro/ascendex.py +58 -10
  315. ccxt/pro/bequant.py +6 -1
  316. ccxt/pro/binance.py +728 -156
  317. ccxt/pro/binancecoinm.py +6 -2
  318. ccxt/pro/binanceus.py +8 -4
  319. ccxt/pro/binanceusdm.py +7 -2
  320. ccxt/pro/bingx.py +333 -142
  321. ccxt/pro/bitfinex.py +727 -262
  322. ccxt/pro/bitget.py +570 -79
  323. ccxt/pro/bithumb.py +20 -6
  324. ccxt/pro/bitmart.py +216 -87
  325. ccxt/pro/bitmex.py +47 -9
  326. ccxt/pro/bitopro.py +26 -14
  327. ccxt/pro/bitrue.py +22 -22
  328. ccxt/pro/bitstamp.py +54 -21
  329. ccxt/pro/{huobijp.py → bittrade.py} +7 -6
  330. ccxt/pro/bitvavo.py +191 -67
  331. ccxt/pro/blockchaincom.py +21 -8
  332. ccxt/pro/blofin.py +9 -1
  333. ccxt/pro/bybit.py +632 -245
  334. ccxt/pro/cex.py +59 -24
  335. ccxt/pro/coinbase.py +102 -73
  336. ccxt/pro/coinbaseadvanced.py +2 -1
  337. ccxt/pro/coinbaseexchange.py +8 -8
  338. ccxt/pro/coinbaseinternational.py +181 -25
  339. ccxt/pro/coincatch.py +6 -7
  340. ccxt/pro/coincheck.py +11 -6
  341. ccxt/pro/coinex.py +967 -665
  342. ccxt/pro/coinone.py +16 -9
  343. ccxt/pro/cryptocom.py +448 -45
  344. ccxt/pro/defx.py +831 -0
  345. ccxt/pro/deribit.py +150 -14
  346. ccxt/pro/derive.py +704 -0
  347. ccxt/pro/exmo.py +239 -6
  348. ccxt/pro/gate.py +623 -65
  349. ccxt/pro/gateio.py +2 -1
  350. ccxt/pro/gemini.py +27 -11
  351. ccxt/pro/hashkey.py +2 -2
  352. ccxt/pro/hitbtc.py +196 -91
  353. ccxt/pro/hollaex.py +23 -7
  354. ccxt/pro/htx.py +51 -14
  355. ccxt/pro/huobi.py +2 -1
  356. ccxt/pro/hyperliquid.py +591 -27
  357. ccxt/pro/independentreserve.py +9 -6
  358. ccxt/pro/kraken.py +640 -320
  359. ccxt/pro/krakenfutures.py +62 -35
  360. ccxt/pro/kucoin.py +267 -46
  361. ccxt/pro/kucoinfutures.py +165 -21
  362. ccxt/pro/lbank.py +102 -21
  363. ccxt/pro/luno.py +12 -8
  364. ccxt/pro/mexc.py +877 -111
  365. ccxt/pro/modetrade.py +1271 -0
  366. ccxt/pro/myokx.py +38 -0
  367. ccxt/pro/ndax.py +15 -2
  368. ccxt/pro/okcoin.py +23 -4
  369. ccxt/pro/okx.py +573 -98
  370. ccxt/pro/okxus.py +38 -0
  371. ccxt/pro/onetrading.py +30 -13
  372. ccxt/pro/oxfun.py +131 -27
  373. ccxt/pro/p2b.py +88 -22
  374. ccxt/pro/paradex.py +3 -3
  375. ccxt/pro/phemex.py +75 -21
  376. ccxt/pro/poloniex.py +124 -41
  377. ccxt/pro/probit.py +87 -80
  378. ccxt/pro/tradeogre.py +272 -0
  379. ccxt/pro/upbit.py +152 -12
  380. ccxt/pro/vertex.py +8 -3
  381. ccxt/pro/whitebit.py +58 -5
  382. ccxt/pro/woo.py +228 -37
  383. ccxt/pro/woofipro.py +106 -18
  384. ccxt/pro/xt.py +111 -5
  385. ccxt/probit.py +224 -95
  386. ccxt/protobuf/__init__.py +0 -0
  387. ccxt/protobuf/mexc/PrivateAccountV3Api_pb2.py +37 -0
  388. ccxt/protobuf/mexc/PrivateDealsV3Api_pb2.py +37 -0
  389. ccxt/protobuf/mexc/PrivateOrdersV3Api_pb2.py +37 -0
  390. ccxt/protobuf/mexc/PublicAggreBookTickerV3Api_pb2.py +37 -0
  391. ccxt/protobuf/mexc/PublicAggreDealsV3Api_pb2.py +39 -0
  392. ccxt/protobuf/mexc/PublicAggreDepthsV3Api_pb2.py +39 -0
  393. ccxt/protobuf/mexc/PublicBookTickerBatchV3Api_pb2.py +38 -0
  394. ccxt/protobuf/mexc/PublicBookTickerV3Api_pb2.py +37 -0
  395. ccxt/protobuf/mexc/PublicDealsV3Api_pb2.py +39 -0
  396. ccxt/protobuf/mexc/PublicIncreaseDepthsBatchV3Api_pb2.py +38 -0
  397. ccxt/protobuf/mexc/PublicIncreaseDepthsV3Api_pb2.py +39 -0
  398. ccxt/protobuf/mexc/PublicLimitDepthsV3Api_pb2.py +39 -0
  399. ccxt/protobuf/mexc/PublicMiniTickerV3Api_pb2.py +37 -0
  400. ccxt/protobuf/mexc/PublicMiniTickersV3Api_pb2.py +38 -0
  401. ccxt/protobuf/mexc/PublicSpotKlineV3Api_pb2.py +37 -0
  402. ccxt/protobuf/mexc/PushDataV3ApiWrapper_pb2.py +52 -0
  403. ccxt/protobuf/mexc/__init__.py +0 -0
  404. ccxt/ramzinex.py +28 -25
  405. ccxt/sarmayex.py +7 -7
  406. ccxt/sarrafex.py +10 -10
  407. ccxt/static_dependencies/__init__.py +1 -1
  408. ccxt/static_dependencies/lark/py.typed +0 -0
  409. ccxt/static_dependencies/marshmallow/py.typed +0 -0
  410. ccxt/static_dependencies/marshmallow_dataclass/py.typed +0 -0
  411. ccxt/static_dependencies/marshmallow_oneofschema/py.typed +0 -0
  412. ccxt/tabdeal.py +12 -11
  413. ccxt/test/tests_async.py +261 -57
  414. ccxt/test/tests_helpers.py +1 -3
  415. ccxt/test/tests_init.py +4 -3
  416. ccxt/test/tests_sync.py +261 -57
  417. ccxt/tetherland.py +7 -7
  418. ccxt/timex.py +210 -51
  419. ccxt/tokocrypto.py +167 -47
  420. ccxt/tradeogre.py +266 -31
  421. ccxt/twox.py +7 -7
  422. ccxt/ubitex.py +9 -9
  423. ccxt/upbit.py +568 -165
  424. ccxt/vertex.py +160 -32
  425. ccxt/wallex.py +9 -9
  426. ccxt/wavesexchange.py +165 -30
  427. ccxt/whitebit.py +975 -127
  428. ccxt/woo.py +1917 -1016
  429. ccxt/woofipro.py +432 -141
  430. ccxt/xt.py +649 -193
  431. ccxt/yobit.py +194 -70
  432. ccxt/zaif.py +91 -15
  433. ccxt/zonda.py +151 -36
  434. {ccxt_ir-4.3.46.0.3.dist-info → ccxt_ir-4.5.0.dist-info}/METADATA +225 -73
  435. ccxt_ir-4.5.0.dist-info/RECORD +743 -0
  436. {ccxt_ir-4.3.46.0.3.dist-info → ccxt_ir-4.5.0.dist-info}/WHEEL +1 -1
  437. ccxt/__test__.py +0 -7
  438. ccxt/abstract/ace.py +0 -15
  439. ccxt/abstract/bitbay.py +0 -53
  440. ccxt/abstract/bitcoincom.py +0 -115
  441. ccxt/abstract/bitfinex2.py +0 -139
  442. ccxt/abstract/bitpanda.py +0 -35
  443. ccxt/abstract/bl3p.py +0 -19
  444. ccxt/abstract/coinlist.py +0 -54
  445. ccxt/abstract/currencycom.py +0 -68
  446. ccxt/abstract/hitbtc3.py +0 -115
  447. ccxt/abstract/idex.py +0 -26
  448. ccxt/abstract/kuna.py +0 -182
  449. ccxt/abstract/lykke.py +0 -29
  450. ccxt/abstract/poloniexfutures.py +0 -48
  451. ccxt/abstract/wazirx.py +0 -30
  452. ccxt/ace.py +0 -1012
  453. ccxt/async_support/ace.py +0 -1012
  454. ccxt/async_support/base/ws/aiohttp_client.py +0 -125
  455. ccxt/async_support/base/ws/fast_client.py +0 -96
  456. ccxt/async_support/bitbay.py +0 -17
  457. ccxt/async_support/bitcoincom.py +0 -17
  458. ccxt/async_support/bitfinex2.py +0 -3552
  459. ccxt/async_support/bitpanda.py +0 -16
  460. ccxt/async_support/bl3p.py +0 -485
  461. ccxt/async_support/coinlist.py +0 -2243
  462. ccxt/async_support/currencycom.py +0 -1950
  463. ccxt/async_support/hitbtc3.py +0 -16
  464. ccxt/async_support/idex.py +0 -1766
  465. ccxt/async_support/kuna.py +0 -1841
  466. ccxt/async_support/lykke.py +0 -1270
  467. ccxt/async_support/poloniexfutures.py +0 -1717
  468. ccxt/async_support/wazirx.py +0 -1224
  469. ccxt/bitbay.py +0 -17
  470. ccxt/bitcoincom.py +0 -17
  471. ccxt/bitfinex2.py +0 -3552
  472. ccxt/bitpanda.py +0 -16
  473. ccxt/bl3p.py +0 -485
  474. ccxt/coinlist.py +0 -2243
  475. ccxt/currencycom.py +0 -1950
  476. ccxt/hitbtc3.py +0 -16
  477. ccxt/idex.py +0 -1766
  478. ccxt/kuna.py +0 -1841
  479. ccxt/lykke.py +0 -1270
  480. ccxt/poloniexfutures.py +0 -1717
  481. ccxt/pro/bitcoincom.py +0 -34
  482. ccxt/pro/bitfinex2.py +0 -1083
  483. ccxt/pro/bitpanda.py +0 -15
  484. ccxt/pro/currencycom.py +0 -536
  485. ccxt/pro/idex.py +0 -672
  486. ccxt/pro/poloniexfutures.py +0 -990
  487. ccxt/pro/wazirx.py +0 -749
  488. ccxt/test/base/__init__.py +0 -29
  489. ccxt/test/base/test_account.py +0 -26
  490. ccxt/test/base/test_balance.py +0 -56
  491. ccxt/test/base/test_borrow_interest.py +0 -35
  492. ccxt/test/base/test_borrow_rate.py +0 -32
  493. ccxt/test/base/test_calculate_fee.py +0 -51
  494. ccxt/test/base/test_crypto.py +0 -127
  495. ccxt/test/base/test_currency.py +0 -76
  496. ccxt/test/base/test_datetime.py +0 -109
  497. ccxt/test/base/test_decimal_to_precision.py +0 -392
  498. ccxt/test/base/test_deep_extend.py +0 -68
  499. ccxt/test/base/test_deposit_withdrawal.py +0 -50
  500. ccxt/test/base/test_exchange_datetime_functions.py +0 -76
  501. ccxt/test/base/test_funding_rate_history.py +0 -29
  502. ccxt/test/base/test_last_price.py +0 -31
  503. ccxt/test/base/test_ledger_entry.py +0 -45
  504. ccxt/test/base/test_ledger_item.py +0 -48
  505. ccxt/test/base/test_leverage_tier.py +0 -33
  506. ccxt/test/base/test_liquidation.py +0 -50
  507. ccxt/test/base/test_margin_mode.py +0 -24
  508. ccxt/test/base/test_margin_modification.py +0 -35
  509. ccxt/test/base/test_market.py +0 -193
  510. ccxt/test/base/test_number.py +0 -411
  511. ccxt/test/base/test_ohlcv.py +0 -33
  512. ccxt/test/base/test_open_interest.py +0 -32
  513. ccxt/test/base/test_order.py +0 -64
  514. ccxt/test/base/test_order_book.py +0 -69
  515. ccxt/test/base/test_position.py +0 -60
  516. ccxt/test/base/test_shared_methods.py +0 -353
  517. ccxt/test/base/test_status.py +0 -24
  518. ccxt/test/base/test_throttle.py +0 -126
  519. ccxt/test/base/test_ticker.py +0 -92
  520. ccxt/test/base/test_trade.py +0 -47
  521. ccxt/test/base/test_trading_fee.py +0 -26
  522. ccxt/test/base/test_transaction.py +0 -39
  523. ccxt/test/test_async.py +0 -1649
  524. ccxt/test/test_sync.py +0 -1648
  525. ccxt/wazirx.py +0 -1224
  526. ccxt_ir-4.3.46.0.3.dist-info/RECORD +0 -773
  527. /ccxt/abstract/{huobijp.py → bittrade.py} +0 -0
  528. {ccxt_ir-4.3.46.0.3.dist-info → ccxt_ir-4.5.0.dist-info/licenses}/LICENSE.txt +0 -0
  529. {ccxt_ir-4.3.46.0.3.dist-info → ccxt_ir-4.5.0.dist-info}/top_level.txt +0 -0
@@ -7,7 +7,7 @@ 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, TradingFeeInterface, TradingFees, Transaction
10
+ from ccxt.base.types import Any, Balances, Currencies, 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
13
  from ccxt.base.errors import AuthenticationError
@@ -28,7 +28,7 @@ from ccxt.base.precise import Precise
28
28
 
29
29
  class lbank(Exchange, ImplicitAPI):
30
30
 
31
- def describe(self):
31
+ def describe(self) -> Any:
32
32
  return self.deep_extend(super(lbank, self).describe(), {
33
33
  'id': 'lbank',
34
34
  'name': 'LBank',
@@ -62,13 +62,16 @@ class lbank(Exchange, ImplicitAPI):
62
62
  'fetchClosedOrders': False,
63
63
  'fetchCrossBorrowRate': False,
64
64
  'fetchCrossBorrowRates': False,
65
+ 'fetchCurrencies': True,
65
66
  'fetchDepositAddress': True,
67
+ 'fetchDepositAddresses': False,
68
+ 'fetchDepositAddressesByNetwork': False,
66
69
  'fetchDepositWithdrawFee': 'emulated',
67
70
  'fetchDepositWithdrawFees': True,
68
71
  'fetchFundingHistory': False,
69
72
  'fetchFundingRate': False,
70
73
  'fetchFundingRateHistory': False,
71
- 'fetchFundingRates': False,
74
+ 'fetchFundingRates': True,
72
75
  'fetchIndexOHLCV': False,
73
76
  'fetchIsolatedBorrowRate': False,
74
77
  'fetchIsolatedBorrowRates': False,
@@ -134,7 +137,8 @@ class lbank(Exchange, ImplicitAPI):
134
137
  'currencyPairs': 2.5,
135
138
  'accuracy': 2.5,
136
139
  'usdToCny': 2.5,
137
- 'withdrawConfigs': 2.5,
140
+ 'assetConfigs': 2.5,
141
+ 'withdrawConfigs': 2.5 * 1.5, # frequently rate-limits, so increase self endpoint RL
138
142
  'timestamp': 2.5,
139
143
  'ticker/24hr': 2.5,
140
144
  'ticker': 2.5,
@@ -220,6 +224,8 @@ class lbank(Exchange, ImplicitAPI):
220
224
  },
221
225
  },
222
226
  'commonCurrencies': {
227
+ 'XBT': 'XBT', # not BTC!
228
+ 'HIT': 'Hiver',
223
229
  'VET_ERC20': 'VEN',
224
230
  'PNT': 'Penta',
225
231
  },
@@ -286,33 +292,100 @@ class lbank(Exchange, ImplicitAPI):
286
292
  # ptx: 1
287
293
  # }
288
294
  },
289
- 'inverse-networks': {
295
+ 'networksById': {
290
296
  'erc20': 'ERC20',
291
297
  'trc20': 'TRC20',
292
- 'omni': 'OMNI',
293
- 'asa': 'ASA',
294
- 'bep20(bsc)': 'BSC',
295
- 'bep20': 'BSC',
296
- 'heco': 'HT',
297
- 'bep2': 'BNB',
298
- 'btc': 'BTC',
299
- 'dogecoin': 'DOGE',
300
- 'matic': 'MATIC',
301
- 'oec': 'OEC',
302
- 'btctron': 'BTCTRON',
303
- 'xrp': 'XRP',
298
+ 'TRX': 'TRC20',
299
+ 'bep20(bsc)': 'BEP20',
300
+ 'bep20': 'BEP20',
304
301
  },
305
302
  'defaultNetworks': {
306
303
  'USDT': 'TRC20',
307
304
  },
308
305
  },
306
+ 'features': {
307
+ 'default': {
308
+ 'sandbox': False,
309
+ 'createOrder': {
310
+ 'marginMode': False,
311
+ 'triggerPrice': False,
312
+ 'triggerPriceType': None,
313
+ 'triggerDirection': False,
314
+ 'stopLossPrice': False,
315
+ 'takeProfitPrice': False,
316
+ 'attachedStopLossTakeProfit': None,
317
+ 'timeInForce': {
318
+ 'IOC': True,
319
+ 'FOK': True,
320
+ 'PO': False,
321
+ 'GTD': False,
322
+ },
323
+ 'hedged': False,
324
+ 'selfTradePrevention': False,
325
+ 'trailing': False,
326
+ 'leverage': False,
327
+ 'marketBuyByCost': True,
328
+ 'marketBuyRequiresPrice': False,
329
+ 'iceberg': False,
330
+ },
331
+ 'createOrders': None, # todo
332
+ 'fetchMyTrades': {
333
+ 'marginMode': False,
334
+ 'limit': 100,
335
+ 'daysBack': 100000, # todo
336
+ 'untilDays': 2,
337
+ 'symbolRequired': True,
338
+ },
339
+ 'fetchOrder': {
340
+ 'marginMode': False,
341
+ 'trigger': False,
342
+ 'trailing': False,
343
+ 'symbolRequired': True,
344
+ },
345
+ 'fetchOpenOrders': {
346
+ 'marginMode': False,
347
+ 'limit': 200,
348
+ 'trigger': False,
349
+ 'trailing': False,
350
+ 'symbolRequired': True,
351
+ },
352
+ 'fetchOrders': {
353
+ 'marginMode': False,
354
+ 'limit': 200,
355
+ 'daysBack': None,
356
+ 'untilDays': None,
357
+ 'trigger': False,
358
+ 'trailing': False,
359
+ 'symbolRequired': True,
360
+ },
361
+ '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
362
+ 'fetchOHLCV': {
363
+ 'limit': 2000,
364
+ },
365
+ },
366
+ 'spot': {
367
+ 'extends': 'default',
368
+ },
369
+ 'swap': {
370
+ 'linear': {
371
+ 'extends': 'default',
372
+ },
373
+ 'inverse': None,
374
+ },
375
+ 'future': {
376
+ 'linear': None,
377
+ 'inverse': None,
378
+ },
379
+ },
309
380
  })
310
381
 
311
- async def fetch_time(self, params={}):
382
+ async def fetch_time(self, params={}) -> Int:
312
383
  """
313
384
  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
385
+
386
+ https://www.lbank.com/en-US/docs/index.html#get-timestamp
387
+ https://www.lbank.com/en-US/docs/contract.html#get-the-current-time
388
+
316
389
  :param dict [params]: extra parameters specific to the exchange API endpoint
317
390
  :returns int: the current integer timestamp in milliseconds from the exchange server
318
391
  """
@@ -345,11 +418,111 @@ class lbank(Exchange, ImplicitAPI):
345
418
  #
346
419
  return self.safe_integer(response, 'data')
347
420
 
421
+ async def fetch_currencies(self, params={}) -> Currencies:
422
+ """
423
+ fetches all available currencies on an exchange
424
+ :param dict [params]: extra parameters specific to the exchange API endpoint
425
+ :returns dict: an associative dictionary of currencies
426
+ """
427
+ response = await self.spotPublicGetWithdrawConfigs(params)
428
+ #
429
+ # {
430
+ # "msg": "Success",
431
+ # "result": "true",
432
+ # "data": [
433
+ # {
434
+ # "amountScale": "4",
435
+ # "chain": "bep20(bsc)",
436
+ # "assetCode": "usdt",
437
+ # "min": "10",
438
+ # "transferAmtScale": "4",
439
+ # "canWithDraw": True,
440
+ # "fee": "0.0000",
441
+ # "minTransfer": "0.0001",
442
+ # "type": "1"
443
+ # },
444
+ # {
445
+ # "amountScale": "4",
446
+ # "chain": "trc20",
447
+ # "assetCode": "usdt",
448
+ # "min": "1",
449
+ # "transferAmtScale": "4",
450
+ # "canWithDraw": True,
451
+ # "fee": "1.0000",
452
+ # "minTransfer": "0.0001",
453
+ # "type": "1"
454
+ # },
455
+ # ...
456
+ # ],
457
+ # "error_code": "0",
458
+ # "ts": "1747973911431"
459
+ # }
460
+ #
461
+ currenciesData = self.safe_list(response, 'data', [])
462
+ grouped = self.group_by(currenciesData, 'assetCode')
463
+ groupedKeys = list(grouped.keys())
464
+ result: dict = {}
465
+ for i in range(0, len(groupedKeys)):
466
+ id = str((groupedKeys[i])) # some currencies are numeric
467
+ code = self.safe_currency_code(id)
468
+ networksRaw = grouped[id]
469
+ networks = {}
470
+ for j in range(0, len(networksRaw)):
471
+ networkEntry = networksRaw[j]
472
+ networkId = self.safe_string(networkEntry, 'chain')
473
+ networkCode = self.network_id_to_code(networkId)
474
+ networks[networkCode] = {
475
+ 'id': networkId,
476
+ 'network': networkCode,
477
+ 'limits': {
478
+ 'withdraw': {
479
+ 'min': self.safe_number(networkEntry, 'min'),
480
+ 'max': None,
481
+ },
482
+ 'deposit': {
483
+ 'min': self.safe_number(networkEntry, 'minTransfer'),
484
+ 'max': None,
485
+ },
486
+ },
487
+ 'active': None,
488
+ 'deposit': None,
489
+ 'withdraw': self.safe_bool(networkEntry, 'canWithDraw'),
490
+ 'fee': self.safe_number(networkEntry, 'fee'),
491
+ 'precision': self.parse_number(self.parse_precision(self.safe_string(networkEntry, 'transferAmtScale'))),
492
+ 'info': networkEntry,
493
+ }
494
+ result[code] = self.safe_currency_structure({
495
+ 'id': id,
496
+ 'code': code,
497
+ 'precision': None,
498
+ 'type': None,
499
+ 'name': None,
500
+ 'active': None,
501
+ 'deposit': None,
502
+ 'withdraw': None,
503
+ 'fee': None,
504
+ 'limits': {
505
+ 'withdraw': {
506
+ 'min': None,
507
+ 'max': None,
508
+ },
509
+ 'deposit': {
510
+ 'min': None,
511
+ 'max': None,
512
+ },
513
+ },
514
+ 'networks': networks,
515
+ 'info': networksRaw,
516
+ })
517
+ return result
518
+
348
519
  async def fetch_markets(self, params={}) -> List[Market]:
349
520
  """
350
521
  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
522
+
523
+ https://www.lbank.com/en-US/docs/index.html#trading-pairs
524
+ https://www.lbank.com/en-US/docs/contract.html#query-contract-information-list
525
+
353
526
  :param dict [params]: extra parameters specific to the exchange API endpoint
354
527
  :returns dict[]: an array of objects representing market data
355
528
  """
@@ -502,7 +675,7 @@ class lbank(Exchange, ImplicitAPI):
502
675
  'active': True,
503
676
  'contract': True,
504
677
  'linear': True,
505
- 'inverse': None,
678
+ 'inverse': False,
506
679
  'contractSize': self.safe_number(market, 'volumeMultiple'),
507
680
  'expiry': None,
508
681
  'expiryDatetime': None,
@@ -598,7 +771,9 @@ class lbank(Exchange, ImplicitAPI):
598
771
  async def fetch_ticker(self, symbol: str, params={}) -> Ticker:
599
772
  """
600
773
  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
774
+
775
+ https://www.lbank.com/en-US/docs/index.html#query-current-market-data-new
776
+
602
777
  :param str symbol: unified symbol of the market to fetch the ticker for
603
778
  :param dict [params]: extra parameters specific to the exchange API endpoint
604
779
  :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
@@ -640,8 +815,10 @@ class lbank(Exchange, ImplicitAPI):
640
815
  async def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
641
816
  """
642
817
  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
818
+
819
+ https://www.lbank.com/en-US/docs/index.html#query-current-market-data-new
820
+ https://www.lbank.com/en-US/docs/contract.html#query-contract-market-list
821
+
645
822
  :param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
646
823
  :param dict [params]: extra parameters specific to the exchange API endpoint
647
824
  :returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
@@ -714,8 +891,10 @@ class lbank(Exchange, ImplicitAPI):
714
891
  async def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
715
892
  """
716
893
  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
894
+
895
+ https://www.lbank.com/en-US/docs/index.html#query-market-depth
896
+ https://www.lbank.com/en-US/docs/contract.html#get-handicap
897
+
719
898
  :param str symbol: unified symbol of the market to fetch the order book for
720
899
  :param int [limit]: the maximum amount of order book entries to return
721
900
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -789,7 +968,7 @@ class lbank(Exchange, ImplicitAPI):
789
968
  timestamp = self.milliseconds()
790
969
  if market['swap']:
791
970
  return self.parse_order_book(orderbook, market['symbol'], timestamp, 'bids', 'asks', 'price', 'volume')
792
- return self.parse_order_book(orderbook, market['symbol'], timestamp)
971
+ return self.parse_order_book(orderbook, market['symbol'], timestamp, 'bids', 'asks')
793
972
 
794
973
  def parse_trade(self, trade: dict, market: Market = None) -> Trade:
795
974
  #
@@ -887,8 +1066,10 @@ class lbank(Exchange, ImplicitAPI):
887
1066
  async def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
888
1067
  """
889
1068
  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
1069
+
1070
+ https://www.lbank.com/en-US/docs/index.html#query-historical-transactions
1071
+ https://www.lbank.com/en-US/docs/index.html#recent-transactions-list
1072
+
892
1073
  :param str symbol: unified symbol of the market to fetch trades for
893
1074
  :param int [since]: timestamp in ms of the earliest trade to fetch
894
1075
  :param int [limit]: the maximum amount of trades to fetch
@@ -957,7 +1138,9 @@ class lbank(Exchange, ImplicitAPI):
957
1138
  async def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
958
1139
  """
959
1140
  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
1141
+
1142
+ https://www.lbank.com/en-US/docs/index.html#query-k-bar-data
1143
+
961
1144
  :param str symbol: unified symbol of the market to fetch OHLCV data for
962
1145
  :param str timeframe: the length of time each candle represents
963
1146
  :param int [since]: timestamp in ms of the earliest candle to fetch
@@ -974,15 +1157,15 @@ class lbank(Exchange, ImplicitAPI):
974
1157
  limit = min(limit, 2000)
975
1158
  if since is None:
976
1159
  duration = self.parse_timeframe(timeframe)
977
- since = self.milliseconds() - duration * 1000 * limit
1160
+ since = self.milliseconds() - (duration * 1000 * limit)
978
1161
  request: dict = {
979
1162
  'symbol': market['id'],
980
1163
  'type': self.safe_string(self.timeframes, timeframe, timeframe),
981
1164
  'time': self.parse_to_int(since / 1000),
982
- 'size': limit, # max 2000
1165
+ 'size': min(limit + 1, 2000), # max 2000
983
1166
  }
984
1167
  response = await self.spotPublicGetKline(self.extend(request, params))
985
- ohlcvs = self.safe_value(response, 'data', [])
1168
+ ohlcvs = self.safe_list(response, 'data', [])
986
1169
  #
987
1170
  #
988
1171
  # [
@@ -1131,12 +1314,117 @@ class lbank(Exchange, ImplicitAPI):
1131
1314
  return self.safe_balance(result)
1132
1315
  return None
1133
1316
 
1317
+ def parse_funding_rate(self, ticker, market: Market = None) -> FundingRate:
1318
+ # {
1319
+ # "symbol": "BTCUSDT",
1320
+ # "highestPrice": "69495.5",
1321
+ # "underlyingPrice": "68455.904",
1322
+ # "lowestPrice": "68182.1",
1323
+ # "openPrice": "68762.4",
1324
+ # "positionFeeRate": "0.0001",
1325
+ # "volume": "33534.2858",
1326
+ # "markedPrice": "68434.1",
1327
+ # "turnover": "1200636218.210558",
1328
+ # "positionFeeTime": "28800",
1329
+ # "lastPrice": "68427.3",
1330
+ # "nextFeeTime": "1730736000000",
1331
+ # "fundingRate": "0.0001",
1332
+ # }
1333
+ marketId = self.safe_string(ticker, 'symbol')
1334
+ symbol = self.safe_symbol(marketId, market)
1335
+ markPrice = self.safe_number(ticker, 'markedPrice')
1336
+ indexPrice = self.safe_number(ticker, 'underlyingPrice')
1337
+ fundingRate = self.safe_number(ticker, 'fundingRate')
1338
+ fundingTime = self.safe_integer(ticker, 'nextFeeTime')
1339
+ positionFeeTime = self.safe_integer(ticker, 'positionFeeTime')
1340
+ intervalString = None
1341
+ if positionFeeTime is not None:
1342
+ interval = self.parse_to_int(positionFeeTime / 60 / 60)
1343
+ intervalString = str(interval) + 'h'
1344
+ return {
1345
+ 'info': ticker,
1346
+ 'symbol': symbol,
1347
+ 'markPrice': markPrice,
1348
+ 'indexPrice': indexPrice,
1349
+ 'fundingRate': fundingRate,
1350
+ 'fundingTimestamp': fundingTime,
1351
+ 'fundingDatetime': self.iso8601(fundingTime),
1352
+ 'timestamp': None,
1353
+ 'datetime': None,
1354
+ 'nextFundingRate': None,
1355
+ 'nextFundingTimestamp': None,
1356
+ 'nextFundingDatetime': None,
1357
+ 'previousFundingRate': None,
1358
+ 'previousFundingTimestamp': None,
1359
+ 'previousFundingDatetime': None,
1360
+ 'interval': intervalString,
1361
+ }
1362
+
1363
+ async def fetch_funding_rate(self, symbol: str, params={}) -> FundingRate:
1364
+ """
1365
+ fetch the current funding rate
1366
+
1367
+ https://www.lbank.com/en-US/docs/contract.html#query-contract-market-list
1368
+
1369
+ :param str symbol: unified market symbol
1370
+ :param dict [params]: extra parameters specific to the exchange API endpoint
1371
+ :returns dict: a `funding rate structure <https://docs.ccxt.com/#/?id=funding-rate-structure>`
1372
+ """
1373
+ await self.load_markets()
1374
+ market = self.market(symbol)
1375
+ responseForSwap = await self.fetch_funding_rates([market['symbol']], params)
1376
+ return self.safe_value(responseForSwap, market['symbol'])
1377
+
1378
+ async def fetch_funding_rates(self, symbols: Strings = None, params={}) -> FundingRates:
1379
+ """
1380
+ fetch the funding rate for multiple markets
1381
+
1382
+ https://www.lbank.com/en-US/docs/contract.html#query-contract-market-list
1383
+
1384
+ :param str[]|None symbols: list of unified market symbols
1385
+ :param dict [params]: extra parameters specific to the exchange API endpoint
1386
+ :returns dict: a dictionary of `funding rate structures <https://docs.ccxt.com/#/?id=funding-rates-structure>`, indexed by market symbols
1387
+ """
1388
+ await self.load_markets()
1389
+ symbols = self.market_symbols(symbols)
1390
+ request: dict = {
1391
+ 'productGroup': 'SwapU',
1392
+ }
1393
+ response = await self.contractPublicGetCfdOpenApiV1PubMarketData(self.extend(request, params))
1394
+ # {
1395
+ # "data": [
1396
+ # {
1397
+ # "symbol": "BTCUSDT",
1398
+ # "highestPrice": "69495.5",
1399
+ # "underlyingPrice": "68455.904",
1400
+ # "lowestPrice": "68182.1",
1401
+ # "openPrice": "68762.4",
1402
+ # "positionFeeRate": "0.0001",
1403
+ # "volume": "33534.2858",
1404
+ # "markedPrice": "68434.1",
1405
+ # "turnover": "1200636218.210558",
1406
+ # "positionFeeTime": "28800",
1407
+ # "lastPrice": "68427.3",
1408
+ # "nextFeeTime": "1730736000000",
1409
+ # "fundingRate": "0.0001",
1410
+ # }
1411
+ # ],
1412
+ # "error_code": "0",
1413
+ # "msg": "Success",
1414
+ # "result": "true",
1415
+ # "success": True,
1416
+ # }
1417
+ data = self.safe_list(response, 'data', [])
1418
+ return self.parse_funding_rates(data, symbols)
1419
+
1134
1420
  async def fetch_balance(self, params={}) -> Balances:
1135
1421
  """
1136
1422
  query for balance and get the amount of funds available for trading or funds locked in orders
1137
- :see: https://www.lbank.com/en-US/docs/index.html#asset-information
1138
- :see: https://www.lbank.com/en-US/docs/index.html#account-information
1139
- :see: https://www.lbank.com/en-US/docs/index.html#get-all-coins-information
1423
+
1424
+ https://www.lbank.com/en-US/docs/index.html#asset-information
1425
+ https://www.lbank.com/en-US/docs/index.html#account-information
1426
+ https://www.lbank.com/en-US/docs/index.html#get-all-coins-information
1427
+
1140
1428
  :param dict [params]: extra parameters specific to the exchange API endpoint
1141
1429
  :returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
1142
1430
  """
@@ -1205,7 +1493,9 @@ class lbank(Exchange, ImplicitAPI):
1205
1493
  async def fetch_trading_fee(self, symbol: str, params={}) -> TradingFeeInterface:
1206
1494
  """
1207
1495
  fetch the trading fees for a market
1208
- :see: https://www.lbank.com/en-US/docs/index.html#transaction-fee-rate-query
1496
+
1497
+ https://www.lbank.com/en-US/docs/index.html#transaction-fee-rate-query
1498
+
1209
1499
  :param str symbol: unified market symbol
1210
1500
  :param dict [params]: extra parameters specific to the exchange API endpoint
1211
1501
  :returns dict: a `fee structure <https://docs.ccxt.com/#/?id=fee-structure>`
@@ -1217,7 +1507,9 @@ class lbank(Exchange, ImplicitAPI):
1217
1507
  async def fetch_trading_fees(self, params={}) -> TradingFees:
1218
1508
  """
1219
1509
  fetch the trading fees for multiple markets
1220
- :see: https://www.lbank.com/en-US/docs/index.html#transaction-fee-rate-query
1510
+
1511
+ https://www.lbank.com/en-US/docs/index.html#transaction-fee-rate-query
1512
+
1221
1513
  :param dict [params]: extra parameters specific to the exchange API endpoint
1222
1514
  :returns dict: a dictionary of `fee structures <https://docs.ccxt.com/#/?id=fee-structure>` indexed by market symbols
1223
1515
  """
@@ -1235,8 +1527,10 @@ class lbank(Exchange, ImplicitAPI):
1235
1527
  async def create_market_buy_order_with_cost(self, symbol: str, cost: float, params={}):
1236
1528
  """
1237
1529
  create a market buy order by providing the symbol and cost
1238
- :see: https://www.lbank.com/en-US/docs/index.html#place-order
1239
- :see: https://www.lbank.com/en-US/docs/index.html#place-an-order
1530
+
1531
+ https://www.lbank.com/en-US/docs/index.html#place-order
1532
+ https://www.lbank.com/en-US/docs/index.html#place-an-order
1533
+
1240
1534
  :param str symbol: unified symbol of the market to create an order in
1241
1535
  :param float cost: how much you want to trade in units of the quote currency
1242
1536
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -1252,13 +1546,15 @@ class lbank(Exchange, ImplicitAPI):
1252
1546
  async def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
1253
1547
  """
1254
1548
  create a trade order
1255
- :see: https://www.lbank.com/en-US/docs/index.html#place-order
1256
- :see: https://www.lbank.com/en-US/docs/index.html#place-an-order
1549
+
1550
+ https://www.lbank.com/en-US/docs/index.html#place-order
1551
+ https://www.lbank.com/en-US/docs/index.html#place-an-order
1552
+
1257
1553
  :param str symbol: unified symbol of the market to create an order in
1258
1554
  :param str type: 'market' or 'limit'
1259
1555
  :param str side: 'buy' or 'sell'
1260
1556
  :param float amount: how much of currency you want to trade in units of base currency
1261
- :param float [price]: the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders
1557
+ :param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
1262
1558
  :param dict [params]: extra parameters specific to the exchange API endpoint
1263
1559
  :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
1264
1560
  """
@@ -1417,6 +1713,27 @@ class lbank(Exchange, ImplicitAPI):
1417
1713
  # "status":-1
1418
1714
  # }
1419
1715
  #
1716
+ # cancelOrder
1717
+ #
1718
+ # {
1719
+ # "executedQty":0.0,
1720
+ # "price":0.05,
1721
+ # "origQty":100.0,
1722
+ # "tradeType":"buy",
1723
+ # "status":0
1724
+ # }
1725
+ #
1726
+ # cancelAllOrders
1727
+ #
1728
+ # {
1729
+ # "executedQty":0.00000000000000000000,
1730
+ # "orderId":"293ef71b-3e67-4962-af93-aa06990a045f",
1731
+ # "price":0.05000000000000000000,
1732
+ # "origQty":100.00000000000000000000,
1733
+ # "tradeType":"buy",
1734
+ # "status":0
1735
+ # }
1736
+ #
1420
1737
  id = self.safe_string_2(order, 'orderId', 'order_id')
1421
1738
  clientOrderId = self.safe_string_2(order, 'clientOrderId', 'custom_id')
1422
1739
  timestamp = self.safe_integer_2(order, 'time', 'create_time')
@@ -1426,7 +1743,7 @@ class lbank(Exchange, ImplicitAPI):
1426
1743
  timeInForce = None
1427
1744
  postOnly = False
1428
1745
  type = 'limit'
1429
- rawType = self.safe_string(order, 'type') # buy, sell, buy_market, sell_market, buy_maker,sell_maker,buy_ioc,sell_ioc, buy_fok, sell_fok
1746
+ 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
1430
1747
  parts = rawType.split('_')
1431
1748
  side = self.safe_string(parts, 0)
1432
1749
  typePart = self.safe_string(parts, 1) # market, maker, ioc, fok or None(limit)
@@ -1458,7 +1775,6 @@ class lbank(Exchange, ImplicitAPI):
1458
1775
  'postOnly': postOnly,
1459
1776
  'side': side,
1460
1777
  'price': price,
1461
- 'stopPrice': None,
1462
1778
  'triggerPrice': None,
1463
1779
  'cost': costString,
1464
1780
  'amount': amountString,
@@ -1473,8 +1789,11 @@ class lbank(Exchange, ImplicitAPI):
1473
1789
  async def fetch_order(self, id: str, symbol: Str = None, params={}):
1474
1790
  """
1475
1791
  fetches information on an order made by the user
1476
- :see: https://www.lbank.com/en-US/docs/index.html#query-order
1477
- :see: https://www.lbank.com/en-US/docs/index.html#query-order-new
1792
+
1793
+ https://www.lbank.com/en-US/docs/index.html#query-order
1794
+ https://www.lbank.com/en-US/docs/index.html#query-order-new
1795
+
1796
+ :param str id: order id
1478
1797
  :param str symbol: unified symbol of the market the order was made in
1479
1798
  :param dict [params]: extra parameters specific to the exchange API endpoint
1480
1799
  :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
@@ -1569,7 +1888,9 @@ class lbank(Exchange, ImplicitAPI):
1569
1888
  async def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
1570
1889
  """
1571
1890
  fetch all trades made by the user
1572
- :see: https://www.lbank.com/en-US/docs/index.html#past-transaction-details
1891
+
1892
+ https://www.lbank.com/en-US/docs/index.html#past-transaction-details
1893
+
1573
1894
  :param str symbol: unified market symbol
1574
1895
  :param int [since]: the earliest time in ms to fetch trades for
1575
1896
  :param int [limit]: the maximum number of trade structures to retrieve
@@ -1623,7 +1944,9 @@ class lbank(Exchange, ImplicitAPI):
1623
1944
  async def fetch_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
1624
1945
  """
1625
1946
  fetches information on multiple orders made by the user
1626
- :see: https://www.lbank.com/en-US/docs/index.html#query-all-orders
1947
+
1948
+ https://www.lbank.com/en-US/docs/index.html#query-all-orders
1949
+
1627
1950
  :param str symbol: unified market symbol of the market orders were made in
1628
1951
  :param int [since]: the earliest time in ms to fetch orders for
1629
1952
  :param int [limit]: the maximum number of order structures to retrieve
@@ -1679,7 +2002,9 @@ class lbank(Exchange, ImplicitAPI):
1679
2002
  async def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
1680
2003
  """
1681
2004
  fetch all unfilled currently open orders
1682
- :see: https://www.lbank.com/en-US/docs/index.html#current-pending-order
2005
+
2006
+ https://www.lbank.com/en-US/docs/index.html#current-pending-order
2007
+
1683
2008
  :param str symbol: unified market symbol
1684
2009
  :param int [since]: the earliest time in ms to fetch open orders for
1685
2010
  :param int [limit]: the maximum number of open order structures to retrieve
@@ -1732,7 +2057,9 @@ class lbank(Exchange, ImplicitAPI):
1732
2057
  async def cancel_order(self, id: str, symbol: Str = None, params={}):
1733
2058
  """
1734
2059
  cancels an open order
1735
- :see: https://www.lbank.com/en-US/docs/index.html#cancel-order-new
2060
+
2061
+ https://www.lbank.com/en-US/docs/index.html#cancel-order-new
2062
+
1736
2063
  :param str id: order id
1737
2064
  :param str symbol: unified symbol of the market the order was made in
1738
2065
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -1760,17 +2087,19 @@ class lbank(Exchange, ImplicitAPI):
1760
2087
  # "origQty":100.0,
1761
2088
  # "tradeType":"buy",
1762
2089
  # "status":0
1763
- # },
2090
+ # },
1764
2091
  # "error_code":0,
1765
2092
  # "ts":1648501286196
1766
2093
  # }
1767
- result = self.safe_value(response, 'data', {})
1768
- return result
2094
+ data = self.safe_dict(response, 'data', {})
2095
+ return self.parse_order(data)
1769
2096
 
1770
2097
  async def cancel_all_orders(self, symbol: Str = None, params={}):
1771
2098
  """
1772
2099
  cancel all open orders in a market
1773
- :see: https://www.lbank.com/en-US/docs/index.html#cancel-all-pending-orders-for-a-single-trading-pair
2100
+
2101
+ https://www.lbank.com/en-US/docs/index.html#cancel-all-pending-orders-for-a-single-trading-pair
2102
+
1774
2103
  :param str symbol: unified market symbol of the market to cancel orders in
1775
2104
  :param dict [params]: extra parameters specific to the exchange API endpoint
1776
2105
  :returns dict[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
@@ -1800,8 +2129,8 @@ class lbank(Exchange, ImplicitAPI):
1800
2129
  # "ts":1648506641469
1801
2130
  # }
1802
2131
  #
1803
- result = self.safe_value(response, 'data', [])
1804
- return result
2132
+ data = self.safe_list(response, 'data', [])
2133
+ return self.parse_orders(data)
1805
2134
 
1806
2135
  def get_network_code_for_currency(self, currencyCode, params):
1807
2136
  defaultNetworks = self.safe_value(self.options, 'defaultNetworks')
@@ -1811,11 +2140,13 @@ class lbank(Exchange, ImplicitAPI):
1811
2140
  network = self.safe_string(networks, network, network) # handle ERC20>ETH alias
1812
2141
  return network
1813
2142
 
1814
- async def fetch_deposit_address(self, code: str, params={}):
2143
+ async def fetch_deposit_address(self, code: str, params={}) -> DepositAddress:
1815
2144
  """
1816
2145
  fetch the deposit address for a currency associated with self account
1817
- :see: https://www.lbank.com/en-US/docs/index.html#get-deposit-address
1818
- :see: https://www.lbank.com/en-US/docs/index.html#the-user-obtains-the-deposit-address
2146
+
2147
+ https://www.lbank.com/en-US/docs/index.html#get-deposit-address
2148
+ https://www.lbank.com/en-US/docs/index.html#the-user-obtains-the-deposit-address
2149
+
1819
2150
  :param str code: unified currency code
1820
2151
  :param dict [params]: extra parameters specific to the exchange API endpoint
1821
2152
  :returns dict: an `address structure <https://docs.ccxt.com/#/?id=address-structure>`
@@ -1832,7 +2163,7 @@ class lbank(Exchange, ImplicitAPI):
1832
2163
  response = await self.fetch_deposit_address_default(code, params)
1833
2164
  return response
1834
2165
 
1835
- async def fetch_deposit_address_default(self, code: str, params={}):
2166
+ async def fetch_deposit_address_default(self, code: str, params={}) -> DepositAddress:
1836
2167
  await self.load_markets()
1837
2168
  currency = self.currency(code)
1838
2169
  request: dict = {
@@ -1859,18 +2190,15 @@ class lbank(Exchange, ImplicitAPI):
1859
2190
  result = self.safe_value(response, 'data')
1860
2191
  address = self.safe_string(result, 'address')
1861
2192
  tag = self.safe_string(result, 'memo')
1862
- networkId = self.safe_string(result, 'netWork')
1863
- inverseNetworks = self.safe_value(self.options, 'inverse-networks', {})
1864
- networkCode = self.safe_string_upper(inverseNetworks, networkId, networkId)
1865
2193
  return {
2194
+ 'info': response,
1866
2195
  'currency': code,
2196
+ 'network': self.network_id_to_code(self.safe_string(result, 'netWork')),
1867
2197
  'address': address,
1868
2198
  'tag': tag,
1869
- 'network': networkCode,
1870
- 'info': response,
1871
2199
  }
1872
2200
 
1873
- async def fetch_deposit_address_supplement(self, code: str, params={}):
2201
+ async def fetch_deposit_address_supplement(self, code: str, params={}) -> DepositAddress:
1874
2202
  # returns the address for whatever the default network is...
1875
2203
  await self.load_markets()
1876
2204
  currency = self.currency(code)
@@ -1899,20 +2227,20 @@ class lbank(Exchange, ImplicitAPI):
1899
2227
  result = self.safe_value(response, 'data')
1900
2228
  address = self.safe_string(result, 'address')
1901
2229
  tag = self.safe_string(result, 'memo')
1902
- inverseNetworks = self.safe_value(self.options, 'inverse-networks', {})
1903
- networkCode = self.safe_string_upper(inverseNetworks, network, network)
1904
2230
  return {
2231
+ 'info': response,
1905
2232
  'currency': code,
2233
+ 'network': None,
1906
2234
  'address': address,
1907
2235
  'tag': tag,
1908
- 'network': networkCode, # will be None if not specified in request
1909
- 'info': response,
1910
2236
  }
1911
2237
 
1912
- async def withdraw(self, code: str, amount: float, address: str, tag=None, params={}) -> Transaction:
2238
+ async def withdraw(self, code: str, amount: float, address: str, tag: Str = None, params={}) -> Transaction:
1913
2239
  """
1914
2240
  make a withdrawal
1915
- :see: https://www.lbank.com/en-US/docs/index.html#withdrawal
2241
+
2242
+ https://www.lbank.com/en-US/docs/index.html#withdrawal
2243
+
1916
2244
  :param str code: unified currency code
1917
2245
  :param float amount: the amount to withdraw
1918
2246
  :param str address: the address to withdraw to
@@ -2022,9 +2350,6 @@ class lbank(Exchange, ImplicitAPI):
2022
2350
  type = 'withdrawal'
2023
2351
  txid = self.safe_string(transaction, 'txId')
2024
2352
  timestamp = self.safe_integer_2(transaction, 'insertTime', 'applyTime')
2025
- networks = self.safe_value(self.options, 'inverse-networks', {})
2026
- networkId = self.safe_string(transaction, 'networkName')
2027
- network = self.safe_string(networks, networkId, networkId)
2028
2353
  address = self.safe_string(transaction, 'address')
2029
2354
  addressFrom = None
2030
2355
  addressTo = None
@@ -2049,7 +2374,7 @@ class lbank(Exchange, ImplicitAPI):
2049
2374
  'txid': txid,
2050
2375
  'timestamp': timestamp,
2051
2376
  'datetime': self.iso8601(timestamp),
2052
- 'network': network,
2377
+ 'network': self.network_id_to_code(self.safe_string(transaction, 'networkName')),
2053
2378
  'address': address,
2054
2379
  'addressTo': addressTo,
2055
2380
  'addressFrom': addressFrom,
@@ -2069,7 +2394,9 @@ class lbank(Exchange, ImplicitAPI):
2069
2394
  async def fetch_deposits(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
2070
2395
  """
2071
2396
  fetch all deposits made to an account
2072
- :see: https://www.lbank.com/en-US/docs/index.html#get-recharge-history
2397
+
2398
+ https://www.lbank.com/en-US/docs/index.html#get-recharge-history
2399
+
2073
2400
  :param str code: unified currency code
2074
2401
  :param int [since]: the earliest time in ms to fetch deposits for
2075
2402
  :param int [limit]: the maximum number of deposits structures to retrieve
@@ -2118,7 +2445,9 @@ class lbank(Exchange, ImplicitAPI):
2118
2445
  async def fetch_withdrawals(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
2119
2446
  """
2120
2447
  fetch all withdrawals made from an account
2121
- :see: https://www.lbank.com/en-US/docs/index.html#get-withdrawal-history
2448
+
2449
+ https://www.lbank.com/en-US/docs/index.html#get-withdrawal-history
2450
+
2122
2451
  :param str code: unified currency code
2123
2452
  :param int [since]: the earliest time in ms to fetch withdrawals for
2124
2453
  :param int [limit]: the maximum number of withdrawals structures to retrieve
@@ -2170,7 +2499,7 @@ class lbank(Exchange, ImplicitAPI):
2170
2499
 
2171
2500
  async def fetch_transaction_fees(self, codes: Strings = None, params={}):
2172
2501
  """
2173
- * @deprecated
2502
+ @deprecated
2174
2503
  please use fetchDepositWithdrawFees instead
2175
2504
  :param str[]|None codes: not used by lbank fetchTransactionFees()
2176
2505
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -2238,10 +2567,9 @@ class lbank(Exchange, ImplicitAPI):
2238
2567
  withdrawFees[code] = {}
2239
2568
  for j in range(0, len(networkList)):
2240
2569
  networkEntry = networkList[j]
2241
- networkId = self.safe_string(networkEntry, 'name')
2242
- networkCode = self.safe_string(self.options['inverse-networks'], networkId, networkId)
2243
2570
  fee = self.safe_number(networkEntry, 'withdrawFee')
2244
2571
  if fee is not None:
2572
+ networkCode = self.network_id_to_code(self.safe_string(networkEntry, 'name'))
2245
2573
  withdrawFees[code][networkCode] = fee
2246
2574
  return {
2247
2575
  'withdraw': withdrawFees,
@@ -2289,8 +2617,7 @@ class lbank(Exchange, ImplicitAPI):
2289
2617
  if canWithdraw == 'true':
2290
2618
  currencyId = self.safe_string(item, 'assetCode')
2291
2619
  codeInner = self.safe_currency_code(currencyId)
2292
- chain = self.safe_string(item, 'chain')
2293
- network = self.safe_string(self.options['inverse-networks'], chain, chain)
2620
+ network = self.network_id_to_code(self.safe_string(item, 'chain'))
2294
2621
  if network is None:
2295
2622
  network = codeInner
2296
2623
  fee = self.safe_string(item, 'fee')
@@ -2306,9 +2633,11 @@ class lbank(Exchange, ImplicitAPI):
2306
2633
  async def fetch_deposit_withdraw_fees(self, codes: Strings = None, params={}):
2307
2634
  """
2308
2635
  when using private endpoint, only returns information for currencies with non-zero balance, use public method by specifying self.options['fetchDepositWithdrawFees']['method'] = 'fetchPublicDepositWithdrawFees'
2309
- :see: https://www.lbank.com/en-US/docs/index.html#get-all-coins-information
2310
- :see: https://www.lbank.com/en-US/docs/index.html#withdrawal-configurations
2311
- :param str[]|None codes: array of unified currency codes
2636
+
2637
+ https://www.lbank.com/en-US/docs/index.html#get-all-coins-information
2638
+ https://www.lbank.com/en-US/docs/index.html#withdrawal-configurations
2639
+
2640
+ :param str[] [codes]: array of unified currency codes
2312
2641
  :param dict [params]: extra parameters specific to the exchange API endpoint
2313
2642
  :returns dict: a list of `fee structures <https://docs.ccxt.com/#/?id=fee-structure>`
2314
2643
  """
@@ -2321,11 +2650,11 @@ class lbank(Exchange, ImplicitAPI):
2321
2650
  method = self.safe_string(params, 'method', defaultMethod)
2322
2651
  params = self.omit(params, 'method')
2323
2652
  if method == 'fetchPublicDepositWithdrawFees':
2324
- await self.fetch_public_deposit_withdraw_fees(codes, params)
2653
+ response = await self.fetch_public_deposit_withdraw_fees(codes, params)
2325
2654
  else:
2326
- await self.fetch_private_deposit_withdraw_fees(codes, params)
2655
+ response = await self.fetch_private_deposit_withdraw_fees(codes, params)
2327
2656
  else:
2328
- await self.fetch_public_deposit_withdraw_fees(codes, params)
2657
+ response = await self.fetch_public_deposit_withdraw_fees(codes, params)
2329
2658
  return response
2330
2659
 
2331
2660
  async def fetch_private_deposit_withdraw_fees(self, codes=None, params={}):
@@ -2427,9 +2756,9 @@ class lbank(Exchange, ImplicitAPI):
2427
2756
  if resultValue is None:
2428
2757
  result[code] = self.deposit_withdraw_fee([fee])
2429
2758
  else:
2430
- result[code]['info'].append(fee)
2431
- chain = self.safe_string(fee, 'chain')
2432
- networkCode = self.safe_string(self.options['inverse-networks'], chain, chain)
2759
+ resultCodeInfo = result[code]['info']
2760
+ resultCodeInfo.append(fee)
2761
+ networkCode = self.network_id_to_code(self.safe_string(fee, 'chain'))
2433
2762
  if networkCode is not None:
2434
2763
  result[code]['networks'][networkCode] = {
2435
2764
  'withdraw': {
@@ -2479,8 +2808,7 @@ class lbank(Exchange, ImplicitAPI):
2479
2808
  networkList = self.safe_value(fee, 'networkList', [])
2480
2809
  for j in range(0, len(networkList)):
2481
2810
  networkEntry = networkList[j]
2482
- networkId = self.safe_string(networkEntry, 'name')
2483
- networkCode = self.safe_string_upper(self.options['inverse-networks'], networkId, networkId)
2811
+ networkCode = self.network_id_to_code(self.safe_string(networkEntry, 'name'))
2484
2812
  withdrawFee = self.safe_number(networkEntry, 'withdrawFee')
2485
2813
  isDefault = self.safe_value(networkEntry, 'isDefault')
2486
2814
  if withdrawFee is not None: