ccxt 4.4.63 → 4.4.65
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 +5 -6
- package/dist/ccxt.browser.min.js +2 -2
- package/dist/cjs/ccxt.js +1 -6
- package/dist/cjs/src/abstract/ace.js +1 -1
- package/dist/cjs/src/abstract/alpaca.js +1 -1
- package/dist/cjs/src/abstract/ascendex.js +1 -1
- package/dist/cjs/src/abstract/bigone.js +1 -1
- package/dist/cjs/src/abstract/binance.js +1 -1
- package/dist/cjs/src/abstract/bingx.js +1 -1
- package/dist/cjs/src/abstract/bit2c.js +1 -1
- package/dist/cjs/src/abstract/bitbank.js +1 -1
- package/dist/cjs/src/abstract/bitbns.js +1 -1
- package/dist/cjs/src/abstract/bitfinex.js +1 -1
- package/dist/cjs/src/abstract/bitfinex1.js +1 -1
- package/dist/cjs/src/abstract/bitflyer.js +1 -1
- package/dist/cjs/src/abstract/bitget.js +1 -1
- package/dist/cjs/src/abstract/bithumb.js +1 -1
- package/dist/cjs/src/abstract/bitmart.js +1 -1
- package/dist/cjs/src/abstract/bitmex.js +1 -1
- package/dist/cjs/src/abstract/bitopro.js +1 -1
- package/dist/cjs/src/abstract/bitrue.js +1 -1
- package/dist/cjs/src/abstract/bitso.js +1 -1
- package/dist/cjs/src/abstract/bitstamp.js +1 -1
- package/dist/cjs/src/abstract/bitteam.js +1 -1
- package/dist/cjs/src/abstract/bitvavo.js +1 -1
- package/dist/cjs/src/abstract/bl3p.js +1 -1
- package/dist/cjs/src/abstract/blockchaincom.js +1 -1
- package/dist/cjs/src/abstract/blofin.js +1 -1
- package/dist/cjs/src/abstract/btcalpha.js +1 -1
- package/dist/cjs/src/abstract/btcbox.js +1 -1
- package/dist/cjs/src/abstract/btcmarkets.js +1 -1
- package/dist/cjs/src/abstract/btcturk.js +1 -1
- package/dist/cjs/src/abstract/bybit.js +1 -1
- package/dist/cjs/src/abstract/cex.js +1 -1
- package/dist/cjs/src/abstract/coinbase.js +1 -1
- package/dist/cjs/src/abstract/coinbaseexchange.js +1 -1
- package/dist/cjs/src/abstract/coinbaseinternational.js +1 -1
- package/dist/cjs/src/abstract/coincatch.js +1 -1
- package/dist/cjs/src/abstract/coincheck.js +1 -1
- package/dist/cjs/src/abstract/coinex.js +1 -1
- package/dist/cjs/src/abstract/coinlist.js +1 -1
- package/dist/cjs/src/abstract/coinmate.js +1 -1
- package/dist/cjs/src/abstract/coinmetro.js +1 -1
- package/dist/cjs/src/abstract/coinone.js +1 -1
- package/dist/cjs/src/abstract/coinsph.js +1 -1
- package/dist/cjs/src/abstract/coinspot.js +1 -1
- package/dist/cjs/src/abstract/cryptocom.js +1 -1
- package/dist/cjs/src/abstract/currencycom.js +1 -1
- package/dist/cjs/src/abstract/defx.js +1 -1
- package/dist/cjs/src/abstract/delta.js +1 -1
- package/dist/cjs/src/abstract/deribit.js +1 -1
- package/dist/cjs/src/abstract/digifinex.js +1 -1
- package/dist/cjs/src/abstract/ellipx.js +1 -1
- package/dist/cjs/src/abstract/exmo.js +1 -1
- package/dist/cjs/src/abstract/gate.js +1 -1
- package/dist/cjs/src/abstract/gemini.js +1 -1
- package/dist/cjs/src/abstract/hashkey.js +1 -1
- package/dist/cjs/src/abstract/hitbtc.js +1 -1
- package/dist/cjs/src/abstract/hollaex.js +1 -1
- package/dist/cjs/src/abstract/htx.js +1 -1
- package/dist/cjs/src/abstract/huobijp.js +1 -1
- package/dist/cjs/src/abstract/hyperliquid.js +1 -1
- package/dist/cjs/src/abstract/idex.js +1 -1
- package/dist/cjs/src/abstract/independentreserve.js +1 -1
- package/dist/cjs/src/abstract/indodax.js +1 -1
- package/dist/cjs/src/abstract/kraken.js +1 -1
- package/dist/cjs/src/abstract/krakenfutures.js +1 -1
- package/dist/cjs/src/abstract/kucoin.js +1 -1
- package/dist/cjs/src/abstract/kucoinfutures.js +1 -1
- package/dist/cjs/src/abstract/kuna.js +1 -1
- package/dist/cjs/src/abstract/latoken.js +1 -1
- package/dist/cjs/src/abstract/lbank.js +1 -1
- package/dist/cjs/src/abstract/luno.js +1 -1
- package/dist/cjs/src/abstract/mercado.js +1 -1
- package/dist/cjs/src/abstract/mexc.js +1 -1
- package/dist/cjs/src/abstract/ndax.js +1 -1
- package/dist/cjs/src/abstract/novadax.js +1 -1
- package/dist/cjs/src/abstract/oceanex.js +1 -1
- package/dist/cjs/src/abstract/okcoin.js +1 -1
- package/dist/cjs/src/abstract/okx.js +1 -1
- package/dist/cjs/src/abstract/onetrading.js +1 -1
- package/dist/cjs/src/abstract/oxfun.js +1 -1
- package/dist/cjs/src/abstract/p2b.js +1 -1
- package/dist/cjs/src/abstract/paradex.js +1 -1
- package/dist/cjs/src/abstract/paymium.js +1 -1
- package/dist/cjs/src/abstract/phemex.js +1 -1
- package/dist/cjs/src/abstract/poloniex.js +1 -1
- package/dist/cjs/src/abstract/poloniexfutures.js +1 -1
- package/dist/cjs/src/abstract/probit.js +1 -1
- package/dist/cjs/src/abstract/timex.js +1 -1
- package/dist/cjs/src/abstract/tokocrypto.js +1 -1
- package/dist/cjs/src/abstract/tradeogre.js +1 -1
- package/dist/cjs/src/abstract/upbit.js +1 -1
- package/dist/cjs/src/abstract/vertex.js +1 -1
- package/dist/cjs/src/abstract/wavesexchange.js +1 -1
- package/dist/cjs/src/abstract/whitebit.js +1 -1
- package/dist/cjs/src/abstract/woo.js +1 -1
- package/dist/cjs/src/abstract/woofipro.js +1 -1
- package/dist/cjs/src/abstract/xt.js +1 -1
- package/dist/cjs/src/abstract/yobit.js +1 -1
- package/dist/cjs/src/abstract/zaif.js +1 -1
- package/dist/cjs/src/abstract/zonda.js +1 -1
- package/dist/cjs/src/ace.js +1 -1
- package/dist/cjs/src/alpaca.js +1 -1
- package/dist/cjs/src/ascendex.js +1 -1
- package/dist/cjs/src/base/Precise.js +6 -0
- package/dist/cjs/src/base/errors.js +6 -0
- package/dist/cjs/src/base/functions/crypto.js +1 -1
- package/dist/cjs/src/base/functions/encode.js +1 -1
- package/dist/cjs/src/base/functions/misc.js +1 -0
- package/dist/cjs/src/base/functions/number.js +6 -0
- package/dist/cjs/src/base/functions/platform.js +6 -0
- package/dist/cjs/src/base/functions/rsa.js +1 -0
- package/dist/cjs/src/base/functions/string.js +6 -0
- package/dist/cjs/src/base/functions/throttle.js +1 -1
- package/dist/cjs/src/base/functions/time.js +6 -0
- package/dist/cjs/src/base/functions/totp.js +1 -0
- package/dist/cjs/src/base/functions/type.js +6 -0
- package/dist/cjs/src/base/functions.js +1 -1
- package/dist/cjs/src/base/ws/Cache.js +6 -0
- package/dist/cjs/src/base/ws/Client.js +1 -0
- package/dist/cjs/src/base/ws/Future.js +1 -1
- package/dist/cjs/src/base/ws/OrderBook.js +1 -1
- package/dist/cjs/src/base/ws/OrderBookSide.js +6 -0
- package/dist/cjs/src/base/ws/WsClient.js +1 -1
- package/dist/cjs/src/bequant.js +1 -1
- package/dist/cjs/src/bigone.js +1 -1
- package/dist/cjs/src/binance.js +5 -5
- package/dist/cjs/src/binancecoinm.js +1 -1
- package/dist/cjs/src/binanceus.js +1 -1
- package/dist/cjs/src/binanceusdm.js +1 -1
- package/dist/cjs/src/bingx.js +1 -1
- package/dist/cjs/src/bit2c.js +1 -1
- package/dist/cjs/src/bitbank.js +1 -1
- package/dist/cjs/src/bitbns.js +1 -1
- package/dist/cjs/src/bitcoincom.js +1 -1
- package/dist/cjs/src/bitfinex.js +1 -1
- package/dist/cjs/src/bitfinex1.js +1 -1
- package/dist/cjs/src/bitflyer.js +1 -1
- package/dist/cjs/src/bitget.js +1 -1
- package/dist/cjs/src/bithumb.js +1 -1
- package/dist/cjs/src/bitmart.js +1 -1
- package/dist/cjs/src/bitmex.js +1 -1
- package/dist/cjs/src/bitopro.js +1 -1
- package/dist/cjs/src/bitpanda.js +1 -1
- package/dist/cjs/src/bitrue.js +1 -1
- package/dist/cjs/src/bitso.js +1 -1
- package/dist/cjs/src/bitstamp.js +1 -1
- package/dist/cjs/src/bitteam.js +1 -1
- package/dist/cjs/src/bl3p.js +1 -1
- package/dist/cjs/src/blockchaincom.js +1 -1
- package/dist/cjs/src/blofin.js +1 -1
- package/dist/cjs/src/btcalpha.js +1 -1
- package/dist/cjs/src/btcbox.js +1 -1
- package/dist/cjs/src/btcmarkets.js +1 -1
- package/dist/cjs/src/btcturk.js +1 -1
- package/dist/cjs/src/bybit.js +1 -1
- package/dist/cjs/src/cex.js +1 -1
- package/dist/cjs/src/coinbaseadvanced.js +1 -1
- package/dist/cjs/src/coincatch.js +1 -1
- package/dist/cjs/src/coincheck.js +1 -1
- package/dist/cjs/src/coinex.js +1 -1
- package/dist/cjs/src/coinlist.js +1 -0
- package/dist/cjs/src/coinmate.js +1 -1
- package/dist/cjs/src/coinmetro.js +1 -1
- package/dist/cjs/src/coinone.js +1 -1
- package/dist/cjs/src/coinsph.js +1 -0
- package/dist/cjs/src/coinspot.js +1 -1
- package/dist/cjs/src/cryptocom.js +3 -1
- package/dist/cjs/src/currencycom.js +1 -1
- package/dist/cjs/src/defx.js +1 -1
- package/dist/cjs/src/delta.js +1 -1
- package/dist/cjs/src/deribit.js +1 -1
- package/dist/cjs/src/digifinex.js +1 -1
- package/dist/cjs/src/ellipx.js +1 -1
- package/dist/cjs/src/exmo.js +1 -1
- package/dist/cjs/src/fmfwio.js +1 -1
- package/dist/cjs/src/gate.js +1 -1
- package/dist/cjs/src/gateio.js +1 -1
- package/dist/cjs/src/gemini.js +1 -1
- package/dist/cjs/src/hashkey.js +1 -1
- package/dist/cjs/src/hitbtc.js +1 -0
- package/dist/cjs/src/hollaex.js +1 -1
- package/dist/cjs/src/htx.js +1 -1
- package/dist/cjs/src/huobi.js +1 -1
- package/dist/cjs/src/huobijp.js +1 -1
- package/dist/cjs/src/hyperliquid.js +121 -74
- package/dist/cjs/src/idex.js +1 -1
- package/dist/cjs/src/independentreserve.js +1 -1
- package/dist/cjs/src/indodax.js +1 -1
- package/dist/cjs/src/kraken.js +1 -1
- package/dist/cjs/src/krakenfutures.js +1 -1
- package/dist/cjs/src/kucoin.js +1 -1
- package/dist/cjs/src/kucoinfutures.js +1 -1
- package/dist/cjs/src/kuna.js +1 -1
- package/dist/cjs/src/latoken.js +1 -1
- package/dist/cjs/src/lbank.js +1 -1
- package/dist/cjs/src/luno.js +1 -1
- package/dist/cjs/src/mercado.js +1 -1
- package/dist/cjs/src/mexc.js +1 -1
- package/dist/cjs/src/myokx.js +1 -1
- package/dist/cjs/src/ndax.js +1 -1
- package/dist/cjs/src/novadax.js +1 -1
- package/dist/cjs/src/oceanex.js +1 -1
- package/dist/cjs/src/okcoin.js +1 -1
- package/dist/cjs/src/okx.js +1 -1
- package/dist/cjs/src/onetrading.js +1 -1
- package/dist/cjs/src/oxfun.js +1 -1
- package/dist/cjs/src/p2b.js +1 -1
- package/dist/cjs/src/paradex.js +63 -15
- package/dist/cjs/src/paymium.js +1 -1
- package/dist/cjs/src/poloniex.js +1 -1
- package/dist/cjs/src/poloniexfutures.js +1 -1
- package/dist/cjs/src/pro/alpaca.js +1 -1
- package/dist/cjs/src/pro/ascendex.js +1 -1
- package/dist/cjs/src/pro/bequant.js +1 -1
- package/dist/cjs/src/pro/binancecoinm.js +1 -1
- package/dist/cjs/src/pro/binanceus.js +1 -1
- package/dist/cjs/src/pro/binanceusdm.js +1 -1
- package/dist/cjs/src/pro/bingx.js +1 -1
- package/dist/cjs/src/pro/bitcoincom.js +1 -1
- package/dist/cjs/src/pro/bitfinex.js +1 -1
- package/dist/cjs/src/pro/bitfinex1.js +1 -1
- package/dist/cjs/src/pro/bitget.js +1 -1
- package/dist/cjs/src/pro/bithumb.js +1 -1
- package/dist/cjs/src/pro/bitmart.js +1 -1
- package/dist/cjs/src/pro/bitmex.js +1 -1
- package/dist/cjs/src/pro/bitopro.js +1 -1
- package/dist/cjs/src/pro/bitpanda.js +1 -1
- package/dist/cjs/src/pro/bitrue.js +1 -1
- package/dist/cjs/src/pro/bitstamp.js +1 -1
- package/dist/cjs/src/pro/bitvavo.js +1 -1
- package/dist/cjs/src/pro/blockchaincom.js +1 -1
- package/dist/cjs/src/pro/blofin.js +1 -1
- package/dist/cjs/src/pro/bybit.js +4 -3
- package/dist/cjs/src/pro/cex.js +1 -1
- package/dist/cjs/src/pro/coinbase.js +1 -1
- package/dist/cjs/src/pro/coinbaseadvanced.js +1 -1
- package/dist/cjs/src/pro/coinbaseexchange.js +1 -1
- package/dist/cjs/src/pro/coinbaseinternational.js +1 -1
- package/dist/cjs/src/pro/coincatch.js +1 -1
- package/dist/cjs/src/pro/coincheck.js +1 -1
- package/dist/cjs/src/pro/coinex.js +1 -1
- package/dist/cjs/src/pro/coinone.js +1 -1
- package/dist/cjs/src/pro/cryptocom.js +1 -1
- package/dist/cjs/src/pro/currencycom.js +1 -1
- package/dist/cjs/src/pro/defx.js +1 -1
- package/dist/cjs/src/pro/deribit.js +1 -1
- package/dist/cjs/src/pro/exmo.js +1 -1
- package/dist/cjs/src/pro/gate.js +10 -2
- package/dist/cjs/src/pro/gateio.js +1 -1
- package/dist/cjs/src/pro/gemini.js +1 -1
- package/dist/cjs/src/pro/hashkey.js +1 -1
- package/dist/cjs/src/pro/hitbtc.js +1 -1
- package/dist/cjs/src/pro/hollaex.js +1 -1
- package/dist/cjs/src/pro/htx.js +1 -1
- package/dist/cjs/src/pro/huobi.js +1 -1
- package/dist/cjs/src/pro/hyperliquid.js +4 -4
- package/dist/cjs/src/pro/idex.js +1 -1
- package/dist/cjs/src/pro/independentreserve.js +1 -1
- package/dist/cjs/src/pro/kraken.js +1 -1
- package/dist/cjs/src/pro/krakenfutures.js +1 -1
- package/dist/cjs/src/pro/kucoin.js +1 -1
- package/dist/cjs/src/pro/kucoinfutures.js +1 -1
- package/dist/cjs/src/pro/lbank.js +1 -0
- package/dist/cjs/src/pro/luno.js +1 -1
- package/dist/cjs/src/pro/mexc.js +1 -1
- package/dist/cjs/src/pro/myokx.js +1 -1
- package/dist/cjs/src/pro/ndax.js +1 -1
- package/dist/cjs/src/pro/okcoin.js +1 -1
- package/dist/cjs/src/pro/okx.js +1 -1
- package/dist/cjs/src/pro/onetrading.js +1 -1
- package/dist/cjs/src/pro/oxfun.js +1 -1
- package/dist/cjs/src/pro/p2b.js +1 -1
- package/dist/cjs/src/pro/paradex.js +1 -1
- package/dist/cjs/src/pro/phemex.js +1 -1
- package/dist/cjs/src/pro/poloniex.js +1 -1
- package/dist/cjs/src/pro/poloniexfutures.js +1 -1
- package/dist/cjs/src/pro/probit.js +1 -1
- package/dist/cjs/src/pro/upbit.js +1 -1
- package/dist/cjs/src/pro/vertex.js +5 -0
- package/dist/cjs/src/pro/whitebit.js +1 -1
- package/dist/cjs/src/pro/xt.js +1 -1
- package/dist/cjs/src/probit.js +1 -1
- package/dist/cjs/src/static_dependencies/ethers/abi-coder.js +6 -0
- package/dist/cjs/src/static_dependencies/ethers/address/address.js +1 -1
- package/dist/cjs/src/static_dependencies/ethers/coders/abstract-coder.js +6 -0
- package/dist/cjs/src/static_dependencies/ethers/coders/address.js +1 -0
- package/dist/cjs/src/static_dependencies/ethers/coders/anonymous.js +1 -0
- package/dist/cjs/src/static_dependencies/ethers/coders/array.js +1 -0
- package/dist/cjs/src/static_dependencies/ethers/coders/boolean.js +1 -0
- package/dist/cjs/src/static_dependencies/ethers/coders/bytes.js +1 -0
- package/dist/cjs/src/static_dependencies/ethers/coders/fixed-bytes.js +1 -0
- package/dist/cjs/src/static_dependencies/ethers/coders/null.js +1 -0
- package/dist/cjs/src/static_dependencies/ethers/coders/number.js +1 -0
- package/dist/cjs/src/static_dependencies/ethers/coders/string.js +1 -0
- package/dist/cjs/src/static_dependencies/ethers/coders/tuple.js +1 -0
- package/dist/cjs/src/static_dependencies/ethers/fragments.js +6 -0
- package/dist/cjs/src/static_dependencies/ethers/hash/typed-data.js +6 -0
- package/dist/cjs/src/static_dependencies/ethers/index.js +1 -10
- package/dist/cjs/src/static_dependencies/ethers/interface.js +6 -0
- package/dist/cjs/src/static_dependencies/ethers/typed.js +6 -0
- package/dist/cjs/src/static_dependencies/ethers/utils/base58.js +1 -13
- package/dist/cjs/src/static_dependencies/ethers/utils/data.js +1 -6
- package/dist/cjs/src/static_dependencies/ethers/utils/errors.js +1 -9
- package/dist/cjs/src/static_dependencies/ethers/utils/events.js +6 -0
- package/dist/cjs/src/static_dependencies/ethers/utils/fixednumber.js +6 -0
- package/dist/cjs/src/static_dependencies/ethers/utils/index.js +1 -7
- package/dist/cjs/src/static_dependencies/ethers/utils/maths.js +1 -5
- package/dist/cjs/src/static_dependencies/ethers/utils/properties.js +6 -0
- package/dist/cjs/src/static_dependencies/ethers/utils/utf8.js +1 -8
- package/dist/cjs/src/static_dependencies/fflake/browser.js +1 -1
- package/dist/cjs/src/static_dependencies/jsencrypt/JSEncrypt.js +1 -0
- package/dist/cjs/src/static_dependencies/jsencrypt/JSEncryptRSAKey.js +1 -0
- package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/asn1.js +1 -1
- package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/base64.js +6 -0
- package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/hex.js +6 -0
- package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/int10.js +6 -0
- package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/base64.js +1 -0
- package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.js +1 -1
- package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/prng4.js +6 -0
- package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/rng.js +1 -1
- package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/rsa.js +1 -1
- package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/util.js +6 -0
- package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.js +1 -1
- package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsrsasign/yahoo.js +6 -0
- package/dist/cjs/src/static_dependencies/messagepack/msgpack.js +6 -0
- package/dist/cjs/src/static_dependencies/noble-curves/_shortw_utils.js +1 -1
- package/dist/cjs/src/static_dependencies/noble-curves/abstract/curve.js +1 -1
- package/dist/cjs/src/static_dependencies/noble-curves/abstract/edwards.js +1 -1
- package/dist/cjs/src/static_dependencies/noble-curves/abstract/hash-to-curve.js +1 -0
- package/dist/cjs/src/static_dependencies/noble-curves/abstract/modular.js +1 -1
- package/dist/cjs/src/static_dependencies/noble-curves/abstract/montgomery.js +1 -1
- package/dist/cjs/src/static_dependencies/noble-curves/abstract/poseidon.js +1 -1
- package/dist/cjs/src/static_dependencies/noble-curves/abstract/utils.js +6 -0
- package/dist/cjs/src/static_dependencies/noble-curves/abstract/weierstrass.js +1 -1
- package/dist/cjs/src/static_dependencies/noble-curves/ed25519.js +1 -1
- package/dist/cjs/src/static_dependencies/noble-curves/p256.js +1 -1
- package/dist/cjs/src/static_dependencies/noble-curves/secp256k1.js +1 -1
- package/dist/cjs/src/static_dependencies/noble-hashes/_assert.js +6 -0
- package/dist/cjs/src/static_dependencies/noble-hashes/_sha2.js +1 -0
- package/dist/cjs/src/static_dependencies/noble-hashes/_u64.js +6 -0
- package/dist/cjs/src/static_dependencies/noble-hashes/crypto.js +6 -0
- package/dist/cjs/src/static_dependencies/noble-hashes/hmac.js +1 -0
- package/dist/cjs/src/static_dependencies/noble-hashes/md5.js +1 -0
- package/dist/cjs/src/static_dependencies/noble-hashes/sha1.js +1 -0
- package/dist/cjs/src/static_dependencies/noble-hashes/sha256.js +1 -0
- package/dist/cjs/src/static_dependencies/noble-hashes/sha3.js +1 -0
- package/dist/cjs/src/static_dependencies/noble-hashes/sha512.js +1 -0
- package/dist/cjs/src/static_dependencies/noble-hashes/utils.js +1 -1
- package/dist/cjs/src/static_dependencies/node-fetch/body.js +1 -5
- package/dist/cjs/src/static_dependencies/node-fetch/errors/abort-error.js +1 -0
- package/dist/cjs/src/static_dependencies/node-fetch/errors/base.js +6 -0
- package/dist/cjs/src/static_dependencies/node-fetch/errors/fetch-error.js +1 -0
- package/dist/cjs/src/static_dependencies/node-fetch/headers.js +1 -5
- package/dist/cjs/src/static_dependencies/node-fetch/index.js +1 -7
- package/dist/cjs/src/static_dependencies/node-fetch/request.js +1 -7
- package/dist/cjs/src/static_dependencies/node-fetch/response.js +1 -5
- package/dist/cjs/src/static_dependencies/node-fetch/utils/get-search.js +6 -0
- package/dist/cjs/src/static_dependencies/node-fetch/utils/is-redirect.js +6 -0
- package/dist/cjs/src/static_dependencies/node-fetch/utils/is.js +6 -0
- package/dist/cjs/src/static_dependencies/node-fetch/utils/referrer.js +1 -0
- package/dist/cjs/src/static_dependencies/proxies/agent-base/index.js +1 -0
- package/dist/cjs/src/static_dependencies/proxies/http-proxy-agent/index.js +1 -0
- package/dist/cjs/src/static_dependencies/proxies/https-proxy-agent/index.js +1 -0
- package/dist/cjs/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.js +6 -0
- package/dist/cjs/src/static_dependencies/scure-base/index.js +6 -0
- package/dist/cjs/src/static_dependencies/scure-starknet/index.js +1 -1
- package/dist/cjs/src/static_dependencies/starknet/constants.js +1 -1
- package/dist/cjs/src/static_dependencies/starknet/types/calldata.js +6 -0
- package/dist/cjs/src/static_dependencies/starknet/types/lib/contract/abi.js +6 -0
- package/dist/cjs/src/static_dependencies/starknet/types/lib/contract/index.js +6 -0
- package/dist/cjs/src/static_dependencies/starknet/types/lib/index.js +6 -0
- package/dist/cjs/src/static_dependencies/starknet/types/typedData.js +6 -0
- package/dist/cjs/src/static_dependencies/starknet/utils/assert.js +6 -0
- package/dist/cjs/src/static_dependencies/starknet/utils/cairoDataTypes/felt.js +1 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.js +1 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.js +1 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/byteArray.js +1 -0
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/cairo.js +1 -0
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.js +6 -0
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.js +6 -0
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.js +6 -0
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/formatter.js +1 -0
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/index.js +1 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/parser/index.js +1 -0
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.js +1 -0
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.js +6 -0
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/propertyOrder.js +1 -0
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/requestParser.js +1 -0
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/responseParser.js +1 -0
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/tuple.js +1 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/validate.js +1 -4
- package/dist/cjs/src/static_dependencies/starknet/utils/encode.js +1 -0
- package/dist/cjs/src/static_dependencies/starknet/utils/hash/classHash.js +1 -3
- package/dist/cjs/src/static_dependencies/starknet/utils/merkle.js +1 -0
- package/dist/cjs/src/static_dependencies/starknet/utils/num.js +1 -0
- package/dist/cjs/src/static_dependencies/starknet/utils/selector.js +1 -0
- package/dist/cjs/src/static_dependencies/starknet/utils/shortString.js +1 -0
- package/dist/cjs/src/static_dependencies/starknet/utils/typedData.js +1 -1
- package/dist/cjs/src/static_dependencies/watchable/src/unpromise.js +6 -0
- package/dist/cjs/src/timex.js +1 -0
- package/dist/cjs/src/tokocrypto.js +1 -1
- package/dist/cjs/src/tradeogre.js +1 -1
- package/dist/cjs/src/upbit.js +1 -1
- package/dist/cjs/src/vertex.js +1 -1
- package/dist/cjs/src/wavesexchange.js +1 -1
- package/dist/cjs/src/whitebit.js +1 -1
- package/dist/cjs/src/woo.js +1 -1
- package/dist/cjs/src/woofipro.js +1 -1
- package/dist/cjs/src/xt.js +1 -1
- package/dist/cjs/src/yobit.js +1 -1
- package/dist/cjs/src/zaif.js +1 -1
- package/dist/cjs/src/zonda.js +1 -1
- package/js/ccxt.d.ts +2 -8
- package/js/ccxt.js +8 -6
- package/js/src/abstract/ace.js +6 -0
- package/js/src/abstract/alpaca.js +6 -0
- package/js/src/abstract/ascendex.js +6 -0
- package/js/src/abstract/bequant.js +6 -0
- package/js/src/abstract/bigone.js +6 -0
- package/js/src/abstract/binance.d.ts +1 -0
- package/js/src/abstract/binance.js +6 -0
- package/js/src/abstract/binancecoinm.d.ts +1 -0
- package/js/src/abstract/binancecoinm.js +6 -0
- package/js/src/abstract/binanceus.d.ts +1 -0
- package/js/src/abstract/binanceus.js +6 -0
- package/js/src/abstract/binanceusdm.d.ts +1 -0
- package/js/src/abstract/binanceusdm.js +6 -0
- package/js/src/abstract/bingx.js +6 -0
- package/js/src/abstract/bit2c.js +6 -0
- package/js/src/abstract/bitbank.js +6 -0
- package/js/src/abstract/bitbns.js +6 -0
- package/js/src/abstract/bitcoincom.js +6 -0
- package/js/src/abstract/bitfinex.js +6 -0
- package/js/src/abstract/bitfinex1.js +6 -0
- package/js/src/abstract/bitflyer.js +6 -0
- package/js/src/abstract/bitget.js +6 -0
- package/js/src/abstract/bithumb.js +6 -0
- package/js/src/abstract/bitmart.js +6 -0
- package/js/src/abstract/bitmex.js +6 -0
- package/js/src/abstract/bitopro.js +6 -0
- package/js/src/abstract/bitpanda.js +6 -0
- package/js/src/abstract/bitrue.js +6 -0
- package/js/src/abstract/bitso.js +6 -0
- package/js/src/abstract/bitstamp.js +6 -0
- package/js/src/abstract/bitteam.js +6 -0
- package/js/src/abstract/bitvavo.js +6 -0
- package/js/src/abstract/bl3p.js +6 -0
- package/js/src/abstract/blockchaincom.js +6 -0
- package/js/src/abstract/blofin.js +6 -0
- package/js/src/abstract/btcalpha.js +6 -0
- package/js/src/abstract/btcbox.js +6 -0
- package/js/src/abstract/btcmarkets.js +6 -0
- package/js/src/abstract/btcturk.js +6 -0
- package/js/src/abstract/bybit.js +6 -0
- package/js/src/abstract/cex.js +6 -0
- package/js/src/abstract/coinbase.js +6 -0
- package/js/src/abstract/coinbaseadvanced.js +6 -0
- package/js/src/abstract/coinbaseexchange.js +6 -0
- package/js/src/abstract/coinbaseinternational.js +6 -0
- package/js/src/abstract/coincatch.js +6 -0
- package/js/src/abstract/coincheck.js +6 -0
- package/js/src/abstract/coinex.js +6 -0
- package/js/src/abstract/coinlist.js +6 -0
- package/js/src/abstract/coinmate.js +6 -0
- package/js/src/abstract/coinmetro.js +6 -0
- package/js/src/abstract/coinone.js +6 -0
- package/js/src/abstract/coinsph.js +6 -0
- package/js/src/abstract/coinspot.js +6 -0
- package/js/src/abstract/cryptocom.js +6 -0
- package/js/src/abstract/defx.js +6 -0
- package/js/src/abstract/delta.js +6 -0
- package/js/src/abstract/deribit.js +6 -0
- package/js/src/abstract/digifinex.js +6 -0
- package/js/src/abstract/ellipx.js +6 -0
- package/js/src/abstract/exmo.js +6 -0
- package/js/src/abstract/fmfwio.js +6 -0
- package/js/src/abstract/gate.js +6 -0
- package/js/src/abstract/gateio.js +6 -0
- package/js/src/abstract/gemini.js +6 -0
- package/js/src/abstract/hashkey.js +6 -0
- package/js/src/abstract/hitbtc.js +6 -0
- package/js/src/abstract/hollaex.js +6 -0
- package/js/src/abstract/htx.js +6 -0
- package/js/src/abstract/huobi.js +6 -0
- package/js/src/abstract/huobijp.js +6 -0
- package/js/src/abstract/hyperliquid.js +6 -0
- package/js/src/abstract/idex.js +6 -0
- package/js/src/abstract/independentreserve.js +6 -0
- package/js/src/abstract/indodax.js +6 -0
- package/js/src/abstract/kraken.js +6 -0
- package/js/src/abstract/krakenfutures.js +6 -0
- package/js/src/abstract/kucoin.js +6 -0
- package/js/src/abstract/kucoinfutures.js +6 -0
- package/js/src/abstract/kuna.js +6 -0
- package/js/src/abstract/latoken.js +6 -0
- package/js/src/abstract/lbank.js +6 -0
- package/js/src/abstract/luno.js +6 -0
- package/js/src/abstract/mercado.js +6 -0
- package/js/src/abstract/mexc.js +6 -0
- package/js/src/abstract/myokx.js +6 -0
- package/js/src/abstract/ndax.js +6 -0
- package/js/src/abstract/novadax.js +6 -0
- package/js/src/abstract/oceanex.js +6 -0
- package/js/src/abstract/okcoin.js +6 -0
- package/js/src/abstract/okx.js +6 -0
- package/js/src/abstract/onetrading.js +6 -0
- package/js/src/abstract/oxfun.js +6 -0
- package/js/src/abstract/p2b.js +6 -0
- package/js/src/abstract/paradex.js +6 -0
- package/js/src/abstract/paymium.js +6 -0
- package/js/src/abstract/phemex.js +6 -0
- package/js/src/abstract/poloniex.js +6 -0
- package/js/src/abstract/poloniexfutures.js +6 -0
- package/js/src/abstract/probit.js +6 -0
- package/js/src/abstract/timex.js +6 -0
- package/js/src/abstract/tokocrypto.js +6 -0
- package/js/src/abstract/tradeogre.js +6 -0
- package/js/src/abstract/upbit.js +6 -0
- package/js/src/abstract/vertex.js +6 -0
- package/js/src/abstract/wavesexchange.js +6 -0
- package/js/src/abstract/whitebit.js +6 -0
- package/js/src/abstract/woo.js +6 -0
- package/js/src/abstract/woofipro.js +6 -0
- package/js/src/abstract/xt.js +6 -0
- package/js/src/abstract/yobit.js +6 -0
- package/js/src/abstract/zaif.js +6 -0
- package/js/src/abstract/zonda.js +6 -0
- package/js/src/ace.js +6 -0
- package/js/src/alpaca.js +6 -0
- package/js/src/ascendex.js +6 -0
- package/js/src/base/Exchange.js +6 -0
- package/js/src/base/Precise.js +6 -0
- package/js/src/base/errorHierarchy.js +6 -0
- package/js/src/base/errors.js +6 -0
- package/js/src/base/functions/crypto.js +6 -0
- package/js/src/base/functions/encode.js +6 -0
- package/js/src/base/functions/generic.js +6 -0
- package/js/src/base/functions/misc.js +6 -0
- package/js/src/base/functions/number.js +6 -0
- package/js/src/base/functions/platform.js +6 -0
- package/js/src/base/functions/rsa.js +6 -0
- package/js/src/base/functions/string.js +6 -0
- package/js/src/base/functions/throttle.js +6 -0
- package/js/src/base/functions/time.js +6 -0
- package/js/src/base/functions/totp.js +6 -0
- package/js/src/base/functions/type.js +6 -0
- package/js/src/base/functions.js +6 -0
- package/js/src/base/types.js +6 -0
- package/js/src/base/ws/Cache.js +6 -0
- package/js/src/base/ws/Client.js +6 -0
- package/js/src/base/ws/Future.js +6 -0
- package/js/src/base/ws/OrderBook.js +6 -0
- package/js/src/base/ws/OrderBookSide.js +6 -0
- package/js/src/base/ws/WsClient.js +6 -0
- package/js/src/base/ws/functions.js +6 -0
- package/js/src/bequant.js +6 -0
- package/js/src/bigone.js +6 -0
- package/js/src/binance.js +10 -4
- package/js/src/binancecoinm.js +6 -0
- package/js/src/binanceus.js +6 -0
- package/js/src/binanceusdm.js +6 -0
- package/js/src/bingx.js +6 -0
- package/js/src/bit2c.js +6 -0
- package/js/src/bitbank.js +6 -0
- package/js/src/bitbns.js +6 -0
- package/js/src/bitcoincom.js +6 -0
- package/js/src/bitfinex.js +6 -0
- package/js/src/bitfinex1.js +6 -0
- package/js/src/bitflyer.js +6 -0
- package/js/src/bitget.js +6 -0
- package/js/src/bithumb.js +6 -0
- package/js/src/bitmart.js +6 -0
- package/js/src/bitmex.js +6 -0
- package/js/src/bitopro.js +6 -0
- package/js/src/bitpanda.js +6 -0
- package/js/src/bitrue.js +6 -0
- package/js/src/bitso.js +6 -0
- package/js/src/bitstamp.js +6 -0
- package/js/src/bitteam.js +6 -0
- package/js/src/bitvavo.js +6 -0
- package/js/src/bl3p.js +6 -0
- package/js/src/blockchaincom.js +6 -0
- package/js/src/blofin.js +6 -0
- package/js/src/btcalpha.js +6 -0
- package/js/src/btcbox.js +6 -0
- package/js/src/btcmarkets.js +6 -0
- package/js/src/btcturk.js +6 -0
- package/js/src/bybit.js +6 -0
- package/js/src/cex.js +6 -0
- package/js/src/coinbase.js +6 -0
- package/js/src/coinbaseadvanced.js +6 -0
- package/js/src/coinbaseexchange.js +6 -0
- package/js/src/coinbaseinternational.js +6 -0
- package/js/src/coincatch.js +6 -0
- package/js/src/coincheck.js +6 -0
- package/js/src/coinex.js +6 -0
- package/js/src/coinlist.js +6 -0
- package/js/src/coinmate.js +6 -0
- package/js/src/coinmetro.js +6 -0
- package/js/src/coinone.js +6 -0
- package/js/src/coinsph.js +6 -0
- package/js/src/coinspot.js +6 -0
- package/js/src/cryptocom.js +8 -0
- package/js/src/defx.js +6 -0
- package/js/src/delta.js +6 -0
- package/js/src/deribit.js +6 -0
- package/js/src/digifinex.js +6 -0
- package/js/src/ellipx.js +6 -0
- package/js/src/exmo.js +6 -0
- package/js/src/fmfwio.js +6 -0
- package/js/src/gate.js +6 -0
- package/js/src/gateio.js +6 -0
- package/js/src/gemini.js +6 -0
- package/js/src/hashkey.js +6 -0
- package/js/src/hitbtc.js +6 -0
- package/js/src/hollaex.js +6 -0
- package/js/src/htx.js +6 -0
- package/js/src/huobi.js +6 -0
- package/js/src/huobijp.js +6 -0
- package/js/src/hyperliquid.d.ts +12 -3
- package/js/src/hyperliquid.js +126 -73
- package/js/src/idex.js +6 -0
- package/js/src/independentreserve.js +6 -0
- package/js/src/indodax.js +6 -0
- package/js/src/kraken.js +6 -0
- package/js/src/krakenfutures.js +6 -0
- package/js/src/kucoin.js +6 -0
- package/js/src/kucoinfutures.js +6 -0
- package/js/src/kuna.js +6 -0
- package/js/src/latoken.js +6 -0
- package/js/src/lbank.js +6 -0
- package/js/src/luno.js +6 -0
- package/js/src/mercado.js +6 -0
- package/js/src/mexc.js +6 -0
- package/js/src/myokx.js +6 -0
- package/js/src/ndax.js +6 -0
- package/js/src/novadax.js +6 -0
- package/js/src/oceanex.js +6 -0
- package/js/src/okcoin.js +6 -0
- package/js/src/okx.js +6 -0
- package/js/src/onetrading.js +6 -0
- package/js/src/oxfun.js +6 -0
- package/js/src/p2b.js +6 -0
- package/js/src/paradex.d.ts +2 -0
- package/js/src/paradex.js +68 -14
- package/js/src/paymium.js +6 -0
- package/js/src/phemex.js +6 -0
- package/js/src/poloniex.js +6 -0
- package/js/src/poloniexfutures.js +6 -0
- package/js/src/pro/alpaca.js +6 -0
- package/js/src/pro/ascendex.js +6 -0
- package/js/src/pro/bequant.js +6 -0
- package/js/src/pro/binance.js +6 -0
- package/js/src/pro/binancecoinm.js +6 -0
- package/js/src/pro/binanceus.js +6 -0
- package/js/src/pro/binanceusdm.js +6 -0
- package/js/src/pro/bingx.js +6 -0
- package/js/src/pro/bitcoincom.js +6 -0
- package/js/src/pro/bitfinex.js +6 -0
- package/js/src/pro/bitfinex1.js +6 -0
- package/js/src/pro/bitget.js +6 -0
- package/js/src/pro/bithumb.js +6 -0
- package/js/src/pro/bitmart.js +6 -0
- package/js/src/pro/bitmex.js +6 -0
- package/js/src/pro/bitopro.js +7 -1
- package/js/src/pro/bitpanda.js +6 -0
- package/js/src/pro/bitrue.js +6 -0
- package/js/src/pro/bitstamp.js +6 -0
- package/js/src/pro/bitvavo.js +6 -0
- package/js/src/pro/blockchaincom.js +6 -0
- package/js/src/pro/blofin.js +6 -0
- package/js/src/pro/bybit.js +9 -2
- package/js/src/pro/cex.js +6 -0
- package/js/src/pro/coinbase.js +6 -0
- package/js/src/pro/coinbaseadvanced.js +6 -0
- package/js/src/pro/coinbaseexchange.js +6 -0
- package/js/src/pro/coinbaseinternational.js +6 -0
- package/js/src/pro/coincatch.js +6 -0
- package/js/src/pro/coincheck.js +6 -0
- package/js/src/pro/coinex.js +6 -0
- package/js/src/pro/coinone.js +6 -0
- package/js/src/pro/cryptocom.js +6 -0
- package/js/src/pro/defx.js +6 -0
- package/js/src/pro/deribit.js +6 -0
- package/js/src/pro/exmo.js +6 -0
- package/js/src/pro/gate.js +15 -1
- package/js/src/pro/gateio.js +6 -0
- package/js/src/pro/gemini.js +6 -0
- package/js/src/pro/hashkey.js +6 -0
- package/js/src/pro/hitbtc.js +6 -0
- package/js/src/pro/hollaex.js +6 -0
- package/js/src/pro/htx.js +6 -0
- package/js/src/pro/huobi.js +6 -0
- package/js/src/pro/huobijp.js +6 -0
- package/js/src/pro/hyperliquid.d.ts +0 -1
- package/js/src/pro/hyperliquid.js +9 -3
- package/js/src/pro/idex.js +6 -0
- package/js/src/pro/independentreserve.js +6 -0
- package/js/src/pro/kraken.js +6 -0
- package/js/src/pro/krakenfutures.js +6 -0
- package/js/src/pro/kucoin.js +6 -0
- package/js/src/pro/kucoinfutures.js +6 -0
- package/js/src/pro/lbank.js +6 -0
- package/js/src/pro/luno.js +6 -0
- package/js/src/pro/mexc.js +6 -0
- package/js/src/pro/myokx.js +6 -0
- package/js/src/pro/ndax.js +6 -0
- package/js/src/pro/okcoin.js +6 -0
- package/js/src/pro/okx.js +6 -0
- package/js/src/pro/onetrading.js +6 -0
- package/js/src/pro/oxfun.js +6 -0
- package/js/src/pro/p2b.js +6 -0
- package/js/src/pro/paradex.js +6 -0
- package/js/src/pro/phemex.js +6 -0
- package/js/src/pro/poloniex.js +6 -0
- package/js/src/pro/poloniexfutures.js +6 -0
- package/js/src/pro/probit.js +6 -0
- package/js/src/pro/upbit.js +6 -0
- package/js/src/pro/vertex.js +11 -0
- package/js/src/pro/whitebit.js +6 -0
- package/js/src/pro/woo.js +6 -0
- package/js/src/pro/woofipro.js +6 -0
- package/js/src/pro/xt.js +6 -0
- package/js/src/probit.js +6 -0
- package/js/src/static_dependencies/ethers/abi-coder.js +6 -0
- package/js/src/static_dependencies/ethers/address/address.js +6 -0
- package/js/src/static_dependencies/ethers/address/checks.js +6 -0
- package/js/src/static_dependencies/ethers/address/contract-address.js +6 -0
- package/js/src/static_dependencies/ethers/address/index.js +6 -0
- package/js/src/static_dependencies/ethers/bytes32.js +6 -0
- package/js/src/static_dependencies/ethers/coders/abstract-coder.js +6 -0
- package/js/src/static_dependencies/ethers/coders/address.js +6 -0
- package/js/src/static_dependencies/ethers/coders/anonymous.js +6 -0
- package/js/src/static_dependencies/ethers/coders/array.js +6 -0
- package/js/src/static_dependencies/ethers/coders/boolean.js +6 -0
- package/js/src/static_dependencies/ethers/coders/bytes.js +6 -0
- package/js/src/static_dependencies/ethers/coders/fixed-bytes.js +6 -0
- package/js/src/static_dependencies/ethers/coders/null.js +6 -0
- package/js/src/static_dependencies/ethers/coders/number.js +6 -0
- package/js/src/static_dependencies/ethers/coders/string.js +6 -0
- package/js/src/static_dependencies/ethers/coders/tuple.js +6 -0
- package/js/src/static_dependencies/ethers/fragments.js +6 -0
- package/js/src/static_dependencies/ethers/hash/index.js +6 -0
- package/js/src/static_dependencies/ethers/hash/solidity.js +6 -0
- package/js/src/static_dependencies/ethers/hash/typed-data.js +6 -0
- package/js/src/static_dependencies/ethers/index.js +6 -0
- package/js/src/static_dependencies/ethers/interface.js +6 -0
- package/js/src/static_dependencies/ethers/typed.js +6 -0
- package/js/src/static_dependencies/ethers/utils/base58.js +6 -0
- package/js/src/static_dependencies/ethers/utils/base64-browser.js +6 -0
- package/js/src/static_dependencies/ethers/utils/base64.js +6 -0
- package/js/src/static_dependencies/ethers/utils/data.js +6 -0
- package/js/src/static_dependencies/ethers/utils/errors.js +6 -0
- package/js/src/static_dependencies/ethers/utils/events.js +6 -0
- package/js/src/static_dependencies/ethers/utils/fixednumber.js +6 -0
- package/js/src/static_dependencies/ethers/utils/index.js +6 -0
- package/js/src/static_dependencies/ethers/utils/maths.js +6 -0
- package/js/src/static_dependencies/ethers/utils/properties.js +6 -0
- package/js/src/static_dependencies/ethers/utils/rlp-decode.js +6 -0
- package/js/src/static_dependencies/ethers/utils/rlp-encode.js +6 -0
- package/js/src/static_dependencies/ethers/utils/rlp.js +6 -0
- package/js/src/static_dependencies/ethers/utils/units.js +6 -0
- package/js/src/static_dependencies/ethers/utils/utf8.js +6 -0
- package/js/src/static_dependencies/ethers/utils/uuid.js +6 -0
- package/js/src/static_dependencies/fflake/browser.js +6 -0
- package/js/src/static_dependencies/jsencrypt/JSEncrypt.js +6 -0
- package/js/src/static_dependencies/jsencrypt/JSEncryptRSAKey.js +6 -0
- package/js/src/static_dependencies/jsencrypt/index.js +6 -0
- package/js/src/static_dependencies/jsencrypt/lib/asn1js/asn1.js +6 -0
- package/js/src/static_dependencies/jsencrypt/lib/asn1js/base64.js +6 -0
- package/js/src/static_dependencies/jsencrypt/lib/asn1js/hex.js +6 -0
- package/js/src/static_dependencies/jsencrypt/lib/asn1js/int10.js +6 -0
- package/js/src/static_dependencies/jsencrypt/lib/asn1js/oids.js +6 -0
- package/js/src/static_dependencies/jsencrypt/lib/jsbn/base64.js +6 -0
- package/js/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.js +6 -0
- package/js/src/static_dependencies/jsencrypt/lib/jsbn/prng4.js +6 -0
- package/js/src/static_dependencies/jsencrypt/lib/jsbn/rng.js +6 -0
- package/js/src/static_dependencies/jsencrypt/lib/jsbn/rsa.js +6 -0
- package/js/src/static_dependencies/jsencrypt/lib/jsbn/util.js +6 -0
- package/js/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.js +6 -0
- package/js/src/static_dependencies/jsencrypt/lib/jsrsasign/yahoo.js +6 -0
- package/js/src/static_dependencies/messagepack/msgpack.js +6 -0
- package/js/src/static_dependencies/noble-curves/_shortw_utils.js +6 -0
- package/js/src/static_dependencies/noble-curves/abstract/curve.js +6 -0
- package/js/src/static_dependencies/noble-curves/abstract/edwards.js +6 -0
- package/js/src/static_dependencies/noble-curves/abstract/hash-to-curve.js +6 -0
- package/js/src/static_dependencies/noble-curves/abstract/modular.js +6 -0
- package/js/src/static_dependencies/noble-curves/abstract/montgomery.js +6 -0
- package/js/src/static_dependencies/noble-curves/abstract/poseidon.js +6 -0
- package/js/src/static_dependencies/noble-curves/abstract/utils.js +6 -0
- package/js/src/static_dependencies/noble-curves/abstract/weierstrass.js +6 -0
- package/js/src/static_dependencies/noble-curves/bn.js +6 -0
- package/js/src/static_dependencies/noble-curves/ed25519.js +6 -0
- package/js/src/static_dependencies/noble-curves/ed448.js +6 -0
- package/js/src/static_dependencies/noble-curves/index.js +6 -0
- package/js/src/static_dependencies/noble-curves/jubjub.js +6 -0
- package/js/src/static_dependencies/noble-curves/p256.js +6 -0
- package/js/src/static_dependencies/noble-curves/p384.js +6 -0
- package/js/src/static_dependencies/noble-curves/p521.js +6 -0
- package/js/src/static_dependencies/noble-curves/pasta.js +6 -0
- package/js/src/static_dependencies/noble-curves/secp256k1.js +6 -0
- package/js/src/static_dependencies/noble-hashes/_assert.js +6 -0
- package/js/src/static_dependencies/noble-hashes/_blake2.js +6 -0
- package/js/src/static_dependencies/noble-hashes/_sha2.js +6 -0
- package/js/src/static_dependencies/noble-hashes/_u64.js +6 -0
- package/js/src/static_dependencies/noble-hashes/argon2.js +6 -0
- package/js/src/static_dependencies/noble-hashes/blake2b.js +6 -0
- package/js/src/static_dependencies/noble-hashes/blake2s.js +6 -0
- package/js/src/static_dependencies/noble-hashes/blake3.js +6 -0
- package/js/src/static_dependencies/noble-hashes/crypto.js +6 -0
- package/js/src/static_dependencies/noble-hashes/cryptoNode.js +6 -0
- package/js/src/static_dependencies/noble-hashes/eskdf.js +6 -0
- package/js/src/static_dependencies/noble-hashes/hkdf.js +6 -0
- package/js/src/static_dependencies/noble-hashes/hmac.js +6 -0
- package/js/src/static_dependencies/noble-hashes/index.js +6 -0
- package/js/src/static_dependencies/noble-hashes/md5.js +6 -0
- package/js/src/static_dependencies/noble-hashes/pbkdf2.js +6 -0
- package/js/src/static_dependencies/noble-hashes/ripemd160.js +6 -0
- package/js/src/static_dependencies/noble-hashes/scrypt.js +6 -0
- package/js/src/static_dependencies/noble-hashes/sha1.js +6 -0
- package/js/src/static_dependencies/noble-hashes/sha256.js +6 -0
- package/js/src/static_dependencies/noble-hashes/sha3-addons.js +6 -0
- package/js/src/static_dependencies/noble-hashes/sha3.js +6 -0
- package/js/src/static_dependencies/noble-hashes/sha512.js +6 -0
- package/js/src/static_dependencies/noble-hashes/utils.js +6 -0
- package/js/src/static_dependencies/node-fetch/body.js +6 -0
- package/js/src/static_dependencies/node-fetch/errors/abort-error.js +6 -0
- package/js/src/static_dependencies/node-fetch/errors/base.js +6 -0
- package/js/src/static_dependencies/node-fetch/errors/fetch-error.js +6 -0
- package/js/src/static_dependencies/node-fetch/headers.js +6 -0
- package/js/src/static_dependencies/node-fetch/index.js +6 -0
- package/js/src/static_dependencies/node-fetch/request.js +6 -0
- package/js/src/static_dependencies/node-fetch/response.js +6 -0
- package/js/src/static_dependencies/node-fetch/utils/get-search.js +6 -0
- package/js/src/static_dependencies/node-fetch/utils/is-redirect.js +6 -0
- package/js/src/static_dependencies/node-fetch/utils/is.js +6 -0
- package/js/src/static_dependencies/node-fetch/utils/referrer.js +6 -0
- package/js/src/static_dependencies/proxies/agent-base/helpers.js +6 -0
- package/js/src/static_dependencies/proxies/agent-base/index.js +6 -0
- package/js/src/static_dependencies/proxies/http-proxy-agent/index.js +6 -0
- package/js/src/static_dependencies/proxies/https-proxy-agent/index.js +6 -0
- package/js/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.js +6 -0
- package/js/src/static_dependencies/qs/formats.cjs +6 -0
- package/js/src/static_dependencies/qs/index.cjs +6 -0
- package/js/src/static_dependencies/qs/parse.cjs +6 -0
- package/js/src/static_dependencies/qs/stringify.cjs +6 -0
- package/js/src/static_dependencies/qs/utils.cjs +6 -0
- package/js/src/static_dependencies/scure-base/index.js +6 -0
- package/js/src/static_dependencies/scure-starknet/index.js +6 -0
- package/js/src/static_dependencies/starknet/constants.js +6 -0
- package/js/src/static_dependencies/starknet/index.js +6 -0
- package/js/src/static_dependencies/starknet/types/cairoEnum.js +6 -0
- package/js/src/static_dependencies/starknet/types/calldata.js +6 -0
- package/js/src/static_dependencies/starknet/types/index.js +6 -0
- package/js/src/static_dependencies/starknet/types/lib/contract/abi.js +6 -0
- package/js/src/static_dependencies/starknet/types/lib/contract/index.js +6 -0
- package/js/src/static_dependencies/starknet/types/lib/contract/legacy.js +6 -0
- package/js/src/static_dependencies/starknet/types/lib/contract/sierra.js +6 -0
- package/js/src/static_dependencies/starknet/types/lib/index.js +6 -0
- package/js/src/static_dependencies/starknet/types/typedData.js +6 -0
- package/js/src/static_dependencies/starknet/utils/address.js +6 -0
- package/js/src/static_dependencies/starknet/utils/assert.js +6 -0
- package/js/src/static_dependencies/starknet/utils/cairoDataTypes/felt.js +6 -0
- package/js/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.js +6 -0
- package/js/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.js +6 -0
- package/js/src/static_dependencies/starknet/utils/calldata/byteArray.js +6 -0
- package/js/src/static_dependencies/starknet/utils/calldata/cairo.js +6 -0
- package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.js +6 -0
- package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.js +6 -0
- package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.js +6 -0
- package/js/src/static_dependencies/starknet/utils/calldata/enum/index.js +6 -0
- package/js/src/static_dependencies/starknet/utils/calldata/formatter.js +6 -0
- package/js/src/static_dependencies/starknet/utils/calldata/index.js +6 -0
- package/js/src/static_dependencies/starknet/utils/calldata/parser/index.js +6 -0
- package/js/src/static_dependencies/starknet/utils/calldata/parser/interface.js +6 -0
- package/js/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.js +6 -0
- package/js/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.js +6 -0
- package/js/src/static_dependencies/starknet/utils/calldata/propertyOrder.js +6 -0
- package/js/src/static_dependencies/starknet/utils/calldata/requestParser.js +6 -0
- package/js/src/static_dependencies/starknet/utils/calldata/responseParser.js +6 -0
- package/js/src/static_dependencies/starknet/utils/calldata/tuple.js +6 -0
- package/js/src/static_dependencies/starknet/utils/calldata/validate.js +6 -0
- package/js/src/static_dependencies/starknet/utils/encode.js +6 -0
- package/js/src/static_dependencies/starknet/utils/hash/classHash.js +6 -0
- package/js/src/static_dependencies/starknet/utils/hash/index.js +6 -0
- package/js/src/static_dependencies/starknet/utils/merkle.js +6 -0
- package/js/src/static_dependencies/starknet/utils/num.js +6 -0
- package/js/src/static_dependencies/starknet/utils/selector.js +6 -0
- package/js/src/static_dependencies/starknet/utils/shortString.js +6 -0
- package/js/src/static_dependencies/starknet/utils/starknetId.js +6 -0
- package/js/src/static_dependencies/starknet/utils/typedData.js +6 -0
- package/js/src/static_dependencies/starknet/utils/uint256.js +6 -0
- package/js/src/static_dependencies/starknet/utils/url.js +6 -0
- package/js/src/static_dependencies/watchable/src/index.js +6 -0
- package/js/src/static_dependencies/watchable/src/types.js +6 -0
- package/js/src/static_dependencies/watchable/src/unpromise.js +6 -0
- package/js/src/timex.js +6 -0
- package/js/src/tokocrypto.js +6 -0
- package/js/src/tradeogre.js +6 -0
- package/js/src/upbit.js +6 -0
- package/js/src/vertex.js +6 -0
- package/js/src/wavesexchange.js +6 -0
- package/js/src/whitebit.js +6 -0
- package/js/src/woo.js +6 -0
- package/js/src/woofipro.js +6 -0
- package/js/src/xt.js +6 -0
- package/js/src/yobit.js +6 -0
- package/js/src/zaif.js +6 -0
- package/js/src/zonda.js +6 -0
- package/package.json +1 -1
- package/js/src/abstract/currencycom.d.ts +0 -71
- package/js/src/abstract/currencycom.js +0 -5
- package/js/src/currencycom.d.ts +0 -284
- package/js/src/currencycom.js +0 -2117
- package/js/src/pro/currencycom.d.ts +0 -88
- package/js/src/pro/currencycom.js +0 -558
package/js/src/currencycom.js
DELETED
|
@@ -1,2117 +0,0 @@
|
|
|
1
|
-
// ---------------------------------------------------------------------------
|
|
2
|
-
import Exchange from './abstract/currencycom.js';
|
|
3
|
-
import { BadSymbol, ExchangeError, ArgumentsRequired, ExchangeNotAvailable, InsufficientFunds, OrderNotFound, InvalidOrder, DDoSProtection, InvalidNonce, AuthenticationError, BadRequest, NotSupported } from './base/errors.js';
|
|
4
|
-
import { Precise } from './base/Precise.js';
|
|
5
|
-
import { TICK_SIZE } from './base/functions/number.js';
|
|
6
|
-
import { sha256 } from './static_dependencies/noble-hashes/sha256.js';
|
|
7
|
-
// ---------------------------------------------------------------------------
|
|
8
|
-
/**
|
|
9
|
-
* @class currencycom
|
|
10
|
-
* @augments Exchange
|
|
11
|
-
*/
|
|
12
|
-
export default class currencycom extends Exchange {
|
|
13
|
-
describe() {
|
|
14
|
-
return this.deepExtend(super.describe(), {
|
|
15
|
-
'id': 'currencycom',
|
|
16
|
-
'name': 'Currency.com',
|
|
17
|
-
'countries': ['BY'],
|
|
18
|
-
'rateLimit': 100,
|
|
19
|
-
'certified': false,
|
|
20
|
-
'pro': true,
|
|
21
|
-
'version': 'v2',
|
|
22
|
-
// new metainfo interface
|
|
23
|
-
'has': {
|
|
24
|
-
'CORS': undefined,
|
|
25
|
-
'spot': true,
|
|
26
|
-
'margin': true,
|
|
27
|
-
'swap': true,
|
|
28
|
-
'future': false,
|
|
29
|
-
'option': false,
|
|
30
|
-
'addMargin': undefined,
|
|
31
|
-
'cancelAllOrders': undefined,
|
|
32
|
-
'cancelOrder': true,
|
|
33
|
-
'cancelOrders': undefined,
|
|
34
|
-
'createDepositAddress': undefined,
|
|
35
|
-
'createLimitOrder': true,
|
|
36
|
-
'createMarketOrder': true,
|
|
37
|
-
'createOrder': true,
|
|
38
|
-
'createStopLimitOrder': true,
|
|
39
|
-
'createStopMarketOrder': true,
|
|
40
|
-
'createStopOrder': true,
|
|
41
|
-
'editOrder': 'emulated',
|
|
42
|
-
'fetchAccounts': true,
|
|
43
|
-
'fetchBalance': true,
|
|
44
|
-
'fetchBidsAsks': undefined,
|
|
45
|
-
'fetchBorrowRateHistory': undefined,
|
|
46
|
-
'fetchCanceledOrders': undefined,
|
|
47
|
-
'fetchClosedOrder': undefined,
|
|
48
|
-
'fetchClosedOrders': undefined,
|
|
49
|
-
'fetchCrossBorrowRate': false,
|
|
50
|
-
'fetchCrossBorrowRates': false,
|
|
51
|
-
'fetchCurrencies': true,
|
|
52
|
-
'fetchDeposit': undefined,
|
|
53
|
-
'fetchDepositAddress': true,
|
|
54
|
-
'fetchDepositAddresses': false,
|
|
55
|
-
'fetchDepositAddressesByNetwork': false,
|
|
56
|
-
'fetchDeposits': true,
|
|
57
|
-
'fetchDepositsWithdrawals': true,
|
|
58
|
-
'fetchFundingHistory': false,
|
|
59
|
-
'fetchFundingRate': false,
|
|
60
|
-
'fetchFundingRateHistory': false,
|
|
61
|
-
'fetchFundingRates': false,
|
|
62
|
-
'fetchIndexOHLCV': false,
|
|
63
|
-
'fetchIsolatedBorrowRate': false,
|
|
64
|
-
'fetchIsolatedBorrowRates': false,
|
|
65
|
-
'fetchL2OrderBook': true,
|
|
66
|
-
'fetchLedger': true,
|
|
67
|
-
'fetchLedgerEntry': false,
|
|
68
|
-
'fetchLeverage': true,
|
|
69
|
-
'fetchLeverageTiers': false,
|
|
70
|
-
'fetchMarginMode': false,
|
|
71
|
-
'fetchMarkets': true,
|
|
72
|
-
'fetchMarkOHLCV': false,
|
|
73
|
-
'fetchMyTrades': true,
|
|
74
|
-
'fetchOHLCV': true,
|
|
75
|
-
'fetchOpenOrder': undefined,
|
|
76
|
-
'fetchOpenOrders': true,
|
|
77
|
-
'fetchOrder': true,
|
|
78
|
-
'fetchOrderBook': true,
|
|
79
|
-
'fetchOrderBooks': undefined,
|
|
80
|
-
'fetchOrders': undefined,
|
|
81
|
-
'fetchOrderTrades': undefined,
|
|
82
|
-
'fetchPosition': undefined,
|
|
83
|
-
'fetchPositionMode': false,
|
|
84
|
-
'fetchPositions': true,
|
|
85
|
-
'fetchPositionsRisk': undefined,
|
|
86
|
-
'fetchPremiumIndexOHLCV': false,
|
|
87
|
-
'fetchTicker': true,
|
|
88
|
-
'fetchTickers': true,
|
|
89
|
-
'fetchTime': true,
|
|
90
|
-
'fetchTrades': true,
|
|
91
|
-
'fetchTradingFee': false,
|
|
92
|
-
'fetchTradingFees': true,
|
|
93
|
-
'fetchTradingLimits': undefined,
|
|
94
|
-
'fetchTransactionFee': undefined,
|
|
95
|
-
'fetchTransactionFees': undefined,
|
|
96
|
-
'fetchTransactions': 'emulated',
|
|
97
|
-
'fetchTransfers': undefined,
|
|
98
|
-
'fetchWithdrawal': undefined,
|
|
99
|
-
'fetchWithdrawals': true,
|
|
100
|
-
'reduceMargin': undefined,
|
|
101
|
-
'sandbox': true,
|
|
102
|
-
'setLeverage': undefined,
|
|
103
|
-
'setMarginMode': undefined,
|
|
104
|
-
'setPositionMode': undefined,
|
|
105
|
-
'signIn': undefined,
|
|
106
|
-
'transfer': undefined,
|
|
107
|
-
'withdraw': undefined,
|
|
108
|
-
},
|
|
109
|
-
'timeframes': {
|
|
110
|
-
'1m': '1m',
|
|
111
|
-
'5m': '5m',
|
|
112
|
-
'10m': '10m',
|
|
113
|
-
'15m': '15m',
|
|
114
|
-
'30m': '30m',
|
|
115
|
-
'1h': '1h',
|
|
116
|
-
'4h': '4h',
|
|
117
|
-
'1d': '1d',
|
|
118
|
-
'1w': '1w',
|
|
119
|
-
},
|
|
120
|
-
'hostname': 'backend.currency.com',
|
|
121
|
-
'urls': {
|
|
122
|
-
'logo': 'https://user-images.githubusercontent.com/1294454/83718672-36745c00-a63e-11ea-81a9-677b1f789a4d.jpg',
|
|
123
|
-
'api': {
|
|
124
|
-
'public': 'https://api-adapter.{hostname}/api',
|
|
125
|
-
'private': 'https://api-adapter.{hostname}/api',
|
|
126
|
-
'marketcap': 'https://marketcap.{hostname}/api',
|
|
127
|
-
},
|
|
128
|
-
'test': {
|
|
129
|
-
'public': 'https://demo-api-adapter.{hostname}/api',
|
|
130
|
-
'private': 'https://demo-api-adapter.{hostname}/api',
|
|
131
|
-
},
|
|
132
|
-
'www': 'https://www.currency.com',
|
|
133
|
-
'referral': 'https://currency.com/trading/signup?c=362jaimv&pid=referral',
|
|
134
|
-
'doc': [
|
|
135
|
-
'https://currency.com/api',
|
|
136
|
-
],
|
|
137
|
-
'fees': 'https://currency.com/fees-charges',
|
|
138
|
-
},
|
|
139
|
-
// rate-limits are described at: https://currency.com/api-get-started
|
|
140
|
-
'api': {
|
|
141
|
-
'public': {
|
|
142
|
-
'get': {
|
|
143
|
-
'v1/time': 1,
|
|
144
|
-
'v1/exchangeInfo': 1,
|
|
145
|
-
'v1/depth': 1,
|
|
146
|
-
'v1/aggTrades': 1,
|
|
147
|
-
'v1/klines': 1,
|
|
148
|
-
'v1/ticker/24hr': 1,
|
|
149
|
-
'v2/time': 1,
|
|
150
|
-
'v2/exchangeInfo': 1,
|
|
151
|
-
'v2/depth': 1,
|
|
152
|
-
'v2/aggTrades': 1,
|
|
153
|
-
'v2/klines': 1,
|
|
154
|
-
'v2/ticker/24hr': 1,
|
|
155
|
-
},
|
|
156
|
-
},
|
|
157
|
-
'marketcap': {
|
|
158
|
-
'get': {
|
|
159
|
-
'v1/assets': 1,
|
|
160
|
-
'v1/candles': 1,
|
|
161
|
-
'v1/orderbook': 1,
|
|
162
|
-
'v1/summary': 1,
|
|
163
|
-
'v1/ticker': 1,
|
|
164
|
-
'v1/token/assets': 1,
|
|
165
|
-
'v1/token/orderbook': 1,
|
|
166
|
-
'v1/token/summary': 1,
|
|
167
|
-
'v1/token/ticker': 1,
|
|
168
|
-
'v1/token/trades': 1,
|
|
169
|
-
'v1/token_crypto/OHLC': 1,
|
|
170
|
-
'v1/token_crypto/assets': 1,
|
|
171
|
-
'v1/token_crypto/orderbook': 1,
|
|
172
|
-
'v1/token_crypto/summary': 1,
|
|
173
|
-
'v1/token_crypto/ticker': 1,
|
|
174
|
-
'v1/token_crypto/trades': 1,
|
|
175
|
-
'v1/trades': 1,
|
|
176
|
-
},
|
|
177
|
-
},
|
|
178
|
-
'private': {
|
|
179
|
-
'get': {
|
|
180
|
-
'v1/account': 1,
|
|
181
|
-
'v1/currencies': 1,
|
|
182
|
-
'v1/deposits': 1,
|
|
183
|
-
'v1/depositAddress': 1,
|
|
184
|
-
'v1/ledger': 1,
|
|
185
|
-
'v1/leverageSettings': 1,
|
|
186
|
-
'v1/myTrades': 1,
|
|
187
|
-
'v1/openOrders': 1,
|
|
188
|
-
'v1/tradingPositions': 1,
|
|
189
|
-
'v1/tradingPositionsHistory': 1,
|
|
190
|
-
'v1/transactions': 1,
|
|
191
|
-
'v1/withdrawals': 1,
|
|
192
|
-
'v2/account': 1,
|
|
193
|
-
'v2/currencies': 1,
|
|
194
|
-
'v2/deposits': 1,
|
|
195
|
-
'v2/depositAddress': 1,
|
|
196
|
-
'v2/ledger': 1,
|
|
197
|
-
'v2/leverageSettings': 1,
|
|
198
|
-
'v2/myTrades': 1,
|
|
199
|
-
'v2/openOrders': 1,
|
|
200
|
-
'v2/tradingPositions': 1,
|
|
201
|
-
'v2/tradingPositionsHistory': 1,
|
|
202
|
-
'v2/transactions': 1,
|
|
203
|
-
'v2/withdrawals': 1,
|
|
204
|
-
'v2/fetchOrder': 1,
|
|
205
|
-
},
|
|
206
|
-
'post': {
|
|
207
|
-
'v1/order': 1,
|
|
208
|
-
'v1/updateTradingPosition': 1,
|
|
209
|
-
'v1/updateTradingOrder': 1,
|
|
210
|
-
'v1/closeTradingPosition': 1,
|
|
211
|
-
'v2/order': 1,
|
|
212
|
-
'v2/updateTradingPosition': 1,
|
|
213
|
-
'v2/updateTradingOrder': 1,
|
|
214
|
-
'v2/closeTradingPosition': 1,
|
|
215
|
-
},
|
|
216
|
-
'delete': {
|
|
217
|
-
'v1/order': 1,
|
|
218
|
-
'v2/order': 1,
|
|
219
|
-
},
|
|
220
|
-
},
|
|
221
|
-
},
|
|
222
|
-
'fees': {
|
|
223
|
-
'trading': {
|
|
224
|
-
'feeSide': 'get',
|
|
225
|
-
'tierBased': false,
|
|
226
|
-
'percentage': true,
|
|
227
|
-
'taker': this.parseNumber('0.002'),
|
|
228
|
-
'maker': this.parseNumber('0.002'),
|
|
229
|
-
},
|
|
230
|
-
},
|
|
231
|
-
'precisionMode': TICK_SIZE,
|
|
232
|
-
// exchange-specific options
|
|
233
|
-
'options': {
|
|
234
|
-
'defaultTimeInForce': 'GTC',
|
|
235
|
-
'warnOnFetchOpenOrdersWithoutSymbol': true,
|
|
236
|
-
'recvWindow': 5 * 1000,
|
|
237
|
-
'timeDifference': 0,
|
|
238
|
-
'adjustForTimeDifference': false,
|
|
239
|
-
'parseOrderToPrecision': false,
|
|
240
|
-
'newOrderRespType': {
|
|
241
|
-
'market': 'FULL',
|
|
242
|
-
'limit': 'RESULT',
|
|
243
|
-
'stop': 'RESULT',
|
|
244
|
-
},
|
|
245
|
-
'leverage_markets_suffix': '_LEVERAGE',
|
|
246
|
-
'collateralCurrencies': ['USD', 'EUR', 'USDT'],
|
|
247
|
-
},
|
|
248
|
-
'features': {
|
|
249
|
-
'default': {
|
|
250
|
-
'sandbox': true,
|
|
251
|
-
'createOrder': {
|
|
252
|
-
'marginMode': true,
|
|
253
|
-
'triggerPrice': true,
|
|
254
|
-
'triggerPriceType': undefined,
|
|
255
|
-
'triggerDirection': false,
|
|
256
|
-
'stopLossPrice': false,
|
|
257
|
-
'takeProfitPrice': false,
|
|
258
|
-
'attachedStopLossTakeProfit': {
|
|
259
|
-
'triggerPriceType': undefined,
|
|
260
|
-
'price': false,
|
|
261
|
-
},
|
|
262
|
-
'timeInForce': {
|
|
263
|
-
'IOC': true,
|
|
264
|
-
'FOK': true,
|
|
265
|
-
'PO': false,
|
|
266
|
-
'GTD': true,
|
|
267
|
-
},
|
|
268
|
-
'hedged': false,
|
|
269
|
-
'selfTradePrevention': false,
|
|
270
|
-
'trailing': false,
|
|
271
|
-
'iceberg': false,
|
|
272
|
-
'leverage': true,
|
|
273
|
-
'marketBuyByCost': false,
|
|
274
|
-
'marketBuyRequiresPrice': false,
|
|
275
|
-
},
|
|
276
|
-
'createOrders': undefined,
|
|
277
|
-
'fetchMyTrades': {
|
|
278
|
-
'marginMode': false,
|
|
279
|
-
'limit': 500,
|
|
280
|
-
'daysBack': 100000,
|
|
281
|
-
'untilDays': 100000,
|
|
282
|
-
'symbolRequired': false,
|
|
283
|
-
},
|
|
284
|
-
'fetchOrder': {
|
|
285
|
-
'marginMode': false,
|
|
286
|
-
'trigger': false,
|
|
287
|
-
'trailing': false,
|
|
288
|
-
'symbolRequired': false,
|
|
289
|
-
},
|
|
290
|
-
'fetchOpenOrders': {
|
|
291
|
-
'marginMode': true,
|
|
292
|
-
'limit': 100,
|
|
293
|
-
'trigger': false,
|
|
294
|
-
'trailing': false,
|
|
295
|
-
'symbolRequired': false,
|
|
296
|
-
},
|
|
297
|
-
'fetchOrders': undefined,
|
|
298
|
-
'fetchClosedOrders': undefined,
|
|
299
|
-
'fetchOHLCV': {
|
|
300
|
-
'limit': 1000,
|
|
301
|
-
},
|
|
302
|
-
},
|
|
303
|
-
'spot': {
|
|
304
|
-
'extends': 'default',
|
|
305
|
-
},
|
|
306
|
-
'swap': {
|
|
307
|
-
'linear': {
|
|
308
|
-
'extends': 'default',
|
|
309
|
-
},
|
|
310
|
-
'inverse': {
|
|
311
|
-
'extends': 'default',
|
|
312
|
-
},
|
|
313
|
-
},
|
|
314
|
-
'future': {
|
|
315
|
-
'linear': {
|
|
316
|
-
'extends': 'default',
|
|
317
|
-
},
|
|
318
|
-
'inverse': {
|
|
319
|
-
'extends': 'default',
|
|
320
|
-
},
|
|
321
|
-
},
|
|
322
|
-
},
|
|
323
|
-
'exceptions': {
|
|
324
|
-
'broad': {
|
|
325
|
-
'FIELD_VALIDATION_ERROR Cancel is available only for LIMIT order': InvalidOrder,
|
|
326
|
-
'API key does not exist': AuthenticationError,
|
|
327
|
-
'Order would trigger immediately.': InvalidOrder,
|
|
328
|
-
'Account has insufficient balance for requested action.': InsufficientFunds,
|
|
329
|
-
'Rest API trading is not enabled.': ExchangeNotAvailable,
|
|
330
|
-
'Combination of parameters invalid': BadRequest,
|
|
331
|
-
'Invalid limit price': BadRequest,
|
|
332
|
-
'Only leverage symbol allowed here:': BadSymbol,
|
|
333
|
-
'market data service is not available': ExchangeNotAvailable,
|
|
334
|
-
'your time is ahead of server': InvalidNonce,
|
|
335
|
-
'Can not find account': BadRequest,
|
|
336
|
-
'You mentioned an invalid value for the price parameter': BadRequest, // -1030
|
|
337
|
-
},
|
|
338
|
-
'exact': {
|
|
339
|
-
'-1000': ExchangeNotAvailable,
|
|
340
|
-
'-1013': InvalidOrder,
|
|
341
|
-
// '-1021': InvalidNonce, // {"code":"-1021","msg":"your time is ahead of server"} // see above in the broad section
|
|
342
|
-
'-1022': AuthenticationError,
|
|
343
|
-
'-1030': InvalidOrder,
|
|
344
|
-
'-1100': InvalidOrder,
|
|
345
|
-
'-1104': ExchangeError,
|
|
346
|
-
'-1025': AuthenticationError,
|
|
347
|
-
'-1128': BadRequest,
|
|
348
|
-
'-2010': ExchangeError,
|
|
349
|
-
'-2011': OrderNotFound,
|
|
350
|
-
'-2013': OrderNotFound,
|
|
351
|
-
'-2014': AuthenticationError,
|
|
352
|
-
'-2015': AuthenticationError, // "Invalid API-key, IP, or permissions for action."
|
|
353
|
-
},
|
|
354
|
-
},
|
|
355
|
-
'commonCurrencies': {
|
|
356
|
-
'ACN': 'Accenture',
|
|
357
|
-
'AMC': 'AMC Entertainment Holdings',
|
|
358
|
-
'BNS': 'Bank of Nova Scotia',
|
|
359
|
-
'CAR': 'Avis Budget Group Inc',
|
|
360
|
-
'CLR': 'Continental Resources',
|
|
361
|
-
'EDU': 'New Oriental Education & Technology Group Inc',
|
|
362
|
-
'ETN': 'Eaton',
|
|
363
|
-
'FOX': 'Fox Corporation',
|
|
364
|
-
'GM': 'General Motors Co',
|
|
365
|
-
'IQ': 'iQIYI',
|
|
366
|
-
'OSK': 'Oshkosh',
|
|
367
|
-
'PLAY': "Dave & Buster's Entertainment",
|
|
368
|
-
},
|
|
369
|
-
});
|
|
370
|
-
}
|
|
371
|
-
nonce() {
|
|
372
|
-
return this.milliseconds() - this.options['timeDifference'];
|
|
373
|
-
}
|
|
374
|
-
/**
|
|
375
|
-
* @method
|
|
376
|
-
* @name currencycom#fetchTime
|
|
377
|
-
* @description fetches the current integer timestamp in milliseconds from the exchange server
|
|
378
|
-
* @see https://apitradedoc.currency.com/swagger-ui.html#/rest-api/timeUsingGET
|
|
379
|
-
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
380
|
-
* @returns {int} the current integer timestamp in milliseconds from the exchange server
|
|
381
|
-
*/
|
|
382
|
-
async fetchTime(params = {}) {
|
|
383
|
-
const response = await this.publicGetV2Time(params);
|
|
384
|
-
//
|
|
385
|
-
// {
|
|
386
|
-
// "serverTime": 1590998366609
|
|
387
|
-
// }
|
|
388
|
-
//
|
|
389
|
-
return this.safeInteger(response, 'serverTime');
|
|
390
|
-
}
|
|
391
|
-
/**
|
|
392
|
-
* @method
|
|
393
|
-
* @name currencycom#fetchCurrencies
|
|
394
|
-
* @description fetches all available currencies on an exchange
|
|
395
|
-
* @see https://apitradedoc.currency.com/swagger-ui.html#/rest-api/getCurrenciesUsingGET
|
|
396
|
-
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
397
|
-
* @returns {object} an associative dictionary of currencies
|
|
398
|
-
*/
|
|
399
|
-
async fetchCurrencies(params = {}) {
|
|
400
|
-
// requires authentication
|
|
401
|
-
if (!this.checkRequiredCredentials(false)) {
|
|
402
|
-
return undefined;
|
|
403
|
-
}
|
|
404
|
-
const response = await this.privateGetV2Currencies(params);
|
|
405
|
-
//
|
|
406
|
-
// [
|
|
407
|
-
// {
|
|
408
|
-
// "name": "Euro",
|
|
409
|
-
// "displaySymbol": "EUR.cx",
|
|
410
|
-
// "precision": "2",
|
|
411
|
-
// "type": "FIAT",
|
|
412
|
-
// "minWithdrawal": "90.0",
|
|
413
|
-
// "maxWithdrawal": "1.0E+8",
|
|
414
|
-
// "commissionMin": "0.02", // some instruments do not have this property
|
|
415
|
-
// "commissionPercent": "1.5", // some instruments do not have this property
|
|
416
|
-
// "minDeposit": "90.0",
|
|
417
|
-
// },
|
|
418
|
-
// {
|
|
419
|
-
// "name": "Bitcoin",
|
|
420
|
-
// "displaySymbol": "BTC",
|
|
421
|
-
// "precision": "8",
|
|
422
|
-
// "type": "CRYPTO", // only a few major currencies have this value, others like USDT have a value of "TOKEN"
|
|
423
|
-
// "minWithdrawal": "0.00020",
|
|
424
|
-
// "commissionFixed": "0.00010",
|
|
425
|
-
// "minDeposit": "0.00010",
|
|
426
|
-
// },
|
|
427
|
-
// ]
|
|
428
|
-
//
|
|
429
|
-
const result = {};
|
|
430
|
-
for (let i = 0; i < response.length; i++) {
|
|
431
|
-
const currency = response[i];
|
|
432
|
-
const id = this.safeString(currency, 'displaySymbol');
|
|
433
|
-
const code = this.safeCurrencyCode(id);
|
|
434
|
-
const fee = this.safeNumber(currency, 'commissionFixed');
|
|
435
|
-
result[code] = {
|
|
436
|
-
'id': id,
|
|
437
|
-
'code': code,
|
|
438
|
-
'type': this.safeStringLower(currency, 'type'),
|
|
439
|
-
'name': this.safeString(currency, 'name'),
|
|
440
|
-
'active': undefined,
|
|
441
|
-
'deposit': undefined,
|
|
442
|
-
'withdraw': undefined,
|
|
443
|
-
'fee': fee,
|
|
444
|
-
'precision': this.parseNumber(this.parsePrecision(this.safeString(currency, 'precision'))),
|
|
445
|
-
'limits': {
|
|
446
|
-
'amount': {
|
|
447
|
-
'min': undefined,
|
|
448
|
-
'max': undefined,
|
|
449
|
-
},
|
|
450
|
-
'withdraw': {
|
|
451
|
-
'min': this.safeNumber(currency, 'minWithdrawal'),
|
|
452
|
-
'max': this.safeNumber(currency, 'maxWithdrawal'),
|
|
453
|
-
},
|
|
454
|
-
'deposit': {
|
|
455
|
-
'min': this.safeNumber(currency, 'minDeposit'),
|
|
456
|
-
'max': undefined,
|
|
457
|
-
},
|
|
458
|
-
},
|
|
459
|
-
'info': currency,
|
|
460
|
-
};
|
|
461
|
-
}
|
|
462
|
-
return result;
|
|
463
|
-
}
|
|
464
|
-
/**
|
|
465
|
-
* @method
|
|
466
|
-
* @name currencycom#fetchMarkets
|
|
467
|
-
* @description retrieves data on all markets for currencycom
|
|
468
|
-
* @see https://apitradedoc.currency.com/swagger-ui.html#/rest-api/exchangeInfoUsingGET
|
|
469
|
-
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
470
|
-
* @returns {object[]} an array of objects representing market data
|
|
471
|
-
*/
|
|
472
|
-
async fetchMarkets(params = {}) {
|
|
473
|
-
const response = await this.publicGetV2ExchangeInfo(params);
|
|
474
|
-
//
|
|
475
|
-
// {
|
|
476
|
-
// "timezone": "UTC",
|
|
477
|
-
// "serverTime": "1645186287261",
|
|
478
|
-
// "rateLimits": [
|
|
479
|
-
// { rateLimitType: "REQUEST_WEIGHT", interval: "MINUTE", intervalNum: "1", limit: "1200" },
|
|
480
|
-
// { rateLimitType: "ORDERS", interval: "SECOND", intervalNum: "1", limit: "10" },
|
|
481
|
-
// { rateLimitType: "ORDERS", interval: "DAY", intervalNum: "1", limit: "864000" },
|
|
482
|
-
// ],
|
|
483
|
-
// "exchangeFilters": [],
|
|
484
|
-
// "symbols": [
|
|
485
|
-
// {
|
|
486
|
-
// "symbol": "BTC/USDT", // BTC/USDT, BTC/USDT_LEVERAGE
|
|
487
|
-
// "name": "Bitcoin / Tether",
|
|
488
|
-
// "status": "TRADING", // TRADING, BREAK, HALT
|
|
489
|
-
// "baseAsset": "BTC",
|
|
490
|
-
// "baseAssetPrecision": "4",
|
|
491
|
-
// "quoteAsset": "USDT",
|
|
492
|
-
// "quoteAssetId": "USDT", // USDT, USDT_LEVERAGE
|
|
493
|
-
// "quotePrecision": "4",
|
|
494
|
-
// "orderTypes": [ "LIMIT", "MARKET" ], // LIMIT, MARKET, STOP
|
|
495
|
-
// "filters": [
|
|
496
|
-
// { filterType: "LOT_SIZE", minQty: "0.0001", maxQty: "100", stepSize: "0.0001", },
|
|
497
|
-
// { filterType: "MIN_NOTIONAL", minNotional: "5", },
|
|
498
|
-
// ],
|
|
499
|
-
// "marketModes": [ "REGULAR" ], // CLOSE_ONLY, LONG_ONLY, REGULAR
|
|
500
|
-
// "marketType": "SPOT", // SPOT, LEVERAGE
|
|
501
|
-
// "longRate": -0.0684932, // LEVERAGE only
|
|
502
|
-
// "shortRate": -0.0684932, // LEVERAGE only
|
|
503
|
-
// "swapChargeInterval": 1440, // LEVERAGE only
|
|
504
|
-
// "country": "",
|
|
505
|
-
// "sector": "",
|
|
506
|
-
// "industry": "",
|
|
507
|
-
// "tradingHours": "UTC; Mon - 22:00, 22:05 -; Tue - 22:00, 22:05 -; Wed - 22:00, 22:05 -; Thu - 22:00, 22:05 -; Fri - 22:00, 23:01 -; Sat - 22:00, 22:05 -; Sun - 21:00, 22:05 -",
|
|
508
|
-
// "tickSize": "0.01",
|
|
509
|
-
// "tickValue": "403.4405", // not available in BTC/USDT_LEVERAGE, but available in BTC/USD_LEVERAGE
|
|
510
|
-
// "exchangeFee": "0.2", // SPOT only
|
|
511
|
-
// "tradingFee": 0.075, // LEVERAGE only
|
|
512
|
-
// "makerFee": -0.025, // LEVERAGE only
|
|
513
|
-
// "takerFee": 0.06, // LEVERAGE only
|
|
514
|
-
// "maxSLGap": 50, // LEVERAGE only
|
|
515
|
-
// "minSLGap": 1, // LEVERAGE only
|
|
516
|
-
// "maxTPGap": 50, // LEVERAGE only
|
|
517
|
-
// "minTPGap": 0.5, // LEVERAGE only
|
|
518
|
-
// "assetType": "CRYPTOCURRENCY",
|
|
519
|
-
// },
|
|
520
|
-
// ]
|
|
521
|
-
// }
|
|
522
|
-
//
|
|
523
|
-
if (this.options['adjustForTimeDifference']) {
|
|
524
|
-
await this.loadTimeDifference();
|
|
525
|
-
}
|
|
526
|
-
const markets = this.safeValue(response, 'symbols', []);
|
|
527
|
-
const result = [];
|
|
528
|
-
for (let i = 0; i < markets.length; i++) {
|
|
529
|
-
const market = markets[i];
|
|
530
|
-
const id = this.safeString(market, 'symbol');
|
|
531
|
-
const baseId = this.safeString(market, 'baseAsset');
|
|
532
|
-
const quoteId = this.safeString(market, 'quoteAsset');
|
|
533
|
-
const base = this.safeCurrencyCode(baseId);
|
|
534
|
-
const quote = this.safeCurrencyCode(quoteId);
|
|
535
|
-
let symbol = base + '/' + quote;
|
|
536
|
-
const typeRaw = this.safeString(market, 'marketType');
|
|
537
|
-
const spot = (typeRaw === 'SPOT');
|
|
538
|
-
const futures = false;
|
|
539
|
-
const swap = (typeRaw === 'LEVERAGE');
|
|
540
|
-
const type = swap ? 'swap' : 'spot';
|
|
541
|
-
const margin = undefined;
|
|
542
|
-
if (swap) {
|
|
543
|
-
symbol = symbol.replace(this.options['leverage_markets_suffix'], '');
|
|
544
|
-
symbol += ':' + quote;
|
|
545
|
-
}
|
|
546
|
-
const active = this.safeString(market, 'status') === 'TRADING';
|
|
547
|
-
// to set taker & maker fees, we use one from the below data - pairs either have 'exchangeFee' or 'tradingFee', if none of them (rare cases), then they should have 'takerFee & makerFee'
|
|
548
|
-
const exchangeFee = this.safeString2(market, 'exchangeFee', 'tradingFee');
|
|
549
|
-
let makerFee = this.safeString(market, 'makerFee', exchangeFee);
|
|
550
|
-
let takerFee = this.safeString(market, 'takerFee', exchangeFee);
|
|
551
|
-
makerFee = Precise.stringDiv(makerFee, '100');
|
|
552
|
-
takerFee = Precise.stringDiv(takerFee, '100');
|
|
553
|
-
const filters = this.safeValue(market, 'filters', []);
|
|
554
|
-
const filtersByType = this.indexBy(filters, 'filterType');
|
|
555
|
-
let limitPriceMin = undefined;
|
|
556
|
-
let limitPriceMax = undefined;
|
|
557
|
-
let precisionPrice = this.safeNumber(market, 'tickSize');
|
|
558
|
-
if ('PRICE_FILTER' in filtersByType) {
|
|
559
|
-
const filter = this.safeValue(filtersByType, 'PRICE_FILTER', {});
|
|
560
|
-
precisionPrice = this.safeNumber(filter, 'tickSize');
|
|
561
|
-
// PRICE_FILTER reports zero values for maxPrice
|
|
562
|
-
// since they updated filter types in November 2018
|
|
563
|
-
// https://github.com/ccxt/ccxt/issues/4286
|
|
564
|
-
// therefore limits['price']['max'] doesn't have any meaningful value except undefined
|
|
565
|
-
limitPriceMin = this.safeNumber(filter, 'minPrice');
|
|
566
|
-
const maxPrice = this.safeString(filter, 'maxPrice');
|
|
567
|
-
if ((maxPrice !== undefined) && (Precise.stringGt(maxPrice, '0'))) {
|
|
568
|
-
limitPriceMax = maxPrice;
|
|
569
|
-
}
|
|
570
|
-
}
|
|
571
|
-
let precisionAmount = this.parseNumber(this.parsePrecision(this.safeString(market, 'baseAssetPrecision')));
|
|
572
|
-
let limitAmount = {
|
|
573
|
-
'min': undefined,
|
|
574
|
-
'max': undefined,
|
|
575
|
-
};
|
|
576
|
-
if ('LOT_SIZE' in filtersByType) {
|
|
577
|
-
const filter = this.safeValue(filtersByType, 'LOT_SIZE', {});
|
|
578
|
-
precisionAmount = this.safeNumber(filter, 'stepSize');
|
|
579
|
-
limitAmount = {
|
|
580
|
-
'min': this.safeNumber(filter, 'minQty'),
|
|
581
|
-
'max': this.safeNumber(filter, 'maxQty'),
|
|
582
|
-
};
|
|
583
|
-
}
|
|
584
|
-
let limitMarket = {
|
|
585
|
-
'min': undefined,
|
|
586
|
-
'max': undefined,
|
|
587
|
-
};
|
|
588
|
-
if ('MARKET_LOT_SIZE' in filtersByType) {
|
|
589
|
-
const filter = this.safeValue(filtersByType, 'MARKET_LOT_SIZE', {});
|
|
590
|
-
limitMarket = {
|
|
591
|
-
'min': this.safeNumber(filter, 'minQty'),
|
|
592
|
-
'max': this.safeNumber(filter, 'maxQty'),
|
|
593
|
-
};
|
|
594
|
-
}
|
|
595
|
-
let costMin = undefined;
|
|
596
|
-
if ('MIN_NOTIONAL' in filtersByType) {
|
|
597
|
-
const filter = this.safeValue(filtersByType, 'MIN_NOTIONAL', {});
|
|
598
|
-
costMin = this.safeNumber(filter, 'minNotional');
|
|
599
|
-
}
|
|
600
|
-
const isContract = swap || futures;
|
|
601
|
-
result.push({
|
|
602
|
-
'id': id,
|
|
603
|
-
'symbol': symbol,
|
|
604
|
-
'base': base,
|
|
605
|
-
'quote': quote,
|
|
606
|
-
'settle': undefined,
|
|
607
|
-
'baseId': baseId,
|
|
608
|
-
'quoteId': quoteId,
|
|
609
|
-
'settleId': undefined,
|
|
610
|
-
'type': type,
|
|
611
|
-
'spot': spot,
|
|
612
|
-
'margin': margin,
|
|
613
|
-
'swap': swap,
|
|
614
|
-
'future': futures,
|
|
615
|
-
'option': false,
|
|
616
|
-
'active': active,
|
|
617
|
-
'contract': isContract,
|
|
618
|
-
'linear': isContract ? true : undefined,
|
|
619
|
-
'inverse': undefined,
|
|
620
|
-
'taker': this.parseNumber(takerFee),
|
|
621
|
-
'maker': this.parseNumber(makerFee),
|
|
622
|
-
'contractSize': undefined,
|
|
623
|
-
'expiry': undefined,
|
|
624
|
-
'expiryDatetime': undefined,
|
|
625
|
-
'strike': undefined,
|
|
626
|
-
'optionType': undefined,
|
|
627
|
-
'precision': {
|
|
628
|
-
'amount': precisionAmount,
|
|
629
|
-
'price': precisionPrice,
|
|
630
|
-
},
|
|
631
|
-
'limits': {
|
|
632
|
-
'leverage': {
|
|
633
|
-
'min': undefined,
|
|
634
|
-
'max': undefined,
|
|
635
|
-
},
|
|
636
|
-
'amount': limitAmount,
|
|
637
|
-
'market': limitMarket,
|
|
638
|
-
'price': {
|
|
639
|
-
'min': limitPriceMin,
|
|
640
|
-
'max': this.parseNumber(limitPriceMax),
|
|
641
|
-
},
|
|
642
|
-
'cost': {
|
|
643
|
-
'min': costMin,
|
|
644
|
-
'max': undefined,
|
|
645
|
-
},
|
|
646
|
-
},
|
|
647
|
-
'created': undefined,
|
|
648
|
-
'info': market,
|
|
649
|
-
});
|
|
650
|
-
}
|
|
651
|
-
return result;
|
|
652
|
-
}
|
|
653
|
-
/**
|
|
654
|
-
* @method
|
|
655
|
-
* @name currencycom#fetchAccounts
|
|
656
|
-
* @description fetch all the accounts associated with a profile
|
|
657
|
-
* @see https://apitradedoc.currency.com/swagger-ui.html#/rest-api/accountUsingGET
|
|
658
|
-
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
659
|
-
* @returns {object} a dictionary of [account structures]{@link https://docs.ccxt.com/#/?id=account-structure} indexed by the account type
|
|
660
|
-
*/
|
|
661
|
-
async fetchAccounts(params = {}) {
|
|
662
|
-
const response = await this.privateGetV2Account(params);
|
|
663
|
-
//
|
|
664
|
-
// {
|
|
665
|
-
// "makerCommission": "0.20",
|
|
666
|
-
// "takerCommission": "0.20",
|
|
667
|
-
// "buyerCommission": "0.20",
|
|
668
|
-
// "sellerCommission": "0.20",
|
|
669
|
-
// "canTrade": true,
|
|
670
|
-
// "canWithdraw": true,
|
|
671
|
-
// "canDeposit": true,
|
|
672
|
-
// "updateTime": "1645266330",
|
|
673
|
-
// "userId": "644722",
|
|
674
|
-
// "balances": [
|
|
675
|
-
// {
|
|
676
|
-
// "accountId": "120702016179403605",
|
|
677
|
-
// "collateralCurrency": false,
|
|
678
|
-
// "asset": "CAKE",
|
|
679
|
-
// "free": "3.1",
|
|
680
|
-
// "locked": "0.0",
|
|
681
|
-
// "default": false,
|
|
682
|
-
// },
|
|
683
|
-
// {
|
|
684
|
-
// "accountId": "109698017713125316",
|
|
685
|
-
// "collateralCurrency": true,
|
|
686
|
-
// "asset": "USD",
|
|
687
|
-
// "free": "17.58632",
|
|
688
|
-
// "locked": "0.0",
|
|
689
|
-
// "default": true,
|
|
690
|
-
// }
|
|
691
|
-
// ]
|
|
692
|
-
// }
|
|
693
|
-
//
|
|
694
|
-
const accounts = this.safeValue(response, 'balances', []);
|
|
695
|
-
const result = [];
|
|
696
|
-
for (let i = 0; i < accounts.length; i++) {
|
|
697
|
-
const account = accounts[i];
|
|
698
|
-
const accountId = this.safeString(account, 'accountId'); // must be string, because the numeric value is far too big for integer, and causes bugs
|
|
699
|
-
const currencyId = this.safeString(account, 'asset');
|
|
700
|
-
const currencyCode = this.safeCurrencyCode(currencyId);
|
|
701
|
-
result.push({
|
|
702
|
-
'id': accountId,
|
|
703
|
-
'type': undefined,
|
|
704
|
-
'currency': currencyCode,
|
|
705
|
-
'info': account,
|
|
706
|
-
});
|
|
707
|
-
}
|
|
708
|
-
return result;
|
|
709
|
-
}
|
|
710
|
-
/**
|
|
711
|
-
* @method
|
|
712
|
-
* @name currencycom#fetchTradingFees
|
|
713
|
-
* @description fetch the trading fees for multiple markets
|
|
714
|
-
* @see https://apitradedoc.currency.com/swagger-ui.html#/rest-api/accountUsingGET
|
|
715
|
-
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
716
|
-
* @returns {object} a dictionary of [fee structures]{@link https://docs.ccxt.com/#/?id=fee-structure} indexed by market symbols
|
|
717
|
-
*/
|
|
718
|
-
async fetchTradingFees(params = {}) {
|
|
719
|
-
await this.loadMarkets();
|
|
720
|
-
const response = await this.privateGetV2Account(params);
|
|
721
|
-
//
|
|
722
|
-
// {
|
|
723
|
-
// "makerCommission": "0.20",
|
|
724
|
-
// "takerCommission": "0.20",
|
|
725
|
-
// "buyerCommission": "0.20",
|
|
726
|
-
// "sellerCommission": "0.20",
|
|
727
|
-
// "canTrade": true,
|
|
728
|
-
// "canWithdraw": true,
|
|
729
|
-
// "canDeposit": true,
|
|
730
|
-
// "updateTime": "1645738976",
|
|
731
|
-
// "userId": "-1924114235",
|
|
732
|
-
// "balances": []
|
|
733
|
-
// }
|
|
734
|
-
//
|
|
735
|
-
const makerFee = this.safeNumber(response, 'makerCommission');
|
|
736
|
-
const takerFee = this.safeNumber(response, 'takerCommission');
|
|
737
|
-
const result = {};
|
|
738
|
-
for (let i = 0; i < this.symbols.length; i++) {
|
|
739
|
-
const symbol = this.symbols[i];
|
|
740
|
-
result[symbol] = {
|
|
741
|
-
'info': response,
|
|
742
|
-
'symbol': symbol,
|
|
743
|
-
'maker': makerFee,
|
|
744
|
-
'taker': takerFee,
|
|
745
|
-
'percentage': true,
|
|
746
|
-
'tierBased': false,
|
|
747
|
-
};
|
|
748
|
-
}
|
|
749
|
-
return result;
|
|
750
|
-
}
|
|
751
|
-
parseBalance(response, type = undefined) {
|
|
752
|
-
//
|
|
753
|
-
// {
|
|
754
|
-
// "makerCommission":0.20,
|
|
755
|
-
// "takerCommission":0.20,
|
|
756
|
-
// "buyerCommission":0.20,
|
|
757
|
-
// "sellerCommission":0.20,
|
|
758
|
-
// "canTrade":true,
|
|
759
|
-
// "canWithdraw":true,
|
|
760
|
-
// "canDeposit":true,
|
|
761
|
-
// "updateTime":1591056268,
|
|
762
|
-
// "balances":[
|
|
763
|
-
// {
|
|
764
|
-
// "accountId":5470306579272368,
|
|
765
|
-
// "collateralCurrency":true,
|
|
766
|
-
// "asset":"ETH",
|
|
767
|
-
// "free":0.0,
|
|
768
|
-
// "locked":0.0,
|
|
769
|
-
// "default":false,
|
|
770
|
-
// },
|
|
771
|
-
// ]
|
|
772
|
-
// }
|
|
773
|
-
//
|
|
774
|
-
const result = { 'info': response };
|
|
775
|
-
const balances = this.safeValue(response, 'balances', []);
|
|
776
|
-
for (let i = 0; i < balances.length; i++) {
|
|
777
|
-
const balance = balances[i];
|
|
778
|
-
const currencyId = this.safeString(balance, 'asset');
|
|
779
|
-
const code = this.safeCurrencyCode(currencyId);
|
|
780
|
-
const account = this.account();
|
|
781
|
-
account['free'] = this.safeString(balance, 'free');
|
|
782
|
-
account['used'] = this.safeString(balance, 'locked');
|
|
783
|
-
result[code] = account;
|
|
784
|
-
}
|
|
785
|
-
return this.safeBalance(result);
|
|
786
|
-
}
|
|
787
|
-
/**
|
|
788
|
-
* @method
|
|
789
|
-
* @name currencycom#fetchBalance
|
|
790
|
-
* @description query for balance and get the amount of funds available for trading or funds locked in orders
|
|
791
|
-
* @see https://apitradedoc.currency.com/swagger-ui.html#/rest-api/accountUsingGET
|
|
792
|
-
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
793
|
-
* @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}
|
|
794
|
-
*/
|
|
795
|
-
async fetchBalance(params = {}) {
|
|
796
|
-
await this.loadMarkets();
|
|
797
|
-
const response = await this.privateGetV2Account(params);
|
|
798
|
-
//
|
|
799
|
-
// {
|
|
800
|
-
// "makerCommission": "0.20",
|
|
801
|
-
// "takerCommission": "0.20",
|
|
802
|
-
// "buyerCommission": "0.20",
|
|
803
|
-
// "sellerCommission": "0.20",
|
|
804
|
-
// "canTrade": true,
|
|
805
|
-
// "canWithdraw": true,
|
|
806
|
-
// "canDeposit": true,
|
|
807
|
-
// "updateTime": "1645266330",
|
|
808
|
-
// "userId": "644722",
|
|
809
|
-
// "balances": [
|
|
810
|
-
// {
|
|
811
|
-
// "accountId": "120702016179403605",
|
|
812
|
-
// "collateralCurrency": false,
|
|
813
|
-
// "asset": "CAKE",
|
|
814
|
-
// "free": "1.784",
|
|
815
|
-
// "locked": "0.0",
|
|
816
|
-
// "default": false,
|
|
817
|
-
// },
|
|
818
|
-
// {
|
|
819
|
-
// "accountId": "109698017413175316",
|
|
820
|
-
// "collateralCurrency": true,
|
|
821
|
-
// "asset": "USD",
|
|
822
|
-
// "free": "7.58632",
|
|
823
|
-
// "locked": "0.0",
|
|
824
|
-
// "default": true,
|
|
825
|
-
// }
|
|
826
|
-
// ]
|
|
827
|
-
// }
|
|
828
|
-
//
|
|
829
|
-
return this.parseBalance(response);
|
|
830
|
-
}
|
|
831
|
-
/**
|
|
832
|
-
* @method
|
|
833
|
-
* @name currencycom#fetchOrderBook
|
|
834
|
-
* @description fetches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
|
|
835
|
-
* @see https://apitradedoc.currency.com/swagger-ui.html#/rest-api/depthUsingGET
|
|
836
|
-
* @param {string} symbol unified symbol of the market to fetch the order book for
|
|
837
|
-
* @param {int} [limit] the maximum amount of order book entries to return
|
|
838
|
-
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
839
|
-
* @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
|
|
840
|
-
*/
|
|
841
|
-
async fetchOrderBook(symbol, limit = undefined, params = {}) {
|
|
842
|
-
await this.loadMarkets();
|
|
843
|
-
const market = this.market(symbol);
|
|
844
|
-
const request = {
|
|
845
|
-
'symbol': market['id'],
|
|
846
|
-
};
|
|
847
|
-
if (limit !== undefined) {
|
|
848
|
-
request['limit'] = limit; // default 100, max 1000, valid limits 5, 10, 20, 50, 100, 500, 1000, 5000
|
|
849
|
-
}
|
|
850
|
-
const response = await this.publicGetV2Depth(this.extend(request, params));
|
|
851
|
-
//
|
|
852
|
-
// {
|
|
853
|
-
// "lastUpdateId":1590999849037,
|
|
854
|
-
// "asks":[
|
|
855
|
-
// [0.02495,60.0345],
|
|
856
|
-
// [0.02496,34.1],
|
|
857
|
-
// ...
|
|
858
|
-
// ],
|
|
859
|
-
// "bids":[
|
|
860
|
-
// [0.02487,72.4144854],
|
|
861
|
-
// [0.02486,24.043],
|
|
862
|
-
// ...
|
|
863
|
-
// ]
|
|
864
|
-
// }
|
|
865
|
-
//
|
|
866
|
-
const orderbook = this.parseOrderBook(response, symbol);
|
|
867
|
-
orderbook['nonce'] = this.safeInteger(response, 'lastUpdateId');
|
|
868
|
-
return orderbook;
|
|
869
|
-
}
|
|
870
|
-
parseTicker(ticker, market = undefined) {
|
|
871
|
-
//
|
|
872
|
-
// fetchTicker
|
|
873
|
-
//
|
|
874
|
-
// {
|
|
875
|
-
// "symbol":"ETH/BTC",
|
|
876
|
-
// "priceChange":"0.00030",
|
|
877
|
-
// "priceChangePercent":"1.21",
|
|
878
|
-
// "weightedAvgPrice":"0.02481",
|
|
879
|
-
// "prevClosePrice":"0.02447",
|
|
880
|
-
// "lastPrice":"0.02477",
|
|
881
|
-
// "lastQty":"60.0",
|
|
882
|
-
// "bidPrice":"0.02477",
|
|
883
|
-
// "askPrice":"0.02484",
|
|
884
|
-
// "openPrice":"0.02447",
|
|
885
|
-
// "highPrice":"0.02524",
|
|
886
|
-
// "lowPrice":"0.02438",
|
|
887
|
-
// "volume":"11.97",
|
|
888
|
-
// "quoteVolume":"0.298053",
|
|
889
|
-
// "openTime":1590969600000,
|
|
890
|
-
// "closeTime":1591000072693
|
|
891
|
-
// }
|
|
892
|
-
//
|
|
893
|
-
// fetchTickers
|
|
894
|
-
//
|
|
895
|
-
// {
|
|
896
|
-
// "symbol": "SHIB/USD_LEVERAGE",
|
|
897
|
-
// "weightedAvgPrice": "0.000027595",
|
|
898
|
-
// "lastPrice": "0.00002737",
|
|
899
|
-
// "lastQty": "1.11111111E8",
|
|
900
|
-
// "bidPrice": "0.00002737",
|
|
901
|
-
// "askPrice": "0.00002782",
|
|
902
|
-
// "highPrice": "0.00002896",
|
|
903
|
-
// "lowPrice": "0.00002738",
|
|
904
|
-
// "volume": "16472160000",
|
|
905
|
-
// "quoteVolume": "454796.3376",
|
|
906
|
-
// "openTime": "1645187472000",
|
|
907
|
-
// "closeTime": "1645273872000",
|
|
908
|
-
// }
|
|
909
|
-
//
|
|
910
|
-
// ws:marketData.subscribe
|
|
911
|
-
//
|
|
912
|
-
// {
|
|
913
|
-
// "symbolName":"TXN",
|
|
914
|
-
// "bid":139.85,
|
|
915
|
-
// "bidQty":2500,
|
|
916
|
-
// "ofr":139.92000000000002,
|
|
917
|
-
// "ofrQty":2500,
|
|
918
|
-
// "timestamp":1597850971558
|
|
919
|
-
// }
|
|
920
|
-
//
|
|
921
|
-
const timestamp = this.safeInteger2(ticker, 'closeTime', 'timestamp');
|
|
922
|
-
const marketId = this.safeString2(ticker, 'symbol', 'symbolName');
|
|
923
|
-
market = this.safeMarket(marketId, market, '/');
|
|
924
|
-
const last = this.safeString(ticker, 'lastPrice');
|
|
925
|
-
return this.safeTicker({
|
|
926
|
-
'symbol': market['symbol'],
|
|
927
|
-
'timestamp': timestamp,
|
|
928
|
-
'datetime': this.iso8601(timestamp),
|
|
929
|
-
'high': this.safeString(ticker, 'highPrice'),
|
|
930
|
-
'low': this.safeString(ticker, 'lowPrice'),
|
|
931
|
-
'bid': this.safeString2(ticker, 'bidPrice', 'bid'),
|
|
932
|
-
'bidVolume': this.safeString(ticker, 'bidQty'),
|
|
933
|
-
'ask': this.safeString2(ticker, 'askPrice', 'ofr'),
|
|
934
|
-
'askVolume': this.safeString(ticker, 'ofrQty'),
|
|
935
|
-
'vwap': this.safeString(ticker, 'weightedAvgPrice'),
|
|
936
|
-
'open': this.safeString(ticker, 'openPrice'),
|
|
937
|
-
'close': last,
|
|
938
|
-
'last': last,
|
|
939
|
-
'previousClose': this.safeString(ticker, 'prevClosePrice'),
|
|
940
|
-
'change': this.safeString(ticker, 'priceChange'),
|
|
941
|
-
'percentage': this.safeString(ticker, 'priceChangePercent'),
|
|
942
|
-
'average': undefined,
|
|
943
|
-
'baseVolume': this.safeString(ticker, 'volume'),
|
|
944
|
-
'quoteVolume': this.safeString(ticker, 'quoteVolume'),
|
|
945
|
-
'info': ticker,
|
|
946
|
-
}, market);
|
|
947
|
-
}
|
|
948
|
-
/**
|
|
949
|
-
* @method
|
|
950
|
-
* @name currencycom#fetchTicker
|
|
951
|
-
* @description fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
|
952
|
-
* @see https://apitradedoc.currency.com/swagger-ui.html#/rest-api/ticker_24hrUsingGET
|
|
953
|
-
* @param {string} symbol unified symbol of the market to fetch the ticker for
|
|
954
|
-
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
955
|
-
* @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
|
|
956
|
-
*/
|
|
957
|
-
async fetchTicker(symbol, params = {}) {
|
|
958
|
-
await this.loadMarkets();
|
|
959
|
-
const market = this.market(symbol);
|
|
960
|
-
const request = {
|
|
961
|
-
'symbol': market['id'],
|
|
962
|
-
};
|
|
963
|
-
const response = await this.publicGetV2Ticker24hr(this.extend(request, params));
|
|
964
|
-
//
|
|
965
|
-
// {
|
|
966
|
-
// "symbol":"ETH/BTC",
|
|
967
|
-
// "priceChange":"0.00030",
|
|
968
|
-
// "priceChangePercent":"1.21",
|
|
969
|
-
// "weightedAvgPrice":"0.02481",
|
|
970
|
-
// "prevClosePrice":"0.02447",
|
|
971
|
-
// "lastPrice":"0.02477",
|
|
972
|
-
// "lastQty":"60.0",
|
|
973
|
-
// "bidPrice":"0.02477",
|
|
974
|
-
// "askPrice":"0.02484",
|
|
975
|
-
// "openPrice":"0.02447",
|
|
976
|
-
// "highPrice":"0.02524",
|
|
977
|
-
// "lowPrice":"0.02438",
|
|
978
|
-
// "volume":"11.97",
|
|
979
|
-
// "quoteVolume":"0.298053",
|
|
980
|
-
// "openTime":1590969600000,
|
|
981
|
-
// "closeTime":1591000072693
|
|
982
|
-
// }
|
|
983
|
-
//
|
|
984
|
-
return this.parseTicker(response, market);
|
|
985
|
-
}
|
|
986
|
-
/**
|
|
987
|
-
* @method
|
|
988
|
-
* @name currencycom#fetchTickers
|
|
989
|
-
* @description fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
|
|
990
|
-
* @see https://apitradedoc.currency.com/swagger-ui.html#/rest-api/ticker_24hrUsingGET
|
|
991
|
-
* @param {string[]|undefined} symbols unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
|
|
992
|
-
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
993
|
-
* @returns {object} a dictionary of [ticker structures]{@link https://docs.ccxt.com/#/?id=ticker-structure}
|
|
994
|
-
*/
|
|
995
|
-
async fetchTickers(symbols = undefined, params = {}) {
|
|
996
|
-
await this.loadMarkets();
|
|
997
|
-
const response = await this.publicGetV2Ticker24hr(params);
|
|
998
|
-
//
|
|
999
|
-
// [
|
|
1000
|
-
// {
|
|
1001
|
-
// "symbol": "SHIB/USD_LEVERAGE",
|
|
1002
|
-
// "weightedAvgPrice": "0.000027595",
|
|
1003
|
-
// "lastPrice": "0.00002737",
|
|
1004
|
-
// "lastQty": "1.11111111E8",
|
|
1005
|
-
// "bidPrice": "0.00002737",
|
|
1006
|
-
// "askPrice": "0.00002782",
|
|
1007
|
-
// "highPrice": "0.00002896",
|
|
1008
|
-
// "lowPrice": "0.00002738",
|
|
1009
|
-
// "volume": "16472160000",
|
|
1010
|
-
// "quoteVolume": "454796.3376",
|
|
1011
|
-
// "openTime": "1645187472000",
|
|
1012
|
-
// "closeTime": "1645273872000",
|
|
1013
|
-
// }
|
|
1014
|
-
// ]
|
|
1015
|
-
//
|
|
1016
|
-
return this.parseTickers(response, symbols);
|
|
1017
|
-
}
|
|
1018
|
-
parseOHLCV(ohlcv, market = undefined) {
|
|
1019
|
-
//
|
|
1020
|
-
// [
|
|
1021
|
-
// 1590971040000,
|
|
1022
|
-
// "0.02454",
|
|
1023
|
-
// "0.02456",
|
|
1024
|
-
// "0.02452",
|
|
1025
|
-
// "0.02456",
|
|
1026
|
-
// 249
|
|
1027
|
-
// ]
|
|
1028
|
-
//
|
|
1029
|
-
return [
|
|
1030
|
-
this.safeInteger(ohlcv, 0),
|
|
1031
|
-
this.safeNumber(ohlcv, 1),
|
|
1032
|
-
this.safeNumber(ohlcv, 2),
|
|
1033
|
-
this.safeNumber(ohlcv, 3),
|
|
1034
|
-
this.safeNumber(ohlcv, 4),
|
|
1035
|
-
this.safeNumber(ohlcv, 5),
|
|
1036
|
-
];
|
|
1037
|
-
}
|
|
1038
|
-
/**
|
|
1039
|
-
* @method
|
|
1040
|
-
* @name currencycom#fetchOHLCV
|
|
1041
|
-
* @description fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
|
|
1042
|
-
* @see https://apitradedoc.currency.com/swagger-ui.html#/rest-api/klinesUsingGET
|
|
1043
|
-
* @param {string} symbol unified symbol of the market to fetch OHLCV data for
|
|
1044
|
-
* @param {string} timeframe the length of time each candle represents
|
|
1045
|
-
* @param {int} [since] timestamp in ms of the earliest candle to fetch
|
|
1046
|
-
* @param {int} [limit] the maximum amount of candles to fetch
|
|
1047
|
-
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1048
|
-
* @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume
|
|
1049
|
-
*/
|
|
1050
|
-
async fetchOHLCV(symbol, timeframe = '1m', since = undefined, limit = undefined, params = {}) {
|
|
1051
|
-
await this.loadMarkets();
|
|
1052
|
-
const market = this.market(symbol);
|
|
1053
|
-
const request = {
|
|
1054
|
-
'symbol': market['id'],
|
|
1055
|
-
'interval': this.safeString(this.timeframes, timeframe, timeframe),
|
|
1056
|
-
};
|
|
1057
|
-
if (since !== undefined) {
|
|
1058
|
-
request['startTime'] = since;
|
|
1059
|
-
}
|
|
1060
|
-
if (limit !== undefined) {
|
|
1061
|
-
request['limit'] = Math.min(limit, 1000); // default 500, max 1000
|
|
1062
|
-
}
|
|
1063
|
-
const response = await this.publicGetV2Klines(this.extend(request, params));
|
|
1064
|
-
//
|
|
1065
|
-
// [
|
|
1066
|
-
// [1590971040000,"0.02454","0.02456","0.02452","0.02456",249],
|
|
1067
|
-
// [1590971100000,"0.02455","0.02457","0.02452","0.02456",300],
|
|
1068
|
-
// [1590971160000,"0.02455","0.02456","0.02453","0.02454",286],
|
|
1069
|
-
// ]
|
|
1070
|
-
//
|
|
1071
|
-
return this.parseOHLCVs(response, market, timeframe, since, limit);
|
|
1072
|
-
}
|
|
1073
|
-
parseTrade(trade, market = undefined) {
|
|
1074
|
-
//
|
|
1075
|
-
// fetchTrades (public aggregate trades)
|
|
1076
|
-
//
|
|
1077
|
-
// {
|
|
1078
|
-
// "a":"1658318071", // Aggregate tradeId
|
|
1079
|
-
// "p":"0.02476", // Price
|
|
1080
|
-
// "q":"0.0", // Official doc says: "Quantity (should be ignored)"
|
|
1081
|
-
// "T":"1591001423382", // Epoch timestamp in MS
|
|
1082
|
-
// "m":false // Was the buyer the maker
|
|
1083
|
-
// }
|
|
1084
|
-
//
|
|
1085
|
-
// createOrder fills (private)
|
|
1086
|
-
//
|
|
1087
|
-
// {
|
|
1088
|
-
// "price": "9807.05",
|
|
1089
|
-
// "qty": "0.01",
|
|
1090
|
-
// "commission": "0",
|
|
1091
|
-
// "commissionAsset": "dUSD"
|
|
1092
|
-
// }
|
|
1093
|
-
//
|
|
1094
|
-
// fetchMyTrades
|
|
1095
|
-
//
|
|
1096
|
-
// {
|
|
1097
|
-
// "symbol": "DOGE/USD",
|
|
1098
|
-
// "id": "116046000",
|
|
1099
|
-
// "orderId": "00000000-0000-0000-0000-000006dbb8ad",
|
|
1100
|
-
// "price": "0.14094",
|
|
1101
|
-
// "qty": "40.0",
|
|
1102
|
-
// "commission": "0.01",
|
|
1103
|
-
// "commissionAsset": "USD",
|
|
1104
|
-
// "time": "1645283022351",
|
|
1105
|
-
// "buyer": false,
|
|
1106
|
-
// "maker": false,
|
|
1107
|
-
// "isBuyer": false,
|
|
1108
|
-
// "isMaker": false
|
|
1109
|
-
// }
|
|
1110
|
-
//
|
|
1111
|
-
const timestamp = this.safeInteger2(trade, 'T', 'time');
|
|
1112
|
-
const priceString = this.safeString2(trade, 'p', 'price');
|
|
1113
|
-
const amountString = this.safeString2(trade, 'q', 'qty');
|
|
1114
|
-
const id = this.safeString2(trade, 'a', 'id');
|
|
1115
|
-
let side = undefined;
|
|
1116
|
-
const orderId = this.safeString(trade, 'orderId');
|
|
1117
|
-
let takerOrMaker = undefined;
|
|
1118
|
-
if ('m' in trade) {
|
|
1119
|
-
side = trade['m'] ? 'sell' : 'buy'; // this is reversed intentionally [TODO: needs reason to be mentioned]
|
|
1120
|
-
takerOrMaker = 'taker'; // in public trades, it's always taker
|
|
1121
|
-
}
|
|
1122
|
-
else if ('isBuyer' in trade) {
|
|
1123
|
-
side = (trade['isBuyer']) ? 'buy' : 'sell'; // this is a true side
|
|
1124
|
-
takerOrMaker = trade['isMaker'] ? 'maker' : 'taker';
|
|
1125
|
-
}
|
|
1126
|
-
let fee = undefined;
|
|
1127
|
-
if ('commission' in trade) {
|
|
1128
|
-
fee = {
|
|
1129
|
-
'cost': this.safeString(trade, 'commission'),
|
|
1130
|
-
'currency': this.safeCurrencyCode(this.safeString(trade, 'commissionAsset')),
|
|
1131
|
-
};
|
|
1132
|
-
}
|
|
1133
|
-
const marketId = this.safeString(trade, 'symbol');
|
|
1134
|
-
const symbol = this.safeSymbol(marketId, market);
|
|
1135
|
-
return this.safeTrade({
|
|
1136
|
-
'id': id,
|
|
1137
|
-
'order': orderId,
|
|
1138
|
-
'timestamp': timestamp,
|
|
1139
|
-
'datetime': this.iso8601(timestamp),
|
|
1140
|
-
'symbol': symbol,
|
|
1141
|
-
'type': undefined,
|
|
1142
|
-
'takerOrMaker': takerOrMaker,
|
|
1143
|
-
'side': side,
|
|
1144
|
-
'price': priceString,
|
|
1145
|
-
'amount': amountString,
|
|
1146
|
-
'cost': undefined,
|
|
1147
|
-
'fee': fee,
|
|
1148
|
-
'info': trade,
|
|
1149
|
-
}, market);
|
|
1150
|
-
}
|
|
1151
|
-
/**
|
|
1152
|
-
* @method
|
|
1153
|
-
* @name currencycom#fetchTrades
|
|
1154
|
-
* @description get the list of most recent trades for a particular symbol
|
|
1155
|
-
* @see https://apitradedoc.currency.com/swagger-ui.html#/rest-api/aggTradesUsingGET
|
|
1156
|
-
* @param {string} symbol unified symbol of the market to fetch trades for
|
|
1157
|
-
* @param {int} [since] timestamp in ms of the earliest trade to fetch
|
|
1158
|
-
* @param {int} [limit] the maximum amount of trades to fetch
|
|
1159
|
-
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1160
|
-
* @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
|
|
1161
|
-
*/
|
|
1162
|
-
async fetchTrades(symbol, since = undefined, limit = undefined, params = {}) {
|
|
1163
|
-
await this.loadMarkets();
|
|
1164
|
-
const market = this.market(symbol);
|
|
1165
|
-
const request = {
|
|
1166
|
-
'symbol': market['id'],
|
|
1167
|
-
// 'limit': 500, // default 500, max 1000
|
|
1168
|
-
};
|
|
1169
|
-
if (limit !== undefined) {
|
|
1170
|
-
request['limit'] = Math.min(limit, 1000); // default 500, max 1000
|
|
1171
|
-
}
|
|
1172
|
-
if (since !== undefined) {
|
|
1173
|
-
request['startTime'] = since;
|
|
1174
|
-
}
|
|
1175
|
-
const response = await this.publicGetV2AggTrades(this.extend(request, params));
|
|
1176
|
-
//
|
|
1177
|
-
// [
|
|
1178
|
-
// {
|
|
1179
|
-
// "a":"1658318071", // Aggregate tradeId
|
|
1180
|
-
// "p":"0.02476", // Price
|
|
1181
|
-
// "q":"0.0", // Official doc says: "Quantity (should be ignored)"
|
|
1182
|
-
// "T":"1591001423382", // Epoch timestamp in MS
|
|
1183
|
-
// "m":false // Was the buyer the maker
|
|
1184
|
-
// },
|
|
1185
|
-
// ]
|
|
1186
|
-
//
|
|
1187
|
-
return this.parseTrades(response, market, since, limit);
|
|
1188
|
-
}
|
|
1189
|
-
parseOrder(order, market = undefined) {
|
|
1190
|
-
//
|
|
1191
|
-
// createOrder
|
|
1192
|
-
//
|
|
1193
|
-
// limit
|
|
1194
|
-
//
|
|
1195
|
-
// {
|
|
1196
|
-
// "symbol": "BTC/USD",
|
|
1197
|
-
// "orderId": "00000000-0000-0000-0000-000006eacaa0",
|
|
1198
|
-
// "transactTime": "1645281669295",
|
|
1199
|
-
// "price": "30000.00000000",
|
|
1200
|
-
// "origQty": "0.0002", // might not be present for "market" order
|
|
1201
|
-
// "executedQty": "0.0", // positive for BUY, negative for SELL. This property might not be present in Leverage markets
|
|
1202
|
-
// "margin": 0.1, // present in leverage markets
|
|
1203
|
-
// "status": "NEW", // NEW, FILLED, ...
|
|
1204
|
-
// "timeInForce": "GTC",
|
|
1205
|
-
// "type": "LIMIT", // LIMIT, MARKET
|
|
1206
|
-
// "side": "BUY",
|
|
1207
|
-
// "fills": [ // this field might not be present if there were no fills
|
|
1208
|
-
// {
|
|
1209
|
-
// "price": "0.14094",
|
|
1210
|
-
// "qty": "40.0",
|
|
1211
|
-
// "commission": "0",
|
|
1212
|
-
// "commissionAsset": "dUSD",
|
|
1213
|
-
// },
|
|
1214
|
-
// ],
|
|
1215
|
-
// }
|
|
1216
|
-
//
|
|
1217
|
-
// fetchOrder (fetchOpenOrders is an array same structure, with some extra fields)
|
|
1218
|
-
//
|
|
1219
|
-
// {
|
|
1220
|
-
// "symbol": "BTC/USD_LEVERAGE",
|
|
1221
|
-
// "accountId": "123456789012345678",
|
|
1222
|
-
// "orderId": "00a01234-0123-54c4-0000-123451234567",
|
|
1223
|
-
// "price": "25779.35",
|
|
1224
|
-
// "status": "MODIFIED",
|
|
1225
|
-
// "type": "LIMIT",
|
|
1226
|
-
// "timeInForceType": "GTC",
|
|
1227
|
-
// "side": "BUY",
|
|
1228
|
-
// "guaranteedStopLoss": false,
|
|
1229
|
-
// "trailingStopLoss": false,
|
|
1230
|
-
// "margin": "0.05",
|
|
1231
|
-
// "takeProfit": "27020.00",
|
|
1232
|
-
// "stopLoss": "24500.35",
|
|
1233
|
-
// "fills": [], // might not be present
|
|
1234
|
-
// "timestamp": "1685958369623", // "time" in "fetchOpenOrders"
|
|
1235
|
-
// "expireTime": "1686167960000", // "expireTimestamp" in "fetchOpenOrders"
|
|
1236
|
-
// "quantity": "0.00040", // "origQty" in "fetchOpenOrders"
|
|
1237
|
-
// "executedQty": "0.0", // present in "fetchOpenOrders"
|
|
1238
|
-
// "updateTime": "1685958369542", // present in "fetchOpenOrders"
|
|
1239
|
-
// "leverage": true, // present in "fetchOpenOrders"
|
|
1240
|
-
// "working": true // present in "fetchOpenOrders"
|
|
1241
|
-
// }
|
|
1242
|
-
//
|
|
1243
|
-
// cancelOrder
|
|
1244
|
-
//
|
|
1245
|
-
// {
|
|
1246
|
-
// "symbol": "DOGE/USD",
|
|
1247
|
-
// "orderId": "00000000-0000-0003-0000-000006db714c",
|
|
1248
|
-
// "price": "0.13",
|
|
1249
|
-
// "origQty": "30.0",
|
|
1250
|
-
// "executedQty": "0.0",
|
|
1251
|
-
// "status": "CANCELED",
|
|
1252
|
-
// "timeInForce": "GTC",
|
|
1253
|
-
// "type": "LIMIT",
|
|
1254
|
-
// "side": "BUY",
|
|
1255
|
-
// }
|
|
1256
|
-
//
|
|
1257
|
-
const marketId = this.safeString(order, 'symbol');
|
|
1258
|
-
const symbol = this.safeSymbol(marketId, market, '/');
|
|
1259
|
-
const id = this.safeString(order, 'orderId');
|
|
1260
|
-
const price = this.safeString(order, 'price');
|
|
1261
|
-
const amount = this.safeString2(order, 'origQty', 'quantity');
|
|
1262
|
-
const filledRaw = this.safeString(order, 'executedQty');
|
|
1263
|
-
const filled = Precise.stringAbs(filledRaw);
|
|
1264
|
-
const status = this.parseOrderStatus(this.safeString(order, 'status'));
|
|
1265
|
-
const timeInForce = this.parseOrderTimeInForce(this.safeString2(order, 'timeInForce', 'timeInForceType'));
|
|
1266
|
-
const type = this.parseOrderType(this.safeString(order, 'type'));
|
|
1267
|
-
const side = this.parseOrderSide(this.safeString(order, 'side'));
|
|
1268
|
-
const timestamp = this.safeIntegerN(order, ['time', 'transactTime', 'timestamp']);
|
|
1269
|
-
const fills = this.safeValue(order, 'fills');
|
|
1270
|
-
return this.safeOrder({
|
|
1271
|
-
'info': order,
|
|
1272
|
-
'id': id,
|
|
1273
|
-
'timestamp': timestamp,
|
|
1274
|
-
'datetime': this.iso8601(timestamp),
|
|
1275
|
-
'lastTradeTimestamp': undefined,
|
|
1276
|
-
'symbol': symbol,
|
|
1277
|
-
'type': type,
|
|
1278
|
-
'timeInForce': timeInForce,
|
|
1279
|
-
'side': side,
|
|
1280
|
-
'price': price,
|
|
1281
|
-
'triggerPrice': undefined,
|
|
1282
|
-
'amount': amount,
|
|
1283
|
-
'cost': undefined,
|
|
1284
|
-
'average': undefined,
|
|
1285
|
-
'filled': filled,
|
|
1286
|
-
'remaining': undefined,
|
|
1287
|
-
'status': status,
|
|
1288
|
-
'fee': undefined,
|
|
1289
|
-
'trades': fills,
|
|
1290
|
-
}, market);
|
|
1291
|
-
}
|
|
1292
|
-
parseOrderStatus(status) {
|
|
1293
|
-
const statuses = {
|
|
1294
|
-
'NEW': 'open',
|
|
1295
|
-
'CREATED': 'open',
|
|
1296
|
-
'MODIFIED': 'open',
|
|
1297
|
-
'PARTIALLY_FILLED': 'open',
|
|
1298
|
-
'FILLED': 'closed',
|
|
1299
|
-
'CANCELED': 'canceled',
|
|
1300
|
-
'PENDING_CANCEL': 'canceling',
|
|
1301
|
-
'REJECTED': 'rejected',
|
|
1302
|
-
'EXPIRED': 'expired',
|
|
1303
|
-
};
|
|
1304
|
-
return this.safeString(statuses, status, status);
|
|
1305
|
-
}
|
|
1306
|
-
parseOrderType(status) {
|
|
1307
|
-
const statuses = {
|
|
1308
|
-
'MARKET': 'market',
|
|
1309
|
-
'LIMIT': 'limit',
|
|
1310
|
-
'STOP': 'stop',
|
|
1311
|
-
// temporarily we remove custom mappings
|
|
1312
|
-
// 'LIMIT_MAKER': '',
|
|
1313
|
-
// 'STOP_LOSS': 'stop-loss',
|
|
1314
|
-
// 'STOP_LOSS_LIMIT': 'stop-limit',
|
|
1315
|
-
// 'TAKE_PROFIT': 'take-profit',
|
|
1316
|
-
// 'TAKE_PROFIT_LIMIT': 'take-profit',
|
|
1317
|
-
};
|
|
1318
|
-
return this.safeString(statuses, status, status);
|
|
1319
|
-
}
|
|
1320
|
-
parseOrderTimeInForce(status) {
|
|
1321
|
-
const statuses = {
|
|
1322
|
-
'GTC': 'GTC',
|
|
1323
|
-
'FOK': 'FOK',
|
|
1324
|
-
'IOC': 'IOC',
|
|
1325
|
-
};
|
|
1326
|
-
return this.safeString(statuses, status, status);
|
|
1327
|
-
}
|
|
1328
|
-
parseOrderSide(status) {
|
|
1329
|
-
const statuses = {
|
|
1330
|
-
'BUY': 'buy',
|
|
1331
|
-
'SELL': 'sell',
|
|
1332
|
-
};
|
|
1333
|
-
return this.safeString(statuses, status, status);
|
|
1334
|
-
}
|
|
1335
|
-
/**
|
|
1336
|
-
* @method
|
|
1337
|
-
* @name currencycom#createOrder
|
|
1338
|
-
* @description create a trade order
|
|
1339
|
-
* @see https://apitradedoc.currency.com/swagger-ui.html#/rest-api/orderUsingPOST
|
|
1340
|
-
* @param {string} symbol unified symbol of the market to create an order in
|
|
1341
|
-
* @param {string} type 'market' or 'limit'
|
|
1342
|
-
* @param {string} side 'buy' or 'sell'
|
|
1343
|
-
* @param {float} amount how much of currency you want to trade in units of base currency
|
|
1344
|
-
* @param {float} [price] the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
|
|
1345
|
-
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1346
|
-
* @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
1347
|
-
*/
|
|
1348
|
-
async createOrder(symbol, type, side, amount, price = undefined, params = {}) {
|
|
1349
|
-
await this.loadMarkets();
|
|
1350
|
-
const market = this.market(symbol);
|
|
1351
|
-
let accountId = undefined;
|
|
1352
|
-
if (market['margin']) {
|
|
1353
|
-
accountId = this.safeString(this.options, 'accountId');
|
|
1354
|
-
accountId = this.safeString(params, 'accountId', accountId);
|
|
1355
|
-
if (accountId === undefined) {
|
|
1356
|
-
throw new ArgumentsRequired(this.id + " createOrder() requires an accountId parameter or an exchange.options['accountId'] option for " + market['type'] + ' markets');
|
|
1357
|
-
}
|
|
1358
|
-
}
|
|
1359
|
-
const newOrderRespType = this.safeValue(this.options['newOrderRespType'], type, 'RESULT');
|
|
1360
|
-
const request = {
|
|
1361
|
-
'symbol': market['id'],
|
|
1362
|
-
'quantity': this.amountToPrecision(symbol, amount),
|
|
1363
|
-
'type': type.toUpperCase(),
|
|
1364
|
-
'side': side.toUpperCase(),
|
|
1365
|
-
'newOrderRespType': newOrderRespType, // 'RESULT' for full order or 'FULL' for order with fills
|
|
1366
|
-
// 'leverage': 1,
|
|
1367
|
-
// 'accountId': 5470306579272968, // required for leverage markets
|
|
1368
|
-
// 'takeProfit': '123.45',
|
|
1369
|
-
// 'stopLoss': '54.321',
|
|
1370
|
-
// 'guaranteedStopLoss': '54.321',
|
|
1371
|
-
};
|
|
1372
|
-
if (type === 'limit') {
|
|
1373
|
-
request['price'] = this.priceToPrecision(symbol, price);
|
|
1374
|
-
request['timeInForce'] = this.options['defaultTimeInForce'];
|
|
1375
|
-
}
|
|
1376
|
-
else {
|
|
1377
|
-
if (type === 'stop') {
|
|
1378
|
-
request['type'] = 'STOP';
|
|
1379
|
-
request['price'] = this.priceToPrecision(symbol, price);
|
|
1380
|
-
}
|
|
1381
|
-
else if (type === 'market') {
|
|
1382
|
-
const triggerPrice = this.safeValue2(params, 'triggerPrice', 'stopPrice');
|
|
1383
|
-
params = this.omit(params, ['triggerPrice', 'stopPrice']);
|
|
1384
|
-
if (triggerPrice !== undefined) {
|
|
1385
|
-
request['type'] = 'STOP';
|
|
1386
|
-
request['price'] = this.priceToPrecision(symbol, triggerPrice);
|
|
1387
|
-
}
|
|
1388
|
-
}
|
|
1389
|
-
}
|
|
1390
|
-
const response = await this.privatePostV2Order(this.extend(request, params));
|
|
1391
|
-
//
|
|
1392
|
-
// limit
|
|
1393
|
-
//
|
|
1394
|
-
// {
|
|
1395
|
-
// "symbol": "BTC/USD",
|
|
1396
|
-
// "orderId": "00000000-0000-0000-0000-000006eaaaa0",
|
|
1397
|
-
// "transactTime": "1645281669295",
|
|
1398
|
-
// "price": "30000.00000000",
|
|
1399
|
-
// "origQty": "0.0002",
|
|
1400
|
-
// "executedQty": "0.0", // positive for BUY, negative for SELL
|
|
1401
|
-
// "status": "NEW",
|
|
1402
|
-
// "timeInForce": "GTC",
|
|
1403
|
-
// "type": "LIMIT",
|
|
1404
|
-
// "side": "BUY",
|
|
1405
|
-
// }
|
|
1406
|
-
//
|
|
1407
|
-
// market
|
|
1408
|
-
//
|
|
1409
|
-
// {
|
|
1410
|
-
// "symbol": "DOGE/USD",
|
|
1411
|
-
// "orderId": "00000000-0000-0000-0000-000006eab8ad",
|
|
1412
|
-
// "transactTime": "1645283022252",
|
|
1413
|
-
// "price": "0.14066000",
|
|
1414
|
-
// "origQty": "40",
|
|
1415
|
-
// "executedQty": "40.0", // positive for BUY, negative for SELL
|
|
1416
|
-
// "status": "FILLED",
|
|
1417
|
-
// "timeInForce": "FOK",
|
|
1418
|
-
// "type": "MARKET",
|
|
1419
|
-
// "side": "BUY",
|
|
1420
|
-
// "fills": [
|
|
1421
|
-
// {
|
|
1422
|
-
// "price": "0.14094",
|
|
1423
|
-
// "qty": "40.0",
|
|
1424
|
-
// "commission": "0",
|
|
1425
|
-
// "commissionAsset": "dUSD"
|
|
1426
|
-
// }
|
|
1427
|
-
// ]
|
|
1428
|
-
// }
|
|
1429
|
-
//
|
|
1430
|
-
return this.parseOrder(response, market);
|
|
1431
|
-
}
|
|
1432
|
-
/**
|
|
1433
|
-
* @method
|
|
1434
|
-
* @name currencycom#fetchOrder
|
|
1435
|
-
* @description fetches information on an order made by the user
|
|
1436
|
-
* @see https://apitradedoc.currency.com/swagger-ui.html#/rest-api/getOrderUsingGET
|
|
1437
|
-
* @param {string} id order id
|
|
1438
|
-
* @param {string} symbol unified symbol of the market the order was made in
|
|
1439
|
-
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1440
|
-
* @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
1441
|
-
*/
|
|
1442
|
-
async fetchOrder(id, symbol = undefined, params = {}) {
|
|
1443
|
-
if (symbol === undefined) {
|
|
1444
|
-
throw new ArgumentsRequired(this.id + ' fetchOrder() requires a symbol argument');
|
|
1445
|
-
}
|
|
1446
|
-
await this.loadMarkets();
|
|
1447
|
-
const market = this.market(symbol);
|
|
1448
|
-
const request = {
|
|
1449
|
-
'orderId': id,
|
|
1450
|
-
'symbol': market['id'],
|
|
1451
|
-
};
|
|
1452
|
-
const response = await this.privateGetV2FetchOrder(this.extend(request, params));
|
|
1453
|
-
//
|
|
1454
|
-
// {
|
|
1455
|
-
// "accountId": "109698017413125316",
|
|
1456
|
-
// "orderId": "2810f1c5-0079-54c4-0000-000080421601",
|
|
1457
|
-
// "quantity": "20.0",
|
|
1458
|
-
// "price": "0.06",
|
|
1459
|
-
// "timestamp": "1661157503788",
|
|
1460
|
-
// "status": "CREATED",
|
|
1461
|
-
// "type": "LIMIT",
|
|
1462
|
-
// "timeInForceType": "GTC",
|
|
1463
|
-
// "side": "BUY",
|
|
1464
|
-
// "margin": "0.1",
|
|
1465
|
-
// "fills": [ // might not be present
|
|
1466
|
-
// {
|
|
1467
|
-
// "price": "0.14094",
|
|
1468
|
-
// "qty": "40.0",
|
|
1469
|
-
// "commission": "0",
|
|
1470
|
-
// "commissionAsset": "dUSD"
|
|
1471
|
-
// }
|
|
1472
|
-
// ]
|
|
1473
|
-
// }
|
|
1474
|
-
//
|
|
1475
|
-
return this.parseOrder(response);
|
|
1476
|
-
}
|
|
1477
|
-
/**
|
|
1478
|
-
* @method
|
|
1479
|
-
* @name currencycom#fetchOpenOrders
|
|
1480
|
-
* @description fetch all unfilled currently open orders
|
|
1481
|
-
* @see https://apitradedoc.currency.com/swagger-ui.html#/rest-api/openOrdersUsingGET
|
|
1482
|
-
* @param {string} symbol unified market symbol
|
|
1483
|
-
* @param {int} [since] the earliest time in ms to fetch open orders for
|
|
1484
|
-
* @param {int} [limit] the maximum number of open orders structures to retrieve
|
|
1485
|
-
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1486
|
-
* @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
1487
|
-
*/
|
|
1488
|
-
async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
1489
|
-
await this.loadMarkets();
|
|
1490
|
-
let market = undefined;
|
|
1491
|
-
const request = {};
|
|
1492
|
-
if (symbol !== undefined) {
|
|
1493
|
-
market = this.market(symbol);
|
|
1494
|
-
request['symbol'] = market['id'];
|
|
1495
|
-
}
|
|
1496
|
-
else if (this.options['warnOnFetchOpenOrdersWithoutSymbol']) {
|
|
1497
|
-
const symbols = this.symbols;
|
|
1498
|
-
const numSymbols = symbols.length;
|
|
1499
|
-
const fetchOpenOrdersRateLimit = this.parseToInt(numSymbols / 2);
|
|
1500
|
-
throw new ExchangeError(this.id + ' fetchOpenOrders() WARNING: fetching open orders without specifying a symbol is rate-limited to one call per ' + fetchOpenOrdersRateLimit.toString() + ' seconds. Do not call this method frequently to avoid ban. Set ' + this.id + '.options["warnOnFetchOpenOrdersWithoutSymbol"] = false to suppress this warning message.');
|
|
1501
|
-
}
|
|
1502
|
-
const response = await this.privateGetV2OpenOrders(this.extend(request, params));
|
|
1503
|
-
//
|
|
1504
|
-
// [
|
|
1505
|
-
// {
|
|
1506
|
-
// "symbol": "DOGE/USD",
|
|
1507
|
-
// "orderId": "00000000-0000-0003-0000-000004bac57a",
|
|
1508
|
-
// "price": "0.13",
|
|
1509
|
-
// "origQty": "39.0",
|
|
1510
|
-
// "executedQty": "0.0", // positive for BUY, negative for SELL
|
|
1511
|
-
// "status": "NEW",
|
|
1512
|
-
// "timeInForce": "GTC",
|
|
1513
|
-
// "type": "LIMIT",
|
|
1514
|
-
// "side": "BUY",
|
|
1515
|
-
// "time": "1645284216240",
|
|
1516
|
-
// "updateTime": "1645284216240",
|
|
1517
|
-
// "leverage": false,
|
|
1518
|
-
// "working": true
|
|
1519
|
-
// },
|
|
1520
|
-
// ]
|
|
1521
|
-
//
|
|
1522
|
-
return this.parseOrders(response, market, since, limit, params);
|
|
1523
|
-
}
|
|
1524
|
-
/**
|
|
1525
|
-
* @method
|
|
1526
|
-
* @name currencycom#cancelOrder
|
|
1527
|
-
* @description cancels an open order
|
|
1528
|
-
* @see https://apitradedoc.currency.com/swagger-ui.html#/rest-api/cancelOrderUsingDELETE
|
|
1529
|
-
* @param {string} id order id
|
|
1530
|
-
* @param {string} symbol unified symbol of the market the order was made in
|
|
1531
|
-
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1532
|
-
* @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
1533
|
-
*/
|
|
1534
|
-
async cancelOrder(id, symbol = undefined, params = {}) {
|
|
1535
|
-
if (symbol === undefined) {
|
|
1536
|
-
throw new ArgumentsRequired(this.id + ' cancelOrder() requires a symbol argument');
|
|
1537
|
-
}
|
|
1538
|
-
await this.loadMarkets();
|
|
1539
|
-
const market = this.market(symbol);
|
|
1540
|
-
const origClientOrderId = this.safeValue(params, 'origClientOrderId');
|
|
1541
|
-
const request = {
|
|
1542
|
-
'symbol': market['id'],
|
|
1543
|
-
// 'orderId': parseInt (id),
|
|
1544
|
-
// 'origClientOrderId': id,
|
|
1545
|
-
};
|
|
1546
|
-
if (origClientOrderId === undefined) {
|
|
1547
|
-
request['orderId'] = id;
|
|
1548
|
-
}
|
|
1549
|
-
else {
|
|
1550
|
-
request['origClientOrderId'] = origClientOrderId;
|
|
1551
|
-
}
|
|
1552
|
-
const response = await this.privateDeleteV2Order(this.extend(request, params));
|
|
1553
|
-
//
|
|
1554
|
-
// {
|
|
1555
|
-
// "symbol": "DOGE/USD",
|
|
1556
|
-
// "orderId": "00000000-0000-0003-0000-000006db764c",
|
|
1557
|
-
// "price": "0.13",
|
|
1558
|
-
// "origQty": "30.0",
|
|
1559
|
-
// "executedQty": "0.0", // positive for BUY, negative for SELL
|
|
1560
|
-
// "status": "CANCELED",
|
|
1561
|
-
// "timeInForce": "GTC",
|
|
1562
|
-
// "type": "LIMIT",
|
|
1563
|
-
// "side": "BUY",
|
|
1564
|
-
// }
|
|
1565
|
-
//
|
|
1566
|
-
return this.parseOrder(response, market);
|
|
1567
|
-
}
|
|
1568
|
-
/**
|
|
1569
|
-
* @method
|
|
1570
|
-
* @name currencycom#fetchMyTrades
|
|
1571
|
-
* @description fetch all trades made by the user
|
|
1572
|
-
* @see https://apitradedoc.currency.com/swagger-ui.html#/rest-api/myTradesUsingGET
|
|
1573
|
-
* @param {string} symbol unified market symbol
|
|
1574
|
-
* @param {int} [since] the earliest time in ms to fetch trades for
|
|
1575
|
-
* @param {int} [limit] the maximum number of trades structures to retrieve
|
|
1576
|
-
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1577
|
-
* @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}
|
|
1578
|
-
*/
|
|
1579
|
-
async fetchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
1580
|
-
if (symbol === undefined) {
|
|
1581
|
-
throw new ArgumentsRequired(this.id + ' fetchMyTrades() requires a symbol argument');
|
|
1582
|
-
}
|
|
1583
|
-
await this.loadMarkets();
|
|
1584
|
-
const market = this.market(symbol);
|
|
1585
|
-
const request = {
|
|
1586
|
-
'symbol': market['id'],
|
|
1587
|
-
};
|
|
1588
|
-
if (limit !== undefined) {
|
|
1589
|
-
request['limit'] = limit;
|
|
1590
|
-
}
|
|
1591
|
-
const response = await this.privateGetV2MyTrades(this.extend(request, params));
|
|
1592
|
-
//
|
|
1593
|
-
// [
|
|
1594
|
-
// {
|
|
1595
|
-
// "symbol": "DOGE/USD",
|
|
1596
|
-
// "id": "116046000",
|
|
1597
|
-
// "orderId": "00000000-0000-0000-0000-000006dbb8ad",
|
|
1598
|
-
// "price": "0.14094",
|
|
1599
|
-
// "qty": "40.0",
|
|
1600
|
-
// "commission": "0.01",
|
|
1601
|
-
// "commissionAsset": "USD",
|
|
1602
|
-
// "time": "1645283022351",
|
|
1603
|
-
// "buyer": false,
|
|
1604
|
-
// "maker": false,
|
|
1605
|
-
// "isBuyer": false,
|
|
1606
|
-
// "isMaker": false
|
|
1607
|
-
// },
|
|
1608
|
-
// ]
|
|
1609
|
-
//
|
|
1610
|
-
return this.parseTrades(response, market, since, limit);
|
|
1611
|
-
}
|
|
1612
|
-
/**
|
|
1613
|
-
* @method
|
|
1614
|
-
* @name currencycom#fetchDeposits
|
|
1615
|
-
* @description fetch all deposits made to an account
|
|
1616
|
-
* @see https://apitradedoc.currency.com/swagger-ui.html#/rest-api/getDepositsUsingGET
|
|
1617
|
-
* @param {string} code unified currency code
|
|
1618
|
-
* @param {int} [since] the earliest time in ms to fetch deposits for
|
|
1619
|
-
* @param {int} [limit] the maximum number of deposits structures to retrieve
|
|
1620
|
-
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1621
|
-
* @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}
|
|
1622
|
-
*/
|
|
1623
|
-
async fetchDeposits(code = undefined, since = undefined, limit = undefined, params = {}) {
|
|
1624
|
-
return await this.fetchTransactionsByMethod('privateGetV2Deposits', code, since, limit, params);
|
|
1625
|
-
}
|
|
1626
|
-
/**
|
|
1627
|
-
* @method
|
|
1628
|
-
* @name currencycom#fetchWithdrawals
|
|
1629
|
-
* @description fetch all withdrawals made from an account
|
|
1630
|
-
* @see https://apitradedoc.currency.com/swagger-ui.html#/rest-api/getWithdrawalsUsingGET
|
|
1631
|
-
* @param {string} code unified currency code
|
|
1632
|
-
* @param {int} [since] the earliest time in ms to fetch withdrawals for
|
|
1633
|
-
* @param {int} [limit] the maximum number of withdrawals structures to retrieve
|
|
1634
|
-
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1635
|
-
* @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}
|
|
1636
|
-
*/
|
|
1637
|
-
async fetchWithdrawals(code = undefined, since = undefined, limit = undefined, params = {}) {
|
|
1638
|
-
return await this.fetchTransactionsByMethod('privateGetV2Withdrawals', code, since, limit, params);
|
|
1639
|
-
}
|
|
1640
|
-
/**
|
|
1641
|
-
* @method
|
|
1642
|
-
* @name currencycom#fetchDepositsWithdrawals
|
|
1643
|
-
* @description fetch history of deposits and withdrawals
|
|
1644
|
-
* @see https://apitradedoc.currency.com/swagger-ui.html#/rest-api/getTransactionsUsingGET
|
|
1645
|
-
* @param {string} [code] unified currency code for the currency of the deposit/withdrawals, default is undefined
|
|
1646
|
-
* @param {int} [since] timestamp in ms of the earliest deposit/withdrawal, default is undefined
|
|
1647
|
-
* @param {int} [limit] max number of deposit/withdrawals to return, default is undefined
|
|
1648
|
-
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1649
|
-
* @returns {object} a list of [transaction structure]{@link https://docs.ccxt.com/#/?id=transaction-structure}
|
|
1650
|
-
*/
|
|
1651
|
-
async fetchDepositsWithdrawals(code = undefined, since = undefined, limit = undefined, params = {}) {
|
|
1652
|
-
return await this.fetchTransactionsByMethod('privateGetV2Transactions', code, since, limit, params);
|
|
1653
|
-
}
|
|
1654
|
-
async fetchTransactionsByMethod(method, code = undefined, since = undefined, limit = undefined, params = {}) {
|
|
1655
|
-
await this.loadMarkets();
|
|
1656
|
-
const request = {};
|
|
1657
|
-
let currency = undefined;
|
|
1658
|
-
if (code !== undefined) {
|
|
1659
|
-
currency = this.currency(code);
|
|
1660
|
-
}
|
|
1661
|
-
if (since !== undefined) {
|
|
1662
|
-
request['startTime'] = since;
|
|
1663
|
-
}
|
|
1664
|
-
if (limit !== undefined) {
|
|
1665
|
-
request['limit'] = limit;
|
|
1666
|
-
}
|
|
1667
|
-
let response = undefined;
|
|
1668
|
-
if (method === 'privateGetV2Deposits') {
|
|
1669
|
-
response = await this.privateGetV2Deposits(this.extend(request, params));
|
|
1670
|
-
}
|
|
1671
|
-
else if (method === 'privateGetV2Withdrawals') {
|
|
1672
|
-
response = await this.privateGetV2Withdrawals(this.extend(request, params));
|
|
1673
|
-
}
|
|
1674
|
-
else if (method === 'privateGetV2Transactions') {
|
|
1675
|
-
response = await this.privateGetV2Transactions(this.extend(request, params));
|
|
1676
|
-
}
|
|
1677
|
-
else {
|
|
1678
|
-
throw new NotSupported(this.id + ' fetchTransactionsByMethod() not support this method');
|
|
1679
|
-
}
|
|
1680
|
-
//
|
|
1681
|
-
// [
|
|
1682
|
-
// {
|
|
1683
|
-
// "id": "616769213",
|
|
1684
|
-
// "balance": "2.088",
|
|
1685
|
-
// "amount": "1.304", // negative for 'withdrawal'
|
|
1686
|
-
// "currency": "CAKE",
|
|
1687
|
-
// "type": "deposit",
|
|
1688
|
-
// "timestamp": "1645282121023",
|
|
1689
|
-
// "paymentMethod": "BLOCKCHAIN",
|
|
1690
|
-
// "blockchainTransactionHash": "0x57c68c1f2ae74d5eda5a2a00516361d241a5c9e1ee95bf32573523857c38c112",
|
|
1691
|
-
// "status": "PROCESSED",
|
|
1692
|
-
// "commission": "0.14", // this property only exists in withdrawal
|
|
1693
|
-
// },
|
|
1694
|
-
// ]
|
|
1695
|
-
//
|
|
1696
|
-
return this.parseTransactions(response, currency, since, limit, params);
|
|
1697
|
-
}
|
|
1698
|
-
parseTransaction(transaction, currency = undefined) {
|
|
1699
|
-
//
|
|
1700
|
-
// {
|
|
1701
|
-
// "id": "616769213",
|
|
1702
|
-
// "balance": "2.088",
|
|
1703
|
-
// "amount": "1.304", // negative for 'withdrawal'
|
|
1704
|
-
// "currency": "CAKE",
|
|
1705
|
-
// "type": "deposit",
|
|
1706
|
-
// "timestamp": "1645282121023",
|
|
1707
|
-
// "paymentMethod": "BLOCKCHAIN",
|
|
1708
|
-
// "blockchainTransactionHash": "0x57c68c1f2ae74d5eda5a2a00516361d241a5c9e1ee95bf32573523857c38c112",
|
|
1709
|
-
// "status": "PROCESSED",
|
|
1710
|
-
// "commission": "0.14", // this property only exists in withdrawal
|
|
1711
|
-
// }
|
|
1712
|
-
//
|
|
1713
|
-
const timestamp = this.safeInteger(transaction, 'timestamp');
|
|
1714
|
-
const currencyId = this.safeString(transaction, 'currency');
|
|
1715
|
-
const code = this.safeCurrencyCode(currencyId, currency);
|
|
1716
|
-
const feeCost = this.safeString(transaction, 'commission');
|
|
1717
|
-
const fee = {
|
|
1718
|
-
'currency': undefined,
|
|
1719
|
-
'cost': undefined,
|
|
1720
|
-
'rate': undefined,
|
|
1721
|
-
};
|
|
1722
|
-
if (feeCost !== undefined) {
|
|
1723
|
-
fee['currency'] = code;
|
|
1724
|
-
fee['cost'] = feeCost;
|
|
1725
|
-
}
|
|
1726
|
-
return {
|
|
1727
|
-
'info': transaction,
|
|
1728
|
-
'id': this.safeString(transaction, 'id'),
|
|
1729
|
-
'txid': this.safeString(transaction, 'blockchainTransactionHash'),
|
|
1730
|
-
'type': this.parseTransactionType(this.safeString(transaction, 'type')),
|
|
1731
|
-
'currency': code,
|
|
1732
|
-
'network': undefined,
|
|
1733
|
-
'amount': this.safeNumber(transaction, 'amount'),
|
|
1734
|
-
'status': this.parseTransactionStatus(this.safeString(transaction, 'state')),
|
|
1735
|
-
'timestamp': timestamp,
|
|
1736
|
-
'datetime': this.iso8601(timestamp),
|
|
1737
|
-
'address': undefined,
|
|
1738
|
-
'addressFrom': undefined,
|
|
1739
|
-
'addressTo': undefined,
|
|
1740
|
-
'tag': undefined,
|
|
1741
|
-
'tagFrom': undefined,
|
|
1742
|
-
'tagTo': undefined,
|
|
1743
|
-
'updated': undefined,
|
|
1744
|
-
'internal': undefined,
|
|
1745
|
-
'comment': undefined,
|
|
1746
|
-
'fee': fee,
|
|
1747
|
-
};
|
|
1748
|
-
}
|
|
1749
|
-
parseTransactionStatus(status) {
|
|
1750
|
-
const statuses = {
|
|
1751
|
-
'APPROVAL': 'pending',
|
|
1752
|
-
'PROCESSED': 'ok',
|
|
1753
|
-
};
|
|
1754
|
-
return this.safeString(statuses, status, status);
|
|
1755
|
-
}
|
|
1756
|
-
parseTransactionType(type) {
|
|
1757
|
-
const types = {
|
|
1758
|
-
'deposit': 'deposit',
|
|
1759
|
-
'withdrawal': 'withdrawal',
|
|
1760
|
-
};
|
|
1761
|
-
return this.safeString(types, type, type);
|
|
1762
|
-
}
|
|
1763
|
-
/**
|
|
1764
|
-
* @method
|
|
1765
|
-
* @name currencycom#fetchLedger
|
|
1766
|
-
* @description fetch the history of changes, actions done by the user or operations that altered the balance of the user
|
|
1767
|
-
* @see https://apitradedoc.currency.com/swagger-ui.html#/rest-api/getLedgerUsingGET
|
|
1768
|
-
* @param {string} [code] unified currency code, default is undefined
|
|
1769
|
-
* @param {int} [since] timestamp in ms of the earliest ledger entry, default is undefined
|
|
1770
|
-
* @param {int} [limit] max number of ledger entries to return, default is undefined
|
|
1771
|
-
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1772
|
-
* @returns {object} a [ledger structure]{@link https://docs.ccxt.com/#/?id=ledger}
|
|
1773
|
-
*/
|
|
1774
|
-
async fetchLedger(code = undefined, since = undefined, limit = undefined, params = {}) {
|
|
1775
|
-
await this.loadMarkets();
|
|
1776
|
-
const request = {};
|
|
1777
|
-
let currency = undefined;
|
|
1778
|
-
if (code !== undefined) {
|
|
1779
|
-
currency = this.currency(code);
|
|
1780
|
-
}
|
|
1781
|
-
if (since !== undefined) {
|
|
1782
|
-
request['startTime'] = since;
|
|
1783
|
-
}
|
|
1784
|
-
if (limit !== undefined) {
|
|
1785
|
-
request['limit'] = limit;
|
|
1786
|
-
}
|
|
1787
|
-
const response = await this.privateGetV2Ledger(this.extend(request, params));
|
|
1788
|
-
// in the below example, first item expresses withdrawal/deposit type, second example expresses trade
|
|
1789
|
-
//
|
|
1790
|
-
// [
|
|
1791
|
-
// {
|
|
1792
|
-
// "id": "619031398",
|
|
1793
|
-
// "balance": "0.0",
|
|
1794
|
-
// "amount": "-1.088",
|
|
1795
|
-
// "currency": "CAKE",
|
|
1796
|
-
// "type": "withdrawal",
|
|
1797
|
-
// "timestamp": "1645460496425",
|
|
1798
|
-
// "commission": "0.13",
|
|
1799
|
-
// "paymentMethod": "BLOCKCHAIN", // present in withdrawal/deposit
|
|
1800
|
-
// "blockchainTransactionHash": "0x400ac905557c3d34638b1c60eba110b3ee0f97f4eb0f7318015ab76e7f16b7d6", // present in withdrawal/deposit
|
|
1801
|
-
// "status": "PROCESSED"
|
|
1802
|
-
// },
|
|
1803
|
-
// {
|
|
1804
|
-
// "id": "619031034",
|
|
1805
|
-
// "balance": "8.17223588",
|
|
1806
|
-
// "amount": "-0.01326294",
|
|
1807
|
-
// "currency": "USD",
|
|
1808
|
-
// "type": "exchange_commission",
|
|
1809
|
-
// "timestamp": "1645460461235",
|
|
1810
|
-
// "commission": "0.01326294",
|
|
1811
|
-
// "status": "PROCESSED"
|
|
1812
|
-
// },
|
|
1813
|
-
// ]
|
|
1814
|
-
//
|
|
1815
|
-
return this.parseLedger(response, currency, since, limit);
|
|
1816
|
-
}
|
|
1817
|
-
parseLedgerEntry(item, currency = undefined) {
|
|
1818
|
-
const id = this.safeString(item, 'id');
|
|
1819
|
-
const amountString = this.safeString(item, 'amount');
|
|
1820
|
-
const amount = Precise.stringAbs(amountString);
|
|
1821
|
-
const timestamp = this.safeInteger(item, 'timestamp');
|
|
1822
|
-
const currencyId = this.safeString(item, 'currency');
|
|
1823
|
-
const code = this.safeCurrencyCode(currencyId, currency);
|
|
1824
|
-
currency = this.safeCurrency(currencyId, currency);
|
|
1825
|
-
const feeCost = this.safeString(item, 'commission');
|
|
1826
|
-
let fee = undefined;
|
|
1827
|
-
if (feeCost !== undefined) {
|
|
1828
|
-
fee = { 'currency': code, 'cost': feeCost };
|
|
1829
|
-
}
|
|
1830
|
-
const direction = Precise.stringLt(amountString, '0') ? 'out' : 'in';
|
|
1831
|
-
return this.safeLedgerEntry({
|
|
1832
|
-
'id': id,
|
|
1833
|
-
'timestamp': timestamp,
|
|
1834
|
-
'datetime': this.iso8601(timestamp),
|
|
1835
|
-
'direction': direction,
|
|
1836
|
-
'account': undefined,
|
|
1837
|
-
'referenceId': this.safeString(item, 'blockchainTransactionHash'),
|
|
1838
|
-
'referenceAccount': undefined,
|
|
1839
|
-
'type': this.parseLedgerEntryType(this.safeString(item, 'type')),
|
|
1840
|
-
'currency': code,
|
|
1841
|
-
'amount': amount,
|
|
1842
|
-
'before': undefined,
|
|
1843
|
-
'after': this.safeString(item, 'balance'),
|
|
1844
|
-
'status': this.parseLedgerEntryStatus(this.safeString(item, 'status')),
|
|
1845
|
-
'fee': fee,
|
|
1846
|
-
'info': item,
|
|
1847
|
-
}, currency);
|
|
1848
|
-
}
|
|
1849
|
-
parseLedgerEntryStatus(status) {
|
|
1850
|
-
const statuses = {
|
|
1851
|
-
'APPROVAL': 'pending',
|
|
1852
|
-
'PROCESSED': 'ok',
|
|
1853
|
-
'CANCELLED': 'canceled',
|
|
1854
|
-
};
|
|
1855
|
-
return this.safeString(statuses, status, status);
|
|
1856
|
-
}
|
|
1857
|
-
parseLedgerEntryType(type) {
|
|
1858
|
-
const types = {
|
|
1859
|
-
'deposit': 'transaction',
|
|
1860
|
-
'withdrawal': 'transaction',
|
|
1861
|
-
'exchange_commission': 'fee',
|
|
1862
|
-
};
|
|
1863
|
-
return this.safeString(types, type, type);
|
|
1864
|
-
}
|
|
1865
|
-
/**
|
|
1866
|
-
* @method
|
|
1867
|
-
* @name currencycom#fetchLeverage
|
|
1868
|
-
* @description fetch the set leverage for a market
|
|
1869
|
-
* @see https://apitradedoc.currency.com/swagger-ui.html#/rest-api/leverageSettingsUsingGET
|
|
1870
|
-
* @param {string} symbol unified market symbol
|
|
1871
|
-
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1872
|
-
* @returns {object} a [leverage structure]{@link https://docs.ccxt.com/#/?id=leverage-structure}
|
|
1873
|
-
*/
|
|
1874
|
-
async fetchLeverage(symbol, params = {}) {
|
|
1875
|
-
await this.loadMarkets();
|
|
1876
|
-
const market = this.market(symbol);
|
|
1877
|
-
const request = {
|
|
1878
|
-
'symbol': market['id'],
|
|
1879
|
-
};
|
|
1880
|
-
const response = await this.privateGetV2LeverageSettings(this.extend(request, params));
|
|
1881
|
-
//
|
|
1882
|
-
// {
|
|
1883
|
-
// "values": [ 1, 2, 5, 10, ],
|
|
1884
|
-
// "value": "10",
|
|
1885
|
-
// }
|
|
1886
|
-
//
|
|
1887
|
-
return this.parseLeverage(response, market);
|
|
1888
|
-
}
|
|
1889
|
-
parseLeverage(leverage, market = undefined) {
|
|
1890
|
-
const leverageValue = this.safeInteger(leverage, 'value');
|
|
1891
|
-
return {
|
|
1892
|
-
'info': leverage,
|
|
1893
|
-
'symbol': market['symbol'],
|
|
1894
|
-
'marginMode': undefined,
|
|
1895
|
-
'longLeverage': leverageValue,
|
|
1896
|
-
'shortLeverage': leverageValue,
|
|
1897
|
-
};
|
|
1898
|
-
}
|
|
1899
|
-
/**
|
|
1900
|
-
* @method
|
|
1901
|
-
* @name currencycom#fetchDepositAddress
|
|
1902
|
-
* @description fetch the deposit address for a currency associated with this account
|
|
1903
|
-
* @see https://apitradedoc.currency.com/swagger-ui.html#/rest-api/getDepositAddressUsingGET
|
|
1904
|
-
* @param {string} code unified currency code
|
|
1905
|
-
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1906
|
-
* @returns {object} an [address structure]{@link https://docs.ccxt.com/#/?id=address-structure}
|
|
1907
|
-
*/
|
|
1908
|
-
async fetchDepositAddress(code, params = {}) {
|
|
1909
|
-
await this.loadMarkets();
|
|
1910
|
-
const currency = this.currency(code);
|
|
1911
|
-
const request = {
|
|
1912
|
-
'coin': currency['id'],
|
|
1913
|
-
};
|
|
1914
|
-
const response = await this.privateGetV2DepositAddress(this.extend(request, params));
|
|
1915
|
-
//
|
|
1916
|
-
// { "address":"0x97d64eb014ac779194991e7264f01c74c90327f0" }
|
|
1917
|
-
//
|
|
1918
|
-
return this.parseDepositAddress(response, currency);
|
|
1919
|
-
}
|
|
1920
|
-
parseDepositAddress(depositAddress, currency = undefined) {
|
|
1921
|
-
const address = this.safeString(depositAddress, 'address');
|
|
1922
|
-
this.checkAddress(address);
|
|
1923
|
-
currency = this.safeCurrency(undefined, currency);
|
|
1924
|
-
return {
|
|
1925
|
-
'info': depositAddress,
|
|
1926
|
-
'currency': currency['code'],
|
|
1927
|
-
'network': undefined,
|
|
1928
|
-
'address': address,
|
|
1929
|
-
'tag': undefined,
|
|
1930
|
-
};
|
|
1931
|
-
}
|
|
1932
|
-
sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {
|
|
1933
|
-
let url = this.urls['api'][api] + '/' + path;
|
|
1934
|
-
if (path === 'historicalTrades') {
|
|
1935
|
-
headers = {
|
|
1936
|
-
'X-MBX-APIKEY': this.apiKey,
|
|
1937
|
-
};
|
|
1938
|
-
}
|
|
1939
|
-
if (api === 'private') {
|
|
1940
|
-
this.checkRequiredCredentials();
|
|
1941
|
-
let query = this.urlencode(this.extend({
|
|
1942
|
-
'timestamp': this.nonce(),
|
|
1943
|
-
'recvWindow': this.options['recvWindow'],
|
|
1944
|
-
}, params));
|
|
1945
|
-
const signature = this.hmac(this.encode(query), this.encode(this.secret), sha256);
|
|
1946
|
-
query += '&' + 'signature=' + signature;
|
|
1947
|
-
headers = {
|
|
1948
|
-
'X-MBX-APIKEY': this.apiKey,
|
|
1949
|
-
};
|
|
1950
|
-
if ((method === 'GET') || (method === 'DELETE')) {
|
|
1951
|
-
url += '?' + query;
|
|
1952
|
-
}
|
|
1953
|
-
else {
|
|
1954
|
-
body = query;
|
|
1955
|
-
headers['Content-Type'] = 'application/x-www-form-urlencoded';
|
|
1956
|
-
}
|
|
1957
|
-
}
|
|
1958
|
-
else {
|
|
1959
|
-
if (Object.keys(params).length) {
|
|
1960
|
-
url += '?' + this.urlencode(params);
|
|
1961
|
-
}
|
|
1962
|
-
}
|
|
1963
|
-
url = this.implodeHostname(url);
|
|
1964
|
-
return { 'url': url, 'method': method, 'body': body, 'headers': headers };
|
|
1965
|
-
}
|
|
1966
|
-
/**
|
|
1967
|
-
* @method
|
|
1968
|
-
* @name currencycom#fetchPositions
|
|
1969
|
-
* @description fetch all open positions
|
|
1970
|
-
* @see https://apitradedoc.currency.com/swagger-ui.html#/rest-api/tradingPositionsUsingGET
|
|
1971
|
-
* @param {string[]|undefined} symbols list of unified market symbols
|
|
1972
|
-
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1973
|
-
* @returns {object[]} a list of [position structure]{@link https://docs.ccxt.com/#/?id=position-structure}
|
|
1974
|
-
*/
|
|
1975
|
-
async fetchPositions(symbols = undefined, params = {}) {
|
|
1976
|
-
await this.loadMarkets();
|
|
1977
|
-
const response = await this.privateGetV2TradingPositions(params);
|
|
1978
|
-
//
|
|
1979
|
-
// {
|
|
1980
|
-
// "positions": [
|
|
1981
|
-
// {
|
|
1982
|
-
// "accountId": "109698017416453793",
|
|
1983
|
-
// "id": "00a18490-0079-54c4-0000-0000803e73d3",
|
|
1984
|
-
// "instrumentId": "45463225268524228",
|
|
1985
|
-
// "orderId": "00a18490-0079-54c4-0000-0000803e73d2",
|
|
1986
|
-
// "openQuantity": "13.6",
|
|
1987
|
-
// "openPrice": "0.75724",
|
|
1988
|
-
// "closeQuantity": "0.0",
|
|
1989
|
-
// "closePrice": "0",
|
|
1990
|
-
// "rpl": "-0.007723848",
|
|
1991
|
-
// "rplConverted": "0",
|
|
1992
|
-
// "upl": "-0.006664",
|
|
1993
|
-
// "uplConverted": "-0.006664",
|
|
1994
|
-
// "swap": "0",
|
|
1995
|
-
// "swapConverted": "0",
|
|
1996
|
-
// "fee": "-0.007723848",
|
|
1997
|
-
// "dividend": "0",
|
|
1998
|
-
// "margin": "0.2",
|
|
1999
|
-
// "state": "ACTIVE",
|
|
2000
|
-
// "currency": "USD",
|
|
2001
|
-
// "createdTimestamp": "1645473877236",
|
|
2002
|
-
// "openTimestamp": "1645473877193",
|
|
2003
|
-
// "type": "NET",
|
|
2004
|
-
// "cost": "2.0583600",
|
|
2005
|
-
// "symbol": "XRP/USD_LEVERAGE"
|
|
2006
|
-
// }
|
|
2007
|
-
// ]
|
|
2008
|
-
// }
|
|
2009
|
-
//
|
|
2010
|
-
const data = this.safeList(response, 'positions', []);
|
|
2011
|
-
return this.parsePositions(data, symbols);
|
|
2012
|
-
}
|
|
2013
|
-
parsePosition(position, market = undefined) {
|
|
2014
|
-
//
|
|
2015
|
-
// {
|
|
2016
|
-
// "accountId": "109698017416453793",
|
|
2017
|
-
// "id": "00a18490-0079-54c4-0000-0000803e73d3",
|
|
2018
|
-
// "instrumentId": "45463225268524228",
|
|
2019
|
-
// "orderId": "00a18490-0079-54c4-0000-0000803e73d2",
|
|
2020
|
-
// "openQuantity": "13.6",
|
|
2021
|
-
// "openPrice": "0.75724",
|
|
2022
|
-
// "closeQuantity": "0.0",
|
|
2023
|
-
// "closePrice": "0",
|
|
2024
|
-
// "rpl": "-0.007723848",
|
|
2025
|
-
// "rplConverted": "0",
|
|
2026
|
-
// "upl": "-0.006664",
|
|
2027
|
-
// "uplConverted": "-0.006664",
|
|
2028
|
-
// "swap": "0",
|
|
2029
|
-
// "swapConverted": "0",
|
|
2030
|
-
// "fee": "-0.007723848",
|
|
2031
|
-
// "dividend": "0",
|
|
2032
|
-
// "margin": "0.2",
|
|
2033
|
-
// "state": "ACTIVE",
|
|
2034
|
-
// "currency": "USD",
|
|
2035
|
-
// "createdTimestamp": "1645473877236",
|
|
2036
|
-
// "openTimestamp": "1645473877193",
|
|
2037
|
-
// "type": "NET",
|
|
2038
|
-
// "cost": "2.0583600",
|
|
2039
|
-
// "symbol": "XRP/USD_LEVERAGE"
|
|
2040
|
-
// }
|
|
2041
|
-
//
|
|
2042
|
-
market = this.safeMarket(this.safeString(position, 'symbol'), market);
|
|
2043
|
-
const symbol = market['symbol'];
|
|
2044
|
-
const timestamp = this.safeInteger(position, 'createdTimestamp');
|
|
2045
|
-
const quantityRaw = this.safeString(position, 'openQuantity');
|
|
2046
|
-
const side = Precise.stringGt(quantityRaw, '0') ? 'long' : 'short';
|
|
2047
|
-
const quantity = Precise.stringAbs(quantityRaw);
|
|
2048
|
-
const entryPrice = this.safeNumber(position, 'openPrice');
|
|
2049
|
-
const unrealizedProfit = this.safeNumber(position, 'upl');
|
|
2050
|
-
const marginCoeff = this.safeString(position, 'margin');
|
|
2051
|
-
const leverage = Precise.stringDiv('1', marginCoeff);
|
|
2052
|
-
return this.safePosition({
|
|
2053
|
-
'info': position,
|
|
2054
|
-
'symbol': symbol,
|
|
2055
|
-
'timestamp': timestamp,
|
|
2056
|
-
'datetime': this.iso8601(timestamp),
|
|
2057
|
-
'lastUpdateTimestamp': undefined,
|
|
2058
|
-
'contracts': this.parseNumber(quantity),
|
|
2059
|
-
'contractSize': undefined,
|
|
2060
|
-
'entryPrice': entryPrice,
|
|
2061
|
-
'collateral': undefined,
|
|
2062
|
-
'side': side,
|
|
2063
|
-
// 'realizedProfit': this.safeNumber (position, 'rpl'),
|
|
2064
|
-
'unrealizedPnl': unrealizedProfit,
|
|
2065
|
-
'leverage': leverage,
|
|
2066
|
-
'percentage': undefined,
|
|
2067
|
-
'marginMode': undefined,
|
|
2068
|
-
'notional': undefined,
|
|
2069
|
-
'markPrice': undefined,
|
|
2070
|
-
'lastPrice': undefined,
|
|
2071
|
-
'liquidationPrice': undefined,
|
|
2072
|
-
'initialMargin': undefined,
|
|
2073
|
-
'initialMarginPercentage': undefined,
|
|
2074
|
-
'maintenanceMargin': this.parseNumber(marginCoeff),
|
|
2075
|
-
'maintenanceMarginPercentage': undefined,
|
|
2076
|
-
'marginRatio': undefined,
|
|
2077
|
-
'id': undefined,
|
|
2078
|
-
'hedged': undefined,
|
|
2079
|
-
'stopLossPrice': undefined,
|
|
2080
|
-
'takeProfitPrice': undefined,
|
|
2081
|
-
});
|
|
2082
|
-
}
|
|
2083
|
-
handleErrors(httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody) {
|
|
2084
|
-
if ((httpCode === 418) || (httpCode === 429)) {
|
|
2085
|
-
throw new DDoSProtection(this.id + ' ' + httpCode.toString() + ' ' + reason + ' ' + body);
|
|
2086
|
-
}
|
|
2087
|
-
// error response in a form: { "code": -1013, "msg": "Invalid quantity." }
|
|
2088
|
-
// following block cointains legacy checks against message patterns in "msg" property
|
|
2089
|
-
// will switch "code" checks eventually, when we know all of them
|
|
2090
|
-
if (httpCode >= 400) {
|
|
2091
|
-
if (body.indexOf('Price * QTY is zero or less') >= 0) {
|
|
2092
|
-
throw new InvalidOrder(this.id + ' order cost = amount * price is zero or less ' + body);
|
|
2093
|
-
}
|
|
2094
|
-
if (body.indexOf('LOT_SIZE') >= 0) {
|
|
2095
|
-
throw new InvalidOrder(this.id + ' order amount should be evenly divisible by lot size ' + body);
|
|
2096
|
-
}
|
|
2097
|
-
if (body.indexOf('PRICE_FILTER') >= 0) {
|
|
2098
|
-
throw new InvalidOrder(this.id + ' order price is invalid, i.e. exceeds allowed price precision, exceeds min price or max price limits or is invalid float value in general, use this.priceToPrecision (symbol, amount) ' + body);
|
|
2099
|
-
}
|
|
2100
|
-
}
|
|
2101
|
-
if (response === undefined) {
|
|
2102
|
-
return undefined; // fallback to default error handler
|
|
2103
|
-
}
|
|
2104
|
-
//
|
|
2105
|
-
// {"code":-1128,"msg":"Combination of optional parameters invalid."}
|
|
2106
|
-
//
|
|
2107
|
-
const errorCode = this.safeString(response, 'code');
|
|
2108
|
-
if ((errorCode !== undefined) && (errorCode !== '0')) {
|
|
2109
|
-
const feedback = this.id + ' ' + this.json(response);
|
|
2110
|
-
this.throwExactlyMatchedException(this.exceptions['exact'], errorCode, feedback);
|
|
2111
|
-
const message = this.safeString(response, 'msg');
|
|
2112
|
-
this.throwBroadlyMatchedException(this.exceptions['broad'], message, feedback);
|
|
2113
|
-
throw new ExchangeError(feedback);
|
|
2114
|
-
}
|
|
2115
|
-
return undefined;
|
|
2116
|
-
}
|
|
2117
|
-
}
|