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,3549 @@
|
|
|
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/cryptocom.js';
|
|
9
|
+
import { Precise } from './base/Precise.js';
|
|
10
|
+
import { AuthenticationError, ArgumentsRequired, ExchangeError, InsufficientFunds, DDoSProtection, InvalidNonce, PermissionDenied, BadRequest, BadSymbol, NotSupported, AccountNotEnabled, OnMaintenance, InvalidOrder, RequestTimeout, OrderNotFound, RateLimitExceeded } from './base/errors.js';
|
|
11
|
+
import { TICK_SIZE } from './base/functions/number.js';
|
|
12
|
+
import { sha256 } from './static_dependencies/noble-hashes/sha256.js';
|
|
13
|
+
/**
|
|
14
|
+
* @class cryptocom
|
|
15
|
+
* @augments Exchange
|
|
16
|
+
*/
|
|
17
|
+
export default class cryptocom extends Exchange {
|
|
18
|
+
describe() {
|
|
19
|
+
return this.deepExtend(super.describe(), {
|
|
20
|
+
'id': 'cryptocom',
|
|
21
|
+
'name': 'Crypto.com',
|
|
22
|
+
'countries': ['MT'],
|
|
23
|
+
'version': 'v2',
|
|
24
|
+
'rateLimit': 10,
|
|
25
|
+
'certified': true,
|
|
26
|
+
'pro': true,
|
|
27
|
+
'has': {
|
|
28
|
+
'CORS': false,
|
|
29
|
+
'spot': true,
|
|
30
|
+
'margin': true,
|
|
31
|
+
'swap': true,
|
|
32
|
+
'future': true,
|
|
33
|
+
'option': true,
|
|
34
|
+
'addMargin': false,
|
|
35
|
+
'cancelAllOrders': true,
|
|
36
|
+
'cancelOrder': true,
|
|
37
|
+
'cancelOrders': true,
|
|
38
|
+
'cancelOrdersForSymbols': true,
|
|
39
|
+
'closeAllPositions': false,
|
|
40
|
+
'closePosition': true,
|
|
41
|
+
'createMarketBuyOrderWithCost': false,
|
|
42
|
+
'createMarketOrderWithCost': false,
|
|
43
|
+
'createMarketSellOrderWithCost': false,
|
|
44
|
+
'createOrder': true,
|
|
45
|
+
'createOrders': true,
|
|
46
|
+
'createStopOrder': true,
|
|
47
|
+
'createTriggerOrder': true,
|
|
48
|
+
'editOrder': true,
|
|
49
|
+
'fetchAccounts': true,
|
|
50
|
+
'fetchBalance': true,
|
|
51
|
+
'fetchBidsAsks': false,
|
|
52
|
+
'fetchBorrowInterest': false,
|
|
53
|
+
'fetchBorrowRateHistories': false,
|
|
54
|
+
'fetchBorrowRateHistory': false,
|
|
55
|
+
'fetchClosedOrders': 'emulated',
|
|
56
|
+
'fetchCrossBorrowRate': false,
|
|
57
|
+
'fetchCrossBorrowRates': false,
|
|
58
|
+
'fetchCurrencies': true,
|
|
59
|
+
'fetchDepositAddress': true,
|
|
60
|
+
'fetchDepositAddresses': false,
|
|
61
|
+
'fetchDepositAddressesByNetwork': true,
|
|
62
|
+
'fetchDeposits': true,
|
|
63
|
+
'fetchDepositsWithdrawals': false,
|
|
64
|
+
'fetchDepositWithdrawFee': 'emulated',
|
|
65
|
+
'fetchDepositWithdrawFees': true,
|
|
66
|
+
'fetchFundingHistory': false,
|
|
67
|
+
'fetchFundingRate': true,
|
|
68
|
+
'fetchFundingRateHistory': true,
|
|
69
|
+
'fetchFundingRates': false,
|
|
70
|
+
'fetchGreeks': false,
|
|
71
|
+
'fetchIndexOHLCV': false,
|
|
72
|
+
'fetchIsolatedBorrowRate': false,
|
|
73
|
+
'fetchIsolatedBorrowRates': false,
|
|
74
|
+
'fetchLedger': true,
|
|
75
|
+
'fetchLeverage': false,
|
|
76
|
+
'fetchLeverageTiers': false,
|
|
77
|
+
'fetchMarginAdjustmentHistory': false,
|
|
78
|
+
'fetchMarginMode': false,
|
|
79
|
+
'fetchMarketLeverageTiers': false,
|
|
80
|
+
'fetchMarkets': true,
|
|
81
|
+
'fetchMarkOHLCV': false,
|
|
82
|
+
'fetchMySettlementHistory': false,
|
|
83
|
+
'fetchMyTrades': true,
|
|
84
|
+
'fetchOHLCV': true,
|
|
85
|
+
'fetchOpenOrders': true,
|
|
86
|
+
'fetchOrder': true,
|
|
87
|
+
'fetchOrderBook': true,
|
|
88
|
+
'fetchOrders': true,
|
|
89
|
+
'fetchPosition': true,
|
|
90
|
+
'fetchPositionHistory': false,
|
|
91
|
+
'fetchPositionMode': false,
|
|
92
|
+
'fetchPositions': true,
|
|
93
|
+
'fetchPositionsHistory': false,
|
|
94
|
+
'fetchPremiumIndexOHLCV': false,
|
|
95
|
+
'fetchSettlementHistory': true,
|
|
96
|
+
'fetchStatus': false,
|
|
97
|
+
'fetchTicker': true,
|
|
98
|
+
'fetchTickers': true,
|
|
99
|
+
'fetchTime': false,
|
|
100
|
+
'fetchTrades': true,
|
|
101
|
+
'fetchTradingFee': true,
|
|
102
|
+
'fetchTradingFees': true,
|
|
103
|
+
'fetchTransactionFees': false,
|
|
104
|
+
'fetchTransactions': false,
|
|
105
|
+
'fetchTransfers': false,
|
|
106
|
+
'fetchUnderlyingAssets': false,
|
|
107
|
+
'fetchVolatilityHistory': false,
|
|
108
|
+
'fetchWithdrawals': true,
|
|
109
|
+
'reduceMargin': false,
|
|
110
|
+
'repayCrossMargin': false,
|
|
111
|
+
'repayIsolatedMargin': false,
|
|
112
|
+
'sandbox': true,
|
|
113
|
+
'setLeverage': false,
|
|
114
|
+
'setMarginMode': false,
|
|
115
|
+
'setPositionMode': false,
|
|
116
|
+
'transfer': false,
|
|
117
|
+
'withdraw': true,
|
|
118
|
+
},
|
|
119
|
+
'timeframes': {
|
|
120
|
+
'1m': '1m',
|
|
121
|
+
'5m': '5m',
|
|
122
|
+
'15m': '15m',
|
|
123
|
+
'30m': '30m',
|
|
124
|
+
'1h': '1h',
|
|
125
|
+
'4h': '4h',
|
|
126
|
+
'6h': '6h',
|
|
127
|
+
'12h': '12h',
|
|
128
|
+
'1d': '1D',
|
|
129
|
+
'1w': '7D',
|
|
130
|
+
'2w': '14D',
|
|
131
|
+
'1M': '1M',
|
|
132
|
+
},
|
|
133
|
+
'urls': {
|
|
134
|
+
'logo': 'https://user-images.githubusercontent.com/1294454/147792121-38ed5e36-c229-48d6-b49a-48d05fc19ed4.jpeg',
|
|
135
|
+
'test': {
|
|
136
|
+
'v1': 'https://uat-api.3ona.co/exchange/v1',
|
|
137
|
+
'v2': 'https://uat-api.3ona.co/v2',
|
|
138
|
+
'derivatives': 'https://uat-api.3ona.co/v2',
|
|
139
|
+
},
|
|
140
|
+
'api': {
|
|
141
|
+
'base': 'https://api.crypto.com',
|
|
142
|
+
'v1': 'https://api.crypto.com/exchange/v1',
|
|
143
|
+
'v2': 'https://api.crypto.com/v2',
|
|
144
|
+
'derivatives': 'https://deriv-api.crypto.com/v1',
|
|
145
|
+
},
|
|
146
|
+
'www': 'https://crypto.com/',
|
|
147
|
+
'referral': {
|
|
148
|
+
'url': 'https://crypto.com/exch/kdacthrnxt',
|
|
149
|
+
'discount': 0.75,
|
|
150
|
+
},
|
|
151
|
+
'doc': [
|
|
152
|
+
'https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html',
|
|
153
|
+
'https://exchange-docs.crypto.com/spot/index.html',
|
|
154
|
+
'https://exchange-docs.crypto.com/derivatives/index.html',
|
|
155
|
+
],
|
|
156
|
+
'fees': 'https://crypto.com/exchange/document/fees-limits',
|
|
157
|
+
},
|
|
158
|
+
'api': {
|
|
159
|
+
'base': {
|
|
160
|
+
'public': {
|
|
161
|
+
'get': {
|
|
162
|
+
'v1/public/get-announcements': 1, // no description of rate limit
|
|
163
|
+
},
|
|
164
|
+
},
|
|
165
|
+
},
|
|
166
|
+
'v1': {
|
|
167
|
+
'public': {
|
|
168
|
+
'get': {
|
|
169
|
+
'public/auth': 10 / 3,
|
|
170
|
+
'public/get-instruments': 10 / 3,
|
|
171
|
+
'public/get-book': 1,
|
|
172
|
+
'public/get-candlestick': 1,
|
|
173
|
+
'public/get-trades': 1,
|
|
174
|
+
'public/get-tickers': 1,
|
|
175
|
+
'public/get-valuations': 1,
|
|
176
|
+
'public/get-expired-settlement-price': 10 / 3,
|
|
177
|
+
'public/get-insurance': 1,
|
|
178
|
+
'public/get-risk-parameters': 1,
|
|
179
|
+
},
|
|
180
|
+
'post': {
|
|
181
|
+
'public/staking/get-conversion-rate': 2,
|
|
182
|
+
},
|
|
183
|
+
},
|
|
184
|
+
'private': {
|
|
185
|
+
'post': {
|
|
186
|
+
'private/set-cancel-on-disconnect': 10 / 3,
|
|
187
|
+
'private/get-cancel-on-disconnect': 10 / 3,
|
|
188
|
+
'private/user-balance': 10 / 3,
|
|
189
|
+
'private/user-balance-history': 10 / 3,
|
|
190
|
+
'private/get-positions': 10 / 3,
|
|
191
|
+
'private/create-order': 2 / 3,
|
|
192
|
+
'private/amend-order': 4 / 3,
|
|
193
|
+
'private/create-order-list': 10 / 3,
|
|
194
|
+
'private/cancel-order': 2 / 3,
|
|
195
|
+
'private/cancel-order-list': 10 / 3,
|
|
196
|
+
'private/cancel-all-orders': 2 / 3,
|
|
197
|
+
'private/close-position': 10 / 3,
|
|
198
|
+
'private/get-order-history': 100,
|
|
199
|
+
'private/get-open-orders': 10 / 3,
|
|
200
|
+
'private/get-order-detail': 1 / 3,
|
|
201
|
+
'private/get-trades': 100,
|
|
202
|
+
'private/change-account-leverage': 10 / 3,
|
|
203
|
+
'private/get-transactions': 10 / 3,
|
|
204
|
+
'private/create-subaccount-transfer': 10 / 3,
|
|
205
|
+
'private/get-subaccount-balances': 10 / 3,
|
|
206
|
+
'private/get-order-list': 10 / 3,
|
|
207
|
+
'private/create-withdrawal': 10 / 3,
|
|
208
|
+
'private/get-currency-networks': 10 / 3,
|
|
209
|
+
'private/get-deposit-address': 10 / 3,
|
|
210
|
+
'private/get-accounts': 10 / 3,
|
|
211
|
+
'private/get-withdrawal-history': 10 / 3,
|
|
212
|
+
'private/get-deposit-history': 10 / 3,
|
|
213
|
+
'private/get-fee-rate': 2,
|
|
214
|
+
'private/get-instrument-fee-rate': 2,
|
|
215
|
+
'private/staking/stake': 2,
|
|
216
|
+
'private/staking/unstake': 2,
|
|
217
|
+
'private/staking/get-staking-position': 2,
|
|
218
|
+
'private/staking/get-staking-instruments': 2,
|
|
219
|
+
'private/staking/get-open-stake': 2,
|
|
220
|
+
'private/staking/get-stake-history': 2,
|
|
221
|
+
'private/staking/get-reward-history': 2,
|
|
222
|
+
'private/staking/convert': 2,
|
|
223
|
+
'private/staking/get-open-convert': 2,
|
|
224
|
+
'private/staking/get-convert-history': 2,
|
|
225
|
+
},
|
|
226
|
+
},
|
|
227
|
+
},
|
|
228
|
+
'v2': {
|
|
229
|
+
'public': {
|
|
230
|
+
'get': {
|
|
231
|
+
'public/auth': 1,
|
|
232
|
+
'public/get-instruments': 1,
|
|
233
|
+
'public/get-book': 1,
|
|
234
|
+
'public/get-candlestick': 1,
|
|
235
|
+
'public/get-ticker': 1,
|
|
236
|
+
'public/get-trades': 1,
|
|
237
|
+
'public/margin/get-transfer-currencies': 1,
|
|
238
|
+
'public/margin/get-load-currenices': 1,
|
|
239
|
+
'public/respond-heartbeat': 1,
|
|
240
|
+
},
|
|
241
|
+
},
|
|
242
|
+
'private': {
|
|
243
|
+
'post': {
|
|
244
|
+
'private/set-cancel-on-disconnect': 10 / 3,
|
|
245
|
+
'private/get-cancel-on-disconnect': 10 / 3,
|
|
246
|
+
'private/create-withdrawal': 10 / 3,
|
|
247
|
+
'private/get-withdrawal-history': 10 / 3,
|
|
248
|
+
'private/get-currency-networks': 10 / 3,
|
|
249
|
+
'private/get-deposit-history': 10 / 3,
|
|
250
|
+
'private/get-deposit-address': 10 / 3,
|
|
251
|
+
'private/export/create-export-request': 10 / 3,
|
|
252
|
+
'private/export/get-export-requests': 10 / 3,
|
|
253
|
+
'private/export/download-export-output': 10 / 3,
|
|
254
|
+
'private/get-account-summary': 10 / 3,
|
|
255
|
+
'private/create-order': 2 / 3,
|
|
256
|
+
'private/cancel-order': 2 / 3,
|
|
257
|
+
'private/cancel-all-orders': 2 / 3,
|
|
258
|
+
'private/create-order-list': 10 / 3,
|
|
259
|
+
'private/get-order-history': 10 / 3,
|
|
260
|
+
'private/get-open-orders': 10 / 3,
|
|
261
|
+
'private/get-order-detail': 1 / 3,
|
|
262
|
+
'private/get-trades': 100,
|
|
263
|
+
'private/get-accounts': 10 / 3,
|
|
264
|
+
'private/get-subaccount-balances': 10 / 3,
|
|
265
|
+
'private/create-subaccount-transfer': 10 / 3,
|
|
266
|
+
'private/otc/get-otc-user': 10 / 3,
|
|
267
|
+
'private/otc/get-instruments': 10 / 3,
|
|
268
|
+
'private/otc/request-quote': 100,
|
|
269
|
+
'private/otc/accept-quote': 100,
|
|
270
|
+
'private/otc/get-quote-history': 10 / 3,
|
|
271
|
+
'private/otc/get-trade-history': 10 / 3,
|
|
272
|
+
'private/otc/create-order': 10 / 3,
|
|
273
|
+
},
|
|
274
|
+
},
|
|
275
|
+
},
|
|
276
|
+
'derivatives': {
|
|
277
|
+
'public': {
|
|
278
|
+
'get': {
|
|
279
|
+
'public/auth': 10 / 3,
|
|
280
|
+
'public/get-instruments': 10 / 3,
|
|
281
|
+
'public/get-book': 1,
|
|
282
|
+
'public/get-candlestick': 1,
|
|
283
|
+
'public/get-trades': 1,
|
|
284
|
+
'public/get-tickers': 1,
|
|
285
|
+
'public/get-valuations': 1,
|
|
286
|
+
'public/get-expired-settlement-price': 10 / 3,
|
|
287
|
+
'public/get-insurance': 1,
|
|
288
|
+
},
|
|
289
|
+
},
|
|
290
|
+
'private': {
|
|
291
|
+
'post': {
|
|
292
|
+
'private/set-cancel-on-disconnect': 10 / 3,
|
|
293
|
+
'private/get-cancel-on-disconnect': 10 / 3,
|
|
294
|
+
'private/user-balance': 10 / 3,
|
|
295
|
+
'private/user-balance-history': 10 / 3,
|
|
296
|
+
'private/get-positions': 10 / 3,
|
|
297
|
+
'private/create-order': 2 / 3,
|
|
298
|
+
'private/create-order-list': 10 / 3,
|
|
299
|
+
'private/cancel-order': 2 / 3,
|
|
300
|
+
'private/cancel-order-list': 10 / 3,
|
|
301
|
+
'private/cancel-all-orders': 2 / 3,
|
|
302
|
+
'private/close-position': 10 / 3,
|
|
303
|
+
'private/convert-collateral': 10 / 3,
|
|
304
|
+
'private/get-order-history': 100,
|
|
305
|
+
'private/get-open-orders': 10 / 3,
|
|
306
|
+
'private/get-order-detail': 1 / 3,
|
|
307
|
+
'private/get-trades': 100,
|
|
308
|
+
'private/change-account-leverage': 10 / 3,
|
|
309
|
+
'private/get-transactions': 10 / 3,
|
|
310
|
+
'private/create-subaccount-transfer': 10 / 3,
|
|
311
|
+
'private/get-subaccount-balances': 10 / 3,
|
|
312
|
+
'private/get-order-list': 10 / 3,
|
|
313
|
+
},
|
|
314
|
+
},
|
|
315
|
+
},
|
|
316
|
+
},
|
|
317
|
+
'fees': {
|
|
318
|
+
'trading': {
|
|
319
|
+
'maker': this.parseNumber('0.004'),
|
|
320
|
+
'taker': this.parseNumber('0.004'),
|
|
321
|
+
'tiers': {
|
|
322
|
+
'maker': [
|
|
323
|
+
[this.parseNumber('0'), this.parseNumber('0.004')],
|
|
324
|
+
[this.parseNumber('25000'), this.parseNumber('0.0035')],
|
|
325
|
+
[this.parseNumber('50000'), this.parseNumber('0.0015')],
|
|
326
|
+
[this.parseNumber('100000'), this.parseNumber('0.001')],
|
|
327
|
+
[this.parseNumber('250000'), this.parseNumber('0.0009')],
|
|
328
|
+
[this.parseNumber('1000000'), this.parseNumber('0.0008')],
|
|
329
|
+
[this.parseNumber('20000000'), this.parseNumber('0.0007')],
|
|
330
|
+
[this.parseNumber('100000000'), this.parseNumber('0.0006')],
|
|
331
|
+
[this.parseNumber('200000000'), this.parseNumber('0.0004')],
|
|
332
|
+
],
|
|
333
|
+
'taker': [
|
|
334
|
+
[this.parseNumber('0'), this.parseNumber('0.004')],
|
|
335
|
+
[this.parseNumber('25000'), this.parseNumber('0.0035')],
|
|
336
|
+
[this.parseNumber('50000'), this.parseNumber('0.0025')],
|
|
337
|
+
[this.parseNumber('100000'), this.parseNumber('0.0016')],
|
|
338
|
+
[this.parseNumber('250000'), this.parseNumber('0.00015')],
|
|
339
|
+
[this.parseNumber('1000000'), this.parseNumber('0.00014')],
|
|
340
|
+
[this.parseNumber('20000000'), this.parseNumber('0.00013')],
|
|
341
|
+
[this.parseNumber('100000000'), this.parseNumber('0.00012')],
|
|
342
|
+
[this.parseNumber('200000000'), this.parseNumber('0.0001')],
|
|
343
|
+
],
|
|
344
|
+
},
|
|
345
|
+
},
|
|
346
|
+
},
|
|
347
|
+
'options': {
|
|
348
|
+
'defaultType': 'spot',
|
|
349
|
+
'accountsById': {
|
|
350
|
+
'funding': 'SPOT',
|
|
351
|
+
'spot': 'SPOT',
|
|
352
|
+
'margin': 'MARGIN',
|
|
353
|
+
'derivatives': 'DERIVATIVES',
|
|
354
|
+
'swap': 'DERIVATIVES',
|
|
355
|
+
'future': 'DERIVATIVES',
|
|
356
|
+
},
|
|
357
|
+
'networks': {
|
|
358
|
+
'BEP20': 'BSC',
|
|
359
|
+
'ERC20': 'ETH',
|
|
360
|
+
'TRC20': 'TRON',
|
|
361
|
+
},
|
|
362
|
+
'broker': 'CCXT',
|
|
363
|
+
},
|
|
364
|
+
'features': {
|
|
365
|
+
'default': {
|
|
366
|
+
'sandbox': true,
|
|
367
|
+
'createOrder': {
|
|
368
|
+
'marginMode': true,
|
|
369
|
+
'triggerPrice': true,
|
|
370
|
+
// todo: implementation fix
|
|
371
|
+
'triggerPriceType': {
|
|
372
|
+
'last': true,
|
|
373
|
+
'mark': true,
|
|
374
|
+
'index': true,
|
|
375
|
+
},
|
|
376
|
+
'triggerDirection': false,
|
|
377
|
+
'stopLossPrice': true,
|
|
378
|
+
'takeProfitPrice': true,
|
|
379
|
+
'attachedStopLossTakeProfit': undefined,
|
|
380
|
+
'timeInForce': {
|
|
381
|
+
'IOC': true,
|
|
382
|
+
'FOK': true,
|
|
383
|
+
'PO': true,
|
|
384
|
+
'GTD': false,
|
|
385
|
+
},
|
|
386
|
+
'hedged': false,
|
|
387
|
+
'selfTradePrevention': true,
|
|
388
|
+
'trailing': false,
|
|
389
|
+
'iceberg': false,
|
|
390
|
+
'leverage': false,
|
|
391
|
+
'marketBuyByCost': true,
|
|
392
|
+
'marketBuyRequiresPrice': true,
|
|
393
|
+
},
|
|
394
|
+
'createOrders': {
|
|
395
|
+
'max': 10,
|
|
396
|
+
},
|
|
397
|
+
'fetchMyTrades': {
|
|
398
|
+
'marginMode': false,
|
|
399
|
+
'limit': 100,
|
|
400
|
+
'daysBack': undefined,
|
|
401
|
+
'untilDays': 1,
|
|
402
|
+
'symbolRequired': false,
|
|
403
|
+
},
|
|
404
|
+
'fetchOrder': {
|
|
405
|
+
'marginMode': false,
|
|
406
|
+
'trigger': false,
|
|
407
|
+
'trailing': false,
|
|
408
|
+
'symbolRequired': false,
|
|
409
|
+
},
|
|
410
|
+
'fetchOpenOrders': {
|
|
411
|
+
'marginMode': true,
|
|
412
|
+
'limit': 100,
|
|
413
|
+
'trigger': false,
|
|
414
|
+
'trailing': false,
|
|
415
|
+
'symbolRequired': false,
|
|
416
|
+
},
|
|
417
|
+
'fetchOrders': {
|
|
418
|
+
'marginMode': false,
|
|
419
|
+
'limit': 100,
|
|
420
|
+
'daysBack': undefined,
|
|
421
|
+
'untilDays': 1,
|
|
422
|
+
'trigger': false,
|
|
423
|
+
'trailing': false,
|
|
424
|
+
'symbolRequired': false,
|
|
425
|
+
},
|
|
426
|
+
'fetchClosedOrders': {
|
|
427
|
+
'marginMode': false,
|
|
428
|
+
'limit': 100,
|
|
429
|
+
'daysBack': undefined,
|
|
430
|
+
'daysBackCanceled': undefined,
|
|
431
|
+
'untilDays': 1,
|
|
432
|
+
'trigger': false,
|
|
433
|
+
'trailing': false,
|
|
434
|
+
'symbolRequired': false,
|
|
435
|
+
},
|
|
436
|
+
'fetchOHLCV': {
|
|
437
|
+
'limit': 300,
|
|
438
|
+
},
|
|
439
|
+
},
|
|
440
|
+
'spot': {
|
|
441
|
+
'extends': 'default',
|
|
442
|
+
},
|
|
443
|
+
'swap': {
|
|
444
|
+
'linear': {
|
|
445
|
+
'extends': 'default',
|
|
446
|
+
},
|
|
447
|
+
'inverse': {
|
|
448
|
+
'extends': 'default',
|
|
449
|
+
},
|
|
450
|
+
},
|
|
451
|
+
'future': {
|
|
452
|
+
'linear': {
|
|
453
|
+
'extends': 'default',
|
|
454
|
+
},
|
|
455
|
+
'inverse': {
|
|
456
|
+
'extends': 'default',
|
|
457
|
+
},
|
|
458
|
+
},
|
|
459
|
+
},
|
|
460
|
+
// https://exchange-docs.crypto.com/spot/index.html#response-and-reason-codes
|
|
461
|
+
'commonCurrencies': {
|
|
462
|
+
'USD_STABLE_COIN': 'USDC',
|
|
463
|
+
},
|
|
464
|
+
'precisionMode': TICK_SIZE,
|
|
465
|
+
'exceptions': {
|
|
466
|
+
'exact': {
|
|
467
|
+
'219': InvalidOrder,
|
|
468
|
+
'306': InsufficientFunds,
|
|
469
|
+
'314': InvalidOrder,
|
|
470
|
+
'325': InvalidOrder,
|
|
471
|
+
'415': InvalidOrder,
|
|
472
|
+
'10001': ExchangeError,
|
|
473
|
+
'10002': PermissionDenied,
|
|
474
|
+
'10003': PermissionDenied,
|
|
475
|
+
'10004': BadRequest,
|
|
476
|
+
'10005': PermissionDenied,
|
|
477
|
+
'10006': DDoSProtection,
|
|
478
|
+
'10007': InvalidNonce,
|
|
479
|
+
'10008': BadRequest,
|
|
480
|
+
'10009': BadRequest,
|
|
481
|
+
'20001': BadRequest,
|
|
482
|
+
'20002': InsufficientFunds,
|
|
483
|
+
'20005': AccountNotEnabled,
|
|
484
|
+
'30003': BadSymbol,
|
|
485
|
+
'30004': BadRequest,
|
|
486
|
+
'30005': BadRequest,
|
|
487
|
+
'30006': InvalidOrder,
|
|
488
|
+
'30007': InvalidOrder,
|
|
489
|
+
'30008': InvalidOrder,
|
|
490
|
+
'30009': InvalidOrder,
|
|
491
|
+
'30010': BadRequest,
|
|
492
|
+
'30013': InvalidOrder,
|
|
493
|
+
'30014': InvalidOrder,
|
|
494
|
+
'30016': InvalidOrder,
|
|
495
|
+
'30017': InvalidOrder,
|
|
496
|
+
'30023': InvalidOrder,
|
|
497
|
+
'30024': InvalidOrder,
|
|
498
|
+
'30025': InvalidOrder,
|
|
499
|
+
'40001': BadRequest,
|
|
500
|
+
'40002': BadRequest,
|
|
501
|
+
'40003': BadRequest,
|
|
502
|
+
'40004': BadRequest,
|
|
503
|
+
'40005': BadRequest,
|
|
504
|
+
'40006': BadRequest,
|
|
505
|
+
'40007': BadRequest,
|
|
506
|
+
'40101': AuthenticationError,
|
|
507
|
+
'40102': InvalidNonce,
|
|
508
|
+
'40103': AuthenticationError,
|
|
509
|
+
'40104': AuthenticationError,
|
|
510
|
+
'40107': BadRequest,
|
|
511
|
+
'40401': OrderNotFound,
|
|
512
|
+
'40801': RequestTimeout,
|
|
513
|
+
'42901': RateLimitExceeded,
|
|
514
|
+
'43005': InvalidOrder,
|
|
515
|
+
'43003': InvalidOrder,
|
|
516
|
+
'43004': InvalidOrder,
|
|
517
|
+
'43012': BadRequest,
|
|
518
|
+
'50001': ExchangeError,
|
|
519
|
+
'9010001': OnMaintenance, // {"code":9010001,"message":"SYSTEM_MAINTENANCE","details":"Crypto.com Exchange is currently under maintenance. Please refer to https://status.crypto.com for more details."}
|
|
520
|
+
},
|
|
521
|
+
'broad': {},
|
|
522
|
+
},
|
|
523
|
+
});
|
|
524
|
+
}
|
|
525
|
+
/**
|
|
526
|
+
* @method
|
|
527
|
+
* @name cryptocom#fetchCurrencies
|
|
528
|
+
* @description fetches all available currencies on an exchange
|
|
529
|
+
* @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#private-get-currency-networks
|
|
530
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
531
|
+
* @returns {object} an associative dictionary of currencies
|
|
532
|
+
*/
|
|
533
|
+
async fetchCurrencies(params = {}) {
|
|
534
|
+
// this endpoint requires authentication
|
|
535
|
+
if (!this.checkRequiredCredentials(false)) {
|
|
536
|
+
return undefined;
|
|
537
|
+
}
|
|
538
|
+
let skipFetchCurrencies = false;
|
|
539
|
+
[skipFetchCurrencies, params] = this.handleOptionAndParams(params, 'fetchCurrencies', 'skipFetchCurrencies', false);
|
|
540
|
+
if (skipFetchCurrencies) {
|
|
541
|
+
// sub-accounts can't access this endpoint
|
|
542
|
+
return undefined;
|
|
543
|
+
}
|
|
544
|
+
let response = {};
|
|
545
|
+
try {
|
|
546
|
+
response = await this.v1PrivatePostPrivateGetCurrencyNetworks(params);
|
|
547
|
+
}
|
|
548
|
+
catch (e) {
|
|
549
|
+
if (e instanceof ExchangeError) {
|
|
550
|
+
// sub-accounts can't access this endpoint
|
|
551
|
+
// {"code":"10001","msg":"SYS_ERROR"}
|
|
552
|
+
return undefined;
|
|
553
|
+
}
|
|
554
|
+
throw e;
|
|
555
|
+
// do nothing
|
|
556
|
+
// sub-accounts can't access this endpoint
|
|
557
|
+
}
|
|
558
|
+
//
|
|
559
|
+
// {
|
|
560
|
+
// "id": "1747502328559",
|
|
561
|
+
// "method": "private/get-currency-networks",
|
|
562
|
+
// "code": "0",
|
|
563
|
+
// "result": {
|
|
564
|
+
// "update_time": "1747502281000",
|
|
565
|
+
// "currency_map": {
|
|
566
|
+
// "USDT": {
|
|
567
|
+
// "full_name": "Tether USD",
|
|
568
|
+
// "default_network": "ETH",
|
|
569
|
+
// "network_list": [
|
|
570
|
+
// {
|
|
571
|
+
// "network_id": "ETH",
|
|
572
|
+
// "withdrawal_fee": "10.00000000",
|
|
573
|
+
// "withdraw_enabled": true,
|
|
574
|
+
// "min_withdrawal_amount": "20.0",
|
|
575
|
+
// "deposit_enabled": true,
|
|
576
|
+
// "confirmation_required": "32"
|
|
577
|
+
// },
|
|
578
|
+
// {
|
|
579
|
+
// "network_id": "CRONOS",
|
|
580
|
+
// "withdrawal_fee": "0.18000000",
|
|
581
|
+
// "withdraw_enabled": true,
|
|
582
|
+
// "min_withdrawal_amount": "0.35",
|
|
583
|
+
// "deposit_enabled": true,
|
|
584
|
+
// "confirmation_required": "15"
|
|
585
|
+
// },
|
|
586
|
+
// {
|
|
587
|
+
// "network_id": "SOL",
|
|
588
|
+
// "withdrawal_fee": "5.31000000",
|
|
589
|
+
// "withdraw_enabled": true,
|
|
590
|
+
// "min_withdrawal_amount": "10.62",
|
|
591
|
+
// "deposit_enabled": true,
|
|
592
|
+
// "confirmation_required": "1"
|
|
593
|
+
// }
|
|
594
|
+
// ]
|
|
595
|
+
// }
|
|
596
|
+
// }
|
|
597
|
+
// }
|
|
598
|
+
// }
|
|
599
|
+
//
|
|
600
|
+
const resultData = this.safeDict(response, 'result', {});
|
|
601
|
+
const currencyMap = this.safeDict(resultData, 'currency_map', {});
|
|
602
|
+
const keys = Object.keys(currencyMap);
|
|
603
|
+
const result = {};
|
|
604
|
+
for (let i = 0; i < keys.length; i++) {
|
|
605
|
+
const key = keys[i];
|
|
606
|
+
const currency = currencyMap[key];
|
|
607
|
+
const id = key;
|
|
608
|
+
const code = this.safeCurrencyCode(id);
|
|
609
|
+
const networks = {};
|
|
610
|
+
const chains = this.safeList(currency, 'network_list', []);
|
|
611
|
+
for (let j = 0; j < chains.length; j++) {
|
|
612
|
+
const chain = chains[j];
|
|
613
|
+
const networkId = this.safeString(chain, 'network_id');
|
|
614
|
+
const network = this.networkIdToCode(networkId);
|
|
615
|
+
networks[network] = {
|
|
616
|
+
'info': chain,
|
|
617
|
+
'id': networkId,
|
|
618
|
+
'network': network,
|
|
619
|
+
'active': undefined,
|
|
620
|
+
'deposit': this.safeBool(chain, 'deposit_enabled', false),
|
|
621
|
+
'withdraw': this.safeBool(chain, 'withdraw_enabled', false),
|
|
622
|
+
'fee': this.safeNumber(chain, 'withdrawal_fee'),
|
|
623
|
+
'precision': undefined,
|
|
624
|
+
'limits': {
|
|
625
|
+
'withdraw': {
|
|
626
|
+
'min': this.safeNumber(chain, 'min_withdrawal_amount'),
|
|
627
|
+
'max': undefined,
|
|
628
|
+
},
|
|
629
|
+
},
|
|
630
|
+
};
|
|
631
|
+
}
|
|
632
|
+
result[code] = this.safeCurrencyStructure({
|
|
633
|
+
'info': currency,
|
|
634
|
+
'id': id,
|
|
635
|
+
'code': code,
|
|
636
|
+
'name': this.safeString(currency, 'full_name'),
|
|
637
|
+
'active': undefined,
|
|
638
|
+
'deposit': undefined,
|
|
639
|
+
'withdraw': undefined,
|
|
640
|
+
'fee': undefined,
|
|
641
|
+
'precision': undefined,
|
|
642
|
+
'limits': {
|
|
643
|
+
'amount': {
|
|
644
|
+
'min': undefined,
|
|
645
|
+
'max': undefined,
|
|
646
|
+
},
|
|
647
|
+
},
|
|
648
|
+
'type': 'crypto',
|
|
649
|
+
'networks': networks,
|
|
650
|
+
});
|
|
651
|
+
}
|
|
652
|
+
return result;
|
|
653
|
+
}
|
|
654
|
+
/**
|
|
655
|
+
* @method
|
|
656
|
+
* @name cryptocom#fetchMarkets
|
|
657
|
+
* @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#public-get-instruments
|
|
658
|
+
* @description retrieves data on all markets for cryptocom
|
|
659
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
660
|
+
* @returns {object[]} an array of objects representing market data
|
|
661
|
+
*/
|
|
662
|
+
async fetchMarkets(params = {}) {
|
|
663
|
+
const response = await this.v1PublicGetPublicGetInstruments(params);
|
|
664
|
+
//
|
|
665
|
+
// {
|
|
666
|
+
// "id": 1,
|
|
667
|
+
// "method": "public/get-instruments",
|
|
668
|
+
// "code": 0,
|
|
669
|
+
// "result": {
|
|
670
|
+
// "data": [
|
|
671
|
+
// {
|
|
672
|
+
// "symbol": "BTC_USDT",
|
|
673
|
+
// "inst_type": "CCY_PAIR",
|
|
674
|
+
// "display_name": "BTC/USDT",
|
|
675
|
+
// "base_ccy": "BTC",
|
|
676
|
+
// "quote_ccy": "USDT",
|
|
677
|
+
// "quote_decimals": 2,
|
|
678
|
+
// "quantity_decimals": 5,
|
|
679
|
+
// "price_tick_size": "0.01",
|
|
680
|
+
// "qty_tick_size": "0.00001",
|
|
681
|
+
// "max_leverage": "50",
|
|
682
|
+
// "tradable": true,
|
|
683
|
+
// "expiry_timestamp_ms": 0,
|
|
684
|
+
// "beta_product": false,
|
|
685
|
+
// "margin_buy_enabled": false,
|
|
686
|
+
// "margin_sell_enabled": true
|
|
687
|
+
// },
|
|
688
|
+
// {
|
|
689
|
+
// "symbol": "RUNEUSD-PERP",
|
|
690
|
+
// "inst_type": "PERPETUAL_SWAP",
|
|
691
|
+
// "display_name": "RUNEUSD Perpetual",
|
|
692
|
+
// "base_ccy": "RUNE",
|
|
693
|
+
// "quote_ccy": "USD",
|
|
694
|
+
// "quote_decimals": 3,
|
|
695
|
+
// "quantity_decimals": 1,
|
|
696
|
+
// "price_tick_size": "0.001",
|
|
697
|
+
// "qty_tick_size": "0.1",
|
|
698
|
+
// "max_leverage": "50",
|
|
699
|
+
// "tradable": true,
|
|
700
|
+
// "expiry_timestamp_ms": 0,
|
|
701
|
+
// "beta_product": false,
|
|
702
|
+
// "underlying_symbol": "RUNEUSD-INDEX",
|
|
703
|
+
// "contract_size": "1",
|
|
704
|
+
// "margin_buy_enabled": false,
|
|
705
|
+
// "margin_sell_enabled": false
|
|
706
|
+
// },
|
|
707
|
+
// {
|
|
708
|
+
// "symbol": "ETHUSD-230825",
|
|
709
|
+
// "inst_type": "FUTURE",
|
|
710
|
+
// "display_name": "ETHUSD Futures 20230825",
|
|
711
|
+
// "base_ccy": "ETH",
|
|
712
|
+
// "quote_ccy": "USD",
|
|
713
|
+
// "quote_decimals": 2,
|
|
714
|
+
// "quantity_decimals": 4,
|
|
715
|
+
// "price_tick_size": "0.01",
|
|
716
|
+
// "qty_tick_size": "0.0001",
|
|
717
|
+
// "max_leverage": "100",
|
|
718
|
+
// "tradable": true,
|
|
719
|
+
// "expiry_timestamp_ms": 1692950400000,
|
|
720
|
+
// "beta_product": false,
|
|
721
|
+
// "underlying_symbol": "ETHUSD-INDEX",
|
|
722
|
+
// "contract_size": "1",
|
|
723
|
+
// "margin_buy_enabled": false,
|
|
724
|
+
// "margin_sell_enabled": false
|
|
725
|
+
// },
|
|
726
|
+
// {
|
|
727
|
+
// "symbol": "BTCUSD-230630-CW30000",
|
|
728
|
+
// "inst_type": "WARRANT",
|
|
729
|
+
// "display_name": "BTCUSD-230630-CW30000",
|
|
730
|
+
// "base_ccy": "BTC",
|
|
731
|
+
// "quote_ccy": "USD",
|
|
732
|
+
// "quote_decimals": 3,
|
|
733
|
+
// "quantity_decimals": 0,
|
|
734
|
+
// "price_tick_size": "0.001",
|
|
735
|
+
// "qty_tick_size": "10",
|
|
736
|
+
// "max_leverage": "50",
|
|
737
|
+
// "tradable": true,
|
|
738
|
+
// "expiry_timestamp_ms": 1688112000000,
|
|
739
|
+
// "beta_product": false,
|
|
740
|
+
// "underlying_symbol": "BTCUSD-INDEX",
|
|
741
|
+
// "put_call": "CALL",
|
|
742
|
+
// "strike": "30000",
|
|
743
|
+
// "contract_size": "0.0001",
|
|
744
|
+
// "margin_buy_enabled": false,
|
|
745
|
+
// "margin_sell_enabled": false
|
|
746
|
+
// },
|
|
747
|
+
// ]
|
|
748
|
+
// }
|
|
749
|
+
// }
|
|
750
|
+
//
|
|
751
|
+
const resultResponse = this.safeDict(response, 'result', {});
|
|
752
|
+
const data = this.safeList(resultResponse, 'data', []);
|
|
753
|
+
const result = [];
|
|
754
|
+
for (let i = 0; i < data.length; i++) {
|
|
755
|
+
const market = data[i];
|
|
756
|
+
const inst_type = this.safeString(market, 'inst_type');
|
|
757
|
+
const spot = inst_type === 'CCY_PAIR';
|
|
758
|
+
const swap = inst_type === 'PERPETUAL_SWAP';
|
|
759
|
+
const future = inst_type === 'FUTURE';
|
|
760
|
+
const option = inst_type === 'WARRANT';
|
|
761
|
+
const baseId = this.safeString(market, 'base_ccy');
|
|
762
|
+
const quoteId = this.safeString(market, 'quote_ccy');
|
|
763
|
+
const settleId = spot ? undefined : quoteId;
|
|
764
|
+
const base = this.safeCurrencyCode(baseId);
|
|
765
|
+
const quote = this.safeCurrencyCode(quoteId);
|
|
766
|
+
const settle = spot ? undefined : this.safeCurrencyCode(settleId);
|
|
767
|
+
const optionType = this.safeStringLower(market, 'put_call');
|
|
768
|
+
const strike = this.safeString(market, 'strike');
|
|
769
|
+
const marginBuyEnabled = this.safeBool(market, 'margin_buy_enabled');
|
|
770
|
+
const marginSellEnabled = this.safeBool(market, 'margin_sell_enabled');
|
|
771
|
+
const expiryString = this.omitZero(this.safeString(market, 'expiry_timestamp_ms'));
|
|
772
|
+
const expiry = (expiryString !== undefined) ? parseInt(expiryString) : undefined;
|
|
773
|
+
let symbol = base + '/' + quote;
|
|
774
|
+
let type = undefined;
|
|
775
|
+
let contract = undefined;
|
|
776
|
+
if (inst_type === 'CCY_PAIR') {
|
|
777
|
+
type = 'spot';
|
|
778
|
+
contract = false;
|
|
779
|
+
}
|
|
780
|
+
else if (inst_type === 'PERPETUAL_SWAP') {
|
|
781
|
+
type = 'swap';
|
|
782
|
+
symbol = symbol + ':' + quote;
|
|
783
|
+
contract = true;
|
|
784
|
+
}
|
|
785
|
+
else if (inst_type === 'FUTURE') {
|
|
786
|
+
type = 'future';
|
|
787
|
+
symbol = symbol + ':' + quote + '-' + this.yymmdd(expiry);
|
|
788
|
+
contract = true;
|
|
789
|
+
}
|
|
790
|
+
else if (inst_type === 'WARRANT') {
|
|
791
|
+
type = 'option';
|
|
792
|
+
const symbolOptionType = (optionType === 'call') ? 'C' : 'P';
|
|
793
|
+
symbol = symbol + ':' + quote + '-' + this.yymmdd(expiry) + '-' + strike + '-' + symbolOptionType;
|
|
794
|
+
contract = true;
|
|
795
|
+
}
|
|
796
|
+
result.push({
|
|
797
|
+
'id': this.safeString(market, 'symbol'),
|
|
798
|
+
'symbol': symbol,
|
|
799
|
+
'base': base,
|
|
800
|
+
'quote': quote,
|
|
801
|
+
'settle': settle,
|
|
802
|
+
'baseId': baseId,
|
|
803
|
+
'quoteId': quoteId,
|
|
804
|
+
'settleId': settleId,
|
|
805
|
+
'type': type,
|
|
806
|
+
'spot': spot,
|
|
807
|
+
'margin': ((marginBuyEnabled) || (marginSellEnabled)),
|
|
808
|
+
'swap': swap,
|
|
809
|
+
'future': future,
|
|
810
|
+
'option': option,
|
|
811
|
+
'active': this.safeBool(market, 'tradable'),
|
|
812
|
+
'contract': contract,
|
|
813
|
+
'linear': (contract) ? true : undefined,
|
|
814
|
+
'inverse': (contract) ? false : undefined,
|
|
815
|
+
'contractSize': this.safeNumber(market, 'contract_size'),
|
|
816
|
+
'expiry': expiry,
|
|
817
|
+
'expiryDatetime': this.iso8601(expiry),
|
|
818
|
+
'strike': this.parseNumber(strike),
|
|
819
|
+
'optionType': optionType,
|
|
820
|
+
'precision': {
|
|
821
|
+
'price': this.parseNumber(this.safeString(market, 'price_tick_size')),
|
|
822
|
+
'amount': this.parseNumber(this.safeString(market, 'qty_tick_size')),
|
|
823
|
+
},
|
|
824
|
+
'limits': {
|
|
825
|
+
'leverage': {
|
|
826
|
+
'min': this.parseNumber('1'),
|
|
827
|
+
'max': this.safeNumber(market, 'max_leverage'),
|
|
828
|
+
},
|
|
829
|
+
'amount': {
|
|
830
|
+
'min': undefined,
|
|
831
|
+
'max': undefined,
|
|
832
|
+
},
|
|
833
|
+
'price': {
|
|
834
|
+
'min': undefined,
|
|
835
|
+
'max': undefined,
|
|
836
|
+
},
|
|
837
|
+
'cost': {
|
|
838
|
+
'min': undefined,
|
|
839
|
+
'max': undefined,
|
|
840
|
+
},
|
|
841
|
+
},
|
|
842
|
+
'created': undefined,
|
|
843
|
+
'info': market,
|
|
844
|
+
});
|
|
845
|
+
}
|
|
846
|
+
return result;
|
|
847
|
+
}
|
|
848
|
+
/**
|
|
849
|
+
* @method
|
|
850
|
+
* @name cryptocom#fetchTickers
|
|
851
|
+
* @description fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
|
|
852
|
+
* @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#public-get-tickers
|
|
853
|
+
* @see https://exchange-docs.crypto.com/derivatives/index.html#public-get-tickers
|
|
854
|
+
* @param {string[]|undefined} symbols unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
|
|
855
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
856
|
+
* @returns {object} a dictionary of [ticker structures]{@link https://docs.ccxt.com/#/?id=ticker-structure}
|
|
857
|
+
*/
|
|
858
|
+
async fetchTickers(symbols = undefined, params = {}) {
|
|
859
|
+
await this.loadMarkets();
|
|
860
|
+
let market = undefined;
|
|
861
|
+
const request = {};
|
|
862
|
+
if (symbols !== undefined) {
|
|
863
|
+
let symbol = undefined;
|
|
864
|
+
if (Array.isArray(symbols)) {
|
|
865
|
+
const symbolsLength = symbols.length;
|
|
866
|
+
if (symbolsLength > 1) {
|
|
867
|
+
throw new BadRequest(this.id + ' fetchTickers() symbols argument cannot contain more than 1 symbol');
|
|
868
|
+
}
|
|
869
|
+
symbol = symbols[0];
|
|
870
|
+
}
|
|
871
|
+
else {
|
|
872
|
+
symbol = symbols;
|
|
873
|
+
}
|
|
874
|
+
market = this.market(symbol);
|
|
875
|
+
request['instrument_name'] = market['id'];
|
|
876
|
+
}
|
|
877
|
+
const response = await this.v1PublicGetPublicGetTickers(this.extend(request, params));
|
|
878
|
+
//
|
|
879
|
+
// {
|
|
880
|
+
// "id": -1,
|
|
881
|
+
// "method": "public/get-tickers",
|
|
882
|
+
// "code": 0,
|
|
883
|
+
// "result": {
|
|
884
|
+
// "data": [
|
|
885
|
+
// {
|
|
886
|
+
// "i": "AVAXUSD-PERP",
|
|
887
|
+
// "h": "13.209",
|
|
888
|
+
// "l": "12.148",
|
|
889
|
+
// "a": "13.209",
|
|
890
|
+
// "v": "1109.8",
|
|
891
|
+
// "vv": "14017.33",
|
|
892
|
+
// "c": "0.0732",
|
|
893
|
+
// "b": "13.210",
|
|
894
|
+
// "k": "13.230",
|
|
895
|
+
// "oi": "10888.9",
|
|
896
|
+
// "t": 1687402657575
|
|
897
|
+
// },
|
|
898
|
+
// ]
|
|
899
|
+
// }
|
|
900
|
+
// }
|
|
901
|
+
//
|
|
902
|
+
const result = this.safeDict(response, 'result', {});
|
|
903
|
+
const data = this.safeList(result, 'data', []);
|
|
904
|
+
return this.parseTickers(data, symbols);
|
|
905
|
+
}
|
|
906
|
+
/**
|
|
907
|
+
* @method
|
|
908
|
+
* @name cryptocom#fetchTicker
|
|
909
|
+
* @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#public-get-tickers
|
|
910
|
+
* @description fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
|
911
|
+
* @param {string} symbol unified symbol of the market to fetch the ticker for
|
|
912
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
913
|
+
* @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
|
|
914
|
+
*/
|
|
915
|
+
async fetchTicker(symbol, params = {}) {
|
|
916
|
+
await this.loadMarkets();
|
|
917
|
+
symbol = this.symbol(symbol);
|
|
918
|
+
const tickers = await this.fetchTickers([symbol], params);
|
|
919
|
+
return this.safeValue(tickers, symbol);
|
|
920
|
+
}
|
|
921
|
+
/**
|
|
922
|
+
* @method
|
|
923
|
+
* @name cryptocom#fetchOrders
|
|
924
|
+
* @description fetches information on multiple orders made by the user
|
|
925
|
+
* @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#private-get-order-history
|
|
926
|
+
* @param {string} symbol unified market symbol of the market the orders were made in
|
|
927
|
+
* @param {int} [since] the earliest time in ms to fetch orders for, max date range is one day
|
|
928
|
+
* @param {int} [limit] the maximum number of order structures to retrieve, default 100 max 100
|
|
929
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
930
|
+
* @param {int} [params.until] timestamp in ms for the ending date filter, default is the current time
|
|
931
|
+
* @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
|
|
932
|
+
* @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
933
|
+
*/
|
|
934
|
+
async fetchOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
935
|
+
await this.loadMarkets();
|
|
936
|
+
let paginate = false;
|
|
937
|
+
[paginate, params] = this.handleOptionAndParams(params, 'fetchOrders', 'paginate');
|
|
938
|
+
if (paginate) {
|
|
939
|
+
return await this.fetchPaginatedCallDynamic('fetchOrders', symbol, since, limit, params);
|
|
940
|
+
}
|
|
941
|
+
let market = undefined;
|
|
942
|
+
const request = {};
|
|
943
|
+
if (symbol !== undefined) {
|
|
944
|
+
market = this.market(symbol);
|
|
945
|
+
request['instrument_name'] = market['id'];
|
|
946
|
+
}
|
|
947
|
+
if (since !== undefined) {
|
|
948
|
+
request['start_time'] = since;
|
|
949
|
+
}
|
|
950
|
+
if (limit !== undefined) {
|
|
951
|
+
request['limit'] = limit;
|
|
952
|
+
}
|
|
953
|
+
const until = this.safeInteger(params, 'until');
|
|
954
|
+
params = this.omit(params, ['until']);
|
|
955
|
+
if (until !== undefined) {
|
|
956
|
+
request['end_time'] = until;
|
|
957
|
+
}
|
|
958
|
+
const response = await this.v1PrivatePostPrivateGetOrderHistory(this.extend(request, params));
|
|
959
|
+
//
|
|
960
|
+
// {
|
|
961
|
+
// "id": 1686881486183,
|
|
962
|
+
// "method": "private/get-order-history",
|
|
963
|
+
// "code": 0,
|
|
964
|
+
// "result": {
|
|
965
|
+
// "data": [
|
|
966
|
+
// {
|
|
967
|
+
// "account_id": "ce075bef-1234-4321-bd6g-ff9007252e63",
|
|
968
|
+
// "order_id": "6142909895014042762",
|
|
969
|
+
// "client_oid": "4e918597-1234-4321-8201-a7577e1e1d91",
|
|
970
|
+
// "order_type": "MARKET",
|
|
971
|
+
// "time_in_force": "GOOD_TILL_CANCEL",
|
|
972
|
+
// "side": "SELL",
|
|
973
|
+
// "exec_inst": [ ],
|
|
974
|
+
// "quantity": "0.00024",
|
|
975
|
+
// "order_value": "5.7054672",
|
|
976
|
+
// "maker_fee_rate": "0",
|
|
977
|
+
// "taker_fee_rate": "0",
|
|
978
|
+
// "avg_price": "25023.97",
|
|
979
|
+
// "trigger_price": "0",
|
|
980
|
+
// "ref_price": "0",
|
|
981
|
+
// "ref_price_type": "NULL_VAL",
|
|
982
|
+
// "cumulative_quantity": "0.00024",
|
|
983
|
+
// "cumulative_value": "6.0057528",
|
|
984
|
+
// "cumulative_fee": "0.001501438200",
|
|
985
|
+
// "status": "FILLED",
|
|
986
|
+
// "update_user_id": "ce075bef-1234-4321-bd6g-ff9007252e63",
|
|
987
|
+
// "order_date": "2023-06-15",
|
|
988
|
+
// "instrument_name": "BTC_USD",
|
|
989
|
+
// "fee_instrument_name": "USD",
|
|
990
|
+
// "create_time": 1686805465891,
|
|
991
|
+
// "create_time_ns": "1686805465891812578",
|
|
992
|
+
// "update_time": 1686805465891
|
|
993
|
+
// }
|
|
994
|
+
// ]
|
|
995
|
+
// }
|
|
996
|
+
// }
|
|
997
|
+
//
|
|
998
|
+
const data = this.safeDict(response, 'result', {});
|
|
999
|
+
const orders = this.safeList(data, 'data', []);
|
|
1000
|
+
return this.parseOrders(orders, market, since, limit);
|
|
1001
|
+
}
|
|
1002
|
+
/**
|
|
1003
|
+
* @method
|
|
1004
|
+
* @name cryptocom#fetchTrades
|
|
1005
|
+
* @description get a list of the most recent trades for a particular symbol
|
|
1006
|
+
* @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#public-get-trades
|
|
1007
|
+
* @param {string} symbol unified symbol of the market to fetch trades for
|
|
1008
|
+
* @param {int} [since] timestamp in ms of the earliest trade to fetch, maximum date range is one day
|
|
1009
|
+
* @param {int} [limit] the maximum number of trades to fetch
|
|
1010
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1011
|
+
* @param {int} [params.until] timestamp in ms for the ending date filter, default is the current time
|
|
1012
|
+
* @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
|
|
1013
|
+
* @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
|
|
1014
|
+
*/
|
|
1015
|
+
async fetchTrades(symbol, since = undefined, limit = undefined, params = {}) {
|
|
1016
|
+
await this.loadMarkets();
|
|
1017
|
+
let paginate = false;
|
|
1018
|
+
[paginate, params] = this.handleOptionAndParams(params, 'fetchTrades', 'paginate');
|
|
1019
|
+
if (paginate) {
|
|
1020
|
+
return await this.fetchPaginatedCallDynamic('fetchTrades', symbol, since, limit, params);
|
|
1021
|
+
}
|
|
1022
|
+
const market = this.market(symbol);
|
|
1023
|
+
const request = {
|
|
1024
|
+
'instrument_name': market['id'],
|
|
1025
|
+
};
|
|
1026
|
+
if (since !== undefined) {
|
|
1027
|
+
request['start_ts'] = since;
|
|
1028
|
+
}
|
|
1029
|
+
if (limit !== undefined) {
|
|
1030
|
+
request['count'] = limit;
|
|
1031
|
+
}
|
|
1032
|
+
const until = this.safeInteger(params, 'until');
|
|
1033
|
+
params = this.omit(params, ['until']);
|
|
1034
|
+
if (until !== undefined) {
|
|
1035
|
+
request['end_ts'] = until;
|
|
1036
|
+
}
|
|
1037
|
+
const response = await this.v1PublicGetPublicGetTrades(this.extend(request, params));
|
|
1038
|
+
//
|
|
1039
|
+
// {
|
|
1040
|
+
// "id": -1,
|
|
1041
|
+
// "method": "public/get-trades",
|
|
1042
|
+
// "code": 0,
|
|
1043
|
+
// "result": {
|
|
1044
|
+
// "data": [
|
|
1045
|
+
// {
|
|
1046
|
+
// "s": "sell",
|
|
1047
|
+
// "p": "26386.00",
|
|
1048
|
+
// "q": "0.00453",
|
|
1049
|
+
// "t": 1686944282062,
|
|
1050
|
+
// "tn" : 1704476468851524373,
|
|
1051
|
+
// "d": "4611686018455979970",
|
|
1052
|
+
// "i": "BTC_USD"
|
|
1053
|
+
// },
|
|
1054
|
+
// ]
|
|
1055
|
+
// }
|
|
1056
|
+
// }
|
|
1057
|
+
//
|
|
1058
|
+
const result = this.safeDict(response, 'result', {});
|
|
1059
|
+
const trades = this.safeList(result, 'data', []);
|
|
1060
|
+
return this.parseTrades(trades, market, since, limit);
|
|
1061
|
+
}
|
|
1062
|
+
/**
|
|
1063
|
+
* @method
|
|
1064
|
+
* @name cryptocom#fetchOHLCV
|
|
1065
|
+
* @description fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
|
|
1066
|
+
* @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#public-get-candlestick
|
|
1067
|
+
* @param {string} symbol unified symbol of the market to fetch OHLCV data for
|
|
1068
|
+
* @param {string} timeframe the length of time each candle represents
|
|
1069
|
+
* @param {int} [since] timestamp in ms of the earliest candle to fetch
|
|
1070
|
+
* @param {int} [limit] the maximum amount of candles to fetch
|
|
1071
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1072
|
+
* @param {int} [params.until] timestamp in ms for the ending date filter, default is the current time
|
|
1073
|
+
* @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
|
|
1074
|
+
* @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume
|
|
1075
|
+
*/
|
|
1076
|
+
async fetchOHLCV(symbol, timeframe = '1m', since = undefined, limit = undefined, params = {}) {
|
|
1077
|
+
await this.loadMarkets();
|
|
1078
|
+
let paginate = false;
|
|
1079
|
+
[paginate, params] = this.handleOptionAndParams(params, 'fetchOHLCV', 'paginate', false);
|
|
1080
|
+
if (paginate) {
|
|
1081
|
+
return await this.fetchPaginatedCallDeterministic('fetchOHLCV', symbol, since, limit, timeframe, params, 300);
|
|
1082
|
+
}
|
|
1083
|
+
const market = this.market(symbol);
|
|
1084
|
+
const request = {
|
|
1085
|
+
'instrument_name': market['id'],
|
|
1086
|
+
'timeframe': this.safeString(this.timeframes, timeframe, timeframe),
|
|
1087
|
+
};
|
|
1088
|
+
if (limit !== undefined) {
|
|
1089
|
+
if (limit > 300) {
|
|
1090
|
+
limit = 300;
|
|
1091
|
+
}
|
|
1092
|
+
request['count'] = limit;
|
|
1093
|
+
}
|
|
1094
|
+
const now = this.microseconds();
|
|
1095
|
+
const duration = this.parseTimeframe(timeframe);
|
|
1096
|
+
const until = this.safeInteger(params, 'until', now);
|
|
1097
|
+
params = this.omit(params, ['until']);
|
|
1098
|
+
if (since !== undefined) {
|
|
1099
|
+
request['start_ts'] = since - duration * 1000;
|
|
1100
|
+
if (limit !== undefined) {
|
|
1101
|
+
request['end_ts'] = this.sum(since, duration * limit * 1000);
|
|
1102
|
+
}
|
|
1103
|
+
else {
|
|
1104
|
+
request['end_ts'] = until;
|
|
1105
|
+
}
|
|
1106
|
+
}
|
|
1107
|
+
else {
|
|
1108
|
+
request['end_ts'] = until;
|
|
1109
|
+
}
|
|
1110
|
+
const response = await this.v1PublicGetPublicGetCandlestick(this.extend(request, params));
|
|
1111
|
+
//
|
|
1112
|
+
// {
|
|
1113
|
+
// "id": -1,
|
|
1114
|
+
// "method": "public/get-candlestick",
|
|
1115
|
+
// "code": 0,
|
|
1116
|
+
// "result": {
|
|
1117
|
+
// "interval": "1m",
|
|
1118
|
+
// "data": [
|
|
1119
|
+
// {
|
|
1120
|
+
// "o": "26949.89",
|
|
1121
|
+
// "h": "26957.64",
|
|
1122
|
+
// "l": "26948.24",
|
|
1123
|
+
// "c": "26950.00",
|
|
1124
|
+
// "v": "0.0670",
|
|
1125
|
+
// "t": 1687237080000
|
|
1126
|
+
// },
|
|
1127
|
+
// ],
|
|
1128
|
+
// "instrument_name": "BTC_USD"
|
|
1129
|
+
// }
|
|
1130
|
+
// }
|
|
1131
|
+
//
|
|
1132
|
+
const result = this.safeDict(response, 'result', {});
|
|
1133
|
+
const data = this.safeList(result, 'data', []);
|
|
1134
|
+
return this.parseOHLCVs(data, market, timeframe, since, limit);
|
|
1135
|
+
}
|
|
1136
|
+
/**
|
|
1137
|
+
* @method
|
|
1138
|
+
* @name cryptocom#fetchOrderBook
|
|
1139
|
+
* @description fetches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
|
|
1140
|
+
* @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#public-get-book
|
|
1141
|
+
* @param {string} symbol unified symbol of the market to fetch the order book for
|
|
1142
|
+
* @param {int} [limit] the number of order book entries to return, max 50
|
|
1143
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1144
|
+
* @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
|
|
1145
|
+
*/
|
|
1146
|
+
async fetchOrderBook(symbol, limit = undefined, params = {}) {
|
|
1147
|
+
await this.loadMarkets();
|
|
1148
|
+
const market = this.market(symbol);
|
|
1149
|
+
const request = {
|
|
1150
|
+
'instrument_name': market['id'],
|
|
1151
|
+
};
|
|
1152
|
+
if (limit) {
|
|
1153
|
+
request['depth'] = Math.min(limit, 50); // max 50
|
|
1154
|
+
}
|
|
1155
|
+
const response = await this.v1PublicGetPublicGetBook(this.extend(request, params));
|
|
1156
|
+
//
|
|
1157
|
+
// {
|
|
1158
|
+
// "id": -1,
|
|
1159
|
+
// "method": "public/get-book",
|
|
1160
|
+
// "code": 0,
|
|
1161
|
+
// "result": {
|
|
1162
|
+
// "depth": 3,
|
|
1163
|
+
// "data": [
|
|
1164
|
+
// {
|
|
1165
|
+
// "bids": [ [ "30025.00", "0.00004", "1" ], [ "30020.15", "0.02498", "1" ], [ "30020.00", "0.00004", "1" ] ],
|
|
1166
|
+
// "asks": [ [ "30025.01", "0.04090", "1" ], [ "30025.70", "0.01000", "1" ], [ "30026.94", "0.02681", "1" ] ],
|
|
1167
|
+
// "t": 1687491287380
|
|
1168
|
+
// }
|
|
1169
|
+
// ],
|
|
1170
|
+
// "instrument_name": "BTC_USD"
|
|
1171
|
+
// }
|
|
1172
|
+
// }
|
|
1173
|
+
//
|
|
1174
|
+
const result = this.safeDict(response, 'result', {});
|
|
1175
|
+
const data = this.safeList(result, 'data', []);
|
|
1176
|
+
const orderBook = this.safeValue(data, 0);
|
|
1177
|
+
const timestamp = this.safeInteger(orderBook, 't');
|
|
1178
|
+
return this.parseOrderBook(orderBook, symbol, timestamp);
|
|
1179
|
+
}
|
|
1180
|
+
parseBalance(response) {
|
|
1181
|
+
const responseResult = this.safeDict(response, 'result', {});
|
|
1182
|
+
const data = this.safeList(responseResult, 'data', []);
|
|
1183
|
+
const positionBalances = this.safeValue(data[0], 'position_balances', []);
|
|
1184
|
+
const result = { 'info': response };
|
|
1185
|
+
for (let i = 0; i < positionBalances.length; i++) {
|
|
1186
|
+
const balance = positionBalances[i];
|
|
1187
|
+
const currencyId = this.safeString(balance, 'instrument_name');
|
|
1188
|
+
const code = this.safeCurrencyCode(currencyId);
|
|
1189
|
+
const account = this.account();
|
|
1190
|
+
account['total'] = this.safeString(balance, 'quantity');
|
|
1191
|
+
account['used'] = this.safeString(balance, 'reserved_qty');
|
|
1192
|
+
result[code] = account;
|
|
1193
|
+
}
|
|
1194
|
+
return this.safeBalance(result);
|
|
1195
|
+
}
|
|
1196
|
+
/**
|
|
1197
|
+
* @method
|
|
1198
|
+
* @name cryptocom#fetchBalance
|
|
1199
|
+
* @description query for balance and get the amount of funds available for trading or funds locked in orders
|
|
1200
|
+
* @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#private-user-balance
|
|
1201
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1202
|
+
* @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}
|
|
1203
|
+
*/
|
|
1204
|
+
async fetchBalance(params = {}) {
|
|
1205
|
+
await this.loadMarkets();
|
|
1206
|
+
const response = await this.v1PrivatePostPrivateUserBalance(params);
|
|
1207
|
+
//
|
|
1208
|
+
// {
|
|
1209
|
+
// "id": 1687300499018,
|
|
1210
|
+
// "method": "private/user-balance",
|
|
1211
|
+
// "code": 0,
|
|
1212
|
+
// "result": {
|
|
1213
|
+
// "data": [
|
|
1214
|
+
// {
|
|
1215
|
+
// "total_available_balance": "5.84684368",
|
|
1216
|
+
// "total_margin_balance": "5.84684368",
|
|
1217
|
+
// "total_initial_margin": "0",
|
|
1218
|
+
// "total_maintenance_margin": "0",
|
|
1219
|
+
// "total_position_cost": "0",
|
|
1220
|
+
// "total_cash_balance": "6.44412101",
|
|
1221
|
+
// "total_collateral_value": "5.846843685",
|
|
1222
|
+
// "total_session_unrealized_pnl": "0",
|
|
1223
|
+
// "instrument_name": "USD",
|
|
1224
|
+
// "total_session_realized_pnl": "0",
|
|
1225
|
+
// "position_balances": [
|
|
1226
|
+
// {
|
|
1227
|
+
// "quantity": "0.0002119875",
|
|
1228
|
+
// "reserved_qty": "0",
|
|
1229
|
+
// "collateral_weight": "0.9",
|
|
1230
|
+
// "collateral_amount": "5.37549592",
|
|
1231
|
+
// "market_value": "5.97277325",
|
|
1232
|
+
// "max_withdrawal_balance": "0.00021198",
|
|
1233
|
+
// "instrument_name": "BTC",
|
|
1234
|
+
// "hourly_interest_rate": "0"
|
|
1235
|
+
// },
|
|
1236
|
+
// ],
|
|
1237
|
+
// "total_effective_leverage": "0",
|
|
1238
|
+
// "position_limit": "3000000",
|
|
1239
|
+
// "used_position_limit": "0",
|
|
1240
|
+
// "total_borrow": "0",
|
|
1241
|
+
// "margin_score": "0",
|
|
1242
|
+
// "is_liquidating": false,
|
|
1243
|
+
// "has_risk": false,
|
|
1244
|
+
// "terminatable": true
|
|
1245
|
+
// }
|
|
1246
|
+
// ]
|
|
1247
|
+
// }
|
|
1248
|
+
// }
|
|
1249
|
+
//
|
|
1250
|
+
return this.parseBalance(response);
|
|
1251
|
+
}
|
|
1252
|
+
/**
|
|
1253
|
+
* @method
|
|
1254
|
+
* @name cryptocom#fetchOrder
|
|
1255
|
+
* @description fetches information on an order made by the user
|
|
1256
|
+
* @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#private-get-order-detail
|
|
1257
|
+
* @param {string} id order id
|
|
1258
|
+
* @param {string} symbol unified symbol of the market the order was made in
|
|
1259
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1260
|
+
* @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
1261
|
+
*/
|
|
1262
|
+
async fetchOrder(id, symbol = undefined, params = {}) {
|
|
1263
|
+
await this.loadMarkets();
|
|
1264
|
+
let market = undefined;
|
|
1265
|
+
if (symbol !== undefined) {
|
|
1266
|
+
market = this.market(symbol);
|
|
1267
|
+
}
|
|
1268
|
+
const request = {
|
|
1269
|
+
'order_id': id,
|
|
1270
|
+
};
|
|
1271
|
+
const response = await this.v1PrivatePostPrivateGetOrderDetail(this.extend(request, params));
|
|
1272
|
+
//
|
|
1273
|
+
// {
|
|
1274
|
+
// "id": 1686872583882,
|
|
1275
|
+
// "method": "private/get-order-detail",
|
|
1276
|
+
// "code": 0,
|
|
1277
|
+
// "result": {
|
|
1278
|
+
// "account_id": "ae075bef-1234-4321-bd6g-bb9007252a63",
|
|
1279
|
+
// "order_id": "6142909895025252686",
|
|
1280
|
+
// "client_oid": "CCXT_c2d2152cc32d40a3ae7fbf",
|
|
1281
|
+
// "order_type": "LIMIT",
|
|
1282
|
+
// "time_in_force": "GOOD_TILL_CANCEL",
|
|
1283
|
+
// "side": "BUY",
|
|
1284
|
+
// "exec_inst": [ ],
|
|
1285
|
+
// "quantity": "0.00020",
|
|
1286
|
+
// "limit_price": "20000.00",
|
|
1287
|
+
// "order_value": "4",
|
|
1288
|
+
// "avg_price": "0",
|
|
1289
|
+
// "trigger_price": "0",
|
|
1290
|
+
// "ref_price": "0",
|
|
1291
|
+
// "cumulative_quantity": "0",
|
|
1292
|
+
// "cumulative_value": "0",
|
|
1293
|
+
// "cumulative_fee": "0",
|
|
1294
|
+
// "status": "ACTIVE",
|
|
1295
|
+
// "update_user_id": "ae075bef-1234-4321-bd6g-bb9007252a63",
|
|
1296
|
+
// "order_date": "2023-06-15",
|
|
1297
|
+
// "instrument_name": "BTC_USD",
|
|
1298
|
+
// "fee_instrument_name": "BTC",
|
|
1299
|
+
// "create_time": 1686870220684,
|
|
1300
|
+
// "create_time_ns": "1686870220684239675",
|
|
1301
|
+
// "update_time": 1686870220684
|
|
1302
|
+
// }
|
|
1303
|
+
// }
|
|
1304
|
+
//
|
|
1305
|
+
const order = this.safeDict(response, 'result', {});
|
|
1306
|
+
return this.parseOrder(order, market);
|
|
1307
|
+
}
|
|
1308
|
+
createOrderRequest(symbol, type, side, amount, price = undefined, params = {}) {
|
|
1309
|
+
const market = this.market(symbol);
|
|
1310
|
+
const uppercaseType = type.toUpperCase();
|
|
1311
|
+
const request = {
|
|
1312
|
+
'instrument_name': market['id'],
|
|
1313
|
+
'side': side.toUpperCase(),
|
|
1314
|
+
'quantity': this.amountToPrecision(symbol, amount),
|
|
1315
|
+
};
|
|
1316
|
+
if ((uppercaseType === 'LIMIT') || (uppercaseType === 'STOP_LIMIT') || (uppercaseType === 'TAKE_PROFIT_LIMIT')) {
|
|
1317
|
+
request['price'] = this.priceToPrecision(symbol, price);
|
|
1318
|
+
}
|
|
1319
|
+
const broker = this.safeString(this.options, 'broker', 'CCXT');
|
|
1320
|
+
request['broker_id'] = broker;
|
|
1321
|
+
let marketType = undefined;
|
|
1322
|
+
let marginMode = undefined;
|
|
1323
|
+
[marketType, params] = this.handleMarketTypeAndParams('createOrder', market, params);
|
|
1324
|
+
[marginMode, params] = this.customHandleMarginModeAndParams('createOrder', params);
|
|
1325
|
+
if ((marketType === 'margin') || (marginMode !== undefined)) {
|
|
1326
|
+
request['spot_margin'] = 'MARGIN';
|
|
1327
|
+
}
|
|
1328
|
+
else if (marketType === 'spot') {
|
|
1329
|
+
request['spot_margin'] = 'SPOT';
|
|
1330
|
+
}
|
|
1331
|
+
const timeInForce = this.safeStringUpper2(params, 'timeInForce', 'time_in_force');
|
|
1332
|
+
if (timeInForce !== undefined) {
|
|
1333
|
+
if (timeInForce === 'GTC') {
|
|
1334
|
+
request['time_in_force'] = 'GOOD_TILL_CANCEL';
|
|
1335
|
+
}
|
|
1336
|
+
else if (timeInForce === 'IOC') {
|
|
1337
|
+
request['time_in_force'] = 'IMMEDIATE_OR_CANCEL';
|
|
1338
|
+
}
|
|
1339
|
+
else if (timeInForce === 'FOK') {
|
|
1340
|
+
request['time_in_force'] = 'FILL_OR_KILL';
|
|
1341
|
+
}
|
|
1342
|
+
else {
|
|
1343
|
+
request['time_in_force'] = timeInForce;
|
|
1344
|
+
}
|
|
1345
|
+
}
|
|
1346
|
+
const postOnly = this.safeBool(params, 'postOnly', false);
|
|
1347
|
+
if ((postOnly) || (timeInForce === 'PO')) {
|
|
1348
|
+
request['exec_inst'] = ['POST_ONLY'];
|
|
1349
|
+
request['time_in_force'] = 'GOOD_TILL_CANCEL';
|
|
1350
|
+
}
|
|
1351
|
+
const triggerPrice = this.safeStringN(params, ['stopPrice', 'triggerPrice', 'ref_price']);
|
|
1352
|
+
const stopLossPrice = this.safeNumber(params, 'stopLossPrice');
|
|
1353
|
+
const takeProfitPrice = this.safeNumber(params, 'takeProfitPrice');
|
|
1354
|
+
const isTrigger = (triggerPrice !== undefined);
|
|
1355
|
+
const isStopLossTrigger = (stopLossPrice !== undefined);
|
|
1356
|
+
const isTakeProfitTrigger = (takeProfitPrice !== undefined);
|
|
1357
|
+
if (isTrigger) {
|
|
1358
|
+
request['ref_price'] = this.priceToPrecision(symbol, triggerPrice);
|
|
1359
|
+
const priceString = this.numberToString(price);
|
|
1360
|
+
if ((uppercaseType === 'LIMIT') || (uppercaseType === 'STOP_LIMIT') || (uppercaseType === 'TAKE_PROFIT_LIMIT')) {
|
|
1361
|
+
if (side === 'buy') {
|
|
1362
|
+
if (Precise.stringLt(priceString, triggerPrice)) {
|
|
1363
|
+
request['type'] = 'TAKE_PROFIT_LIMIT';
|
|
1364
|
+
}
|
|
1365
|
+
else {
|
|
1366
|
+
request['type'] = 'STOP_LIMIT';
|
|
1367
|
+
}
|
|
1368
|
+
}
|
|
1369
|
+
else {
|
|
1370
|
+
if (Precise.stringLt(priceString, triggerPrice)) {
|
|
1371
|
+
request['type'] = 'STOP_LIMIT';
|
|
1372
|
+
}
|
|
1373
|
+
else {
|
|
1374
|
+
request['type'] = 'TAKE_PROFIT_LIMIT';
|
|
1375
|
+
}
|
|
1376
|
+
}
|
|
1377
|
+
}
|
|
1378
|
+
else {
|
|
1379
|
+
if (side === 'buy') {
|
|
1380
|
+
if (Precise.stringLt(priceString, triggerPrice)) {
|
|
1381
|
+
request['type'] = 'TAKE_PROFIT';
|
|
1382
|
+
}
|
|
1383
|
+
else {
|
|
1384
|
+
request['type'] = 'STOP_LOSS';
|
|
1385
|
+
}
|
|
1386
|
+
}
|
|
1387
|
+
else {
|
|
1388
|
+
if (Precise.stringLt(priceString, triggerPrice)) {
|
|
1389
|
+
request['type'] = 'STOP_LOSS';
|
|
1390
|
+
}
|
|
1391
|
+
else {
|
|
1392
|
+
request['type'] = 'TAKE_PROFIT';
|
|
1393
|
+
}
|
|
1394
|
+
}
|
|
1395
|
+
}
|
|
1396
|
+
}
|
|
1397
|
+
else if (isStopLossTrigger) {
|
|
1398
|
+
if ((uppercaseType === 'LIMIT') || (uppercaseType === 'STOP_LIMIT')) {
|
|
1399
|
+
request['type'] = 'STOP_LIMIT';
|
|
1400
|
+
}
|
|
1401
|
+
else {
|
|
1402
|
+
request['type'] = 'STOP_LOSS';
|
|
1403
|
+
}
|
|
1404
|
+
request['ref_price'] = this.priceToPrecision(symbol, stopLossPrice);
|
|
1405
|
+
}
|
|
1406
|
+
else if (isTakeProfitTrigger) {
|
|
1407
|
+
if ((uppercaseType === 'LIMIT') || (uppercaseType === 'TAKE_PROFIT_LIMIT')) {
|
|
1408
|
+
request['type'] = 'TAKE_PROFIT_LIMIT';
|
|
1409
|
+
}
|
|
1410
|
+
else {
|
|
1411
|
+
request['type'] = 'TAKE_PROFIT';
|
|
1412
|
+
}
|
|
1413
|
+
request['ref_price'] = this.priceToPrecision(symbol, takeProfitPrice);
|
|
1414
|
+
}
|
|
1415
|
+
else {
|
|
1416
|
+
request['type'] = uppercaseType;
|
|
1417
|
+
}
|
|
1418
|
+
params = this.omit(params, ['postOnly', 'clientOrderId', 'timeInForce', 'stopPrice', 'triggerPrice', 'stopLossPrice', 'takeProfitPrice']);
|
|
1419
|
+
return this.extend(request, params);
|
|
1420
|
+
}
|
|
1421
|
+
/**
|
|
1422
|
+
* @method
|
|
1423
|
+
* @name cryptocom#createOrder
|
|
1424
|
+
* @description create a trade order
|
|
1425
|
+
* @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#private-create-order
|
|
1426
|
+
* @param {string} symbol unified symbol of the market to create an order in
|
|
1427
|
+
* @param {string} type 'market', 'limit', 'stop_loss', 'stop_limit', 'take_profit', 'take_profit_limit'
|
|
1428
|
+
* @param {string} side 'buy' or 'sell'
|
|
1429
|
+
* @param {float} amount how much you want to trade in units of base currency
|
|
1430
|
+
* @param {float} [price] the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
|
|
1431
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1432
|
+
* @param {string} [params.timeInForce] 'GTC', 'IOC', 'FOK' or 'PO'
|
|
1433
|
+
* @param {string} [params.ref_price_type] 'MARK_PRICE', 'INDEX_PRICE', 'LAST_PRICE' which trigger price type to use, default is MARK_PRICE
|
|
1434
|
+
* @param {float} [params.triggerPrice] price to trigger a trigger order
|
|
1435
|
+
* @param {float} [params.stopLossPrice] price to trigger a stop-loss trigger order
|
|
1436
|
+
* @param {float} [params.takeProfitPrice] price to trigger a take-profit trigger order
|
|
1437
|
+
* @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
1438
|
+
*/
|
|
1439
|
+
async createOrder(symbol, type, side, amount, price = undefined, params = {}) {
|
|
1440
|
+
await this.loadMarkets();
|
|
1441
|
+
const market = this.market(symbol);
|
|
1442
|
+
const request = this.createOrderRequest(symbol, type, side, amount, price, params);
|
|
1443
|
+
const response = await this.v1PrivatePostPrivateCreateOrder(request);
|
|
1444
|
+
//
|
|
1445
|
+
// {
|
|
1446
|
+
// "id": 1686804664362,
|
|
1447
|
+
// "method": "private/create-order",
|
|
1448
|
+
// "code" : 0,
|
|
1449
|
+
// "result": {
|
|
1450
|
+
// "order_id": "6540219377766741832",
|
|
1451
|
+
// "client_oid": "CCXT_d6ef7c3db6c1495aa8b757"
|
|
1452
|
+
// }
|
|
1453
|
+
// }
|
|
1454
|
+
//
|
|
1455
|
+
const result = this.safeDict(response, 'result', {});
|
|
1456
|
+
return this.parseOrder(result, market);
|
|
1457
|
+
}
|
|
1458
|
+
/**
|
|
1459
|
+
* @method
|
|
1460
|
+
* @name cryptocom#createOrders
|
|
1461
|
+
* @description create a list of trade orders
|
|
1462
|
+
* @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#private-create-order-list-list
|
|
1463
|
+
* @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#private-create-order-list-oco
|
|
1464
|
+
* @param {Array} orders list of orders to create, each object should contain the parameters required by createOrder, namely symbol, type, side, amount, price and params
|
|
1465
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1466
|
+
* @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
1467
|
+
*/
|
|
1468
|
+
async createOrders(orders, params = {}) {
|
|
1469
|
+
await this.loadMarkets();
|
|
1470
|
+
const ordersRequests = [];
|
|
1471
|
+
for (let i = 0; i < orders.length; i++) {
|
|
1472
|
+
const rawOrder = orders[i];
|
|
1473
|
+
const marketId = this.safeString(rawOrder, 'symbol');
|
|
1474
|
+
const type = this.safeString(rawOrder, 'type');
|
|
1475
|
+
const side = this.safeString(rawOrder, 'side');
|
|
1476
|
+
const amount = this.safeValue(rawOrder, 'amount');
|
|
1477
|
+
const price = this.safeValue(rawOrder, 'price');
|
|
1478
|
+
const orderParams = this.safeDict(rawOrder, 'params', {});
|
|
1479
|
+
const orderRequest = this.createAdvancedOrderRequest(marketId, type, side, amount, price, orderParams);
|
|
1480
|
+
ordersRequests.push(orderRequest);
|
|
1481
|
+
}
|
|
1482
|
+
const contigency = this.safeString(params, 'contingency_type', 'LIST');
|
|
1483
|
+
const request = {
|
|
1484
|
+
'contingency_type': contigency,
|
|
1485
|
+
'order_list': ordersRequests,
|
|
1486
|
+
};
|
|
1487
|
+
const response = await this.v1PrivatePostPrivateCreateOrderList(this.extend(request, params));
|
|
1488
|
+
//
|
|
1489
|
+
// {
|
|
1490
|
+
// "id": 12,
|
|
1491
|
+
// "method": "private/create-order-list",
|
|
1492
|
+
// "code": 10001,
|
|
1493
|
+
// "result": {
|
|
1494
|
+
// "result_list": [
|
|
1495
|
+
// {
|
|
1496
|
+
// "index": 0,
|
|
1497
|
+
// "code": 0,
|
|
1498
|
+
// "order_id": "2015106383706015873",
|
|
1499
|
+
// "client_oid": "my_order_0001"
|
|
1500
|
+
// },
|
|
1501
|
+
// {
|
|
1502
|
+
// "index": 1,
|
|
1503
|
+
// "code": 20007,
|
|
1504
|
+
// "message": "INVALID_REQUEST",
|
|
1505
|
+
// "client_oid": "my_order_0002"
|
|
1506
|
+
// }
|
|
1507
|
+
// ]
|
|
1508
|
+
// }
|
|
1509
|
+
// }
|
|
1510
|
+
//
|
|
1511
|
+
// {
|
|
1512
|
+
// "id" : 1698068111133,
|
|
1513
|
+
// "method" : "private/create-order-list",
|
|
1514
|
+
// "code" : 0,
|
|
1515
|
+
// "result" : [ {
|
|
1516
|
+
// "code" : 0,
|
|
1517
|
+
// "index" : 0,
|
|
1518
|
+
// "client_oid" : "1698068111133_0",
|
|
1519
|
+
// "order_id" : "6142909896519488206"
|
|
1520
|
+
// }, {
|
|
1521
|
+
// "code" : 306,
|
|
1522
|
+
// "index" : 1,
|
|
1523
|
+
// "client_oid" : "1698068111133_1",
|
|
1524
|
+
// "message" : "INSUFFICIENT_AVAILABLE_BALANCE",
|
|
1525
|
+
// "order_id" : "6142909896519488207"
|
|
1526
|
+
// } ]
|
|
1527
|
+
// }
|
|
1528
|
+
//
|
|
1529
|
+
const result = this.safeValue(response, 'result', []);
|
|
1530
|
+
const listId = this.safeString(result, 'list_id');
|
|
1531
|
+
if (listId !== undefined) {
|
|
1532
|
+
const ocoOrders = [{ 'order_id': listId }];
|
|
1533
|
+
return this.parseOrders(ocoOrders);
|
|
1534
|
+
}
|
|
1535
|
+
return this.parseOrders(result);
|
|
1536
|
+
}
|
|
1537
|
+
createAdvancedOrderRequest(symbol, type, side, amount, price = undefined, params = {}) {
|
|
1538
|
+
// differs slightly from createOrderRequest
|
|
1539
|
+
// since the advanced order endpoint requires a different set of parameters
|
|
1540
|
+
// namely here we don't support ref_price or spot_margin
|
|
1541
|
+
// and market-buy orders need to send notional instead of quantity
|
|
1542
|
+
const market = this.market(symbol);
|
|
1543
|
+
const uppercaseType = type.toUpperCase();
|
|
1544
|
+
const request = {
|
|
1545
|
+
'instrument_name': market['id'],
|
|
1546
|
+
'side': side.toUpperCase(),
|
|
1547
|
+
};
|
|
1548
|
+
if ((uppercaseType === 'LIMIT') || (uppercaseType === 'STOP_LIMIT') || (uppercaseType === 'TAKE_PROFIT_LIMIT')) {
|
|
1549
|
+
request['price'] = this.priceToPrecision(symbol, price);
|
|
1550
|
+
}
|
|
1551
|
+
const broker = this.safeString(this.options, 'broker', 'CCXT');
|
|
1552
|
+
request['broker_id'] = broker;
|
|
1553
|
+
const timeInForce = this.safeStringUpper2(params, 'timeInForce', 'time_in_force');
|
|
1554
|
+
if (timeInForce !== undefined) {
|
|
1555
|
+
if (timeInForce === 'GTC') {
|
|
1556
|
+
request['time_in_force'] = 'GOOD_TILL_CANCEL';
|
|
1557
|
+
}
|
|
1558
|
+
else if (timeInForce === 'IOC') {
|
|
1559
|
+
request['time_in_force'] = 'IMMEDIATE_OR_CANCEL';
|
|
1560
|
+
}
|
|
1561
|
+
else if (timeInForce === 'FOK') {
|
|
1562
|
+
request['time_in_force'] = 'FILL_OR_KILL';
|
|
1563
|
+
}
|
|
1564
|
+
else {
|
|
1565
|
+
request['time_in_force'] = timeInForce;
|
|
1566
|
+
}
|
|
1567
|
+
}
|
|
1568
|
+
const postOnly = this.safeBool(params, 'postOnly', false);
|
|
1569
|
+
if ((postOnly) || (timeInForce === 'PO')) {
|
|
1570
|
+
request['exec_inst'] = ['POST_ONLY'];
|
|
1571
|
+
request['time_in_force'] = 'GOOD_TILL_CANCEL';
|
|
1572
|
+
}
|
|
1573
|
+
const triggerPrice = this.safeStringN(params, ['stopPrice', 'triggerPrice', 'ref_price']);
|
|
1574
|
+
const stopLossPrice = this.safeNumber(params, 'stopLossPrice');
|
|
1575
|
+
const takeProfitPrice = this.safeNumber(params, 'takeProfitPrice');
|
|
1576
|
+
const isTrigger = (triggerPrice !== undefined);
|
|
1577
|
+
const isStopLossTrigger = (stopLossPrice !== undefined);
|
|
1578
|
+
const isTakeProfitTrigger = (takeProfitPrice !== undefined);
|
|
1579
|
+
if (isTrigger) {
|
|
1580
|
+
const priceString = this.numberToString(price);
|
|
1581
|
+
if ((uppercaseType === 'LIMIT') || (uppercaseType === 'STOP_LIMIT') || (uppercaseType === 'TAKE_PROFIT_LIMIT')) {
|
|
1582
|
+
if (side === 'buy') {
|
|
1583
|
+
if (Precise.stringLt(priceString, triggerPrice)) {
|
|
1584
|
+
request['type'] = 'TAKE_PROFIT_LIMIT';
|
|
1585
|
+
}
|
|
1586
|
+
else {
|
|
1587
|
+
request['type'] = 'STOP_LIMIT';
|
|
1588
|
+
}
|
|
1589
|
+
}
|
|
1590
|
+
else {
|
|
1591
|
+
if (Precise.stringLt(priceString, triggerPrice)) {
|
|
1592
|
+
request['type'] = 'STOP_LIMIT';
|
|
1593
|
+
}
|
|
1594
|
+
else {
|
|
1595
|
+
request['type'] = 'TAKE_PROFIT_LIMIT';
|
|
1596
|
+
}
|
|
1597
|
+
}
|
|
1598
|
+
}
|
|
1599
|
+
else {
|
|
1600
|
+
if (side === 'buy') {
|
|
1601
|
+
if (Precise.stringLt(priceString, triggerPrice)) {
|
|
1602
|
+
request['type'] = 'TAKE_PROFIT';
|
|
1603
|
+
}
|
|
1604
|
+
else {
|
|
1605
|
+
request['type'] = 'STOP_LOSS';
|
|
1606
|
+
}
|
|
1607
|
+
}
|
|
1608
|
+
else {
|
|
1609
|
+
if (Precise.stringLt(priceString, triggerPrice)) {
|
|
1610
|
+
request['type'] = 'STOP_LOSS';
|
|
1611
|
+
}
|
|
1612
|
+
else {
|
|
1613
|
+
request['type'] = 'TAKE_PROFIT';
|
|
1614
|
+
}
|
|
1615
|
+
}
|
|
1616
|
+
}
|
|
1617
|
+
}
|
|
1618
|
+
else if (isStopLossTrigger) {
|
|
1619
|
+
if ((uppercaseType === 'LIMIT') || (uppercaseType === 'STOP_LIMIT')) {
|
|
1620
|
+
request['type'] = 'STOP_LIMIT';
|
|
1621
|
+
}
|
|
1622
|
+
else {
|
|
1623
|
+
request['type'] = 'STOP_LOSS';
|
|
1624
|
+
}
|
|
1625
|
+
}
|
|
1626
|
+
else if (isTakeProfitTrigger) {
|
|
1627
|
+
if ((uppercaseType === 'LIMIT') || (uppercaseType === 'TAKE_PROFIT_LIMIT')) {
|
|
1628
|
+
request['type'] = 'TAKE_PROFIT_LIMIT';
|
|
1629
|
+
}
|
|
1630
|
+
else {
|
|
1631
|
+
request['type'] = 'TAKE_PROFIT';
|
|
1632
|
+
}
|
|
1633
|
+
}
|
|
1634
|
+
else {
|
|
1635
|
+
request['type'] = uppercaseType;
|
|
1636
|
+
}
|
|
1637
|
+
if ((side === 'buy') && ((uppercaseType === 'MARKET') || (uppercaseType === 'STOP_LOSS') || (uppercaseType === 'TAKE_PROFIT'))) {
|
|
1638
|
+
// use createmarketBuy logic here
|
|
1639
|
+
let quoteAmount = undefined;
|
|
1640
|
+
let createMarketBuyOrderRequiresPrice = true;
|
|
1641
|
+
[createMarketBuyOrderRequiresPrice, params] = this.handleOptionAndParams(params, 'createOrder', 'createMarketBuyOrderRequiresPrice', true);
|
|
1642
|
+
const cost = this.safeNumber2(params, 'cost', 'notional');
|
|
1643
|
+
params = this.omit(params, 'cost');
|
|
1644
|
+
if (cost !== undefined) {
|
|
1645
|
+
quoteAmount = this.costToPrecision(symbol, cost);
|
|
1646
|
+
}
|
|
1647
|
+
else if (createMarketBuyOrderRequiresPrice) {
|
|
1648
|
+
if (price === undefined) {
|
|
1649
|
+
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 (quote quantity) in the amount argument');
|
|
1650
|
+
}
|
|
1651
|
+
else {
|
|
1652
|
+
const amountString = this.numberToString(amount);
|
|
1653
|
+
const priceString = this.numberToString(price);
|
|
1654
|
+
const costRequest = Precise.stringMul(amountString, priceString);
|
|
1655
|
+
quoteAmount = this.costToPrecision(symbol, costRequest);
|
|
1656
|
+
}
|
|
1657
|
+
}
|
|
1658
|
+
else {
|
|
1659
|
+
quoteAmount = this.costToPrecision(symbol, amount);
|
|
1660
|
+
}
|
|
1661
|
+
request['notional'] = quoteAmount;
|
|
1662
|
+
}
|
|
1663
|
+
else {
|
|
1664
|
+
request['quantity'] = this.amountToPrecision(symbol, amount);
|
|
1665
|
+
}
|
|
1666
|
+
params = this.omit(params, ['postOnly', 'clientOrderId', 'timeInForce', 'stopPrice', 'triggerPrice', 'stopLossPrice', 'takeProfitPrice']);
|
|
1667
|
+
return this.extend(request, params);
|
|
1668
|
+
}
|
|
1669
|
+
/**
|
|
1670
|
+
* @method
|
|
1671
|
+
* @name cryptocom#editOrder
|
|
1672
|
+
* @description edit a trade order
|
|
1673
|
+
* @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#private-amend-order
|
|
1674
|
+
* @param {string} id order id
|
|
1675
|
+
* @param {string} symbol unified market symbol of the order to edit
|
|
1676
|
+
* @param {string} [type] not used by cryptocom editOrder
|
|
1677
|
+
* @param {string} [side] not used by cryptocom editOrder
|
|
1678
|
+
* @param {float} amount (mandatory) how much of the currency you want to trade in units of the base currency
|
|
1679
|
+
* @param {float} price (mandatory) the price for the order, in units of the quote currency, ignored in market orders
|
|
1680
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1681
|
+
* @param {string} [params.clientOrderId] the original client order id of the order to edit, required if id is not provided
|
|
1682
|
+
* @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
1683
|
+
*/
|
|
1684
|
+
async editOrder(id, symbol, type, side, amount = undefined, price = undefined, params = {}) {
|
|
1685
|
+
await this.loadMarkets();
|
|
1686
|
+
const request = this.editOrderRequest(id, symbol, amount, price, params);
|
|
1687
|
+
const response = await this.v1PrivatePostPrivateAmendOrder(request);
|
|
1688
|
+
const result = this.safeDict(response, 'result', {});
|
|
1689
|
+
return this.parseOrder(result);
|
|
1690
|
+
}
|
|
1691
|
+
editOrderRequest(id, symbol, amount, price = undefined, params = {}) {
|
|
1692
|
+
const request = {};
|
|
1693
|
+
if (id !== undefined) {
|
|
1694
|
+
request['order_id'] = id;
|
|
1695
|
+
}
|
|
1696
|
+
else {
|
|
1697
|
+
const originalClientOrderId = this.safeString2(params, 'orig_client_oid', 'clientOrderId');
|
|
1698
|
+
if (originalClientOrderId === undefined) {
|
|
1699
|
+
throw new ArgumentsRequired(this.id + ' editOrder() requires an id argument or orig_client_oid parameter');
|
|
1700
|
+
}
|
|
1701
|
+
else {
|
|
1702
|
+
request['orig_client_oid'] = originalClientOrderId;
|
|
1703
|
+
params = this.omit(params, ['orig_client_oid', 'clientOrderId']);
|
|
1704
|
+
}
|
|
1705
|
+
}
|
|
1706
|
+
if ((amount === undefined) || (price === undefined)) {
|
|
1707
|
+
throw new ArgumentsRequired(this.id + ' editOrder() requires both amount and price arguments. If you do not want to change the amount or price, you should pass the original values');
|
|
1708
|
+
}
|
|
1709
|
+
request['new_quantity'] = this.amountToPrecision(symbol, amount);
|
|
1710
|
+
request['new_price'] = this.priceToPrecision(symbol, price);
|
|
1711
|
+
return this.extend(request, params);
|
|
1712
|
+
}
|
|
1713
|
+
/**
|
|
1714
|
+
* @method
|
|
1715
|
+
* @name cryptocom#cancelAllOrders
|
|
1716
|
+
* @description cancel all open orders
|
|
1717
|
+
* @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#private-cancel-all-orders
|
|
1718
|
+
* @param {string} symbol unified market symbol of the orders to cancel
|
|
1719
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1720
|
+
* @returns {object} Returns exchange raw message{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
1721
|
+
*/
|
|
1722
|
+
async cancelAllOrders(symbol = undefined, params = {}) {
|
|
1723
|
+
await this.loadMarkets();
|
|
1724
|
+
let market = undefined;
|
|
1725
|
+
const request = {};
|
|
1726
|
+
if (symbol !== undefined) {
|
|
1727
|
+
market = this.market(symbol);
|
|
1728
|
+
request['instrument_name'] = market['id'];
|
|
1729
|
+
}
|
|
1730
|
+
const response = await this.v1PrivatePostPrivateCancelAllOrders(this.extend(request, params));
|
|
1731
|
+
return [this.safeOrder({ 'info': response })];
|
|
1732
|
+
}
|
|
1733
|
+
/**
|
|
1734
|
+
* @method
|
|
1735
|
+
* @name cryptocom#cancelOrder
|
|
1736
|
+
* @description cancels an open order
|
|
1737
|
+
* @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#private-cancel-order
|
|
1738
|
+
* @param {string} id the order id of the order to cancel
|
|
1739
|
+
* @param {string} [symbol] unified symbol of the market the order was made in
|
|
1740
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1741
|
+
* @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
1742
|
+
*/
|
|
1743
|
+
async cancelOrder(id, symbol = undefined, params = {}) {
|
|
1744
|
+
await this.loadMarkets();
|
|
1745
|
+
let market = undefined;
|
|
1746
|
+
if (symbol !== undefined) {
|
|
1747
|
+
market = this.market(symbol);
|
|
1748
|
+
}
|
|
1749
|
+
const request = {
|
|
1750
|
+
'order_id': id,
|
|
1751
|
+
};
|
|
1752
|
+
const response = await this.v1PrivatePostPrivateCancelOrder(this.extend(request, params));
|
|
1753
|
+
//
|
|
1754
|
+
// {
|
|
1755
|
+
// "id": 1686882846638,
|
|
1756
|
+
// "method": "private/cancel-order",
|
|
1757
|
+
// "code": 0,
|
|
1758
|
+
// "message": "NO_ERROR",
|
|
1759
|
+
// "result": {
|
|
1760
|
+
// "client_oid": "CCXT_c2d2152cc32d40a3ae7fbf",
|
|
1761
|
+
// "order_id": "6142909895025252686"
|
|
1762
|
+
// }
|
|
1763
|
+
// }
|
|
1764
|
+
//
|
|
1765
|
+
const result = this.safeDict(response, 'result', {});
|
|
1766
|
+
return this.parseOrder(result, market);
|
|
1767
|
+
}
|
|
1768
|
+
/**
|
|
1769
|
+
* @method
|
|
1770
|
+
* @name cryptocom#cancelOrders
|
|
1771
|
+
* @description cancel multiple orders
|
|
1772
|
+
* @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#private-cancel-order-list-list
|
|
1773
|
+
* @param {string[]} ids order ids
|
|
1774
|
+
* @param {string} symbol unified market symbol
|
|
1775
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1776
|
+
* @returns {object} an list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
1777
|
+
*/
|
|
1778
|
+
async cancelOrders(ids, symbol = undefined, params = {}) {
|
|
1779
|
+
if (symbol === undefined) {
|
|
1780
|
+
throw new ArgumentsRequired(this.id + ' cancelOrders() requires a symbol argument');
|
|
1781
|
+
}
|
|
1782
|
+
await this.loadMarkets();
|
|
1783
|
+
const market = this.market(symbol);
|
|
1784
|
+
const orderRequests = [];
|
|
1785
|
+
for (let i = 0; i < ids.length; i++) {
|
|
1786
|
+
const id = ids[i];
|
|
1787
|
+
const order = {
|
|
1788
|
+
'instrument_name': market['id'],
|
|
1789
|
+
'order_id': id.toString(),
|
|
1790
|
+
};
|
|
1791
|
+
orderRequests.push(order);
|
|
1792
|
+
}
|
|
1793
|
+
const request = {
|
|
1794
|
+
'contingency_type': 'LIST',
|
|
1795
|
+
'order_list': orderRequests,
|
|
1796
|
+
};
|
|
1797
|
+
const response = await this.v1PrivatePostPrivateCancelOrderList(this.extend(request, params));
|
|
1798
|
+
const result = this.safeList(response, 'result', []);
|
|
1799
|
+
return this.parseOrders(result, market, undefined, undefined, params);
|
|
1800
|
+
}
|
|
1801
|
+
/**
|
|
1802
|
+
* @method
|
|
1803
|
+
* @name cryptocom#cancelOrdersForSymbols
|
|
1804
|
+
* @description cancel multiple orders for multiple symbols
|
|
1805
|
+
* @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#private-cancel-order-list-list
|
|
1806
|
+
* @param {CancellationRequest[]} orders each order should contain the parameters required by cancelOrder namely id and symbol, example [{"id": "a", "symbol": "BTC/USDT"}, {"id": "b", "symbol": "ETH/USDT"}]
|
|
1807
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1808
|
+
* @returns {object} an list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
1809
|
+
*/
|
|
1810
|
+
async cancelOrdersForSymbols(orders, params = {}) {
|
|
1811
|
+
await this.loadMarkets();
|
|
1812
|
+
const orderRequests = [];
|
|
1813
|
+
for (let i = 0; i < orders.length; i++) {
|
|
1814
|
+
const order = orders[i];
|
|
1815
|
+
const id = this.safeString(order, 'id');
|
|
1816
|
+
const symbol = this.safeString(order, 'symbol');
|
|
1817
|
+
const market = this.market(symbol);
|
|
1818
|
+
const orderItem = {
|
|
1819
|
+
'instrument_name': market['id'],
|
|
1820
|
+
'order_id': id.toString(),
|
|
1821
|
+
};
|
|
1822
|
+
orderRequests.push(orderItem);
|
|
1823
|
+
}
|
|
1824
|
+
const request = {
|
|
1825
|
+
'contingency_type': 'LIST',
|
|
1826
|
+
'order_list': orderRequests,
|
|
1827
|
+
};
|
|
1828
|
+
const response = await this.v1PrivatePostPrivateCancelOrderList(this.extend(request, params));
|
|
1829
|
+
const result = this.safeList(response, 'result', []);
|
|
1830
|
+
return this.parseOrders(result, undefined, undefined, undefined, params);
|
|
1831
|
+
}
|
|
1832
|
+
/**
|
|
1833
|
+
* @method
|
|
1834
|
+
* @name cryptocom#fetchOpenOrders
|
|
1835
|
+
* @description fetch all unfilled currently open orders
|
|
1836
|
+
* @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#private-get-open-orders
|
|
1837
|
+
* @param {string} symbol unified market symbol
|
|
1838
|
+
* @param {int} [since] the earliest time in ms to fetch open orders for
|
|
1839
|
+
* @param {int} [limit] the maximum number of open order structures to retrieve
|
|
1840
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1841
|
+
* @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
1842
|
+
*/
|
|
1843
|
+
async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
1844
|
+
await this.loadMarkets();
|
|
1845
|
+
let market = undefined;
|
|
1846
|
+
const request = {};
|
|
1847
|
+
if (symbol !== undefined) {
|
|
1848
|
+
market = this.market(symbol);
|
|
1849
|
+
request['instrument_name'] = market['id'];
|
|
1850
|
+
}
|
|
1851
|
+
const response = await this.v1PrivatePostPrivateGetOpenOrders(this.extend(request, params));
|
|
1852
|
+
//
|
|
1853
|
+
// {
|
|
1854
|
+
// "id": 1686806134961,
|
|
1855
|
+
// "method": "private/get-open-orders",
|
|
1856
|
+
// "code": 0,
|
|
1857
|
+
// "result": {
|
|
1858
|
+
// "data": [
|
|
1859
|
+
// {
|
|
1860
|
+
// "account_id": "ce075bef-1234-4321-bd6g-ff9007252e63",
|
|
1861
|
+
// "order_id": "6530219477767564494",
|
|
1862
|
+
// "client_oid": "CCXT_7ce730f0388441df9bc218",
|
|
1863
|
+
// "order_type": "LIMIT",
|
|
1864
|
+
// "time_in_force": "GOOD_TILL_CANCEL",
|
|
1865
|
+
// "side": "BUY",
|
|
1866
|
+
// "exec_inst": [ ],
|
|
1867
|
+
// "quantity": "0.00020",
|
|
1868
|
+
// "limit_price": "20000.00",
|
|
1869
|
+
// "order_value": "4",
|
|
1870
|
+
// "avg_price": "0",
|
|
1871
|
+
// "trigger_price": "0",
|
|
1872
|
+
// "ref_price": "0",
|
|
1873
|
+
// "cumulative_quantity": "0",
|
|
1874
|
+
// "cumulative_value": "0",
|
|
1875
|
+
// "cumulative_fee": "0",
|
|
1876
|
+
// "status": "ACTIVE",
|
|
1877
|
+
// "update_user_id": "ce075bef-1234-4321-bd6g-gg9007252e63",
|
|
1878
|
+
// "order_date": "2023-06-15",
|
|
1879
|
+
// "instrument_name": "BTC_USD",
|
|
1880
|
+
// "fee_instrument_name": "BTC",
|
|
1881
|
+
// "create_time": 1686806053992,
|
|
1882
|
+
// "create_time_ns": "1686806053992921880",
|
|
1883
|
+
// "update_time": 1686806053993
|
|
1884
|
+
// }
|
|
1885
|
+
// ]
|
|
1886
|
+
// }
|
|
1887
|
+
// }
|
|
1888
|
+
//
|
|
1889
|
+
const data = this.safeDict(response, 'result', {});
|
|
1890
|
+
const orders = this.safeList(data, 'data', []);
|
|
1891
|
+
return this.parseOrders(orders, market, since, limit);
|
|
1892
|
+
}
|
|
1893
|
+
/**
|
|
1894
|
+
* @method
|
|
1895
|
+
* @name cryptocom#fetchMyTrades
|
|
1896
|
+
* @description fetch all trades made by the user
|
|
1897
|
+
* @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#private-get-trades
|
|
1898
|
+
* @param {string} symbol unified market symbol
|
|
1899
|
+
* @param {int} [since] the earliest time in ms to fetch trades for, maximum date range is one day
|
|
1900
|
+
* @param {int} [limit] the maximum number of trade structures to retrieve
|
|
1901
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1902
|
+
* @param {int} [params.until] timestamp in ms for the ending date filter, default is the current time
|
|
1903
|
+
* @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
|
|
1904
|
+
* @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}
|
|
1905
|
+
*/
|
|
1906
|
+
async fetchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
1907
|
+
await this.loadMarkets();
|
|
1908
|
+
let paginate = false;
|
|
1909
|
+
[paginate, params] = this.handleOptionAndParams(params, 'fetchMyTrades', 'paginate');
|
|
1910
|
+
if (paginate) {
|
|
1911
|
+
return await this.fetchPaginatedCallDynamic('fetchMyTrades', symbol, since, limit, params, 100);
|
|
1912
|
+
}
|
|
1913
|
+
const request = {};
|
|
1914
|
+
let market = undefined;
|
|
1915
|
+
if (symbol !== undefined) {
|
|
1916
|
+
market = this.market(symbol);
|
|
1917
|
+
request['instrument_name'] = market['id'];
|
|
1918
|
+
}
|
|
1919
|
+
if (since !== undefined) {
|
|
1920
|
+
request['start_time'] = since;
|
|
1921
|
+
}
|
|
1922
|
+
if (limit !== undefined) {
|
|
1923
|
+
request['limit'] = limit;
|
|
1924
|
+
}
|
|
1925
|
+
const until = this.safeInteger(params, 'until');
|
|
1926
|
+
params = this.omit(params, ['until']);
|
|
1927
|
+
if (until !== undefined) {
|
|
1928
|
+
request['end_time'] = until;
|
|
1929
|
+
}
|
|
1930
|
+
const response = await this.v1PrivatePostPrivateGetTrades(this.extend(request, params));
|
|
1931
|
+
//
|
|
1932
|
+
// {
|
|
1933
|
+
// "id": 1686942003520,
|
|
1934
|
+
// "method": "private/get-trades",
|
|
1935
|
+
// "code": 0,
|
|
1936
|
+
// "result": {
|
|
1937
|
+
// "data": [
|
|
1938
|
+
// {
|
|
1939
|
+
// "account_id": "ds075abc-1234-4321-bd6g-ff9007252r63",
|
|
1940
|
+
// "event_date": "2023-06-16",
|
|
1941
|
+
// "journal_type": "TRADING",
|
|
1942
|
+
// "side": "BUY",
|
|
1943
|
+
// "instrument_name": "BTC_USD",
|
|
1944
|
+
// "fees": "-0.0000000525",
|
|
1945
|
+
// "trade_id": "6142909898247428343",
|
|
1946
|
+
// "trade_match_id": "4611686018455978480",
|
|
1947
|
+
// "create_time": 1686941992887,
|
|
1948
|
+
// "traded_price": "26347.16",
|
|
1949
|
+
// "traded_quantity": "0.00021",
|
|
1950
|
+
// "fee_instrument_name": "BTC",
|
|
1951
|
+
// "client_oid": "d1c70a60-810e-4c92-b2a0-72b931cb31e0",
|
|
1952
|
+
// "taker_side": "TAKER",
|
|
1953
|
+
// "order_id": "6142909895036331486",
|
|
1954
|
+
// "create_time_ns": "1686941992887207066"
|
|
1955
|
+
// }
|
|
1956
|
+
// ]
|
|
1957
|
+
// }
|
|
1958
|
+
// }
|
|
1959
|
+
//
|
|
1960
|
+
const result = this.safeDict(response, 'result', {});
|
|
1961
|
+
const trades = this.safeList(result, 'data', []);
|
|
1962
|
+
return this.parseTrades(trades, market, since, limit);
|
|
1963
|
+
}
|
|
1964
|
+
parseAddress(addressString) {
|
|
1965
|
+
let address = undefined;
|
|
1966
|
+
let tag = undefined;
|
|
1967
|
+
let rawTag = undefined;
|
|
1968
|
+
if (addressString.indexOf('?') > 0) {
|
|
1969
|
+
[address, rawTag] = addressString.split('?');
|
|
1970
|
+
const splitted = rawTag.split('=');
|
|
1971
|
+
tag = splitted[1];
|
|
1972
|
+
}
|
|
1973
|
+
else {
|
|
1974
|
+
address = addressString;
|
|
1975
|
+
}
|
|
1976
|
+
return [address, tag];
|
|
1977
|
+
}
|
|
1978
|
+
/**
|
|
1979
|
+
* @method
|
|
1980
|
+
* @name cryptocom#withdraw
|
|
1981
|
+
* @description make a withdrawal
|
|
1982
|
+
* @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#private-create-withdrawal
|
|
1983
|
+
* @param {string} code unified currency code
|
|
1984
|
+
* @param {float} amount the amount to withdraw
|
|
1985
|
+
* @param {string} address the address to withdraw to
|
|
1986
|
+
* @param {string} tag
|
|
1987
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1988
|
+
* @returns {object} a [transaction structure]{@link https://docs.ccxt.com/#/?id=transaction-structure}
|
|
1989
|
+
*/
|
|
1990
|
+
async withdraw(code, amount, address, tag = undefined, params = {}) {
|
|
1991
|
+
[tag, params] = this.handleWithdrawTagAndParams(tag, params);
|
|
1992
|
+
await this.loadMarkets();
|
|
1993
|
+
const currency = this.safeCurrency(code); // for instance, USDC is not inferred from markets but it's still available
|
|
1994
|
+
const request = {
|
|
1995
|
+
'currency': currency['id'],
|
|
1996
|
+
'amount': amount,
|
|
1997
|
+
'address': address,
|
|
1998
|
+
};
|
|
1999
|
+
if (tag !== undefined) {
|
|
2000
|
+
request['address_tag'] = tag;
|
|
2001
|
+
}
|
|
2002
|
+
let networkCode = undefined;
|
|
2003
|
+
[networkCode, params] = this.handleNetworkCodeAndParams(params);
|
|
2004
|
+
const networkId = this.networkCodeToId(networkCode);
|
|
2005
|
+
if (networkId !== undefined) {
|
|
2006
|
+
request['network_id'] = networkId;
|
|
2007
|
+
}
|
|
2008
|
+
const response = await this.v1PrivatePostPrivateCreateWithdrawal(this.extend(request, params));
|
|
2009
|
+
//
|
|
2010
|
+
// {
|
|
2011
|
+
// "id":-1,
|
|
2012
|
+
// "method":"private/create-withdrawal",
|
|
2013
|
+
// "code":0,
|
|
2014
|
+
// "result": {
|
|
2015
|
+
// "id": 2220,
|
|
2016
|
+
// "amount": 1,
|
|
2017
|
+
// "fee": 0.0004,
|
|
2018
|
+
// "symbol": "BTC",
|
|
2019
|
+
// "address": "2NBqqD5GRJ8wHy1PYyCXTe9ke5226FhavBf",
|
|
2020
|
+
// "client_wid": "my_withdrawal_002",
|
|
2021
|
+
// "create_time":1607063412000
|
|
2022
|
+
// }
|
|
2023
|
+
// }
|
|
2024
|
+
//
|
|
2025
|
+
const result = this.safeDict(response, 'result');
|
|
2026
|
+
return this.parseTransaction(result, currency);
|
|
2027
|
+
}
|
|
2028
|
+
/**
|
|
2029
|
+
* @method
|
|
2030
|
+
* @name cryptocom#fetchDepositAddressesByNetwork
|
|
2031
|
+
* @description fetch a dictionary of addresses for a currency, indexed by network
|
|
2032
|
+
* @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#private-get-deposit-address
|
|
2033
|
+
* @param {string} code unified currency code of the currency for the deposit address
|
|
2034
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
2035
|
+
* @returns {object} a dictionary of [address structures]{@link https://docs.ccxt.com/#/?id=address-structure} indexed by the network
|
|
2036
|
+
*/
|
|
2037
|
+
async fetchDepositAddressesByNetwork(code, params = {}) {
|
|
2038
|
+
await this.loadMarkets();
|
|
2039
|
+
const currency = this.safeCurrency(code);
|
|
2040
|
+
const request = {
|
|
2041
|
+
'currency': currency['id'],
|
|
2042
|
+
};
|
|
2043
|
+
const response = await this.v1PrivatePostPrivateGetDepositAddress(this.extend(request, params));
|
|
2044
|
+
//
|
|
2045
|
+
// {
|
|
2046
|
+
// "id": 1234555011221,
|
|
2047
|
+
// "method": "private/get-deposit-address",
|
|
2048
|
+
// "code": 0,
|
|
2049
|
+
// "result": {
|
|
2050
|
+
// "deposit_address_list": [
|
|
2051
|
+
// {
|
|
2052
|
+
// "currency": "BTC",
|
|
2053
|
+
// "create_time": 1686730755000,
|
|
2054
|
+
// "id": "3737377",
|
|
2055
|
+
// "address": "3N9afggxTSmJ3H4jaMQuWyEiLBzZdAbK6d",
|
|
2056
|
+
// "status":"1",
|
|
2057
|
+
// "network": "BTC"
|
|
2058
|
+
// },
|
|
2059
|
+
// ]
|
|
2060
|
+
// }
|
|
2061
|
+
// }
|
|
2062
|
+
//
|
|
2063
|
+
const data = this.safeDict(response, 'result', {});
|
|
2064
|
+
const addresses = this.safeList(data, 'deposit_address_list', []);
|
|
2065
|
+
const addressesLength = addresses.length;
|
|
2066
|
+
if (addressesLength === 0) {
|
|
2067
|
+
throw new ExchangeError(this.id + ' fetchDepositAddressesByNetwork() generating address...');
|
|
2068
|
+
}
|
|
2069
|
+
const result = {};
|
|
2070
|
+
for (let i = 0; i < addressesLength; i++) {
|
|
2071
|
+
const value = this.safeDict(addresses, i);
|
|
2072
|
+
const addressString = this.safeString(value, 'address');
|
|
2073
|
+
const currencyId = this.safeString(value, 'currency');
|
|
2074
|
+
const responseCode = this.safeCurrencyCode(currencyId);
|
|
2075
|
+
const [address, tag] = this.parseAddress(addressString);
|
|
2076
|
+
this.checkAddress(address);
|
|
2077
|
+
const networkId = this.safeString(value, 'network');
|
|
2078
|
+
const network = this.networkIdToCode(networkId, responseCode);
|
|
2079
|
+
result[network] = {
|
|
2080
|
+
'info': value,
|
|
2081
|
+
'currency': responseCode,
|
|
2082
|
+
'network': network,
|
|
2083
|
+
'address': address,
|
|
2084
|
+
'tag': tag,
|
|
2085
|
+
};
|
|
2086
|
+
}
|
|
2087
|
+
return result;
|
|
2088
|
+
}
|
|
2089
|
+
/**
|
|
2090
|
+
* @method
|
|
2091
|
+
* @name cryptocom#fetchDepositAddress
|
|
2092
|
+
* @description fetch the deposit address for a currency associated with this account
|
|
2093
|
+
* @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#private-get-deposit-address
|
|
2094
|
+
* @param {string} code unified currency code
|
|
2095
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
2096
|
+
* @returns {object} an [address structure]{@link https://docs.ccxt.com/#/?id=address-structure}
|
|
2097
|
+
*/
|
|
2098
|
+
async fetchDepositAddress(code, params = {}) {
|
|
2099
|
+
const network = this.safeStringUpper(params, 'network');
|
|
2100
|
+
params = this.omit(params, ['network']);
|
|
2101
|
+
const depositAddresses = await this.fetchDepositAddressesByNetwork(code, params);
|
|
2102
|
+
if (network in depositAddresses) {
|
|
2103
|
+
return depositAddresses[network];
|
|
2104
|
+
}
|
|
2105
|
+
else {
|
|
2106
|
+
const keys = Object.keys(depositAddresses);
|
|
2107
|
+
return depositAddresses[keys[0]];
|
|
2108
|
+
}
|
|
2109
|
+
}
|
|
2110
|
+
/**
|
|
2111
|
+
* @method
|
|
2112
|
+
* @name cryptocom#fetchDeposits
|
|
2113
|
+
* @description fetch all deposits made to an account
|
|
2114
|
+
* @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#private-get-deposit-history
|
|
2115
|
+
* @param {string} code unified currency code
|
|
2116
|
+
* @param {int} [since] the earliest time in ms to fetch deposits for
|
|
2117
|
+
* @param {int} [limit] the maximum number of deposits structures to retrieve
|
|
2118
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
2119
|
+
* @param {int} [params.until] timestamp in ms for the ending date filter, default is the current time
|
|
2120
|
+
* @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}
|
|
2121
|
+
*/
|
|
2122
|
+
async fetchDeposits(code = undefined, since = undefined, limit = undefined, params = {}) {
|
|
2123
|
+
await this.loadMarkets();
|
|
2124
|
+
let currency = undefined;
|
|
2125
|
+
const request = {};
|
|
2126
|
+
if (code !== undefined) {
|
|
2127
|
+
currency = this.safeCurrency(code);
|
|
2128
|
+
request['currency'] = currency['id'];
|
|
2129
|
+
}
|
|
2130
|
+
if (since !== undefined) {
|
|
2131
|
+
// 90 days date range
|
|
2132
|
+
request['start_ts'] = since;
|
|
2133
|
+
}
|
|
2134
|
+
if (limit !== undefined) {
|
|
2135
|
+
request['page_size'] = limit;
|
|
2136
|
+
}
|
|
2137
|
+
const until = this.safeInteger(params, 'until');
|
|
2138
|
+
params = this.omit(params, ['until']);
|
|
2139
|
+
if (until !== undefined) {
|
|
2140
|
+
request['end_ts'] = until;
|
|
2141
|
+
}
|
|
2142
|
+
const response = await this.v1PrivatePostPrivateGetDepositHistory(this.extend(request, params));
|
|
2143
|
+
//
|
|
2144
|
+
// {
|
|
2145
|
+
// "id": 1688701375714,
|
|
2146
|
+
// "method": "private/get-deposit-history",
|
|
2147
|
+
// "code": 0,
|
|
2148
|
+
// "result": {
|
|
2149
|
+
// "deposit_list": [
|
|
2150
|
+
// {
|
|
2151
|
+
// "currency": "BTC",
|
|
2152
|
+
// "fee": 0,
|
|
2153
|
+
// "create_time": 1688023659000,
|
|
2154
|
+
// "id": "6201135",
|
|
2155
|
+
// "update_time": 1688178509000,
|
|
2156
|
+
// "amount": 0.00114571,
|
|
2157
|
+
// "address": "1234fggxTSmJ3H4jaMQuWyEiLBzZdAbK6d",
|
|
2158
|
+
// "status": "1",
|
|
2159
|
+
// "txid": "f0ae4202b76eb999c301eccdde44dc639bee42d1fdd5974105286ca3393f6065/2"
|
|
2160
|
+
// },
|
|
2161
|
+
// ]
|
|
2162
|
+
// }
|
|
2163
|
+
// }
|
|
2164
|
+
//
|
|
2165
|
+
const data = this.safeDict(response, 'result', {});
|
|
2166
|
+
const depositList = this.safeList(data, 'deposit_list', []);
|
|
2167
|
+
return this.parseTransactions(depositList, currency, since, limit);
|
|
2168
|
+
}
|
|
2169
|
+
/**
|
|
2170
|
+
* @method
|
|
2171
|
+
* @name cryptocom#fetchWithdrawals
|
|
2172
|
+
* @description fetch all withdrawals made from an account
|
|
2173
|
+
* @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#private-get-withdrawal-history
|
|
2174
|
+
* @param {string} code unified currency code
|
|
2175
|
+
* @param {int} [since] the earliest time in ms to fetch withdrawals for
|
|
2176
|
+
* @param {int} [limit] the maximum number of withdrawals structures to retrieve
|
|
2177
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
2178
|
+
* @param {int} [params.until] timestamp in ms for the ending date filter, default is the current time
|
|
2179
|
+
* @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}
|
|
2180
|
+
*/
|
|
2181
|
+
async fetchWithdrawals(code = undefined, since = undefined, limit = undefined, params = {}) {
|
|
2182
|
+
await this.loadMarkets();
|
|
2183
|
+
let currency = undefined;
|
|
2184
|
+
const request = {};
|
|
2185
|
+
if (code !== undefined) {
|
|
2186
|
+
currency = this.safeCurrency(code);
|
|
2187
|
+
request['currency'] = currency['id'];
|
|
2188
|
+
}
|
|
2189
|
+
if (since !== undefined) {
|
|
2190
|
+
// 90 days date range
|
|
2191
|
+
request['start_ts'] = since;
|
|
2192
|
+
}
|
|
2193
|
+
if (limit !== undefined) {
|
|
2194
|
+
request['page_size'] = limit;
|
|
2195
|
+
}
|
|
2196
|
+
const until = this.safeInteger(params, 'until');
|
|
2197
|
+
params = this.omit(params, ['until']);
|
|
2198
|
+
if (until !== undefined) {
|
|
2199
|
+
request['end_ts'] = until;
|
|
2200
|
+
}
|
|
2201
|
+
const response = await this.v1PrivatePostPrivateGetWithdrawalHistory(this.extend(request, params));
|
|
2202
|
+
//
|
|
2203
|
+
// {
|
|
2204
|
+
// "id": 1688613879534,
|
|
2205
|
+
// "method": "private/get-withdrawal-history",
|
|
2206
|
+
// "code": 0,
|
|
2207
|
+
// "result": {
|
|
2208
|
+
// "withdrawal_list": [
|
|
2209
|
+
// {
|
|
2210
|
+
// "currency": "BTC",
|
|
2211
|
+
// "client_wid": "",
|
|
2212
|
+
// "fee": 0.0005,
|
|
2213
|
+
// "create_time": 1688613850000,
|
|
2214
|
+
// "id": "5275977",
|
|
2215
|
+
// "update_time": 1688613850000,
|
|
2216
|
+
// "amount": 0.0005,
|
|
2217
|
+
// "address": "1234NMEWbiF8ZkwUMxmfzMxi2A1MQ44bMn",
|
|
2218
|
+
// "status": "1",
|
|
2219
|
+
// "txid": "",
|
|
2220
|
+
// "network_id": "BTC"
|
|
2221
|
+
// }
|
|
2222
|
+
// ]
|
|
2223
|
+
// }
|
|
2224
|
+
// }
|
|
2225
|
+
//
|
|
2226
|
+
const data = this.safeDict(response, 'result', {});
|
|
2227
|
+
const withdrawalList = this.safeList(data, 'withdrawal_list', []);
|
|
2228
|
+
return this.parseTransactions(withdrawalList, currency, since, limit);
|
|
2229
|
+
}
|
|
2230
|
+
parseTicker(ticker, market = undefined) {
|
|
2231
|
+
//
|
|
2232
|
+
// fetchTicker
|
|
2233
|
+
//
|
|
2234
|
+
// {
|
|
2235
|
+
// "i": "BTC_USD",
|
|
2236
|
+
// "h": "30821.45",
|
|
2237
|
+
// "l": "28685.11",
|
|
2238
|
+
// "a": "30446.00",
|
|
2239
|
+
// "v": "1767.8734",
|
|
2240
|
+
// "vv": "52436726.42",
|
|
2241
|
+
// "c": "0.0583",
|
|
2242
|
+
// "b": "30442.00",
|
|
2243
|
+
// "k": "30447.66",
|
|
2244
|
+
// "t": 1687403045415
|
|
2245
|
+
// }
|
|
2246
|
+
//
|
|
2247
|
+
// fetchTickers
|
|
2248
|
+
//
|
|
2249
|
+
// {
|
|
2250
|
+
// "i": "AVAXUSD-PERP",
|
|
2251
|
+
// "h": "13.209",
|
|
2252
|
+
// "l": "12.148",
|
|
2253
|
+
// "a": "13.209",
|
|
2254
|
+
// "v": "1109.8",
|
|
2255
|
+
// "vv": "14017.33",
|
|
2256
|
+
// "c": "0.0732",
|
|
2257
|
+
// "b": "13.210",
|
|
2258
|
+
// "k": "13.230",
|
|
2259
|
+
// "oi": "10888.9",
|
|
2260
|
+
// "t": 1687402657575
|
|
2261
|
+
// }
|
|
2262
|
+
//
|
|
2263
|
+
const timestamp = this.safeInteger(ticker, 't');
|
|
2264
|
+
const marketId = this.safeString(ticker, 'i');
|
|
2265
|
+
market = this.safeMarket(marketId, market, '_');
|
|
2266
|
+
const quote = this.safeString(market, 'quote');
|
|
2267
|
+
const last = this.safeString(ticker, 'a');
|
|
2268
|
+
return this.safeTicker({
|
|
2269
|
+
'symbol': market['symbol'],
|
|
2270
|
+
'timestamp': timestamp,
|
|
2271
|
+
'datetime': this.iso8601(timestamp),
|
|
2272
|
+
'high': this.safeNumber(ticker, 'h'),
|
|
2273
|
+
'low': this.safeNumber(ticker, 'l'),
|
|
2274
|
+
'bid': this.safeNumber(ticker, 'b'),
|
|
2275
|
+
'bidVolume': undefined,
|
|
2276
|
+
'ask': this.safeNumber(ticker, 'k'),
|
|
2277
|
+
'askVolume': undefined,
|
|
2278
|
+
'vwap': undefined,
|
|
2279
|
+
'open': undefined,
|
|
2280
|
+
'close': last,
|
|
2281
|
+
'last': last,
|
|
2282
|
+
'previousClose': undefined,
|
|
2283
|
+
'change': undefined,
|
|
2284
|
+
'percentage': this.safeString(ticker, 'c'),
|
|
2285
|
+
'average': undefined,
|
|
2286
|
+
'baseVolume': this.safeString(ticker, 'v'),
|
|
2287
|
+
'quoteVolume': (quote === 'USD') ? this.safeString(ticker, 'vv') : undefined,
|
|
2288
|
+
'info': ticker,
|
|
2289
|
+
}, market);
|
|
2290
|
+
}
|
|
2291
|
+
parseTrade(trade, market = undefined) {
|
|
2292
|
+
//
|
|
2293
|
+
// fetchTrades
|
|
2294
|
+
//
|
|
2295
|
+
// {
|
|
2296
|
+
// "s": "sell",
|
|
2297
|
+
// "p": "26386.00",
|
|
2298
|
+
// "q": "0.00453",
|
|
2299
|
+
// "tn": 1686944282062,
|
|
2300
|
+
// "tn": 1704476468851524373,
|
|
2301
|
+
// "d": "4611686018455979970",
|
|
2302
|
+
// "i": "BTC_USD"
|
|
2303
|
+
// }
|
|
2304
|
+
//
|
|
2305
|
+
// fetchMyTrades
|
|
2306
|
+
//
|
|
2307
|
+
// {
|
|
2308
|
+
// "account_id": "ds075abc-1234-4321-bd6g-ff9007252r63",
|
|
2309
|
+
// "event_date": "2023-06-16",
|
|
2310
|
+
// "journal_type": "TRADING",
|
|
2311
|
+
// "side": "BUY",
|
|
2312
|
+
// "instrument_name": "BTC_USD",
|
|
2313
|
+
// "fees": "-0.0000000525",
|
|
2314
|
+
// "trade_id": "6142909898247428343",
|
|
2315
|
+
// "trade_match_id": "4611686018455978480",
|
|
2316
|
+
// "create_time": 1686941992887,
|
|
2317
|
+
// "traded_price": "26347.16",
|
|
2318
|
+
// "traded_quantity": "0.00021",
|
|
2319
|
+
// "fee_instrument_name": "BTC",
|
|
2320
|
+
// "client_oid": "d1c70a60-1234-4c92-b2a0-72b931cb31e0",
|
|
2321
|
+
// "taker_side": "TAKER",
|
|
2322
|
+
// "order_id": "6142909895036331486",
|
|
2323
|
+
// "create_time_ns": "1686941992887207066"
|
|
2324
|
+
// }
|
|
2325
|
+
//
|
|
2326
|
+
const timestamp = this.safeInteger2(trade, 't', 'create_time');
|
|
2327
|
+
const marketId = this.safeString2(trade, 'i', 'instrument_name');
|
|
2328
|
+
market = this.safeMarket(marketId, market, '_');
|
|
2329
|
+
const feeCurrency = this.safeString(trade, 'fee_instrument_name');
|
|
2330
|
+
const feeCostString = this.safeString(trade, 'fees');
|
|
2331
|
+
return this.safeTrade({
|
|
2332
|
+
'info': trade,
|
|
2333
|
+
'id': this.safeString2(trade, 'd', 'trade_id'),
|
|
2334
|
+
'timestamp': timestamp,
|
|
2335
|
+
'datetime': this.iso8601(timestamp),
|
|
2336
|
+
'symbol': market['symbol'],
|
|
2337
|
+
'order': this.safeString(trade, 'order_id'),
|
|
2338
|
+
'side': this.safeStringLower2(trade, 's', 'side'),
|
|
2339
|
+
'takerOrMaker': this.safeStringLower(trade, 'taker_side'),
|
|
2340
|
+
'price': this.safeNumber2(trade, 'p', 'traded_price'),
|
|
2341
|
+
'amount': this.safeNumber2(trade, 'q', 'traded_quantity'),
|
|
2342
|
+
'cost': undefined,
|
|
2343
|
+
'type': undefined,
|
|
2344
|
+
'fee': {
|
|
2345
|
+
'currency': this.safeCurrencyCode(feeCurrency),
|
|
2346
|
+
'cost': this.parseNumber(Precise.stringNeg(feeCostString)),
|
|
2347
|
+
},
|
|
2348
|
+
}, market);
|
|
2349
|
+
}
|
|
2350
|
+
parseOHLCV(ohlcv, market = undefined) {
|
|
2351
|
+
//
|
|
2352
|
+
// {
|
|
2353
|
+
// "o": "26949.89",
|
|
2354
|
+
// "h": "26957.64",
|
|
2355
|
+
// "l": "26948.24",
|
|
2356
|
+
// "c": "26950.00",
|
|
2357
|
+
// "v": "0.0670",
|
|
2358
|
+
// "t": 1687237080000
|
|
2359
|
+
// }
|
|
2360
|
+
//
|
|
2361
|
+
return [
|
|
2362
|
+
this.safeInteger(ohlcv, 't'),
|
|
2363
|
+
this.safeNumber(ohlcv, 'o'),
|
|
2364
|
+
this.safeNumber(ohlcv, 'h'),
|
|
2365
|
+
this.safeNumber(ohlcv, 'l'),
|
|
2366
|
+
this.safeNumber(ohlcv, 'c'),
|
|
2367
|
+
this.safeNumber(ohlcv, 'v'),
|
|
2368
|
+
];
|
|
2369
|
+
}
|
|
2370
|
+
parseOrderStatus(status) {
|
|
2371
|
+
const statuses = {
|
|
2372
|
+
'ACTIVE': 'open',
|
|
2373
|
+
'CANCELED': 'canceled',
|
|
2374
|
+
'FILLED': 'closed',
|
|
2375
|
+
'REJECTED': 'rejected',
|
|
2376
|
+
'EXPIRED': 'expired',
|
|
2377
|
+
};
|
|
2378
|
+
return this.safeString(statuses, status, status);
|
|
2379
|
+
}
|
|
2380
|
+
parseTimeInForce(timeInForce) {
|
|
2381
|
+
const timeInForces = {
|
|
2382
|
+
'GOOD_TILL_CANCEL': 'GTC',
|
|
2383
|
+
'IMMEDIATE_OR_CANCEL': 'IOC',
|
|
2384
|
+
'FILL_OR_KILL': 'FOK',
|
|
2385
|
+
};
|
|
2386
|
+
return this.safeString(timeInForces, timeInForce, timeInForce);
|
|
2387
|
+
}
|
|
2388
|
+
parseOrder(order, market = undefined) {
|
|
2389
|
+
//
|
|
2390
|
+
// createOrder, cancelOrder
|
|
2391
|
+
//
|
|
2392
|
+
// {
|
|
2393
|
+
// "order_id": "6540219377766741832",
|
|
2394
|
+
// "client_oid": "CCXT_d6ef7c3db6c1495aa8b757"
|
|
2395
|
+
// }
|
|
2396
|
+
//
|
|
2397
|
+
// fetchOpenOrders, fetchOrder, fetchOrders
|
|
2398
|
+
//
|
|
2399
|
+
// {
|
|
2400
|
+
// "account_id": "ce075bef-1234-4321-bd6g-ff9007252e63",
|
|
2401
|
+
// "order_id": "6530219477767564494",
|
|
2402
|
+
// "client_oid": "CCXT_7ce730f0388441df9bc218",
|
|
2403
|
+
// "order_type": "LIMIT",
|
|
2404
|
+
// "time_in_force": "GOOD_TILL_CANCEL",
|
|
2405
|
+
// "side": "BUY",
|
|
2406
|
+
// "exec_inst": [ ],
|
|
2407
|
+
// "quantity": "0.00020",
|
|
2408
|
+
// "limit_price": "20000.00",
|
|
2409
|
+
// "order_value": "4",
|
|
2410
|
+
// "avg_price": "0",
|
|
2411
|
+
// "trigger_price": "0",
|
|
2412
|
+
// "ref_price": "0",
|
|
2413
|
+
// "cumulative_quantity": "0",
|
|
2414
|
+
// "cumulative_value": "0",
|
|
2415
|
+
// "cumulative_fee": "0",
|
|
2416
|
+
// "status": "ACTIVE",
|
|
2417
|
+
// "update_user_id": "ce075bef-1234-4321-bd6g-gg9007252e63",
|
|
2418
|
+
// "order_date": "2023-06-15",
|
|
2419
|
+
// "instrument_name": "BTC_USD",
|
|
2420
|
+
// "fee_instrument_name": "BTC",
|
|
2421
|
+
// "create_time": 1686806053992,
|
|
2422
|
+
// "create_time_ns": "1686806053992921880",
|
|
2423
|
+
// "update_time": 1686806053993
|
|
2424
|
+
// }
|
|
2425
|
+
//
|
|
2426
|
+
// createOrders
|
|
2427
|
+
// {
|
|
2428
|
+
// "code" : 306,
|
|
2429
|
+
// "index" : 1,
|
|
2430
|
+
// "client_oid" : "1698068111133_1",
|
|
2431
|
+
// "message" : "INSUFFICIENT_AVAILABLE_BALANCE",
|
|
2432
|
+
// "order_id" : "6142909896519488207"
|
|
2433
|
+
// }
|
|
2434
|
+
//
|
|
2435
|
+
const code = this.safeInteger(order, 'code');
|
|
2436
|
+
if ((code !== undefined) && (code !== 0)) {
|
|
2437
|
+
return this.safeOrder({
|
|
2438
|
+
'id': this.safeString(order, 'order_id'),
|
|
2439
|
+
'clientOrderId': this.safeString(order, 'client_oid'),
|
|
2440
|
+
'info': order,
|
|
2441
|
+
'status': 'rejected',
|
|
2442
|
+
});
|
|
2443
|
+
}
|
|
2444
|
+
const created = this.safeInteger(order, 'create_time');
|
|
2445
|
+
const marketId = this.safeString(order, 'instrument_name');
|
|
2446
|
+
const symbol = this.safeSymbol(marketId, market);
|
|
2447
|
+
const execInst = this.safeValue(order, 'exec_inst');
|
|
2448
|
+
let postOnly = undefined;
|
|
2449
|
+
if (execInst !== undefined) {
|
|
2450
|
+
postOnly = false;
|
|
2451
|
+
for (let i = 0; i < execInst.length; i++) {
|
|
2452
|
+
const inst = execInst[i];
|
|
2453
|
+
if (inst === 'POST_ONLY') {
|
|
2454
|
+
postOnly = true;
|
|
2455
|
+
break;
|
|
2456
|
+
}
|
|
2457
|
+
}
|
|
2458
|
+
}
|
|
2459
|
+
const feeCurrency = this.safeString(order, 'fee_instrument_name');
|
|
2460
|
+
return this.safeOrder({
|
|
2461
|
+
'info': order,
|
|
2462
|
+
'id': this.safeString(order, 'order_id'),
|
|
2463
|
+
'clientOrderId': this.safeString(order, 'client_oid'),
|
|
2464
|
+
'timestamp': created,
|
|
2465
|
+
'datetime': this.iso8601(created),
|
|
2466
|
+
'lastTradeTimestamp': this.safeInteger(order, 'update_time'),
|
|
2467
|
+
'status': this.parseOrderStatus(this.safeString(order, 'status')),
|
|
2468
|
+
'symbol': symbol,
|
|
2469
|
+
'type': this.safeStringLower(order, 'order_type'),
|
|
2470
|
+
'timeInForce': this.parseTimeInForce(this.safeString(order, 'time_in_force')),
|
|
2471
|
+
'postOnly': postOnly,
|
|
2472
|
+
'side': this.safeStringLower(order, 'side'),
|
|
2473
|
+
'price': this.safeNumber(order, 'limit_price'),
|
|
2474
|
+
'amount': this.safeNumber(order, 'quantity'),
|
|
2475
|
+
'filled': this.safeNumber(order, 'cumulative_quantity'),
|
|
2476
|
+
'remaining': undefined,
|
|
2477
|
+
'average': this.safeNumber(order, 'avg_price'),
|
|
2478
|
+
'cost': this.safeNumber(order, 'cumulative_value'),
|
|
2479
|
+
'fee': {
|
|
2480
|
+
'currency': this.safeCurrencyCode(feeCurrency),
|
|
2481
|
+
'cost': this.safeNumber(order, 'cumulative_fee'),
|
|
2482
|
+
},
|
|
2483
|
+
'trades': [],
|
|
2484
|
+
}, market);
|
|
2485
|
+
}
|
|
2486
|
+
parseDepositStatus(status) {
|
|
2487
|
+
const statuses = {
|
|
2488
|
+
'0': 'pending',
|
|
2489
|
+
'1': 'ok',
|
|
2490
|
+
'2': 'failed',
|
|
2491
|
+
'3': 'pending',
|
|
2492
|
+
};
|
|
2493
|
+
return this.safeString(statuses, status, status);
|
|
2494
|
+
}
|
|
2495
|
+
parseWithdrawalStatus(status) {
|
|
2496
|
+
const statuses = {
|
|
2497
|
+
'0': 'pending',
|
|
2498
|
+
'1': 'pending',
|
|
2499
|
+
'2': 'failed',
|
|
2500
|
+
'3': 'pending',
|
|
2501
|
+
'4': 'failed',
|
|
2502
|
+
'5': 'ok',
|
|
2503
|
+
'6': 'canceled',
|
|
2504
|
+
};
|
|
2505
|
+
return this.safeString(statuses, status, status);
|
|
2506
|
+
}
|
|
2507
|
+
parseTransaction(transaction, currency = undefined) {
|
|
2508
|
+
//
|
|
2509
|
+
// fetchDeposits
|
|
2510
|
+
//
|
|
2511
|
+
// {
|
|
2512
|
+
// "currency": "BTC",
|
|
2513
|
+
// "fee": 0,
|
|
2514
|
+
// "create_time": 1688023659000,
|
|
2515
|
+
// "id": "6201135",
|
|
2516
|
+
// "update_time": 1688178509000,
|
|
2517
|
+
// "amount": 0.00114571,
|
|
2518
|
+
// "address": "1234fggxTSmJ3H4jaMQuWyEiLBzZdAbK6d",
|
|
2519
|
+
// "status": "1",
|
|
2520
|
+
// "txid": "f0ae4202b76eb999c301eccdde44dc639bee42d1fdd5974105286ca3393f6065/2"
|
|
2521
|
+
// }
|
|
2522
|
+
//
|
|
2523
|
+
// fetchWithdrawals
|
|
2524
|
+
//
|
|
2525
|
+
// {
|
|
2526
|
+
// "currency": "BTC",
|
|
2527
|
+
// "client_wid": "",
|
|
2528
|
+
// "fee": 0.0005,
|
|
2529
|
+
// "create_time": 1688613850000,
|
|
2530
|
+
// "id": "5775977",
|
|
2531
|
+
// "update_time": 1688613850000,
|
|
2532
|
+
// "amount": 0.0005,
|
|
2533
|
+
// "address": "1234NMEWbiF8ZkwUMxmfzMxi2A1MQ44bMn",
|
|
2534
|
+
// "status": "1",
|
|
2535
|
+
// "txid": "",
|
|
2536
|
+
// "network_id": "BTC"
|
|
2537
|
+
// }
|
|
2538
|
+
//
|
|
2539
|
+
// withdraw
|
|
2540
|
+
//
|
|
2541
|
+
// {
|
|
2542
|
+
// "id": 2220,
|
|
2543
|
+
// "amount": 1,
|
|
2544
|
+
// "fee": 0.0004,
|
|
2545
|
+
// "symbol": "BTC",
|
|
2546
|
+
// "address": "2NBqqD5GRJ8wHy1PYyCXTe9ke5226FhavBf",
|
|
2547
|
+
// "client_wid": "my_withdrawal_002",
|
|
2548
|
+
// "create_time":1607063412000
|
|
2549
|
+
// }
|
|
2550
|
+
//
|
|
2551
|
+
let type = undefined;
|
|
2552
|
+
const rawStatus = this.safeString(transaction, 'status');
|
|
2553
|
+
let status = undefined;
|
|
2554
|
+
if ('client_wid' in transaction) {
|
|
2555
|
+
type = 'withdrawal';
|
|
2556
|
+
status = this.parseWithdrawalStatus(rawStatus);
|
|
2557
|
+
}
|
|
2558
|
+
else {
|
|
2559
|
+
type = 'deposit';
|
|
2560
|
+
status = this.parseDepositStatus(rawStatus);
|
|
2561
|
+
}
|
|
2562
|
+
const addressString = this.safeString(transaction, 'address');
|
|
2563
|
+
const [address, tag] = this.parseAddress(addressString);
|
|
2564
|
+
const currencyId = this.safeString(transaction, 'currency');
|
|
2565
|
+
const code = this.safeCurrencyCode(currencyId, currency);
|
|
2566
|
+
const timestamp = this.safeInteger(transaction, 'create_time');
|
|
2567
|
+
const feeCost = this.safeNumber(transaction, 'fee');
|
|
2568
|
+
let fee = undefined;
|
|
2569
|
+
if (feeCost !== undefined) {
|
|
2570
|
+
fee = { 'currency': code, 'cost': feeCost };
|
|
2571
|
+
}
|
|
2572
|
+
return {
|
|
2573
|
+
'info': transaction,
|
|
2574
|
+
'id': this.safeString(transaction, 'id'),
|
|
2575
|
+
'txid': this.safeString(transaction, 'txid'),
|
|
2576
|
+
'timestamp': timestamp,
|
|
2577
|
+
'datetime': this.iso8601(timestamp),
|
|
2578
|
+
'network': undefined,
|
|
2579
|
+
'address': address,
|
|
2580
|
+
'addressTo': address,
|
|
2581
|
+
'addressFrom': undefined,
|
|
2582
|
+
'tag': tag,
|
|
2583
|
+
'tagTo': tag,
|
|
2584
|
+
'tagFrom': undefined,
|
|
2585
|
+
'type': type,
|
|
2586
|
+
'amount': this.safeNumber(transaction, 'amount'),
|
|
2587
|
+
'currency': code,
|
|
2588
|
+
'status': status,
|
|
2589
|
+
'updated': this.safeInteger(transaction, 'update_time'),
|
|
2590
|
+
'internal': undefined,
|
|
2591
|
+
'comment': this.safeString(transaction, 'client_wid'),
|
|
2592
|
+
'fee': fee,
|
|
2593
|
+
};
|
|
2594
|
+
}
|
|
2595
|
+
customHandleMarginModeAndParams(methodName, params = {}) {
|
|
2596
|
+
/**
|
|
2597
|
+
* @ignore
|
|
2598
|
+
* @method
|
|
2599
|
+
* @description marginMode specified by params["marginMode"], this.options["marginMode"], this.options["defaultMarginMode"], params["margin"] = true or this.options["defaultType"] = 'margin'
|
|
2600
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
2601
|
+
* @returns {Array} the marginMode in lowercase
|
|
2602
|
+
*/
|
|
2603
|
+
const defaultType = this.safeString(this.options, 'defaultType');
|
|
2604
|
+
const isMargin = this.safeBool(params, 'margin', false);
|
|
2605
|
+
params = this.omit(params, 'margin');
|
|
2606
|
+
let marginMode = undefined;
|
|
2607
|
+
[marginMode, params] = this.handleMarginModeAndParams(methodName, params);
|
|
2608
|
+
if (marginMode !== undefined) {
|
|
2609
|
+
if (marginMode !== 'cross') {
|
|
2610
|
+
throw new NotSupported(this.id + ' only cross margin is supported');
|
|
2611
|
+
}
|
|
2612
|
+
}
|
|
2613
|
+
else {
|
|
2614
|
+
if ((defaultType === 'margin') || (isMargin === true)) {
|
|
2615
|
+
marginMode = 'cross';
|
|
2616
|
+
}
|
|
2617
|
+
}
|
|
2618
|
+
return [marginMode, params];
|
|
2619
|
+
}
|
|
2620
|
+
parseDepositWithdrawFee(fee, currency = undefined) {
|
|
2621
|
+
//
|
|
2622
|
+
// {
|
|
2623
|
+
// "full_name": "Alchemix",
|
|
2624
|
+
// "default_network": "ETH",
|
|
2625
|
+
// "network_list": [
|
|
2626
|
+
// {
|
|
2627
|
+
// "network_id": "ETH",
|
|
2628
|
+
// "withdrawal_fee": "0.25000000",
|
|
2629
|
+
// "withdraw_enabled": true,
|
|
2630
|
+
// "min_withdrawal_amount": "0.5",
|
|
2631
|
+
// "deposit_enabled": true,
|
|
2632
|
+
// "confirmation_required": "0"
|
|
2633
|
+
// }
|
|
2634
|
+
// ]
|
|
2635
|
+
// }
|
|
2636
|
+
//
|
|
2637
|
+
const networkList = this.safeList(fee, 'network_list', []);
|
|
2638
|
+
const networkListLength = networkList.length;
|
|
2639
|
+
const result = {
|
|
2640
|
+
'info': fee,
|
|
2641
|
+
'withdraw': {
|
|
2642
|
+
'fee': undefined,
|
|
2643
|
+
'percentage': undefined,
|
|
2644
|
+
},
|
|
2645
|
+
'deposit': {
|
|
2646
|
+
'fee': undefined,
|
|
2647
|
+
'percentage': undefined,
|
|
2648
|
+
},
|
|
2649
|
+
'networks': {},
|
|
2650
|
+
};
|
|
2651
|
+
if (networkList !== undefined) {
|
|
2652
|
+
for (let i = 0; i < networkListLength; i++) {
|
|
2653
|
+
const networkInfo = networkList[i];
|
|
2654
|
+
const networkId = this.safeString(networkInfo, 'network_id');
|
|
2655
|
+
const currencyCode = this.safeString(currency, 'code');
|
|
2656
|
+
const networkCode = this.networkIdToCode(networkId, currencyCode);
|
|
2657
|
+
result['networks'][networkCode] = {
|
|
2658
|
+
'deposit': { 'fee': undefined, 'percentage': undefined },
|
|
2659
|
+
'withdraw': { 'fee': this.safeNumber(networkInfo, 'withdrawal_fee'), 'percentage': false },
|
|
2660
|
+
};
|
|
2661
|
+
if (networkListLength === 1) {
|
|
2662
|
+
result['withdraw']['fee'] = this.safeNumber(networkInfo, 'withdrawal_fee');
|
|
2663
|
+
result['withdraw']['percentage'] = false;
|
|
2664
|
+
}
|
|
2665
|
+
}
|
|
2666
|
+
}
|
|
2667
|
+
return result;
|
|
2668
|
+
}
|
|
2669
|
+
/**
|
|
2670
|
+
* @method
|
|
2671
|
+
* @name cryptocom#fetchDepositWithdrawFees
|
|
2672
|
+
* @description fetch deposit and withdraw fees
|
|
2673
|
+
* @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#private-get-currency-networks
|
|
2674
|
+
* @param {string[]|undefined} codes list of unified currency codes
|
|
2675
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
2676
|
+
* @returns {object} a list of [fee structures]{@link https://docs.ccxt.com/#/?id=fee-structure}
|
|
2677
|
+
*/
|
|
2678
|
+
async fetchDepositWithdrawFees(codes = undefined, params = {}) {
|
|
2679
|
+
await this.loadMarkets();
|
|
2680
|
+
const response = await this.v1PrivatePostPrivateGetCurrencyNetworks(params);
|
|
2681
|
+
const data = this.safeValue(response, 'result');
|
|
2682
|
+
const currencyMap = this.safeList(data, 'currency_map');
|
|
2683
|
+
return this.parseDepositWithdrawFees(currencyMap, codes, 'full_name');
|
|
2684
|
+
}
|
|
2685
|
+
/**
|
|
2686
|
+
* @method
|
|
2687
|
+
* @name cryptocom#fetchLedger
|
|
2688
|
+
* @description fetch the history of changes, actions done by the user or operations that altered the balance of the user
|
|
2689
|
+
* @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#private-get-transactions
|
|
2690
|
+
* @param {string} [code] unified currency code
|
|
2691
|
+
* @param {int} [since] timestamp in ms of the earliest ledger entry
|
|
2692
|
+
* @param {int} [limit] max number of ledger entries to return
|
|
2693
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
2694
|
+
* @param {int} [params.until] timestamp in ms for the ending date filter, default is the current time
|
|
2695
|
+
* @returns {object} a [ledger structure]{@link https://docs.ccxt.com/#/?id=ledger}
|
|
2696
|
+
*/
|
|
2697
|
+
async fetchLedger(code = undefined, since = undefined, limit = undefined, params = {}) {
|
|
2698
|
+
await this.loadMarkets();
|
|
2699
|
+
const request = {};
|
|
2700
|
+
let currency = undefined;
|
|
2701
|
+
if (code !== undefined) {
|
|
2702
|
+
currency = this.safeCurrency(code);
|
|
2703
|
+
}
|
|
2704
|
+
if (since !== undefined) {
|
|
2705
|
+
request['start_time'] = since;
|
|
2706
|
+
}
|
|
2707
|
+
if (limit !== undefined) {
|
|
2708
|
+
request['limit'] = limit;
|
|
2709
|
+
}
|
|
2710
|
+
const until = this.safeInteger(params, 'until');
|
|
2711
|
+
params = this.omit(params, ['until']);
|
|
2712
|
+
if (until !== undefined) {
|
|
2713
|
+
request['end_time'] = until;
|
|
2714
|
+
}
|
|
2715
|
+
const response = await this.v1PrivatePostPrivateGetTransactions(this.extend(request, params));
|
|
2716
|
+
//
|
|
2717
|
+
// {
|
|
2718
|
+
// "id": 1686813195698,
|
|
2719
|
+
// "method": "private/get-transactions",
|
|
2720
|
+
// "code": 0,
|
|
2721
|
+
// "result": {
|
|
2722
|
+
// "data": [
|
|
2723
|
+
// {
|
|
2724
|
+
// "account_id": "ce075cef-1234-4321-bd6e-gf9007351e64",
|
|
2725
|
+
// "event_date": "2023-06-15",
|
|
2726
|
+
// "journal_type": "TRADING",
|
|
2727
|
+
// "journal_id": "6530219460124075091",
|
|
2728
|
+
// "transaction_qty": "6.0091224",
|
|
2729
|
+
// "transaction_cost": "6.0091224",
|
|
2730
|
+
// "realized_pnl": "0",
|
|
2731
|
+
// "order_id": "6530219477766741833",
|
|
2732
|
+
// "trade_id": "6530219495775954765",
|
|
2733
|
+
// "trade_match_id": "4611686018455865176",
|
|
2734
|
+
// "event_timestamp_ms": 1686804665013,
|
|
2735
|
+
// "event_timestamp_ns": "1686804665013642422",
|
|
2736
|
+
// "client_oid": "CCXT_d6ea7c5db6c1495aa8b758",
|
|
2737
|
+
// "taker_side": "",
|
|
2738
|
+
// "side": "BUY",
|
|
2739
|
+
// "instrument_name": "USD"
|
|
2740
|
+
// },
|
|
2741
|
+
// ]
|
|
2742
|
+
// }
|
|
2743
|
+
// }
|
|
2744
|
+
//
|
|
2745
|
+
const result = this.safeDict(response, 'result', {});
|
|
2746
|
+
const ledger = this.safeList(result, 'data', []);
|
|
2747
|
+
return this.parseLedger(ledger, currency, since, limit);
|
|
2748
|
+
}
|
|
2749
|
+
parseLedgerEntry(item, currency = undefined) {
|
|
2750
|
+
//
|
|
2751
|
+
// {
|
|
2752
|
+
// "account_id": "ce075cef-1234-4321-bd6e-gf9007351e64",
|
|
2753
|
+
// "event_date": "2023-06-15",
|
|
2754
|
+
// "journal_type": "TRADING",
|
|
2755
|
+
// "journal_id": "6530219460124075091",
|
|
2756
|
+
// "transaction_qty": "6.0091224",
|
|
2757
|
+
// "transaction_cost": "6.0091224",
|
|
2758
|
+
// "realized_pnl": "0",
|
|
2759
|
+
// "order_id": "6530219477766741833",
|
|
2760
|
+
// "trade_id": "6530219495775954765",
|
|
2761
|
+
// "trade_match_id": "4611686018455865176",
|
|
2762
|
+
// "event_timestamp_ms": 1686804665013,
|
|
2763
|
+
// "event_timestamp_ns": "1686804665013642422",
|
|
2764
|
+
// "client_oid": "CCXT_d6ea7c5db6c1495aa8b758",
|
|
2765
|
+
// "taker_side": "",
|
|
2766
|
+
// "side": "BUY",
|
|
2767
|
+
// "instrument_name": "USD"
|
|
2768
|
+
// }
|
|
2769
|
+
//
|
|
2770
|
+
const timestamp = this.safeInteger(item, 'event_timestamp_ms');
|
|
2771
|
+
const currencyId = this.safeString(item, 'instrument_name');
|
|
2772
|
+
const code = this.safeCurrencyCode(currencyId, currency);
|
|
2773
|
+
currency = this.safeCurrency(currencyId, currency);
|
|
2774
|
+
let amount = this.safeString(item, 'transaction_qty');
|
|
2775
|
+
let direction = undefined;
|
|
2776
|
+
if (Precise.stringLt(amount, '0')) {
|
|
2777
|
+
direction = 'out';
|
|
2778
|
+
amount = Precise.stringAbs(amount);
|
|
2779
|
+
}
|
|
2780
|
+
else {
|
|
2781
|
+
direction = 'in';
|
|
2782
|
+
}
|
|
2783
|
+
return this.safeLedgerEntry({
|
|
2784
|
+
'info': item,
|
|
2785
|
+
'id': this.safeString(item, 'order_id'),
|
|
2786
|
+
'direction': direction,
|
|
2787
|
+
'account': this.safeString(item, 'account_id'),
|
|
2788
|
+
'referenceId': this.safeString(item, 'trade_id'),
|
|
2789
|
+
'referenceAccount': this.safeString(item, 'trade_match_id'),
|
|
2790
|
+
'type': this.parseLedgerEntryType(this.safeString(item, 'journal_type')),
|
|
2791
|
+
'currency': code,
|
|
2792
|
+
'amount': this.parseNumber(amount),
|
|
2793
|
+
'timestamp': timestamp,
|
|
2794
|
+
'datetime': this.iso8601(timestamp),
|
|
2795
|
+
'before': undefined,
|
|
2796
|
+
'after': undefined,
|
|
2797
|
+
'status': undefined,
|
|
2798
|
+
'fee': {
|
|
2799
|
+
'currency': undefined,
|
|
2800
|
+
'cost': undefined,
|
|
2801
|
+
},
|
|
2802
|
+
}, currency);
|
|
2803
|
+
}
|
|
2804
|
+
parseLedgerEntryType(type) {
|
|
2805
|
+
const ledgerType = {
|
|
2806
|
+
'TRADING': 'trade',
|
|
2807
|
+
'TRADE_FEE': 'fee',
|
|
2808
|
+
'WITHDRAW_FEE': 'fee',
|
|
2809
|
+
'WITHDRAW': 'withdrawal',
|
|
2810
|
+
'DEPOSIT': 'deposit',
|
|
2811
|
+
'ROLLBACK_WITHDRAW': 'rollback',
|
|
2812
|
+
'ROLLBACK_DEPOSIT': 'rollback',
|
|
2813
|
+
'FUNDING': 'fee',
|
|
2814
|
+
'REALIZED_PNL': 'trade',
|
|
2815
|
+
'INSURANCE_FUND': 'insurance',
|
|
2816
|
+
'SOCIALIZED_LOSS': 'trade',
|
|
2817
|
+
'LIQUIDATION_FEE': 'fee',
|
|
2818
|
+
'SESSION_RESET': 'reset',
|
|
2819
|
+
'ADJUSTMENT': 'adjustment',
|
|
2820
|
+
'SESSION_SETTLE': 'settlement',
|
|
2821
|
+
'UNCOVERED_LOSS': 'trade',
|
|
2822
|
+
'ADMIN_ADJUSTMENT': 'adjustment',
|
|
2823
|
+
'DELIST': 'delist',
|
|
2824
|
+
'SETTLEMENT_FEE': 'fee',
|
|
2825
|
+
'AUTO_CONVERSION': 'conversion',
|
|
2826
|
+
'MANUAL_CONVERSION': 'conversion',
|
|
2827
|
+
};
|
|
2828
|
+
return this.safeString(ledgerType, type, type);
|
|
2829
|
+
}
|
|
2830
|
+
/**
|
|
2831
|
+
* @method
|
|
2832
|
+
* @name cryptocom#fetchAccounts
|
|
2833
|
+
* @description fetch all the accounts associated with a profile
|
|
2834
|
+
* @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#private-get-accounts
|
|
2835
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
2836
|
+
* @returns {object} a dictionary of [account structures]{@link https://docs.ccxt.com/#/?id=account-structure} indexed by the account type
|
|
2837
|
+
*/
|
|
2838
|
+
async fetchAccounts(params = {}) {
|
|
2839
|
+
await this.loadMarkets();
|
|
2840
|
+
const response = await this.v1PrivatePostPrivateGetAccounts(params);
|
|
2841
|
+
//
|
|
2842
|
+
// {
|
|
2843
|
+
// "id": 1234567894321,
|
|
2844
|
+
// "method": "private/get-accounts",
|
|
2845
|
+
// "code": 0,
|
|
2846
|
+
// "result": {
|
|
2847
|
+
// "master_account": {
|
|
2848
|
+
// "uuid": "a1234abc-1234-4321-q5r7-b1ab0a0b12b",
|
|
2849
|
+
// "user_uuid": "a1234abc-1234-4321-q5r7-b1ab0a0b12b",
|
|
2850
|
+
// "enabled": true,
|
|
2851
|
+
// "tradable": true,
|
|
2852
|
+
// "name": "YOUR_NAME",
|
|
2853
|
+
// "country_code": "CAN",
|
|
2854
|
+
// "phone_country_code": "CAN",
|
|
2855
|
+
// "incorp_country_code": "",
|
|
2856
|
+
// "margin_access": "DEFAULT",
|
|
2857
|
+
// "derivatives_access": "DEFAULT",
|
|
2858
|
+
// "create_time": 1656445188000,
|
|
2859
|
+
// "update_time": 1660794567262,
|
|
2860
|
+
// "two_fa_enabled": true,
|
|
2861
|
+
// "kyc_level": "ADVANCED",
|
|
2862
|
+
// "suspended": false,
|
|
2863
|
+
// "terminated": false,
|
|
2864
|
+
// "spot_enabled": false,
|
|
2865
|
+
// "margin_enabled": false,
|
|
2866
|
+
// "derivatives_enabled": false
|
|
2867
|
+
// },
|
|
2868
|
+
// "sub_account_list": []
|
|
2869
|
+
// }
|
|
2870
|
+
// }
|
|
2871
|
+
//
|
|
2872
|
+
const result = this.safeDict(response, 'result', {});
|
|
2873
|
+
const masterAccount = this.safeDict(result, 'master_account', {});
|
|
2874
|
+
const accounts = this.safeList(result, 'sub_account_list', []);
|
|
2875
|
+
accounts.push(masterAccount);
|
|
2876
|
+
return this.parseAccounts(accounts, params);
|
|
2877
|
+
}
|
|
2878
|
+
parseAccount(account) {
|
|
2879
|
+
//
|
|
2880
|
+
// {
|
|
2881
|
+
// "uuid": "a1234abc-1234-4321-q5r7-b1ab0a0b12b",
|
|
2882
|
+
// "user_uuid": "a1234abc-1234-4321-q5r7-b1ab0a0b12b",
|
|
2883
|
+
// "master_account_uuid": "a1234abc-1234-4321-q5r7-b1ab0a0b12b",
|
|
2884
|
+
// "label": "FORMER_MASTER_MARGIN",
|
|
2885
|
+
// "enabled": true,
|
|
2886
|
+
// "tradable": true,
|
|
2887
|
+
// "name": "YOUR_NAME",
|
|
2888
|
+
// "country_code": "YOUR_COUNTRY_CODE",
|
|
2889
|
+
// "incorp_country_code": "",
|
|
2890
|
+
// "margin_access": "DEFAULT",
|
|
2891
|
+
// "derivatives_access": "DEFAULT",
|
|
2892
|
+
// "create_time": 1656481992000,
|
|
2893
|
+
// "update_time": 1667272884594,
|
|
2894
|
+
// "two_fa_enabled": false,
|
|
2895
|
+
// "kyc_level": "ADVANCED",
|
|
2896
|
+
// "suspended": false,
|
|
2897
|
+
// "terminated": false,
|
|
2898
|
+
// "spot_enabled": false,
|
|
2899
|
+
// "margin_enabled": false,
|
|
2900
|
+
// "derivatives_enabled": false,
|
|
2901
|
+
// "system_label": "FORMER_MASTER_MARGIN"
|
|
2902
|
+
// }
|
|
2903
|
+
//
|
|
2904
|
+
return {
|
|
2905
|
+
'id': this.safeString(account, 'uuid'),
|
|
2906
|
+
'type': this.safeString(account, 'label'),
|
|
2907
|
+
'code': undefined,
|
|
2908
|
+
'info': account,
|
|
2909
|
+
};
|
|
2910
|
+
}
|
|
2911
|
+
/**
|
|
2912
|
+
* @method
|
|
2913
|
+
* @name cryptocom#fetchSettlementHistory
|
|
2914
|
+
* @description fetches historical settlement records
|
|
2915
|
+
* @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#public-get-expired-settlement-price
|
|
2916
|
+
* @param {string} symbol unified market symbol of the settlement history
|
|
2917
|
+
* @param {int} [since] timestamp in ms
|
|
2918
|
+
* @param {int} [limit] number of records
|
|
2919
|
+
* @param {object} [params] exchange specific params
|
|
2920
|
+
* @param {int} [params.type] 'future', 'option'
|
|
2921
|
+
* @returns {object[]} a list of [settlement history objects]{@link https://docs.ccxt.com/#/?id=settlement-history-structure}
|
|
2922
|
+
*/
|
|
2923
|
+
async fetchSettlementHistory(symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
2924
|
+
await this.loadMarkets();
|
|
2925
|
+
let market = undefined;
|
|
2926
|
+
if (symbol !== undefined) {
|
|
2927
|
+
market = this.market(symbol);
|
|
2928
|
+
}
|
|
2929
|
+
let type = undefined;
|
|
2930
|
+
[type, params] = this.handleMarketTypeAndParams('fetchSettlementHistory', market, params);
|
|
2931
|
+
this.checkRequiredArgument('fetchSettlementHistory', type, 'type', ['future', 'option', 'WARRANT', 'FUTURE']);
|
|
2932
|
+
if (type === 'option') {
|
|
2933
|
+
type = 'WARRANT';
|
|
2934
|
+
}
|
|
2935
|
+
const request = {
|
|
2936
|
+
'instrument_type': type.toUpperCase(),
|
|
2937
|
+
};
|
|
2938
|
+
const response = await this.v1PublicGetPublicGetExpiredSettlementPrice(this.extend(request, params));
|
|
2939
|
+
//
|
|
2940
|
+
// {
|
|
2941
|
+
// "id": -1,
|
|
2942
|
+
// "method": "public/get-expired-settlement-price",
|
|
2943
|
+
// "code": 0,
|
|
2944
|
+
// "result": {
|
|
2945
|
+
// "data": [
|
|
2946
|
+
// {
|
|
2947
|
+
// "i": "BTCUSD-230526",
|
|
2948
|
+
// "x": 1685088000000,
|
|
2949
|
+
// "v": "26464.1",
|
|
2950
|
+
// "t": 1685087999500
|
|
2951
|
+
// }
|
|
2952
|
+
// ]
|
|
2953
|
+
// }
|
|
2954
|
+
// }
|
|
2955
|
+
//
|
|
2956
|
+
const result = this.safeDict(response, 'result', {});
|
|
2957
|
+
const data = this.safeList(result, 'data', []);
|
|
2958
|
+
const settlements = this.parseSettlements(data, market);
|
|
2959
|
+
const sorted = this.sortBy(settlements, 'timestamp');
|
|
2960
|
+
return this.filterBySymbolSinceLimit(sorted, symbol, since, limit);
|
|
2961
|
+
}
|
|
2962
|
+
parseSettlement(settlement, market) {
|
|
2963
|
+
//
|
|
2964
|
+
// {
|
|
2965
|
+
// "i": "BTCUSD-230526",
|
|
2966
|
+
// "x": 1685088000000,
|
|
2967
|
+
// "v": "26464.1",
|
|
2968
|
+
// "t": 1685087999500
|
|
2969
|
+
// }
|
|
2970
|
+
//
|
|
2971
|
+
const timestamp = this.safeInteger(settlement, 'x');
|
|
2972
|
+
const marketId = this.safeString(settlement, 'i');
|
|
2973
|
+
return {
|
|
2974
|
+
'info': settlement,
|
|
2975
|
+
'symbol': this.safeSymbol(marketId, market),
|
|
2976
|
+
'price': this.safeNumber(settlement, 'v'),
|
|
2977
|
+
'timestamp': timestamp,
|
|
2978
|
+
'datetime': this.iso8601(timestamp),
|
|
2979
|
+
};
|
|
2980
|
+
}
|
|
2981
|
+
parseSettlements(settlements, market) {
|
|
2982
|
+
//
|
|
2983
|
+
// [
|
|
2984
|
+
// {
|
|
2985
|
+
// "i": "BTCUSD-230526",
|
|
2986
|
+
// "x": 1685088000000,
|
|
2987
|
+
// "v": "26464.1",
|
|
2988
|
+
// "t": 1685087999500
|
|
2989
|
+
// }
|
|
2990
|
+
// ]
|
|
2991
|
+
//
|
|
2992
|
+
const result = [];
|
|
2993
|
+
for (let i = 0; i < settlements.length; i++) {
|
|
2994
|
+
result.push(this.parseSettlement(settlements[i], market));
|
|
2995
|
+
}
|
|
2996
|
+
return result;
|
|
2997
|
+
}
|
|
2998
|
+
/**
|
|
2999
|
+
* @method
|
|
3000
|
+
* @name cryptocom#fetchFundingRate
|
|
3001
|
+
* @description fetches historical funding rates
|
|
3002
|
+
* @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#public-get-valuations
|
|
3003
|
+
* @param {string} symbol unified symbol of the market to fetch the funding rate history for
|
|
3004
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
3005
|
+
* @returns {object[]} a list of [funding rate structures]{@link https://docs.ccxt.com/#/?id=funding-rate-history-structure}
|
|
3006
|
+
*/
|
|
3007
|
+
async fetchFundingRate(symbol, params = {}) {
|
|
3008
|
+
await this.loadMarkets();
|
|
3009
|
+
const market = this.market(symbol);
|
|
3010
|
+
if (!market['swap']) {
|
|
3011
|
+
throw new BadSymbol(this.id + ' fetchFundingRate() supports swap contracts only');
|
|
3012
|
+
}
|
|
3013
|
+
const request = {
|
|
3014
|
+
'instrument_name': market['id'],
|
|
3015
|
+
'valuation_type': 'estimated_funding_rate',
|
|
3016
|
+
'count': 1,
|
|
3017
|
+
};
|
|
3018
|
+
const response = await this.v1PublicGetPublicGetValuations(this.extend(request, params));
|
|
3019
|
+
//
|
|
3020
|
+
// {
|
|
3021
|
+
// "id": -1,
|
|
3022
|
+
// "method": "public/get-valuations",
|
|
3023
|
+
// "code": 0,
|
|
3024
|
+
// "result": {
|
|
3025
|
+
// "data": [
|
|
3026
|
+
// {
|
|
3027
|
+
// "v": "-0.000001884",
|
|
3028
|
+
// "t": 1687892400000
|
|
3029
|
+
// },
|
|
3030
|
+
// ],
|
|
3031
|
+
// "instrument_name": "BTCUSD-PERP"
|
|
3032
|
+
// }
|
|
3033
|
+
// }
|
|
3034
|
+
//
|
|
3035
|
+
const result = this.safeDict(response, 'result', {});
|
|
3036
|
+
const data = this.safeList(result, 'data', []);
|
|
3037
|
+
const entry = this.safeDict(data, 0, {});
|
|
3038
|
+
return this.parseFundingRate(entry, market);
|
|
3039
|
+
}
|
|
3040
|
+
parseFundingRate(contract, market = undefined) {
|
|
3041
|
+
//
|
|
3042
|
+
// {
|
|
3043
|
+
// "v": "-0.000001884",
|
|
3044
|
+
// "t": 1687892400000
|
|
3045
|
+
// },
|
|
3046
|
+
//
|
|
3047
|
+
const timestamp = this.safeInteger(contract, 't');
|
|
3048
|
+
let fundingTimestamp = undefined;
|
|
3049
|
+
if (timestamp !== undefined) {
|
|
3050
|
+
fundingTimestamp = Math.ceil(timestamp / 3600000) * 3600000; // end of the next hour
|
|
3051
|
+
}
|
|
3052
|
+
return {
|
|
3053
|
+
'info': contract,
|
|
3054
|
+
'symbol': this.safeSymbol(undefined, market),
|
|
3055
|
+
'markPrice': undefined,
|
|
3056
|
+
'indexPrice': undefined,
|
|
3057
|
+
'interestRate': undefined,
|
|
3058
|
+
'estimatedSettlePrice': undefined,
|
|
3059
|
+
'timestamp': timestamp,
|
|
3060
|
+
'datetime': this.iso8601(timestamp),
|
|
3061
|
+
'fundingRate': this.safeNumber(contract, 'v'),
|
|
3062
|
+
'fundingTimestamp': fundingTimestamp,
|
|
3063
|
+
'fundingDatetime': this.iso8601(fundingTimestamp),
|
|
3064
|
+
'nextFundingRate': undefined,
|
|
3065
|
+
'nextFundingTimestamp': undefined,
|
|
3066
|
+
'nextFundingDatetime': undefined,
|
|
3067
|
+
'previousFundingRate': undefined,
|
|
3068
|
+
'previousFundingTimestamp': undefined,
|
|
3069
|
+
'previousFundingDatetime': undefined,
|
|
3070
|
+
'interval': '1h',
|
|
3071
|
+
};
|
|
3072
|
+
}
|
|
3073
|
+
/**
|
|
3074
|
+
* @method
|
|
3075
|
+
* @name cryptocom#fetchFundingRateHistory
|
|
3076
|
+
* @description fetches historical funding rates
|
|
3077
|
+
* @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#public-get-valuations
|
|
3078
|
+
* @param {string} symbol unified symbol of the market to fetch the funding rate history for
|
|
3079
|
+
* @param {int} [since] timestamp in ms of the earliest funding rate to fetch
|
|
3080
|
+
* @param {int} [limit] the maximum amount of [funding rate structures] to fetch
|
|
3081
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
3082
|
+
* @param {int} [params.until] timestamp in ms for the ending date filter, default is the current time
|
|
3083
|
+
* @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
|
|
3084
|
+
* @returns {object[]} a list of [funding rate structures]{@link https://docs.ccxt.com/#/?id=funding-rate-history-structure}
|
|
3085
|
+
*/
|
|
3086
|
+
async fetchFundingRateHistory(symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
3087
|
+
if (symbol === undefined) {
|
|
3088
|
+
throw new ArgumentsRequired(this.id + ' fetchFundingRateHistory() requires a symbol argument');
|
|
3089
|
+
}
|
|
3090
|
+
await this.loadMarkets();
|
|
3091
|
+
let paginate = false;
|
|
3092
|
+
[paginate, params] = this.handleOptionAndParams(params, 'fetchFundingRateHistory', 'paginate');
|
|
3093
|
+
if (paginate) {
|
|
3094
|
+
return await this.fetchPaginatedCallDeterministic('fetchFundingRateHistory', symbol, since, limit, '8h', params);
|
|
3095
|
+
}
|
|
3096
|
+
const market = this.market(symbol);
|
|
3097
|
+
if (!market['swap']) {
|
|
3098
|
+
throw new BadSymbol(this.id + ' fetchFundingRateHistory() supports swap contracts only');
|
|
3099
|
+
}
|
|
3100
|
+
const request = {
|
|
3101
|
+
'instrument_name': market['id'],
|
|
3102
|
+
'valuation_type': 'funding_hist',
|
|
3103
|
+
};
|
|
3104
|
+
if (since !== undefined) {
|
|
3105
|
+
request['start_ts'] = since;
|
|
3106
|
+
}
|
|
3107
|
+
if (limit !== undefined) {
|
|
3108
|
+
request['count'] = limit;
|
|
3109
|
+
}
|
|
3110
|
+
const until = this.safeInteger(params, 'until');
|
|
3111
|
+
params = this.omit(params, ['until']);
|
|
3112
|
+
if (until !== undefined) {
|
|
3113
|
+
request['end_ts'] = until;
|
|
3114
|
+
}
|
|
3115
|
+
const response = await this.v1PublicGetPublicGetValuations(this.extend(request, params));
|
|
3116
|
+
//
|
|
3117
|
+
// {
|
|
3118
|
+
// "id": -1,
|
|
3119
|
+
// "method": "public/get-valuations",
|
|
3120
|
+
// "code": 0,
|
|
3121
|
+
// "result": {
|
|
3122
|
+
// "data": [
|
|
3123
|
+
// {
|
|
3124
|
+
// "v": "-0.000001884",
|
|
3125
|
+
// "t": 1687892400000
|
|
3126
|
+
// },
|
|
3127
|
+
// ],
|
|
3128
|
+
// "instrument_name": "BTCUSD-PERP"
|
|
3129
|
+
// }
|
|
3130
|
+
// }
|
|
3131
|
+
//
|
|
3132
|
+
const result = this.safeDict(response, 'result', {});
|
|
3133
|
+
const data = this.safeList(result, 'data', []);
|
|
3134
|
+
const marketId = this.safeString(result, 'instrument_name');
|
|
3135
|
+
const rates = [];
|
|
3136
|
+
for (let i = 0; i < data.length; i++) {
|
|
3137
|
+
const entry = data[i];
|
|
3138
|
+
const timestamp = this.safeInteger(entry, 't');
|
|
3139
|
+
rates.push({
|
|
3140
|
+
'info': entry,
|
|
3141
|
+
'symbol': this.safeSymbol(marketId, market),
|
|
3142
|
+
'fundingRate': this.safeNumber(entry, 'v'),
|
|
3143
|
+
'timestamp': timestamp,
|
|
3144
|
+
'datetime': this.iso8601(timestamp),
|
|
3145
|
+
});
|
|
3146
|
+
}
|
|
3147
|
+
const sorted = this.sortBy(rates, 'timestamp');
|
|
3148
|
+
return this.filterBySymbolSinceLimit(sorted, market['symbol'], since, limit);
|
|
3149
|
+
}
|
|
3150
|
+
/**
|
|
3151
|
+
* @method
|
|
3152
|
+
* @name cryptocom#fetchPosition
|
|
3153
|
+
* @description fetch data on a single open contract trade position
|
|
3154
|
+
* @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#private-get-positions
|
|
3155
|
+
* @param {string} symbol unified market symbol of the market the position is held in
|
|
3156
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
3157
|
+
* @returns {object} a [position structure]{@link https://docs.ccxt.com/#/?id=position-structure}
|
|
3158
|
+
*/
|
|
3159
|
+
async fetchPosition(symbol, params = {}) {
|
|
3160
|
+
await this.loadMarkets();
|
|
3161
|
+
const market = this.market(symbol);
|
|
3162
|
+
const request = {
|
|
3163
|
+
'instrument_name': market['id'],
|
|
3164
|
+
};
|
|
3165
|
+
const response = await this.v1PrivatePostPrivateGetPositions(this.extend(request, params));
|
|
3166
|
+
//
|
|
3167
|
+
// {
|
|
3168
|
+
// "id": 1688015952050,
|
|
3169
|
+
// "method": "private/get-positions",
|
|
3170
|
+
// "code": 0,
|
|
3171
|
+
// "result": {
|
|
3172
|
+
// "data": [
|
|
3173
|
+
// {
|
|
3174
|
+
// "account_id": "ce075bef-b600-4277-bd6e-ff9007251e63",
|
|
3175
|
+
// "quantity": "0.0001",
|
|
3176
|
+
// "cost": "3.02392",
|
|
3177
|
+
// "open_pos_cost": "3.02392",
|
|
3178
|
+
// "open_position_pnl": "-0.0010281328",
|
|
3179
|
+
// "session_pnl": "-0.0010281328",
|
|
3180
|
+
// "update_timestamp_ms": 1688015919091,
|
|
3181
|
+
// "instrument_name": "BTCUSD-PERP",
|
|
3182
|
+
// "type": "PERPETUAL_SWAP"
|
|
3183
|
+
// }
|
|
3184
|
+
// ]
|
|
3185
|
+
// }
|
|
3186
|
+
// }
|
|
3187
|
+
//
|
|
3188
|
+
const result = this.safeDict(response, 'result', {});
|
|
3189
|
+
const data = this.safeList(result, 'data', []);
|
|
3190
|
+
return this.parsePosition(this.safeDict(data, 0), market);
|
|
3191
|
+
}
|
|
3192
|
+
/**
|
|
3193
|
+
* @method
|
|
3194
|
+
* @name cryptocom#fetchPositions
|
|
3195
|
+
* @description fetch all open positions
|
|
3196
|
+
* @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#private-get-positions
|
|
3197
|
+
* @param {string[]|undefined} symbols list of unified market symbols
|
|
3198
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
3199
|
+
* @returns {object[]} a list of [position structure]{@link https://docs.ccxt.com/#/?id=position-structure}
|
|
3200
|
+
*/
|
|
3201
|
+
async fetchPositions(symbols = undefined, params = {}) {
|
|
3202
|
+
await this.loadMarkets();
|
|
3203
|
+
symbols = this.marketSymbols(symbols);
|
|
3204
|
+
const request = {};
|
|
3205
|
+
let market = undefined;
|
|
3206
|
+
if (symbols !== undefined) {
|
|
3207
|
+
let symbol = undefined;
|
|
3208
|
+
if (Array.isArray(symbols)) {
|
|
3209
|
+
const symbolsLength = symbols.length;
|
|
3210
|
+
if (symbolsLength > 1) {
|
|
3211
|
+
throw new BadRequest(this.id + ' fetchPositions() symbols argument cannot contain more than 1 symbol');
|
|
3212
|
+
}
|
|
3213
|
+
symbol = symbols[0];
|
|
3214
|
+
}
|
|
3215
|
+
else {
|
|
3216
|
+
symbol = symbols;
|
|
3217
|
+
}
|
|
3218
|
+
market = this.market(symbol);
|
|
3219
|
+
request['instrument_name'] = market['id'];
|
|
3220
|
+
}
|
|
3221
|
+
const response = await this.v1PrivatePostPrivateGetPositions(this.extend(request, params));
|
|
3222
|
+
//
|
|
3223
|
+
// {
|
|
3224
|
+
// "id": 1688015952050,
|
|
3225
|
+
// "method": "private/get-positions",
|
|
3226
|
+
// "code": 0,
|
|
3227
|
+
// "result": {
|
|
3228
|
+
// "data": [
|
|
3229
|
+
// {
|
|
3230
|
+
// "account_id": "ce075bef-b600-4277-bd6e-ff9007251e63",
|
|
3231
|
+
// "quantity": "0.0001",
|
|
3232
|
+
// "cost": "3.02392",
|
|
3233
|
+
// "open_pos_cost": "3.02392",
|
|
3234
|
+
// "open_position_pnl": "-0.0010281328",
|
|
3235
|
+
// "session_pnl": "-0.0010281328",
|
|
3236
|
+
// "update_timestamp_ms": 1688015919091,
|
|
3237
|
+
// "instrument_name": "BTCUSD-PERP",
|
|
3238
|
+
// "type": "PERPETUAL_SWAP"
|
|
3239
|
+
// }
|
|
3240
|
+
// ]
|
|
3241
|
+
// }
|
|
3242
|
+
// }
|
|
3243
|
+
//
|
|
3244
|
+
const responseResult = this.safeDict(response, 'result', {});
|
|
3245
|
+
const positions = this.safeList(responseResult, 'data', []);
|
|
3246
|
+
const result = [];
|
|
3247
|
+
for (let i = 0; i < positions.length; i++) {
|
|
3248
|
+
const entry = positions[i];
|
|
3249
|
+
const marketId = this.safeString(entry, 'instrument_name');
|
|
3250
|
+
const marketInner = this.safeMarket(marketId, undefined, undefined, 'contract');
|
|
3251
|
+
result.push(this.parsePosition(entry, marketInner));
|
|
3252
|
+
}
|
|
3253
|
+
return this.filterByArrayPositions(result, 'symbol', undefined, false);
|
|
3254
|
+
}
|
|
3255
|
+
parsePosition(position, market = undefined) {
|
|
3256
|
+
//
|
|
3257
|
+
// {
|
|
3258
|
+
// "account_id": "ce075bef-b600-4277-bd6e-ff9007251e63",
|
|
3259
|
+
// "quantity": "0.0001",
|
|
3260
|
+
// "cost": "3.02392",
|
|
3261
|
+
// "open_pos_cost": "3.02392",
|
|
3262
|
+
// "open_position_pnl": "-0.0010281328",
|
|
3263
|
+
// "session_pnl": "-0.0010281328",
|
|
3264
|
+
// "update_timestamp_ms": 1688015919091,
|
|
3265
|
+
// "instrument_name": "BTCUSD-PERP",
|
|
3266
|
+
// "type": "PERPETUAL_SWAP"
|
|
3267
|
+
// }
|
|
3268
|
+
//
|
|
3269
|
+
const marketId = this.safeString(position, 'instrument_name');
|
|
3270
|
+
market = this.safeMarket(marketId, market, undefined, 'contract');
|
|
3271
|
+
const symbol = this.safeSymbol(marketId, market, undefined, 'contract');
|
|
3272
|
+
const timestamp = this.safeInteger(position, 'update_timestamp_ms');
|
|
3273
|
+
const amount = this.safeString(position, 'quantity');
|
|
3274
|
+
return this.safePosition({
|
|
3275
|
+
'info': position,
|
|
3276
|
+
'id': undefined,
|
|
3277
|
+
'symbol': symbol,
|
|
3278
|
+
'timestamp': timestamp,
|
|
3279
|
+
'datetime': this.iso8601(timestamp),
|
|
3280
|
+
'hedged': undefined,
|
|
3281
|
+
'side': Precise.stringGt(amount, '0') ? 'buy' : 'sell',
|
|
3282
|
+
'contracts': Precise.stringAbs(amount),
|
|
3283
|
+
'contractSize': market['contractSize'],
|
|
3284
|
+
'entryPrice': undefined,
|
|
3285
|
+
'markPrice': undefined,
|
|
3286
|
+
'notional': undefined,
|
|
3287
|
+
'leverage': undefined,
|
|
3288
|
+
'collateral': this.safeNumber(position, 'open_pos_cost'),
|
|
3289
|
+
'initialMargin': this.safeNumber(position, 'cost'),
|
|
3290
|
+
'maintenanceMargin': undefined,
|
|
3291
|
+
'initialMarginPercentage': undefined,
|
|
3292
|
+
'maintenanceMarginPercentage': undefined,
|
|
3293
|
+
'unrealizedPnl': this.safeNumber(position, 'open_position_pnl'),
|
|
3294
|
+
'liquidationPrice': undefined,
|
|
3295
|
+
'marginMode': undefined,
|
|
3296
|
+
'percentage': undefined,
|
|
3297
|
+
'marginRatio': undefined,
|
|
3298
|
+
'stopLossPrice': undefined,
|
|
3299
|
+
'takeProfitPrice': undefined,
|
|
3300
|
+
});
|
|
3301
|
+
}
|
|
3302
|
+
nonce() {
|
|
3303
|
+
return this.milliseconds();
|
|
3304
|
+
}
|
|
3305
|
+
paramsToString(object, level) {
|
|
3306
|
+
const maxLevel = 3;
|
|
3307
|
+
if (level >= maxLevel) {
|
|
3308
|
+
return object.toString();
|
|
3309
|
+
}
|
|
3310
|
+
if (typeof object === 'string') {
|
|
3311
|
+
return object;
|
|
3312
|
+
}
|
|
3313
|
+
let returnString = '';
|
|
3314
|
+
let paramsKeys = undefined;
|
|
3315
|
+
if (Array.isArray(object)) {
|
|
3316
|
+
paramsKeys = object;
|
|
3317
|
+
}
|
|
3318
|
+
else {
|
|
3319
|
+
const sorted = this.keysort(object);
|
|
3320
|
+
paramsKeys = Object.keys(sorted);
|
|
3321
|
+
}
|
|
3322
|
+
for (let i = 0; i < paramsKeys.length; i++) {
|
|
3323
|
+
const key = paramsKeys[i];
|
|
3324
|
+
returnString += key;
|
|
3325
|
+
const value = object[key];
|
|
3326
|
+
if (value === 'undefined') {
|
|
3327
|
+
returnString += 'null';
|
|
3328
|
+
}
|
|
3329
|
+
else if (Array.isArray(value)) {
|
|
3330
|
+
for (let j = 0; j < value.length; j++) {
|
|
3331
|
+
returnString += this.paramsToString(value[j], level + 1);
|
|
3332
|
+
}
|
|
3333
|
+
}
|
|
3334
|
+
else {
|
|
3335
|
+
returnString += value.toString();
|
|
3336
|
+
}
|
|
3337
|
+
}
|
|
3338
|
+
return returnString;
|
|
3339
|
+
}
|
|
3340
|
+
/**
|
|
3341
|
+
* @method
|
|
3342
|
+
* @name cryptocom#closePositions
|
|
3343
|
+
* @description closes open positions for a market
|
|
3344
|
+
* @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#private-close-position
|
|
3345
|
+
* @param {string} symbol Unified CCXT market symbol
|
|
3346
|
+
* @param {string} [side] not used by cryptocom.closePositions
|
|
3347
|
+
* @param {object} [params] extra parameters specific to the okx api endpoint
|
|
3348
|
+
*
|
|
3349
|
+
* EXCHANGE SPECIFIC PARAMETERS
|
|
3350
|
+
* @param {string} [params.type] LIMIT or MARKET
|
|
3351
|
+
* @param {number} [params.price] for limit orders only
|
|
3352
|
+
* @returns {object[]} [A list of position structures]{@link https://docs.ccxt.com/#/?id=position-structure}
|
|
3353
|
+
*/
|
|
3354
|
+
async closePosition(symbol, side = undefined, params = {}) {
|
|
3355
|
+
await this.loadMarkets();
|
|
3356
|
+
const market = this.market(symbol);
|
|
3357
|
+
const request = {
|
|
3358
|
+
'instrument_name': market['id'],
|
|
3359
|
+
'type': 'MARKET',
|
|
3360
|
+
};
|
|
3361
|
+
const type = this.safeStringUpper(params, 'type');
|
|
3362
|
+
const price = this.safeString(params, 'price');
|
|
3363
|
+
if (type !== undefined) {
|
|
3364
|
+
request['type'] = type;
|
|
3365
|
+
}
|
|
3366
|
+
if (price !== undefined) {
|
|
3367
|
+
request['price'] = this.priceToPrecision(market['symbol'], price);
|
|
3368
|
+
}
|
|
3369
|
+
const response = await this.v1PrivatePostPrivateClosePosition(this.extend(request, params));
|
|
3370
|
+
//
|
|
3371
|
+
// {
|
|
3372
|
+
// "id" : 1700830813298,
|
|
3373
|
+
// "method" : "private/close-position",
|
|
3374
|
+
// "code" : 0,
|
|
3375
|
+
// "result" : {
|
|
3376
|
+
// "client_oid" : "179a909d-5614-655b-0d0e-9e85c9a25c85",
|
|
3377
|
+
// "order_id" : "6142909897021751347"
|
|
3378
|
+
// }
|
|
3379
|
+
// }
|
|
3380
|
+
//
|
|
3381
|
+
const result = this.safeDict(response, 'result');
|
|
3382
|
+
return this.parseOrder(result, market);
|
|
3383
|
+
}
|
|
3384
|
+
/**
|
|
3385
|
+
* @method
|
|
3386
|
+
* @name cryptocom#fetchTradingFee
|
|
3387
|
+
* @description fetch the trading fees for a market
|
|
3388
|
+
* @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#private-get-instrument-fee-rate
|
|
3389
|
+
* @param {string} symbol unified market symbol
|
|
3390
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
3391
|
+
* @returns {object} a [fee structure]{@link https://docs.ccxt.com/#/?id=fee-structure}
|
|
3392
|
+
*/
|
|
3393
|
+
async fetchTradingFee(symbol, params = {}) {
|
|
3394
|
+
await this.loadMarkets();
|
|
3395
|
+
const market = this.market(symbol);
|
|
3396
|
+
const request = {
|
|
3397
|
+
'instrument_name': market['id'],
|
|
3398
|
+
};
|
|
3399
|
+
const response = await this.v1PrivatePostPrivateGetInstrumentFeeRate(this.extend(request, params));
|
|
3400
|
+
//
|
|
3401
|
+
// {
|
|
3402
|
+
// "id": 1,
|
|
3403
|
+
// "code": 0,
|
|
3404
|
+
// "method": "private/staking/unstake",
|
|
3405
|
+
// "result": {
|
|
3406
|
+
// "staking_id": "1",
|
|
3407
|
+
// "instrument_name": "SOL.staked",
|
|
3408
|
+
// "status": "NEW",
|
|
3409
|
+
// "quantity": "1",
|
|
3410
|
+
// "underlying_inst_name": "SOL",
|
|
3411
|
+
// "reason": "NO_ERROR"
|
|
3412
|
+
// }
|
|
3413
|
+
// }
|
|
3414
|
+
//
|
|
3415
|
+
const data = this.safeDict(response, 'result', {});
|
|
3416
|
+
return this.parseTradingFee(data, market);
|
|
3417
|
+
}
|
|
3418
|
+
/**
|
|
3419
|
+
* @method
|
|
3420
|
+
* @name cryptocom#fetchTradingFees
|
|
3421
|
+
* @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#private-get-fee-rate
|
|
3422
|
+
* @description fetch the trading fees for multiple markets
|
|
3423
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
3424
|
+
* @returns {object} a dictionary of [fee structures]{@link https://docs.ccxt.com/#/?id=fee-structure} indexed by market symbols
|
|
3425
|
+
*/
|
|
3426
|
+
async fetchTradingFees(params = {}) {
|
|
3427
|
+
await this.loadMarkets();
|
|
3428
|
+
const response = await this.v1PrivatePostPrivateGetFeeRate(params);
|
|
3429
|
+
//
|
|
3430
|
+
// {
|
|
3431
|
+
// "id": 1,
|
|
3432
|
+
// "method": "/private/get-fee-rate",
|
|
3433
|
+
// "code": 0,
|
|
3434
|
+
// "result": {
|
|
3435
|
+
// "spot_tier": "3",
|
|
3436
|
+
// "deriv_tier": "3",
|
|
3437
|
+
// "effective_spot_maker_rate_bps": "6.5",
|
|
3438
|
+
// "effective_spot_taker_rate_bps": "6.9",
|
|
3439
|
+
// "effective_deriv_maker_rate_bps": "1.1",
|
|
3440
|
+
// "effective_deriv_taker_rate_bps": "3"
|
|
3441
|
+
// }
|
|
3442
|
+
// }
|
|
3443
|
+
//
|
|
3444
|
+
const result = this.safeDict(response, 'result', {});
|
|
3445
|
+
return this.parseTradingFees(result);
|
|
3446
|
+
}
|
|
3447
|
+
parseTradingFees(response) {
|
|
3448
|
+
//
|
|
3449
|
+
// {
|
|
3450
|
+
// "spot_tier": "3",
|
|
3451
|
+
// "deriv_tier": "3",
|
|
3452
|
+
// "effective_spot_maker_rate_bps": "6.5",
|
|
3453
|
+
// "effective_spot_taker_rate_bps": "6.9",
|
|
3454
|
+
// "effective_deriv_maker_rate_bps": "1.1",
|
|
3455
|
+
// "effective_deriv_taker_rate_bps": "3"
|
|
3456
|
+
// }
|
|
3457
|
+
//
|
|
3458
|
+
const result = {};
|
|
3459
|
+
result['info'] = response;
|
|
3460
|
+
for (let i = 0; i < this.symbols.length; i++) {
|
|
3461
|
+
const symbol = this.symbols[i];
|
|
3462
|
+
const market = this.market(symbol);
|
|
3463
|
+
const isSwap = market['swap'];
|
|
3464
|
+
const takerFeeKey = isSwap ? 'effective_deriv_taker_rate_bps' : 'effective_spot_taker_rate_bps';
|
|
3465
|
+
const makerFeeKey = isSwap ? 'effective_deriv_maker_rate_bps' : 'effective_spot_maker_rate_bps';
|
|
3466
|
+
const tradingFee = {
|
|
3467
|
+
'info': response,
|
|
3468
|
+
'symbol': symbol,
|
|
3469
|
+
'maker': this.parseNumber(Precise.stringDiv(this.safeString(response, makerFeeKey), '10000')),
|
|
3470
|
+
'taker': this.parseNumber(Precise.stringDiv(this.safeString(response, takerFeeKey), '10000')),
|
|
3471
|
+
'percentage': undefined,
|
|
3472
|
+
'tierBased': undefined,
|
|
3473
|
+
};
|
|
3474
|
+
result[symbol] = tradingFee;
|
|
3475
|
+
}
|
|
3476
|
+
return result;
|
|
3477
|
+
}
|
|
3478
|
+
parseTradingFee(fee, market = undefined) {
|
|
3479
|
+
//
|
|
3480
|
+
// {
|
|
3481
|
+
// "instrument_name": "BTC_USD",
|
|
3482
|
+
// "effective_maker_rate_bps": "6.5",
|
|
3483
|
+
// "effective_taker_rate_bps": "6.9"
|
|
3484
|
+
// }
|
|
3485
|
+
//
|
|
3486
|
+
const marketId = this.safeString(fee, 'instrument_name');
|
|
3487
|
+
const symbol = this.safeSymbol(marketId, market);
|
|
3488
|
+
return {
|
|
3489
|
+
'info': fee,
|
|
3490
|
+
'symbol': symbol,
|
|
3491
|
+
'maker': this.parseNumber(Precise.stringDiv(this.safeString(fee, 'effective_maker_rate_bps'), '10000')),
|
|
3492
|
+
'taker': this.parseNumber(Precise.stringDiv(this.safeString(fee, 'effective_taker_rate_bps'), '10000')),
|
|
3493
|
+
'percentage': undefined,
|
|
3494
|
+
'tierBased': undefined,
|
|
3495
|
+
};
|
|
3496
|
+
}
|
|
3497
|
+
sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {
|
|
3498
|
+
const type = this.safeString(api, 0);
|
|
3499
|
+
const access = this.safeString(api, 1);
|
|
3500
|
+
let url = this.urls['api'][type] + '/' + path;
|
|
3501
|
+
const query = this.omit(params, this.extractParams(path));
|
|
3502
|
+
if (access === 'public') {
|
|
3503
|
+
if (Object.keys(query).length) {
|
|
3504
|
+
url += '?' + this.urlencode(query);
|
|
3505
|
+
}
|
|
3506
|
+
}
|
|
3507
|
+
else {
|
|
3508
|
+
this.checkRequiredCredentials();
|
|
3509
|
+
const nonce = this.nonce().toString();
|
|
3510
|
+
const requestParams = this.extend({}, params);
|
|
3511
|
+
const paramsKeys = Object.keys(requestParams);
|
|
3512
|
+
const strSortKey = this.paramsToString(requestParams, 0);
|
|
3513
|
+
const payload = path + nonce + this.apiKey + strSortKey + nonce;
|
|
3514
|
+
const signature = this.hmac(this.encode(payload), this.encode(this.secret), sha256);
|
|
3515
|
+
const paramsKeysLength = paramsKeys.length;
|
|
3516
|
+
body = this.json({
|
|
3517
|
+
'id': nonce,
|
|
3518
|
+
'method': path,
|
|
3519
|
+
'params': params,
|
|
3520
|
+
'api_key': this.apiKey,
|
|
3521
|
+
'sig': signature,
|
|
3522
|
+
'nonce': nonce,
|
|
3523
|
+
});
|
|
3524
|
+
// fix issue https://github.com/ccxt/ccxt/issues/11179
|
|
3525
|
+
// php always encodes dictionaries as arrays
|
|
3526
|
+
// if an array is empty, php will put it in square brackets
|
|
3527
|
+
// python and js will put it in curly brackets
|
|
3528
|
+
// the code below checks and replaces those brackets in empty requests
|
|
3529
|
+
if (paramsKeysLength === 0) {
|
|
3530
|
+
const paramsString = '{}';
|
|
3531
|
+
const arrayString = '[]';
|
|
3532
|
+
body = body.replace(arrayString, paramsString);
|
|
3533
|
+
}
|
|
3534
|
+
headers = {
|
|
3535
|
+
'Content-Type': 'application/json',
|
|
3536
|
+
};
|
|
3537
|
+
}
|
|
3538
|
+
return { 'url': url, 'method': method, 'body': body, 'headers': headers };
|
|
3539
|
+
}
|
|
3540
|
+
handleErrors(code, reason, url, method, headers, body, response, requestHeaders, requestBody) {
|
|
3541
|
+
const errorCode = this.safeString(response, 'code');
|
|
3542
|
+
if (errorCode !== '0') {
|
|
3543
|
+
const feedback = this.id + ' ' + body;
|
|
3544
|
+
this.throwExactlyMatchedException(this.exceptions['exact'], errorCode, feedback);
|
|
3545
|
+
throw new ExchangeError(this.id + ' ' + body);
|
|
3546
|
+
}
|
|
3547
|
+
return undefined;
|
|
3548
|
+
}
|
|
3549
|
+
}
|