ccxt-ir 4.3.46.0.2__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 (528) hide show
  1. ccxt/__init__.py +39 -35
  2. ccxt/abantether.py +9 -9
  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 +10 -10
  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.2.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.2.dist-info → ccxt_ir-4.5.0.dist-info}/WHEEL +1 -1
  437. ccxt/abstract/ace.py +0 -15
  438. ccxt/abstract/bitbay.py +0 -53
  439. ccxt/abstract/bitcoincom.py +0 -115
  440. ccxt/abstract/bitfinex2.py +0 -139
  441. ccxt/abstract/bitpanda.py +0 -35
  442. ccxt/abstract/bl3p.py +0 -19
  443. ccxt/abstract/coinlist.py +0 -54
  444. ccxt/abstract/currencycom.py +0 -68
  445. ccxt/abstract/hitbtc3.py +0 -115
  446. ccxt/abstract/idex.py +0 -26
  447. ccxt/abstract/kuna.py +0 -182
  448. ccxt/abstract/lykke.py +0 -29
  449. ccxt/abstract/poloniexfutures.py +0 -48
  450. ccxt/abstract/wazirx.py +0 -30
  451. ccxt/ace.py +0 -1012
  452. ccxt/async_support/ace.py +0 -1012
  453. ccxt/async_support/base/ws/aiohttp_client.py +0 -125
  454. ccxt/async_support/base/ws/fast_client.py +0 -96
  455. ccxt/async_support/bitbay.py +0 -17
  456. ccxt/async_support/bitcoincom.py +0 -17
  457. ccxt/async_support/bitfinex2.py +0 -3552
  458. ccxt/async_support/bitpanda.py +0 -16
  459. ccxt/async_support/bl3p.py +0 -485
  460. ccxt/async_support/coinlist.py +0 -2243
  461. ccxt/async_support/currencycom.py +0 -1950
  462. ccxt/async_support/hitbtc3.py +0 -16
  463. ccxt/async_support/idex.py +0 -1766
  464. ccxt/async_support/kuna.py +0 -1841
  465. ccxt/async_support/lykke.py +0 -1270
  466. ccxt/async_support/poloniexfutures.py +0 -1717
  467. ccxt/async_support/wazirx.py +0 -1224
  468. ccxt/bitbay.py +0 -17
  469. ccxt/bitcoincom.py +0 -17
  470. ccxt/bitfinex2.py +0 -3552
  471. ccxt/bitpanda.py +0 -16
  472. ccxt/bl3p.py +0 -485
  473. ccxt/coinlist.py +0 -2243
  474. ccxt/currencycom.py +0 -1950
  475. ccxt/hitbtc3.py +0 -16
  476. ccxt/idex.py +0 -1766
  477. ccxt/kuna.py +0 -1841
  478. ccxt/lykke.py +0 -1270
  479. ccxt/poloniexfutures.py +0 -1717
  480. ccxt/pro/bitcoincom.py +0 -34
  481. ccxt/pro/bitfinex2.py +0 -1083
  482. ccxt/pro/bitpanda.py +0 -15
  483. ccxt/pro/currencycom.py +0 -536
  484. ccxt/pro/idex.py +0 -672
  485. ccxt/pro/poloniexfutures.py +0 -990
  486. ccxt/pro/wazirx.py +0 -749
  487. ccxt/test/base/__init__.py +0 -29
  488. ccxt/test/base/test_account.py +0 -26
  489. ccxt/test/base/test_balance.py +0 -56
  490. ccxt/test/base/test_borrow_interest.py +0 -35
  491. ccxt/test/base/test_borrow_rate.py +0 -32
  492. ccxt/test/base/test_calculate_fee.py +0 -51
  493. ccxt/test/base/test_crypto.py +0 -127
  494. ccxt/test/base/test_currency.py +0 -76
  495. ccxt/test/base/test_datetime.py +0 -109
  496. ccxt/test/base/test_decimal_to_precision.py +0 -392
  497. ccxt/test/base/test_deep_extend.py +0 -68
  498. ccxt/test/base/test_deposit_withdrawal.py +0 -50
  499. ccxt/test/base/test_exchange_datetime_functions.py +0 -76
  500. ccxt/test/base/test_funding_rate_history.py +0 -29
  501. ccxt/test/base/test_last_price.py +0 -31
  502. ccxt/test/base/test_ledger_entry.py +0 -45
  503. ccxt/test/base/test_ledger_item.py +0 -48
  504. ccxt/test/base/test_leverage_tier.py +0 -33
  505. ccxt/test/base/test_liquidation.py +0 -50
  506. ccxt/test/base/test_margin_mode.py +0 -24
  507. ccxt/test/base/test_margin_modification.py +0 -35
  508. ccxt/test/base/test_market.py +0 -193
  509. ccxt/test/base/test_number.py +0 -411
  510. ccxt/test/base/test_ohlcv.py +0 -33
  511. ccxt/test/base/test_open_interest.py +0 -32
  512. ccxt/test/base/test_order.py +0 -64
  513. ccxt/test/base/test_order_book.py +0 -69
  514. ccxt/test/base/test_position.py +0 -60
  515. ccxt/test/base/test_shared_methods.py +0 -353
  516. ccxt/test/base/test_status.py +0 -24
  517. ccxt/test/base/test_throttle.py +0 -126
  518. ccxt/test/base/test_ticker.py +0 -92
  519. ccxt/test/base/test_trade.py +0 -47
  520. ccxt/test/base/test_trading_fee.py +0 -26
  521. ccxt/test/base/test_transaction.py +0 -39
  522. ccxt/test/test_async.py +0 -1649
  523. ccxt/test/test_sync.py +0 -1648
  524. ccxt/wazirx.py +0 -1224
  525. ccxt_ir-4.3.46.0.2.dist-info/RECORD +0 -772
  526. /ccxt/abstract/{huobijp.py → bittrade.py} +0 -0
  527. {ccxt_ir-4.3.46.0.2.dist-info → ccxt_ir-4.5.0.dist-info/licenses}/LICENSE.txt +0 -0
  528. {ccxt_ir-4.3.46.0.2.dist-info → ccxt_ir-4.5.0.dist-info}/top_level.txt +0 -0
ccxt/lbank.py CHANGED
@@ -6,7 +6,7 @@
6
6
  from ccxt.base.exchange import Exchange
7
7
  from ccxt.abstract.lbank import ImplicitAPI
8
8
  import hashlib
9
- from ccxt.base.types import Balances, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFeeInterface, TradingFees, Transaction
9
+ 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
10
10
  from typing import List
11
11
  from ccxt.base.errors import ExchangeError
12
12
  from ccxt.base.errors import AuthenticationError
@@ -27,7 +27,7 @@ from ccxt.base.precise import Precise
27
27
 
28
28
  class lbank(Exchange, ImplicitAPI):
29
29
 
30
- def describe(self):
30
+ def describe(self) -> Any:
31
31
  return self.deep_extend(super(lbank, self).describe(), {
32
32
  'id': 'lbank',
33
33
  'name': 'LBank',
@@ -61,13 +61,16 @@ class lbank(Exchange, ImplicitAPI):
61
61
  'fetchClosedOrders': False,
62
62
  'fetchCrossBorrowRate': False,
63
63
  'fetchCrossBorrowRates': False,
64
+ 'fetchCurrencies': True,
64
65
  'fetchDepositAddress': True,
66
+ 'fetchDepositAddresses': False,
67
+ 'fetchDepositAddressesByNetwork': False,
65
68
  'fetchDepositWithdrawFee': 'emulated',
66
69
  'fetchDepositWithdrawFees': True,
67
70
  'fetchFundingHistory': False,
68
71
  'fetchFundingRate': False,
69
72
  'fetchFundingRateHistory': False,
70
- 'fetchFundingRates': False,
73
+ 'fetchFundingRates': True,
71
74
  'fetchIndexOHLCV': False,
72
75
  'fetchIsolatedBorrowRate': False,
73
76
  'fetchIsolatedBorrowRates': False,
@@ -133,7 +136,8 @@ class lbank(Exchange, ImplicitAPI):
133
136
  'currencyPairs': 2.5,
134
137
  'accuracy': 2.5,
135
138
  'usdToCny': 2.5,
136
- 'withdrawConfigs': 2.5,
139
+ 'assetConfigs': 2.5,
140
+ 'withdrawConfigs': 2.5 * 1.5, # frequently rate-limits, so increase self endpoint RL
137
141
  'timestamp': 2.5,
138
142
  'ticker/24hr': 2.5,
139
143
  'ticker': 2.5,
@@ -219,6 +223,8 @@ class lbank(Exchange, ImplicitAPI):
219
223
  },
220
224
  },
221
225
  'commonCurrencies': {
226
+ 'XBT': 'XBT', # not BTC!
227
+ 'HIT': 'Hiver',
222
228
  'VET_ERC20': 'VEN',
223
229
  'PNT': 'Penta',
224
230
  },
@@ -285,33 +291,100 @@ class lbank(Exchange, ImplicitAPI):
285
291
  # ptx: 1
286
292
  # }
287
293
  },
288
- 'inverse-networks': {
294
+ 'networksById': {
289
295
  'erc20': 'ERC20',
290
296
  'trc20': 'TRC20',
291
- 'omni': 'OMNI',
292
- 'asa': 'ASA',
293
- 'bep20(bsc)': 'BSC',
294
- 'bep20': 'BSC',
295
- 'heco': 'HT',
296
- 'bep2': 'BNB',
297
- 'btc': 'BTC',
298
- 'dogecoin': 'DOGE',
299
- 'matic': 'MATIC',
300
- 'oec': 'OEC',
301
- 'btctron': 'BTCTRON',
302
- 'xrp': 'XRP',
297
+ 'TRX': 'TRC20',
298
+ 'bep20(bsc)': 'BEP20',
299
+ 'bep20': 'BEP20',
303
300
  },
304
301
  'defaultNetworks': {
305
302
  'USDT': 'TRC20',
306
303
  },
307
304
  },
305
+ 'features': {
306
+ 'default': {
307
+ 'sandbox': False,
308
+ 'createOrder': {
309
+ 'marginMode': False,
310
+ 'triggerPrice': False,
311
+ 'triggerPriceType': None,
312
+ 'triggerDirection': False,
313
+ 'stopLossPrice': False,
314
+ 'takeProfitPrice': False,
315
+ 'attachedStopLossTakeProfit': None,
316
+ 'timeInForce': {
317
+ 'IOC': True,
318
+ 'FOK': True,
319
+ 'PO': False,
320
+ 'GTD': False,
321
+ },
322
+ 'hedged': False,
323
+ 'selfTradePrevention': False,
324
+ 'trailing': False,
325
+ 'leverage': False,
326
+ 'marketBuyByCost': True,
327
+ 'marketBuyRequiresPrice': False,
328
+ 'iceberg': False,
329
+ },
330
+ 'createOrders': None, # todo
331
+ 'fetchMyTrades': {
332
+ 'marginMode': False,
333
+ 'limit': 100,
334
+ 'daysBack': 100000, # todo
335
+ 'untilDays': 2,
336
+ 'symbolRequired': True,
337
+ },
338
+ 'fetchOrder': {
339
+ 'marginMode': False,
340
+ 'trigger': False,
341
+ 'trailing': False,
342
+ 'symbolRequired': True,
343
+ },
344
+ 'fetchOpenOrders': {
345
+ 'marginMode': False,
346
+ 'limit': 200,
347
+ 'trigger': False,
348
+ 'trailing': False,
349
+ 'symbolRequired': True,
350
+ },
351
+ 'fetchOrders': {
352
+ 'marginMode': False,
353
+ 'limit': 200,
354
+ 'daysBack': None,
355
+ 'untilDays': None,
356
+ 'trigger': False,
357
+ 'trailing': False,
358
+ 'symbolRequired': True,
359
+ },
360
+ '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
361
+ 'fetchOHLCV': {
362
+ 'limit': 2000,
363
+ },
364
+ },
365
+ 'spot': {
366
+ 'extends': 'default',
367
+ },
368
+ 'swap': {
369
+ 'linear': {
370
+ 'extends': 'default',
371
+ },
372
+ 'inverse': None,
373
+ },
374
+ 'future': {
375
+ 'linear': None,
376
+ 'inverse': None,
377
+ },
378
+ },
308
379
  })
309
380
 
310
- def fetch_time(self, params={}):
381
+ def fetch_time(self, params={}) -> Int:
311
382
  """
312
383
  fetches the current integer timestamp in milliseconds from the exchange server
313
- :see: https://www.lbank.com/en-US/docs/index.html#get-timestamp
314
- :see: https://www.lbank.com/en-US/docs/contract.html#get-the-current-time
384
+
385
+ https://www.lbank.com/en-US/docs/index.html#get-timestamp
386
+ https://www.lbank.com/en-US/docs/contract.html#get-the-current-time
387
+
315
388
  :param dict [params]: extra parameters specific to the exchange API endpoint
316
389
  :returns int: the current integer timestamp in milliseconds from the exchange server
317
390
  """
@@ -344,11 +417,111 @@ class lbank(Exchange, ImplicitAPI):
344
417
  #
345
418
  return self.safe_integer(response, 'data')
346
419
 
420
+ def fetch_currencies(self, params={}) -> Currencies:
421
+ """
422
+ fetches all available currencies on an exchange
423
+ :param dict [params]: extra parameters specific to the exchange API endpoint
424
+ :returns dict: an associative dictionary of currencies
425
+ """
426
+ response = self.spotPublicGetWithdrawConfigs(params)
427
+ #
428
+ # {
429
+ # "msg": "Success",
430
+ # "result": "true",
431
+ # "data": [
432
+ # {
433
+ # "amountScale": "4",
434
+ # "chain": "bep20(bsc)",
435
+ # "assetCode": "usdt",
436
+ # "min": "10",
437
+ # "transferAmtScale": "4",
438
+ # "canWithDraw": True,
439
+ # "fee": "0.0000",
440
+ # "minTransfer": "0.0001",
441
+ # "type": "1"
442
+ # },
443
+ # {
444
+ # "amountScale": "4",
445
+ # "chain": "trc20",
446
+ # "assetCode": "usdt",
447
+ # "min": "1",
448
+ # "transferAmtScale": "4",
449
+ # "canWithDraw": True,
450
+ # "fee": "1.0000",
451
+ # "minTransfer": "0.0001",
452
+ # "type": "1"
453
+ # },
454
+ # ...
455
+ # ],
456
+ # "error_code": "0",
457
+ # "ts": "1747973911431"
458
+ # }
459
+ #
460
+ currenciesData = self.safe_list(response, 'data', [])
461
+ grouped = self.group_by(currenciesData, 'assetCode')
462
+ groupedKeys = list(grouped.keys())
463
+ result: dict = {}
464
+ for i in range(0, len(groupedKeys)):
465
+ id = str((groupedKeys[i])) # some currencies are numeric
466
+ code = self.safe_currency_code(id)
467
+ networksRaw = grouped[id]
468
+ networks = {}
469
+ for j in range(0, len(networksRaw)):
470
+ networkEntry = networksRaw[j]
471
+ networkId = self.safe_string(networkEntry, 'chain')
472
+ networkCode = self.network_id_to_code(networkId)
473
+ networks[networkCode] = {
474
+ 'id': networkId,
475
+ 'network': networkCode,
476
+ 'limits': {
477
+ 'withdraw': {
478
+ 'min': self.safe_number(networkEntry, 'min'),
479
+ 'max': None,
480
+ },
481
+ 'deposit': {
482
+ 'min': self.safe_number(networkEntry, 'minTransfer'),
483
+ 'max': None,
484
+ },
485
+ },
486
+ 'active': None,
487
+ 'deposit': None,
488
+ 'withdraw': self.safe_bool(networkEntry, 'canWithDraw'),
489
+ 'fee': self.safe_number(networkEntry, 'fee'),
490
+ 'precision': self.parse_number(self.parse_precision(self.safe_string(networkEntry, 'transferAmtScale'))),
491
+ 'info': networkEntry,
492
+ }
493
+ result[code] = self.safe_currency_structure({
494
+ 'id': id,
495
+ 'code': code,
496
+ 'precision': None,
497
+ 'type': None,
498
+ 'name': None,
499
+ 'active': None,
500
+ 'deposit': None,
501
+ 'withdraw': None,
502
+ 'fee': None,
503
+ 'limits': {
504
+ 'withdraw': {
505
+ 'min': None,
506
+ 'max': None,
507
+ },
508
+ 'deposit': {
509
+ 'min': None,
510
+ 'max': None,
511
+ },
512
+ },
513
+ 'networks': networks,
514
+ 'info': networksRaw,
515
+ })
516
+ return result
517
+
347
518
  def fetch_markets(self, params={}) -> List[Market]:
348
519
  """
349
520
  retrieves data on all markets for lbank
350
- :see: https://www.lbank.com/en-US/docs/index.html#trading-pairs
351
- :see: https://www.lbank.com/en-US/docs/contract.html#query-contract-information-list
521
+
522
+ https://www.lbank.com/en-US/docs/index.html#trading-pairs
523
+ https://www.lbank.com/en-US/docs/contract.html#query-contract-information-list
524
+
352
525
  :param dict [params]: extra parameters specific to the exchange API endpoint
353
526
  :returns dict[]: an array of objects representing market data
354
527
  """
@@ -501,7 +674,7 @@ class lbank(Exchange, ImplicitAPI):
501
674
  'active': True,
502
675
  'contract': True,
503
676
  'linear': True,
504
- 'inverse': None,
677
+ 'inverse': False,
505
678
  'contractSize': self.safe_number(market, 'volumeMultiple'),
506
679
  'expiry': None,
507
680
  'expiryDatetime': None,
@@ -597,7 +770,9 @@ class lbank(Exchange, ImplicitAPI):
597
770
  def fetch_ticker(self, symbol: str, params={}) -> Ticker:
598
771
  """
599
772
  fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
600
- :see: https://www.lbank.com/en-US/docs/index.html#query-current-market-data-new
773
+
774
+ https://www.lbank.com/en-US/docs/index.html#query-current-market-data-new
775
+
601
776
  :param str symbol: unified symbol of the market to fetch the ticker for
602
777
  :param dict [params]: extra parameters specific to the exchange API endpoint
603
778
  :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
@@ -639,8 +814,10 @@ class lbank(Exchange, ImplicitAPI):
639
814
  def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
640
815
  """
641
816
  fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
642
- :see: https://www.lbank.com/en-US/docs/index.html#query-current-market-data-new
643
- :see: https://www.lbank.com/en-US/docs/contract.html#query-contract-market-list
817
+
818
+ https://www.lbank.com/en-US/docs/index.html#query-current-market-data-new
819
+ https://www.lbank.com/en-US/docs/contract.html#query-contract-market-list
820
+
644
821
  :param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
645
822
  :param dict [params]: extra parameters specific to the exchange API endpoint
646
823
  :returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
@@ -713,8 +890,10 @@ class lbank(Exchange, ImplicitAPI):
713
890
  def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
714
891
  """
715
892
  fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
716
- :see: https://www.lbank.com/en-US/docs/index.html#query-market-depth
717
- :see: https://www.lbank.com/en-US/docs/contract.html#get-handicap
893
+
894
+ https://www.lbank.com/en-US/docs/index.html#query-market-depth
895
+ https://www.lbank.com/en-US/docs/contract.html#get-handicap
896
+
718
897
  :param str symbol: unified symbol of the market to fetch the order book for
719
898
  :param int [limit]: the maximum amount of order book entries to return
720
899
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -788,7 +967,7 @@ class lbank(Exchange, ImplicitAPI):
788
967
  timestamp = self.milliseconds()
789
968
  if market['swap']:
790
969
  return self.parse_order_book(orderbook, market['symbol'], timestamp, 'bids', 'asks', 'price', 'volume')
791
- return self.parse_order_book(orderbook, market['symbol'], timestamp)
970
+ return self.parse_order_book(orderbook, market['symbol'], timestamp, 'bids', 'asks')
792
971
 
793
972
  def parse_trade(self, trade: dict, market: Market = None) -> Trade:
794
973
  #
@@ -886,8 +1065,10 @@ class lbank(Exchange, ImplicitAPI):
886
1065
  def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
887
1066
  """
888
1067
  get the list of most recent trades for a particular symbol
889
- :see: https://www.lbank.com/en-US/docs/index.html#query-historical-transactions
890
- :see: https://www.lbank.com/en-US/docs/index.html#recent-transactions-list
1068
+
1069
+ https://www.lbank.com/en-US/docs/index.html#query-historical-transactions
1070
+ https://www.lbank.com/en-US/docs/index.html#recent-transactions-list
1071
+
891
1072
  :param str symbol: unified symbol of the market to fetch trades for
892
1073
  :param int [since]: timestamp in ms of the earliest trade to fetch
893
1074
  :param int [limit]: the maximum amount of trades to fetch
@@ -956,7 +1137,9 @@ class lbank(Exchange, ImplicitAPI):
956
1137
  def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
957
1138
  """
958
1139
  fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
959
- :see: https://www.lbank.com/en-US/docs/index.html#query-k-bar-data
1140
+
1141
+ https://www.lbank.com/en-US/docs/index.html#query-k-bar-data
1142
+
960
1143
  :param str symbol: unified symbol of the market to fetch OHLCV data for
961
1144
  :param str timeframe: the length of time each candle represents
962
1145
  :param int [since]: timestamp in ms of the earliest candle to fetch
@@ -973,15 +1156,15 @@ class lbank(Exchange, ImplicitAPI):
973
1156
  limit = min(limit, 2000)
974
1157
  if since is None:
975
1158
  duration = self.parse_timeframe(timeframe)
976
- since = self.milliseconds() - duration * 1000 * limit
1159
+ since = self.milliseconds() - (duration * 1000 * limit)
977
1160
  request: dict = {
978
1161
  'symbol': market['id'],
979
1162
  'type': self.safe_string(self.timeframes, timeframe, timeframe),
980
1163
  'time': self.parse_to_int(since / 1000),
981
- 'size': limit, # max 2000
1164
+ 'size': min(limit + 1, 2000), # max 2000
982
1165
  }
983
1166
  response = self.spotPublicGetKline(self.extend(request, params))
984
- ohlcvs = self.safe_value(response, 'data', [])
1167
+ ohlcvs = self.safe_list(response, 'data', [])
985
1168
  #
986
1169
  #
987
1170
  # [
@@ -1130,12 +1313,117 @@ class lbank(Exchange, ImplicitAPI):
1130
1313
  return self.safe_balance(result)
1131
1314
  return None
1132
1315
 
1316
+ def parse_funding_rate(self, ticker, market: Market = None) -> FundingRate:
1317
+ # {
1318
+ # "symbol": "BTCUSDT",
1319
+ # "highestPrice": "69495.5",
1320
+ # "underlyingPrice": "68455.904",
1321
+ # "lowestPrice": "68182.1",
1322
+ # "openPrice": "68762.4",
1323
+ # "positionFeeRate": "0.0001",
1324
+ # "volume": "33534.2858",
1325
+ # "markedPrice": "68434.1",
1326
+ # "turnover": "1200636218.210558",
1327
+ # "positionFeeTime": "28800",
1328
+ # "lastPrice": "68427.3",
1329
+ # "nextFeeTime": "1730736000000",
1330
+ # "fundingRate": "0.0001",
1331
+ # }
1332
+ marketId = self.safe_string(ticker, 'symbol')
1333
+ symbol = self.safe_symbol(marketId, market)
1334
+ markPrice = self.safe_number(ticker, 'markedPrice')
1335
+ indexPrice = self.safe_number(ticker, 'underlyingPrice')
1336
+ fundingRate = self.safe_number(ticker, 'fundingRate')
1337
+ fundingTime = self.safe_integer(ticker, 'nextFeeTime')
1338
+ positionFeeTime = self.safe_integer(ticker, 'positionFeeTime')
1339
+ intervalString = None
1340
+ if positionFeeTime is not None:
1341
+ interval = self.parse_to_int(positionFeeTime / 60 / 60)
1342
+ intervalString = str(interval) + 'h'
1343
+ return {
1344
+ 'info': ticker,
1345
+ 'symbol': symbol,
1346
+ 'markPrice': markPrice,
1347
+ 'indexPrice': indexPrice,
1348
+ 'fundingRate': fundingRate,
1349
+ 'fundingTimestamp': fundingTime,
1350
+ 'fundingDatetime': self.iso8601(fundingTime),
1351
+ 'timestamp': None,
1352
+ 'datetime': None,
1353
+ 'nextFundingRate': None,
1354
+ 'nextFundingTimestamp': None,
1355
+ 'nextFundingDatetime': None,
1356
+ 'previousFundingRate': None,
1357
+ 'previousFundingTimestamp': None,
1358
+ 'previousFundingDatetime': None,
1359
+ 'interval': intervalString,
1360
+ }
1361
+
1362
+ def fetch_funding_rate(self, symbol: str, params={}) -> FundingRate:
1363
+ """
1364
+ fetch the current funding rate
1365
+
1366
+ https://www.lbank.com/en-US/docs/contract.html#query-contract-market-list
1367
+
1368
+ :param str symbol: unified market symbol
1369
+ :param dict [params]: extra parameters specific to the exchange API endpoint
1370
+ :returns dict: a `funding rate structure <https://docs.ccxt.com/#/?id=funding-rate-structure>`
1371
+ """
1372
+ self.load_markets()
1373
+ market = self.market(symbol)
1374
+ responseForSwap = self.fetch_funding_rates([market['symbol']], params)
1375
+ return self.safe_value(responseForSwap, market['symbol'])
1376
+
1377
+ def fetch_funding_rates(self, symbols: Strings = None, params={}) -> FundingRates:
1378
+ """
1379
+ fetch the funding rate for multiple markets
1380
+
1381
+ https://www.lbank.com/en-US/docs/contract.html#query-contract-market-list
1382
+
1383
+ :param str[]|None symbols: list of unified market symbols
1384
+ :param dict [params]: extra parameters specific to the exchange API endpoint
1385
+ :returns dict: a dictionary of `funding rate structures <https://docs.ccxt.com/#/?id=funding-rates-structure>`, indexed by market symbols
1386
+ """
1387
+ self.load_markets()
1388
+ symbols = self.market_symbols(symbols)
1389
+ request: dict = {
1390
+ 'productGroup': 'SwapU',
1391
+ }
1392
+ response = self.contractPublicGetCfdOpenApiV1PubMarketData(self.extend(request, params))
1393
+ # {
1394
+ # "data": [
1395
+ # {
1396
+ # "symbol": "BTCUSDT",
1397
+ # "highestPrice": "69495.5",
1398
+ # "underlyingPrice": "68455.904",
1399
+ # "lowestPrice": "68182.1",
1400
+ # "openPrice": "68762.4",
1401
+ # "positionFeeRate": "0.0001",
1402
+ # "volume": "33534.2858",
1403
+ # "markedPrice": "68434.1",
1404
+ # "turnover": "1200636218.210558",
1405
+ # "positionFeeTime": "28800",
1406
+ # "lastPrice": "68427.3",
1407
+ # "nextFeeTime": "1730736000000",
1408
+ # "fundingRate": "0.0001",
1409
+ # }
1410
+ # ],
1411
+ # "error_code": "0",
1412
+ # "msg": "Success",
1413
+ # "result": "true",
1414
+ # "success": True,
1415
+ # }
1416
+ data = self.safe_list(response, 'data', [])
1417
+ return self.parse_funding_rates(data, symbols)
1418
+
1133
1419
  def fetch_balance(self, params={}) -> Balances:
1134
1420
  """
1135
1421
  query for balance and get the amount of funds available for trading or funds locked in orders
1136
- :see: https://www.lbank.com/en-US/docs/index.html#asset-information
1137
- :see: https://www.lbank.com/en-US/docs/index.html#account-information
1138
- :see: https://www.lbank.com/en-US/docs/index.html#get-all-coins-information
1422
+
1423
+ https://www.lbank.com/en-US/docs/index.html#asset-information
1424
+ https://www.lbank.com/en-US/docs/index.html#account-information
1425
+ https://www.lbank.com/en-US/docs/index.html#get-all-coins-information
1426
+
1139
1427
  :param dict [params]: extra parameters specific to the exchange API endpoint
1140
1428
  :returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
1141
1429
  """
@@ -1204,7 +1492,9 @@ class lbank(Exchange, ImplicitAPI):
1204
1492
  def fetch_trading_fee(self, symbol: str, params={}) -> TradingFeeInterface:
1205
1493
  """
1206
1494
  fetch the trading fees for a market
1207
- :see: https://www.lbank.com/en-US/docs/index.html#transaction-fee-rate-query
1495
+
1496
+ https://www.lbank.com/en-US/docs/index.html#transaction-fee-rate-query
1497
+
1208
1498
  :param str symbol: unified market symbol
1209
1499
  :param dict [params]: extra parameters specific to the exchange API endpoint
1210
1500
  :returns dict: a `fee structure <https://docs.ccxt.com/#/?id=fee-structure>`
@@ -1216,7 +1506,9 @@ class lbank(Exchange, ImplicitAPI):
1216
1506
  def fetch_trading_fees(self, params={}) -> TradingFees:
1217
1507
  """
1218
1508
  fetch the trading fees for multiple markets
1219
- :see: https://www.lbank.com/en-US/docs/index.html#transaction-fee-rate-query
1509
+
1510
+ https://www.lbank.com/en-US/docs/index.html#transaction-fee-rate-query
1511
+
1220
1512
  :param dict [params]: extra parameters specific to the exchange API endpoint
1221
1513
  :returns dict: a dictionary of `fee structures <https://docs.ccxt.com/#/?id=fee-structure>` indexed by market symbols
1222
1514
  """
@@ -1234,8 +1526,10 @@ class lbank(Exchange, ImplicitAPI):
1234
1526
  def create_market_buy_order_with_cost(self, symbol: str, cost: float, params={}):
1235
1527
  """
1236
1528
  create a market buy order by providing the symbol and cost
1237
- :see: https://www.lbank.com/en-US/docs/index.html#place-order
1238
- :see: https://www.lbank.com/en-US/docs/index.html#place-an-order
1529
+
1530
+ https://www.lbank.com/en-US/docs/index.html#place-order
1531
+ https://www.lbank.com/en-US/docs/index.html#place-an-order
1532
+
1239
1533
  :param str symbol: unified symbol of the market to create an order in
1240
1534
  :param float cost: how much you want to trade in units of the quote currency
1241
1535
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -1251,13 +1545,15 @@ class lbank(Exchange, ImplicitAPI):
1251
1545
  def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
1252
1546
  """
1253
1547
  create a trade order
1254
- :see: https://www.lbank.com/en-US/docs/index.html#place-order
1255
- :see: https://www.lbank.com/en-US/docs/index.html#place-an-order
1548
+
1549
+ https://www.lbank.com/en-US/docs/index.html#place-order
1550
+ https://www.lbank.com/en-US/docs/index.html#place-an-order
1551
+
1256
1552
  :param str symbol: unified symbol of the market to create an order in
1257
1553
  :param str type: 'market' or 'limit'
1258
1554
  :param str side: 'buy' or 'sell'
1259
1555
  :param float amount: how much of currency you want to trade in units of base currency
1260
- :param float [price]: the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders
1556
+ :param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
1261
1557
  :param dict [params]: extra parameters specific to the exchange API endpoint
1262
1558
  :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
1263
1559
  """
@@ -1416,6 +1712,27 @@ class lbank(Exchange, ImplicitAPI):
1416
1712
  # "status":-1
1417
1713
  # }
1418
1714
  #
1715
+ # cancelOrder
1716
+ #
1717
+ # {
1718
+ # "executedQty":0.0,
1719
+ # "price":0.05,
1720
+ # "origQty":100.0,
1721
+ # "tradeType":"buy",
1722
+ # "status":0
1723
+ # }
1724
+ #
1725
+ # cancelAllOrders
1726
+ #
1727
+ # {
1728
+ # "executedQty":0.00000000000000000000,
1729
+ # "orderId":"293ef71b-3e67-4962-af93-aa06990a045f",
1730
+ # "price":0.05000000000000000000,
1731
+ # "origQty":100.00000000000000000000,
1732
+ # "tradeType":"buy",
1733
+ # "status":0
1734
+ # }
1735
+ #
1419
1736
  id = self.safe_string_2(order, 'orderId', 'order_id')
1420
1737
  clientOrderId = self.safe_string_2(order, 'clientOrderId', 'custom_id')
1421
1738
  timestamp = self.safe_integer_2(order, 'time', 'create_time')
@@ -1425,7 +1742,7 @@ class lbank(Exchange, ImplicitAPI):
1425
1742
  timeInForce = None
1426
1743
  postOnly = False
1427
1744
  type = 'limit'
1428
- rawType = self.safe_string(order, 'type') # buy, sell, buy_market, sell_market, buy_maker,sell_maker,buy_ioc,sell_ioc, buy_fok, sell_fok
1745
+ 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
1429
1746
  parts = rawType.split('_')
1430
1747
  side = self.safe_string(parts, 0)
1431
1748
  typePart = self.safe_string(parts, 1) # market, maker, ioc, fok or None(limit)
@@ -1457,7 +1774,6 @@ class lbank(Exchange, ImplicitAPI):
1457
1774
  'postOnly': postOnly,
1458
1775
  'side': side,
1459
1776
  'price': price,
1460
- 'stopPrice': None,
1461
1777
  'triggerPrice': None,
1462
1778
  'cost': costString,
1463
1779
  'amount': amountString,
@@ -1472,8 +1788,11 @@ class lbank(Exchange, ImplicitAPI):
1472
1788
  def fetch_order(self, id: str, symbol: Str = None, params={}):
1473
1789
  """
1474
1790
  fetches information on an order made by the user
1475
- :see: https://www.lbank.com/en-US/docs/index.html#query-order
1476
- :see: https://www.lbank.com/en-US/docs/index.html#query-order-new
1791
+
1792
+ https://www.lbank.com/en-US/docs/index.html#query-order
1793
+ https://www.lbank.com/en-US/docs/index.html#query-order-new
1794
+
1795
+ :param str id: order id
1477
1796
  :param str symbol: unified symbol of the market the order was made in
1478
1797
  :param dict [params]: extra parameters specific to the exchange API endpoint
1479
1798
  :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
@@ -1568,7 +1887,9 @@ class lbank(Exchange, ImplicitAPI):
1568
1887
  def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
1569
1888
  """
1570
1889
  fetch all trades made by the user
1571
- :see: https://www.lbank.com/en-US/docs/index.html#past-transaction-details
1890
+
1891
+ https://www.lbank.com/en-US/docs/index.html#past-transaction-details
1892
+
1572
1893
  :param str symbol: unified market symbol
1573
1894
  :param int [since]: the earliest time in ms to fetch trades for
1574
1895
  :param int [limit]: the maximum number of trade structures to retrieve
@@ -1622,7 +1943,9 @@ class lbank(Exchange, ImplicitAPI):
1622
1943
  def fetch_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
1623
1944
  """
1624
1945
  fetches information on multiple orders made by the user
1625
- :see: https://www.lbank.com/en-US/docs/index.html#query-all-orders
1946
+
1947
+ https://www.lbank.com/en-US/docs/index.html#query-all-orders
1948
+
1626
1949
  :param str symbol: unified market symbol of the market orders were made in
1627
1950
  :param int [since]: the earliest time in ms to fetch orders for
1628
1951
  :param int [limit]: the maximum number of order structures to retrieve
@@ -1678,7 +2001,9 @@ class lbank(Exchange, ImplicitAPI):
1678
2001
  def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
1679
2002
  """
1680
2003
  fetch all unfilled currently open orders
1681
- :see: https://www.lbank.com/en-US/docs/index.html#current-pending-order
2004
+
2005
+ https://www.lbank.com/en-US/docs/index.html#current-pending-order
2006
+
1682
2007
  :param str symbol: unified market symbol
1683
2008
  :param int [since]: the earliest time in ms to fetch open orders for
1684
2009
  :param int [limit]: the maximum number of open order structures to retrieve
@@ -1731,7 +2056,9 @@ class lbank(Exchange, ImplicitAPI):
1731
2056
  def cancel_order(self, id: str, symbol: Str = None, params={}):
1732
2057
  """
1733
2058
  cancels an open order
1734
- :see: https://www.lbank.com/en-US/docs/index.html#cancel-order-new
2059
+
2060
+ https://www.lbank.com/en-US/docs/index.html#cancel-order-new
2061
+
1735
2062
  :param str id: order id
1736
2063
  :param str symbol: unified symbol of the market the order was made in
1737
2064
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -1759,17 +2086,19 @@ class lbank(Exchange, ImplicitAPI):
1759
2086
  # "origQty":100.0,
1760
2087
  # "tradeType":"buy",
1761
2088
  # "status":0
1762
- # },
2089
+ # },
1763
2090
  # "error_code":0,
1764
2091
  # "ts":1648501286196
1765
2092
  # }
1766
- result = self.safe_value(response, 'data', {})
1767
- return result
2093
+ data = self.safe_dict(response, 'data', {})
2094
+ return self.parse_order(data)
1768
2095
 
1769
2096
  def cancel_all_orders(self, symbol: Str = None, params={}):
1770
2097
  """
1771
2098
  cancel all open orders in a market
1772
- :see: https://www.lbank.com/en-US/docs/index.html#cancel-all-pending-orders-for-a-single-trading-pair
2099
+
2100
+ https://www.lbank.com/en-US/docs/index.html#cancel-all-pending-orders-for-a-single-trading-pair
2101
+
1773
2102
  :param str symbol: unified market symbol of the market to cancel orders in
1774
2103
  :param dict [params]: extra parameters specific to the exchange API endpoint
1775
2104
  :returns dict[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
@@ -1799,8 +2128,8 @@ class lbank(Exchange, ImplicitAPI):
1799
2128
  # "ts":1648506641469
1800
2129
  # }
1801
2130
  #
1802
- result = self.safe_value(response, 'data', [])
1803
- return result
2131
+ data = self.safe_list(response, 'data', [])
2132
+ return self.parse_orders(data)
1804
2133
 
1805
2134
  def get_network_code_for_currency(self, currencyCode, params):
1806
2135
  defaultNetworks = self.safe_value(self.options, 'defaultNetworks')
@@ -1810,11 +2139,13 @@ class lbank(Exchange, ImplicitAPI):
1810
2139
  network = self.safe_string(networks, network, network) # handle ERC20>ETH alias
1811
2140
  return network
1812
2141
 
1813
- def fetch_deposit_address(self, code: str, params={}):
2142
+ def fetch_deposit_address(self, code: str, params={}) -> DepositAddress:
1814
2143
  """
1815
2144
  fetch the deposit address for a currency associated with self account
1816
- :see: https://www.lbank.com/en-US/docs/index.html#get-deposit-address
1817
- :see: https://www.lbank.com/en-US/docs/index.html#the-user-obtains-the-deposit-address
2145
+
2146
+ https://www.lbank.com/en-US/docs/index.html#get-deposit-address
2147
+ https://www.lbank.com/en-US/docs/index.html#the-user-obtains-the-deposit-address
2148
+
1818
2149
  :param str code: unified currency code
1819
2150
  :param dict [params]: extra parameters specific to the exchange API endpoint
1820
2151
  :returns dict: an `address structure <https://docs.ccxt.com/#/?id=address-structure>`
@@ -1831,7 +2162,7 @@ class lbank(Exchange, ImplicitAPI):
1831
2162
  response = self.fetch_deposit_address_default(code, params)
1832
2163
  return response
1833
2164
 
1834
- def fetch_deposit_address_default(self, code: str, params={}):
2165
+ def fetch_deposit_address_default(self, code: str, params={}) -> DepositAddress:
1835
2166
  self.load_markets()
1836
2167
  currency = self.currency(code)
1837
2168
  request: dict = {
@@ -1858,18 +2189,15 @@ class lbank(Exchange, ImplicitAPI):
1858
2189
  result = self.safe_value(response, 'data')
1859
2190
  address = self.safe_string(result, 'address')
1860
2191
  tag = self.safe_string(result, 'memo')
1861
- networkId = self.safe_string(result, 'netWork')
1862
- inverseNetworks = self.safe_value(self.options, 'inverse-networks', {})
1863
- networkCode = self.safe_string_upper(inverseNetworks, networkId, networkId)
1864
2192
  return {
2193
+ 'info': response,
1865
2194
  'currency': code,
2195
+ 'network': self.network_id_to_code(self.safe_string(result, 'netWork')),
1866
2196
  'address': address,
1867
2197
  'tag': tag,
1868
- 'network': networkCode,
1869
- 'info': response,
1870
2198
  }
1871
2199
 
1872
- def fetch_deposit_address_supplement(self, code: str, params={}):
2200
+ def fetch_deposit_address_supplement(self, code: str, params={}) -> DepositAddress:
1873
2201
  # returns the address for whatever the default network is...
1874
2202
  self.load_markets()
1875
2203
  currency = self.currency(code)
@@ -1898,20 +2226,20 @@ class lbank(Exchange, ImplicitAPI):
1898
2226
  result = self.safe_value(response, 'data')
1899
2227
  address = self.safe_string(result, 'address')
1900
2228
  tag = self.safe_string(result, 'memo')
1901
- inverseNetworks = self.safe_value(self.options, 'inverse-networks', {})
1902
- networkCode = self.safe_string_upper(inverseNetworks, network, network)
1903
2229
  return {
2230
+ 'info': response,
1904
2231
  'currency': code,
2232
+ 'network': None,
1905
2233
  'address': address,
1906
2234
  'tag': tag,
1907
- 'network': networkCode, # will be None if not specified in request
1908
- 'info': response,
1909
2235
  }
1910
2236
 
1911
- def withdraw(self, code: str, amount: float, address: str, tag=None, params={}) -> Transaction:
2237
+ def withdraw(self, code: str, amount: float, address: str, tag: Str = None, params={}) -> Transaction:
1912
2238
  """
1913
2239
  make a withdrawal
1914
- :see: https://www.lbank.com/en-US/docs/index.html#withdrawal
2240
+
2241
+ https://www.lbank.com/en-US/docs/index.html#withdrawal
2242
+
1915
2243
  :param str code: unified currency code
1916
2244
  :param float amount: the amount to withdraw
1917
2245
  :param str address: the address to withdraw to
@@ -2021,9 +2349,6 @@ class lbank(Exchange, ImplicitAPI):
2021
2349
  type = 'withdrawal'
2022
2350
  txid = self.safe_string(transaction, 'txId')
2023
2351
  timestamp = self.safe_integer_2(transaction, 'insertTime', 'applyTime')
2024
- networks = self.safe_value(self.options, 'inverse-networks', {})
2025
- networkId = self.safe_string(transaction, 'networkName')
2026
- network = self.safe_string(networks, networkId, networkId)
2027
2352
  address = self.safe_string(transaction, 'address')
2028
2353
  addressFrom = None
2029
2354
  addressTo = None
@@ -2048,7 +2373,7 @@ class lbank(Exchange, ImplicitAPI):
2048
2373
  'txid': txid,
2049
2374
  'timestamp': timestamp,
2050
2375
  'datetime': self.iso8601(timestamp),
2051
- 'network': network,
2376
+ 'network': self.network_id_to_code(self.safe_string(transaction, 'networkName')),
2052
2377
  'address': address,
2053
2378
  'addressTo': addressTo,
2054
2379
  'addressFrom': addressFrom,
@@ -2068,7 +2393,9 @@ class lbank(Exchange, ImplicitAPI):
2068
2393
  def fetch_deposits(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
2069
2394
  """
2070
2395
  fetch all deposits made to an account
2071
- :see: https://www.lbank.com/en-US/docs/index.html#get-recharge-history
2396
+
2397
+ https://www.lbank.com/en-US/docs/index.html#get-recharge-history
2398
+
2072
2399
  :param str code: unified currency code
2073
2400
  :param int [since]: the earliest time in ms to fetch deposits for
2074
2401
  :param int [limit]: the maximum number of deposits structures to retrieve
@@ -2117,7 +2444,9 @@ class lbank(Exchange, ImplicitAPI):
2117
2444
  def fetch_withdrawals(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
2118
2445
  """
2119
2446
  fetch all withdrawals made from an account
2120
- :see: https://www.lbank.com/en-US/docs/index.html#get-withdrawal-history
2447
+
2448
+ https://www.lbank.com/en-US/docs/index.html#get-withdrawal-history
2449
+
2121
2450
  :param str code: unified currency code
2122
2451
  :param int [since]: the earliest time in ms to fetch withdrawals for
2123
2452
  :param int [limit]: the maximum number of withdrawals structures to retrieve
@@ -2169,7 +2498,7 @@ class lbank(Exchange, ImplicitAPI):
2169
2498
 
2170
2499
  def fetch_transaction_fees(self, codes: Strings = None, params={}):
2171
2500
  """
2172
- * @deprecated
2501
+ @deprecated
2173
2502
  please use fetchDepositWithdrawFees instead
2174
2503
  :param str[]|None codes: not used by lbank fetchTransactionFees()
2175
2504
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -2237,10 +2566,9 @@ class lbank(Exchange, ImplicitAPI):
2237
2566
  withdrawFees[code] = {}
2238
2567
  for j in range(0, len(networkList)):
2239
2568
  networkEntry = networkList[j]
2240
- networkId = self.safe_string(networkEntry, 'name')
2241
- networkCode = self.safe_string(self.options['inverse-networks'], networkId, networkId)
2242
2569
  fee = self.safe_number(networkEntry, 'withdrawFee')
2243
2570
  if fee is not None:
2571
+ networkCode = self.network_id_to_code(self.safe_string(networkEntry, 'name'))
2244
2572
  withdrawFees[code][networkCode] = fee
2245
2573
  return {
2246
2574
  'withdraw': withdrawFees,
@@ -2288,8 +2616,7 @@ class lbank(Exchange, ImplicitAPI):
2288
2616
  if canWithdraw == 'true':
2289
2617
  currencyId = self.safe_string(item, 'assetCode')
2290
2618
  codeInner = self.safe_currency_code(currencyId)
2291
- chain = self.safe_string(item, 'chain')
2292
- network = self.safe_string(self.options['inverse-networks'], chain, chain)
2619
+ network = self.network_id_to_code(self.safe_string(item, 'chain'))
2293
2620
  if network is None:
2294
2621
  network = codeInner
2295
2622
  fee = self.safe_string(item, 'fee')
@@ -2305,9 +2632,11 @@ class lbank(Exchange, ImplicitAPI):
2305
2632
  def fetch_deposit_withdraw_fees(self, codes: Strings = None, params={}):
2306
2633
  """
2307
2634
  when using private endpoint, only returns information for currencies with non-zero balance, use public method by specifying self.options['fetchDepositWithdrawFees']['method'] = 'fetchPublicDepositWithdrawFees'
2308
- :see: https://www.lbank.com/en-US/docs/index.html#get-all-coins-information
2309
- :see: https://www.lbank.com/en-US/docs/index.html#withdrawal-configurations
2310
- :param str[]|None codes: array of unified currency codes
2635
+
2636
+ https://www.lbank.com/en-US/docs/index.html#get-all-coins-information
2637
+ https://www.lbank.com/en-US/docs/index.html#withdrawal-configurations
2638
+
2639
+ :param str[] [codes]: array of unified currency codes
2311
2640
  :param dict [params]: extra parameters specific to the exchange API endpoint
2312
2641
  :returns dict: a list of `fee structures <https://docs.ccxt.com/#/?id=fee-structure>`
2313
2642
  """
@@ -2320,11 +2649,11 @@ class lbank(Exchange, ImplicitAPI):
2320
2649
  method = self.safe_string(params, 'method', defaultMethod)
2321
2650
  params = self.omit(params, 'method')
2322
2651
  if method == 'fetchPublicDepositWithdrawFees':
2323
- self.fetch_public_deposit_withdraw_fees(codes, params)
2652
+ response = self.fetch_public_deposit_withdraw_fees(codes, params)
2324
2653
  else:
2325
- self.fetch_private_deposit_withdraw_fees(codes, params)
2654
+ response = self.fetch_private_deposit_withdraw_fees(codes, params)
2326
2655
  else:
2327
- self.fetch_public_deposit_withdraw_fees(codes, params)
2656
+ response = self.fetch_public_deposit_withdraw_fees(codes, params)
2328
2657
  return response
2329
2658
 
2330
2659
  def fetch_private_deposit_withdraw_fees(self, codes=None, params={}):
@@ -2426,9 +2755,9 @@ class lbank(Exchange, ImplicitAPI):
2426
2755
  if resultValue is None:
2427
2756
  result[code] = self.deposit_withdraw_fee([fee])
2428
2757
  else:
2429
- result[code]['info'].append(fee)
2430
- chain = self.safe_string(fee, 'chain')
2431
- networkCode = self.safe_string(self.options['inverse-networks'], chain, chain)
2758
+ resultCodeInfo = result[code]['info']
2759
+ resultCodeInfo.append(fee)
2760
+ networkCode = self.network_id_to_code(self.safe_string(fee, 'chain'))
2432
2761
  if networkCode is not None:
2433
2762
  result[code]['networks'][networkCode] = {
2434
2763
  'withdraw': {
@@ -2478,8 +2807,7 @@ class lbank(Exchange, ImplicitAPI):
2478
2807
  networkList = self.safe_value(fee, 'networkList', [])
2479
2808
  for j in range(0, len(networkList)):
2480
2809
  networkEntry = networkList[j]
2481
- networkId = self.safe_string(networkEntry, 'name')
2482
- networkCode = self.safe_string_upper(self.options['inverse-networks'], networkId, networkId)
2810
+ networkCode = self.network_id_to_code(self.safe_string(networkEntry, 'name'))
2483
2811
  withdrawFee = self.safe_number(networkEntry, 'withdrawFee')
2484
2812
  isDefault = self.safe_value(networkEntry, 'isDefault')
2485
2813
  if withdrawFee is not None: