ccxt-ir 4.9.32 → 4.11.0
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.
- package/README.md +4 -4
- package/dist/ccxt.browser.min.js +2 -2
- package/dist/cjs/ccxt.js +7 -1
- package/dist/cjs/package.json +1 -1
- package/dist/cjs/src/abstract/asretether.js +11 -0
- package/dist/cjs/src/abstract/bidarz.js +11 -0
- package/dist/cjs/src/asretether.js +325 -0
- package/dist/cjs/src/bidarz.js +337 -0
- package/dist/cjs/src/bit24.js +4 -3
- package/dist/cjs/src/raastin.js +144 -16
- package/js/ccxt.d.ts +8 -2
- package/js/ccxt.js +6 -2
- package/js/src/abstract/asretether.d.ts +8 -0
- package/js/src/abstract/asretether.js +11 -0
- package/js/src/abstract/bidarz.d.ts +9 -0
- package/js/src/abstract/bidarz.js +11 -0
- package/js/src/abstract/raastin.d.ts +1 -0
- package/js/src/asretether.d.ts +21 -0
- package/js/src/asretether.js +324 -0
- package/js/src/bidarz.d.ts +22 -0
- package/js/src/bidarz.js +336 -0
- package/js/src/bit24.js +4 -3
- package/js/src/raastin.d.ts +2 -0
- package/js/src/raastin.js +144 -16
- package/js/src/src/abantether.d.ts +21 -0
- package/js/src/src/abantether.js +353 -0
- package/js/src/src/abstract/abantether.d.ts +8 -0
- package/js/src/src/abstract/abantether.js +11 -0
- package/js/src/src/abstract/afratether.d.ts +9 -0
- package/js/src/src/abstract/afratether.js +11 -0
- package/js/src/src/abstract/alpaca.d.ts +77 -0
- package/js/src/src/abstract/alpaca.js +11 -0
- package/js/src/src/abstract/apex.d.ts +34 -0
- package/js/src/src/abstract/apex.js +11 -0
- package/js/src/src/abstract/arzinja.d.ts +8 -0
- package/js/src/src/abstract/arzinja.js +11 -0
- package/js/src/src/abstract/arzplus.d.ts +11 -0
- package/js/src/src/abstract/arzplus.js +11 -0
- package/js/src/src/abstract/ascendex.d.ts +80 -0
- package/js/src/src/abstract/ascendex.js +11 -0
- package/js/src/src/abstract/asretether.d.ts +8 -0
- package/js/src/src/abstract/asretether.js +11 -0
- package/js/src/src/abstract/bidarz.d.ts +9 -0
- package/js/src/src/abstract/bidarz.js +11 -0
- package/js/src/src/abstract/bigone.d.ts +48 -0
- package/js/src/src/abstract/bigone.js +11 -0
- package/js/src/src/abstract/binance.d.ts +773 -0
- package/js/src/src/abstract/binance.js +11 -0
- package/js/src/src/abstract/bingx.d.ts +165 -0
- package/js/src/src/abstract/bingx.js +11 -0
- package/js/src/src/abstract/bit24.d.ts +9 -0
- package/js/src/src/abstract/bit24.js +11 -0
- package/js/src/src/abstract/bit2c.d.ts +30 -0
- package/js/src/src/abstract/bit2c.js +11 -0
- package/js/src/src/abstract/bitbank.d.ts +35 -0
- package/js/src/src/abstract/bitbank.js +11 -0
- package/js/src/src/abstract/bitbarg.d.ts +8 -0
- package/js/src/src/abstract/bitbarg.js +11 -0
- package/js/src/src/abstract/bitbns.d.ts +43 -0
- package/js/src/src/abstract/bitbns.js +11 -0
- package/js/src/src/abstract/bitfinex.d.ts +143 -0
- package/js/src/src/abstract/bitfinex.js +11 -0
- package/js/src/src/abstract/bitflyer.d.ts +42 -0
- package/js/src/src/abstract/bitflyer.js +11 -0
- package/js/src/src/abstract/bitget.d.ts +578 -0
- package/js/src/src/abstract/bitget.js +11 -0
- package/js/src/src/abstract/bithumb.d.ts +35 -0
- package/js/src/src/abstract/bithumb.js +11 -0
- package/js/src/src/abstract/bitimen.d.ts +10 -0
- package/js/src/src/abstract/bitimen.js +11 -0
- package/js/src/src/abstract/bitir.d.ts +10 -0
- package/js/src/src/abstract/bitir.js +11 -0
- package/js/src/src/abstract/bitmart.d.ts +120 -0
- package/js/src/src/abstract/bitmart.js +11 -0
- package/js/src/src/abstract/bitmex.d.ts +100 -0
- package/js/src/src/abstract/bitmex.js +11 -0
- package/js/src/src/abstract/bitopro.d.ts +33 -0
- package/js/src/src/abstract/bitopro.js +11 -0
- package/js/src/src/abstract/bitpin.d.ts +11 -0
- package/js/src/src/abstract/bitpin.js +11 -0
- package/js/src/src/abstract/bitrue.d.ts +75 -0
- package/js/src/src/abstract/bitrue.js +11 -0
- package/js/src/src/abstract/bitso.d.ts +46 -0
- package/js/src/src/abstract/bitso.js +11 -0
- package/js/src/src/abstract/bitstamp.d.ts +262 -0
- package/js/src/src/abstract/bitstamp.js +11 -0
- package/js/src/src/abstract/bitteam.d.ts +32 -0
- package/js/src/src/abstract/bitteam.js +11 -0
- package/js/src/src/abstract/bittrade.d.ts +117 -0
- package/js/src/src/abstract/bittrade.js +11 -0
- package/js/src/src/abstract/bitunix.d.ts +9 -0
- package/js/src/src/abstract/bitunix.js +11 -0
- package/js/src/src/abstract/bitvavo.d.ts +30 -0
- package/js/src/src/abstract/bitvavo.js +11 -0
- package/js/src/src/abstract/blockchaincom.d.ts +31 -0
- package/js/src/src/abstract/blockchaincom.js +11 -0
- package/js/src/src/abstract/blofin.d.ts +70 -0
- package/js/src/src/abstract/blofin.js +11 -0
- package/js/src/src/abstract/btcalpha.d.ts +21 -0
- package/js/src/src/abstract/btcalpha.js +11 -0
- package/js/src/src/abstract/btcbox.d.ts +18 -0
- package/js/src/src/abstract/btcbox.js +11 -0
- package/js/src/src/abstract/btcmarkets.d.ts +42 -0
- package/js/src/src/abstract/btcmarkets.js +11 -0
- package/js/src/src/abstract/btcturk.d.ts +23 -0
- package/js/src/src/abstract/btcturk.js +11 -0
- package/js/src/src/abstract/bybit.d.ts +316 -0
- package/js/src/src/abstract/bybit.js +11 -0
- package/js/src/src/abstract/bydfi.d.ts +11 -0
- package/js/src/src/abstract/bydfi.js +11 -0
- package/js/src/src/abstract/cafearz.d.ts +8 -0
- package/js/src/src/abstract/cafearz.js +11 -0
- package/js/src/src/abstract/cex.d.ts +35 -0
- package/js/src/src/abstract/cex.js +11 -0
- package/js/src/src/abstract/coinbase.d.ts +97 -0
- package/js/src/src/abstract/coinbase.js +11 -0
- package/js/src/src/abstract/coinbaseexchange.d.ts +71 -0
- package/js/src/src/abstract/coinbaseexchange.js +11 -0
- package/js/src/src/abstract/coinbaseinternational.d.ts +42 -0
- package/js/src/src/abstract/coinbaseinternational.js +11 -0
- package/js/src/src/abstract/coincatch.d.ts +97 -0
- package/js/src/src/abstract/coincatch.js +11 -0
- package/js/src/src/abstract/coincheck.d.ts +36 -0
- package/js/src/src/abstract/coincheck.js +11 -0
- package/js/src/src/abstract/coinex.d.ts +240 -0
- package/js/src/src/abstract/coinex.js +11 -0
- package/js/src/src/abstract/coinmate.d.ts +65 -0
- package/js/src/src/abstract/coinmate.js +11 -0
- package/js/src/src/abstract/coinmetro.d.ts +37 -0
- package/js/src/src/abstract/coinmetro.js +11 -0
- package/js/src/src/abstract/coinone.d.ts +70 -0
- package/js/src/src/abstract/coinone.js +11 -0
- package/js/src/src/abstract/coinsph.d.ts +57 -0
- package/js/src/src/abstract/coinsph.js +11 -0
- package/js/src/src/abstract/coinspot.d.ts +31 -0
- package/js/src/src/abstract/coinspot.js +11 -0
- package/js/src/src/abstract/cryptocom.d.ts +126 -0
- package/js/src/src/abstract/cryptocom.js +11 -0
- package/js/src/src/abstract/cryptomus.d.ts +23 -0
- package/js/src/src/abstract/cryptomus.js +11 -0
- package/js/src/src/abstract/defx.d.ts +72 -0
- package/js/src/src/abstract/defx.js +11 -0
- package/js/src/src/abstract/delta.d.ts +53 -0
- package/js/src/src/abstract/delta.js +11 -0
- package/js/src/src/abstract/deribit.d.ts +129 -0
- package/js/src/src/abstract/deribit.js +11 -0
- package/js/src/src/abstract/derive.d.ts +120 -0
- package/js/src/src/abstract/derive.js +11 -0
- package/js/src/src/abstract/digifinex.d.ts +95 -0
- package/js/src/src/abstract/digifinex.js +11 -0
- package/js/src/src/abstract/ellipx.d.ts +28 -0
- package/js/src/src/abstract/ellipx.js +11 -0
- package/js/src/src/abstract/eterex.d.ts +8 -0
- package/js/src/src/abstract/eterex.js +11 -0
- package/js/src/src/abstract/excoino.d.ts +10 -0
- package/js/src/src/abstract/excoino.js +11 -0
- package/js/src/src/abstract/exir.d.ts +11 -0
- package/js/src/src/abstract/exir.js +11 -0
- package/js/src/src/abstract/exmo.d.ts +58 -0
- package/js/src/src/abstract/exmo.js +11 -0
- package/js/src/src/abstract/exnovin.d.ts +9 -0
- package/js/src/src/abstract/exnovin.js +11 -0
- package/js/src/src/abstract/farhadexchange.d.ts +8 -0
- package/js/src/src/abstract/farhadexchange.js +11 -0
- package/js/src/src/abstract/foxbit.d.ts +29 -0
- package/js/src/src/abstract/foxbit.js +11 -0
- package/js/src/src/abstract/gate.d.ts +287 -0
- package/js/src/src/abstract/gate.js +11 -0
- package/js/src/src/abstract/gemini.d.ts +62 -0
- package/js/src/src/abstract/gemini.js +11 -0
- package/js/src/src/abstract/hamtapay.d.ts +9 -0
- package/js/src/src/abstract/hamtapay.js +11 -0
- package/js/src/src/abstract/hashkey.d.ts +70 -0
- package/js/src/src/abstract/hashkey.js +11 -0
- package/js/src/src/abstract/hibachi.d.ts +29 -0
- package/js/src/src/abstract/hibachi.js +11 -0
- package/js/src/src/abstract/hitbtc.d.ts +118 -0
- package/js/src/src/abstract/hitbtc.js +11 -0
- package/js/src/src/abstract/hitobit.d.ts +11 -0
- package/js/src/src/abstract/hitobit.js +11 -0
- package/js/src/src/abstract/hollaex.d.ts +36 -0
- package/js/src/src/abstract/hollaex.js +11 -0
- package/js/src/src/abstract/htx.d.ts +551 -0
- package/js/src/src/abstract/htx.js +11 -0
- package/js/src/src/abstract/hyperliquid.d.ts +9 -0
- package/js/src/src/abstract/hyperliquid.js +11 -0
- package/js/src/src/abstract/independentreserve.d.ts +46 -0
- package/js/src/src/abstract/independentreserve.js +11 -0
- package/js/src/src/abstract/indodax.d.ts +29 -0
- package/js/src/src/abstract/indodax.js +11 -0
- package/js/src/src/abstract/iranexchange.d.ts +9 -0
- package/js/src/src/abstract/iranexchange.js +11 -0
- package/js/src/src/abstract/jibitex.d.ts +10 -0
- package/js/src/src/abstract/jibitex.js +11 -0
- package/js/src/src/abstract/kcex.d.ts +10 -0
- package/js/src/src/abstract/kcex.js +11 -0
- package/js/src/src/abstract/kifpoolme.d.ts +9 -0
- package/js/src/src/abstract/kifpoolme.js +11 -0
- package/js/src/src/abstract/kraken.d.ts +61 -0
- package/js/src/src/abstract/kraken.js +11 -0
- package/js/src/src/abstract/krakenfutures.d.ts +45 -0
- package/js/src/src/abstract/krakenfutures.js +11 -0
- package/js/src/src/abstract/kucoin.d.ts +227 -0
- package/js/src/src/abstract/kucoin.js +11 -0
- package/js/src/src/abstract/kucoinfutures.d.ts +254 -0
- package/js/src/src/abstract/kucoinfutures.js +11 -0
- package/js/src/src/abstract/latoken.d.ts +59 -0
- package/js/src/src/abstract/latoken.js +11 -0
- package/js/src/src/abstract/lbank.d.ts +65 -0
- package/js/src/src/abstract/lbank.js +11 -0
- package/js/src/src/abstract/luno.d.ts +41 -0
- package/js/src/src/abstract/luno.js +11 -0
- package/js/src/src/abstract/mazdax.d.ts +11 -0
- package/js/src/src/abstract/mazdax.js +11 -0
- package/js/src/src/abstract/mercado.d.ts +28 -0
- package/js/src/src/abstract/mercado.js +11 -0
- package/js/src/src/abstract/mexc.d.ts +183 -0
- package/js/src/src/abstract/mexc.js +11 -0
- package/js/src/src/abstract/modetrade.d.ts +122 -0
- package/js/src/src/abstract/modetrade.js +11 -0
- package/js/src/src/abstract/ndax.d.ts +100 -0
- package/js/src/src/abstract/ndax.js +11 -0
- package/js/src/src/abstract/nobitex.d.ts +10 -0
- package/js/src/src/abstract/nobitex.js +11 -0
- package/js/src/src/abstract/novadax.d.ts +32 -0
- package/js/src/src/abstract/novadax.js +11 -0
- package/js/src/src/abstract/oceanex.d.ts +30 -0
- package/js/src/src/abstract/oceanex.js +11 -0
- package/js/src/src/abstract/okcoin.d.ts +77 -0
- package/js/src/src/abstract/okcoin.js +11 -0
- package/js/src/src/abstract/okexchange.d.ts +11 -0
- package/js/src/src/abstract/okexchange.js +11 -0
- package/js/src/src/abstract/okx.d.ts +352 -0
- package/js/src/src/abstract/okx.js +11 -0
- package/js/src/src/abstract/ompfinex.d.ts +10 -0
- package/js/src/src/abstract/ompfinex.js +11 -0
- package/js/src/src/abstract/onetrading.d.ts +26 -0
- package/js/src/src/abstract/onetrading.js +11 -0
- package/js/src/src/abstract/oxfun.d.ts +37 -0
- package/js/src/src/abstract/oxfun.js +11 -0
- package/js/src/src/abstract/p2b.d.ts +25 -0
- package/js/src/src/abstract/p2b.js +11 -0
- package/js/src/src/abstract/paradex.d.ts +66 -0
- package/js/src/src/abstract/paradex.js +11 -0
- package/js/src/src/abstract/paymium.d.ts +31 -0
- package/js/src/src/abstract/paymium.js +11 -0
- package/js/src/src/abstract/phemex.d.ts +120 -0
- package/js/src/src/abstract/phemex.js +11 -0
- package/js/src/src/abstract/pingi.d.ts +9 -0
- package/js/src/src/abstract/pingi.js +11 -0
- package/js/src/src/abstract/poloniex.d.ts +108 -0
- package/js/src/src/abstract/poloniex.js +11 -0
- package/js/src/src/abstract/pooleno.d.ts +8 -0
- package/js/src/src/abstract/pooleno.js +11 -0
- package/js/src/src/abstract/probit.d.ts +26 -0
- package/js/src/src/abstract/probit.js +11 -0
- package/js/src/src/abstract/raastin.d.ts +11 -0
- package/js/src/src/abstract/raastin.js +11 -0
- package/js/src/src/abstract/ramzinex.d.ts +10 -0
- package/js/src/src/abstract/ramzinex.js +11 -0
- package/js/src/src/abstract/sarmayex.d.ts +8 -0
- package/js/src/src/abstract/sarmayex.js +11 -0
- package/js/src/src/abstract/sarrafex.d.ts +10 -0
- package/js/src/src/abstract/sarrafex.js +11 -0
- package/js/src/src/abstract/tabdeal.d.ts +10 -0
- package/js/src/src/abstract/tabdeal.js +11 -0
- package/js/src/src/abstract/tehran_exchange.d.ts +9 -0
- package/js/src/src/abstract/tehran_exchange.js +11 -0
- package/js/src/src/abstract/tetherland.d.ts +8 -0
- package/js/src/src/abstract/tetherland.js +11 -0
- package/js/src/src/abstract/timex.d.ts +65 -0
- package/js/src/src/abstract/timex.js +11 -0
- package/js/src/src/abstract/tokocrypto.d.ts +40 -0
- package/js/src/src/abstract/tokocrypto.js +11 -0
- package/js/src/src/abstract/toobit.d.ts +10 -0
- package/js/src/src/abstract/toobit.js +11 -0
- package/js/src/src/abstract/tradeogre.d.ts +21 -0
- package/js/src/src/abstract/tradeogre.js +11 -0
- package/js/src/src/abstract/twox.d.ts +8 -0
- package/js/src/src/abstract/twox.js +11 -0
- package/js/src/src/abstract/ubitex.d.ts +10 -0
- package/js/src/src/abstract/ubitex.js +11 -0
- package/js/src/src/abstract/upbit.d.ts +58 -0
- package/js/src/src/abstract/upbit.js +11 -0
- package/js/src/src/abstract/vertex.d.ts +22 -0
- package/js/src/src/abstract/vertex.js +11 -0
- package/js/src/src/abstract/wallex.d.ts +11 -0
- package/js/src/src/abstract/wallex.js +11 -0
- package/js/src/src/abstract/wavesexchange.d.ts +157 -0
- package/js/src/src/abstract/wavesexchange.js +11 -0
- package/js/src/src/abstract/whitebit.d.ts +117 -0
- package/js/src/src/abstract/whitebit.js +11 -0
- package/js/src/src/abstract/woo.d.ts +144 -0
- package/js/src/src/abstract/woo.js +11 -0
- package/js/src/src/abstract/woofipro.d.ts +122 -0
- package/js/src/src/abstract/woofipro.js +11 -0
- package/js/src/src/abstract/xt.d.ts +160 -0
- package/js/src/src/abstract/xt.js +11 -0
- package/js/src/src/abstract/yobit.d.ts +19 -0
- package/js/src/src/abstract/yobit.js +11 -0
- package/js/src/src/abstract/zaif.d.ts +41 -0
- package/js/src/src/abstract/zaif.js +11 -0
- package/js/src/src/abstract/zonda.d.ts +56 -0
- package/js/src/src/abstract/zonda.js +11 -0
- package/js/src/src/afratether.d.ts +21 -0
- package/js/src/src/afratether.js +356 -0
- package/js/src/src/alpaca.d.ts +332 -0
- package/js/src/src/alpaca.js +1908 -0
- package/js/src/src/apex.d.ts +333 -0
- package/js/src/src/apex.js +1942 -0
- package/js/src/src/arzinja.d.ts +21 -0
- package/js/src/src/arzinja.js +298 -0
- package/js/src/src/arzplus.d.ts +26 -0
- package/js/src/src/arzplus.js +581 -0
- package/js/src/src/ascendex.d.ts +424 -0
- package/js/src/src/ascendex.js +3699 -0
- package/js/src/src/asretether.d.ts +21 -0
- package/js/src/src/asretether.js +324 -0
- package/js/src/src/base/Exchange.d.ts +926 -0
- package/js/src/src/base/Exchange.js +7399 -0
- package/js/src/src/base/Precise.d.ts +42 -0
- package/js/src/src/base/Precise.js +275 -0
- package/js/src/src/base/errors.d.ts +168 -0
- package/js/src/src/base/errors.js +255 -0
- package/js/src/src/base/functions/crypto.d.ts +16 -0
- package/js/src/src/base/functions/crypto.js +131 -0
- package/js/src/src/base/functions/encode.d.ts +4 -0
- package/js/src/src/base/functions/encode.js +32 -0
- package/js/src/src/base/functions/generic.d.ts +29 -0
- package/js/src/src/base/functions/generic.js +203 -0
- package/js/src/src/base/functions/misc.d.ts +9 -0
- package/js/src/src/base/functions/misc.js +101 -0
- package/js/src/src/base/functions/number.d.ts +27 -0
- package/js/src/src/base/functions/number.js +313 -0
- package/js/src/src/base/functions/platform.d.ts +7 -0
- package/js/src/src/base/functions/platform.js +27 -0
- package/js/src/src/base/functions/rsa.d.ts +5 -0
- package/js/src/src/base/functions/rsa.js +49 -0
- package/js/src/src/base/functions/string.d.ts +7 -0
- package/js/src/src/base/functions/string.js +44 -0
- package/js/src/src/base/functions/throttle.d.ts +6 -0
- package/js/src/src/base/functions/throttle.js +67 -0
- package/js/src/src/base/functions/time.d.ts +21 -0
- package/js/src/src/base/functions/time.js +171 -0
- package/js/src/src/base/functions/totp.d.ts +3 -0
- package/js/src/src/base/functions/totp.js +25 -0
- package/js/src/src/base/functions/type.d.ts +37 -0
- package/js/src/src/base/functions/type.js +179 -0
- package/js/src/src/base/functions.d.ts +10 -0
- package/js/src/src/base/functions.js +18 -0
- package/js/src/src/base/types.d.ts +586 -0
- package/js/src/src/base/types.js +7 -0
- package/js/src/src/base/ws/Cache.d.ts +27 -0
- package/js/src/src/base/ws/Cache.js +260 -0
- package/js/src/src/base/ws/Client.d.ts +53 -0
- package/js/src/src/base/ws/Client.js +307 -0
- package/js/src/src/base/ws/Future.d.ts +8 -0
- package/js/src/src/base/ws/Future.js +35 -0
- package/js/src/src/base/ws/OrderBook.d.ts +25 -0
- package/js/src/src/base/ws/OrderBook.js +130 -0
- package/js/src/src/base/ws/OrderBookSide.d.ts +40 -0
- package/js/src/src/base/ws/OrderBookSide.js +286 -0
- package/js/src/src/base/ws/WsClient.d.ts +11 -0
- package/js/src/src/base/ws/WsClient.js +69 -0
- package/js/src/src/bequant.d.ts +4 -0
- package/js/src/src/bequant.js +35 -0
- package/js/src/src/bidarz.d.ts +16 -0
- package/js/src/src/bidarz.js +327 -0
- package/js/src/src/bigone.d.ts +296 -0
- package/js/src/src/bigone.js +2340 -0
- package/js/src/src/binance.d.ts +1667 -0
- package/js/src/src/binance.js +14400 -0
- package/js/src/src/binancecoinm.d.ts +6 -0
- package/js/src/src/binancecoinm.js +51 -0
- package/js/src/src/binanceus.d.ts +4 -0
- package/js/src/src/binanceus.js +225 -0
- package/js/src/src/binanceusdm.d.ts +6 -0
- package/js/src/src/binanceusdm.js +63 -0
- package/js/src/src/bingx.d.ts +778 -0
- package/js/src/src/bingx.js +6705 -0
- package/js/src/src/bit24.d.ts +24 -0
- package/js/src/src/bit24.js +520 -0
- package/js/src/src/bit2c.d.ts +146 -0
- package/js/src/src/bit2c.js +1029 -0
- package/js/src/src/bitbank.d.ts +181 -0
- package/js/src/src/bitbank.js +1146 -0
- package/js/src/src/bitbarg.d.ts +21 -0
- package/js/src/src/bitbarg.js +312 -0
- package/js/src/src/bitbns.d.ts +184 -0
- package/js/src/src/bitbns.js +1288 -0
- package/js/src/src/bitfinex.d.ts +516 -0
- package/js/src/src/bitfinex.js +3951 -0
- package/js/src/src/bitflyer.d.ts +229 -0
- package/js/src/src/bitflyer.js +1209 -0
- package/js/src/src/bitget.d.ts +1109 -0
- package/js/src/src/bitget.js +11033 -0
- package/js/src/src/bithumb.d.ts +165 -0
- package/js/src/src/bithumb.js +1257 -0
- package/js/src/src/bitimen.d.ts +23 -0
- package/js/src/src/bitimen.js +424 -0
- package/js/src/src/bitir.d.ts +23 -0
- package/js/src/src/bitir.js +521 -0
- package/js/src/src/bitmart.d.ts +736 -0
- package/js/src/src/bitmart.js +5639 -0
- package/js/src/src/bitmex.d.ts +395 -0
- package/js/src/src/bitmex.js +3088 -0
- package/js/src/src/bitopro.d.ts +295 -0
- package/js/src/src/bitopro.js +1892 -0
- package/js/src/src/bitpin.d.ts +23 -0
- package/js/src/src/bitpin.js +487 -0
- package/js/src/src/bitrue.d.ts +384 -0
- package/js/src/src/bitrue.js +3382 -0
- package/js/src/src/bitso.d.ts +270 -0
- package/js/src/src/bitso.js +1881 -0
- package/js/src/src/bitstamp.d.ts +355 -0
- package/js/src/src/bitstamp.js +2445 -0
- package/js/src/src/bitteam.d.ts +229 -0
- package/js/src/src/bitteam.js +2420 -0
- package/js/src/src/bittrade.d.ts +298 -0
- package/js/src/src/bittrade.js +2050 -0
- package/js/src/src/bitunix.d.ts +21 -0
- package/js/src/src/bitunix.js +326 -0
- package/js/src/src/bitvavo.d.ts +311 -0
- package/js/src/src/bitvavo.js +2204 -0
- package/js/src/src/blockchaincom.d.ts +256 -0
- package/js/src/src/blockchaincom.js +1259 -0
- package/js/src/src/blofin.d.ts +439 -0
- package/js/src/src/blofin.js +2576 -0
- package/js/src/src/btcalpha.d.ts +209 -0
- package/js/src/src/btcalpha.js +1056 -0
- package/js/src/src/btcbox.d.ts +144 -0
- package/js/src/src/btcbox.js +834 -0
- package/js/src/src/btcmarkets.d.ts +253 -0
- package/js/src/src/btcmarkets.js +1418 -0
- package/js/src/src/btcturk.d.ts +161 -0
- package/js/src/src/btcturk.js +1058 -0
- package/js/src/src/bybit.d.ts +1097 -0
- package/js/src/src/bybit.js +9382 -0
- package/js/src/src/bydfi.d.ts +23 -0
- package/js/src/src/bydfi.js +434 -0
- package/js/src/src/cafearz.d.ts +21 -0
- package/js/src/src/cafearz.js +346 -0
- package/js/src/src/cex.d.ts +286 -0
- package/js/src/src/cex.js +1799 -0
- package/js/src/src/coinbase.d.ts +623 -0
- package/js/src/src/coinbase.js +5220 -0
- package/js/src/src/coinbaseadvanced.d.ts +4 -0
- package/js/src/src/coinbaseadvanced.js +18 -0
- package/js/src/src/coinbaseexchange.d.ts +334 -0
- package/js/src/src/coinbaseexchange.js +2127 -0
- package/js/src/src/coinbaseinternational.d.ts +443 -0
- package/js/src/src/coinbaseinternational.js +2336 -0
- package/js/src/src/coincatch.d.ts +786 -0
- package/js/src/src/coincatch.js +5492 -0
- package/js/src/src/coincheck.d.ts +147 -0
- package/js/src/src/coincheck.js +962 -0
- package/js/src/src/coinex.d.ts +719 -0
- package/js/src/src/coinex.js +6166 -0
- package/js/src/src/coinmate.d.ts +202 -0
- package/js/src/src/coinmate.js +1215 -0
- package/js/src/src/coinmetro.d.ts +244 -0
- package/js/src/src/coinmetro.js +2024 -0
- package/js/src/src/coinone.d.ts +158 -0
- package/js/src/src/coinone.js +1278 -0
- package/js/src/src/coinsph.d.ts +310 -0
- package/js/src/src/coinsph.js +2203 -0
- package/js/src/src/coinspot.d.ts +108 -0
- package/js/src/src/coinspot.js +653 -0
- package/js/src/src/cryptocom.d.ts +463 -0
- package/js/src/src/cryptocom.js +3549 -0
- package/js/src/src/cryptomus.d.ts +158 -0
- package/js/src/src/cryptomus.js +1169 -0
- package/js/src/src/defx.d.ts +348 -0
- package/js/src/src/defx.js +2139 -0
- package/js/src/src/delta.d.ts +407 -0
- package/js/src/src/delta.js +3654 -0
- package/js/src/src/deribit.d.ts +516 -0
- package/js/src/src/deribit.js +3790 -0
- package/js/src/src/derive.d.ts +324 -0
- package/js/src/src/derive.js +2655 -0
- package/js/src/src/digifinex.d.ts +544 -0
- package/js/src/src/digifinex.js +4453 -0
- package/js/src/src/ellipx.d.ts +237 -0
- package/js/src/src/ellipx.js +2071 -0
- package/js/src/src/eterex.d.ts +21 -0
- package/js/src/src/eterex.js +299 -0
- package/js/src/src/excoino.d.ts +23 -0
- package/js/src/src/excoino.js +426 -0
- package/js/src/src/exir.d.ts +23 -0
- package/js/src/src/exir.js +403 -0
- package/js/src/src/exmo.d.ts +426 -0
- package/js/src/src/exmo.js +2825 -0
- package/js/src/src/exnovin.d.ts +22 -0
- package/js/src/src/exnovin.js +378 -0
- package/js/src/src/farhadexchange.d.ts +21 -0
- package/js/src/src/farhadexchange.js +280 -0
- package/js/src/src/fmfwio.d.ts +4 -0
- package/js/src/src/fmfwio.js +35 -0
- package/js/src/src/foxbit.d.ts +352 -0
- package/js/src/src/foxbit.js +2016 -0
- package/js/src/src/gate.d.ts +1071 -0
- package/js/src/src/gate.js +8282 -0
- package/js/src/src/gateio.d.ts +4 -0
- package/js/src/src/gateio.js +17 -0
- package/js/src/src/gemini.d.ts +257 -0
- package/js/src/src/gemini.js +2006 -0
- package/js/src/src/hamtapay.d.ts +21 -0
- package/js/src/src/hamtapay.js +303 -0
- package/js/src/src/hashkey.d.ts +628 -0
- package/js/src/src/hashkey.js +4363 -0
- package/js/src/src/hibachi.d.ts +346 -0
- package/js/src/src/hibachi.js +2137 -0
- package/js/src/src/hitbtc.d.ts +558 -0
- package/js/src/src/hitbtc.js +3847 -0
- package/js/src/src/hitobit.d.ts +23 -0
- package/js/src/src/hitobit.js +412 -0
- package/js/src/src/hollaex.d.ts +305 -0
- package/js/src/src/hollaex.js +2046 -0
- package/js/src/src/htx.d.ts +961 -0
- package/js/src/src/htx.js +9668 -0
- package/js/src/src/huobi.d.ts +4 -0
- package/js/src/src/huobi.js +17 -0
- package/js/src/src/hyperliquid.d.ts +651 -0
- package/js/src/src/hyperliquid.js +3937 -0
- package/js/src/src/independentreserve.d.ts +169 -0
- package/js/src/src/independentreserve.js +1115 -0
- package/js/src/src/indodax.d.ts +217 -0
- package/js/src/src/indodax.js +1454 -0
- package/js/src/src/iranexchange.d.ts +21 -0
- package/js/src/src/iranexchange.js +399 -0
- package/js/src/src/jibitex.d.ts +23 -0
- package/js/src/src/jibitex.js +416 -0
- package/js/src/src/kcex.d.ts +21 -0
- package/js/src/src/kcex.js +335 -0
- package/js/src/src/kifpoolme.d.ts +23 -0
- package/js/src/src/kifpoolme.js +410 -0
- package/js/src/src/kraken.d.ts +484 -0
- package/js/src/src/kraken.js +3518 -0
- package/js/src/src/krakenfutures.d.ts +362 -0
- package/js/src/src/krakenfutures.js +2885 -0
- package/js/src/src/kucoin.d.ts +759 -0
- package/js/src/src/kucoin.js +5153 -0
- package/js/src/src/kucoinfutures.d.ts +521 -0
- package/js/src/src/kucoinfutures.js +3381 -0
- package/js/src/src/latoken.d.ts +274 -0
- package/js/src/src/latoken.js +1824 -0
- package/js/src/src/lbank.d.ts +350 -0
- package/js/src/src/lbank.js +3146 -0
- package/js/src/src/luno.d.ts +252 -0
- package/js/src/src/luno.js +1479 -0
- package/js/src/src/mazdax.d.ts +23 -0
- package/js/src/src/mazdax.js +534 -0
- package/js/src/src/mercado.d.ts +160 -0
- package/js/src/src/mercado.js +1011 -0
- package/js/src/src/mexc.d.ts +768 -0
- package/js/src/src/mexc.js +6102 -0
- package/js/src/src/modetrade.d.ts +496 -0
- package/js/src/src/modetrade.js +2936 -0
- package/js/src/src/myokx.d.ts +4 -0
- package/js/src/src/myokx.js +54 -0
- package/js/src/src/ndax.d.ts +285 -0
- package/js/src/src/ndax.js +2598 -0
- package/js/src/src/nobitex.d.ts +23 -0
- package/js/src/src/nobitex.js +454 -0
- package/js/src/src/novadax.d.ts +279 -0
- package/js/src/src/novadax.js +1676 -0
- package/js/src/src/oceanex.d.ts +231 -0
- package/js/src/src/oceanex.js +1123 -0
- package/js/src/src/okcoin.d.ts +346 -0
- package/js/src/src/okcoin.js +3211 -0
- package/js/src/src/okexchange.d.ts +23 -0
- package/js/src/src/okexchange.js +373 -0
- package/js/src/src/okx.d.ts +1125 -0
- package/js/src/src/okx.js +9009 -0
- package/js/src/src/okxus.d.ts +4 -0
- package/js/src/src/okxus.js +54 -0
- package/js/src/src/ompfinex.d.ts +23 -0
- package/js/src/src/ompfinex.js +510 -0
- package/js/src/src/onetrading.d.ts +228 -0
- package/js/src/src/onetrading.js +1769 -0
- package/js/src/src/oxfun.d.ts +442 -0
- package/js/src/src/oxfun.js +2920 -0
- package/js/src/src/p2b.d.ts +189 -0
- package/js/src/src/p2b.js +1344 -0
- package/js/src/src/paradex.d.ts +389 -0
- package/js/src/src/paradex.js +2607 -0
- package/js/src/src/paymium.d.ts +133 -0
- package/js/src/src/paymium.js +644 -0
- package/js/src/src/phemex.d.ts +497 -0
- package/js/src/src/phemex.js +5333 -0
- package/js/src/src/pingi.d.ts +22 -0
- package/js/src/src/pingi.js +446 -0
- package/js/src/src/poloniex.d.ts +441 -0
- package/js/src/src/poloniex.js +3681 -0
- package/js/src/src/pooleno.d.ts +21 -0
- package/js/src/src/pooleno.js +347 -0
- package/js/src/src/pro/alpaca.d.ts +95 -0
- package/js/src/src/pro/alpaca.js +724 -0
- package/js/src/src/pro/apex.d.ts +160 -0
- package/js/src/src/pro/apex.js +1044 -0
- package/js/src/src/pro/ascendex.d.ts +99 -0
- package/js/src/src/pro/ascendex.js +1012 -0
- package/js/src/src/pro/bequant.d.ts +4 -0
- package/js/src/src/pro/bequant.js +42 -0
- package/js/src/src/pro/binance.d.ts +796 -0
- package/js/src/src/pro/binance.js +4373 -0
- package/js/src/src/pro/binancecoinm.d.ts +4 -0
- package/js/src/src/pro/binancecoinm.js +32 -0
- package/js/src/src/pro/binanceus.d.ts +4 -0
- package/js/src/src/pro/binanceus.js +52 -0
- package/js/src/src/pro/binanceusdm.d.ts +4 -0
- package/js/src/src/pro/binanceusdm.js +37 -0
- package/js/src/src/pro/bingx.d.ts +151 -0
- package/js/src/src/pro/bingx.js +1568 -0
- package/js/src/src/pro/bitfinex.d.ts +99 -0
- package/js/src/src/pro/bitfinex.js +1165 -0
- package/js/src/src/pro/bitget.d.ts +257 -0
- package/js/src/src/pro/bitget.js +2327 -0
- package/js/src/src/pro/bithumb.d.ts +59 -0
- package/js/src/src/pro/bithumb.js +395 -0
- package/js/src/src/pro/bitmart.d.ts +168 -0
- package/js/src/src/pro/bitmart.js +1686 -0
- package/js/src/src/pro/bitmex.d.ts +170 -0
- package/js/src/src/pro/bitmex.js +1760 -0
- package/js/src/src/pro/bitopro.d.ts +69 -0
- package/js/src/src/pro/bitopro.js +477 -0
- package/js/src/src/pro/bitrue.d.ts +40 -0
- package/js/src/src/pro/bitrue.js +461 -0
- package/js/src/src/pro/bitstamp.d.ts +53 -0
- package/js/src/src/pro/bitstamp.js +587 -0
- package/js/src/src/pro/bittrade.d.ts +66 -0
- package/js/src/src/pro/bittrade.js +606 -0
- package/js/src/src/pro/bitvavo.d.ts +321 -0
- package/js/src/src/pro/bitvavo.js +1451 -0
- package/js/src/src/pro/blockchaincom.d.ts +89 -0
- package/js/src/src/pro/blockchaincom.js +777 -0
- package/js/src/src/pro/blofin.d.ts +174 -0
- package/js/src/src/pro/blofin.js +743 -0
- package/js/src/src/pro/bybit.d.ts +397 -0
- package/js/src/src/pro/bybit.js +2519 -0
- package/js/src/src/pro/cex.d.ts +220 -0
- package/js/src/src/pro/cex.js +1535 -0
- package/js/src/src/pro/coinbase.d.ts +119 -0
- package/js/src/src/pro/coinbase.js +736 -0
- package/js/src/src/pro/coinbaseadvanced.d.ts +4 -0
- package/js/src/src/pro/coinbaseadvanced.js +18 -0
- package/js/src/src/pro/coinbaseexchange.d.ts +133 -0
- package/js/src/src/pro/coinbaseexchange.js +969 -0
- package/js/src/src/pro/coinbaseinternational.d.ts +143 -0
- package/js/src/src/pro/coinbaseinternational.js +804 -0
- package/js/src/src/pro/coincatch.d.ts +207 -0
- package/js/src/src/pro/coincatch.js +1562 -0
- package/js/src/src/pro/coincheck.d.ts +33 -0
- package/js/src/src/pro/coincheck.js +210 -0
- package/js/src/src/pro/coinex.d.ts +147 -0
- package/js/src/src/pro/coinex.js +1426 -0
- package/js/src/src/pro/coinone.d.ts +51 -0
- package/js/src/src/pro/coinone.js +413 -0
- package/js/src/src/pro/cryptocom.d.ts +300 -0
- package/js/src/src/pro/cryptocom.js +1414 -0
- package/js/src/src/pro/defx.d.ts +236 -0
- package/js/src/src/pro/defx.js +865 -0
- package/js/src/src/pro/deribit.d.ts +163 -0
- package/js/src/src/pro/deribit.js +1066 -0
- package/js/src/src/pro/derive.d.ts +100 -0
- package/js/src/src/pro/derive.js +753 -0
- package/js/src/src/pro/exmo.d.ts +97 -0
- package/js/src/src/pro/exmo.js +903 -0
- package/js/src/src/pro/gate.d.ts +360 -0
- package/js/src/src/pro/gate.js +2119 -0
- package/js/src/src/pro/gateio.d.ts +4 -0
- package/js/src/src/pro/gateio.js +17 -0
- package/js/src/src/pro/gemini.d.ts +106 -0
- package/js/src/src/pro/gemini.js +932 -0
- package/js/src/src/pro/hashkey.d.ts +121 -0
- package/js/src/src/pro/hashkey.js +843 -0
- package/js/src/src/pro/hitbtc.d.ts +235 -0
- package/js/src/src/pro/hitbtc.js +1400 -0
- package/js/src/src/pro/hollaex.d.ts +77 -0
- package/js/src/src/pro/hollaex.js +604 -0
- package/js/src/src/pro/htx.d.ts +141 -0
- package/js/src/src/pro/htx.js +2415 -0
- package/js/src/src/pro/huobi.d.ts +4 -0
- package/js/src/src/pro/huobi.js +17 -0
- package/js/src/src/pro/hyperliquid.d.ts +218 -0
- package/js/src/src/pro/hyperliquid.js +1126 -0
- package/js/src/src/pro/independentreserve.d.ts +36 -0
- package/js/src/src/pro/independentreserve.js +287 -0
- package/js/src/src/pro/kraken.d.ts +233 -0
- package/js/src/src/pro/kraken.js +1785 -0
- package/js/src/src/pro/krakenfutures.d.ts +178 -0
- package/js/src/src/pro/krakenfutures.js +1592 -0
- package/js/src/src/pro/kucoin.d.ts +221 -0
- package/js/src/src/pro/kucoin.js +1430 -0
- package/js/src/src/pro/kucoinfutures.d.ts +205 -0
- package/js/src/src/pro/kucoinfutures.js +1295 -0
- package/js/src/src/pro/lbank.d.ts +134 -0
- package/js/src/src/pro/lbank.js +950 -0
- package/js/src/src/pro/luno.d.ts +44 -0
- package/js/src/src/pro/luno.js +322 -0
- package/js/src/src/pro/mexc.d.ts +210 -0
- package/js/src/src/pro/mexc.js +2009 -0
- package/js/src/src/pro/modetrade.d.ts +155 -0
- package/js/src/src/pro/modetrade.js +1335 -0
- package/js/src/src/pro/myokx.d.ts +4 -0
- package/js/src/src/pro/myokx.js +39 -0
- package/js/src/src/pro/ndax.d.ts +60 -0
- package/js/src/src/pro/ndax.js +545 -0
- package/js/src/src/pro/okcoin.d.ts +91 -0
- package/js/src/src/pro/okcoin.js +763 -0
- package/js/src/src/pro/okx.d.ts +408 -0
- package/js/src/src/pro/okx.js +2479 -0
- package/js/src/src/pro/okxus.d.ts +4 -0
- package/js/src/src/pro/okxus.js +39 -0
- package/js/src/src/pro/onetrading.d.ts +107 -0
- package/js/src/src/pro/onetrading.js +1343 -0
- package/js/src/src/pro/oxfun.d.ts +234 -0
- package/js/src/src/pro/oxfun.js +1112 -0
- package/js/src/src/pro/p2b.d.ts +104 -0
- package/js/src/src/pro/p2b.js +506 -0
- package/js/src/src/pro/paradex.d.ts +54 -0
- package/js/src/src/pro/paradex.js +370 -0
- package/js/src/src/pro/phemex.d.ts +129 -0
- package/js/src/src/pro/phemex.js +1569 -0
- package/js/src/src/pro/poloniex.d.ts +214 -0
- package/js/src/src/pro/poloniex.js +1318 -0
- package/js/src/src/pro/probit.d.ts +91 -0
- package/js/src/src/pro/probit.js +593 -0
- package/js/src/src/pro/tradeogre.d.ts +49 -0
- package/js/src/src/pro/tradeogre.js +284 -0
- package/js/src/src/pro/upbit.d.ts +124 -0
- package/js/src/src/pro/upbit.js +689 -0
- package/js/src/src/pro/vertex.d.ts +104 -0
- package/js/src/src/pro/vertex.js +999 -0
- package/js/src/src/pro/whitebit.d.ts +123 -0
- package/js/src/src/pro/whitebit.js +971 -0
- package/js/src/src/pro/woo.d.ts +161 -0
- package/js/src/src/pro/woo.js +1351 -0
- package/js/src/src/pro/woofipro.d.ts +155 -0
- package/js/src/src/pro/woofipro.js +1335 -0
- package/js/src/src/pro/xt.d.ts +165 -0
- package/js/src/src/pro/xt.js +1230 -0
- package/js/src/src/probit.d.ts +283 -0
- package/js/src/src/probit.js +1935 -0
- package/js/src/src/protobuf/mexc/compiled.cjs +7186 -0
- package/js/src/src/protobuf/mexc/compiled.d.cts +8 -0
- package/js/src/src/raastin.d.ts +24 -0
- package/js/src/src/raastin.js +494 -0
- package/js/src/src/ramzinex.d.ts +23 -0
- package/js/src/src/ramzinex.js +510 -0
- package/js/src/src/sarmayex.d.ts +21 -0
- package/js/src/src/sarmayex.js +376 -0
- package/js/src/src/sarrafex.d.ts +23 -0
- package/js/src/src/sarrafex.js +501 -0
- package/js/src/src/static_dependencies/ethers/abi-coder.d.ts +50 -0
- package/js/src/src/static_dependencies/ethers/abi-coder.js +148 -0
- package/js/src/src/static_dependencies/ethers/address/address.d.ts +55 -0
- package/js/src/src/static_dependencies/ethers/address/address.js +162 -0
- package/js/src/src/static_dependencies/ethers/address/checks.d.ts +80 -0
- package/js/src/src/static_dependencies/ethers/address/checks.js +119 -0
- package/js/src/src/static_dependencies/ethers/address/contract-address.d.ts +47 -0
- package/js/src/src/static_dependencies/ethers/address/contract-address.js +73 -0
- package/js/src/src/static_dependencies/ethers/address/index.d.ts +48 -0
- package/js/src/src/static_dependencies/ethers/address/index.js +24 -0
- package/js/src/src/static_dependencies/ethers/bytes32.d.ts +14 -0
- package/js/src/src/static_dependencies/ethers/bytes32.js +45 -0
- package/js/src/src/static_dependencies/ethers/coders/abstract-coder.d.ts +120 -0
- package/js/src/src/static_dependencies/ethers/coders/abstract-coder.js +424 -0
- package/js/src/src/static_dependencies/ethers/coders/address.d.ts +12 -0
- package/js/src/src/static_dependencies/ethers/coders/address.js +34 -0
- package/js/src/src/static_dependencies/ethers/coders/anonymous.d.ts +14 -0
- package/js/src/src/static_dependencies/ethers/coders/anonymous.js +27 -0
- package/js/src/src/static_dependencies/ethers/coders/array.d.ts +24 -0
- package/js/src/src/static_dependencies/ethers/coders/array.js +162 -0
- package/js/src/src/static_dependencies/ethers/coders/boolean.d.ts +12 -0
- package/js/src/src/static_dependencies/ethers/coders/boolean.js +26 -0
- package/js/src/src/static_dependencies/ethers/coders/bytes.d.ts +18 -0
- package/js/src/src/static_dependencies/ethers/coders/bytes.js +39 -0
- package/js/src/src/static_dependencies/ethers/coders/fixed-bytes.d.ts +14 -0
- package/js/src/src/static_dependencies/ethers/coders/fixed-bytes.js +32 -0
- package/js/src/src/static_dependencies/ethers/coders/null.d.ts +11 -0
- package/js/src/src/static_dependencies/ethers/coders/null.js +29 -0
- package/js/src/src/static_dependencies/ethers/coders/number.d.ts +15 -0
- package/js/src/src/static_dependencies/ethers/coders/number.js +48 -0
- package/js/src/src/static_dependencies/ethers/coders/string.d.ts +12 -0
- package/js/src/src/static_dependencies/ethers/coders/string.js +26 -0
- package/js/src/src/static_dependencies/ethers/coders/tuple.d.ts +15 -0
- package/js/src/src/static_dependencies/ethers/coders/tuple.js +67 -0
- package/js/src/src/static_dependencies/ethers/fragments.d.ts +458 -0
- package/js/src/src/static_dependencies/ethers/fragments.js +1252 -0
- package/js/src/src/static_dependencies/ethers/hash/index.d.ts +10 -0
- package/js/src/src/static_dependencies/ethers/hash/index.js +15 -0
- package/js/src/src/static_dependencies/ethers/hash/solidity.d.ts +30 -0
- package/js/src/src/static_dependencies/ethers/hash/solidity.js +107 -0
- package/js/src/src/static_dependencies/ethers/hash/typed-data.d.ts +144 -0
- package/js/src/src/static_dependencies/ethers/hash/typed-data.js +490 -0
- package/js/src/src/static_dependencies/ethers/index.d.ts +19 -0
- package/js/src/src/static_dependencies/ethers/index.js +22 -0
- package/js/src/src/static_dependencies/ethers/interface.d.ts +380 -0
- package/js/src/src/static_dependencies/ethers/interface.js +990 -0
- package/js/src/src/static_dependencies/ethers/typed.d.ts +569 -0
- package/js/src/src/static_dependencies/ethers/typed.js +608 -0
- package/js/src/src/static_dependencies/ethers/utils/base58.d.ts +22 -0
- package/js/src/src/static_dependencies/ethers/utils/base58.js +68 -0
- package/js/src/src/static_dependencies/ethers/utils/base64.d.ts +39 -0
- package/js/src/src/static_dependencies/ethers/utils/base64.js +58 -0
- package/js/src/src/static_dependencies/ethers/utils/data.d.ts +92 -0
- package/js/src/src/static_dependencies/ethers/utils/data.js +175 -0
- package/js/src/src/static_dependencies/ethers/utils/errors.d.ts +509 -0
- package/js/src/src/static_dependencies/ethers/utils/errors.js +227 -0
- package/js/src/src/static_dependencies/ethers/utils/events.d.ts +76 -0
- package/js/src/src/static_dependencies/ethers/utils/events.js +52 -0
- package/js/src/src/static_dependencies/ethers/utils/fixednumber.d.ts +251 -0
- package/js/src/src/static_dependencies/ethers/utils/fixednumber.js +529 -0
- package/js/src/src/static_dependencies/ethers/utils/index.d.ts +30 -0
- package/js/src/src/static_dependencies/ethers/utils/index.js +38 -0
- package/js/src/src/static_dependencies/ethers/utils/maths.d.ts +65 -0
- package/js/src/src/static_dependencies/ethers/utils/maths.js +220 -0
- package/js/src/src/static_dependencies/ethers/utils/properties.d.ts +22 -0
- package/js/src/src/static_dependencies/ethers/utils/properties.js +59 -0
- package/js/src/src/static_dependencies/ethers/utils/rlp-decode.d.ts +5 -0
- package/js/src/src/static_dependencies/ethers/utils/rlp-decode.js +84 -0
- package/js/src/src/static_dependencies/ethers/utils/rlp-encode.d.ts +5 -0
- package/js/src/src/static_dependencies/ethers/utils/rlp-encode.js +54 -0
- package/js/src/src/static_dependencies/ethers/utils/rlp.d.ts +16 -0
- package/js/src/src/static_dependencies/ethers/utils/rlp.js +14 -0
- package/js/src/src/static_dependencies/ethers/utils/units.d.ts +23 -0
- package/js/src/src/static_dependencies/ethers/utils/units.js +88 -0
- package/js/src/src/static_dependencies/ethers/utils/utf8.d.ts +95 -0
- package/js/src/src/static_dependencies/ethers/utils/utf8.js +225 -0
- package/js/src/src/static_dependencies/ethers/utils/uuid.d.ts +7 -0
- package/js/src/src/static_dependencies/ethers/utils/uuid.js +35 -0
- package/js/src/src/static_dependencies/fflake/browser.d.ts +222 -0
- package/js/src/src/static_dependencies/fflake/browser.js +2578 -0
- package/js/src/src/static_dependencies/jsencrypt/JSEncrypt.d.ts +116 -0
- package/js/src/src/static_dependencies/jsencrypt/JSEncrypt.js +194 -0
- package/js/src/src/static_dependencies/jsencrypt/JSEncryptRSAKey.d.ts +142 -0
- package/js/src/src/static_dependencies/jsencrypt/JSEncryptRSAKey.js +307 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/asn1.d.ts +51 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/asn1.js +565 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/base64.d.ts +5 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/base64.js +94 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/hex.d.ts +3 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/hex.js +70 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/int10.d.ts +9 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/int10.js +91 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/base64.d.ts +3 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/base64.js +25 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.d.ts +101 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.js +1757 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/prng4.d.ts +10 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/prng4.js +50 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/rng.d.ts +3 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/rng.js +80 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/rsa.d.ts +23 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/rsa.js +377 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/util.d.ts +7 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/util.js +64 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.d.ts +24 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.js +1627 -0
- package/js/src/src/static_dependencies/noble-curves/_shortw_utils.d.ts +60 -0
- package/js/src/src/static_dependencies/noble-curves/_shortw_utils.js +22 -0
- package/js/src/src/static_dependencies/noble-curves/abstract/curve.d.ts +67 -0
- package/js/src/src/static_dependencies/noble-curves/abstract/curve.js +157 -0
- package/js/src/src/static_dependencies/noble-curves/abstract/edwards.d.ts +79 -0
- package/js/src/src/static_dependencies/noble-curves/abstract/edwards.js +432 -0
- package/js/src/src/static_dependencies/noble-curves/abstract/hash-to-curve.d.ts +56 -0
- package/js/src/src/static_dependencies/noble-curves/abstract/hash-to-curve.js +171 -0
- package/js/src/src/static_dependencies/noble-curves/abstract/modular.d.ts +68 -0
- package/js/src/src/static_dependencies/noble-curves/abstract/modular.js +351 -0
- package/js/src/src/static_dependencies/noble-curves/abstract/montgomery.d.ts +25 -0
- package/js/src/src/static_dependencies/noble-curves/abstract/montgomery.js +162 -0
- package/js/src/src/static_dependencies/noble-curves/abstract/poseidon.d.ts +29 -0
- package/js/src/src/static_dependencies/noble-curves/abstract/poseidon.js +115 -0
- package/js/src/src/static_dependencies/noble-curves/abstract/utils.d.ts +53 -0
- package/js/src/src/static_dependencies/noble-curves/abstract/utils.js +227 -0
- package/js/src/src/static_dependencies/noble-curves/abstract/weierstrass.d.ts +204 -0
- package/js/src/src/static_dependencies/noble-curves/abstract/weierstrass.js +1016 -0
- package/js/src/src/static_dependencies/noble-curves/ed25519.d.ts +53 -0
- package/js/src/src/static_dependencies/noble-curves/ed25519.js +402 -0
- package/js/src/src/static_dependencies/noble-curves/p256.d.ts +103 -0
- package/js/src/src/static_dependencies/noble-curves/p256.js +47 -0
- package/js/src/src/static_dependencies/noble-curves/secp256k1.d.ts +91 -0
- package/js/src/src/static_dependencies/noble-curves/secp256k1.js +257 -0
- package/js/src/src/static_dependencies/noble-hashes/_assert.d.ts +21 -0
- package/js/src/src/static_dependencies/noble-hashes/_assert.js +48 -0
- package/js/src/src/static_dependencies/noble-hashes/_sha2.d.ts +23 -0
- package/js/src/src/static_dependencies/noble-hashes/_sha2.js +119 -0
- package/js/src/src/static_dependencies/noble-hashes/_u64.d.ts +35 -0
- package/js/src/src/static_dependencies/noble-hashes/_u64.js +66 -0
- package/js/src/src/static_dependencies/noble-hashes/crypto.d.ts +1 -0
- package/js/src/src/static_dependencies/noble-hashes/crypto.js +7 -0
- package/js/src/src/static_dependencies/noble-hashes/hmac.d.ts +26 -0
- package/js/src/src/static_dependencies/noble-hashes/hmac.js +82 -0
- package/js/src/src/static_dependencies/noble-hashes/md5.d.ts +18 -0
- package/js/src/src/static_dependencies/noble-hashes/md5.js +242 -0
- package/js/src/src/static_dependencies/noble-hashes/sha1.d.ts +21 -0
- package/js/src/src/static_dependencies/noble-hashes/sha1.js +90 -0
- package/js/src/src/static_dependencies/noble-hashes/sha256.d.ts +34 -0
- package/js/src/src/static_dependencies/noble-hashes/sha256.js +129 -0
- package/js/src/src/static_dependencies/noble-hashes/sha3.d.ts +97 -0
- package/js/src/src/static_dependencies/noble-hashes/sha3.js +211 -0
- package/js/src/src/static_dependencies/noble-hashes/sha512.d.ts +66 -0
- package/js/src/src/static_dependencies/noble-hashes/sha512.js +236 -0
- package/js/src/src/static_dependencies/noble-hashes/utils.d.ts +77 -0
- package/js/src/src/static_dependencies/noble-hashes/utils.js +147 -0
- package/js/src/src/static_dependencies/proxies/agent-base/helpers.d.ts +14 -0
- package/js/src/src/static_dependencies/proxies/agent-base/helpers.js +42 -0
- package/js/src/src/static_dependencies/proxies/agent-base/index.d.ts +33 -0
- package/js/src/src/static_dependencies/proxies/agent-base/index.js +82 -0
- package/js/src/src/static_dependencies/proxies/http-proxy-agent/index.d.ts +40 -0
- package/js/src/src/static_dependencies/proxies/http-proxy-agent/index.js +119 -0
- package/js/src/src/static_dependencies/proxies/https-proxy-agent/index.d.ts +45 -0
- package/js/src/src/static_dependencies/proxies/https-proxy-agent/index.js +150 -0
- package/js/src/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.d.ts +15 -0
- package/js/src/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.js +95 -0
- package/js/src/src/static_dependencies/qs/formats.cjs +22 -0
- package/js/src/src/static_dependencies/qs/formats.d.cts +14 -0
- package/js/src/src/static_dependencies/qs/index.cjs +15 -0
- package/js/src/src/static_dependencies/qs/index.d.cts +10 -0
- package/js/src/src/static_dependencies/qs/parse.cjs +208 -0
- package/js/src/src/static_dependencies/qs/parse.d.cts +8 -0
- package/js/src/src/static_dependencies/qs/stringify.cjs +192 -0
- package/js/src/src/static_dependencies/qs/stringify.d.cts +8 -0
- package/js/src/src/static_dependencies/qs/utils.cjs +202 -0
- package/js/src/src/static_dependencies/qs/utils.d.cts +15 -0
- package/js/src/src/static_dependencies/scure-base/index.d.ts +92 -0
- package/js/src/src/static_dependencies/scure-base/index.js +420 -0
- package/js/src/src/static_dependencies/scure-starknet/index.d.ts +79 -0
- package/js/src/src/static_dependencies/scure-starknet/index.js +323 -0
- package/js/src/src/static_dependencies/starknet/constants.d.ts +61 -0
- package/js/src/src/static_dependencies/starknet/constants.js +67 -0
- package/js/src/src/static_dependencies/starknet/index.d.ts +3 -0
- package/js/src/src/static_dependencies/starknet/index.js +9 -0
- package/js/src/src/static_dependencies/starknet/types/cairoEnum.d.ts +2 -0
- package/js/src/src/static_dependencies/starknet/types/cairoEnum.js +7 -0
- package/js/src/src/static_dependencies/starknet/types/calldata.d.ts +19 -0
- package/js/src/src/static_dependencies/starknet/types/calldata.js +28 -0
- package/js/src/src/static_dependencies/starknet/types/index.d.ts +13 -0
- package/js/src/src/static_dependencies/starknet/types/index.js +16 -0
- package/js/src/src/static_dependencies/starknet/types/lib/contract/abi.d.ts +71 -0
- package/js/src/src/static_dependencies/starknet/types/lib/contract/abi.js +13 -0
- package/js/src/src/static_dependencies/starknet/types/lib/contract/index.d.ts +24 -0
- package/js/src/src/static_dependencies/starknet/types/lib/contract/index.js +16 -0
- package/js/src/src/static_dependencies/starknet/types/lib/contract/legacy.d.ts +33 -0
- package/js/src/src/static_dependencies/starknet/types/lib/contract/legacy.js +7 -0
- package/js/src/src/static_dependencies/starknet/types/lib/contract/sierra.d.ts +52 -0
- package/js/src/src/static_dependencies/starknet/types/lib/contract/sierra.js +7 -0
- package/js/src/src/static_dependencies/starknet/types/lib/index.d.ts +248 -0
- package/js/src/src/static_dependencies/starknet/types/lib/index.js +52 -0
- package/js/src/src/static_dependencies/starknet/types/typedData.d.ts +44 -0
- package/js/src/src/static_dependencies/starknet/types/typedData.js +19 -0
- package/js/src/src/static_dependencies/starknet/utils/assert.d.ts +7 -0
- package/js/src/src/static_dependencies/starknet/utils/assert.js +17 -0
- package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/felt.d.ts +6 -0
- package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/felt.js +43 -0
- package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.d.ts +72 -0
- package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.js +117 -0
- package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.d.ts +76 -0
- package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.js +136 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/byteArray.d.ts +32 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/byteArray.js +59 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/cairo.d.ts +183 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/cairo.js +229 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.d.ts +38 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.js +57 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.d.ts +35 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.js +64 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.d.ts +34 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.js +63 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/enum/index.d.ts +3 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/enum/index.js +9 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/formatter.d.ts +9 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/formatter.js +67 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/index.d.ts +89 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/index.js +280 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/parser/index.d.ts +5 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/parser/index.js +30 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/parser/interface.d.ts +20 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/parser/interface.js +8 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.d.ts +24 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.js +36 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.d.ts +23 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.js +40 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/propertyOrder.d.ts +2 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/propertyOrder.js +155 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/requestParser.d.ts +11 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/requestParser.js +248 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/responseParser.d.ts +11 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/responseParser.js +214 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/tuple.d.ts +6 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/tuple.js +113 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/validate.d.ts +6 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/validate.js +208 -0
- package/js/src/src/static_dependencies/starknet/utils/encode.d.ts +207 -0
- package/js/src/src/static_dependencies/starknet/utils/encode.js +282 -0
- package/js/src/src/static_dependencies/starknet/utils/hash/classHash.d.ts +57 -0
- package/js/src/src/static_dependencies/starknet/utils/hash/classHash.js +223 -0
- package/js/src/src/static_dependencies/starknet/utils/hash/index.d.ts +6 -0
- package/js/src/src/static_dependencies/starknet/utils/hash/index.js +13 -0
- package/js/src/src/static_dependencies/starknet/utils/merkle.d.ts +35 -0
- package/js/src/src/static_dependencies/starknet/utils/merkle.js +84 -0
- package/js/src/src/static_dependencies/starknet/utils/num.d.ts +182 -0
- package/js/src/src/static_dependencies/starknet/utils/num.js +244 -0
- package/js/src/src/static_dependencies/starknet/utils/selector.d.ts +48 -0
- package/js/src/src/static_dependencies/starknet/utils/selector.js +85 -0
- package/js/src/src/static_dependencies/starknet/utils/shortString.d.ts +57 -0
- package/js/src/src/static_dependencies/starknet/utils/shortString.js +96 -0
- package/js/src/src/static_dependencies/starknet/utils/typedData.d.ts +54 -0
- package/js/src/src/static_dependencies/starknet/utils/typedData.js +321 -0
- package/js/src/src/static_dependencies/watchable/src/types.d.ts +28 -0
- package/js/src/src/static_dependencies/watchable/src/types.js +8 -0
- package/js/src/src/static_dependencies/watchable/src/unpromise.d.ts +120 -0
- package/js/src/src/static_dependencies/watchable/src/unpromise.js +297 -0
- package/js/src/src/static_dependencies/zklink/zklink-sdk-web.d.ts +1279 -0
- package/js/src/src/static_dependencies/zklink/zklink-sdk-web.js +4282 -0
- package/js/src/src/tabdeal.d.ts +23 -0
- package/js/src/src/tabdeal.js +387 -0
- package/js/src/src/tehran_exchange.d.ts +21 -0
- package/js/src/src/tehran_exchange.js +333 -0
- package/js/src/src/tetherland.d.ts +21 -0
- package/js/src/src/tetherland.js +367 -0
- package/js/src/src/timex.d.ts +247 -0
- package/js/src/src/timex.js +1792 -0
- package/js/src/src/tokocrypto.d.ts +261 -0
- package/js/src/src/tokocrypto.js +2641 -0
- package/js/src/src/toobit.d.ts +22 -0
- package/js/src/src/toobit.js +445 -0
- package/js/src/src/tradeogre.d.ts +149 -0
- package/js/src/src/tradeogre.js +878 -0
- package/js/src/src/twox.d.ts +21 -0
- package/js/src/src/twox.js +371 -0
- package/js/src/src/ubitex.d.ts +23 -0
- package/js/src/src/ubitex.js +433 -0
- package/js/src/src/upbit.d.ts +377 -0
- package/js/src/src/upbit.js +2340 -0
- package/js/src/src/vertex.d.ts +346 -0
- package/js/src/src/vertex.js +3146 -0
- package/js/src/src/wallex.d.ts +23 -0
- package/js/src/src/wallex.js +467 -0
- package/js/src/src/wavesexchange.d.ts +244 -0
- package/js/src/src/wavesexchange.js +2747 -0
- package/js/src/src/whitebit.d.ts +571 -0
- package/js/src/src/whitebit.js +3437 -0
- package/js/src/src/woo.d.ts +727 -0
- package/js/src/src/woo.js +4183 -0
- package/js/src/src/woofipro.d.ts +497 -0
- package/js/src/src/woofipro.js +2941 -0
- package/js/src/src/xt.d.ts +568 -0
- package/js/src/src/xt.js +5184 -0
- package/js/src/src/yobit.d.ts +197 -0
- package/js/src/src/yobit.js +1453 -0
- package/js/src/src/zaif.d.ts +136 -0
- package/js/src/src/zaif.js +821 -0
- package/js/src/src/zonda.d.ts +214 -0
- package/js/src/src/zonda.js +1984 -0
- package/js/test.d.ts +1 -1
- package/js/test.js +33 -33
- package/package.json +1 -1
|
@@ -0,0 +1,3146 @@
|
|
|
1
|
+
// ----------------------------------------------------------------------------
|
|
2
|
+
|
|
3
|
+
// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:
|
|
4
|
+
// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
|
|
5
|
+
// EDIT THE CORRESPONDENT .ts FILE INSTEAD
|
|
6
|
+
|
|
7
|
+
// ---------------------------------------------------------------------------
|
|
8
|
+
import Exchange from './abstract/lbank.js';
|
|
9
|
+
import { ExchangeError, InvalidAddress, DuplicateOrderId, InsufficientFunds, InvalidOrder, InvalidNonce, AuthenticationError, RateLimitExceeded, PermissionDenied, BadRequest, BadSymbol, ArgumentsRequired, NotSupported } from './base/errors.js';
|
|
10
|
+
import { TICK_SIZE } from './base/functions/number.js';
|
|
11
|
+
import { Precise } from './base/Precise.js';
|
|
12
|
+
import { md5 } from './static_dependencies/noble-hashes/md5.js';
|
|
13
|
+
import { sha256 } from './static_dependencies/noble-hashes/sha256.js';
|
|
14
|
+
import { rsa } from './base/functions/rsa.js';
|
|
15
|
+
// ---------------------------------------------------------------------------
|
|
16
|
+
/**
|
|
17
|
+
* @class lbank
|
|
18
|
+
* @augments Exchange
|
|
19
|
+
*/
|
|
20
|
+
export default class lbank extends Exchange {
|
|
21
|
+
describe() {
|
|
22
|
+
return this.deepExtend(super.describe(), {
|
|
23
|
+
'id': 'lbank',
|
|
24
|
+
'name': 'LBank',
|
|
25
|
+
'countries': ['CN'],
|
|
26
|
+
'version': 'v2',
|
|
27
|
+
// 50 per second for making and cancelling orders 1000ms / 50 = 20
|
|
28
|
+
// 20 per second for all other requests, cost = 50 / 20 = 2.5
|
|
29
|
+
'rateLimit': 20,
|
|
30
|
+
'pro': true,
|
|
31
|
+
'has': {
|
|
32
|
+
'CORS': false,
|
|
33
|
+
'spot': true,
|
|
34
|
+
'margin': false,
|
|
35
|
+
'swap': undefined,
|
|
36
|
+
'future': false,
|
|
37
|
+
'option': false,
|
|
38
|
+
'addMargin': false,
|
|
39
|
+
'cancelAllOrders': true,
|
|
40
|
+
'cancelOrder': true,
|
|
41
|
+
'createMarketBuyOrderWithCost': true,
|
|
42
|
+
'createMarketOrderWithCost': false,
|
|
43
|
+
'createMarketSellOrderWithCost': false,
|
|
44
|
+
'createOrder': true,
|
|
45
|
+
'createReduceOnlyOrder': false,
|
|
46
|
+
'createStopLimitOrder': false,
|
|
47
|
+
'createStopMarketOrder': false,
|
|
48
|
+
'createStopOrder': false,
|
|
49
|
+
'fetchBalance': true,
|
|
50
|
+
'fetchBorrowRateHistories': false,
|
|
51
|
+
'fetchBorrowRateHistory': false,
|
|
52
|
+
'fetchClosedOrders': false,
|
|
53
|
+
'fetchCrossBorrowRate': false,
|
|
54
|
+
'fetchCrossBorrowRates': false,
|
|
55
|
+
'fetchCurrencies': true,
|
|
56
|
+
'fetchDepositAddress': true,
|
|
57
|
+
'fetchDepositAddresses': false,
|
|
58
|
+
'fetchDepositAddressesByNetwork': false,
|
|
59
|
+
'fetchDepositWithdrawFee': 'emulated',
|
|
60
|
+
'fetchDepositWithdrawFees': true,
|
|
61
|
+
'fetchFundingHistory': false,
|
|
62
|
+
'fetchFundingRate': false,
|
|
63
|
+
'fetchFundingRateHistory': false,
|
|
64
|
+
'fetchFundingRates': true,
|
|
65
|
+
'fetchIndexOHLCV': false,
|
|
66
|
+
'fetchIsolatedBorrowRate': false,
|
|
67
|
+
'fetchIsolatedBorrowRates': false,
|
|
68
|
+
'fetchIsolatedPositions': false,
|
|
69
|
+
'fetchLeverage': false,
|
|
70
|
+
'fetchLeverageTiers': false,
|
|
71
|
+
'fetchMarginMode': false,
|
|
72
|
+
'fetchMarkets': true,
|
|
73
|
+
'fetchMarkOHLCV': false,
|
|
74
|
+
'fetchMyTrades': true,
|
|
75
|
+
'fetchOHLCV': true,
|
|
76
|
+
'fetchOpenOrders': true,
|
|
77
|
+
'fetchOrder': true,
|
|
78
|
+
'fetchOrderBook': true,
|
|
79
|
+
'fetchOrders': true,
|
|
80
|
+
'fetchPosition': false,
|
|
81
|
+
'fetchPositionMode': false,
|
|
82
|
+
'fetchPositions': false,
|
|
83
|
+
'fetchPositionsRisk': false,
|
|
84
|
+
'fetchPremiumIndexOHLCV': false,
|
|
85
|
+
'fetchTicker': true,
|
|
86
|
+
'fetchTickers': true,
|
|
87
|
+
'fetchTime': true,
|
|
88
|
+
'fetchTrades': true,
|
|
89
|
+
'fetchTradingFees': true,
|
|
90
|
+
'fetchTransactionFees': true,
|
|
91
|
+
'reduceMargin': false,
|
|
92
|
+
'setLeverage': false,
|
|
93
|
+
'setMarginMode': false,
|
|
94
|
+
'setPositionMode': false,
|
|
95
|
+
'withdraw': true,
|
|
96
|
+
},
|
|
97
|
+
'timeframes': {
|
|
98
|
+
'1m': 'minute1',
|
|
99
|
+
'5m': 'minute5',
|
|
100
|
+
'15m': 'minute15',
|
|
101
|
+
'30m': 'minute30',
|
|
102
|
+
'1h': 'hour1',
|
|
103
|
+
'2h': 'hour2',
|
|
104
|
+
'4h': 'hour4',
|
|
105
|
+
'6h': 'hour6',
|
|
106
|
+
'8h': 'hour8',
|
|
107
|
+
'12h': 'hour12',
|
|
108
|
+
'1d': 'day1',
|
|
109
|
+
'1w': 'week1',
|
|
110
|
+
},
|
|
111
|
+
'urls': {
|
|
112
|
+
'logo': 'https://user-images.githubusercontent.com/1294454/38063602-9605e28a-3302-11e8-81be-64b1e53c4cfb.jpg',
|
|
113
|
+
'api': {
|
|
114
|
+
'rest': 'https://api.lbank.info',
|
|
115
|
+
'contract': 'https://lbkperp.lbank.com',
|
|
116
|
+
},
|
|
117
|
+
'api2': 'https://api.lbkex.com',
|
|
118
|
+
'www': 'https://www.lbank.com',
|
|
119
|
+
'doc': 'https://www.lbank.com/en-US/docs/index.html',
|
|
120
|
+
'fees': 'https://support.lbank.site/hc/en-gb/articles/900000535703-Trading-Fees-From-14-00-on-April-7-2020-UTC-8-',
|
|
121
|
+
'referral': 'https://www.lbank.com/login/?icode=7QCY',
|
|
122
|
+
},
|
|
123
|
+
'api': {
|
|
124
|
+
'spot': {
|
|
125
|
+
'public': {
|
|
126
|
+
'get': {
|
|
127
|
+
'currencyPairs': 2.5,
|
|
128
|
+
'accuracy': 2.5,
|
|
129
|
+
'usdToCny': 2.5,
|
|
130
|
+
'assetConfigs': 2.5,
|
|
131
|
+
'withdrawConfigs': 2.5 * 1.5,
|
|
132
|
+
'timestamp': 2.5,
|
|
133
|
+
'ticker/24hr': 2.5,
|
|
134
|
+
'ticker': 2.5,
|
|
135
|
+
'depth': 2.5,
|
|
136
|
+
'incrDepth': 2.5,
|
|
137
|
+
'trades': 2.5,
|
|
138
|
+
'kline': 2.5,
|
|
139
|
+
// new quote endpoints
|
|
140
|
+
'supplement/system_ping': 2.5,
|
|
141
|
+
'supplement/incrDepth': 2.5,
|
|
142
|
+
'supplement/trades': 2.5,
|
|
143
|
+
'supplement/ticker/price': 2.5,
|
|
144
|
+
'supplement/ticker/bookTicker': 2.5,
|
|
145
|
+
},
|
|
146
|
+
'post': {
|
|
147
|
+
'supplement/system_status': 2.5,
|
|
148
|
+
},
|
|
149
|
+
},
|
|
150
|
+
'private': {
|
|
151
|
+
'post': {
|
|
152
|
+
// account
|
|
153
|
+
'user_info': 2.5,
|
|
154
|
+
'subscribe/get_key': 2.5,
|
|
155
|
+
'subscribe/refresh_key': 2.5,
|
|
156
|
+
'subscribe/destroy_key': 2.5,
|
|
157
|
+
'get_deposit_address': 2.5,
|
|
158
|
+
'deposit_history': 2.5,
|
|
159
|
+
// order
|
|
160
|
+
'create_order': 1,
|
|
161
|
+
'batch_create_order': 1,
|
|
162
|
+
'cancel_order': 1,
|
|
163
|
+
'cancel_clientOrders': 1,
|
|
164
|
+
'orders_info': 2.5,
|
|
165
|
+
'orders_info_history': 2.5,
|
|
166
|
+
'order_transaction_detail': 2.5,
|
|
167
|
+
'transaction_history': 2.5,
|
|
168
|
+
'orders_info_no_deal': 2.5,
|
|
169
|
+
// withdraw
|
|
170
|
+
'withdraw': 2.5,
|
|
171
|
+
'withdrawCancel': 2.5,
|
|
172
|
+
'withdraws': 2.5,
|
|
173
|
+
'supplement/user_info': 2.5,
|
|
174
|
+
'supplement/withdraw': 2.5,
|
|
175
|
+
'supplement/deposit_history': 2.5,
|
|
176
|
+
'supplement/withdraws': 2.5,
|
|
177
|
+
'supplement/get_deposit_address': 2.5,
|
|
178
|
+
'supplement/asset_detail': 2.5,
|
|
179
|
+
'supplement/customer_trade_fee': 2.5,
|
|
180
|
+
'supplement/api_Restrictions': 2.5,
|
|
181
|
+
// new quote endpoints
|
|
182
|
+
'supplement/system_ping': 2.5,
|
|
183
|
+
// new order endpoints
|
|
184
|
+
'supplement/create_order_test': 1,
|
|
185
|
+
'supplement/create_order': 1,
|
|
186
|
+
'supplement/cancel_order': 1,
|
|
187
|
+
'supplement/cancel_order_by_symbol': 1,
|
|
188
|
+
'supplement/orders_info': 2.5,
|
|
189
|
+
'supplement/orders_info_no_deal': 2.5,
|
|
190
|
+
'supplement/orders_info_history': 2.5,
|
|
191
|
+
'supplement/user_info_account': 2.5,
|
|
192
|
+
'supplement/transaction_history': 2.5,
|
|
193
|
+
},
|
|
194
|
+
},
|
|
195
|
+
},
|
|
196
|
+
'contract': {
|
|
197
|
+
'public': {
|
|
198
|
+
'get': {
|
|
199
|
+
'cfd/openApi/v1/pub/getTime': 2.5,
|
|
200
|
+
'cfd/openApi/v1/pub/instrument': 2.5,
|
|
201
|
+
'cfd/openApi/v1/pub/marketData': 2.5,
|
|
202
|
+
'cfd/openApi/v1/pub/marketOrder': 2.5,
|
|
203
|
+
},
|
|
204
|
+
},
|
|
205
|
+
},
|
|
206
|
+
},
|
|
207
|
+
'fees': {
|
|
208
|
+
'trading': {
|
|
209
|
+
'maker': this.parseNumber('0.001'),
|
|
210
|
+
'taker': this.parseNumber('0.001'),
|
|
211
|
+
},
|
|
212
|
+
'funding': {
|
|
213
|
+
'withdraw': {},
|
|
214
|
+
},
|
|
215
|
+
},
|
|
216
|
+
'commonCurrencies': {
|
|
217
|
+
'XBT': 'XBT',
|
|
218
|
+
'HIT': 'Hiver',
|
|
219
|
+
'VET_ERC20': 'VEN',
|
|
220
|
+
'PNT': 'Penta',
|
|
221
|
+
},
|
|
222
|
+
'precisionMode': TICK_SIZE,
|
|
223
|
+
'options': {
|
|
224
|
+
'cacheSecretAsPem': true,
|
|
225
|
+
'createMarketBuyOrderRequiresPrice': true,
|
|
226
|
+
'fetchTrades': {
|
|
227
|
+
'method': 'spotPublicGetTrades', // or 'spotPublicGetTradesSupplement'
|
|
228
|
+
},
|
|
229
|
+
'fetchTransactionFees': {
|
|
230
|
+
'method': 'fetchPrivateTransactionFees', // or 'fetchPublicTransactionFees'
|
|
231
|
+
},
|
|
232
|
+
'fetchDepositWithdrawFees': {
|
|
233
|
+
'method': 'fetchPrivateDepositWithdrawFees', // or 'fetchPublicDepositWithdrawFees'
|
|
234
|
+
},
|
|
235
|
+
'fetchDepositAddress': {
|
|
236
|
+
'method': 'fetchDepositAddressDefault', // or fetchDepositAddressSupplement
|
|
237
|
+
},
|
|
238
|
+
'createOrder': {
|
|
239
|
+
'method': 'spotPrivatePostSupplementCreateOrder', // or spotPrivatePostCreateOrder
|
|
240
|
+
},
|
|
241
|
+
'fetchOrder': {
|
|
242
|
+
'method': 'fetchOrderSupplement', // or fetchOrderDefault
|
|
243
|
+
},
|
|
244
|
+
'fetchBalance': {
|
|
245
|
+
'method': 'spotPrivatePostSupplementUserInfo', // or spotPrivatePostSupplementUserInfoAccount or spotPrivatePostUserInfo
|
|
246
|
+
},
|
|
247
|
+
'networks': {
|
|
248
|
+
'ERC20': 'erc20',
|
|
249
|
+
'ETH': 'erc20',
|
|
250
|
+
'TRC20': 'trc20',
|
|
251
|
+
'TRX': 'trc20',
|
|
252
|
+
'OMNI': 'omni',
|
|
253
|
+
'ASA': 'asa',
|
|
254
|
+
'BEP20': 'bep20(bsc)',
|
|
255
|
+
'BSC': 'bep20(bsc)',
|
|
256
|
+
'HT': 'heco',
|
|
257
|
+
'BNB': 'bep2',
|
|
258
|
+
'BTC': 'btc',
|
|
259
|
+
'DOGE': 'dogecoin',
|
|
260
|
+
'MATIC': 'matic',
|
|
261
|
+
'POLYGON': 'matic',
|
|
262
|
+
'OEC': 'oec',
|
|
263
|
+
'BTCTRON': 'btctron',
|
|
264
|
+
'XRP': 'xrp',
|
|
265
|
+
// other unusual chains with number of listed currencies supported
|
|
266
|
+
// 'avax c-chain': 1,
|
|
267
|
+
// klay: 12,
|
|
268
|
+
// bta: 1,
|
|
269
|
+
// fantom: 1,
|
|
270
|
+
// celo: 1,
|
|
271
|
+
// sol: 2,
|
|
272
|
+
// zenith: 1,
|
|
273
|
+
// ftm: 5,
|
|
274
|
+
// bep20: 1, (single token with mis-named chain) SSS
|
|
275
|
+
// bitci: 1,
|
|
276
|
+
// sgb: 1,
|
|
277
|
+
// moonbeam: 1,
|
|
278
|
+
// ekta: 1,
|
|
279
|
+
// etl: 1,
|
|
280
|
+
// arbitrum: 1,
|
|
281
|
+
// tpc: 1,
|
|
282
|
+
// ptx: 1
|
|
283
|
+
// }
|
|
284
|
+
},
|
|
285
|
+
'networksById': {
|
|
286
|
+
'erc20': 'ERC20',
|
|
287
|
+
'trc20': 'TRC20',
|
|
288
|
+
'TRX': 'TRC20',
|
|
289
|
+
'bep20(bsc)': 'BEP20',
|
|
290
|
+
'bep20': 'BEP20',
|
|
291
|
+
},
|
|
292
|
+
'defaultNetworks': {
|
|
293
|
+
'USDT': 'TRC20',
|
|
294
|
+
},
|
|
295
|
+
},
|
|
296
|
+
'features': {
|
|
297
|
+
'default': {
|
|
298
|
+
'sandbox': false,
|
|
299
|
+
'createOrder': {
|
|
300
|
+
'marginMode': false,
|
|
301
|
+
'triggerPrice': false,
|
|
302
|
+
'triggerPriceType': undefined,
|
|
303
|
+
'triggerDirection': false,
|
|
304
|
+
'stopLossPrice': false,
|
|
305
|
+
'takeProfitPrice': false,
|
|
306
|
+
'attachedStopLossTakeProfit': undefined,
|
|
307
|
+
'timeInForce': {
|
|
308
|
+
'IOC': true,
|
|
309
|
+
'FOK': true,
|
|
310
|
+
'PO': false,
|
|
311
|
+
'GTD': false,
|
|
312
|
+
},
|
|
313
|
+
'hedged': false,
|
|
314
|
+
'selfTradePrevention': false,
|
|
315
|
+
'trailing': false,
|
|
316
|
+
'leverage': false,
|
|
317
|
+
'marketBuyByCost': true,
|
|
318
|
+
'marketBuyRequiresPrice': false,
|
|
319
|
+
'iceberg': false,
|
|
320
|
+
},
|
|
321
|
+
'createOrders': undefined,
|
|
322
|
+
'fetchMyTrades': {
|
|
323
|
+
'marginMode': false,
|
|
324
|
+
'limit': 100,
|
|
325
|
+
'daysBack': 100000,
|
|
326
|
+
'untilDays': 2,
|
|
327
|
+
'symbolRequired': true,
|
|
328
|
+
},
|
|
329
|
+
'fetchOrder': {
|
|
330
|
+
'marginMode': false,
|
|
331
|
+
'trigger': false,
|
|
332
|
+
'trailing': false,
|
|
333
|
+
'symbolRequired': true,
|
|
334
|
+
},
|
|
335
|
+
'fetchOpenOrders': {
|
|
336
|
+
'marginMode': false,
|
|
337
|
+
'limit': 200,
|
|
338
|
+
'trigger': false,
|
|
339
|
+
'trailing': false,
|
|
340
|
+
'symbolRequired': true,
|
|
341
|
+
},
|
|
342
|
+
'fetchOrders': {
|
|
343
|
+
'marginMode': false,
|
|
344
|
+
'limit': 200,
|
|
345
|
+
'daysBack': undefined,
|
|
346
|
+
'untilDays': undefined,
|
|
347
|
+
'trigger': false,
|
|
348
|
+
'trailing': false,
|
|
349
|
+
'symbolRequired': true,
|
|
350
|
+
},
|
|
351
|
+
'fetchClosedOrders': undefined,
|
|
352
|
+
'fetchOHLCV': {
|
|
353
|
+
'limit': 2000,
|
|
354
|
+
},
|
|
355
|
+
},
|
|
356
|
+
'spot': {
|
|
357
|
+
'extends': 'default',
|
|
358
|
+
},
|
|
359
|
+
'swap': {
|
|
360
|
+
'linear': {
|
|
361
|
+
'extends': 'default',
|
|
362
|
+
},
|
|
363
|
+
'inverse': undefined,
|
|
364
|
+
},
|
|
365
|
+
'future': {
|
|
366
|
+
'linear': undefined,
|
|
367
|
+
'inverse': undefined,
|
|
368
|
+
},
|
|
369
|
+
},
|
|
370
|
+
});
|
|
371
|
+
}
|
|
372
|
+
/**
|
|
373
|
+
* @method
|
|
374
|
+
* @name lbank#fetchTime
|
|
375
|
+
* @description fetches the current integer timestamp in milliseconds from the exchange server
|
|
376
|
+
* @see https://www.lbank.com/en-US/docs/index.html#get-timestamp
|
|
377
|
+
* @see https://www.lbank.com/en-US/docs/contract.html#get-the-current-time
|
|
378
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
379
|
+
* @returns {int} the current integer timestamp in milliseconds from the exchange server
|
|
380
|
+
*/
|
|
381
|
+
async fetchTime(params = {}) {
|
|
382
|
+
let type = undefined;
|
|
383
|
+
[type, params] = this.handleMarketTypeAndParams('fetchTime', undefined, params);
|
|
384
|
+
let response = undefined;
|
|
385
|
+
if (type === 'swap') {
|
|
386
|
+
response = await this.contractPublicGetCfdOpenApiV1PubGetTime(params);
|
|
387
|
+
}
|
|
388
|
+
else {
|
|
389
|
+
response = await this.spotPublicGetTimestamp(params);
|
|
390
|
+
}
|
|
391
|
+
//
|
|
392
|
+
// spot
|
|
393
|
+
//
|
|
394
|
+
// {
|
|
395
|
+
// "result": "true",
|
|
396
|
+
// "data": 1691789627950,
|
|
397
|
+
// "error_code": 0,
|
|
398
|
+
// "ts": 1691789627950
|
|
399
|
+
// }
|
|
400
|
+
//
|
|
401
|
+
// swap
|
|
402
|
+
//
|
|
403
|
+
// {
|
|
404
|
+
// "data": 1691789627950,
|
|
405
|
+
// "error_code": 0,
|
|
406
|
+
// "msg": "Success",
|
|
407
|
+
// "result": "true",
|
|
408
|
+
// "success": true
|
|
409
|
+
// }
|
|
410
|
+
//
|
|
411
|
+
return this.safeInteger(response, 'data');
|
|
412
|
+
}
|
|
413
|
+
/**
|
|
414
|
+
* @method
|
|
415
|
+
* @name lbank#fetchCurrencies
|
|
416
|
+
* @description fetches all available currencies on an exchange
|
|
417
|
+
* @param {dict} [params] extra parameters specific to the exchange API endpoint
|
|
418
|
+
* @returns {dict} an associative dictionary of currencies
|
|
419
|
+
*/
|
|
420
|
+
async fetchCurrencies(params = {}) {
|
|
421
|
+
const response = await this.spotPublicGetWithdrawConfigs(params);
|
|
422
|
+
//
|
|
423
|
+
// {
|
|
424
|
+
// "msg": "Success",
|
|
425
|
+
// "result": "true",
|
|
426
|
+
// "data": [
|
|
427
|
+
// {
|
|
428
|
+
// "amountScale": "4",
|
|
429
|
+
// "chain": "bep20(bsc)",
|
|
430
|
+
// "assetCode": "usdt",
|
|
431
|
+
// "min": "10",
|
|
432
|
+
// "transferAmtScale": "4",
|
|
433
|
+
// "canWithDraw": true,
|
|
434
|
+
// "fee": "0.0000",
|
|
435
|
+
// "minTransfer": "0.0001",
|
|
436
|
+
// "type": "1"
|
|
437
|
+
// },
|
|
438
|
+
// {
|
|
439
|
+
// "amountScale": "4",
|
|
440
|
+
// "chain": "trc20",
|
|
441
|
+
// "assetCode": "usdt",
|
|
442
|
+
// "min": "1",
|
|
443
|
+
// "transferAmtScale": "4",
|
|
444
|
+
// "canWithDraw": true,
|
|
445
|
+
// "fee": "1.0000",
|
|
446
|
+
// "minTransfer": "0.0001",
|
|
447
|
+
// "type": "1"
|
|
448
|
+
// },
|
|
449
|
+
// ...
|
|
450
|
+
// ],
|
|
451
|
+
// "error_code": "0",
|
|
452
|
+
// "ts": "1747973911431"
|
|
453
|
+
// }
|
|
454
|
+
//
|
|
455
|
+
const currenciesData = this.safeList(response, 'data', []);
|
|
456
|
+
const grouped = this.groupBy(currenciesData, 'assetCode');
|
|
457
|
+
const groupedKeys = Object.keys(grouped);
|
|
458
|
+
const result = {};
|
|
459
|
+
for (let i = 0; i < groupedKeys.length; i++) {
|
|
460
|
+
const id = (groupedKeys[i]).toString(); // some currencies are numeric
|
|
461
|
+
const code = this.safeCurrencyCode(id);
|
|
462
|
+
const networksRaw = grouped[id];
|
|
463
|
+
const networks = {};
|
|
464
|
+
for (let j = 0; j < networksRaw.length; j++) {
|
|
465
|
+
const networkEntry = networksRaw[j];
|
|
466
|
+
const networkId = this.safeString(networkEntry, 'chain');
|
|
467
|
+
const networkCode = this.networkIdToCode(networkId);
|
|
468
|
+
networks[networkCode] = {
|
|
469
|
+
'id': networkId,
|
|
470
|
+
'network': networkCode,
|
|
471
|
+
'limits': {
|
|
472
|
+
'withdraw': {
|
|
473
|
+
'min': this.safeNumber(networkEntry, 'min'),
|
|
474
|
+
'max': undefined,
|
|
475
|
+
},
|
|
476
|
+
'deposit': {
|
|
477
|
+
'min': this.safeNumber(networkEntry, 'minTransfer'),
|
|
478
|
+
'max': undefined,
|
|
479
|
+
},
|
|
480
|
+
},
|
|
481
|
+
'active': undefined,
|
|
482
|
+
'deposit': undefined,
|
|
483
|
+
'withdraw': this.safeBool(networkEntry, 'canWithDraw'),
|
|
484
|
+
'fee': this.safeNumber(networkEntry, 'fee'),
|
|
485
|
+
'precision': this.parseNumber(this.parsePrecision(this.safeString(networkEntry, 'transferAmtScale'))),
|
|
486
|
+
'info': networkEntry,
|
|
487
|
+
};
|
|
488
|
+
}
|
|
489
|
+
result[code] = this.safeCurrencyStructure({
|
|
490
|
+
'id': id,
|
|
491
|
+
'code': code,
|
|
492
|
+
'precision': undefined,
|
|
493
|
+
'type': undefined,
|
|
494
|
+
'name': undefined,
|
|
495
|
+
'active': undefined,
|
|
496
|
+
'deposit': undefined,
|
|
497
|
+
'withdraw': undefined,
|
|
498
|
+
'fee': undefined,
|
|
499
|
+
'limits': {
|
|
500
|
+
'withdraw': {
|
|
501
|
+
'min': undefined,
|
|
502
|
+
'max': undefined,
|
|
503
|
+
},
|
|
504
|
+
'deposit': {
|
|
505
|
+
'min': undefined,
|
|
506
|
+
'max': undefined,
|
|
507
|
+
},
|
|
508
|
+
},
|
|
509
|
+
'networks': networks,
|
|
510
|
+
'info': networksRaw,
|
|
511
|
+
});
|
|
512
|
+
}
|
|
513
|
+
return result;
|
|
514
|
+
}
|
|
515
|
+
/**
|
|
516
|
+
* @method
|
|
517
|
+
* @name lbank#fetchMarkets
|
|
518
|
+
* @description retrieves data on all markets for lbank
|
|
519
|
+
* @see https://www.lbank.com/en-US/docs/index.html#trading-pairs
|
|
520
|
+
* @see https://www.lbank.com/en-US/docs/contract.html#query-contract-information-list
|
|
521
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
522
|
+
* @returns {object[]} an array of objects representing market data
|
|
523
|
+
*/
|
|
524
|
+
async fetchMarkets(params = {}) {
|
|
525
|
+
const marketsPromises = [
|
|
526
|
+
this.fetchSpotMarkets(params),
|
|
527
|
+
this.fetchSwapMarkets(params),
|
|
528
|
+
];
|
|
529
|
+
const resolvedMarkets = await Promise.all(marketsPromises);
|
|
530
|
+
return this.arrayConcat(resolvedMarkets[0], resolvedMarkets[1]);
|
|
531
|
+
}
|
|
532
|
+
async fetchSpotMarkets(params = {}) {
|
|
533
|
+
const response = await this.spotPublicGetAccuracy(params);
|
|
534
|
+
//
|
|
535
|
+
// {
|
|
536
|
+
// "result": "true",
|
|
537
|
+
// "data": [
|
|
538
|
+
// {
|
|
539
|
+
// "symbol": "btc_usdt",
|
|
540
|
+
// "quantityAccuracy": "4",
|
|
541
|
+
// "minTranQua": "0.0001",
|
|
542
|
+
// "priceAccuracy": "2"
|
|
543
|
+
// },
|
|
544
|
+
// ],
|
|
545
|
+
// "error_code": 0,
|
|
546
|
+
// "ts": 1691560288484
|
|
547
|
+
// }
|
|
548
|
+
//
|
|
549
|
+
const data = this.safeValue(response, 'data', []);
|
|
550
|
+
const result = [];
|
|
551
|
+
for (let i = 0; i < data.length; i++) {
|
|
552
|
+
const market = data[i];
|
|
553
|
+
const marketId = this.safeString(market, 'symbol');
|
|
554
|
+
const parts = marketId.split('_');
|
|
555
|
+
const baseId = parts[0];
|
|
556
|
+
const quoteId = parts[1];
|
|
557
|
+
const base = this.safeCurrencyCode(baseId);
|
|
558
|
+
const quote = this.safeCurrencyCode(quoteId);
|
|
559
|
+
const symbol = base + '/' + quote;
|
|
560
|
+
result.push({
|
|
561
|
+
'id': marketId,
|
|
562
|
+
'symbol': symbol,
|
|
563
|
+
'base': base,
|
|
564
|
+
'quote': quote,
|
|
565
|
+
'baseId': baseId,
|
|
566
|
+
'quoteId': quoteId,
|
|
567
|
+
'settle': undefined,
|
|
568
|
+
'settleId': undefined,
|
|
569
|
+
'type': 'spot',
|
|
570
|
+
'spot': true,
|
|
571
|
+
'margin': false,
|
|
572
|
+
'swap': false,
|
|
573
|
+
'future': false,
|
|
574
|
+
'option': false,
|
|
575
|
+
'active': true,
|
|
576
|
+
'contract': false,
|
|
577
|
+
'linear': undefined,
|
|
578
|
+
'inverse': undefined,
|
|
579
|
+
'contractSize': undefined,
|
|
580
|
+
'expiry': undefined,
|
|
581
|
+
'expiryDatetime': undefined,
|
|
582
|
+
'strike': undefined,
|
|
583
|
+
'optionType': undefined,
|
|
584
|
+
'precision': {
|
|
585
|
+
'amount': this.parseNumber(this.parsePrecision(this.safeString(market, 'quantityAccuracy'))),
|
|
586
|
+
'price': this.parseNumber(this.parsePrecision(this.safeString(market, 'priceAccuracy'))),
|
|
587
|
+
},
|
|
588
|
+
'limits': {
|
|
589
|
+
'leverage': {
|
|
590
|
+
'min': undefined,
|
|
591
|
+
'max': undefined,
|
|
592
|
+
},
|
|
593
|
+
'amount': {
|
|
594
|
+
'min': this.safeNumber(market, 'minTranQua'),
|
|
595
|
+
'max': undefined,
|
|
596
|
+
},
|
|
597
|
+
'price': {
|
|
598
|
+
'min': undefined,
|
|
599
|
+
'max': undefined,
|
|
600
|
+
},
|
|
601
|
+
'cost': {
|
|
602
|
+
'min': undefined,
|
|
603
|
+
'max': undefined,
|
|
604
|
+
},
|
|
605
|
+
},
|
|
606
|
+
'created': undefined,
|
|
607
|
+
'info': market,
|
|
608
|
+
});
|
|
609
|
+
}
|
|
610
|
+
return result;
|
|
611
|
+
}
|
|
612
|
+
async fetchSwapMarkets(params = {}) {
|
|
613
|
+
const request = {
|
|
614
|
+
'productGroup': 'SwapU',
|
|
615
|
+
};
|
|
616
|
+
const response = await this.contractPublicGetCfdOpenApiV1PubInstrument(this.extend(request, params));
|
|
617
|
+
//
|
|
618
|
+
// {
|
|
619
|
+
// "data": [
|
|
620
|
+
// {
|
|
621
|
+
// "priceLimitUpperValue": 0.2,
|
|
622
|
+
// "symbol": "BTCUSDT",
|
|
623
|
+
// "volumeTick": 0.0001,
|
|
624
|
+
// "indexPrice": "29707.70200000",
|
|
625
|
+
// "minOrderVolume": "0.0001",
|
|
626
|
+
// "priceTick": 0.1,
|
|
627
|
+
// "maxOrderVolume": "30.0",
|
|
628
|
+
// "baseCurrency": "BTC",
|
|
629
|
+
// "volumeMultiple": 1.0,
|
|
630
|
+
// "exchangeID": "Exchange",
|
|
631
|
+
// "priceCurrency": "USDT",
|
|
632
|
+
// "priceLimitLowerValue": 0.2,
|
|
633
|
+
// "clearCurrency": "USDT",
|
|
634
|
+
// "symbolName": "BTCUSDT",
|
|
635
|
+
// "defaultLeverage": 20.0,
|
|
636
|
+
// "minOrderCost": "5.0"
|
|
637
|
+
// },
|
|
638
|
+
// ],
|
|
639
|
+
// "error_code": 0,
|
|
640
|
+
// "msg": "Success",
|
|
641
|
+
// "result": "true",
|
|
642
|
+
// "success": true
|
|
643
|
+
// }
|
|
644
|
+
//
|
|
645
|
+
const data = this.safeValue(response, 'data', []);
|
|
646
|
+
const result = [];
|
|
647
|
+
for (let i = 0; i < data.length; i++) {
|
|
648
|
+
const market = data[i];
|
|
649
|
+
const marketId = this.safeString(market, 'symbol');
|
|
650
|
+
const baseId = this.safeString(market, 'baseCurrency');
|
|
651
|
+
const settleId = this.safeString(market, 'clearCurrency');
|
|
652
|
+
const quoteId = settleId;
|
|
653
|
+
const base = this.safeCurrencyCode(baseId);
|
|
654
|
+
const quote = this.safeCurrencyCode(quoteId);
|
|
655
|
+
const settle = this.safeCurrencyCode(settleId);
|
|
656
|
+
const symbol = base + '/' + quote + ':' + settle;
|
|
657
|
+
result.push({
|
|
658
|
+
'id': marketId,
|
|
659
|
+
'symbol': symbol,
|
|
660
|
+
'base': base,
|
|
661
|
+
'quote': quote,
|
|
662
|
+
'settle': settle,
|
|
663
|
+
'baseId': baseId,
|
|
664
|
+
'quoteId': quoteId,
|
|
665
|
+
'settleId': settleId,
|
|
666
|
+
'type': 'swap',
|
|
667
|
+
'spot': false,
|
|
668
|
+
'margin': false,
|
|
669
|
+
'swap': true,
|
|
670
|
+
'future': false,
|
|
671
|
+
'option': false,
|
|
672
|
+
'active': true,
|
|
673
|
+
'contract': true,
|
|
674
|
+
'linear': true,
|
|
675
|
+
'inverse': false,
|
|
676
|
+
'contractSize': this.safeNumber(market, 'volumeMultiple'),
|
|
677
|
+
'expiry': undefined,
|
|
678
|
+
'expiryDatetime': undefined,
|
|
679
|
+
'strike': undefined,
|
|
680
|
+
'optionType': undefined,
|
|
681
|
+
'precision': {
|
|
682
|
+
'amount': this.safeNumber(market, 'volumeTick'),
|
|
683
|
+
'price': this.safeNumber(market, 'priceTick'),
|
|
684
|
+
},
|
|
685
|
+
'limits': {
|
|
686
|
+
'leverage': {
|
|
687
|
+
'min': undefined,
|
|
688
|
+
'max': undefined,
|
|
689
|
+
},
|
|
690
|
+
'amount': {
|
|
691
|
+
'min': this.safeNumber(market, 'minOrderVolume'),
|
|
692
|
+
'max': this.safeNumber(market, 'maxOrderVolume'),
|
|
693
|
+
},
|
|
694
|
+
'price': {
|
|
695
|
+
'min': this.safeNumber(market, 'priceLimitLowerValue'),
|
|
696
|
+
'max': this.safeNumber(market, 'priceLimitUpperValue'),
|
|
697
|
+
},
|
|
698
|
+
'cost': {
|
|
699
|
+
'min': this.safeNumber(market, 'minOrderCost'),
|
|
700
|
+
'max': undefined,
|
|
701
|
+
},
|
|
702
|
+
},
|
|
703
|
+
'created': undefined,
|
|
704
|
+
'info': market,
|
|
705
|
+
});
|
|
706
|
+
}
|
|
707
|
+
return result;
|
|
708
|
+
}
|
|
709
|
+
parseTicker(ticker, market = undefined) {
|
|
710
|
+
//
|
|
711
|
+
// spot: fetchTicker, fetchTickers
|
|
712
|
+
//
|
|
713
|
+
// {
|
|
714
|
+
// "symbol": "btc_usdt",
|
|
715
|
+
// "ticker": {
|
|
716
|
+
// "high": "29695.57",
|
|
717
|
+
// "vol": "6890.2789",
|
|
718
|
+
// "low": "29110",
|
|
719
|
+
// "change": "0.58",
|
|
720
|
+
// "turnover": "202769821.06",
|
|
721
|
+
// "latest": "29405.98"
|
|
722
|
+
// },
|
|
723
|
+
// "timestamp": :1692064274908
|
|
724
|
+
// }
|
|
725
|
+
//
|
|
726
|
+
// swap: fetchTickers
|
|
727
|
+
//
|
|
728
|
+
// {
|
|
729
|
+
// "prePositionFeeRate": "0.000053",
|
|
730
|
+
// "volume": "2435.459",
|
|
731
|
+
// "symbol": "BTCUSDT",
|
|
732
|
+
// "highestPrice": "29446.5",
|
|
733
|
+
// "lowestPrice": "29362.9",
|
|
734
|
+
// "openPrice": "29419.5",
|
|
735
|
+
// "markedPrice": "29385.1",
|
|
736
|
+
// "turnover": "36345526.2438402",
|
|
737
|
+
// "lastPrice": "29387.0"
|
|
738
|
+
// }
|
|
739
|
+
//
|
|
740
|
+
const timestamp = this.safeInteger(ticker, 'timestamp');
|
|
741
|
+
const marketId = this.safeString(ticker, 'symbol');
|
|
742
|
+
const symbol = this.safeSymbol(marketId, market);
|
|
743
|
+
const tickerData = this.safeValue(ticker, 'ticker', {});
|
|
744
|
+
market = this.safeMarket(marketId, market);
|
|
745
|
+
const data = (market['contract']) ? ticker : tickerData;
|
|
746
|
+
return this.safeTicker({
|
|
747
|
+
'symbol': symbol,
|
|
748
|
+
'timestamp': timestamp,
|
|
749
|
+
'datetime': this.iso8601(timestamp),
|
|
750
|
+
'high': this.safeString2(data, 'high', 'highestPrice'),
|
|
751
|
+
'low': this.safeString2(data, 'low', 'lowestPrice'),
|
|
752
|
+
'bid': undefined,
|
|
753
|
+
'bidVolume': undefined,
|
|
754
|
+
'ask': undefined,
|
|
755
|
+
'askVolume': undefined,
|
|
756
|
+
'vwap': undefined,
|
|
757
|
+
'open': this.safeString(data, 'openPrice'),
|
|
758
|
+
'close': undefined,
|
|
759
|
+
'last': this.safeString2(data, 'latest', 'lastPrice'),
|
|
760
|
+
'previousClose': undefined,
|
|
761
|
+
'change': undefined,
|
|
762
|
+
'percentage': this.safeString(data, 'change'),
|
|
763
|
+
'average': undefined,
|
|
764
|
+
'baseVolume': this.safeString2(data, 'vol', 'volume'),
|
|
765
|
+
'quoteVolume': this.safeString(data, 'turnover'),
|
|
766
|
+
'info': ticker,
|
|
767
|
+
}, market);
|
|
768
|
+
}
|
|
769
|
+
/**
|
|
770
|
+
* @method
|
|
771
|
+
* @name lbank#fetchTicker
|
|
772
|
+
* @description fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
|
773
|
+
* @see https://www.lbank.com/en-US/docs/index.html#query-current-market-data-new
|
|
774
|
+
* @param {string} symbol unified symbol of the market to fetch the ticker for
|
|
775
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
776
|
+
* @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
|
|
777
|
+
*/
|
|
778
|
+
async fetchTicker(symbol, params = {}) {
|
|
779
|
+
await this.loadMarkets();
|
|
780
|
+
const market = this.market(symbol);
|
|
781
|
+
if (market['swap']) {
|
|
782
|
+
const responseForSwap = await this.fetchTickers([market['symbol']], params);
|
|
783
|
+
return this.safeValue(responseForSwap, market['symbol']);
|
|
784
|
+
}
|
|
785
|
+
const request = {
|
|
786
|
+
'symbol': market['id'],
|
|
787
|
+
};
|
|
788
|
+
const response = await this.spotPublicGetTicker24hr(this.extend(request, params));
|
|
789
|
+
//
|
|
790
|
+
// {
|
|
791
|
+
// "result": "true",
|
|
792
|
+
// "data": [
|
|
793
|
+
// {
|
|
794
|
+
// "symbol": "btc_usdt",
|
|
795
|
+
// "ticker": {
|
|
796
|
+
// "high": "29695.57",
|
|
797
|
+
// "vol": "6890.2789",
|
|
798
|
+
// "low": "29110",
|
|
799
|
+
// "change": "0.58",
|
|
800
|
+
// "turnover": "202769821.06",
|
|
801
|
+
// "latest": "29405.98"
|
|
802
|
+
// },
|
|
803
|
+
// "timestamp": :1692064274908
|
|
804
|
+
// }
|
|
805
|
+
// ],
|
|
806
|
+
// "error_code": 0,
|
|
807
|
+
// "ts": :1692064276872
|
|
808
|
+
// }
|
|
809
|
+
//
|
|
810
|
+
const data = this.safeValue(response, 'data', []);
|
|
811
|
+
const first = this.safeDict(data, 0, {});
|
|
812
|
+
return this.parseTicker(first, market);
|
|
813
|
+
}
|
|
814
|
+
/**
|
|
815
|
+
* @method
|
|
816
|
+
* @name lbank#fetchTickers
|
|
817
|
+
* @description fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
|
|
818
|
+
* @see https://www.lbank.com/en-US/docs/index.html#query-current-market-data-new
|
|
819
|
+
* @see https://www.lbank.com/en-US/docs/contract.html#query-contract-market-list
|
|
820
|
+
* @param {string[]|undefined} symbols unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
|
|
821
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
822
|
+
* @returns {object} a dictionary of [ticker structures]{@link https://docs.ccxt.com/#/?id=ticker-structure}
|
|
823
|
+
*/
|
|
824
|
+
async fetchTickers(symbols = undefined, params = {}) {
|
|
825
|
+
await this.loadMarkets();
|
|
826
|
+
let market = undefined;
|
|
827
|
+
if (symbols !== undefined) {
|
|
828
|
+
symbols = this.marketSymbols(symbols);
|
|
829
|
+
const symbolsLength = symbols.length;
|
|
830
|
+
if (symbolsLength > 0) {
|
|
831
|
+
market = this.market(symbols[0]);
|
|
832
|
+
}
|
|
833
|
+
}
|
|
834
|
+
const request = {};
|
|
835
|
+
let type = undefined;
|
|
836
|
+
[type, params] = this.handleMarketTypeAndParams('fetchTickers', market, params);
|
|
837
|
+
let response = undefined;
|
|
838
|
+
if (type === 'swap') {
|
|
839
|
+
request['productGroup'] = 'SwapU';
|
|
840
|
+
response = await this.contractPublicGetCfdOpenApiV1PubMarketData(this.extend(request, params));
|
|
841
|
+
}
|
|
842
|
+
else {
|
|
843
|
+
request['symbol'] = 'all';
|
|
844
|
+
response = await this.spotPublicGetTicker24hr(this.extend(request, params));
|
|
845
|
+
}
|
|
846
|
+
//
|
|
847
|
+
// spot
|
|
848
|
+
//
|
|
849
|
+
// {
|
|
850
|
+
// "result": "true",
|
|
851
|
+
// "data": [
|
|
852
|
+
// {
|
|
853
|
+
// "symbol": "btc_usdt",
|
|
854
|
+
// "ticker": {
|
|
855
|
+
// "high": "29695.57",
|
|
856
|
+
// "vol": "6890.2789",
|
|
857
|
+
// "low": "29110",
|
|
858
|
+
// "change": "0.58",
|
|
859
|
+
// "turnover": "202769821.06",
|
|
860
|
+
// "latest": "29405.98"
|
|
861
|
+
// },
|
|
862
|
+
// "timestamp": :1692064274908
|
|
863
|
+
// }
|
|
864
|
+
// ],
|
|
865
|
+
// "error_code": 0,
|
|
866
|
+
// "ts": :1692064276872
|
|
867
|
+
// }
|
|
868
|
+
//
|
|
869
|
+
// swap
|
|
870
|
+
//
|
|
871
|
+
// {
|
|
872
|
+
// "data": [
|
|
873
|
+
// {
|
|
874
|
+
// "prePositionFeeRate": "0.000053",
|
|
875
|
+
// "volume": "2435.459",
|
|
876
|
+
// "symbol": "BTCUSDT",
|
|
877
|
+
// "highestPrice": "29446.5",
|
|
878
|
+
// "lowestPrice": "29362.9",
|
|
879
|
+
// "openPrice": "29419.5",
|
|
880
|
+
// "markedPrice": "29385.1",
|
|
881
|
+
// "turnover": "36345526.2438402",
|
|
882
|
+
// "lastPrice": "29387.0"
|
|
883
|
+
// },
|
|
884
|
+
// ],
|
|
885
|
+
// "error_code": 0,
|
|
886
|
+
// "msg": "Success",
|
|
887
|
+
// "result": "true",
|
|
888
|
+
// "success": true
|
|
889
|
+
// }
|
|
890
|
+
//
|
|
891
|
+
const data = this.safeList(response, 'data', []);
|
|
892
|
+
return this.parseTickers(data, symbols);
|
|
893
|
+
}
|
|
894
|
+
/**
|
|
895
|
+
* @method
|
|
896
|
+
* @name lbank#fetchOrderBook
|
|
897
|
+
* @description fetches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
|
|
898
|
+
* @see https://www.lbank.com/en-US/docs/index.html#query-market-depth
|
|
899
|
+
* @see https://www.lbank.com/en-US/docs/contract.html#get-handicap
|
|
900
|
+
* @param {string} symbol unified symbol of the market to fetch the order book for
|
|
901
|
+
* @param {int} [limit] the maximum amount of order book entries to return
|
|
902
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
903
|
+
* @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
|
|
904
|
+
*/
|
|
905
|
+
async fetchOrderBook(symbol, limit = undefined, params = {}) {
|
|
906
|
+
await this.loadMarkets();
|
|
907
|
+
const market = this.market(symbol);
|
|
908
|
+
if (limit === undefined) {
|
|
909
|
+
limit = 60;
|
|
910
|
+
}
|
|
911
|
+
const request = {
|
|
912
|
+
'symbol': market['id'],
|
|
913
|
+
};
|
|
914
|
+
let type = undefined;
|
|
915
|
+
[type, params] = this.handleMarketTypeAndParams('fetchOrderBook', market, params);
|
|
916
|
+
let response = undefined;
|
|
917
|
+
if (type === 'swap') {
|
|
918
|
+
request['depth'] = limit;
|
|
919
|
+
response = await this.contractPublicGetCfdOpenApiV1PubMarketOrder(this.extend(request, params));
|
|
920
|
+
}
|
|
921
|
+
else {
|
|
922
|
+
request['size'] = limit;
|
|
923
|
+
response = await this.spotPublicGetDepth(this.extend(request, params));
|
|
924
|
+
}
|
|
925
|
+
//
|
|
926
|
+
// spot
|
|
927
|
+
//
|
|
928
|
+
// {
|
|
929
|
+
// "result": "true",
|
|
930
|
+
// "data": {
|
|
931
|
+
// "asks": [
|
|
932
|
+
// ["29243.37", "2.8783"],
|
|
933
|
+
// ["29243.39", "2.2842"],
|
|
934
|
+
// ["29243.4", "0.0337"]
|
|
935
|
+
// ],
|
|
936
|
+
// "bids": [
|
|
937
|
+
// ["29243.36", "1.5258"],
|
|
938
|
+
// ["29243.34", "0.8218"],
|
|
939
|
+
// ["29243.28", "1.285"]
|
|
940
|
+
// ],
|
|
941
|
+
// "timestamp": :1692157328820
|
|
942
|
+
// },
|
|
943
|
+
// "error_code": 0,
|
|
944
|
+
// "ts": :1692157328820
|
|
945
|
+
// }
|
|
946
|
+
//
|
|
947
|
+
// swap
|
|
948
|
+
//
|
|
949
|
+
// {
|
|
950
|
+
// "data": {
|
|
951
|
+
// "symbol": "BTCUSDT",
|
|
952
|
+
// "asks": [
|
|
953
|
+
// {
|
|
954
|
+
// "volume": "14.6535",
|
|
955
|
+
// "price": "29234.2",
|
|
956
|
+
// "orders": "1"
|
|
957
|
+
// },
|
|
958
|
+
// ],
|
|
959
|
+
// "bids": [
|
|
960
|
+
// {
|
|
961
|
+
// "volume": "13.4899",
|
|
962
|
+
// "price": "29234.1",
|
|
963
|
+
// "orders": "4"
|
|
964
|
+
// },
|
|
965
|
+
// ]
|
|
966
|
+
// },
|
|
967
|
+
// "error_code": 0,
|
|
968
|
+
// "msg": "Success",
|
|
969
|
+
// "result": "true",
|
|
970
|
+
// "success": true
|
|
971
|
+
// }
|
|
972
|
+
//
|
|
973
|
+
const orderbook = this.safeValue(response, 'data', {});
|
|
974
|
+
const timestamp = this.milliseconds();
|
|
975
|
+
if (market['swap']) {
|
|
976
|
+
return this.parseOrderBook(orderbook, market['symbol'], timestamp, 'bids', 'asks', 'price', 'volume');
|
|
977
|
+
}
|
|
978
|
+
return this.parseOrderBook(orderbook, market['symbol'], timestamp, 'bids', 'asks');
|
|
979
|
+
}
|
|
980
|
+
parseTrade(trade, market = undefined) {
|
|
981
|
+
//
|
|
982
|
+
// fetchTrades (old) spotPublicGetTrades
|
|
983
|
+
//
|
|
984
|
+
// {
|
|
985
|
+
// "date_ms":1647021989789,
|
|
986
|
+
// "amount":0.0028,
|
|
987
|
+
// "price":38804.2,
|
|
988
|
+
// "type":"buy",
|
|
989
|
+
// "tid":"52d5616ee35c43019edddebe59b3e094"
|
|
990
|
+
// }
|
|
991
|
+
//
|
|
992
|
+
//
|
|
993
|
+
// fetchTrades (new) spotPublicGetTradesSupplement
|
|
994
|
+
//
|
|
995
|
+
// {
|
|
996
|
+
// "quoteQty":1675.048485,
|
|
997
|
+
// "price":0.127545,
|
|
998
|
+
// "qty":13133,
|
|
999
|
+
// "id":"3589541dc22e4357b227283650f714e2",
|
|
1000
|
+
// "time":1648058297110,
|
|
1001
|
+
// "isBuyerMaker":false
|
|
1002
|
+
// }
|
|
1003
|
+
//
|
|
1004
|
+
// fetchMyTrades (private)
|
|
1005
|
+
//
|
|
1006
|
+
// {
|
|
1007
|
+
// "orderUuid":"38b4e7a4-14f6-45fd-aba1-1a37024124a0",
|
|
1008
|
+
// "tradeFeeRate":0.0010000000,
|
|
1009
|
+
// "dealTime":1648500944496,
|
|
1010
|
+
// "dealQuantity":30.00000000000000000000,
|
|
1011
|
+
// "tradeFee":0.00453300000000000000,
|
|
1012
|
+
// "txUuid":"11f3850cc6214ea3b495adad3a032794",
|
|
1013
|
+
// "dealPrice":0.15111300000000000000,
|
|
1014
|
+
// "dealVolumePrice":4.53339000000000000000,
|
|
1015
|
+
// "tradeType":"sell_market"
|
|
1016
|
+
// }
|
|
1017
|
+
//
|
|
1018
|
+
let timestamp = this.safeInteger2(trade, 'date_ms', 'time');
|
|
1019
|
+
if (timestamp === undefined) {
|
|
1020
|
+
timestamp = this.safeInteger(trade, 'dealTime');
|
|
1021
|
+
}
|
|
1022
|
+
let amountString = this.safeString2(trade, 'amount', 'qty');
|
|
1023
|
+
if (amountString === undefined) {
|
|
1024
|
+
amountString = this.safeString(trade, 'dealQuantity');
|
|
1025
|
+
}
|
|
1026
|
+
let priceString = this.safeString(trade, 'price');
|
|
1027
|
+
if (priceString === undefined) {
|
|
1028
|
+
priceString = this.safeString(trade, 'dealPrice');
|
|
1029
|
+
}
|
|
1030
|
+
let costString = this.safeString(trade, 'quoteQty');
|
|
1031
|
+
if (costString === undefined) {
|
|
1032
|
+
costString = this.safeString(trade, 'dealVolumePrice');
|
|
1033
|
+
}
|
|
1034
|
+
let side = this.safeString2(trade, 'tradeType', 'type');
|
|
1035
|
+
let type = undefined;
|
|
1036
|
+
let takerOrMaker = undefined;
|
|
1037
|
+
if (side !== undefined) {
|
|
1038
|
+
const parts = side.split('_');
|
|
1039
|
+
side = this.safeString(parts, 0);
|
|
1040
|
+
const typePart = this.safeString(parts, 1);
|
|
1041
|
+
type = 'limit';
|
|
1042
|
+
takerOrMaker = 'taker';
|
|
1043
|
+
if (typePart !== undefined) {
|
|
1044
|
+
if (typePart === 'market') {
|
|
1045
|
+
type = 'market';
|
|
1046
|
+
}
|
|
1047
|
+
else if (typePart === 'maker') {
|
|
1048
|
+
takerOrMaker = 'maker';
|
|
1049
|
+
}
|
|
1050
|
+
}
|
|
1051
|
+
}
|
|
1052
|
+
let id = this.safeString2(trade, 'tid', 'id');
|
|
1053
|
+
if (id === undefined) {
|
|
1054
|
+
id = this.safeString(trade, 'txUuid');
|
|
1055
|
+
}
|
|
1056
|
+
const order = this.safeString(trade, 'orderUuid');
|
|
1057
|
+
const symbol = this.safeSymbol(undefined, market);
|
|
1058
|
+
let fee = undefined;
|
|
1059
|
+
const feeCost = this.safeString(trade, 'tradeFee');
|
|
1060
|
+
if (feeCost !== undefined) {
|
|
1061
|
+
fee = {
|
|
1062
|
+
'cost': feeCost,
|
|
1063
|
+
'currency': (side === 'buy') ? market['base'] : market['quote'],
|
|
1064
|
+
'rate': this.safeString(trade, 'tradeFeeRate'),
|
|
1065
|
+
};
|
|
1066
|
+
}
|
|
1067
|
+
return this.safeTrade({
|
|
1068
|
+
'timestamp': timestamp,
|
|
1069
|
+
'datetime': this.iso8601(timestamp),
|
|
1070
|
+
'symbol': symbol,
|
|
1071
|
+
'id': id,
|
|
1072
|
+
'order': order,
|
|
1073
|
+
'type': type,
|
|
1074
|
+
'takerOrMaker': takerOrMaker,
|
|
1075
|
+
'side': side,
|
|
1076
|
+
'price': priceString,
|
|
1077
|
+
'amount': amountString,
|
|
1078
|
+
'cost': costString,
|
|
1079
|
+
'fee': fee,
|
|
1080
|
+
'info': trade,
|
|
1081
|
+
}, market);
|
|
1082
|
+
}
|
|
1083
|
+
/**
|
|
1084
|
+
* @method
|
|
1085
|
+
* @name lbank#fetchTrades
|
|
1086
|
+
* @description get the list of most recent trades for a particular symbol
|
|
1087
|
+
* @see https://www.lbank.com/en-US/docs/index.html#query-historical-transactions
|
|
1088
|
+
* @see https://www.lbank.com/en-US/docs/index.html#recent-transactions-list
|
|
1089
|
+
* @param {string} symbol unified symbol of the market to fetch trades for
|
|
1090
|
+
* @param {int} [since] timestamp in ms of the earliest trade to fetch
|
|
1091
|
+
* @param {int} [limit] the maximum amount of trades to fetch
|
|
1092
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1093
|
+
* @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
|
|
1094
|
+
*/
|
|
1095
|
+
async fetchTrades(symbol, since = undefined, limit = undefined, params = {}) {
|
|
1096
|
+
await this.loadMarkets();
|
|
1097
|
+
const market = this.market(symbol);
|
|
1098
|
+
const request = {
|
|
1099
|
+
'symbol': market['id'],
|
|
1100
|
+
};
|
|
1101
|
+
if (since !== undefined) {
|
|
1102
|
+
request['time'] = since;
|
|
1103
|
+
}
|
|
1104
|
+
if (limit !== undefined) {
|
|
1105
|
+
request['size'] = Math.min(limit, 600);
|
|
1106
|
+
}
|
|
1107
|
+
else {
|
|
1108
|
+
request['size'] = 600; // max
|
|
1109
|
+
}
|
|
1110
|
+
const options = this.safeValue(this.options, 'fetchTrades', {});
|
|
1111
|
+
const defaultMethod = this.safeString(options, 'method', 'spotPublicGetTrades');
|
|
1112
|
+
const method = this.safeString(params, 'method', defaultMethod);
|
|
1113
|
+
params = this.omit(params, 'method');
|
|
1114
|
+
let response = undefined;
|
|
1115
|
+
if (method === 'spotPublicGetSupplementTrades') {
|
|
1116
|
+
response = await this.spotPublicGetSupplementTrades(this.extend(request, params));
|
|
1117
|
+
}
|
|
1118
|
+
else {
|
|
1119
|
+
response = await this.spotPublicGetTrades(this.extend(request, params));
|
|
1120
|
+
}
|
|
1121
|
+
//
|
|
1122
|
+
// {
|
|
1123
|
+
// "result":"true",
|
|
1124
|
+
// "data": [
|
|
1125
|
+
// {
|
|
1126
|
+
// "date_ms":1647021989789,
|
|
1127
|
+
// "amount":0.0028,
|
|
1128
|
+
// "price":38804.2,
|
|
1129
|
+
// "type":"buy",
|
|
1130
|
+
// "tid":"52d5616ee35c43019edddebe59b3e094"
|
|
1131
|
+
// }
|
|
1132
|
+
// ],
|
|
1133
|
+
// "error_code":0,
|
|
1134
|
+
// "ts":1647021999308
|
|
1135
|
+
// }
|
|
1136
|
+
//
|
|
1137
|
+
const trades = this.safeList(response, 'data', []);
|
|
1138
|
+
return this.parseTrades(trades, market, since, limit);
|
|
1139
|
+
}
|
|
1140
|
+
parseOHLCV(ohlcv, market = undefined) {
|
|
1141
|
+
//
|
|
1142
|
+
// [
|
|
1143
|
+
// 1482311500, // timestamp
|
|
1144
|
+
// 5423.23, // open
|
|
1145
|
+
// 5472.80, // high
|
|
1146
|
+
// 5516.09, // low
|
|
1147
|
+
// 5462, // close
|
|
1148
|
+
// 234.3250 // volume
|
|
1149
|
+
// ],
|
|
1150
|
+
//
|
|
1151
|
+
return [
|
|
1152
|
+
this.safeTimestamp(ohlcv, 0),
|
|
1153
|
+
this.safeNumber(ohlcv, 1),
|
|
1154
|
+
this.safeNumber(ohlcv, 2),
|
|
1155
|
+
this.safeNumber(ohlcv, 3),
|
|
1156
|
+
this.safeNumber(ohlcv, 4),
|
|
1157
|
+
this.safeNumber(ohlcv, 5), // volume
|
|
1158
|
+
];
|
|
1159
|
+
}
|
|
1160
|
+
/**
|
|
1161
|
+
* @method
|
|
1162
|
+
* @name lbank#fetchOHLCV
|
|
1163
|
+
* @description fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
|
|
1164
|
+
* @see https://www.lbank.com/en-US/docs/index.html#query-k-bar-data
|
|
1165
|
+
* @param {string} symbol unified symbol of the market to fetch OHLCV data for
|
|
1166
|
+
* @param {string} timeframe the length of time each candle represents
|
|
1167
|
+
* @param {int} [since] timestamp in ms of the earliest candle to fetch
|
|
1168
|
+
* @param {int} [limit] the maximum amount of candles to fetch
|
|
1169
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1170
|
+
* @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume
|
|
1171
|
+
*/
|
|
1172
|
+
async fetchOHLCV(symbol, timeframe = '1m', since = undefined, limit = undefined, params = {}) {
|
|
1173
|
+
// endpoint doesnt work
|
|
1174
|
+
await this.loadMarkets();
|
|
1175
|
+
const market = this.market(symbol);
|
|
1176
|
+
if (limit === undefined) {
|
|
1177
|
+
limit = 100;
|
|
1178
|
+
}
|
|
1179
|
+
else {
|
|
1180
|
+
limit = Math.min(limit, 2000);
|
|
1181
|
+
}
|
|
1182
|
+
if (since === undefined) {
|
|
1183
|
+
const duration = this.parseTimeframe(timeframe);
|
|
1184
|
+
since = this.milliseconds() - (duration * 1000 * limit);
|
|
1185
|
+
}
|
|
1186
|
+
const request = {
|
|
1187
|
+
'symbol': market['id'],
|
|
1188
|
+
'type': this.safeString(this.timeframes, timeframe, timeframe),
|
|
1189
|
+
'time': this.parseToInt(since / 1000),
|
|
1190
|
+
'size': Math.min(limit + 1, 2000), // max 2000
|
|
1191
|
+
};
|
|
1192
|
+
const response = await this.spotPublicGetKline(this.extend(request, params));
|
|
1193
|
+
const ohlcvs = this.safeList(response, 'data', []);
|
|
1194
|
+
//
|
|
1195
|
+
//
|
|
1196
|
+
// [
|
|
1197
|
+
// [
|
|
1198
|
+
// 1482311500,
|
|
1199
|
+
// 5423.23,
|
|
1200
|
+
// 5472.80,
|
|
1201
|
+
// 5516.09,
|
|
1202
|
+
// 5462,
|
|
1203
|
+
// 234.3250
|
|
1204
|
+
// ],
|
|
1205
|
+
// [
|
|
1206
|
+
// 1482311400,
|
|
1207
|
+
// 5432.52,
|
|
1208
|
+
// 5459.87,
|
|
1209
|
+
// 5414.30,
|
|
1210
|
+
// 5428.23,
|
|
1211
|
+
// 213.7329
|
|
1212
|
+
// ]
|
|
1213
|
+
// ]
|
|
1214
|
+
//
|
|
1215
|
+
return this.parseOHLCVs(ohlcvs, market, timeframe, since, limit);
|
|
1216
|
+
}
|
|
1217
|
+
parseBalance(response) {
|
|
1218
|
+
//
|
|
1219
|
+
// spotPrivatePostUserInfo
|
|
1220
|
+
//
|
|
1221
|
+
// {
|
|
1222
|
+
// "toBtc": {
|
|
1223
|
+
// "egc:": "0",
|
|
1224
|
+
// "iog": "0",
|
|
1225
|
+
// "ksm": "0",
|
|
1226
|
+
// },
|
|
1227
|
+
// "freeze": {
|
|
1228
|
+
// "egc": "0",
|
|
1229
|
+
// "iog": "0",
|
|
1230
|
+
// "ksm": "0" ,
|
|
1231
|
+
// },
|
|
1232
|
+
// "asset": {
|
|
1233
|
+
// "egc": "0",
|
|
1234
|
+
// "iog": "0",
|
|
1235
|
+
// "ksm": "0",
|
|
1236
|
+
// },
|
|
1237
|
+
// "free": {
|
|
1238
|
+
// "egc": "0",
|
|
1239
|
+
// "iog": "0",
|
|
1240
|
+
// "ksm": "0",
|
|
1241
|
+
// }
|
|
1242
|
+
// }
|
|
1243
|
+
//
|
|
1244
|
+
// spotPrivatePostSupplementUserInfoAccount
|
|
1245
|
+
//
|
|
1246
|
+
// {
|
|
1247
|
+
// "balances":[
|
|
1248
|
+
// {
|
|
1249
|
+
// "asset":"lbk",
|
|
1250
|
+
// "free":"0",
|
|
1251
|
+
// "locked":"0"
|
|
1252
|
+
// }, ...
|
|
1253
|
+
// ]
|
|
1254
|
+
// }
|
|
1255
|
+
//
|
|
1256
|
+
// spotPrivatePostSupplementUserInfo
|
|
1257
|
+
//
|
|
1258
|
+
// [
|
|
1259
|
+
// {
|
|
1260
|
+
// "usableAmt":"31.45130723",
|
|
1261
|
+
// "assetAmt":"31.45130723",
|
|
1262
|
+
// "networkList":[
|
|
1263
|
+
// {
|
|
1264
|
+
// "isDefault":true,
|
|
1265
|
+
// "withdrawFeeRate":"",
|
|
1266
|
+
// "name":"bep20(bsc)",
|
|
1267
|
+
// "withdrawMin":30,
|
|
1268
|
+
// "minLimit":0.0001,
|
|
1269
|
+
// "minDeposit":0.0001,
|
|
1270
|
+
// "feeAssetCode":"doge",
|
|
1271
|
+
// "withdrawFee":"30",
|
|
1272
|
+
// "type":1,
|
|
1273
|
+
// "coin":"doge",
|
|
1274
|
+
// "network":"bsc"
|
|
1275
|
+
// },
|
|
1276
|
+
// {
|
|
1277
|
+
// "isDefault":false,
|
|
1278
|
+
// "withdrawFeeRate":"",
|
|
1279
|
+
// "name":"dogecoin",
|
|
1280
|
+
// "withdrawMin":10,
|
|
1281
|
+
// "minLimit":0.0001,
|
|
1282
|
+
// "minDeposit":10,
|
|
1283
|
+
// "feeAssetCode":"doge",
|
|
1284
|
+
// "withdrawFee":"10",
|
|
1285
|
+
// "type":1,
|
|
1286
|
+
// "coin":"doge",
|
|
1287
|
+
// "network":"dogecoin"
|
|
1288
|
+
// }
|
|
1289
|
+
// ],
|
|
1290
|
+
// "freezeAmt":"0",
|
|
1291
|
+
// "coin":"doge"
|
|
1292
|
+
// }, ...
|
|
1293
|
+
// ]
|
|
1294
|
+
//
|
|
1295
|
+
const timestamp = this.safeInteger(response, 'ts');
|
|
1296
|
+
const result = {
|
|
1297
|
+
'info': response,
|
|
1298
|
+
'timestamp': timestamp,
|
|
1299
|
+
'datetime': this.iso8601(timestamp),
|
|
1300
|
+
};
|
|
1301
|
+
const data = this.safeValue(response, 'data');
|
|
1302
|
+
// from spotPrivatePostUserInfo
|
|
1303
|
+
const toBtc = this.safeValue(data, 'toBtc');
|
|
1304
|
+
if (toBtc !== undefined) {
|
|
1305
|
+
const used = this.safeValue(data, 'freeze', {});
|
|
1306
|
+
const free = this.safeValue(data, 'free', {});
|
|
1307
|
+
const currencies = Object.keys(free);
|
|
1308
|
+
for (let i = 0; i < currencies.length; i++) {
|
|
1309
|
+
const currencyId = currencies[i];
|
|
1310
|
+
const code = this.safeCurrencyCode(currencyId);
|
|
1311
|
+
const account = this.account();
|
|
1312
|
+
account['used'] = this.safeString(used, currencyId);
|
|
1313
|
+
account['free'] = this.safeString(free, currencyId);
|
|
1314
|
+
result[code] = account;
|
|
1315
|
+
}
|
|
1316
|
+
return this.safeBalance(result);
|
|
1317
|
+
}
|
|
1318
|
+
// from spotPrivatePostSupplementUserInfoAccount
|
|
1319
|
+
const balances = this.safeValue(data, 'balances');
|
|
1320
|
+
if (balances !== undefined) {
|
|
1321
|
+
for (let i = 0; i < balances.length; i++) {
|
|
1322
|
+
const item = balances[i];
|
|
1323
|
+
const currencyId = this.safeString(item, 'asset');
|
|
1324
|
+
const codeInner = this.safeCurrencyCode(currencyId);
|
|
1325
|
+
const account = this.account();
|
|
1326
|
+
account['free'] = this.safeString(item, 'free');
|
|
1327
|
+
account['used'] = this.safeString(item, 'locked');
|
|
1328
|
+
result[codeInner] = account;
|
|
1329
|
+
}
|
|
1330
|
+
return this.safeBalance(result);
|
|
1331
|
+
}
|
|
1332
|
+
// from spotPrivatePostSupplementUserInfo
|
|
1333
|
+
const isArray = Array.isArray(data);
|
|
1334
|
+
if (isArray === true) {
|
|
1335
|
+
for (let i = 0; i < data.length; i++) {
|
|
1336
|
+
const item = data[i];
|
|
1337
|
+
const currencyId = this.safeString(item, 'coin');
|
|
1338
|
+
const codeInner = this.safeCurrencyCode(currencyId);
|
|
1339
|
+
const account = this.account();
|
|
1340
|
+
account['free'] = this.safeString(item, 'usableAmt');
|
|
1341
|
+
account['used'] = this.safeString(item, 'freezeAmt');
|
|
1342
|
+
result[codeInner] = account;
|
|
1343
|
+
}
|
|
1344
|
+
return this.safeBalance(result);
|
|
1345
|
+
}
|
|
1346
|
+
return undefined;
|
|
1347
|
+
}
|
|
1348
|
+
parseFundingRate(ticker, market = undefined) {
|
|
1349
|
+
// {
|
|
1350
|
+
// "symbol": "BTCUSDT",
|
|
1351
|
+
// "highestPrice": "69495.5",
|
|
1352
|
+
// "underlyingPrice": "68455.904",
|
|
1353
|
+
// "lowestPrice": "68182.1",
|
|
1354
|
+
// "openPrice": "68762.4",
|
|
1355
|
+
// "positionFeeRate": "0.0001",
|
|
1356
|
+
// "volume": "33534.2858",
|
|
1357
|
+
// "markedPrice": "68434.1",
|
|
1358
|
+
// "turnover": "1200636218.210558",
|
|
1359
|
+
// "positionFeeTime": "28800",
|
|
1360
|
+
// "lastPrice": "68427.3",
|
|
1361
|
+
// "nextFeeTime": "1730736000000",
|
|
1362
|
+
// "fundingRate": "0.0001",
|
|
1363
|
+
// }
|
|
1364
|
+
const marketId = this.safeString(ticker, 'symbol');
|
|
1365
|
+
const symbol = this.safeSymbol(marketId, market);
|
|
1366
|
+
const markPrice = this.safeNumber(ticker, 'markedPrice');
|
|
1367
|
+
const indexPrice = this.safeNumber(ticker, 'underlyingPrice');
|
|
1368
|
+
const fundingRate = this.safeNumber(ticker, 'fundingRate');
|
|
1369
|
+
const fundingTime = this.safeInteger(ticker, 'nextFeeTime');
|
|
1370
|
+
const positionFeeTime = this.safeInteger(ticker, 'positionFeeTime');
|
|
1371
|
+
let intervalString = undefined;
|
|
1372
|
+
if (positionFeeTime !== undefined) {
|
|
1373
|
+
const interval = this.parseToInt(positionFeeTime / 60 / 60);
|
|
1374
|
+
intervalString = interval.toString() + 'h';
|
|
1375
|
+
}
|
|
1376
|
+
return {
|
|
1377
|
+
'info': ticker,
|
|
1378
|
+
'symbol': symbol,
|
|
1379
|
+
'markPrice': markPrice,
|
|
1380
|
+
'indexPrice': indexPrice,
|
|
1381
|
+
'fundingRate': fundingRate,
|
|
1382
|
+
'fundingTimestamp': fundingTime,
|
|
1383
|
+
'fundingDatetime': this.iso8601(fundingTime),
|
|
1384
|
+
'timestamp': undefined,
|
|
1385
|
+
'datetime': undefined,
|
|
1386
|
+
'nextFundingRate': undefined,
|
|
1387
|
+
'nextFundingTimestamp': undefined,
|
|
1388
|
+
'nextFundingDatetime': undefined,
|
|
1389
|
+
'previousFundingRate': undefined,
|
|
1390
|
+
'previousFundingTimestamp': undefined,
|
|
1391
|
+
'previousFundingDatetime': undefined,
|
|
1392
|
+
'interval': intervalString,
|
|
1393
|
+
};
|
|
1394
|
+
}
|
|
1395
|
+
/**
|
|
1396
|
+
* @method
|
|
1397
|
+
* @name lbank#fetchFundingRate
|
|
1398
|
+
* @description fetch the current funding rate
|
|
1399
|
+
* @see https://www.lbank.com/en-US/docs/contract.html#query-contract-market-list
|
|
1400
|
+
* @param {string} symbol unified market symbol
|
|
1401
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1402
|
+
* @returns {object} a [funding rate structure]{@link https://docs.ccxt.com/#/?id=funding-rate-structure}
|
|
1403
|
+
*/
|
|
1404
|
+
async fetchFundingRate(symbol, params = {}) {
|
|
1405
|
+
await this.loadMarkets();
|
|
1406
|
+
const market = this.market(symbol);
|
|
1407
|
+
const responseForSwap = await this.fetchFundingRates([market['symbol']], params);
|
|
1408
|
+
return this.safeValue(responseForSwap, market['symbol']);
|
|
1409
|
+
}
|
|
1410
|
+
/**
|
|
1411
|
+
* @method
|
|
1412
|
+
* @name lbank#fetchFundingRates
|
|
1413
|
+
* @description fetch the funding rate for multiple markets
|
|
1414
|
+
* @see https://www.lbank.com/en-US/docs/contract.html#query-contract-market-list
|
|
1415
|
+
* @param {string[]|undefined} symbols list of unified market symbols
|
|
1416
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1417
|
+
* @returns {object} a dictionary of [funding rate structures]{@link https://docs.ccxt.com/#/?id=funding-rates-structure}, indexed by market symbols
|
|
1418
|
+
*/
|
|
1419
|
+
async fetchFundingRates(symbols = undefined, params = {}) {
|
|
1420
|
+
await this.loadMarkets();
|
|
1421
|
+
symbols = this.marketSymbols(symbols);
|
|
1422
|
+
const request = {
|
|
1423
|
+
'productGroup': 'SwapU',
|
|
1424
|
+
};
|
|
1425
|
+
const response = await this.contractPublicGetCfdOpenApiV1PubMarketData(this.extend(request, params));
|
|
1426
|
+
// {
|
|
1427
|
+
// "data": [
|
|
1428
|
+
// {
|
|
1429
|
+
// "symbol": "BTCUSDT",
|
|
1430
|
+
// "highestPrice": "69495.5",
|
|
1431
|
+
// "underlyingPrice": "68455.904",
|
|
1432
|
+
// "lowestPrice": "68182.1",
|
|
1433
|
+
// "openPrice": "68762.4",
|
|
1434
|
+
// "positionFeeRate": "0.0001",
|
|
1435
|
+
// "volume": "33534.2858",
|
|
1436
|
+
// "markedPrice": "68434.1",
|
|
1437
|
+
// "turnover": "1200636218.210558",
|
|
1438
|
+
// "positionFeeTime": "28800",
|
|
1439
|
+
// "lastPrice": "68427.3",
|
|
1440
|
+
// "nextFeeTime": "1730736000000",
|
|
1441
|
+
// "fundingRate": "0.0001",
|
|
1442
|
+
// }
|
|
1443
|
+
// ],
|
|
1444
|
+
// "error_code": "0",
|
|
1445
|
+
// "msg": "Success",
|
|
1446
|
+
// "result": "true",
|
|
1447
|
+
// "success": True,
|
|
1448
|
+
// }
|
|
1449
|
+
const data = this.safeList(response, 'data', []);
|
|
1450
|
+
return this.parseFundingRates(data, symbols);
|
|
1451
|
+
}
|
|
1452
|
+
/**
|
|
1453
|
+
* @method
|
|
1454
|
+
* @name lbank#fetchBalance
|
|
1455
|
+
* @description query for balance and get the amount of funds available for trading or funds locked in orders
|
|
1456
|
+
* @see https://www.lbank.com/en-US/docs/index.html#asset-information
|
|
1457
|
+
* @see https://www.lbank.com/en-US/docs/index.html#account-information
|
|
1458
|
+
* @see https://www.lbank.com/en-US/docs/index.html#get-all-coins-information
|
|
1459
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1460
|
+
* @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}
|
|
1461
|
+
*/
|
|
1462
|
+
async fetchBalance(params = {}) {
|
|
1463
|
+
await this.loadMarkets();
|
|
1464
|
+
const options = this.safeValue(this.options, 'fetchBalance', {});
|
|
1465
|
+
const defaultMethod = this.safeString(options, 'method', 'spotPrivatePostSupplementUserInfo');
|
|
1466
|
+
const method = this.safeString(params, 'method', defaultMethod);
|
|
1467
|
+
let response = undefined;
|
|
1468
|
+
if (method === 'spotPrivatePostSupplementUserInfoAccount') {
|
|
1469
|
+
response = await this.spotPrivatePostSupplementUserInfoAccount();
|
|
1470
|
+
}
|
|
1471
|
+
else if (method === 'spotPrivatePostUserInfo') {
|
|
1472
|
+
response = await this.spotPrivatePostUserInfo();
|
|
1473
|
+
}
|
|
1474
|
+
else {
|
|
1475
|
+
response = await this.spotPrivatePostSupplementUserInfo();
|
|
1476
|
+
}
|
|
1477
|
+
//
|
|
1478
|
+
// {
|
|
1479
|
+
// "result": "true",
|
|
1480
|
+
// "data": [
|
|
1481
|
+
// {
|
|
1482
|
+
// "usableAmt": "14.36",
|
|
1483
|
+
// "assetAmt": "14.36",
|
|
1484
|
+
// "networkList": [
|
|
1485
|
+
// {
|
|
1486
|
+
// "isDefault": false,
|
|
1487
|
+
// "withdrawFeeRate": "",
|
|
1488
|
+
// "name": "erc20",
|
|
1489
|
+
// "withdrawMin": 30,
|
|
1490
|
+
// "minLimit": 0.0001,
|
|
1491
|
+
// "minDeposit": 20,
|
|
1492
|
+
// "feeAssetCode": "usdt",
|
|
1493
|
+
// "withdrawFee": "30",
|
|
1494
|
+
// "type": 1,
|
|
1495
|
+
// "coin": "usdt",
|
|
1496
|
+
// "network": "eth"
|
|
1497
|
+
// },
|
|
1498
|
+
// ...
|
|
1499
|
+
// ],
|
|
1500
|
+
// "freezeAmt": "0",
|
|
1501
|
+
// "coin": "ada"
|
|
1502
|
+
// }
|
|
1503
|
+
// ],
|
|
1504
|
+
// "code": 0
|
|
1505
|
+
// }
|
|
1506
|
+
//
|
|
1507
|
+
return this.parseBalance(response);
|
|
1508
|
+
}
|
|
1509
|
+
parseTradingFee(fee, market = undefined) {
|
|
1510
|
+
//
|
|
1511
|
+
// {
|
|
1512
|
+
// "symbol":"skt_usdt",
|
|
1513
|
+
// "makerCommission":"0.10",
|
|
1514
|
+
// "takerCommission":"0.10"
|
|
1515
|
+
// }
|
|
1516
|
+
//
|
|
1517
|
+
const marketId = this.safeString(fee, 'symbol');
|
|
1518
|
+
const symbol = this.safeSymbol(marketId);
|
|
1519
|
+
return {
|
|
1520
|
+
'info': fee,
|
|
1521
|
+
'symbol': symbol,
|
|
1522
|
+
'maker': this.safeNumber(fee, 'makerCommission'),
|
|
1523
|
+
'taker': this.safeNumber(fee, 'takerCommission'),
|
|
1524
|
+
'percentage': undefined,
|
|
1525
|
+
'tierBased': undefined,
|
|
1526
|
+
};
|
|
1527
|
+
}
|
|
1528
|
+
/**
|
|
1529
|
+
* @method
|
|
1530
|
+
* @name lbank#fetchTradingFee
|
|
1531
|
+
* @description fetch the trading fees for a market
|
|
1532
|
+
* @see https://www.lbank.com/en-US/docs/index.html#transaction-fee-rate-query
|
|
1533
|
+
* @param {string} symbol unified market symbol
|
|
1534
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1535
|
+
* @returns {object} a [fee structure]{@link https://docs.ccxt.com/#/?id=fee-structure}
|
|
1536
|
+
*/
|
|
1537
|
+
async fetchTradingFee(symbol, params = {}) {
|
|
1538
|
+
const market = this.market(symbol);
|
|
1539
|
+
const result = await this.fetchTradingFees(this.extend(params, { 'category': market['id'] }));
|
|
1540
|
+
return this.safeDict(result, symbol);
|
|
1541
|
+
}
|
|
1542
|
+
/**
|
|
1543
|
+
* @method
|
|
1544
|
+
* @name lbank#fetchTradingFees
|
|
1545
|
+
* @description fetch the trading fees for multiple markets
|
|
1546
|
+
* @see https://www.lbank.com/en-US/docs/index.html#transaction-fee-rate-query
|
|
1547
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1548
|
+
* @returns {object} a dictionary of [fee structures]{@link https://docs.ccxt.com/#/?id=fee-structure} indexed by market symbols
|
|
1549
|
+
*/
|
|
1550
|
+
async fetchTradingFees(params = {}) {
|
|
1551
|
+
await this.loadMarkets();
|
|
1552
|
+
const request = {};
|
|
1553
|
+
const response = await this.spotPrivatePostSupplementCustomerTradeFee(this.extend(request, params));
|
|
1554
|
+
const fees = this.safeValue(response, 'data', []);
|
|
1555
|
+
const result = {};
|
|
1556
|
+
for (let i = 0; i < fees.length; i++) {
|
|
1557
|
+
const fee = this.parseTradingFee(fees[i]);
|
|
1558
|
+
const symbol = fee['symbol'];
|
|
1559
|
+
result[symbol] = fee;
|
|
1560
|
+
}
|
|
1561
|
+
return result;
|
|
1562
|
+
}
|
|
1563
|
+
/**
|
|
1564
|
+
* @method
|
|
1565
|
+
* @name lbank#createMarketBuyOrderWithCost
|
|
1566
|
+
* @description create a market buy order by providing the symbol and cost
|
|
1567
|
+
* @see https://www.lbank.com/en-US/docs/index.html#place-order
|
|
1568
|
+
* @see https://www.lbank.com/en-US/docs/index.html#place-an-order
|
|
1569
|
+
* @param {string} symbol unified symbol of the market to create an order in
|
|
1570
|
+
* @param {float} cost how much you want to trade in units of the quote currency
|
|
1571
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1572
|
+
* @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
1573
|
+
*/
|
|
1574
|
+
async createMarketBuyOrderWithCost(symbol, cost, params = {}) {
|
|
1575
|
+
await this.loadMarkets();
|
|
1576
|
+
const market = this.market(symbol);
|
|
1577
|
+
if (!market['spot']) {
|
|
1578
|
+
throw new NotSupported(this.id + ' createMarketBuyOrderWithCost() supports spot orders only');
|
|
1579
|
+
}
|
|
1580
|
+
params['createMarketBuyOrderRequiresPrice'] = false;
|
|
1581
|
+
return await this.createOrder(symbol, 'market', 'buy', cost, undefined, params);
|
|
1582
|
+
}
|
|
1583
|
+
/**
|
|
1584
|
+
* @method
|
|
1585
|
+
* @name lbank#createOrder
|
|
1586
|
+
* @description create a trade order
|
|
1587
|
+
* @see https://www.lbank.com/en-US/docs/index.html#place-order
|
|
1588
|
+
* @see https://www.lbank.com/en-US/docs/index.html#place-an-order
|
|
1589
|
+
* @param {string} symbol unified symbol of the market to create an order in
|
|
1590
|
+
* @param {string} type 'market' or 'limit'
|
|
1591
|
+
* @param {string} side 'buy' or 'sell'
|
|
1592
|
+
* @param {float} amount how much of currency you want to trade in units of base currency
|
|
1593
|
+
* @param {float} [price] the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
|
|
1594
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1595
|
+
* @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
1596
|
+
*/
|
|
1597
|
+
async createOrder(symbol, type, side, amount, price = undefined, params = {}) {
|
|
1598
|
+
await this.loadMarkets();
|
|
1599
|
+
const market = this.market(symbol);
|
|
1600
|
+
const clientOrderId = this.safeString2(params, 'custom_id', 'clientOrderId');
|
|
1601
|
+
const postOnly = this.safeBool(params, 'postOnly', false);
|
|
1602
|
+
const timeInForce = this.safeStringUpper(params, 'timeInForce');
|
|
1603
|
+
params = this.omit(params, ['custom_id', 'clientOrderId', 'timeInForce', 'postOnly']);
|
|
1604
|
+
const request = {
|
|
1605
|
+
'symbol': market['id'],
|
|
1606
|
+
};
|
|
1607
|
+
const ioc = (timeInForce === 'IOC');
|
|
1608
|
+
const fok = (timeInForce === 'FOK');
|
|
1609
|
+
const maker = (postOnly || (timeInForce === 'PO'));
|
|
1610
|
+
if ((type === 'market') && (ioc || fok || maker)) {
|
|
1611
|
+
throw new InvalidOrder(this.id + ' createOrder () does not allow market FOK, IOC, or postOnly orders. Only limit IOC, FOK, and postOnly orders are allowed');
|
|
1612
|
+
}
|
|
1613
|
+
if (type === 'limit') {
|
|
1614
|
+
request['type'] = side;
|
|
1615
|
+
request['price'] = this.priceToPrecision(symbol, price);
|
|
1616
|
+
request['amount'] = this.amountToPrecision(symbol, amount);
|
|
1617
|
+
if (ioc) {
|
|
1618
|
+
request['type'] = side + '_' + 'ioc';
|
|
1619
|
+
}
|
|
1620
|
+
else if (fok) {
|
|
1621
|
+
request['type'] = side + '_' + 'fok';
|
|
1622
|
+
}
|
|
1623
|
+
else if (maker) {
|
|
1624
|
+
request['type'] = side + '_' + 'maker';
|
|
1625
|
+
}
|
|
1626
|
+
}
|
|
1627
|
+
else if (type === 'market') {
|
|
1628
|
+
if (side === 'sell') {
|
|
1629
|
+
request['type'] = side + '_' + 'market';
|
|
1630
|
+
request['amount'] = this.amountToPrecision(symbol, amount);
|
|
1631
|
+
}
|
|
1632
|
+
else if (side === 'buy') {
|
|
1633
|
+
request['type'] = side + '_' + 'market';
|
|
1634
|
+
let quoteAmount = undefined;
|
|
1635
|
+
let createMarketBuyOrderRequiresPrice = true;
|
|
1636
|
+
[createMarketBuyOrderRequiresPrice, params] = this.handleOptionAndParams(params, 'createOrder', 'createMarketBuyOrderRequiresPrice', true);
|
|
1637
|
+
const cost = this.safeNumber(params, 'cost');
|
|
1638
|
+
params = this.omit(params, 'cost');
|
|
1639
|
+
if (cost !== undefined) {
|
|
1640
|
+
quoteAmount = this.costToPrecision(symbol, cost);
|
|
1641
|
+
}
|
|
1642
|
+
else if (createMarketBuyOrderRequiresPrice) {
|
|
1643
|
+
if (price === undefined) {
|
|
1644
|
+
throw new InvalidOrder(this.id + ' createOrder() requires the price argument for market buy orders to calculate the total cost to spend (amount * price), alternatively set the createMarketBuyOrderRequiresPrice option or param to false and pass the cost to spend in the amount argument');
|
|
1645
|
+
}
|
|
1646
|
+
else {
|
|
1647
|
+
const amountString = this.numberToString(amount);
|
|
1648
|
+
const priceString = this.numberToString(price);
|
|
1649
|
+
const costRequest = Precise.stringMul(amountString, priceString);
|
|
1650
|
+
quoteAmount = this.costToPrecision(symbol, costRequest);
|
|
1651
|
+
}
|
|
1652
|
+
}
|
|
1653
|
+
else {
|
|
1654
|
+
quoteAmount = this.costToPrecision(symbol, amount);
|
|
1655
|
+
}
|
|
1656
|
+
// market buys require filling the price param instead of the amount param, for market buys the price is treated as the cost by lbank
|
|
1657
|
+
request['price'] = quoteAmount;
|
|
1658
|
+
}
|
|
1659
|
+
}
|
|
1660
|
+
if (clientOrderId !== undefined) {
|
|
1661
|
+
request['custom_id'] = clientOrderId;
|
|
1662
|
+
}
|
|
1663
|
+
const options = this.safeValue(this.options, 'createOrder', {});
|
|
1664
|
+
const defaultMethod = this.safeString(options, 'method', 'spotPrivatePostSupplementCreateOrder');
|
|
1665
|
+
const method = this.safeString(params, 'method', defaultMethod);
|
|
1666
|
+
params = this.omit(params, 'method');
|
|
1667
|
+
let response = undefined;
|
|
1668
|
+
if (method === 'spotPrivatePostCreateOrder') {
|
|
1669
|
+
response = await this.spotPrivatePostCreateOrder(this.extend(request, params));
|
|
1670
|
+
}
|
|
1671
|
+
else {
|
|
1672
|
+
response = await this.spotPrivatePostSupplementCreateOrder(this.extend(request, params));
|
|
1673
|
+
}
|
|
1674
|
+
//
|
|
1675
|
+
// {
|
|
1676
|
+
// "result":true,
|
|
1677
|
+
// "data":{
|
|
1678
|
+
// "symbol":"doge_usdt",
|
|
1679
|
+
// "order_id":"0cf8a3de-4597-4296-af45-be7abaa06b07"
|
|
1680
|
+
// },
|
|
1681
|
+
// "error_code":0,
|
|
1682
|
+
// "ts":1648162321043
|
|
1683
|
+
// }
|
|
1684
|
+
//
|
|
1685
|
+
const result = this.safeValue(response, 'data', {});
|
|
1686
|
+
return this.safeOrder({
|
|
1687
|
+
'id': this.safeString(result, 'order_id'),
|
|
1688
|
+
'info': result,
|
|
1689
|
+
}, market);
|
|
1690
|
+
}
|
|
1691
|
+
parseOrderStatus(status) {
|
|
1692
|
+
const statuses = {
|
|
1693
|
+
'-1': 'canceled',
|
|
1694
|
+
'0': 'open',
|
|
1695
|
+
'1': 'open',
|
|
1696
|
+
'2': 'closed',
|
|
1697
|
+
'3': 'canceled',
|
|
1698
|
+
'4': 'closed', // disposal processing
|
|
1699
|
+
};
|
|
1700
|
+
return this.safeString(statuses, status, status);
|
|
1701
|
+
}
|
|
1702
|
+
parseOrder(order, market = undefined) {
|
|
1703
|
+
//
|
|
1704
|
+
// fetchOrderSupplement (private)
|
|
1705
|
+
//
|
|
1706
|
+
// {
|
|
1707
|
+
// "cummulativeQuoteQty":0,
|
|
1708
|
+
// "symbol":"doge_usdt",
|
|
1709
|
+
// "executedQty":0,
|
|
1710
|
+
// "orderId":"53d2d53e-70fb-4398-b722-f48571a5f61e",
|
|
1711
|
+
// "origQty":1E+2,
|
|
1712
|
+
// "price":0.05,
|
|
1713
|
+
// "clientOrderId":null,
|
|
1714
|
+
// "origQuoteOrderQty":5,
|
|
1715
|
+
// "updateTime":1648163406000,
|
|
1716
|
+
// "time":1648163139387,
|
|
1717
|
+
// "type":"buy_maker",
|
|
1718
|
+
// "status":-1
|
|
1719
|
+
// }
|
|
1720
|
+
//
|
|
1721
|
+
//
|
|
1722
|
+
// fetchOrderDefault (private)
|
|
1723
|
+
//
|
|
1724
|
+
// {
|
|
1725
|
+
// "symbol":"shib_usdt",
|
|
1726
|
+
// "amount":1,
|
|
1727
|
+
// "create_time":1649367863356,
|
|
1728
|
+
// "price":0.0000246103,
|
|
1729
|
+
// "avg_price":0.00002466180000000104,
|
|
1730
|
+
// "type":"buy_market",
|
|
1731
|
+
// "order_id":"abe8b92d-86d9-4d6d-b71e-d14f5fb53ddf",
|
|
1732
|
+
// "custom_id": "007", // field only present if user creates it at order time
|
|
1733
|
+
// "deal_amount":40548.54065802,
|
|
1734
|
+
// "status":2
|
|
1735
|
+
// }
|
|
1736
|
+
//
|
|
1737
|
+
// fetchOpenOrders (private)
|
|
1738
|
+
//
|
|
1739
|
+
// {
|
|
1740
|
+
// "cummulativeQuoteQty":0,
|
|
1741
|
+
// "symbol":"doge_usdt",
|
|
1742
|
+
// "executedQty":0,
|
|
1743
|
+
// "orderId":"73878edf-008d-4e4c-8041-df1f1b2cd8bb",
|
|
1744
|
+
// "origQty":100,
|
|
1745
|
+
// "price":0.05,
|
|
1746
|
+
// "origQuoteOrderQty":5,
|
|
1747
|
+
// "updateTime":1648501762000,
|
|
1748
|
+
// "time":1648501762353,
|
|
1749
|
+
// "type":"buy",
|
|
1750
|
+
// "status":0
|
|
1751
|
+
// }
|
|
1752
|
+
//
|
|
1753
|
+
// fetchOrders (private)
|
|
1754
|
+
//
|
|
1755
|
+
// {
|
|
1756
|
+
// "cummulativeQuoteQty":0,
|
|
1757
|
+
// "symbol":"doge_usdt",
|
|
1758
|
+
// "executedQty":0,
|
|
1759
|
+
// "orderId":"2cadc7cc-b5f6-486b-a5b4-d6ac49a9c186",
|
|
1760
|
+
// "origQty":100,
|
|
1761
|
+
// "price":0.05,
|
|
1762
|
+
// "origQuoteOrderQty":5,
|
|
1763
|
+
// "updateTime":1648501384000,
|
|
1764
|
+
// "time":1648501363889,
|
|
1765
|
+
// "type":"buy",
|
|
1766
|
+
// "status":-1
|
|
1767
|
+
// }
|
|
1768
|
+
//
|
|
1769
|
+
// cancelOrder
|
|
1770
|
+
//
|
|
1771
|
+
// {
|
|
1772
|
+
// "executedQty":0.0,
|
|
1773
|
+
// "price":0.05,
|
|
1774
|
+
// "origQty":100.0,
|
|
1775
|
+
// "tradeType":"buy",
|
|
1776
|
+
// "status":0
|
|
1777
|
+
// }
|
|
1778
|
+
//
|
|
1779
|
+
// cancelAllOrders
|
|
1780
|
+
//
|
|
1781
|
+
// {
|
|
1782
|
+
// "executedQty":0.00000000000000000000,
|
|
1783
|
+
// "orderId":"293ef71b-3e67-4962-af93-aa06990a045f",
|
|
1784
|
+
// "price":0.05000000000000000000,
|
|
1785
|
+
// "origQty":100.00000000000000000000,
|
|
1786
|
+
// "tradeType":"buy",
|
|
1787
|
+
// "status":0
|
|
1788
|
+
// }
|
|
1789
|
+
//
|
|
1790
|
+
const id = this.safeString2(order, 'orderId', 'order_id');
|
|
1791
|
+
const clientOrderId = this.safeString2(order, 'clientOrderId', 'custom_id');
|
|
1792
|
+
const timestamp = this.safeInteger2(order, 'time', 'create_time');
|
|
1793
|
+
const rawStatus = this.safeString(order, 'status');
|
|
1794
|
+
const marketId = this.safeString(order, 'symbol');
|
|
1795
|
+
market = this.safeMarket(marketId, market);
|
|
1796
|
+
let timeInForce = undefined;
|
|
1797
|
+
let postOnly = false;
|
|
1798
|
+
let type = 'limit';
|
|
1799
|
+
const rawType = this.safeString2(order, 'type', 'tradeType'); // buy, sell, buy_market, sell_market, buy_maker,sell_maker,buy_ioc,sell_ioc, buy_fok, sell_fok
|
|
1800
|
+
const parts = rawType.split('_');
|
|
1801
|
+
const side = this.safeString(parts, 0);
|
|
1802
|
+
const typePart = this.safeString(parts, 1); // market, maker, ioc, fok or undefined (limit)
|
|
1803
|
+
if (typePart === 'market') {
|
|
1804
|
+
type = 'market';
|
|
1805
|
+
}
|
|
1806
|
+
if (typePart === 'maker') {
|
|
1807
|
+
postOnly = true;
|
|
1808
|
+
timeInForce = 'PO';
|
|
1809
|
+
}
|
|
1810
|
+
if (typePart === 'ioc') {
|
|
1811
|
+
timeInForce = 'IOC';
|
|
1812
|
+
}
|
|
1813
|
+
if (typePart === 'fok') {
|
|
1814
|
+
timeInForce = 'FOK';
|
|
1815
|
+
}
|
|
1816
|
+
const price = this.safeString(order, 'price');
|
|
1817
|
+
const costString = this.safeString(order, 'cummulativeQuoteQty');
|
|
1818
|
+
let amountString = undefined;
|
|
1819
|
+
if (rawType !== 'buy_market') {
|
|
1820
|
+
amountString = this.safeString2(order, 'origQty', 'amount');
|
|
1821
|
+
}
|
|
1822
|
+
const filledString = this.safeString2(order, 'executedQty', 'deal_amount');
|
|
1823
|
+
return this.safeOrder({
|
|
1824
|
+
'id': id,
|
|
1825
|
+
'clientOrderId': clientOrderId,
|
|
1826
|
+
'datetime': this.iso8601(timestamp),
|
|
1827
|
+
'timestamp': timestamp,
|
|
1828
|
+
'lastTradeTimestamp': undefined,
|
|
1829
|
+
'status': this.parseOrderStatus(rawStatus),
|
|
1830
|
+
'symbol': market['symbol'],
|
|
1831
|
+
'type': type,
|
|
1832
|
+
'timeInForce': timeInForce,
|
|
1833
|
+
'postOnly': postOnly,
|
|
1834
|
+
'side': side,
|
|
1835
|
+
'price': price,
|
|
1836
|
+
'triggerPrice': undefined,
|
|
1837
|
+
'cost': costString,
|
|
1838
|
+
'amount': amountString,
|
|
1839
|
+
'filled': filledString,
|
|
1840
|
+
'remaining': undefined,
|
|
1841
|
+
'trades': undefined,
|
|
1842
|
+
'fee': undefined,
|
|
1843
|
+
'info': order,
|
|
1844
|
+
'average': undefined,
|
|
1845
|
+
}, market);
|
|
1846
|
+
}
|
|
1847
|
+
/**
|
|
1848
|
+
* @method
|
|
1849
|
+
* @name lbank#fetchOrder
|
|
1850
|
+
* @description fetches information on an order made by the user
|
|
1851
|
+
* @see https://www.lbank.com/en-US/docs/index.html#query-order
|
|
1852
|
+
* @see https://www.lbank.com/en-US/docs/index.html#query-order-new
|
|
1853
|
+
* @param {string} id order id
|
|
1854
|
+
* @param {string} symbol unified symbol of the market the order was made in
|
|
1855
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1856
|
+
* @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
1857
|
+
*/
|
|
1858
|
+
async fetchOrder(id, symbol = undefined, params = {}) {
|
|
1859
|
+
await this.loadMarkets();
|
|
1860
|
+
let method = this.safeString(params, 'method');
|
|
1861
|
+
if (method === undefined) {
|
|
1862
|
+
const options = this.safeValue(this.options, 'fetchOrder', {});
|
|
1863
|
+
method = this.safeString(options, 'method', 'fetchOrderSupplement');
|
|
1864
|
+
}
|
|
1865
|
+
if (method === 'fetchOrderSupplement') {
|
|
1866
|
+
return await this.fetchOrderSupplement(id, symbol, params);
|
|
1867
|
+
}
|
|
1868
|
+
return await this.fetchOrderDefault(id, symbol, params);
|
|
1869
|
+
}
|
|
1870
|
+
async fetchOrderSupplement(id, symbol = undefined, params = {}) {
|
|
1871
|
+
if (symbol === undefined) {
|
|
1872
|
+
throw new ArgumentsRequired(this.id + ' fetchOrder() requires a symbol argument');
|
|
1873
|
+
}
|
|
1874
|
+
await this.loadMarkets();
|
|
1875
|
+
const market = this.market(symbol);
|
|
1876
|
+
const request = {
|
|
1877
|
+
'symbol': market['id'],
|
|
1878
|
+
'orderId': id,
|
|
1879
|
+
};
|
|
1880
|
+
const response = await this.spotPrivatePostSupplementOrdersInfo(this.extend(request, params));
|
|
1881
|
+
//
|
|
1882
|
+
// {
|
|
1883
|
+
// "result":true,
|
|
1884
|
+
// "data":{
|
|
1885
|
+
// "cummulativeQuoteQty":0,
|
|
1886
|
+
// "symbol":"doge_usdt",
|
|
1887
|
+
// "executedQty":0,
|
|
1888
|
+
// "orderId":"53d2d53e-70fb-4398-b722-f48571a5f61e",
|
|
1889
|
+
// "origQty":1E+2,
|
|
1890
|
+
// "price":0.05,
|
|
1891
|
+
// "clientOrderId":null,
|
|
1892
|
+
// "origQuoteOrderQty":5,
|
|
1893
|
+
// "updateTime":1648163406000,
|
|
1894
|
+
// "time":1648163139387,
|
|
1895
|
+
// "type":"buy_maker",
|
|
1896
|
+
// "status":-1
|
|
1897
|
+
// },
|
|
1898
|
+
// "error_code":0,
|
|
1899
|
+
// "ts":1648164471827
|
|
1900
|
+
// }
|
|
1901
|
+
//
|
|
1902
|
+
const result = this.safeDict(response, 'data', {});
|
|
1903
|
+
return this.parseOrder(result);
|
|
1904
|
+
}
|
|
1905
|
+
async fetchOrderDefault(id, symbol = undefined, params = {}) {
|
|
1906
|
+
// Id can be a list of ids delimited by a comma
|
|
1907
|
+
if (symbol === undefined) {
|
|
1908
|
+
throw new ArgumentsRequired(this.id + ' fetchOrder() requires a symbol argument');
|
|
1909
|
+
}
|
|
1910
|
+
await this.loadMarkets();
|
|
1911
|
+
const market = this.market(symbol);
|
|
1912
|
+
const request = {
|
|
1913
|
+
'symbol': market['id'],
|
|
1914
|
+
'order_id': id,
|
|
1915
|
+
};
|
|
1916
|
+
const response = await this.spotPrivatePostOrdersInfo(this.extend(request, params));
|
|
1917
|
+
//
|
|
1918
|
+
// {
|
|
1919
|
+
// "result":true,
|
|
1920
|
+
// "data":[
|
|
1921
|
+
// {
|
|
1922
|
+
// "symbol":"doge_usdt",
|
|
1923
|
+
// "amount":18,
|
|
1924
|
+
// "create_time":1647455223186,
|
|
1925
|
+
// "price":0,
|
|
1926
|
+
// "avg_price":0.113344,
|
|
1927
|
+
// "type":"sell_market",
|
|
1928
|
+
// "order_id":"d4ca1ddd-40d9-42c1-9717-5de435865bec",
|
|
1929
|
+
// "deal_amount":18,
|
|
1930
|
+
// "status":2
|
|
1931
|
+
// }
|
|
1932
|
+
// ],
|
|
1933
|
+
// "error_code":0,
|
|
1934
|
+
// "ts":1647455270776
|
|
1935
|
+
// }
|
|
1936
|
+
//
|
|
1937
|
+
const result = this.safeValue(response, 'data', []);
|
|
1938
|
+
const numOrders = result.length;
|
|
1939
|
+
if (numOrders === 1) {
|
|
1940
|
+
return this.parseOrder(result[0]);
|
|
1941
|
+
}
|
|
1942
|
+
else {
|
|
1943
|
+
// const parsedOrders = [];
|
|
1944
|
+
// for (let i = 0; i < numOrders; i++) {
|
|
1945
|
+
// const parsedOrder = this.parseOrder (result[i]);
|
|
1946
|
+
// parsedOrders.push (parsedOrder);
|
|
1947
|
+
// }
|
|
1948
|
+
// return parsedOrders;
|
|
1949
|
+
throw new BadRequest(this.id + ' fetchOrder() can only fetch one order at a time');
|
|
1950
|
+
}
|
|
1951
|
+
}
|
|
1952
|
+
/**
|
|
1953
|
+
* @method
|
|
1954
|
+
* @name lbank#fetchMyTrades
|
|
1955
|
+
* @description fetch all trades made by the user
|
|
1956
|
+
* @see https://www.lbank.com/en-US/docs/index.html#past-transaction-details
|
|
1957
|
+
* @param {string} symbol unified market symbol
|
|
1958
|
+
* @param {int} [since] the earliest time in ms to fetch trades for
|
|
1959
|
+
* @param {int} [limit] the maximum number of trade structures to retrieve
|
|
1960
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1961
|
+
* @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}
|
|
1962
|
+
*/
|
|
1963
|
+
async fetchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
1964
|
+
if (symbol === undefined) {
|
|
1965
|
+
throw new ArgumentsRequired(this.id + ' fetchMyTrades() requires a symbol argument');
|
|
1966
|
+
}
|
|
1967
|
+
await this.loadMarkets();
|
|
1968
|
+
const market = this.market(symbol);
|
|
1969
|
+
since = this.safeValue(params, 'start_date', since);
|
|
1970
|
+
params = this.omit(params, 'start_date');
|
|
1971
|
+
const request = {
|
|
1972
|
+
'symbol': market['id'],
|
|
1973
|
+
// 'start_date' Start time yyyy-mm-dd, the maximum is today, the default is yesterday
|
|
1974
|
+
// 'end_date' Finish time yyyy-mm-dd, the maximum is today, the default is today
|
|
1975
|
+
// 'The start': and end date of the query window is up to 2 days
|
|
1976
|
+
// 'from' Initial transaction number inquiring
|
|
1977
|
+
// 'direct' inquire direction,The default is the 'next' which is the positive sequence of dealing time,the 'prev' is inverted order of dealing time
|
|
1978
|
+
// 'size' Query the number of defaults to 100
|
|
1979
|
+
};
|
|
1980
|
+
if (limit !== undefined) {
|
|
1981
|
+
request['size'] = limit;
|
|
1982
|
+
}
|
|
1983
|
+
if (since !== undefined) {
|
|
1984
|
+
request['start_date'] = this.ymd(since, '-'); // max query 2 days ago
|
|
1985
|
+
request['end_date'] = this.ymd(since + 86400000, '-'); // will cover 2 days
|
|
1986
|
+
}
|
|
1987
|
+
const response = await this.spotPrivatePostTransactionHistory(this.extend(request, params));
|
|
1988
|
+
//
|
|
1989
|
+
// {
|
|
1990
|
+
// "result":true,
|
|
1991
|
+
// "data":[
|
|
1992
|
+
// {
|
|
1993
|
+
// "orderUuid":"38b4e7a4-14f6-45fd-aba1-1a37024124a0",
|
|
1994
|
+
// "tradeFeeRate":0.0010000000,
|
|
1995
|
+
// "dealTime":1648500944496,
|
|
1996
|
+
// "dealQuantity":30.00000000000000000000,
|
|
1997
|
+
// "tradeFee":0.00453300000000000000,
|
|
1998
|
+
// "txUuid":"11f3850cc6214ea3b495adad3a032794",
|
|
1999
|
+
// "dealPrice":0.15111300000000000000,
|
|
2000
|
+
// "dealVolumePrice":4.53339000000000000000,
|
|
2001
|
+
// "tradeType":"sell_market"
|
|
2002
|
+
// }
|
|
2003
|
+
// ],
|
|
2004
|
+
// "error_code":0,
|
|
2005
|
+
// "ts":1648509742164
|
|
2006
|
+
// }
|
|
2007
|
+
//
|
|
2008
|
+
const trades = this.safeList(response, 'data', []);
|
|
2009
|
+
return this.parseTrades(trades, market, since, limit);
|
|
2010
|
+
}
|
|
2011
|
+
/**
|
|
2012
|
+
* @method
|
|
2013
|
+
* @name lbank#fetchOrders
|
|
2014
|
+
* @description fetches information on multiple orders made by the user
|
|
2015
|
+
* @see https://www.lbank.com/en-US/docs/index.html#query-all-orders
|
|
2016
|
+
* @param {string} symbol unified market symbol of the market orders were made in
|
|
2017
|
+
* @param {int} [since] the earliest time in ms to fetch orders for
|
|
2018
|
+
* @param {int} [limit] the maximum number of order structures to retrieve
|
|
2019
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
2020
|
+
* @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
2021
|
+
*/
|
|
2022
|
+
async fetchOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
2023
|
+
// default query is for canceled and completely filled orders
|
|
2024
|
+
// does not return open orders unless specified explicitly
|
|
2025
|
+
if (symbol === undefined) {
|
|
2026
|
+
throw new ArgumentsRequired(this.id + ' fetchOrders() requires a symbol argument');
|
|
2027
|
+
}
|
|
2028
|
+
await this.loadMarkets();
|
|
2029
|
+
const market = this.market(symbol);
|
|
2030
|
+
if (limit === undefined) {
|
|
2031
|
+
limit = 100;
|
|
2032
|
+
}
|
|
2033
|
+
const request = {
|
|
2034
|
+
'symbol': market['id'],
|
|
2035
|
+
'current_page': 1,
|
|
2036
|
+
'page_length': limit,
|
|
2037
|
+
// 'status' -1: Cancelled, 0: Unfilled, 1: Partially filled, 2: Completely filled, 3: Partially filled and cancelled, 4: Cancellation is being processed
|
|
2038
|
+
};
|
|
2039
|
+
const response = await this.spotPrivatePostSupplementOrdersInfoHistory(this.extend(request, params));
|
|
2040
|
+
//
|
|
2041
|
+
// {
|
|
2042
|
+
// "result":true,
|
|
2043
|
+
// "data":{
|
|
2044
|
+
// "total":1,
|
|
2045
|
+
// "page_length":100,
|
|
2046
|
+
// "orders":[
|
|
2047
|
+
// {
|
|
2048
|
+
// "cummulativeQuoteQty":0,
|
|
2049
|
+
// "symbol":"doge_usdt",
|
|
2050
|
+
// "executedQty":0,
|
|
2051
|
+
// "orderId":"2cadc7cc-b5f6-486b-a5b4-d6ac49a9c186",
|
|
2052
|
+
// "origQty":100,
|
|
2053
|
+
// "price":0.05,
|
|
2054
|
+
// "origQuoteOrderQty":5,
|
|
2055
|
+
// "updateTime":1648501384000,
|
|
2056
|
+
// "time":1648501363889,
|
|
2057
|
+
// "type":"buy",
|
|
2058
|
+
// "status":-1
|
|
2059
|
+
// }, ...
|
|
2060
|
+
// ],
|
|
2061
|
+
// "current_page":1
|
|
2062
|
+
// },
|
|
2063
|
+
// "error_code":0,
|
|
2064
|
+
// "ts":1648505706348
|
|
2065
|
+
// }
|
|
2066
|
+
//
|
|
2067
|
+
const result = this.safeValue(response, 'data', {});
|
|
2068
|
+
const orders = this.safeList(result, 'orders', []);
|
|
2069
|
+
return this.parseOrders(orders, market, since, limit);
|
|
2070
|
+
}
|
|
2071
|
+
/**
|
|
2072
|
+
* @method
|
|
2073
|
+
* @name lbank#fetchOpenOrders
|
|
2074
|
+
* @description fetch all unfilled currently open orders
|
|
2075
|
+
* @see https://www.lbank.com/en-US/docs/index.html#current-pending-order
|
|
2076
|
+
* @param {string} symbol unified market symbol
|
|
2077
|
+
* @param {int} [since] the earliest time in ms to fetch open orders for
|
|
2078
|
+
* @param {int} [limit] the maximum number of open order structures to retrieve
|
|
2079
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
2080
|
+
* @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
2081
|
+
*/
|
|
2082
|
+
async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
2083
|
+
if (symbol === undefined) {
|
|
2084
|
+
throw new ArgumentsRequired(this.id + ' fetchOpenOrders() requires a symbol argument');
|
|
2085
|
+
}
|
|
2086
|
+
await this.loadMarkets();
|
|
2087
|
+
const market = this.market(symbol);
|
|
2088
|
+
if (limit === undefined) {
|
|
2089
|
+
limit = 100;
|
|
2090
|
+
}
|
|
2091
|
+
const request = {
|
|
2092
|
+
'symbol': market['id'],
|
|
2093
|
+
'current_page': 1,
|
|
2094
|
+
'page_length': limit,
|
|
2095
|
+
};
|
|
2096
|
+
const response = await this.spotPrivatePostSupplementOrdersInfoNoDeal(this.extend(request, params));
|
|
2097
|
+
//
|
|
2098
|
+
// {
|
|
2099
|
+
// "result":true,
|
|
2100
|
+
// "data":{
|
|
2101
|
+
// "total":1,
|
|
2102
|
+
// "page_length":100,
|
|
2103
|
+
// "orders":[
|
|
2104
|
+
// {
|
|
2105
|
+
// "cummulativeQuoteQty":0,
|
|
2106
|
+
// "symbol":"doge_usdt",
|
|
2107
|
+
// "executedQty":0,
|
|
2108
|
+
// "orderId":"73878edf-008d-4e4c-8041-df1f1b2cd8bb",
|
|
2109
|
+
// "origQty":100,
|
|
2110
|
+
// "price":0.05,
|
|
2111
|
+
// "origQuoteOrderQty":5,
|
|
2112
|
+
// "updateTime":1648501762000,
|
|
2113
|
+
// "time":1648501762353,
|
|
2114
|
+
// "type":"buy",
|
|
2115
|
+
// "status":0
|
|
2116
|
+
// }, ...
|
|
2117
|
+
// ],
|
|
2118
|
+
// "current_page":1
|
|
2119
|
+
// },
|
|
2120
|
+
// "error_code":0,
|
|
2121
|
+
// "ts":1648506110196
|
|
2122
|
+
// }
|
|
2123
|
+
//
|
|
2124
|
+
const result = this.safeValue(response, 'data', {});
|
|
2125
|
+
const orders = this.safeList(result, 'orders', []);
|
|
2126
|
+
return this.parseOrders(orders, market, since, limit);
|
|
2127
|
+
}
|
|
2128
|
+
/**
|
|
2129
|
+
* @method
|
|
2130
|
+
* @name lbank#cancelOrder
|
|
2131
|
+
* @description cancels an open order
|
|
2132
|
+
* @see https://www.lbank.com/en-US/docs/index.html#cancel-order-new
|
|
2133
|
+
* @param {string} id order id
|
|
2134
|
+
* @param {string} symbol unified symbol of the market the order was made in
|
|
2135
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
2136
|
+
* @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
2137
|
+
*/
|
|
2138
|
+
async cancelOrder(id, symbol = undefined, params = {}) {
|
|
2139
|
+
if (symbol === undefined) {
|
|
2140
|
+
throw new ArgumentsRequired(this.id + ' cancelOrder() requires a symbol argument');
|
|
2141
|
+
}
|
|
2142
|
+
await this.loadMarkets();
|
|
2143
|
+
const clientOrderId = this.safeString2(params, 'origClientOrderId', 'clientOrderId');
|
|
2144
|
+
params = this.omit(params, ['origClientOrderId', 'clientOrderId']);
|
|
2145
|
+
const market = this.market(symbol);
|
|
2146
|
+
const request = {
|
|
2147
|
+
'symbol': market['id'],
|
|
2148
|
+
'orderId': id,
|
|
2149
|
+
};
|
|
2150
|
+
if (clientOrderId !== undefined) {
|
|
2151
|
+
request['origClientOrderId'] = clientOrderId;
|
|
2152
|
+
}
|
|
2153
|
+
const response = await this.spotPrivatePostSupplementCancelOrder(this.extend(request, params));
|
|
2154
|
+
//
|
|
2155
|
+
// {
|
|
2156
|
+
// "result":true,
|
|
2157
|
+
// "data":{
|
|
2158
|
+
// "executedQty":0.0,
|
|
2159
|
+
// "price":0.05,
|
|
2160
|
+
// "origQty":100.0,
|
|
2161
|
+
// "tradeType":"buy",
|
|
2162
|
+
// "status":0
|
|
2163
|
+
// },
|
|
2164
|
+
// "error_code":0,
|
|
2165
|
+
// "ts":1648501286196
|
|
2166
|
+
// }
|
|
2167
|
+
const data = this.safeDict(response, 'data', {});
|
|
2168
|
+
return this.parseOrder(data);
|
|
2169
|
+
}
|
|
2170
|
+
/**
|
|
2171
|
+
* @method
|
|
2172
|
+
* @name lbank#cancelAllOrders
|
|
2173
|
+
* @description cancel all open orders in a market
|
|
2174
|
+
* @see https://www.lbank.com/en-US/docs/index.html#cancel-all-pending-orders-for-a-single-trading-pair
|
|
2175
|
+
* @param {string} symbol unified market symbol of the market to cancel orders in
|
|
2176
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
2177
|
+
* @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
2178
|
+
*/
|
|
2179
|
+
async cancelAllOrders(symbol = undefined, params = {}) {
|
|
2180
|
+
if (symbol === undefined) {
|
|
2181
|
+
throw new ArgumentsRequired(this.id + ' cancelAllOrders() requires a symbol argument');
|
|
2182
|
+
}
|
|
2183
|
+
await this.loadMarkets();
|
|
2184
|
+
const market = this.market(symbol);
|
|
2185
|
+
const request = {
|
|
2186
|
+
'symbol': market['id'],
|
|
2187
|
+
};
|
|
2188
|
+
const response = await this.spotPrivatePostSupplementCancelOrderBySymbol(this.extend(request, params));
|
|
2189
|
+
//
|
|
2190
|
+
// {
|
|
2191
|
+
// "result":"true",
|
|
2192
|
+
// "data":[
|
|
2193
|
+
// {
|
|
2194
|
+
// "executedQty":0.00000000000000000000,
|
|
2195
|
+
// "orderId":"293ef71b-3e67-4962-af93-aa06990a045f",
|
|
2196
|
+
// "price":0.05000000000000000000,
|
|
2197
|
+
// "origQty":100.00000000000000000000,
|
|
2198
|
+
// "tradeType":"buy",
|
|
2199
|
+
// "status":0
|
|
2200
|
+
// },
|
|
2201
|
+
// ],
|
|
2202
|
+
// "error_code":0,
|
|
2203
|
+
// "ts":1648506641469
|
|
2204
|
+
// }
|
|
2205
|
+
//
|
|
2206
|
+
const data = this.safeList(response, 'data', []);
|
|
2207
|
+
return this.parseOrders(data);
|
|
2208
|
+
}
|
|
2209
|
+
getNetworkCodeForCurrency(currencyCode, params) {
|
|
2210
|
+
const defaultNetworks = this.safeValue(this.options, 'defaultNetworks');
|
|
2211
|
+
const defaultNetwork = this.safeStringUpper(defaultNetworks, currencyCode);
|
|
2212
|
+
const networks = this.safeValue(this.options, 'networks', {});
|
|
2213
|
+
let network = this.safeStringUpper(params, 'network', defaultNetwork); // this line allows the user to specify either ERC20 or ETH
|
|
2214
|
+
network = this.safeString(networks, network, network); // handle ERC20>ETH alias
|
|
2215
|
+
return network;
|
|
2216
|
+
}
|
|
2217
|
+
/**
|
|
2218
|
+
* @method
|
|
2219
|
+
* @name lbank#fetchDepositAddress
|
|
2220
|
+
* @description fetch the deposit address for a currency associated with this account
|
|
2221
|
+
* @see https://www.lbank.com/en-US/docs/index.html#get-deposit-address
|
|
2222
|
+
* @see https://www.lbank.com/en-US/docs/index.html#the-user-obtains-the-deposit-address
|
|
2223
|
+
* @param {string} code unified currency code
|
|
2224
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
2225
|
+
* @returns {object} an [address structure]{@link https://docs.ccxt.com/#/?id=address-structure}
|
|
2226
|
+
*/
|
|
2227
|
+
async fetchDepositAddress(code, params = {}) {
|
|
2228
|
+
await this.loadMarkets();
|
|
2229
|
+
const options = this.safeValue(this.options, 'fetchDepositAddress', {});
|
|
2230
|
+
const defaultMethod = this.safeString(options, 'method', 'fetchDepositAddressDefault');
|
|
2231
|
+
const method = this.safeString(params, 'method', defaultMethod);
|
|
2232
|
+
params = this.omit(params, 'method');
|
|
2233
|
+
let response = undefined;
|
|
2234
|
+
if (method === 'fetchDepositAddressSupplement') {
|
|
2235
|
+
response = await this.fetchDepositAddressSupplement(code, params);
|
|
2236
|
+
}
|
|
2237
|
+
else {
|
|
2238
|
+
response = await this.fetchDepositAddressDefault(code, params);
|
|
2239
|
+
}
|
|
2240
|
+
return response;
|
|
2241
|
+
}
|
|
2242
|
+
async fetchDepositAddressDefault(code, params = {}) {
|
|
2243
|
+
await this.loadMarkets();
|
|
2244
|
+
const currency = this.currency(code);
|
|
2245
|
+
const request = {
|
|
2246
|
+
'assetCode': currency['id'],
|
|
2247
|
+
};
|
|
2248
|
+
const network = this.getNetworkCodeForCurrency(code, params);
|
|
2249
|
+
if (network !== undefined) {
|
|
2250
|
+
request['netWork'] = network; // ... yes, really lol
|
|
2251
|
+
params = this.omit(params, 'network');
|
|
2252
|
+
}
|
|
2253
|
+
const response = await this.spotPrivatePostGetDepositAddress(this.extend(request, params));
|
|
2254
|
+
//
|
|
2255
|
+
// {
|
|
2256
|
+
// "result":true,
|
|
2257
|
+
// "data":{
|
|
2258
|
+
// "assetCode":"usdt",
|
|
2259
|
+
// "address":"0xc85689d37ca650bf2f2161364cdedee21eb6ca53",
|
|
2260
|
+
// "memo":null,
|
|
2261
|
+
// "netWork":"bep20(bsc)"
|
|
2262
|
+
// },
|
|
2263
|
+
// "error_code":0,
|
|
2264
|
+
// "ts":1648075865103
|
|
2265
|
+
// }
|
|
2266
|
+
//
|
|
2267
|
+
const result = this.safeValue(response, 'data');
|
|
2268
|
+
const address = this.safeString(result, 'address');
|
|
2269
|
+
const tag = this.safeString(result, 'memo');
|
|
2270
|
+
return {
|
|
2271
|
+
'info': response,
|
|
2272
|
+
'currency': code,
|
|
2273
|
+
'network': this.networkIdToCode(this.safeString(result, 'netWork')),
|
|
2274
|
+
'address': address,
|
|
2275
|
+
'tag': tag,
|
|
2276
|
+
};
|
|
2277
|
+
}
|
|
2278
|
+
async fetchDepositAddressSupplement(code, params = {}) {
|
|
2279
|
+
// returns the address for whatever the default network is...
|
|
2280
|
+
await this.loadMarkets();
|
|
2281
|
+
const currency = this.currency(code);
|
|
2282
|
+
const request = {
|
|
2283
|
+
'coin': currency['id'],
|
|
2284
|
+
};
|
|
2285
|
+
const networks = this.safeValue(this.options, 'networks');
|
|
2286
|
+
let network = this.safeStringUpper(params, 'network');
|
|
2287
|
+
network = this.safeString(networks, network, network);
|
|
2288
|
+
if (network !== undefined) {
|
|
2289
|
+
request['networkName'] = network;
|
|
2290
|
+
params = this.omit(params, 'network');
|
|
2291
|
+
}
|
|
2292
|
+
const response = await this.spotPrivatePostSupplementGetDepositAddress(this.extend(request, params));
|
|
2293
|
+
//
|
|
2294
|
+
// {
|
|
2295
|
+
// "result":true,
|
|
2296
|
+
// "data":{
|
|
2297
|
+
// "address":"TDxtabCC8iQwaxUUrPcE4WL2jArGAfvQ5A",
|
|
2298
|
+
// "memo":null,
|
|
2299
|
+
// "coin":"usdt"
|
|
2300
|
+
// },
|
|
2301
|
+
// "error_code":0,
|
|
2302
|
+
// "ts":1648073818880
|
|
2303
|
+
// }
|
|
2304
|
+
//
|
|
2305
|
+
const result = this.safeValue(response, 'data');
|
|
2306
|
+
const address = this.safeString(result, 'address');
|
|
2307
|
+
const tag = this.safeString(result, 'memo');
|
|
2308
|
+
return {
|
|
2309
|
+
'info': response,
|
|
2310
|
+
'currency': code,
|
|
2311
|
+
'network': undefined,
|
|
2312
|
+
'address': address,
|
|
2313
|
+
'tag': tag,
|
|
2314
|
+
};
|
|
2315
|
+
}
|
|
2316
|
+
/**
|
|
2317
|
+
* @method
|
|
2318
|
+
* @name lbank#withdraw
|
|
2319
|
+
* @description make a withdrawal
|
|
2320
|
+
* @see https://www.lbank.com/en-US/docs/index.html#withdrawal
|
|
2321
|
+
* @param {string} code unified currency code
|
|
2322
|
+
* @param {float} amount the amount to withdraw
|
|
2323
|
+
* @param {string} address the address to withdraw to
|
|
2324
|
+
* @param {string} tag
|
|
2325
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
2326
|
+
* @returns {object} a [transaction structure]{@link https://docs.ccxt.com/#/?id=transaction-structure}
|
|
2327
|
+
*/
|
|
2328
|
+
async withdraw(code, amount, address, tag = undefined, params = {}) {
|
|
2329
|
+
[tag, params] = this.handleWithdrawTagAndParams(tag, params);
|
|
2330
|
+
this.checkAddress(address);
|
|
2331
|
+
await this.loadMarkets();
|
|
2332
|
+
const fee = this.safeString(params, 'fee');
|
|
2333
|
+
params = this.omit(params, 'fee');
|
|
2334
|
+
// The relevant coin network fee can be found by calling fetchDepositWithdrawFees (), note: if no network param is supplied then the default network will be used, this can also be found in fetchDepositWithdrawFees ().
|
|
2335
|
+
this.checkRequiredArgument('withdraw', fee, 'fee');
|
|
2336
|
+
const currency = this.currency(code);
|
|
2337
|
+
const request = {
|
|
2338
|
+
'address': address,
|
|
2339
|
+
'coin': currency['id'],
|
|
2340
|
+
'amount': amount,
|
|
2341
|
+
'fee': fee, // the correct coin-network fee must be supplied, which can be found by calling fetchDepositWithdrawFees (private)
|
|
2342
|
+
// 'networkName': defaults to the defaultNetwork of the coin which can be found in the /supplement/user_info endpoint
|
|
2343
|
+
// 'memo': memo: memo word of bts and dct
|
|
2344
|
+
// 'mark': Withdrawal Notes
|
|
2345
|
+
// 'name': Remarks of the address. After filling in this parameter, it will be added to the withdrawal address book of the currency.
|
|
2346
|
+
// 'withdrawOrderId': withdrawOrderId
|
|
2347
|
+
// 'type': type=1 is for intra-site transfer
|
|
2348
|
+
};
|
|
2349
|
+
if (tag !== undefined) {
|
|
2350
|
+
request['memo'] = tag;
|
|
2351
|
+
}
|
|
2352
|
+
const network = this.safeStringUpper2(params, 'network', 'networkName');
|
|
2353
|
+
params = this.omit(params, ['network', 'networkName']);
|
|
2354
|
+
const networks = this.safeValue(this.options, 'networks');
|
|
2355
|
+
const networkId = this.safeString(networks, network, network);
|
|
2356
|
+
if (networkId !== undefined) {
|
|
2357
|
+
request['networkName'] = networkId;
|
|
2358
|
+
}
|
|
2359
|
+
const response = await this.spotPrivatePostSupplementWithdraw(this.extend(request, params));
|
|
2360
|
+
//
|
|
2361
|
+
// {
|
|
2362
|
+
// "result":true,
|
|
2363
|
+
// "data": {
|
|
2364
|
+
// "fee":10.00000000000000000000,
|
|
2365
|
+
// "withdrawId":1900376
|
|
2366
|
+
// },
|
|
2367
|
+
// "error_code":0,
|
|
2368
|
+
// "ts":1648992501414
|
|
2369
|
+
// }
|
|
2370
|
+
//
|
|
2371
|
+
const result = this.safeValue(response, 'data', {});
|
|
2372
|
+
return {
|
|
2373
|
+
'info': result,
|
|
2374
|
+
'id': this.safeString(result, 'withdrawId'),
|
|
2375
|
+
};
|
|
2376
|
+
}
|
|
2377
|
+
parseTransactionStatus(status, type) {
|
|
2378
|
+
const statuses = {
|
|
2379
|
+
'deposit': {
|
|
2380
|
+
'1': 'pending',
|
|
2381
|
+
'2': 'ok',
|
|
2382
|
+
'3': 'failed',
|
|
2383
|
+
'4': 'canceled',
|
|
2384
|
+
'5': 'transfer',
|
|
2385
|
+
},
|
|
2386
|
+
'withdrawal': {
|
|
2387
|
+
'1': 'pending',
|
|
2388
|
+
'2': 'canceled',
|
|
2389
|
+
'3': 'failed',
|
|
2390
|
+
'4': 'ok',
|
|
2391
|
+
},
|
|
2392
|
+
};
|
|
2393
|
+
return this.safeString(this.safeValue(statuses, type, {}), status, status);
|
|
2394
|
+
}
|
|
2395
|
+
parseTransaction(transaction, currency = undefined) {
|
|
2396
|
+
//
|
|
2397
|
+
// fetchDeposits (private)
|
|
2398
|
+
//
|
|
2399
|
+
// {
|
|
2400
|
+
// "insertTime":1649012310000,
|
|
2401
|
+
// "amount":9.00000000000000000000,
|
|
2402
|
+
// "address":"TYASr5UV6HEcXatwdFQfmLVUqQQQMUxHLS",
|
|
2403
|
+
// "networkName":"trc20",
|
|
2404
|
+
// "txId":"081e4e9351dd0274922168da5f2d14ea6c495b1c3b440244f4a6dd9fe196bf2b",
|
|
2405
|
+
// "coin":"usdt",
|
|
2406
|
+
// "status":"2"
|
|
2407
|
+
// }
|
|
2408
|
+
//
|
|
2409
|
+
//
|
|
2410
|
+
// fetchWithdrawals (private)
|
|
2411
|
+
//
|
|
2412
|
+
// {
|
|
2413
|
+
// "amount":2.00000000000000000000,
|
|
2414
|
+
// "address":"TBjrW5JHDyPZjFc5nrRMhRWUDaJmhGhmD6",
|
|
2415
|
+
// "fee":1.00000000000000000000,
|
|
2416
|
+
// "networkName":"trc20",
|
|
2417
|
+
// "coid":"usdt",
|
|
2418
|
+
// "transferType":"数字资产提现",
|
|
2419
|
+
// "txId":"47eeee2763ad49b8817524dacfa7d092fb58f8b0ab7e5d25473314df1a793c3d",
|
|
2420
|
+
// "id":1902194,
|
|
2421
|
+
// "applyTime":1649014002000,
|
|
2422
|
+
// "status":"4"
|
|
2423
|
+
// }
|
|
2424
|
+
//
|
|
2425
|
+
const id = this.safeString(transaction, 'id');
|
|
2426
|
+
let type = undefined;
|
|
2427
|
+
if (id === undefined) {
|
|
2428
|
+
type = 'deposit';
|
|
2429
|
+
}
|
|
2430
|
+
else {
|
|
2431
|
+
type = 'withdrawal';
|
|
2432
|
+
}
|
|
2433
|
+
const txid = this.safeString(transaction, 'txId');
|
|
2434
|
+
const timestamp = this.safeInteger2(transaction, 'insertTime', 'applyTime');
|
|
2435
|
+
const address = this.safeString(transaction, 'address');
|
|
2436
|
+
let addressFrom = undefined;
|
|
2437
|
+
let addressTo = undefined;
|
|
2438
|
+
if (type === 'deposit') {
|
|
2439
|
+
addressFrom = address;
|
|
2440
|
+
}
|
|
2441
|
+
else {
|
|
2442
|
+
addressTo = address;
|
|
2443
|
+
}
|
|
2444
|
+
const amount = this.safeNumber(transaction, 'amount');
|
|
2445
|
+
const currencyId = this.safeString2(transaction, 'coin', 'coid');
|
|
2446
|
+
const code = this.safeCurrencyCode(currencyId, currency);
|
|
2447
|
+
const status = this.parseTransactionStatus(this.safeString(transaction, 'status'), type);
|
|
2448
|
+
let fee = undefined;
|
|
2449
|
+
const feeCost = this.safeNumber(transaction, 'fee');
|
|
2450
|
+
if (feeCost !== undefined) {
|
|
2451
|
+
fee = {
|
|
2452
|
+
'cost': feeCost,
|
|
2453
|
+
'currency': code,
|
|
2454
|
+
};
|
|
2455
|
+
}
|
|
2456
|
+
return {
|
|
2457
|
+
'info': transaction,
|
|
2458
|
+
'id': id,
|
|
2459
|
+
'txid': txid,
|
|
2460
|
+
'timestamp': timestamp,
|
|
2461
|
+
'datetime': this.iso8601(timestamp),
|
|
2462
|
+
'network': this.networkIdToCode(this.safeString(transaction, 'networkName')),
|
|
2463
|
+
'address': address,
|
|
2464
|
+
'addressTo': addressTo,
|
|
2465
|
+
'addressFrom': addressFrom,
|
|
2466
|
+
'tag': undefined,
|
|
2467
|
+
'tagTo': undefined,
|
|
2468
|
+
'tagFrom': undefined,
|
|
2469
|
+
'type': type,
|
|
2470
|
+
'amount': amount,
|
|
2471
|
+
'currency': code,
|
|
2472
|
+
'status': status,
|
|
2473
|
+
'updated': undefined,
|
|
2474
|
+
'comment': undefined,
|
|
2475
|
+
'internal': (status === 'transfer'),
|
|
2476
|
+
'fee': fee,
|
|
2477
|
+
};
|
|
2478
|
+
}
|
|
2479
|
+
/**
|
|
2480
|
+
* @method
|
|
2481
|
+
* @name lbank#fetchDeposits
|
|
2482
|
+
* @description fetch all deposits made to an account
|
|
2483
|
+
* @see https://www.lbank.com/en-US/docs/index.html#get-recharge-history
|
|
2484
|
+
* @param {string} code unified currency code
|
|
2485
|
+
* @param {int} [since] the earliest time in ms to fetch deposits for
|
|
2486
|
+
* @param {int} [limit] the maximum number of deposits structures to retrieve
|
|
2487
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
2488
|
+
* @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}
|
|
2489
|
+
*/
|
|
2490
|
+
async fetchDeposits(code = undefined, since = undefined, limit = undefined, params = {}) {
|
|
2491
|
+
await this.loadMarkets();
|
|
2492
|
+
const request = {
|
|
2493
|
+
// 'status': Recharge status: ("1","Applying"),("2","Recharge successful"),("3","Recharge failed"),("4","Already Cancel"), ("5", "Transfer")
|
|
2494
|
+
// 'endTime': end time, timestamp in milliseconds, default now
|
|
2495
|
+
};
|
|
2496
|
+
let currency = undefined;
|
|
2497
|
+
if (code !== undefined) {
|
|
2498
|
+
currency = this.currency(code);
|
|
2499
|
+
request['coin'] = currency['id'];
|
|
2500
|
+
}
|
|
2501
|
+
if (since !== undefined) {
|
|
2502
|
+
request['startTime'] = since;
|
|
2503
|
+
}
|
|
2504
|
+
const response = await this.spotPrivatePostSupplementDepositHistory(this.extend(request, params));
|
|
2505
|
+
//
|
|
2506
|
+
// {
|
|
2507
|
+
// "result":true,
|
|
2508
|
+
// "data": {
|
|
2509
|
+
// "total":1,
|
|
2510
|
+
// "depositOrders": [
|
|
2511
|
+
// {
|
|
2512
|
+
// "insertTime":1649012310000,
|
|
2513
|
+
// "amount":9.00000000000000000000,
|
|
2514
|
+
// "address":"TYASr5UV6HEcXatwdFQfmLVUqQQQMUxHLS",
|
|
2515
|
+
// "networkName":"trc20",
|
|
2516
|
+
// "txId":"081e4e9351dd0274922168da5f2d14ea6c495b1c3b440244f4a6dd9fe196bf2b",
|
|
2517
|
+
// "coin":"usdt",
|
|
2518
|
+
// "status":"2"
|
|
2519
|
+
// },
|
|
2520
|
+
// ],
|
|
2521
|
+
// "page_length":20,
|
|
2522
|
+
// "current_page":1
|
|
2523
|
+
// },
|
|
2524
|
+
// "error_code":0,
|
|
2525
|
+
// "ts":1649719721758
|
|
2526
|
+
// }
|
|
2527
|
+
//
|
|
2528
|
+
const data = this.safeValue(response, 'data', {});
|
|
2529
|
+
const deposits = this.safeList(data, 'depositOrders', []);
|
|
2530
|
+
return this.parseTransactions(deposits, currency, since, limit);
|
|
2531
|
+
}
|
|
2532
|
+
/**
|
|
2533
|
+
* @method
|
|
2534
|
+
* @name lbank#fetchWithdrawals
|
|
2535
|
+
* @description fetch all withdrawals made from an account
|
|
2536
|
+
* @see https://www.lbank.com/en-US/docs/index.html#get-withdrawal-history
|
|
2537
|
+
* @param {string} code unified currency code
|
|
2538
|
+
* @param {int} [since] the earliest time in ms to fetch withdrawals for
|
|
2539
|
+
* @param {int} [limit] the maximum number of withdrawals structures to retrieve
|
|
2540
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
2541
|
+
* @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}
|
|
2542
|
+
*/
|
|
2543
|
+
async fetchWithdrawals(code = undefined, since = undefined, limit = undefined, params = {}) {
|
|
2544
|
+
await this.loadMarkets();
|
|
2545
|
+
const request = {
|
|
2546
|
+
// 'status': Recharge status: ("1","Applying"),("2","Recharge successful"),("3","Recharge failed"),("4","Already Cancel"), ("5", "Transfer")
|
|
2547
|
+
// 'endTime': end time, timestamp in milliseconds, default now
|
|
2548
|
+
// 'withdrawOrderId': Custom withdrawal id
|
|
2549
|
+
};
|
|
2550
|
+
let currency = undefined;
|
|
2551
|
+
if (code !== undefined) {
|
|
2552
|
+
currency = this.currency(code);
|
|
2553
|
+
request['coin'] = currency['id'];
|
|
2554
|
+
}
|
|
2555
|
+
if (since !== undefined) {
|
|
2556
|
+
request['startTime'] = since;
|
|
2557
|
+
}
|
|
2558
|
+
const response = await this.spotPrivatePostSupplementWithdraws(this.extend(request, params));
|
|
2559
|
+
//
|
|
2560
|
+
// {
|
|
2561
|
+
// "result":true,
|
|
2562
|
+
// "data": {
|
|
2563
|
+
// "total":1,
|
|
2564
|
+
// "withdraws": [
|
|
2565
|
+
// {
|
|
2566
|
+
// "amount":2.00000000000000000000,
|
|
2567
|
+
// "address":"TBjrW5JHDyPZjFc5nrRMhRWUDaJmhGhmD6",
|
|
2568
|
+
// "fee":1.00000000000000000000,
|
|
2569
|
+
// "networkName":"trc20",
|
|
2570
|
+
// "coid":"usdt",
|
|
2571
|
+
// "transferType":"数字资产提现",
|
|
2572
|
+
// "txId":"47eeee2763ad49b8817524dacfa7d092fb58f8b0ab7e5d25473314df1a793c3d",
|
|
2573
|
+
// "id":1902194,
|
|
2574
|
+
// "applyTime":1649014002000,
|
|
2575
|
+
// "status":"4"
|
|
2576
|
+
// },
|
|
2577
|
+
// ],
|
|
2578
|
+
// "page_length":20,
|
|
2579
|
+
// "current_page":1
|
|
2580
|
+
// },
|
|
2581
|
+
// "error_code":0,
|
|
2582
|
+
// "ts":1649720362362
|
|
2583
|
+
// }
|
|
2584
|
+
//
|
|
2585
|
+
const data = this.safeValue(response, 'data', {});
|
|
2586
|
+
const withdraws = this.safeList(data, 'withdraws', []);
|
|
2587
|
+
return this.parseTransactions(withdraws, currency, since, limit);
|
|
2588
|
+
}
|
|
2589
|
+
/**
|
|
2590
|
+
* @method
|
|
2591
|
+
* @name lbank#fetchTransactionFees
|
|
2592
|
+
* @deprecated
|
|
2593
|
+
* @description please use fetchDepositWithdrawFees instead
|
|
2594
|
+
* @param {string[]|undefined} codes not used by lbank fetchTransactionFees ()
|
|
2595
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
2596
|
+
* @returns {object} a list of [fee structures]{@link https://docs.ccxt.com/#/?id=fee-structure}
|
|
2597
|
+
*/
|
|
2598
|
+
async fetchTransactionFees(codes = undefined, params = {}) {
|
|
2599
|
+
// private only returns information for currencies with non-zero balance
|
|
2600
|
+
await this.loadMarkets();
|
|
2601
|
+
const isAuthorized = this.checkRequiredCredentials(false);
|
|
2602
|
+
let result = undefined;
|
|
2603
|
+
if (isAuthorized === true) {
|
|
2604
|
+
const options = this.safeValue(this.options, 'fetchTransactionFees', {});
|
|
2605
|
+
const defaultMethod = this.safeString(options, 'method', 'fetchPrivateTransactionFees');
|
|
2606
|
+
const method = this.safeString(params, 'method', defaultMethod);
|
|
2607
|
+
params = this.omit(params, 'method');
|
|
2608
|
+
if (method === 'fetchPublicTransactionFees') {
|
|
2609
|
+
result = await this.fetchPublicTransactionFees(params);
|
|
2610
|
+
}
|
|
2611
|
+
else {
|
|
2612
|
+
result = await this.fetchPrivateTransactionFees(params);
|
|
2613
|
+
}
|
|
2614
|
+
}
|
|
2615
|
+
else {
|
|
2616
|
+
result = await this.fetchPublicTransactionFees(params);
|
|
2617
|
+
}
|
|
2618
|
+
return result;
|
|
2619
|
+
}
|
|
2620
|
+
async fetchPrivateTransactionFees(params = {}) {
|
|
2621
|
+
// complete response
|
|
2622
|
+
// incl. for coins which undefined in public method
|
|
2623
|
+
await this.loadMarkets();
|
|
2624
|
+
const response = await this.spotPrivatePostSupplementUserInfo();
|
|
2625
|
+
//
|
|
2626
|
+
// {
|
|
2627
|
+
// "result": "true",
|
|
2628
|
+
// "data": [
|
|
2629
|
+
// {
|
|
2630
|
+
// "usableAmt": "14.36",
|
|
2631
|
+
// "assetAmt": "14.36",
|
|
2632
|
+
// "networkList": [
|
|
2633
|
+
// {
|
|
2634
|
+
// "isDefault": false,
|
|
2635
|
+
// "withdrawFeeRate": "",
|
|
2636
|
+
// "name": "erc20",
|
|
2637
|
+
// "withdrawMin": 30,
|
|
2638
|
+
// "minLimit": 0.0001,
|
|
2639
|
+
// "minDeposit": 20,
|
|
2640
|
+
// "feeAssetCode": "usdt",
|
|
2641
|
+
// "withdrawFee": "30",
|
|
2642
|
+
// "type": 1,
|
|
2643
|
+
// "coin": "usdt",
|
|
2644
|
+
// "network": "eth"
|
|
2645
|
+
// },
|
|
2646
|
+
// ...
|
|
2647
|
+
// ],
|
|
2648
|
+
// "freezeAmt": "0",
|
|
2649
|
+
// "coin": "ada"
|
|
2650
|
+
// }
|
|
2651
|
+
// ],
|
|
2652
|
+
// "code": 0
|
|
2653
|
+
// }
|
|
2654
|
+
//
|
|
2655
|
+
const result = this.safeValue(response, 'data', []);
|
|
2656
|
+
const withdrawFees = {};
|
|
2657
|
+
for (let i = 0; i < result.length; i++) {
|
|
2658
|
+
const entry = result[i];
|
|
2659
|
+
const currencyId = this.safeString(entry, 'coin');
|
|
2660
|
+
const code = this.safeCurrencyCode(currencyId);
|
|
2661
|
+
const networkList = this.safeValue(entry, 'networkList', []);
|
|
2662
|
+
withdrawFees[code] = {};
|
|
2663
|
+
for (let j = 0; j < networkList.length; j++) {
|
|
2664
|
+
const networkEntry = networkList[j];
|
|
2665
|
+
const fee = this.safeNumber(networkEntry, 'withdrawFee');
|
|
2666
|
+
if (fee !== undefined) {
|
|
2667
|
+
const networkCode = this.networkIdToCode(this.safeString(networkEntry, 'name'));
|
|
2668
|
+
withdrawFees[code][networkCode] = fee;
|
|
2669
|
+
}
|
|
2670
|
+
}
|
|
2671
|
+
}
|
|
2672
|
+
return {
|
|
2673
|
+
'withdraw': withdrawFees,
|
|
2674
|
+
'deposit': {},
|
|
2675
|
+
'info': response,
|
|
2676
|
+
};
|
|
2677
|
+
}
|
|
2678
|
+
async fetchPublicTransactionFees(params = {}) {
|
|
2679
|
+
// extremely incomplete response
|
|
2680
|
+
// vast majority fees undefined
|
|
2681
|
+
await this.loadMarkets();
|
|
2682
|
+
const code = this.safeString2(params, 'coin', 'assetCode');
|
|
2683
|
+
params = this.omit(params, ['coin', 'assetCode']);
|
|
2684
|
+
const request = {};
|
|
2685
|
+
if (code !== undefined) {
|
|
2686
|
+
const currency = this.currency(code);
|
|
2687
|
+
request['assetCode'] = currency['id'];
|
|
2688
|
+
}
|
|
2689
|
+
const response = await this.spotPublicGetWithdrawConfigs(this.extend(request, params));
|
|
2690
|
+
//
|
|
2691
|
+
// {
|
|
2692
|
+
// "result": "true",
|
|
2693
|
+
// "data": [
|
|
2694
|
+
// {
|
|
2695
|
+
// "amountScale": "4",
|
|
2696
|
+
// "chain": "heco",
|
|
2697
|
+
// "assetCode": "lbk",
|
|
2698
|
+
// "min": "200",
|
|
2699
|
+
// "transferAmtScale": "4",
|
|
2700
|
+
// "canWithDraw": true,
|
|
2701
|
+
// "fee": "100",
|
|
2702
|
+
// "minTransfer": "0.0001",
|
|
2703
|
+
// "type": "1"
|
|
2704
|
+
// },
|
|
2705
|
+
// ...
|
|
2706
|
+
// ],
|
|
2707
|
+
// "error_code": "0",
|
|
2708
|
+
// "ts": "1663364435973"
|
|
2709
|
+
// }
|
|
2710
|
+
//
|
|
2711
|
+
const result = this.safeValue(response, 'data', []);
|
|
2712
|
+
const withdrawFees = {};
|
|
2713
|
+
for (let i = 0; i < result.length; i++) {
|
|
2714
|
+
const item = result[i];
|
|
2715
|
+
const canWithdraw = this.safeValue(item, 'canWithDraw');
|
|
2716
|
+
if (canWithdraw === 'true') {
|
|
2717
|
+
const currencyId = this.safeString(item, 'assetCode');
|
|
2718
|
+
const codeInner = this.safeCurrencyCode(currencyId);
|
|
2719
|
+
let network = this.networkIdToCode(this.safeString(item, 'chain'));
|
|
2720
|
+
if (network === undefined) {
|
|
2721
|
+
network = codeInner;
|
|
2722
|
+
}
|
|
2723
|
+
const fee = this.safeString(item, 'fee');
|
|
2724
|
+
if (withdrawFees[codeInner] === undefined) {
|
|
2725
|
+
withdrawFees[codeInner] = {};
|
|
2726
|
+
}
|
|
2727
|
+
withdrawFees[codeInner][network] = this.parseNumber(fee);
|
|
2728
|
+
}
|
|
2729
|
+
}
|
|
2730
|
+
return {
|
|
2731
|
+
'withdraw': withdrawFees,
|
|
2732
|
+
'deposit': {},
|
|
2733
|
+
'info': response,
|
|
2734
|
+
};
|
|
2735
|
+
}
|
|
2736
|
+
/**
|
|
2737
|
+
* @method
|
|
2738
|
+
* @name lbank#fetchDepositWithdrawFees
|
|
2739
|
+
* @description when using private endpoint, only returns information for currencies with non-zero balance, use public method by specifying this.options['fetchDepositWithdrawFees']['method'] = 'fetchPublicDepositWithdrawFees'
|
|
2740
|
+
* @see https://www.lbank.com/en-US/docs/index.html#get-all-coins-information
|
|
2741
|
+
* @see https://www.lbank.com/en-US/docs/index.html#withdrawal-configurations
|
|
2742
|
+
* @param {string[]} [codes] array of unified currency codes
|
|
2743
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
2744
|
+
* @returns {object} a list of [fee structures]{@link https://docs.ccxt.com/#/?id=fee-structure}
|
|
2745
|
+
*/
|
|
2746
|
+
async fetchDepositWithdrawFees(codes = undefined, params = {}) {
|
|
2747
|
+
await this.loadMarkets();
|
|
2748
|
+
const isAuthorized = this.checkRequiredCredentials(false);
|
|
2749
|
+
let response = undefined;
|
|
2750
|
+
if (isAuthorized === true) {
|
|
2751
|
+
const options = this.safeValue(this.options, 'fetchDepositWithdrawFees', {});
|
|
2752
|
+
const defaultMethod = this.safeString(options, 'method', 'fetchPrivateDepositWithdrawFees');
|
|
2753
|
+
const method = this.safeString(params, 'method', defaultMethod);
|
|
2754
|
+
params = this.omit(params, 'method');
|
|
2755
|
+
if (method === 'fetchPublicDepositWithdrawFees') {
|
|
2756
|
+
response = await this.fetchPublicDepositWithdrawFees(codes, params);
|
|
2757
|
+
}
|
|
2758
|
+
else {
|
|
2759
|
+
response = await this.fetchPrivateDepositWithdrawFees(codes, params);
|
|
2760
|
+
}
|
|
2761
|
+
}
|
|
2762
|
+
else {
|
|
2763
|
+
response = await this.fetchPublicDepositWithdrawFees(codes, params);
|
|
2764
|
+
}
|
|
2765
|
+
return response;
|
|
2766
|
+
}
|
|
2767
|
+
async fetchPrivateDepositWithdrawFees(codes = undefined, params = {}) {
|
|
2768
|
+
// complete response
|
|
2769
|
+
// incl. for coins which undefined in public method
|
|
2770
|
+
await this.loadMarkets();
|
|
2771
|
+
const response = await this.spotPrivatePostSupplementUserInfo(params);
|
|
2772
|
+
//
|
|
2773
|
+
// {
|
|
2774
|
+
// "result": "true",
|
|
2775
|
+
// "data": [
|
|
2776
|
+
// {
|
|
2777
|
+
// "usableAmt": "14.36",
|
|
2778
|
+
// "assetAmt": "14.36",
|
|
2779
|
+
// "networkList": [
|
|
2780
|
+
// {
|
|
2781
|
+
// "isDefault": false,
|
|
2782
|
+
// "withdrawFeeRate": "",
|
|
2783
|
+
// "name": "erc20",
|
|
2784
|
+
// "withdrawMin": 30,
|
|
2785
|
+
// "minLimit": 0.0001,
|
|
2786
|
+
// "minDeposit": 20,
|
|
2787
|
+
// "feeAssetCode": "usdt",
|
|
2788
|
+
// "withdrawFee": "30",
|
|
2789
|
+
// "type": 1,
|
|
2790
|
+
// "coin": "usdt",
|
|
2791
|
+
// "network": "eth"
|
|
2792
|
+
// },
|
|
2793
|
+
// ...
|
|
2794
|
+
// ],
|
|
2795
|
+
// "freezeAmt": "0",
|
|
2796
|
+
// "coin": "ada"
|
|
2797
|
+
// }
|
|
2798
|
+
// ],
|
|
2799
|
+
// "code": 0
|
|
2800
|
+
// }
|
|
2801
|
+
//
|
|
2802
|
+
const data = this.safeList(response, 'data', []);
|
|
2803
|
+
return this.parseDepositWithdrawFees(data, codes, 'coin');
|
|
2804
|
+
}
|
|
2805
|
+
async fetchPublicDepositWithdrawFees(codes = undefined, params = {}) {
|
|
2806
|
+
// extremely incomplete response
|
|
2807
|
+
// vast majority fees undefined
|
|
2808
|
+
await this.loadMarkets();
|
|
2809
|
+
const request = {};
|
|
2810
|
+
const response = await this.spotPublicGetWithdrawConfigs(this.extend(request, params));
|
|
2811
|
+
//
|
|
2812
|
+
// {
|
|
2813
|
+
// "result": "true",
|
|
2814
|
+
// "data": [
|
|
2815
|
+
// {
|
|
2816
|
+
// "amountScale": "4",
|
|
2817
|
+
// "chain": "heco",
|
|
2818
|
+
// "assetCode": "lbk",
|
|
2819
|
+
// "min": "200",
|
|
2820
|
+
// "transferAmtScale": "4",
|
|
2821
|
+
// "canWithDraw": true,
|
|
2822
|
+
// "fee": "100",
|
|
2823
|
+
// "minTransfer": "0.0001",
|
|
2824
|
+
// "type": "1"
|
|
2825
|
+
// },
|
|
2826
|
+
// ...
|
|
2827
|
+
// ],
|
|
2828
|
+
// "error_code": "0",
|
|
2829
|
+
// "ts": "1663364435973"
|
|
2830
|
+
// }
|
|
2831
|
+
//
|
|
2832
|
+
const data = this.safeValue(response, 'data', []);
|
|
2833
|
+
return this.parsePublicDepositWithdrawFees(data, codes);
|
|
2834
|
+
}
|
|
2835
|
+
parsePublicDepositWithdrawFees(response, codes = undefined) {
|
|
2836
|
+
//
|
|
2837
|
+
// [
|
|
2838
|
+
// {
|
|
2839
|
+
// "amountScale": "4",
|
|
2840
|
+
// "chain": "heco",
|
|
2841
|
+
// "assetCode": "lbk",
|
|
2842
|
+
// "min": "200",
|
|
2843
|
+
// "transferAmtScale": "4",
|
|
2844
|
+
// "canWithDraw": true,
|
|
2845
|
+
// "fee": "100",
|
|
2846
|
+
// "minTransfer": "0.0001",
|
|
2847
|
+
// "type": "1"
|
|
2848
|
+
// },
|
|
2849
|
+
// ...
|
|
2850
|
+
// ]
|
|
2851
|
+
//
|
|
2852
|
+
const result = {};
|
|
2853
|
+
for (let i = 0; i < response.length; i++) {
|
|
2854
|
+
const fee = response[i];
|
|
2855
|
+
const canWithdraw = this.safeValue(fee, 'canWithDraw');
|
|
2856
|
+
if (canWithdraw === true) {
|
|
2857
|
+
const currencyId = this.safeString(fee, 'assetCode');
|
|
2858
|
+
const code = this.safeCurrencyCode(currencyId);
|
|
2859
|
+
if (codes === undefined || this.inArray(code, codes)) {
|
|
2860
|
+
const withdrawFee = this.safeNumber(fee, 'fee');
|
|
2861
|
+
if (withdrawFee !== undefined) {
|
|
2862
|
+
const resultValue = this.safeValue(result, code);
|
|
2863
|
+
if (resultValue === undefined) {
|
|
2864
|
+
result[code] = this.depositWithdrawFee([fee]);
|
|
2865
|
+
}
|
|
2866
|
+
else {
|
|
2867
|
+
const resultCodeInfo = result[code]['info'];
|
|
2868
|
+
resultCodeInfo.push(fee);
|
|
2869
|
+
}
|
|
2870
|
+
const networkCode = this.networkIdToCode(this.safeString(fee, 'chain'));
|
|
2871
|
+
if (networkCode !== undefined) {
|
|
2872
|
+
result[code]['networks'][networkCode] = {
|
|
2873
|
+
'withdraw': {
|
|
2874
|
+
'fee': withdrawFee,
|
|
2875
|
+
'percentage': undefined,
|
|
2876
|
+
},
|
|
2877
|
+
'deposit': {
|
|
2878
|
+
'fee': undefined,
|
|
2879
|
+
'percentage': undefined,
|
|
2880
|
+
},
|
|
2881
|
+
};
|
|
2882
|
+
}
|
|
2883
|
+
else {
|
|
2884
|
+
result[code]['withdraw'] = {
|
|
2885
|
+
'fee': withdrawFee,
|
|
2886
|
+
'percentage': undefined,
|
|
2887
|
+
};
|
|
2888
|
+
}
|
|
2889
|
+
}
|
|
2890
|
+
}
|
|
2891
|
+
}
|
|
2892
|
+
}
|
|
2893
|
+
return result;
|
|
2894
|
+
}
|
|
2895
|
+
parseDepositWithdrawFee(fee, currency = undefined) {
|
|
2896
|
+
//
|
|
2897
|
+
// * only used for fetchPrivateDepositWithdrawFees
|
|
2898
|
+
//
|
|
2899
|
+
// {
|
|
2900
|
+
// "usableAmt": "14.36",
|
|
2901
|
+
// "assetAmt": "14.36",
|
|
2902
|
+
// "networkList": [
|
|
2903
|
+
// {
|
|
2904
|
+
// "isDefault": false,
|
|
2905
|
+
// "withdrawFeeRate": "",
|
|
2906
|
+
// "name": "erc20",
|
|
2907
|
+
// "withdrawMin": 30,
|
|
2908
|
+
// "minLimit": 0.0001,
|
|
2909
|
+
// "minDeposit": 20,
|
|
2910
|
+
// "feeAssetCode": "usdt",
|
|
2911
|
+
// "withdrawFee": "30",
|
|
2912
|
+
// "type": 1,
|
|
2913
|
+
// "coin": "usdt",
|
|
2914
|
+
// "network": "eth"
|
|
2915
|
+
// },
|
|
2916
|
+
// ...
|
|
2917
|
+
// ],
|
|
2918
|
+
// "freezeAmt": "0",
|
|
2919
|
+
// "coin": "ada"
|
|
2920
|
+
// }
|
|
2921
|
+
//
|
|
2922
|
+
const result = this.depositWithdrawFee(fee);
|
|
2923
|
+
const networkList = this.safeValue(fee, 'networkList', []);
|
|
2924
|
+
for (let j = 0; j < networkList.length; j++) {
|
|
2925
|
+
const networkEntry = networkList[j];
|
|
2926
|
+
const networkCode = this.networkIdToCode(this.safeString(networkEntry, 'name'));
|
|
2927
|
+
const withdrawFee = this.safeNumber(networkEntry, 'withdrawFee');
|
|
2928
|
+
const isDefault = this.safeValue(networkEntry, 'isDefault');
|
|
2929
|
+
if (withdrawFee !== undefined) {
|
|
2930
|
+
if (isDefault) {
|
|
2931
|
+
result['withdraw'] = {
|
|
2932
|
+
'fee': withdrawFee,
|
|
2933
|
+
'percentage': undefined,
|
|
2934
|
+
};
|
|
2935
|
+
}
|
|
2936
|
+
result['networks'][networkCode] = {
|
|
2937
|
+
'withdraw': {
|
|
2938
|
+
'fee': withdrawFee,
|
|
2939
|
+
'percentage': undefined,
|
|
2940
|
+
},
|
|
2941
|
+
'deposit': {
|
|
2942
|
+
'fee': undefined,
|
|
2943
|
+
'percentage': undefined,
|
|
2944
|
+
},
|
|
2945
|
+
};
|
|
2946
|
+
}
|
|
2947
|
+
}
|
|
2948
|
+
return result;
|
|
2949
|
+
}
|
|
2950
|
+
sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {
|
|
2951
|
+
let query = this.omit(params, this.extractParams(path));
|
|
2952
|
+
let url = this.urls['api']['rest'] + '/' + this.version + '/' + this.implodeParams(path, params);
|
|
2953
|
+
// Every spot endpoint ends with ".do"
|
|
2954
|
+
if (api[0] === 'spot') {
|
|
2955
|
+
url += '.do';
|
|
2956
|
+
}
|
|
2957
|
+
else {
|
|
2958
|
+
url = this.urls['api']['contract'] + '/' + this.implodeParams(path, params);
|
|
2959
|
+
}
|
|
2960
|
+
if (api[1] === 'public') {
|
|
2961
|
+
if (Object.keys(query).length) {
|
|
2962
|
+
url += '?' + this.urlencode(this.keysort(query));
|
|
2963
|
+
}
|
|
2964
|
+
}
|
|
2965
|
+
else {
|
|
2966
|
+
this.checkRequiredCredentials();
|
|
2967
|
+
const timestamp = this.milliseconds().toString();
|
|
2968
|
+
const echostr = this.uuid22() + this.uuid16();
|
|
2969
|
+
query = this.extend({
|
|
2970
|
+
'api_key': this.apiKey,
|
|
2971
|
+
}, query);
|
|
2972
|
+
let signatureMethod = undefined;
|
|
2973
|
+
if (this.secret.length > 32) {
|
|
2974
|
+
signatureMethod = 'RSA';
|
|
2975
|
+
}
|
|
2976
|
+
else {
|
|
2977
|
+
signatureMethod = 'HmacSHA256';
|
|
2978
|
+
}
|
|
2979
|
+
const auth = this.rawencode(this.keysort(this.extend({
|
|
2980
|
+
'echostr': echostr,
|
|
2981
|
+
'signature_method': signatureMethod,
|
|
2982
|
+
'timestamp': timestamp,
|
|
2983
|
+
}, query)));
|
|
2984
|
+
const encoded = this.encode(auth);
|
|
2985
|
+
const hash = this.hash(encoded, md5);
|
|
2986
|
+
const uppercaseHash = hash.toUpperCase();
|
|
2987
|
+
let sign = undefined;
|
|
2988
|
+
if (signatureMethod === 'RSA') {
|
|
2989
|
+
const cacheSecretAsPem = this.safeBool(this.options, 'cacheSecretAsPem', true);
|
|
2990
|
+
let pem = undefined;
|
|
2991
|
+
if (cacheSecretAsPem) {
|
|
2992
|
+
pem = this.safeValue(this.options, 'pem');
|
|
2993
|
+
if (pem === undefined) {
|
|
2994
|
+
pem = this.convertSecretToPem(this.encode(this.secret));
|
|
2995
|
+
this.options['pem'] = pem;
|
|
2996
|
+
}
|
|
2997
|
+
}
|
|
2998
|
+
else {
|
|
2999
|
+
pem = this.convertSecretToPem(this.encode(this.secret));
|
|
3000
|
+
}
|
|
3001
|
+
sign = rsa(uppercaseHash, pem, sha256);
|
|
3002
|
+
}
|
|
3003
|
+
else if (signatureMethod === 'HmacSHA256') {
|
|
3004
|
+
sign = this.hmac(this.encode(uppercaseHash), this.encode(this.secret), sha256);
|
|
3005
|
+
}
|
|
3006
|
+
query['sign'] = sign;
|
|
3007
|
+
body = this.urlencode(this.keysort(query));
|
|
3008
|
+
headers = {
|
|
3009
|
+
'Content-Type': 'application/x-www-form-urlencoded',
|
|
3010
|
+
'timestamp': timestamp,
|
|
3011
|
+
'signature_method': signatureMethod,
|
|
3012
|
+
'echostr': echostr,
|
|
3013
|
+
};
|
|
3014
|
+
}
|
|
3015
|
+
return { 'url': url, 'method': method, 'body': body, 'headers': headers };
|
|
3016
|
+
}
|
|
3017
|
+
convertSecretToPem(secret) {
|
|
3018
|
+
const lineLength = 64;
|
|
3019
|
+
const secretLength = secret.length - 0;
|
|
3020
|
+
let numLines = this.parseToInt(secretLength / lineLength);
|
|
3021
|
+
numLines = this.sum(numLines, 1);
|
|
3022
|
+
let pem = "-----BEGIN PRIVATE KEY-----\n"; // eslint-disable-line
|
|
3023
|
+
for (let i = 0; i < numLines; i++) {
|
|
3024
|
+
const start = i * lineLength;
|
|
3025
|
+
const end = this.sum(start, lineLength);
|
|
3026
|
+
pem += this.secret.slice(start, end) + "\n"; // eslint-disable-line
|
|
3027
|
+
}
|
|
3028
|
+
return pem + '-----END PRIVATE KEY-----';
|
|
3029
|
+
}
|
|
3030
|
+
handleErrors(httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody) {
|
|
3031
|
+
if (response === undefined) {
|
|
3032
|
+
return undefined;
|
|
3033
|
+
}
|
|
3034
|
+
const success = this.safeValue(response, 'result');
|
|
3035
|
+
if (success === 'false' || !success) {
|
|
3036
|
+
const errorCode = this.safeString(response, 'error_code');
|
|
3037
|
+
const message = this.safeString({
|
|
3038
|
+
'10000': 'Internal error',
|
|
3039
|
+
'10001': 'The required parameters can not be empty',
|
|
3040
|
+
'10002': 'Validation failed',
|
|
3041
|
+
'10003': 'Invalid parameter',
|
|
3042
|
+
'10004': 'Request too frequent',
|
|
3043
|
+
'10005': 'Secret key does not exist',
|
|
3044
|
+
'10006': 'User does not exist',
|
|
3045
|
+
'10007': 'Invalid signature',
|
|
3046
|
+
'10008': 'Invalid Trading Pair',
|
|
3047
|
+
'10009': 'Price and/or Amount are required for limit order',
|
|
3048
|
+
'10010': 'Price and/or Amount must be less than minimum requirement',
|
|
3049
|
+
// '10011': 'Market orders can not be missing the amount of the order',
|
|
3050
|
+
// '10012': 'market sell orders can not be missing orders',
|
|
3051
|
+
'10013': 'The amount is too small',
|
|
3052
|
+
'10014': 'Insufficient amount of money in the account',
|
|
3053
|
+
'10015': 'Invalid order type',
|
|
3054
|
+
'10016': 'Insufficient account balance',
|
|
3055
|
+
'10017': 'Server Error',
|
|
3056
|
+
'10018': 'Page size should be between 1 and 50',
|
|
3057
|
+
'10019': 'Cancel NO more than 3 orders in one request',
|
|
3058
|
+
'10020': 'Volume < 0.001',
|
|
3059
|
+
'10021': 'Price < 0.01',
|
|
3060
|
+
'10022': 'Invalid authorization',
|
|
3061
|
+
'10023': 'Market Order is not supported yet',
|
|
3062
|
+
'10024': 'User cannot trade on this pair',
|
|
3063
|
+
'10025': 'Order has been filled',
|
|
3064
|
+
'10026': 'Order has been cancelld',
|
|
3065
|
+
'10027': 'Order is cancelling',
|
|
3066
|
+
'10028': 'Wrong query time',
|
|
3067
|
+
'10029': 'from is not in the query time',
|
|
3068
|
+
'10030': 'from do not match the transaction type of inqury',
|
|
3069
|
+
'10031': 'echostr length must be valid and length must be from 30 to 40',
|
|
3070
|
+
'10033': 'Failed to create order',
|
|
3071
|
+
'10036': 'customID duplicated',
|
|
3072
|
+
'10100': 'Has no privilege to withdraw',
|
|
3073
|
+
'10101': 'Invalid fee rate to withdraw',
|
|
3074
|
+
'10102': 'Too little to withdraw',
|
|
3075
|
+
'10103': 'Exceed daily limitation of withdraw',
|
|
3076
|
+
'10104': 'Cancel was rejected',
|
|
3077
|
+
'10105': 'Request has been cancelled',
|
|
3078
|
+
'10106': 'None trade time',
|
|
3079
|
+
'10107': 'Start price exception',
|
|
3080
|
+
'10108': 'can not create order',
|
|
3081
|
+
'10109': 'wallet address is not mapping',
|
|
3082
|
+
'10110': 'transfer fee is not mapping',
|
|
3083
|
+
'10111': 'mount > 0',
|
|
3084
|
+
'10112': 'fee is too lower',
|
|
3085
|
+
'10113': 'transfer fee is 0',
|
|
3086
|
+
'10600': 'intercepted by replay attacks filter, check timestamp',
|
|
3087
|
+
'10601': 'Interface closed unavailable',
|
|
3088
|
+
'10701': 'invalid asset code',
|
|
3089
|
+
'10702': 'not allowed deposit',
|
|
3090
|
+
}, errorCode, this.json(response));
|
|
3091
|
+
const ErrorClass = this.safeValue({
|
|
3092
|
+
'10001': BadRequest,
|
|
3093
|
+
'10002': AuthenticationError,
|
|
3094
|
+
'10003': BadRequest,
|
|
3095
|
+
'10004': RateLimitExceeded,
|
|
3096
|
+
'10005': AuthenticationError,
|
|
3097
|
+
'10006': AuthenticationError,
|
|
3098
|
+
'10007': AuthenticationError,
|
|
3099
|
+
'10008': BadSymbol,
|
|
3100
|
+
'10009': InvalidOrder,
|
|
3101
|
+
'10010': InvalidOrder,
|
|
3102
|
+
'10013': InvalidOrder,
|
|
3103
|
+
'10014': InsufficientFunds,
|
|
3104
|
+
'10015': InvalidOrder,
|
|
3105
|
+
'10016': InsufficientFunds,
|
|
3106
|
+
'10017': ExchangeError,
|
|
3107
|
+
'10018': BadRequest,
|
|
3108
|
+
'10019': BadRequest,
|
|
3109
|
+
'10020': BadRequest,
|
|
3110
|
+
'10021': InvalidOrder,
|
|
3111
|
+
'10022': PermissionDenied,
|
|
3112
|
+
'10023': InvalidOrder,
|
|
3113
|
+
'10024': PermissionDenied,
|
|
3114
|
+
'10025': InvalidOrder,
|
|
3115
|
+
'10026': InvalidOrder,
|
|
3116
|
+
'10027': InvalidOrder,
|
|
3117
|
+
'10028': BadRequest,
|
|
3118
|
+
'10029': BadRequest,
|
|
3119
|
+
'10030': BadRequest,
|
|
3120
|
+
'10031': InvalidNonce,
|
|
3121
|
+
'10033': ExchangeError,
|
|
3122
|
+
'10036': DuplicateOrderId,
|
|
3123
|
+
'10100': PermissionDenied,
|
|
3124
|
+
'10101': BadRequest,
|
|
3125
|
+
'10102': InsufficientFunds,
|
|
3126
|
+
'10103': ExchangeError,
|
|
3127
|
+
'10104': ExchangeError,
|
|
3128
|
+
'10105': ExchangeError,
|
|
3129
|
+
'10106': BadRequest,
|
|
3130
|
+
'10107': BadRequest,
|
|
3131
|
+
'10108': ExchangeError,
|
|
3132
|
+
'10109': InvalidAddress,
|
|
3133
|
+
'10110': ExchangeError,
|
|
3134
|
+
'10111': BadRequest,
|
|
3135
|
+
'10112': BadRequest,
|
|
3136
|
+
'10113': BadRequest,
|
|
3137
|
+
'10600': BadRequest,
|
|
3138
|
+
'10601': ExchangeError,
|
|
3139
|
+
'10701': BadSymbol,
|
|
3140
|
+
'10702': PermissionDenied, // 'not allowed deposit',
|
|
3141
|
+
}, errorCode, ExchangeError);
|
|
3142
|
+
throw new ErrorClass(message);
|
|
3143
|
+
}
|
|
3144
|
+
return undefined;
|
|
3145
|
+
}
|
|
3146
|
+
}
|