ccxt 4.4.98 → 4.4.100
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 +7 -6
- package/dist/373.ccxt.browser.js +7630 -0
- package/dist/373.ccxt.browser.min.js +1 -0
- package/dist/ccxt.browser.min.js +8 -8
- package/dist/cjs/ccxt.js +289 -286
- package/dist/cjs/src/abstract/alpaca.js +4 -2
- package/dist/cjs/src/abstract/apex.js +4 -2
- package/dist/cjs/src/abstract/ascendex.js +4 -2
- package/dist/cjs/src/abstract/bigone.js +4 -2
- package/dist/cjs/src/abstract/binance.js +4 -2
- package/dist/cjs/src/abstract/bingx.js +4 -2
- package/dist/cjs/src/abstract/bit2c.js +4 -2
- package/dist/cjs/src/abstract/bitbank.js +4 -2
- package/dist/cjs/src/abstract/bitbns.js +4 -2
- package/dist/cjs/src/abstract/bitfinex.js +4 -2
- package/dist/cjs/src/abstract/bitflyer.js +4 -2
- package/dist/cjs/src/abstract/bitget.js +4 -2
- package/dist/cjs/src/abstract/bithumb.js +4 -2
- package/dist/cjs/src/abstract/bitmart.js +4 -2
- package/dist/cjs/src/abstract/bitmex.js +4 -2
- package/dist/cjs/src/abstract/bitopro.js +4 -2
- package/dist/cjs/src/abstract/bitrue.js +4 -2
- package/dist/cjs/src/abstract/bitso.js +4 -2
- package/dist/cjs/src/abstract/bitstamp.js +4 -2
- package/dist/cjs/src/abstract/bitteam.js +4 -2
- package/dist/cjs/src/abstract/bittrade.js +4 -2
- package/dist/cjs/src/abstract/bitvavo.js +4 -2
- package/dist/cjs/src/abstract/blockchaincom.js +4 -2
- package/dist/cjs/src/abstract/blofin.js +4 -2
- package/dist/cjs/src/abstract/btcalpha.js +4 -2
- package/dist/cjs/src/abstract/btcbox.js +4 -2
- package/dist/cjs/src/abstract/btcmarkets.js +4 -2
- package/dist/cjs/src/abstract/btcturk.js +4 -2
- package/dist/cjs/src/abstract/bybit.js +4 -2
- package/dist/cjs/src/abstract/cex.js +4 -2
- package/dist/cjs/src/abstract/coinbase.js +4 -2
- package/dist/cjs/src/abstract/coinbaseexchange.js +4 -2
- package/dist/cjs/src/abstract/coinbaseinternational.js +4 -2
- package/dist/cjs/src/abstract/coincatch.js +4 -2
- package/dist/cjs/src/abstract/coincheck.js +4 -2
- package/dist/cjs/src/abstract/coinex.js +4 -2
- package/dist/cjs/src/abstract/coinmate.js +4 -2
- package/dist/cjs/src/abstract/coinmetro.js +4 -2
- package/dist/cjs/src/abstract/coinone.js +4 -2
- package/dist/cjs/src/abstract/coinsph.js +4 -2
- package/dist/cjs/src/abstract/coinspot.js +4 -2
- package/dist/cjs/src/abstract/cryptocom.js +4 -2
- package/dist/cjs/src/abstract/cryptomus.js +4 -2
- package/dist/cjs/src/abstract/defx.js +4 -2
- package/dist/cjs/src/abstract/delta.js +4 -2
- package/dist/cjs/src/abstract/deribit.js +4 -2
- package/dist/cjs/src/abstract/derive.js +4 -2
- package/dist/cjs/src/abstract/digifinex.js +4 -2
- package/dist/cjs/src/abstract/ellipx.js +4 -2
- package/dist/cjs/src/abstract/exmo.js +4 -2
- package/dist/cjs/src/abstract/foxbit.js +4 -2
- package/dist/cjs/src/abstract/gate.js +4 -2
- package/dist/cjs/src/abstract/gemini.js +4 -2
- package/dist/cjs/src/abstract/hashkey.js +4 -2
- package/dist/cjs/src/abstract/hibachi.js +11 -0
- package/dist/cjs/src/abstract/hitbtc.js +4 -2
- package/dist/cjs/src/abstract/hollaex.js +4 -2
- package/dist/cjs/src/abstract/htx.js +4 -2
- package/dist/cjs/src/abstract/hyperliquid.js +4 -2
- package/dist/cjs/src/abstract/independentreserve.js +4 -2
- package/dist/cjs/src/abstract/indodax.js +4 -2
- package/dist/cjs/src/abstract/kraken.js +4 -2
- package/dist/cjs/src/abstract/krakenfutures.js +4 -2
- package/dist/cjs/src/abstract/kucoin.js +4 -2
- package/dist/cjs/src/abstract/kucoinfutures.js +5 -3
- package/dist/cjs/src/abstract/latoken.js +4 -2
- package/dist/cjs/src/abstract/lbank.js +4 -2
- package/dist/cjs/src/abstract/luno.js +4 -2
- package/dist/cjs/src/abstract/mercado.js +4 -2
- package/dist/cjs/src/abstract/mexc.js +4 -2
- package/dist/cjs/src/abstract/modetrade.js +4 -2
- package/dist/cjs/src/abstract/ndax.js +4 -2
- package/dist/cjs/src/abstract/novadax.js +4 -2
- package/dist/cjs/src/abstract/oceanex.js +4 -2
- package/dist/cjs/src/abstract/okcoin.js +4 -2
- package/dist/cjs/src/abstract/okx.js +4 -2
- package/dist/cjs/src/abstract/onetrading.js +4 -2
- package/dist/cjs/src/abstract/oxfun.js +4 -2
- package/dist/cjs/src/abstract/p2b.js +4 -2
- package/dist/cjs/src/abstract/paradex.js +4 -2
- package/dist/cjs/src/abstract/paymium.js +4 -2
- package/dist/cjs/src/abstract/phemex.js +4 -2
- package/dist/cjs/src/abstract/poloniex.js +4 -2
- package/dist/cjs/src/abstract/probit.js +4 -2
- package/dist/cjs/src/abstract/timex.js +4 -2
- package/dist/cjs/src/abstract/tokocrypto.js +4 -2
- package/dist/cjs/src/abstract/tradeogre.js +4 -2
- package/dist/cjs/src/abstract/upbit.js +4 -2
- package/dist/cjs/src/abstract/vertex.js +4 -2
- package/dist/cjs/src/abstract/wavesexchange.js +4 -2
- package/dist/cjs/src/abstract/whitebit.js +4 -2
- package/dist/cjs/src/abstract/woo.js +4 -2
- package/dist/cjs/src/abstract/woofipro.js +4 -2
- package/dist/cjs/src/abstract/xt.js +4 -2
- package/dist/cjs/src/abstract/yobit.js +4 -2
- package/dist/cjs/src/abstract/zaif.js +4 -2
- package/dist/cjs/src/abstract/zonda.js +4 -2
- package/dist/cjs/src/alpaca.js +5 -3
- package/dist/cjs/src/apex.js +5 -3
- package/dist/cjs/src/ascendex.js +5 -3
- package/dist/cjs/src/base/Exchange.js +51 -11
- package/dist/cjs/src/base/Precise.js +0 -6
- package/dist/cjs/src/base/errors.js +0 -6
- package/dist/cjs/src/base/functions/crypto.js +1 -1
- package/dist/cjs/src/base/functions/encode.js +3 -3
- package/dist/cjs/src/base/functions/misc.js +0 -1
- package/dist/cjs/src/base/functions/number.js +0 -6
- package/dist/cjs/src/base/functions/platform.js +0 -6
- package/dist/cjs/src/base/functions/rsa.js +0 -1
- package/dist/cjs/src/base/functions/string.js +0 -6
- package/dist/cjs/src/base/functions/throttle.js +1 -1
- package/dist/cjs/src/base/functions/time.js +0 -6
- package/dist/cjs/src/base/functions/totp.js +0 -1
- package/dist/cjs/src/base/functions/type.js +0 -6
- package/dist/cjs/src/base/functions.js +1 -1
- package/dist/cjs/src/base/ws/Cache.js +0 -6
- package/dist/cjs/src/base/ws/Client.js +8 -3
- 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 +0 -6
- package/dist/cjs/src/base/ws/WsClient.js +5 -3
- package/dist/cjs/src/bequant.js +5 -3
- package/dist/cjs/src/bigone.js +5 -3
- package/dist/cjs/src/binance.js +14 -9
- package/dist/cjs/src/binancecoinm.js +5 -3
- package/dist/cjs/src/binanceus.js +5 -3
- package/dist/cjs/src/binanceusdm.js +5 -3
- package/dist/cjs/src/bingx.js +37 -5
- package/dist/cjs/src/bit2c.js +5 -3
- package/dist/cjs/src/bitbank.js +5 -3
- package/dist/cjs/src/bitbns.js +5 -3
- package/dist/cjs/src/bitfinex.js +8 -3
- package/dist/cjs/src/bitflyer.js +5 -3
- package/dist/cjs/src/bitget.js +2177 -552
- package/dist/cjs/src/bithumb.js +5 -3
- package/dist/cjs/src/bitmart.js +5 -3
- package/dist/cjs/src/bitmex.js +6 -3
- package/dist/cjs/src/bitopro.js +5 -3
- package/dist/cjs/src/bitrue.js +5 -3
- package/dist/cjs/src/bitso.js +5 -3
- package/dist/cjs/src/bitstamp.js +5 -3
- package/dist/cjs/src/bitteam.js +5 -3
- package/dist/cjs/src/bittrade.js +5 -3
- package/dist/cjs/src/bitvavo.js +4 -2
- package/dist/cjs/src/blockchaincom.js +5 -3
- package/dist/cjs/src/blofin.js +5 -3
- package/dist/cjs/src/btcalpha.js +5 -3
- package/dist/cjs/src/btcbox.js +5 -3
- package/dist/cjs/src/btcmarkets.js +5 -3
- package/dist/cjs/src/btcturk.js +5 -3
- package/dist/cjs/src/bybit.js +11 -4
- package/dist/cjs/src/cex.js +5 -3
- package/dist/cjs/src/coinbase.js +4 -2
- package/dist/cjs/src/coinbaseadvanced.js +5 -3
- package/dist/cjs/src/coinbaseexchange.js +4 -2
- package/dist/cjs/src/coinbaseinternational.js +4 -2
- package/dist/cjs/src/coincatch.js +5 -3
- package/dist/cjs/src/coincheck.js +5 -3
- package/dist/cjs/src/coinex.js +73 -7
- package/dist/cjs/src/coinmate.js +5 -3
- package/dist/cjs/src/coinmetro.js +5 -3
- package/dist/cjs/src/coinone.js +5 -3
- package/dist/cjs/src/coinsph.js +4 -3
- package/dist/cjs/src/coinspot.js +5 -3
- package/dist/cjs/src/cryptocom.js +6 -4
- package/dist/cjs/src/cryptomus.js +5 -3
- package/dist/cjs/src/defx.js +5 -3
- package/dist/cjs/src/delta.js +5 -3
- package/dist/cjs/src/deribit.js +5 -3
- package/dist/cjs/src/derive.js +5 -3
- package/dist/cjs/src/digifinex.js +5 -3
- package/dist/cjs/src/ellipx.js +5 -3
- package/dist/cjs/src/exmo.js +5 -3
- package/dist/cjs/src/fmfwio.js +5 -3
- package/dist/cjs/src/foxbit.js +8 -7
- package/dist/cjs/src/gate.js +27 -5
- package/dist/cjs/src/gateio.js +5 -3
- package/dist/cjs/src/gemini.js +5 -3
- package/dist/cjs/src/hashkey.js +5 -3
- package/dist/cjs/src/hibachi.js +2138 -0
- package/dist/cjs/src/hitbtc.js +4 -3
- package/dist/cjs/src/hollaex.js +5 -3
- package/dist/cjs/src/htx.js +6 -3
- package/dist/cjs/src/huobi.js +5 -3
- package/dist/cjs/src/hyperliquid.js +84 -31
- package/dist/cjs/src/independentreserve.js +5 -3
- package/dist/cjs/src/indodax.js +5 -3
- package/dist/cjs/src/kraken.js +5 -3
- package/dist/cjs/src/krakenfutures.js +6 -3
- package/dist/cjs/src/kucoin.js +5 -3
- package/dist/cjs/src/kucoinfutures.js +6 -3
- package/dist/cjs/src/latoken.js +5 -3
- package/dist/cjs/src/lbank.js +6 -4
- package/dist/cjs/src/luno.js +5 -3
- package/dist/cjs/src/mercado.js +5 -3
- package/dist/cjs/src/mexc.js +12 -3
- package/dist/cjs/src/modetrade.js +101 -3
- package/dist/cjs/src/myokx.js +5 -3
- package/dist/cjs/src/ndax.js +5 -3
- package/dist/cjs/src/novadax.js +39 -3
- package/dist/cjs/src/oceanex.js +5 -3
- package/dist/cjs/src/okcoin.js +5 -3
- package/dist/cjs/src/okx.js +5 -3
- package/dist/cjs/src/okxus.js +5 -3
- package/dist/cjs/src/onetrading.js +38 -3
- package/dist/cjs/src/oxfun.js +5 -3
- package/dist/cjs/src/p2b.js +37 -3
- package/dist/cjs/src/paradex.js +6 -3
- package/dist/cjs/src/paymium.js +5 -3
- package/dist/cjs/src/phemex.js +4 -2
- package/dist/cjs/src/poloniex.js +5 -3
- package/dist/cjs/src/pro/alpaca.js +5 -3
- package/dist/cjs/src/pro/apex.js +5 -3
- package/dist/cjs/src/pro/ascendex.js +5 -3
- package/dist/cjs/src/pro/bequant.js +6 -4
- package/dist/cjs/src/pro/binance.js +8 -8
- package/dist/cjs/src/pro/binancecoinm.js +6 -4
- package/dist/cjs/src/pro/binanceus.js +6 -4
- package/dist/cjs/src/pro/binanceusdm.js +5 -3
- package/dist/cjs/src/pro/bingx.js +5 -3
- package/dist/cjs/src/pro/bitfinex.js +5 -3
- package/dist/cjs/src/pro/bitget.js +6 -4
- package/dist/cjs/src/pro/bithumb.js +5 -3
- package/dist/cjs/src/pro/bitmart.js +5 -3
- package/dist/cjs/src/pro/bitmex.js +6 -4
- package/dist/cjs/src/pro/bitopro.js +4 -2
- package/dist/cjs/src/pro/bitrue.js +5 -3
- package/dist/cjs/src/pro/bitstamp.js +6 -4
- package/dist/cjs/src/pro/bittrade.js +4 -2
- package/dist/cjs/src/pro/bitvavo.js +8 -4
- package/dist/cjs/src/pro/blockchaincom.js +5 -3
- package/dist/cjs/src/pro/blofin.js +5 -3
- package/dist/cjs/src/pro/bybit.js +6 -3
- package/dist/cjs/src/pro/cex.js +6 -3
- package/dist/cjs/src/pro/coinbase.js +5 -3
- package/dist/cjs/src/pro/coinbaseadvanced.js +5 -3
- package/dist/cjs/src/pro/coinbaseexchange.js +7 -5
- package/dist/cjs/src/pro/coinbaseinternational.js +5 -3
- package/dist/cjs/src/pro/coincatch.js +5 -3
- package/dist/cjs/src/pro/coincheck.js +5 -3
- package/dist/cjs/src/pro/coinex.js +6 -4
- package/dist/cjs/src/pro/coinone.js +5 -3
- package/dist/cjs/src/pro/cryptocom.js +5 -3
- package/dist/cjs/src/pro/defx.js +5 -3
- package/dist/cjs/src/pro/deribit.js +5 -3
- package/dist/cjs/src/pro/derive.js +4 -2
- package/dist/cjs/src/pro/exmo.js +5 -3
- package/dist/cjs/src/pro/gate.js +6 -4
- package/dist/cjs/src/pro/gateio.js +5 -3
- package/dist/cjs/src/pro/gemini.js +5 -3
- package/dist/cjs/src/pro/hashkey.js +5 -3
- package/dist/cjs/src/pro/hitbtc.js +5 -3
- package/dist/cjs/src/pro/hollaex.js +5 -3
- package/dist/cjs/src/pro/htx.js +6 -4
- package/dist/cjs/src/pro/huobi.js +5 -3
- package/dist/cjs/src/pro/hyperliquid.js +108 -15
- package/dist/cjs/src/pro/independentreserve.js +5 -3
- package/dist/cjs/src/pro/kraken.js +5 -3
- package/dist/cjs/src/pro/krakenfutures.js +7 -4
- package/dist/cjs/src/pro/kucoin.js +7 -4
- package/dist/cjs/src/pro/kucoinfutures.js +7 -4
- package/dist/cjs/src/pro/lbank.js +4 -3
- package/dist/cjs/src/pro/luno.js +5 -3
- package/dist/cjs/src/pro/mexc.js +343 -160
- package/dist/cjs/src/pro/modetrade.js +4 -2
- package/dist/cjs/src/pro/myokx.js +5 -3
- package/dist/cjs/src/pro/ndax.js +5 -3
- package/dist/cjs/src/pro/okcoin.js +5 -3
- package/dist/cjs/src/pro/okx.js +10 -7
- package/dist/cjs/src/pro/okxus.js +5 -3
- package/dist/cjs/src/pro/onetrading.js +5 -3
- package/dist/cjs/src/pro/oxfun.js +6 -4
- package/dist/cjs/src/pro/p2b.js +5 -3
- package/dist/cjs/src/pro/paradex.js +5 -3
- package/dist/cjs/src/pro/phemex.js +5 -3
- package/dist/cjs/src/pro/poloniex.js +5 -3
- package/dist/cjs/src/pro/probit.js +5 -3
- package/dist/cjs/src/pro/tradeogre.js +5 -3
- package/dist/cjs/src/pro/upbit.js +5 -3
- package/dist/cjs/src/pro/vertex.js +4 -2
- package/dist/cjs/src/pro/whitebit.js +5 -3
- package/dist/cjs/src/pro/woo.js +4 -2
- package/dist/cjs/src/pro/woofipro.js +4 -2
- package/dist/cjs/src/pro/xt.js +5 -3
- package/dist/cjs/src/probit.js +40 -3
- package/dist/cjs/src/protobuf/mexc/compiled.cjs.js +7180 -0
- package/dist/cjs/src/static_dependencies/ethers/abi-coder.js +1 -7
- package/dist/cjs/src/static_dependencies/ethers/address/address.js +1 -1
- package/dist/cjs/src/static_dependencies/ethers/coders/abstract-coder.js +2 -8
- package/dist/cjs/src/static_dependencies/ethers/coders/address.js +0 -1
- package/dist/cjs/src/static_dependencies/ethers/coders/anonymous.js +0 -1
- package/dist/cjs/src/static_dependencies/ethers/coders/array.js +0 -1
- package/dist/cjs/src/static_dependencies/ethers/coders/boolean.js +0 -1
- package/dist/cjs/src/static_dependencies/ethers/coders/bytes.js +0 -1
- package/dist/cjs/src/static_dependencies/ethers/coders/fixed-bytes.js +0 -1
- package/dist/cjs/src/static_dependencies/ethers/coders/null.js +0 -1
- package/dist/cjs/src/static_dependencies/ethers/coders/number.js +0 -1
- package/dist/cjs/src/static_dependencies/ethers/coders/string.js +0 -1
- package/dist/cjs/src/static_dependencies/ethers/coders/tuple.js +0 -1
- package/dist/cjs/src/static_dependencies/ethers/fragments.js +2 -8
- package/dist/cjs/src/static_dependencies/ethers/hash/typed-data.js +2 -8
- package/dist/cjs/src/static_dependencies/ethers/index.js +10 -1
- package/dist/cjs/src/static_dependencies/ethers/interface.js +2 -8
- package/dist/cjs/src/static_dependencies/ethers/typed.js +2 -8
- package/dist/cjs/src/static_dependencies/ethers/utils/base58.js +13 -1
- package/dist/cjs/src/static_dependencies/ethers/utils/data.js +6 -1
- package/dist/cjs/src/static_dependencies/ethers/utils/errors.js +9 -1
- package/dist/cjs/src/static_dependencies/ethers/utils/events.js +2 -8
- package/dist/cjs/src/static_dependencies/ethers/utils/fixednumber.js +2 -8
- package/dist/cjs/src/static_dependencies/ethers/utils/index.js +7 -1
- package/dist/cjs/src/static_dependencies/ethers/utils/maths.js +5 -1
- package/dist/cjs/src/static_dependencies/ethers/utils/properties.js +0 -6
- package/dist/cjs/src/static_dependencies/ethers/utils/utf8.js +8 -1
- package/dist/cjs/src/static_dependencies/fflake/browser.js +1 -1
- package/dist/cjs/src/static_dependencies/jsencrypt/JSEncrypt.js +0 -1
- package/dist/cjs/src/static_dependencies/jsencrypt/JSEncryptRSAKey.js +0 -1
- package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/asn1.js +1 -1
- package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/base64.js +0 -6
- package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/hex.js +0 -6
- package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/int10.js +0 -6
- package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/base64.js +0 -1
- package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.js +1 -1
- package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/prng4.js +0 -6
- 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 +0 -6
- 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 +0 -6
- package/dist/cjs/src/static_dependencies/messagepack/msgpack.js +0 -6
- 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 +0 -1
- 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 +0 -6
- 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 +0 -6
- package/dist/cjs/src/static_dependencies/noble-hashes/_sha2.js +0 -1
- package/dist/cjs/src/static_dependencies/noble-hashes/_u64.js +0 -6
- package/dist/cjs/src/static_dependencies/noble-hashes/crypto.js +0 -6
- package/dist/cjs/src/static_dependencies/noble-hashes/hmac.js +0 -1
- package/dist/cjs/src/static_dependencies/noble-hashes/md5.js +0 -1
- package/dist/cjs/src/static_dependencies/noble-hashes/sha1.js +0 -1
- package/dist/cjs/src/static_dependencies/noble-hashes/sha256.js +0 -1
- package/dist/cjs/src/static_dependencies/noble-hashes/sha3.js +0 -1
- package/dist/cjs/src/static_dependencies/noble-hashes/sha512.js +0 -1
- package/dist/cjs/src/static_dependencies/noble-hashes/utils.js +1 -1
- package/dist/cjs/src/static_dependencies/node-fetch/body.js +5 -1
- package/dist/cjs/src/static_dependencies/node-fetch/errors/abort-error.js +0 -1
- package/dist/cjs/src/static_dependencies/node-fetch/errors/base.js +0 -6
- package/dist/cjs/src/static_dependencies/node-fetch/errors/fetch-error.js +0 -1
- package/dist/cjs/src/static_dependencies/node-fetch/headers.js +5 -1
- package/dist/cjs/src/static_dependencies/node-fetch/index.js +14 -8
- package/dist/cjs/src/static_dependencies/node-fetch/request.js +7 -1
- package/dist/cjs/src/static_dependencies/node-fetch/response.js +8 -2
- package/dist/cjs/src/static_dependencies/node-fetch/utils/get-search.js +0 -6
- package/dist/cjs/src/static_dependencies/node-fetch/utils/is-redirect.js +0 -6
- package/dist/cjs/src/static_dependencies/node-fetch/utils/is.js +0 -6
- package/dist/cjs/src/static_dependencies/node-fetch/utils/referrer.js +0 -1
- package/dist/cjs/src/static_dependencies/proxies/agent-base/index.js +0 -1
- package/dist/cjs/src/static_dependencies/proxies/http-proxy-agent/index.js +0 -1
- package/dist/cjs/src/static_dependencies/proxies/https-proxy-agent/index.js +0 -1
- package/dist/cjs/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.js +0 -6
- package/dist/cjs/src/static_dependencies/qs/index.cjs.js +3 -1
- package/dist/cjs/src/static_dependencies/scure-base/index.js +0 -6
- 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 +0 -6
- package/dist/cjs/src/static_dependencies/starknet/types/lib/contract/abi.js +0 -6
- package/dist/cjs/src/static_dependencies/starknet/types/lib/contract/index.js +0 -6
- package/dist/cjs/src/static_dependencies/starknet/types/lib/index.js +0 -6
- package/dist/cjs/src/static_dependencies/starknet/types/typedData.js +0 -6
- package/dist/cjs/src/static_dependencies/starknet/utils/assert.js +2 -6
- 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 +0 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/cairo.js +0 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.js +0 -6
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.js +0 -6
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.js +0 -6
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/formatter.js +3 -2
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/index.js +8 -8
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/parser/index.js +0 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.js +0 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.js +0 -6
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/propertyOrder.js +4 -3
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/requestParser.js +1 -2
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/responseParser.js +4 -3
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/tuple.js +4 -2
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/validate.js +32 -27
- package/dist/cjs/src/static_dependencies/starknet/utils/encode.js +0 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/hash/classHash.js +3 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/merkle.js +0 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/num.js +0 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/selector.js +0 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/shortString.js +0 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/typedData.js +3 -3
- package/dist/cjs/src/static_dependencies/watchable/src/unpromise.js +0 -6
- package/dist/cjs/src/static_dependencies/zklink/zklink-sdk-web.js +0 -6
- package/dist/cjs/src/timex.js +4 -3
- package/dist/cjs/src/tokocrypto.js +5 -3
- package/dist/cjs/src/tradeogre.js +5 -3
- package/dist/cjs/src/upbit.js +5 -3
- package/dist/cjs/src/vertex.js +5 -3
- package/dist/cjs/src/wavesexchange.js +5 -3
- package/dist/cjs/src/whitebit.js +5 -3
- package/dist/cjs/src/woo.js +5 -3
- package/dist/cjs/src/woofipro.js +101 -3
- package/dist/cjs/src/xt.js +5 -3
- package/dist/cjs/src/yobit.js +5 -3
- package/dist/cjs/src/zaif.js +5 -3
- package/dist/cjs/src/zonda.js +5 -3
- package/js/ccxt.d.ts +5 -2
- package/js/ccxt.js +4 -8
- package/js/src/abstract/alpaca.js +0 -6
- package/js/src/abstract/apex.js +0 -6
- package/js/src/abstract/ascendex.js +0 -6
- package/js/src/abstract/bequant.js +0 -6
- package/js/src/abstract/bigone.js +0 -6
- package/js/src/abstract/binance.js +0 -6
- package/js/src/abstract/binancecoinm.js +0 -6
- package/js/src/abstract/binanceus.js +0 -6
- package/js/src/abstract/binanceusdm.js +0 -6
- package/js/src/abstract/bingx.d.ts +1 -0
- package/js/src/abstract/bingx.js +0 -6
- package/js/src/abstract/bit2c.js +0 -6
- package/js/src/abstract/bitbank.js +0 -6
- package/js/src/abstract/bitbns.js +0 -6
- package/js/src/abstract/bitfinex.js +0 -6
- package/js/src/abstract/bitflyer.js +0 -6
- package/js/src/abstract/bitget.d.ts +6 -0
- package/js/src/abstract/bitget.js +0 -6
- package/js/src/abstract/bithumb.js +0 -6
- package/js/src/abstract/bitmart.js +0 -6
- package/js/src/abstract/bitmex.js +0 -6
- package/js/src/abstract/bitopro.js +0 -6
- package/js/src/abstract/bitrue.js +0 -6
- package/js/src/abstract/bitso.js +0 -6
- package/js/src/abstract/bitstamp.js +0 -6
- package/js/src/abstract/bitteam.js +0 -6
- package/js/src/abstract/bittrade.js +0 -6
- package/js/src/abstract/bitvavo.js +0 -6
- package/js/src/abstract/blockchaincom.js +0 -6
- package/js/src/abstract/blofin.js +0 -6
- package/js/src/abstract/btcalpha.js +0 -6
- package/js/src/abstract/btcbox.js +0 -6
- package/js/src/abstract/btcmarkets.js +0 -6
- package/js/src/abstract/btcturk.js +0 -6
- package/js/src/abstract/bybit.js +0 -6
- package/js/src/abstract/cex.js +0 -6
- package/js/src/abstract/coinbase.js +0 -6
- package/js/src/abstract/coinbaseadvanced.js +0 -6
- package/js/src/abstract/coinbaseexchange.js +0 -6
- package/js/src/abstract/coinbaseinternational.js +0 -6
- package/js/src/abstract/coincatch.js +0 -6
- package/js/src/abstract/coincheck.js +0 -6
- package/js/src/abstract/coinex.js +0 -6
- package/js/src/abstract/coinmate.js +0 -6
- package/js/src/abstract/coinmetro.js +0 -6
- package/js/src/abstract/coinone.js +0 -6
- package/js/src/abstract/coinsph.js +0 -6
- package/js/src/abstract/coinspot.js +0 -6
- package/js/src/abstract/cryptocom.js +0 -6
- package/js/src/abstract/cryptomus.js +0 -6
- package/js/src/abstract/defx.js +0 -6
- package/js/src/abstract/delta.js +0 -6
- package/js/src/abstract/deribit.js +0 -6
- package/js/src/abstract/derive.js +0 -6
- package/js/src/abstract/digifinex.js +0 -6
- package/js/src/abstract/ellipx.js +0 -6
- package/js/src/abstract/exmo.js +0 -6
- package/js/src/abstract/fmfwio.js +0 -6
- package/js/src/abstract/foxbit.js +0 -6
- package/js/src/abstract/gate.js +0 -6
- package/js/src/abstract/gateio.js +0 -6
- package/js/src/abstract/gemini.js +0 -6
- package/js/src/abstract/hashkey.js +0 -6
- package/js/src/abstract/hibachi.d.ts +29 -0
- package/js/src/abstract/hibachi.js +5 -0
- package/js/src/abstract/hitbtc.js +0 -6
- package/js/src/abstract/hollaex.js +0 -6
- package/js/src/abstract/htx.js +0 -6
- package/js/src/abstract/huobi.js +0 -6
- package/js/src/abstract/hyperliquid.js +0 -6
- package/js/src/abstract/independentreserve.js +0 -6
- package/js/src/abstract/indodax.js +0 -6
- package/js/src/abstract/kraken.js +0 -6
- package/js/src/abstract/krakenfutures.js +0 -6
- package/js/src/abstract/kucoin.js +0 -6
- package/js/src/abstract/kucoinfutures.js +0 -6
- package/js/src/abstract/latoken.js +0 -6
- package/js/src/abstract/lbank.js +0 -6
- package/js/src/abstract/luno.js +0 -6
- package/js/src/abstract/mercado.js +0 -6
- package/js/src/abstract/mexc.js +0 -6
- package/js/src/abstract/modetrade.js +0 -6
- package/js/src/abstract/myokx.js +0 -6
- package/js/src/abstract/ndax.js +0 -6
- package/js/src/abstract/novadax.js +0 -6
- package/js/src/abstract/oceanex.js +0 -6
- package/js/src/abstract/okcoin.js +0 -6
- package/js/src/abstract/okx.js +0 -6
- package/js/src/abstract/okxus.js +0 -6
- package/js/src/abstract/onetrading.js +0 -6
- package/js/src/abstract/oxfun.js +0 -6
- package/js/src/abstract/p2b.js +0 -6
- package/js/src/abstract/paradex.js +0 -6
- package/js/src/abstract/paymium.js +0 -6
- package/js/src/abstract/phemex.js +0 -6
- package/js/src/abstract/poloniex.js +0 -6
- package/js/src/abstract/probit.js +0 -6
- package/js/src/abstract/timex.js +0 -6
- package/js/src/abstract/tokocrypto.js +0 -6
- package/js/src/abstract/tradeogre.js +0 -6
- package/js/src/abstract/upbit.js +0 -6
- package/js/src/abstract/vertex.js +0 -6
- package/js/src/abstract/wavesexchange.js +0 -6
- package/js/src/abstract/whitebit.js +0 -6
- package/js/src/abstract/woo.js +0 -6
- package/js/src/abstract/woofipro.js +0 -6
- package/js/src/abstract/xt.js +0 -6
- package/js/src/abstract/yobit.js +0 -6
- package/js/src/abstract/zaif.js +0 -6
- package/js/src/abstract/zonda.js +0 -6
- package/js/src/alpaca.d.ts +1 -1
- package/js/src/alpaca.js +0 -6
- package/js/src/apex.d.ts +1 -1
- package/js/src/apex.js +0 -6
- package/js/src/ascendex.d.ts +1 -1
- package/js/src/ascendex.js +0 -6
- package/js/src/base/Exchange.d.ts +9 -7
- package/js/src/base/Exchange.js +50 -16
- package/js/src/base/Precise.js +0 -6
- package/js/src/base/errorHierarchy.js +0 -6
- package/js/src/base/errors.js +0 -6
- package/js/src/base/functions/crypto.js +0 -6
- package/js/src/base/functions/encode.js +0 -6
- package/js/src/base/functions/generic.js +0 -6
- package/js/src/base/functions/misc.js +0 -6
- package/js/src/base/functions/number.js +0 -6
- package/js/src/base/functions/platform.js +0 -6
- package/js/src/base/functions/rsa.js +0 -6
- package/js/src/base/functions/string.js +0 -6
- package/js/src/base/functions/throttle.js +0 -6
- package/js/src/base/functions/time.js +0 -6
- package/js/src/base/functions/totp.js +0 -6
- package/js/src/base/functions/type.js +0 -6
- package/js/src/base/functions.js +0 -6
- package/js/src/base/types.d.ts +2 -1
- package/js/src/base/types.js +0 -6
- package/js/src/base/ws/Cache.js +0 -6
- package/js/src/base/ws/Client.d.ts +1 -0
- package/js/src/base/ws/Client.js +5 -7
- package/js/src/base/ws/Future.js +0 -6
- package/js/src/base/ws/OrderBook.js +0 -6
- package/js/src/base/ws/OrderBookSide.js +0 -6
- package/js/src/base/ws/WsClient.js +0 -6
- package/js/src/base/ws/functions.js +0 -6
- package/js/src/bequant.js +0 -6
- package/js/src/bigone.d.ts +1 -1
- package/js/src/bigone.js +0 -6
- package/js/src/binance.d.ts +2 -2
- package/js/src/binance.js +9 -12
- package/js/src/binancecoinm.js +0 -6
- package/js/src/binanceus.js +0 -6
- package/js/src/binanceusdm.js +0 -6
- package/js/src/bingx.d.ts +3 -2
- package/js/src/bingx.js +32 -8
- package/js/src/bit2c.js +0 -6
- package/js/src/bitbank.d.ts +1 -1
- package/js/src/bitbank.js +0 -6
- package/js/src/bitbns.js +0 -6
- package/js/src/bitfinex.d.ts +1 -1
- package/js/src/bitfinex.js +3 -6
- package/js/src/bitflyer.d.ts +1 -1
- package/js/src/bitflyer.js +0 -6
- package/js/src/bitget.d.ts +77 -9
- package/js/src/bitget.js +2172 -555
- package/js/src/bithumb.d.ts +1 -1
- package/js/src/bithumb.js +0 -6
- package/js/src/bitmart.d.ts +2 -2
- package/js/src/bitmart.js +0 -6
- package/js/src/bitmex.d.ts +2 -2
- package/js/src/bitmex.js +1 -6
- package/js/src/bitopro.d.ts +1 -1
- package/js/src/bitopro.js +0 -6
- package/js/src/bitrue.d.ts +2 -2
- package/js/src/bitrue.js +0 -6
- package/js/src/bitso.d.ts +1 -1
- package/js/src/bitso.js +0 -6
- package/js/src/bitstamp.d.ts +1 -1
- package/js/src/bitstamp.js +0 -6
- package/js/src/bitteam.js +0 -6
- package/js/src/bittrade.d.ts +1 -1
- package/js/src/bittrade.js +0 -6
- package/js/src/bitvavo.d.ts +1 -1
- package/js/src/bitvavo.js +0 -6
- package/js/src/blockchaincom.d.ts +1 -1
- package/js/src/blockchaincom.js +0 -6
- package/js/src/blofin.d.ts +1 -1
- package/js/src/blofin.js +0 -6
- package/js/src/btcalpha.js +0 -6
- package/js/src/btcbox.js +0 -6
- package/js/src/btcmarkets.d.ts +1 -1
- package/js/src/btcmarkets.js +0 -6
- package/js/src/btcturk.js +0 -6
- package/js/src/bybit.d.ts +2 -2
- package/js/src/bybit.js +6 -7
- package/js/src/cex.js +0 -6
- package/js/src/coinbase.d.ts +1 -1
- package/js/src/coinbase.js +0 -6
- package/js/src/coinbaseadvanced.js +0 -6
- package/js/src/coinbaseexchange.d.ts +1 -1
- package/js/src/coinbaseexchange.js +0 -6
- package/js/src/coinbaseinternational.d.ts +1 -1
- package/js/src/coinbaseinternational.js +0 -6
- package/js/src/coincatch.d.ts +2 -2
- package/js/src/coincatch.js +0 -6
- package/js/src/coincheck.js +0 -6
- package/js/src/coinex.d.ts +13 -3
- package/js/src/coinex.js +68 -10
- package/js/src/coinmate.d.ts +1 -1
- package/js/src/coinmate.js +0 -6
- package/js/src/coinmetro.js +0 -6
- package/js/src/coinone.js +0 -6
- package/js/src/coinsph.d.ts +1 -1
- package/js/src/coinsph.js +0 -6
- package/js/src/coinspot.js +0 -6
- package/js/src/cryptocom.d.ts +1 -1
- package/js/src/cryptocom.js +1 -7
- package/js/src/cryptomus.js +0 -6
- package/js/src/defx.d.ts +2 -2
- package/js/src/defx.js +0 -6
- package/js/src/delta.d.ts +1 -1
- package/js/src/delta.js +0 -6
- package/js/src/deribit.d.ts +1 -1
- package/js/src/deribit.js +0 -6
- package/js/src/derive.js +0 -6
- package/js/src/digifinex.d.ts +2 -2
- package/js/src/digifinex.js +0 -6
- package/js/src/ellipx.d.ts +1 -1
- package/js/src/ellipx.js +0 -6
- package/js/src/exmo.d.ts +1 -1
- package/js/src/exmo.js +0 -6
- package/js/src/fmfwio.js +0 -6
- package/js/src/foxbit.d.ts +1 -1
- package/js/src/foxbit.js +3 -9
- package/js/src/gate.d.ts +2 -2
- package/js/src/gate.js +22 -8
- package/js/src/gateio.js +0 -6
- package/js/src/gemini.d.ts +1 -1
- package/js/src/gemini.js +0 -6
- package/js/src/hashkey.d.ts +3 -3
- package/js/src/hashkey.js +0 -6
- package/js/src/hibachi.d.ts +346 -0
- package/js/src/hibachi.js +2131 -0
- package/js/src/hitbtc.d.ts +2 -2
- package/js/src/hitbtc.js +0 -6
- package/js/src/hollaex.d.ts +1 -1
- package/js/src/hollaex.js +0 -6
- package/js/src/htx.d.ts +3 -3
- package/js/src/htx.js +1 -6
- package/js/src/huobi.js +0 -6
- package/js/src/hyperliquid.d.ts +12 -2
- package/js/src/hyperliquid.js +79 -34
- package/js/src/independentreserve.d.ts +1 -1
- package/js/src/independentreserve.js +0 -6
- package/js/src/indodax.d.ts +1 -1
- package/js/src/indodax.js +0 -6
- package/js/src/kraken.d.ts +1 -1
- package/js/src/kraken.js +0 -6
- package/js/src/krakenfutures.d.ts +1 -1
- package/js/src/krakenfutures.js +1 -6
- package/js/src/kucoin.d.ts +2 -2
- package/js/src/kucoin.js +0 -6
- package/js/src/kucoinfutures.d.ts +3 -2
- package/js/src/kucoinfutures.js +1 -6
- package/js/src/latoken.js +0 -6
- package/js/src/lbank.d.ts +1 -1
- package/js/src/lbank.js +1 -7
- package/js/src/luno.js +0 -6
- package/js/src/mercado.d.ts +1 -1
- package/js/src/mercado.js +0 -6
- package/js/src/mexc.d.ts +2 -2
- package/js/src/mexc.js +7 -6
- package/js/src/modetrade.d.ts +26 -3
- package/js/src/modetrade.js +96 -6
- package/js/src/myokx.js +0 -6
- package/js/src/ndax.d.ts +1 -1
- package/js/src/ndax.js +0 -6
- package/js/src/novadax.d.ts +1 -1
- package/js/src/novadax.js +34 -6
- package/js/src/oceanex.js +0 -6
- package/js/src/okcoin.d.ts +1 -1
- package/js/src/okcoin.js +0 -6
- package/js/src/okx.d.ts +2 -2
- package/js/src/okx.js +0 -6
- package/js/src/okxus.js +0 -6
- package/js/src/onetrading.js +33 -6
- package/js/src/oxfun.d.ts +1 -1
- package/js/src/oxfun.js +0 -6
- package/js/src/p2b.js +32 -6
- package/js/src/paradex.d.ts +1 -1
- package/js/src/paradex.js +1 -6
- package/js/src/paymium.js +0 -6
- package/js/src/phemex.d.ts +2 -2
- package/js/src/phemex.js +0 -6
- package/js/src/poloniex.d.ts +2 -2
- package/js/src/poloniex.js +0 -6
- package/js/src/pro/alpaca.d.ts +2 -2
- package/js/src/pro/alpaca.js +0 -6
- package/js/src/pro/apex.d.ts +2 -2
- package/js/src/pro/apex.js +0 -6
- package/js/src/pro/ascendex.d.ts +2 -2
- package/js/src/pro/ascendex.js +0 -6
- package/js/src/pro/bequant.js +0 -6
- package/js/src/pro/binance.d.ts +2 -2
- package/js/src/pro/binance.js +4 -12
- package/js/src/pro/binancecoinm.js +0 -6
- package/js/src/pro/binanceus.js +0 -6
- package/js/src/pro/binanceusdm.js +0 -6
- package/js/src/pro/bingx.js +0 -6
- package/js/src/pro/bitfinex.js +0 -6
- package/js/src/pro/bitget.d.ts +2 -2
- package/js/src/pro/bitget.js +1 -7
- package/js/src/pro/bithumb.d.ts +2 -2
- package/js/src/pro/bithumb.js +0 -6
- package/js/src/pro/bitmart.d.ts +2 -2
- package/js/src/pro/bitmart.js +0 -6
- package/js/src/pro/bitmex.d.ts +3 -3
- package/js/src/pro/bitmex.js +1 -7
- package/js/src/pro/bitopro.js +0 -6
- package/js/src/pro/bitrue.js +0 -6
- package/js/src/pro/bitstamp.d.ts +2 -2
- package/js/src/pro/bitstamp.js +1 -7
- package/js/src/pro/bittrade.d.ts +2 -2
- package/js/src/pro/bittrade.js +0 -6
- package/js/src/pro/bitvavo.d.ts +2 -2
- package/js/src/pro/bitvavo.js +3 -7
- package/js/src/pro/blockchaincom.js +0 -6
- package/js/src/pro/blofin.js +0 -6
- package/js/src/pro/bybit.d.ts +4 -4
- package/js/src/pro/bybit.js +1 -6
- package/js/src/pro/cex.d.ts +2 -2
- package/js/src/pro/cex.js +1 -6
- package/js/src/pro/coinbase.js +0 -6
- package/js/src/pro/coinbaseadvanced.js +0 -6
- package/js/src/pro/coinbaseexchange.d.ts +4 -4
- package/js/src/pro/coinbaseexchange.js +2 -8
- package/js/src/pro/coinbaseinternational.d.ts +2 -2
- package/js/src/pro/coinbaseinternational.js +0 -6
- package/js/src/pro/coincatch.d.ts +2 -2
- package/js/src/pro/coincatch.js +0 -6
- package/js/src/pro/coincheck.js +0 -6
- package/js/src/pro/coinex.js +1 -7
- package/js/src/pro/coinone.d.ts +2 -2
- package/js/src/pro/coinone.js +0 -6
- package/js/src/pro/cryptocom.d.ts +2 -2
- package/js/src/pro/cryptocom.js +0 -6
- package/js/src/pro/defx.js +0 -6
- package/js/src/pro/deribit.js +0 -6
- package/js/src/pro/derive.d.ts +2 -2
- package/js/src/pro/derive.js +0 -6
- package/js/src/pro/exmo.js +0 -6
- package/js/src/pro/gate.d.ts +3 -3
- package/js/src/pro/gate.js +1 -7
- package/js/src/pro/gateio.js +0 -6
- package/js/src/pro/gemini.js +0 -6
- package/js/src/pro/hashkey.js +0 -6
- package/js/src/pro/hitbtc.js +0 -6
- package/js/src/pro/hollaex.d.ts +2 -2
- package/js/src/pro/hollaex.js +0 -6
- package/js/src/pro/htx.d.ts +2 -2
- package/js/src/pro/htx.js +1 -7
- package/js/src/pro/huobi.js +0 -6
- package/js/src/pro/hyperliquid.d.ts +28 -2
- package/js/src/pro/hyperliquid.js +103 -18
- package/js/src/pro/independentreserve.js +0 -6
- package/js/src/pro/kraken.d.ts +2 -2
- package/js/src/pro/kraken.js +0 -6
- package/js/src/pro/krakenfutures.d.ts +3 -3
- package/js/src/pro/krakenfutures.js +2 -7
- package/js/src/pro/kucoin.d.ts +2 -2
- package/js/src/pro/kucoin.js +2 -7
- package/js/src/pro/kucoinfutures.d.ts +2 -2
- package/js/src/pro/kucoinfutures.js +2 -7
- package/js/src/pro/lbank.js +0 -6
- package/js/src/pro/luno.js +0 -6
- package/js/src/pro/mexc.d.ts +9 -6
- package/js/src/pro/mexc.js +338 -163
- package/js/src/pro/modetrade.d.ts +2 -2
- package/js/src/pro/modetrade.js +0 -6
- package/js/src/pro/myokx.js +0 -6
- package/js/src/pro/ndax.js +0 -6
- package/js/src/pro/okcoin.d.ts +2 -2
- package/js/src/pro/okcoin.js +0 -6
- package/js/src/pro/okx.d.ts +4 -4
- package/js/src/pro/okx.js +5 -10
- package/js/src/pro/okxus.js +0 -6
- package/js/src/pro/onetrading.d.ts +2 -2
- package/js/src/pro/onetrading.js +0 -6
- package/js/src/pro/oxfun.js +1 -7
- package/js/src/pro/p2b.d.ts +2 -2
- package/js/src/pro/p2b.js +0 -6
- package/js/src/pro/paradex.d.ts +2 -2
- package/js/src/pro/paradex.js +0 -6
- package/js/src/pro/phemex.js +0 -6
- package/js/src/pro/poloniex.d.ts +2 -2
- package/js/src/pro/poloniex.js +0 -6
- package/js/src/pro/probit.d.ts +2 -2
- package/js/src/pro/probit.js +0 -6
- package/js/src/pro/tradeogre.js +0 -6
- package/js/src/pro/upbit.js +0 -6
- package/js/src/pro/vertex.d.ts +2 -2
- package/js/src/pro/vertex.js +0 -6
- package/js/src/pro/whitebit.d.ts +2 -2
- package/js/src/pro/whitebit.js +0 -6
- package/js/src/pro/woo.d.ts +2 -2
- package/js/src/pro/woo.js +0 -6
- package/js/src/pro/woofipro.d.ts +2 -2
- package/js/src/pro/woofipro.js +0 -6
- package/js/src/pro/xt.js +0 -6
- package/js/src/probit.d.ts +1 -1
- package/js/src/probit.js +35 -6
- package/js/src/protobuf/mexc/compiled.cjs +7180 -0
- package/js/src/protobuf/mexc/compiled.d.cts +2 -0
- package/js/src/static_dependencies/ethers/abi-coder.js +0 -6
- package/js/src/static_dependencies/ethers/address/address.js +0 -6
- package/js/src/static_dependencies/ethers/address/checks.js +0 -6
- package/js/src/static_dependencies/ethers/address/contract-address.js +0 -6
- package/js/src/static_dependencies/ethers/address/index.js +0 -6
- package/js/src/static_dependencies/ethers/bytes32.js +0 -6
- package/js/src/static_dependencies/ethers/coders/abstract-coder.js +0 -6
- package/js/src/static_dependencies/ethers/coders/address.js +0 -6
- package/js/src/static_dependencies/ethers/coders/anonymous.js +0 -6
- package/js/src/static_dependencies/ethers/coders/array.js +0 -6
- package/js/src/static_dependencies/ethers/coders/boolean.js +0 -6
- package/js/src/static_dependencies/ethers/coders/bytes.js +0 -6
- package/js/src/static_dependencies/ethers/coders/fixed-bytes.js +0 -6
- package/js/src/static_dependencies/ethers/coders/null.js +0 -6
- package/js/src/static_dependencies/ethers/coders/number.js +0 -6
- package/js/src/static_dependencies/ethers/coders/string.js +0 -6
- package/js/src/static_dependencies/ethers/coders/tuple.js +0 -6
- package/js/src/static_dependencies/ethers/fragments.js +0 -6
- package/js/src/static_dependencies/ethers/hash/index.js +0 -6
- package/js/src/static_dependencies/ethers/hash/solidity.js +0 -6
- package/js/src/static_dependencies/ethers/hash/typed-data.js +0 -6
- package/js/src/static_dependencies/ethers/index.js +0 -6
- package/js/src/static_dependencies/ethers/interface.js +0 -6
- package/js/src/static_dependencies/ethers/typed.js +0 -6
- package/js/src/static_dependencies/ethers/utils/base58.js +0 -6
- package/js/src/static_dependencies/ethers/utils/base64-browser.js +0 -6
- package/js/src/static_dependencies/ethers/utils/base64.js +0 -6
- package/js/src/static_dependencies/ethers/utils/data.js +0 -6
- package/js/src/static_dependencies/ethers/utils/errors.js +0 -6
- package/js/src/static_dependencies/ethers/utils/events.js +0 -6
- package/js/src/static_dependencies/ethers/utils/fixednumber.js +0 -6
- package/js/src/static_dependencies/ethers/utils/index.js +0 -6
- package/js/src/static_dependencies/ethers/utils/maths.js +0 -6
- package/js/src/static_dependencies/ethers/utils/properties.js +0 -6
- package/js/src/static_dependencies/ethers/utils/rlp-decode.js +0 -6
- package/js/src/static_dependencies/ethers/utils/rlp-encode.js +0 -6
- package/js/src/static_dependencies/ethers/utils/rlp.js +0 -6
- package/js/src/static_dependencies/ethers/utils/units.js +0 -6
- package/js/src/static_dependencies/ethers/utils/utf8.js +0 -6
- package/js/src/static_dependencies/ethers/utils/uuid.js +0 -6
- package/js/src/static_dependencies/fflake/browser.js +0 -6
- package/js/src/static_dependencies/jsencrypt/JSEncrypt.js +0 -6
- package/js/src/static_dependencies/jsencrypt/JSEncryptRSAKey.js +0 -6
- package/js/src/static_dependencies/jsencrypt/index.js +0 -6
- package/js/src/static_dependencies/jsencrypt/lib/asn1js/asn1.js +0 -6
- package/js/src/static_dependencies/jsencrypt/lib/asn1js/base64.js +0 -6
- package/js/src/static_dependencies/jsencrypt/lib/asn1js/hex.js +0 -6
- package/js/src/static_dependencies/jsencrypt/lib/asn1js/int10.js +0 -6
- package/js/src/static_dependencies/jsencrypt/lib/asn1js/oids.js +0 -6
- package/js/src/static_dependencies/jsencrypt/lib/jsbn/base64.js +0 -6
- package/js/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.js +0 -6
- package/js/src/static_dependencies/jsencrypt/lib/jsbn/prng4.js +0 -6
- package/js/src/static_dependencies/jsencrypt/lib/jsbn/rng.js +0 -6
- package/js/src/static_dependencies/jsencrypt/lib/jsbn/rsa.js +0 -6
- package/js/src/static_dependencies/jsencrypt/lib/jsbn/util.js +0 -6
- package/js/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.js +0 -6
- package/js/src/static_dependencies/jsencrypt/lib/jsrsasign/yahoo.js +0 -6
- package/js/src/static_dependencies/messagepack/msgpack.js +0 -6
- package/js/src/static_dependencies/noble-curves/_shortw_utils.js +0 -6
- package/js/src/static_dependencies/noble-curves/abstract/curve.js +0 -6
- package/js/src/static_dependencies/noble-curves/abstract/edwards.js +0 -6
- package/js/src/static_dependencies/noble-curves/abstract/hash-to-curve.js +0 -6
- package/js/src/static_dependencies/noble-curves/abstract/modular.js +0 -6
- package/js/src/static_dependencies/noble-curves/abstract/montgomery.js +0 -6
- package/js/src/static_dependencies/noble-curves/abstract/poseidon.js +0 -6
- package/js/src/static_dependencies/noble-curves/abstract/utils.js +0 -6
- package/js/src/static_dependencies/noble-curves/abstract/weierstrass.js +0 -6
- package/js/src/static_dependencies/noble-curves/bn.js +0 -6
- package/js/src/static_dependencies/noble-curves/ed25519.js +0 -6
- package/js/src/static_dependencies/noble-curves/ed448.js +0 -6
- package/js/src/static_dependencies/noble-curves/index.js +0 -6
- package/js/src/static_dependencies/noble-curves/jubjub.js +0 -6
- package/js/src/static_dependencies/noble-curves/p256.js +0 -6
- package/js/src/static_dependencies/noble-curves/p384.js +0 -6
- package/js/src/static_dependencies/noble-curves/p521.js +0 -6
- package/js/src/static_dependencies/noble-curves/pasta.js +0 -6
- package/js/src/static_dependencies/noble-curves/secp256k1.js +0 -6
- package/js/src/static_dependencies/noble-hashes/_assert.js +0 -6
- package/js/src/static_dependencies/noble-hashes/_blake2.js +0 -6
- package/js/src/static_dependencies/noble-hashes/_sha2.js +0 -6
- package/js/src/static_dependencies/noble-hashes/_u64.js +0 -6
- package/js/src/static_dependencies/noble-hashes/argon2.js +0 -6
- package/js/src/static_dependencies/noble-hashes/blake2b.js +0 -6
- package/js/src/static_dependencies/noble-hashes/blake2s.js +0 -6
- package/js/src/static_dependencies/noble-hashes/blake3.js +0 -6
- package/js/src/static_dependencies/noble-hashes/crypto.js +0 -6
- package/js/src/static_dependencies/noble-hashes/cryptoNode.js +0 -6
- package/js/src/static_dependencies/noble-hashes/eskdf.js +0 -6
- package/js/src/static_dependencies/noble-hashes/hkdf.js +0 -6
- package/js/src/static_dependencies/noble-hashes/hmac.js +0 -6
- package/js/src/static_dependencies/noble-hashes/index.js +0 -6
- package/js/src/static_dependencies/noble-hashes/md5.js +0 -6
- package/js/src/static_dependencies/noble-hashes/pbkdf2.js +0 -6
- package/js/src/static_dependencies/noble-hashes/ripemd160.js +0 -6
- package/js/src/static_dependencies/noble-hashes/scrypt.js +0 -6
- package/js/src/static_dependencies/noble-hashes/sha1.js +0 -6
- package/js/src/static_dependencies/noble-hashes/sha256.js +0 -6
- package/js/src/static_dependencies/noble-hashes/sha3-addons.js +0 -6
- package/js/src/static_dependencies/noble-hashes/sha3.js +0 -6
- package/js/src/static_dependencies/noble-hashes/sha512.js +0 -6
- package/js/src/static_dependencies/noble-hashes/utils.js +0 -6
- package/js/src/static_dependencies/node-fetch/body.js +0 -6
- package/js/src/static_dependencies/node-fetch/errors/abort-error.js +0 -6
- package/js/src/static_dependencies/node-fetch/errors/base.js +0 -6
- package/js/src/static_dependencies/node-fetch/errors/fetch-error.js +0 -6
- package/js/src/static_dependencies/node-fetch/headers.js +0 -6
- package/js/src/static_dependencies/node-fetch/index.js +0 -6
- package/js/src/static_dependencies/node-fetch/request.js +0 -6
- package/js/src/static_dependencies/node-fetch/response.js +0 -6
- package/js/src/static_dependencies/node-fetch/utils/get-search.js +0 -6
- package/js/src/static_dependencies/node-fetch/utils/is-redirect.js +0 -6
- package/js/src/static_dependencies/node-fetch/utils/is.js +0 -6
- package/js/src/static_dependencies/node-fetch/utils/referrer.js +0 -6
- package/js/src/static_dependencies/proxies/agent-base/helpers.js +0 -6
- package/js/src/static_dependencies/proxies/agent-base/index.js +0 -6
- package/js/src/static_dependencies/proxies/http-proxy-agent/index.js +0 -6
- package/js/src/static_dependencies/proxies/https-proxy-agent/index.js +0 -6
- package/js/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.js +0 -6
- package/js/src/static_dependencies/qs/formats.cjs +0 -6
- package/js/src/static_dependencies/qs/index.cjs +0 -6
- package/js/src/static_dependencies/qs/parse.cjs +0 -6
- package/js/src/static_dependencies/qs/stringify.cjs +0 -6
- package/js/src/static_dependencies/qs/utils.cjs +0 -6
- package/js/src/static_dependencies/scure-base/index.js +0 -6
- package/js/src/static_dependencies/scure-starknet/index.js +0 -6
- package/js/src/static_dependencies/starknet/constants.js +0 -6
- package/js/src/static_dependencies/starknet/index.js +0 -6
- package/js/src/static_dependencies/starknet/types/cairoEnum.js +0 -6
- package/js/src/static_dependencies/starknet/types/calldata.js +0 -6
- package/js/src/static_dependencies/starknet/types/index.js +0 -6
- package/js/src/static_dependencies/starknet/types/lib/contract/abi.js +0 -6
- package/js/src/static_dependencies/starknet/types/lib/contract/index.js +0 -6
- package/js/src/static_dependencies/starknet/types/lib/contract/legacy.js +0 -6
- package/js/src/static_dependencies/starknet/types/lib/contract/sierra.js +0 -6
- package/js/src/static_dependencies/starknet/types/lib/index.js +0 -6
- package/js/src/static_dependencies/starknet/types/typedData.js +0 -6
- package/js/src/static_dependencies/starknet/utils/address.js +0 -6
- package/js/src/static_dependencies/starknet/utils/assert.js +0 -6
- package/js/src/static_dependencies/starknet/utils/cairoDataTypes/felt.js +0 -6
- package/js/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.js +0 -6
- package/js/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.js +0 -6
- package/js/src/static_dependencies/starknet/utils/calldata/byteArray.js +0 -6
- package/js/src/static_dependencies/starknet/utils/calldata/cairo.js +0 -6
- package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.js +0 -6
- package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.js +0 -6
- package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.js +0 -6
- package/js/src/static_dependencies/starknet/utils/calldata/enum/index.js +0 -6
- package/js/src/static_dependencies/starknet/utils/calldata/formatter.js +0 -6
- package/js/src/static_dependencies/starknet/utils/calldata/index.js +0 -6
- package/js/src/static_dependencies/starknet/utils/calldata/parser/index.js +0 -6
- package/js/src/static_dependencies/starknet/utils/calldata/parser/interface.js +0 -6
- package/js/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.js +0 -6
- package/js/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.js +0 -6
- package/js/src/static_dependencies/starknet/utils/calldata/propertyOrder.js +0 -6
- package/js/src/static_dependencies/starknet/utils/calldata/requestParser.js +0 -6
- package/js/src/static_dependencies/starknet/utils/calldata/responseParser.js +0 -6
- package/js/src/static_dependencies/starknet/utils/calldata/tuple.js +0 -6
- package/js/src/static_dependencies/starknet/utils/calldata/validate.js +0 -6
- package/js/src/static_dependencies/starknet/utils/encode.js +0 -6
- package/js/src/static_dependencies/starknet/utils/hash/classHash.js +0 -6
- package/js/src/static_dependencies/starknet/utils/hash/index.js +0 -6
- package/js/src/static_dependencies/starknet/utils/merkle.js +0 -6
- package/js/src/static_dependencies/starknet/utils/num.js +0 -6
- package/js/src/static_dependencies/starknet/utils/selector.js +0 -6
- package/js/src/static_dependencies/starknet/utils/shortString.js +0 -6
- package/js/src/static_dependencies/starknet/utils/starknetId.js +0 -6
- package/js/src/static_dependencies/starknet/utils/typedData.js +0 -6
- package/js/src/static_dependencies/starknet/utils/uint256.js +0 -6
- package/js/src/static_dependencies/starknet/utils/url.js +0 -6
- package/js/src/static_dependencies/watchable/src/index.js +0 -6
- package/js/src/static_dependencies/watchable/src/types.js +0 -6
- package/js/src/static_dependencies/watchable/src/unpromise.js +0 -6
- package/js/src/static_dependencies/zklink/zklink-sdk-web.js +0 -6
- package/js/src/timex.js +0 -6
- package/js/src/tokocrypto.d.ts +1 -1
- package/js/src/tokocrypto.js +0 -6
- package/js/src/tradeogre.js +0 -6
- package/js/src/upbit.d.ts +1 -1
- package/js/src/upbit.js +0 -6
- package/js/src/vertex.d.ts +1 -1
- package/js/src/vertex.js +0 -6
- package/js/src/wavesexchange.d.ts +1 -1
- package/js/src/wavesexchange.js +0 -6
- package/js/src/whitebit.d.ts +2 -2
- package/js/src/whitebit.js +0 -6
- package/js/src/woo.d.ts +4 -4
- package/js/src/woo.js +0 -6
- package/js/src/woofipro.d.ts +26 -3
- package/js/src/woofipro.js +96 -6
- package/js/src/xt.d.ts +3 -3
- package/js/src/xt.js +0 -6
- package/js/src/yobit.d.ts +1 -1
- package/js/src/yobit.js +0 -6
- package/js/src/zaif.d.ts +1 -1
- package/js/src/zaif.js +0 -6
- package/js/src/zonda.d.ts +1 -1
- package/js/src/zonda.js +0 -6
- package/package.json +4 -3
|
@@ -0,0 +1,2131 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
import Exchange from './abstract/hibachi.js';
|
|
3
|
+
import { TICK_SIZE } from './base/functions/number.js';
|
|
4
|
+
import { ecdsa } from './base/functions/crypto.js';
|
|
5
|
+
import { sha256 } from './static_dependencies/noble-hashes/sha256.js';
|
|
6
|
+
import { secp256k1 } from './static_dependencies/noble-curves/secp256k1.js';
|
|
7
|
+
import { Precise } from './base/Precise.js';
|
|
8
|
+
import { BadRequest, ExchangeError, OrderNotFound } from './base/errors.js';
|
|
9
|
+
// ---------------------------------------------------------------------------
|
|
10
|
+
/**
|
|
11
|
+
* @class hibachi
|
|
12
|
+
* @augments Exchange
|
|
13
|
+
*/
|
|
14
|
+
export default class hibachi extends Exchange {
|
|
15
|
+
describe() {
|
|
16
|
+
return this.deepExtend(super.describe(), {
|
|
17
|
+
'id': 'hibachi',
|
|
18
|
+
'name': 'Hibachi',
|
|
19
|
+
'countries': ['US'],
|
|
20
|
+
'rateLimit': 100,
|
|
21
|
+
'userAgent': this.userAgents['chrome'],
|
|
22
|
+
'certified': false,
|
|
23
|
+
'pro': false,
|
|
24
|
+
'dex': true,
|
|
25
|
+
'has': {
|
|
26
|
+
'CORS': undefined,
|
|
27
|
+
'spot': false,
|
|
28
|
+
'margin': false,
|
|
29
|
+
'swap': true,
|
|
30
|
+
'future': false,
|
|
31
|
+
'option': false,
|
|
32
|
+
'addMargin': false,
|
|
33
|
+
'cancelAllOrders': true,
|
|
34
|
+
'cancelOrder': true,
|
|
35
|
+
'cancelOrders': true,
|
|
36
|
+
'cancelWithdraw': false,
|
|
37
|
+
'closeAllPositions': false,
|
|
38
|
+
'closePosition': false,
|
|
39
|
+
'createConvertTrade': false,
|
|
40
|
+
'createDepositAddress': false,
|
|
41
|
+
'createMarketBuyOrderWithCost': false,
|
|
42
|
+
'createMarketOrder': false,
|
|
43
|
+
'createMarketOrderWithCost': false,
|
|
44
|
+
'createMarketSellOrderWithCost': false,
|
|
45
|
+
'createOrder': true,
|
|
46
|
+
'createOrders': true,
|
|
47
|
+
'createOrderWithTakeProfitAndStopLoss': false,
|
|
48
|
+
'createReduceOnlyOrder': false,
|
|
49
|
+
'createStopLimitOrder': false,
|
|
50
|
+
'createStopLossOrder': false,
|
|
51
|
+
'createStopMarketOrder': false,
|
|
52
|
+
'createStopOrder': false,
|
|
53
|
+
'createTakeProfitOrder': false,
|
|
54
|
+
'createTrailingAmountOrder': false,
|
|
55
|
+
'createTrailingPercentOrder': false,
|
|
56
|
+
'createTriggerOrder': false,
|
|
57
|
+
'editOrder': true,
|
|
58
|
+
'editOrders': true,
|
|
59
|
+
'fetchAccounts': false,
|
|
60
|
+
'fetchBalance': true,
|
|
61
|
+
'fetchCanceledOrders': false,
|
|
62
|
+
'fetchClosedOrder': false,
|
|
63
|
+
'fetchClosedOrders': false,
|
|
64
|
+
'fetchConvertCurrencies': false,
|
|
65
|
+
'fetchConvertQuote': false,
|
|
66
|
+
'fetchCurrencies': true,
|
|
67
|
+
'fetchDepositAddress': true,
|
|
68
|
+
'fetchDeposits': true,
|
|
69
|
+
'fetchDepositsWithdrawals': false,
|
|
70
|
+
'fetchFundingHistory': false,
|
|
71
|
+
'fetchFundingInterval': false,
|
|
72
|
+
'fetchFundingIntervals': false,
|
|
73
|
+
'fetchFundingRate': true,
|
|
74
|
+
'fetchFundingRateHistory': true,
|
|
75
|
+
'fetchFundingRates': false,
|
|
76
|
+
'fetchIndexOHLCV': false,
|
|
77
|
+
'fetchLedger': true,
|
|
78
|
+
'fetchLeverage': false,
|
|
79
|
+
'fetchMarginAdjustmentHistory': false,
|
|
80
|
+
'fetchMarginMode': false,
|
|
81
|
+
'fetchMarkets': true,
|
|
82
|
+
'fetchMyTrades': true,
|
|
83
|
+
'fetchOHLCV': true,
|
|
84
|
+
'fetchOpenInterest': true,
|
|
85
|
+
'fetchOpenInterestHistory': false,
|
|
86
|
+
'fetchOpenOrder': false,
|
|
87
|
+
'fetchOpenOrders': true,
|
|
88
|
+
'fetchOrder': true,
|
|
89
|
+
'fetchOrderBook': true,
|
|
90
|
+
'fetchOrders': false,
|
|
91
|
+
'fetchOrderTrades': false,
|
|
92
|
+
'fetchPosition': false,
|
|
93
|
+
'fetchPositionMode': false,
|
|
94
|
+
'fetchPositions': true,
|
|
95
|
+
'fetchPremiumIndexOHLCV': false,
|
|
96
|
+
'fetchStatus': false,
|
|
97
|
+
'fetchTicker': true,
|
|
98
|
+
'fetchTickers': false,
|
|
99
|
+
'fetchTime': true,
|
|
100
|
+
'fetchTrades': true,
|
|
101
|
+
'fetchTradingFee': false,
|
|
102
|
+
'fetchTradingFees': true,
|
|
103
|
+
'fetchTradingLimits': false,
|
|
104
|
+
'fetchTransactions': 'emulated',
|
|
105
|
+
'fetchTransfers': false,
|
|
106
|
+
'fetchWithdrawals': true,
|
|
107
|
+
'reduceMargin': false,
|
|
108
|
+
'setLeverage': false,
|
|
109
|
+
'setMargin': false,
|
|
110
|
+
'setPositionMode': false,
|
|
111
|
+
'transfer': false,
|
|
112
|
+
'withdraw': true,
|
|
113
|
+
},
|
|
114
|
+
'timeframes': {
|
|
115
|
+
'1m': '1min',
|
|
116
|
+
'5m': '5min',
|
|
117
|
+
'15m': '15min',
|
|
118
|
+
'1h': '1h',
|
|
119
|
+
'4h': '4h',
|
|
120
|
+
'1d': '1d',
|
|
121
|
+
'1w': '1w',
|
|
122
|
+
},
|
|
123
|
+
'urls': {
|
|
124
|
+
'logo': 'https://github.com/user-attachments/assets/7301bbb1-4f27-4167-8a55-75f74b14e973',
|
|
125
|
+
'api': {
|
|
126
|
+
'public': 'https://data-api.hibachi.xyz',
|
|
127
|
+
'private': 'https://api.hibachi.xyz',
|
|
128
|
+
},
|
|
129
|
+
'www': 'https://www.hibachi.xyz/',
|
|
130
|
+
'referral': {
|
|
131
|
+
'url': 'hibachi.xyz/r/ZBL2YFWIHU',
|
|
132
|
+
},
|
|
133
|
+
},
|
|
134
|
+
'api': {
|
|
135
|
+
'public': {
|
|
136
|
+
'get': {
|
|
137
|
+
'market/exchange-info': 1,
|
|
138
|
+
'market/data/trades': 1,
|
|
139
|
+
'market/data/prices': 1,
|
|
140
|
+
'market/data/stats': 1,
|
|
141
|
+
'market/data/klines': 1,
|
|
142
|
+
'market/data/orderbook': 1,
|
|
143
|
+
'market/data/open-interest': 1,
|
|
144
|
+
'market/data/funding-rates': 1,
|
|
145
|
+
'exchange/utc-timestamp': 1,
|
|
146
|
+
},
|
|
147
|
+
},
|
|
148
|
+
'private': {
|
|
149
|
+
'get': {
|
|
150
|
+
'capital/deposit-info': 1,
|
|
151
|
+
'capital/history': 1,
|
|
152
|
+
'trade/account/trading_history': 1,
|
|
153
|
+
'trade/account/info': 1,
|
|
154
|
+
'trade/order': 1,
|
|
155
|
+
'trade/account/trades': 1,
|
|
156
|
+
'trade/orders': 1,
|
|
157
|
+
},
|
|
158
|
+
'put': {
|
|
159
|
+
'trade/order': 1,
|
|
160
|
+
},
|
|
161
|
+
'delete': {
|
|
162
|
+
'trade/order': 1,
|
|
163
|
+
'trade/orders': 1,
|
|
164
|
+
},
|
|
165
|
+
'post': {
|
|
166
|
+
'trade/order': 1,
|
|
167
|
+
'trade/orders': 1,
|
|
168
|
+
'capital/withdraw': 1,
|
|
169
|
+
},
|
|
170
|
+
},
|
|
171
|
+
},
|
|
172
|
+
'requiredCredentials': {
|
|
173
|
+
'apiKey': true,
|
|
174
|
+
'secret': false,
|
|
175
|
+
'accountId': true,
|
|
176
|
+
'privateKey': true,
|
|
177
|
+
},
|
|
178
|
+
'fees': {
|
|
179
|
+
'trading': {
|
|
180
|
+
'tierBased': false,
|
|
181
|
+
'percentage': true,
|
|
182
|
+
'maker': this.parseNumber('0.00015'),
|
|
183
|
+
'taker': this.parseNumber('0.00045'),
|
|
184
|
+
},
|
|
185
|
+
},
|
|
186
|
+
'options': {},
|
|
187
|
+
'features': {
|
|
188
|
+
'default': {
|
|
189
|
+
'sandbox': false,
|
|
190
|
+
'createOrder': {
|
|
191
|
+
'marginMode': false,
|
|
192
|
+
'triggerPrice': true,
|
|
193
|
+
'triggerPriceType': undefined,
|
|
194
|
+
'triggerDirection': undefined,
|
|
195
|
+
'stopLossPrice': false,
|
|
196
|
+
'takeProfitPrice': false,
|
|
197
|
+
'attachedStopLossTakeProfit': undefined,
|
|
198
|
+
'timeInForce': {
|
|
199
|
+
'IOC': true,
|
|
200
|
+
'FOK': false,
|
|
201
|
+
'PO': true,
|
|
202
|
+
'GTD': false,
|
|
203
|
+
},
|
|
204
|
+
'hedged': false,
|
|
205
|
+
'trailing': false,
|
|
206
|
+
'leverage': false,
|
|
207
|
+
'marketBuyByCost': false,
|
|
208
|
+
'marketBuyRequiresPrice': false,
|
|
209
|
+
'selfTradePrevention': false,
|
|
210
|
+
'iceberg': false,
|
|
211
|
+
},
|
|
212
|
+
'createOrders': undefined,
|
|
213
|
+
'fetchMyTrades': {
|
|
214
|
+
'marginMode': false,
|
|
215
|
+
'limit': undefined,
|
|
216
|
+
'daysBack': undefined,
|
|
217
|
+
'untilDays': undefined,
|
|
218
|
+
'symbolRequired': false,
|
|
219
|
+
},
|
|
220
|
+
'fetchOrder': {
|
|
221
|
+
'marginMode': false,
|
|
222
|
+
'trigger': false,
|
|
223
|
+
'trailing': false,
|
|
224
|
+
'symbolRequired': false,
|
|
225
|
+
},
|
|
226
|
+
'fetchOpenOrders': {
|
|
227
|
+
'marginMode': false,
|
|
228
|
+
'limit': undefined,
|
|
229
|
+
'trigger': false,
|
|
230
|
+
'trailing': false,
|
|
231
|
+
'symbolRequired': false,
|
|
232
|
+
},
|
|
233
|
+
'fetchOrders': undefined,
|
|
234
|
+
'fetchClosedOrders': undefined,
|
|
235
|
+
'fetchOHLCV': {
|
|
236
|
+
'limit': undefined,
|
|
237
|
+
},
|
|
238
|
+
},
|
|
239
|
+
'swap': {
|
|
240
|
+
'linear': {
|
|
241
|
+
'extends': 'default',
|
|
242
|
+
},
|
|
243
|
+
'inverse': undefined,
|
|
244
|
+
},
|
|
245
|
+
'future': {
|
|
246
|
+
'linear': {
|
|
247
|
+
'extends': 'default',
|
|
248
|
+
},
|
|
249
|
+
'inverse': undefined,
|
|
250
|
+
},
|
|
251
|
+
},
|
|
252
|
+
'commonCurrencies': {},
|
|
253
|
+
'exceptions': {
|
|
254
|
+
'exact': {
|
|
255
|
+
'2': BadRequest,
|
|
256
|
+
'3': OrderNotFound,
|
|
257
|
+
'4': BadRequest, // {"errorCode":4,"message":"Missing accountId","status":"failed"}
|
|
258
|
+
},
|
|
259
|
+
'broad': {},
|
|
260
|
+
},
|
|
261
|
+
'precisionMode': TICK_SIZE,
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
getAccountId() {
|
|
265
|
+
this.checkRequiredCredentials();
|
|
266
|
+
const id = this.parseToInt(this.accountId);
|
|
267
|
+
return id;
|
|
268
|
+
}
|
|
269
|
+
parseMarket(market) {
|
|
270
|
+
const marketId = this.safeString(market, 'symbol');
|
|
271
|
+
const numericId = this.safeNumber(market, 'id');
|
|
272
|
+
const marketType = 'swap';
|
|
273
|
+
const baseId = this.safeString(market, 'underlyingSymbol');
|
|
274
|
+
const quoteId = this.safeString(market, 'settlementSymbol');
|
|
275
|
+
const base = this.safeCurrencyCode(baseId);
|
|
276
|
+
const quote = this.safeCurrencyCode(quoteId);
|
|
277
|
+
const settleId = this.safeString(market, 'settlementSymbol');
|
|
278
|
+
const settle = this.safeCurrencyCode(settleId);
|
|
279
|
+
const symbol = base + '/' + quote + ':' + settle;
|
|
280
|
+
const created = this.safeIntegerProduct(market, 'marketCreationTimestamp', 1000);
|
|
281
|
+
return {
|
|
282
|
+
'id': marketId,
|
|
283
|
+
'numericId': numericId,
|
|
284
|
+
'symbol': symbol,
|
|
285
|
+
'base': base,
|
|
286
|
+
'quote': quote,
|
|
287
|
+
'settle': settle,
|
|
288
|
+
'baseId': baseId,
|
|
289
|
+
'quoteId': quoteId,
|
|
290
|
+
'settleId': settleId,
|
|
291
|
+
'type': marketType,
|
|
292
|
+
'spot': false,
|
|
293
|
+
'margin': false,
|
|
294
|
+
'swap': true,
|
|
295
|
+
'future': false,
|
|
296
|
+
'option': false,
|
|
297
|
+
'active': this.safeString(market, 'status') === 'LIVE',
|
|
298
|
+
'contract': true,
|
|
299
|
+
'linear': true,
|
|
300
|
+
'inverse': false,
|
|
301
|
+
'contractSize': this.parseNumber('1'),
|
|
302
|
+
'expiry': undefined,
|
|
303
|
+
'expiryDatetime': undefined,
|
|
304
|
+
'strike': undefined,
|
|
305
|
+
'optionType': undefined,
|
|
306
|
+
'precision': {
|
|
307
|
+
'amount': this.parseNumber(this.parsePrecision(this.safeString(market, 'underlyingDecimals'))),
|
|
308
|
+
'price': this.parseNumber(this.safeList(market, 'orderbookGranularities')[0]) / 10000.0,
|
|
309
|
+
},
|
|
310
|
+
'limits': {
|
|
311
|
+
'leverage': {
|
|
312
|
+
'min': undefined,
|
|
313
|
+
'max': undefined,
|
|
314
|
+
},
|
|
315
|
+
'amount': {
|
|
316
|
+
'min': undefined,
|
|
317
|
+
'max': undefined,
|
|
318
|
+
},
|
|
319
|
+
'price': {
|
|
320
|
+
'min': undefined,
|
|
321
|
+
'max': undefined,
|
|
322
|
+
},
|
|
323
|
+
'cost': {
|
|
324
|
+
'min': this.safeNumber(market, 'minNotional'),
|
|
325
|
+
'max': undefined,
|
|
326
|
+
},
|
|
327
|
+
},
|
|
328
|
+
'created': created,
|
|
329
|
+
'info': market,
|
|
330
|
+
};
|
|
331
|
+
}
|
|
332
|
+
/**
|
|
333
|
+
* @method
|
|
334
|
+
* @name hibachi#fetchMarkets
|
|
335
|
+
* @description retrieves data on all markets for hibachi
|
|
336
|
+
* @see https://api-doc.hibachi.xyz/#183981da-8df5-40a0-a155-da15015dd536
|
|
337
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
338
|
+
* @returns {object[]} an array of objects representing market data
|
|
339
|
+
*/
|
|
340
|
+
async fetchMarkets(params = {}) {
|
|
341
|
+
const response = await this.publicGetMarketExchangeInfo(params);
|
|
342
|
+
// {
|
|
343
|
+
// "displayName": "ETH/USDT Perps",
|
|
344
|
+
// "id": 1,
|
|
345
|
+
// "maintenanceFactorForPositions": "0.030000",
|
|
346
|
+
// "marketCloseTimestamp": null,
|
|
347
|
+
// "marketOpenTimestamp": null,
|
|
348
|
+
// "minNotional": "1",
|
|
349
|
+
// "minOrderSize": "0.000000001",
|
|
350
|
+
// "orderbookGranularities": [
|
|
351
|
+
// "0.01",
|
|
352
|
+
// "0.1",
|
|
353
|
+
// "1",
|
|
354
|
+
// "10"
|
|
355
|
+
// ],
|
|
356
|
+
// "riskFactorForOrders": "0.066667",
|
|
357
|
+
// "riskFactorForPositions": "0.030000",
|
|
358
|
+
// "settlementDecimals": 6,
|
|
359
|
+
// "settlementSymbol": "USDT",
|
|
360
|
+
// "status": "LIVE",
|
|
361
|
+
// "stepSize": "0.000000001",
|
|
362
|
+
// "symbol": "ETH/USDT-P",
|
|
363
|
+
// "tickSize": "0.000001",
|
|
364
|
+
// "underlyingDecimals": 9,
|
|
365
|
+
// "underlyingSymbol": "ETH"
|
|
366
|
+
// },
|
|
367
|
+
const rows = this.safeList(response, 'futureContracts');
|
|
368
|
+
return this.parseMarkets(rows);
|
|
369
|
+
}
|
|
370
|
+
/**
|
|
371
|
+
* @method
|
|
372
|
+
* @name hibachi#fetchCurrencies
|
|
373
|
+
* @description fetches all available currencies on an exchange
|
|
374
|
+
* @see https://api-doc.hibachi.xyz/#183981da-8df5-40a0-a155-da15015dd536
|
|
375
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
376
|
+
* @returns {object} an associative dictionary of currencies
|
|
377
|
+
*/
|
|
378
|
+
async fetchCurrencies(params = {}) {
|
|
379
|
+
// Hibachi only supports USDT on Arbitrum at this time
|
|
380
|
+
// We don't have an API endpoint to expose this information yet
|
|
381
|
+
const result = {};
|
|
382
|
+
const networks = {};
|
|
383
|
+
const networkId = 'ARBITRUM';
|
|
384
|
+
networks[networkId] = {
|
|
385
|
+
'id': networkId,
|
|
386
|
+
'network': networkId,
|
|
387
|
+
'limits': {
|
|
388
|
+
'withdraw': {
|
|
389
|
+
'min': undefined,
|
|
390
|
+
'max': undefined,
|
|
391
|
+
},
|
|
392
|
+
'deposit': {
|
|
393
|
+
'min': undefined,
|
|
394
|
+
'max': undefined,
|
|
395
|
+
},
|
|
396
|
+
},
|
|
397
|
+
'active': undefined,
|
|
398
|
+
'deposit': undefined,
|
|
399
|
+
'withdraw': undefined,
|
|
400
|
+
'info': {},
|
|
401
|
+
};
|
|
402
|
+
const code = this.safeCurrencyCode('USDT');
|
|
403
|
+
result[code] = this.safeCurrencyStructure({
|
|
404
|
+
'id': 'USDT',
|
|
405
|
+
'name': 'USDT',
|
|
406
|
+
'type': 'fiat',
|
|
407
|
+
'code': code,
|
|
408
|
+
'precision': this.parseNumber('0.000001'),
|
|
409
|
+
'active': true,
|
|
410
|
+
'fee': undefined,
|
|
411
|
+
'networks': networks,
|
|
412
|
+
'deposit': true,
|
|
413
|
+
'withdraw': true,
|
|
414
|
+
'limits': {
|
|
415
|
+
'deposit': {
|
|
416
|
+
'min': undefined,
|
|
417
|
+
'max': undefined,
|
|
418
|
+
},
|
|
419
|
+
'withdraw': {
|
|
420
|
+
'min': undefined,
|
|
421
|
+
'max': undefined,
|
|
422
|
+
},
|
|
423
|
+
},
|
|
424
|
+
'info': {},
|
|
425
|
+
});
|
|
426
|
+
return result;
|
|
427
|
+
}
|
|
428
|
+
parseBalance(response) {
|
|
429
|
+
const result = {
|
|
430
|
+
'info': response,
|
|
431
|
+
};
|
|
432
|
+
// Hibachi only supports USDT on Arbitrum at this time
|
|
433
|
+
const code = this.safeCurrencyCode('USDT');
|
|
434
|
+
const account = this.account();
|
|
435
|
+
account['total'] = this.safeString(response, 'balance');
|
|
436
|
+
account['free'] = this.safeString(response, 'maximalWithdraw');
|
|
437
|
+
result[code] = account;
|
|
438
|
+
return this.safeBalance(result);
|
|
439
|
+
}
|
|
440
|
+
/**
|
|
441
|
+
* @method
|
|
442
|
+
* @name hibachi#fetchBalance
|
|
443
|
+
* @description query for balance and get the amount of funds available for trading or funds locked in orders
|
|
444
|
+
* @see https://api-doc.hibachi.xyz/#69aafedb-8274-4e21-bbaf-91dace8b8f31
|
|
445
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
446
|
+
* @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}
|
|
447
|
+
*/
|
|
448
|
+
async fetchBalance(params = {}) {
|
|
449
|
+
const request = {
|
|
450
|
+
'accountId': this.getAccountId(),
|
|
451
|
+
};
|
|
452
|
+
const response = await this.privateGetTradeAccountInfo(this.extend(request, params));
|
|
453
|
+
//
|
|
454
|
+
// {
|
|
455
|
+
// assets: [ { quantity: '3.000000', symbol: 'USDT' } ],
|
|
456
|
+
// balance: '3.000000',
|
|
457
|
+
// maximalWithdraw: '3.000000',
|
|
458
|
+
// numFreeTransfersRemaining: '100',
|
|
459
|
+
// positions: [],
|
|
460
|
+
// totalOrderNotional: '0.000000',
|
|
461
|
+
// totalPositionNotional: '0.000000',
|
|
462
|
+
// totalUnrealizedFundingPnl: '0.000000',
|
|
463
|
+
// totalUnrealizedPnl: '0.000000',
|
|
464
|
+
// totalUnrealizedTradingPnl: '0.000000',
|
|
465
|
+
// tradeMakerFeeRate: '0.00000000',
|
|
466
|
+
// tradeTakerFeeRate: '0.00020000'
|
|
467
|
+
// }
|
|
468
|
+
//
|
|
469
|
+
return this.parseBalance(response);
|
|
470
|
+
}
|
|
471
|
+
parseTicker(ticker, market = undefined) {
|
|
472
|
+
const prices = this.safeDict(ticker, 'prices');
|
|
473
|
+
const stats = this.safeDict(ticker, 'stats');
|
|
474
|
+
const bid = this.safeNumber(prices, 'bidPrice');
|
|
475
|
+
const ask = this.safeNumber(prices, 'askPrice');
|
|
476
|
+
const last = this.safeNumber(prices, 'tradePrice');
|
|
477
|
+
const high = this.safeNumber(stats, 'high24h');
|
|
478
|
+
const low = this.safeNumber(stats, 'low24h');
|
|
479
|
+
const volume = this.safeNumber(stats, 'volume24h');
|
|
480
|
+
return this.safeTicker({
|
|
481
|
+
'symbol': this.safeSymbol(undefined, market),
|
|
482
|
+
'timestamp': undefined,
|
|
483
|
+
'datetime': undefined,
|
|
484
|
+
'bid': bid,
|
|
485
|
+
'ask': ask,
|
|
486
|
+
'last': last,
|
|
487
|
+
'high': high,
|
|
488
|
+
'low': low,
|
|
489
|
+
'bidVolume': undefined,
|
|
490
|
+
'askVolume': undefined,
|
|
491
|
+
'vwap': undefined,
|
|
492
|
+
'open': undefined,
|
|
493
|
+
'close': last,
|
|
494
|
+
'previousClose': undefined,
|
|
495
|
+
'change': undefined,
|
|
496
|
+
'percentage': undefined,
|
|
497
|
+
'average': undefined,
|
|
498
|
+
'baseVolume': undefined,
|
|
499
|
+
'quoteVolume': volume,
|
|
500
|
+
'info': ticker,
|
|
501
|
+
}, market);
|
|
502
|
+
}
|
|
503
|
+
parseTrade(trade, market = undefined) {
|
|
504
|
+
// public fetchTrades:
|
|
505
|
+
// {
|
|
506
|
+
// "price": "3512.431902",
|
|
507
|
+
// "quantity": "1.414780098",
|
|
508
|
+
// "takerSide": "Buy",
|
|
509
|
+
// "timestamp": 1712692147
|
|
510
|
+
// }
|
|
511
|
+
//
|
|
512
|
+
// private fetchMyTrades:
|
|
513
|
+
// {
|
|
514
|
+
// "askAccountId": 221,
|
|
515
|
+
// "askOrderId": 589168494921909200,
|
|
516
|
+
// "bidAccountId": 132,
|
|
517
|
+
// "bidOrderId": 589168494829895700,
|
|
518
|
+
// "fee": "0.000477",
|
|
519
|
+
// "id": 199511136,
|
|
520
|
+
// "orderType": "MARKET",
|
|
521
|
+
// "price": "119257.90000",
|
|
522
|
+
// "quantity": "0.0000200000",
|
|
523
|
+
// "realizedPnl": "-0.000352",
|
|
524
|
+
// "side": "Sell",
|
|
525
|
+
// "symbol": "BTC/USDT-P",
|
|
526
|
+
// "timestamp": 1752543391
|
|
527
|
+
// }
|
|
528
|
+
const marketId = this.safeString(trade, 'symbol');
|
|
529
|
+
market = this.safeMarket(marketId, market);
|
|
530
|
+
const symbol = market['symbol'];
|
|
531
|
+
const id = this.safeString(trade, 'id');
|
|
532
|
+
const price = this.safeString(trade, 'price');
|
|
533
|
+
const amount = this.safeString(trade, 'quantity');
|
|
534
|
+
const timestamp = this.safeIntegerProduct(trade, 'timestamp', 1000);
|
|
535
|
+
const cost = Precise.stringMul(price, amount);
|
|
536
|
+
let side = undefined;
|
|
537
|
+
let fee = undefined;
|
|
538
|
+
let orderType = undefined;
|
|
539
|
+
let orderId = undefined;
|
|
540
|
+
let takerOrMaker = undefined;
|
|
541
|
+
if (id === undefined) {
|
|
542
|
+
// public trades
|
|
543
|
+
side = this.safeStringLower(trade, 'takerSide');
|
|
544
|
+
takerOrMaker = 'taker';
|
|
545
|
+
}
|
|
546
|
+
else {
|
|
547
|
+
// private trades
|
|
548
|
+
side = this.safeStringLower(trade, 'side');
|
|
549
|
+
fee = { 'cost': this.safeString(trade, 'fee'), 'currency': 'USDT' };
|
|
550
|
+
orderType = this.safeStringLower(trade, 'orderType');
|
|
551
|
+
if (side === 'buy') {
|
|
552
|
+
orderId = this.safeString(trade, 'bidOrderId');
|
|
553
|
+
}
|
|
554
|
+
else {
|
|
555
|
+
orderId = this.safeString(trade, 'askOrderId');
|
|
556
|
+
}
|
|
557
|
+
}
|
|
558
|
+
return this.safeTrade({
|
|
559
|
+
'id': id,
|
|
560
|
+
'timestamp': timestamp,
|
|
561
|
+
'datetime': this.iso8601(timestamp),
|
|
562
|
+
'symbol': symbol,
|
|
563
|
+
'side': side,
|
|
564
|
+
'price': price,
|
|
565
|
+
'amount': amount,
|
|
566
|
+
'cost': cost,
|
|
567
|
+
'order': orderId,
|
|
568
|
+
'takerOrMaker': takerOrMaker,
|
|
569
|
+
'type': orderType,
|
|
570
|
+
'fee': fee,
|
|
571
|
+
'info': trade,
|
|
572
|
+
}, market);
|
|
573
|
+
}
|
|
574
|
+
/**
|
|
575
|
+
* @method
|
|
576
|
+
* @name hibachi#fetchTrades
|
|
577
|
+
* @description get the list of most recent trades for a particular symbol
|
|
578
|
+
* @see https://api-doc.hibachi.xyz/#86a53bc1-d3bb-4b93-8a11-7034d4698caa
|
|
579
|
+
* @param {string} symbol unified market symbol
|
|
580
|
+
* @param {int} [since] timestamp in ms of the earliest trade to fetch
|
|
581
|
+
* @param {int} [limit] the maximum amount of trades to fetch (maximum value is 100)
|
|
582
|
+
* @param {object} [params] extra parameters specific to the hibachi api endpoint
|
|
583
|
+
* @returns {object[]} a list of recent [trade structures]
|
|
584
|
+
*/
|
|
585
|
+
async fetchTrades(symbol, since = undefined, limit = undefined, params = {}) {
|
|
586
|
+
await this.loadMarkets();
|
|
587
|
+
const market = this.market(symbol);
|
|
588
|
+
const request = {
|
|
589
|
+
'symbol': market['id'],
|
|
590
|
+
};
|
|
591
|
+
const response = await this.publicGetMarketDataTrades(this.extend(request, params));
|
|
592
|
+
//
|
|
593
|
+
// {
|
|
594
|
+
// "trades": [
|
|
595
|
+
// {
|
|
596
|
+
// "price": "111091.38352",
|
|
597
|
+
// "quantity": "0.0090090093",
|
|
598
|
+
// "takerSide": "Buy",
|
|
599
|
+
// "timestamp": 1752095479
|
|
600
|
+
// },
|
|
601
|
+
// ]
|
|
602
|
+
// }
|
|
603
|
+
//
|
|
604
|
+
const trades = this.safeList(response, 'trades', []);
|
|
605
|
+
return this.parseTrades(trades, market);
|
|
606
|
+
}
|
|
607
|
+
/**
|
|
608
|
+
* @method
|
|
609
|
+
* @name hibachi#fetchTicker
|
|
610
|
+
* @see https://api-doc.hibachi.xyz/#4abb30c4-e5c7-4b0f-9ade-790111dbfa47
|
|
611
|
+
* @description fetches a price ticker and the related information for the past 24h
|
|
612
|
+
* @param {string} symbol unified symbol of the market
|
|
613
|
+
* @param {object} [params] extra parameters specific to the hibachi api endpoint
|
|
614
|
+
* @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
|
|
615
|
+
*/
|
|
616
|
+
async fetchTicker(symbol, params = {}) {
|
|
617
|
+
await this.loadMarkets();
|
|
618
|
+
const market = this.market(symbol);
|
|
619
|
+
const request = {
|
|
620
|
+
'symbol': market['id'],
|
|
621
|
+
};
|
|
622
|
+
const rawPromises = [
|
|
623
|
+
this.publicGetMarketDataPrices(this.extend(request, params)),
|
|
624
|
+
this.publicGetMarketDataStats(this.extend(request, params)),
|
|
625
|
+
];
|
|
626
|
+
const promises = await Promise.all(rawPromises);
|
|
627
|
+
const pricesResponse = promises[0];
|
|
628
|
+
// {
|
|
629
|
+
// "askPrice": "3514.650296",
|
|
630
|
+
// "bidPrice": "3513.596112",
|
|
631
|
+
// "fundingRateEstimation": {
|
|
632
|
+
// "estimatedFundingRate": "0.000001",
|
|
633
|
+
// "nextFundingTimestamp": 1712707200
|
|
634
|
+
// },
|
|
635
|
+
// "markPrice": "3514.288858",
|
|
636
|
+
// "spotPrice": "3514.715000",
|
|
637
|
+
// "symbol": "ETH/USDT-P",
|
|
638
|
+
// "tradePrice": "2372.746570"
|
|
639
|
+
// }
|
|
640
|
+
const statsResponse = promises[1];
|
|
641
|
+
// {
|
|
642
|
+
// "high24h": "3819.507827",
|
|
643
|
+
// "low24h": "3754.474162",
|
|
644
|
+
// "symbol": "ETH/USDT-P",
|
|
645
|
+
// "volume24h": "23554.858590416"
|
|
646
|
+
// }
|
|
647
|
+
const ticker = {
|
|
648
|
+
'prices': pricesResponse,
|
|
649
|
+
'stats': statsResponse,
|
|
650
|
+
};
|
|
651
|
+
return this.parseTicker(ticker, market);
|
|
652
|
+
}
|
|
653
|
+
parseOrderStatus(status) {
|
|
654
|
+
const statuses = {
|
|
655
|
+
'PENDING': 'open',
|
|
656
|
+
'CHILD_PENDING': 'open',
|
|
657
|
+
'SCHEDULED_TWAP': 'open',
|
|
658
|
+
'PLACED': 'open',
|
|
659
|
+
'PARTIALLY_FILLED': 'open',
|
|
660
|
+
'FILLED': 'closed',
|
|
661
|
+
'CANCELLED': 'canceled',
|
|
662
|
+
'REJECTED': 'rejected',
|
|
663
|
+
};
|
|
664
|
+
return this.safeString(statuses, status, status);
|
|
665
|
+
}
|
|
666
|
+
parseOrder(order, market = undefined) {
|
|
667
|
+
const marketId = this.safeString(order, 'symbol');
|
|
668
|
+
market = this.safeMarket(marketId, market);
|
|
669
|
+
const status = this.safeString(order, 'status');
|
|
670
|
+
const type = this.safeStringLower(order, 'orderType');
|
|
671
|
+
const price = this.safeString(order, 'price');
|
|
672
|
+
const rawSide = this.safeString(order, 'side');
|
|
673
|
+
let side = undefined;
|
|
674
|
+
if (rawSide === 'BID') {
|
|
675
|
+
side = 'buy';
|
|
676
|
+
}
|
|
677
|
+
else if (rawSide === 'ASK') {
|
|
678
|
+
side = 'sell';
|
|
679
|
+
}
|
|
680
|
+
const amount = this.safeString(order, 'totalQuantity');
|
|
681
|
+
const remaining = this.safeString(order, 'availableQuantity');
|
|
682
|
+
const totalQuantity = this.safeString(order, 'totalQuantity');
|
|
683
|
+
const availableQuantity = this.safeString(order, 'availableQuantity');
|
|
684
|
+
let filled = undefined;
|
|
685
|
+
if (totalQuantity !== undefined && availableQuantity !== undefined) {
|
|
686
|
+
filled = Precise.stringSub(totalQuantity, availableQuantity);
|
|
687
|
+
}
|
|
688
|
+
let timeInForce = 'GTC';
|
|
689
|
+
const orderFlags = this.safeValue(order, 'orderFlags');
|
|
690
|
+
let postOnly = false;
|
|
691
|
+
let reduceOnly = false;
|
|
692
|
+
if (orderFlags === 'POST_ONLY') {
|
|
693
|
+
timeInForce = 'PO';
|
|
694
|
+
postOnly = true;
|
|
695
|
+
}
|
|
696
|
+
else if (orderFlags === 'IOC') {
|
|
697
|
+
timeInForce = 'IOC';
|
|
698
|
+
}
|
|
699
|
+
else if (orderFlags === 'REDUCE_ONLY') {
|
|
700
|
+
reduceOnly = true;
|
|
701
|
+
}
|
|
702
|
+
return this.safeOrder({
|
|
703
|
+
'info': order,
|
|
704
|
+
'id': this.safeString(order, 'orderId'),
|
|
705
|
+
'clientOrderId': undefined,
|
|
706
|
+
'datetime': undefined,
|
|
707
|
+
'timestamp': undefined,
|
|
708
|
+
'lastTradeTimestamp': undefined,
|
|
709
|
+
'lastUpdateTimestamp': undefined,
|
|
710
|
+
'status': this.parseOrderStatus(status),
|
|
711
|
+
'symbol': market['symbol'],
|
|
712
|
+
'type': type,
|
|
713
|
+
'timeInForce': timeInForce,
|
|
714
|
+
'side': side,
|
|
715
|
+
'price': price,
|
|
716
|
+
'average': undefined,
|
|
717
|
+
'amount': amount,
|
|
718
|
+
'filled': filled,
|
|
719
|
+
'remaining': remaining,
|
|
720
|
+
'cost': undefined,
|
|
721
|
+
'trades': undefined,
|
|
722
|
+
'fee': undefined,
|
|
723
|
+
'reduceOnly': reduceOnly,
|
|
724
|
+
'postOnly': postOnly,
|
|
725
|
+
'triggerPrice': this.safeNumber(order, 'triggerPrice'),
|
|
726
|
+
}, market);
|
|
727
|
+
}
|
|
728
|
+
/**
|
|
729
|
+
* @method
|
|
730
|
+
* @name hibachi#fetchOrder
|
|
731
|
+
* @description fetches information on an order made by the user
|
|
732
|
+
* @see https://api-doc.hibachi.xyz/#096a8854-b918-4de8-8731-b2a28d26b96d
|
|
733
|
+
* @param {string} id the order id
|
|
734
|
+
* @param {string} symbol unified symbol of the market the order was made in
|
|
735
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
736
|
+
* @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
737
|
+
*/
|
|
738
|
+
async fetchOrder(id, symbol = undefined, params = {}) {
|
|
739
|
+
await this.loadMarkets();
|
|
740
|
+
let market = undefined;
|
|
741
|
+
if (symbol !== undefined) {
|
|
742
|
+
market = this.market(symbol);
|
|
743
|
+
}
|
|
744
|
+
const request = {
|
|
745
|
+
'orderId': id,
|
|
746
|
+
'accountId': this.getAccountId(),
|
|
747
|
+
};
|
|
748
|
+
const response = await this.privateGetTradeOrder(this.extend(request, params));
|
|
749
|
+
return this.parseOrder(response, market);
|
|
750
|
+
}
|
|
751
|
+
/**
|
|
752
|
+
* @method
|
|
753
|
+
* @name hibachi#fetchTradingFees
|
|
754
|
+
* @description fetch the trading fee
|
|
755
|
+
* @param params extra parameters
|
|
756
|
+
* @returns {object} a map of market symbols to [fee structures]{@link https://docs.ccxt.com/#/?id=fee-structure}
|
|
757
|
+
*/
|
|
758
|
+
async fetchTradingFees(params = {}) {
|
|
759
|
+
await this.loadMarkets();
|
|
760
|
+
const request = {
|
|
761
|
+
'accountId': this.getAccountId(),
|
|
762
|
+
};
|
|
763
|
+
const response = await this.privateGetTradeAccountInfo(this.extend(request, params));
|
|
764
|
+
// {
|
|
765
|
+
// "tradeMakerFeeRate": "0.00000000",
|
|
766
|
+
// "tradeTakerFeeRate": "0.00020000"
|
|
767
|
+
// },
|
|
768
|
+
const makerFeeRate = this.safeNumber(response, 'tradeMakerFeeRate');
|
|
769
|
+
const takerFeeRate = this.safeNumber(response, 'tradeTakerFeeRate');
|
|
770
|
+
const result = {};
|
|
771
|
+
for (let i = 0; i < this.symbols.length; i++) {
|
|
772
|
+
const symbol = this.symbols[i];
|
|
773
|
+
result[symbol] = {
|
|
774
|
+
'info': response,
|
|
775
|
+
'symbol': symbol,
|
|
776
|
+
'maker': makerFeeRate,
|
|
777
|
+
'taker': takerFeeRate,
|
|
778
|
+
'percentage': true,
|
|
779
|
+
};
|
|
780
|
+
}
|
|
781
|
+
return result;
|
|
782
|
+
}
|
|
783
|
+
orderMessage(market, nonce, feeRate, type, side, amount, price = undefined) {
|
|
784
|
+
let sideInternal = 0;
|
|
785
|
+
if (side === 'sell') {
|
|
786
|
+
sideInternal = 0;
|
|
787
|
+
}
|
|
788
|
+
else if (side === 'buy') {
|
|
789
|
+
sideInternal = 1;
|
|
790
|
+
}
|
|
791
|
+
// Converting them to internal representation:
|
|
792
|
+
// - Quantity: Internal = External * (10^underlyingDecimals)
|
|
793
|
+
// - Price: Internal = External * (2^32) * (10^(settlementDecimals-underlyingDecimals))
|
|
794
|
+
// - FeeRate: Internal = External * (10^8)
|
|
795
|
+
const amountStr = this.amountToPrecision(this.safeString(market, 'symbol'), amount);
|
|
796
|
+
const feeRateStr = this.numberToString(feeRate);
|
|
797
|
+
const info = this.safeDict(market, 'info');
|
|
798
|
+
const underlying = '1e' + this.safeString(info, 'underlyingDecimals');
|
|
799
|
+
const settlement = '1e' + this.safeString(info, 'settlementDecimals');
|
|
800
|
+
const one = '1';
|
|
801
|
+
const feeRateFactor = '100000000'; // 10^8
|
|
802
|
+
const priceFactor = '4294967296'; // 2^32
|
|
803
|
+
const quantityInternal = Precise.stringDiv(Precise.stringMul(amountStr, underlying), one, 0);
|
|
804
|
+
const feeRateInternal = Precise.stringDiv(Precise.stringMul(feeRateStr, feeRateFactor), one, 0);
|
|
805
|
+
// Encoding
|
|
806
|
+
const nonce16 = this.intToBase16(nonce);
|
|
807
|
+
const noncePadded = nonce16.padStart(16, '0');
|
|
808
|
+
const encodedNonce = this.base16ToBinary(noncePadded);
|
|
809
|
+
const numericId = this.intToBase16(this.safeInteger(market, 'numericId'));
|
|
810
|
+
const numericIdPadded = numericId.padStart(8, '0');
|
|
811
|
+
const encodedMarketId = this.base16ToBinary(numericIdPadded);
|
|
812
|
+
const quantity16 = this.intToBase16(this.parseToInt(quantityInternal));
|
|
813
|
+
const quantityPadded = quantity16.padStart(16, '0');
|
|
814
|
+
const encodedQuantity = this.base16ToBinary(quantityPadded);
|
|
815
|
+
const sideInternal16 = this.intToBase16(sideInternal);
|
|
816
|
+
const sidePadded = sideInternal16.padStart(8, '0');
|
|
817
|
+
const encodedSide = this.base16ToBinary(sidePadded);
|
|
818
|
+
const feeRateInternal16 = this.intToBase16(this.parseToInt(feeRateInternal));
|
|
819
|
+
const feeRatePadded = feeRateInternal16.padStart(16, '0');
|
|
820
|
+
const encodedFeeRate = this.base16ToBinary(feeRatePadded);
|
|
821
|
+
let encodedPrice = this.binaryConcat();
|
|
822
|
+
if (type === 'limit') {
|
|
823
|
+
const priceStr = this.priceToPrecision(this.safeString(market, 'symbol'), price);
|
|
824
|
+
const priceInternal = Precise.stringDiv(Precise.stringDiv(Precise.stringMul(Precise.stringMul(priceStr, priceFactor), settlement), underlying), one, 0);
|
|
825
|
+
const price16 = this.intToBase16(this.parseToInt(priceInternal));
|
|
826
|
+
const pricePadded = price16.padStart(16, '0');
|
|
827
|
+
encodedPrice = this.base16ToBinary(pricePadded);
|
|
828
|
+
}
|
|
829
|
+
const message = this.binaryConcat(encodedNonce, encodedMarketId, encodedQuantity, encodedSide, encodedPrice, encodedFeeRate);
|
|
830
|
+
return message;
|
|
831
|
+
}
|
|
832
|
+
createOrderRequest(nonce, symbol, type, side, amount, price = undefined, params = {}) {
|
|
833
|
+
const market = this.market(symbol);
|
|
834
|
+
const feeRate = Math.max(this.safeNumber(market, 'taker'), this.safeNumber(market, 'maker'));
|
|
835
|
+
let sideInternal = '';
|
|
836
|
+
if (side === 'sell') {
|
|
837
|
+
sideInternal = 'ASK';
|
|
838
|
+
}
|
|
839
|
+
else if (side === 'buy') {
|
|
840
|
+
sideInternal = 'BID';
|
|
841
|
+
}
|
|
842
|
+
let priceInternal = '';
|
|
843
|
+
if (price) {
|
|
844
|
+
priceInternal = this.priceToPrecision(symbol, price);
|
|
845
|
+
}
|
|
846
|
+
const message = this.orderMessage(market, nonce, feeRate, type, side, amount, price);
|
|
847
|
+
const signature = this.signMessage(message, this.privateKey);
|
|
848
|
+
const request = {
|
|
849
|
+
'symbol': this.safeString(market, 'id'),
|
|
850
|
+
'nonce': nonce,
|
|
851
|
+
'side': sideInternal,
|
|
852
|
+
'orderType': type.toUpperCase(),
|
|
853
|
+
'quantity': this.amountToPrecision(symbol, amount),
|
|
854
|
+
'price': priceInternal,
|
|
855
|
+
'signature': signature,
|
|
856
|
+
'maxFeesPercent': this.numberToString(feeRate),
|
|
857
|
+
};
|
|
858
|
+
const postOnly = this.isPostOnly(type.toUpperCase() === 'MARKET', undefined, params);
|
|
859
|
+
const reduceOnly = this.safeBool2(params, 'reduceOnly', 'reduce_only');
|
|
860
|
+
const timeInForce = this.safeStringLower(params, 'timeInForce');
|
|
861
|
+
const triggerPrice = this.safeString2(params, 'triggerPrice', 'stopPrice');
|
|
862
|
+
if (postOnly) {
|
|
863
|
+
request['orderFlags'] = 'POST_ONLY';
|
|
864
|
+
}
|
|
865
|
+
else if (timeInForce === 'ioc') {
|
|
866
|
+
request['orderFlags'] = 'IOC';
|
|
867
|
+
}
|
|
868
|
+
else if (reduceOnly) {
|
|
869
|
+
request['orderFlags'] = 'REDUCE_ONLY';
|
|
870
|
+
}
|
|
871
|
+
if (triggerPrice !== undefined) {
|
|
872
|
+
request['triggerPrice'] = triggerPrice;
|
|
873
|
+
}
|
|
874
|
+
params = this.omit(params, ['reduceOnly', 'reduce_only', 'postOnly', 'timeInForce', 'stopPrice', 'triggerPrice']);
|
|
875
|
+
return this.extend(request, params);
|
|
876
|
+
}
|
|
877
|
+
/**
|
|
878
|
+
* @method
|
|
879
|
+
* @name hibachi#createOrder
|
|
880
|
+
* @description create a trade order
|
|
881
|
+
* @see https://api-doc.hibachi.xyz/#00f6d5ad-5275-41cb-a1a8-19ed5d142124
|
|
882
|
+
* @param {string} symbol unified symbol of the market to create an order in
|
|
883
|
+
* @param {string} type 'market' or 'limit'
|
|
884
|
+
* @param {string} side 'buy' or 'sell'
|
|
885
|
+
* @param {float} amount how much of currency you want to trade in units of base currency
|
|
886
|
+
* @param {float} [price] the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
|
|
887
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
888
|
+
* @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
889
|
+
*/
|
|
890
|
+
async createOrder(symbol, type, side, amount, price = undefined, params = {}) {
|
|
891
|
+
await this.loadMarkets();
|
|
892
|
+
const nonce = this.nonce();
|
|
893
|
+
const request = this.createOrderRequest(nonce, symbol, type, side, amount, price, params);
|
|
894
|
+
request['accountId'] = this.getAccountId();
|
|
895
|
+
const response = await this.privatePostTradeOrder(request);
|
|
896
|
+
//
|
|
897
|
+
// {
|
|
898
|
+
// "orderId": "578721673790138368"
|
|
899
|
+
// }
|
|
900
|
+
//
|
|
901
|
+
return this.safeOrder({
|
|
902
|
+
'id': this.safeString(response, 'orderId'),
|
|
903
|
+
'status': 'pending',
|
|
904
|
+
});
|
|
905
|
+
}
|
|
906
|
+
/**
|
|
907
|
+
* @method
|
|
908
|
+
* @name hibachi#createOrders
|
|
909
|
+
* @description *contract only* create a list of trade orders
|
|
910
|
+
* @see https://api-doc.hibachi.xyz/#c2840b9b-f02c-44ed-937d-dc2819f135b4
|
|
911
|
+
* @param {Array} orders list of orders to create, each object should contain the parameters required by createOrder, namely symbol, type, side, amount, price and params
|
|
912
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
913
|
+
* @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
914
|
+
*/
|
|
915
|
+
async createOrders(orders, params = {}) {
|
|
916
|
+
await this.loadMarkets();
|
|
917
|
+
const nonce = this.nonce();
|
|
918
|
+
const requestOrders = [];
|
|
919
|
+
for (let i = 0; i < orders.length; i++) {
|
|
920
|
+
const rawOrder = orders[i];
|
|
921
|
+
const symbol = this.safeString(rawOrder, 'symbol');
|
|
922
|
+
const type = this.safeString(rawOrder, 'type');
|
|
923
|
+
const side = this.safeString(rawOrder, 'side');
|
|
924
|
+
const amount = this.safeValue(rawOrder, 'amount');
|
|
925
|
+
const price = this.safeValue(rawOrder, 'price');
|
|
926
|
+
const orderParams = this.safeDict(rawOrder, 'params', {});
|
|
927
|
+
const orderRequest = this.createOrderRequest(nonce + i, symbol, type, side, amount, price, orderParams);
|
|
928
|
+
orderRequest['action'] = 'place';
|
|
929
|
+
requestOrders.push(orderRequest);
|
|
930
|
+
}
|
|
931
|
+
const request = {
|
|
932
|
+
'accountId': this.getAccountId(),
|
|
933
|
+
'orders': requestOrders,
|
|
934
|
+
};
|
|
935
|
+
const response = await this.privatePostTradeOrders(this.extend(request, params));
|
|
936
|
+
//
|
|
937
|
+
// { "orders": [ { nonce: '1754349993908', orderId: '589642085255349248' } ] }
|
|
938
|
+
//
|
|
939
|
+
const ret = [];
|
|
940
|
+
const responseOrders = this.safeList(response, 'orders');
|
|
941
|
+
for (let i = 0; i < responseOrders.length; i++) {
|
|
942
|
+
const responseOrder = responseOrders[i];
|
|
943
|
+
ret.push(this.safeOrder({
|
|
944
|
+
'info': responseOrder,
|
|
945
|
+
'id': this.safeString(responseOrder, 'orderId'),
|
|
946
|
+
'status': 'pending',
|
|
947
|
+
}));
|
|
948
|
+
}
|
|
949
|
+
return ret;
|
|
950
|
+
}
|
|
951
|
+
editOrderRequest(nonce, id, symbol, type, side, amount = undefined, price = undefined, params = {}) {
|
|
952
|
+
const market = this.market(symbol);
|
|
953
|
+
const feeRate = Math.max(this.safeNumber(market, 'taker'), this.safeNumber(market, 'maker'));
|
|
954
|
+
const message = this.orderMessage(market, nonce, feeRate, type, side, amount, price);
|
|
955
|
+
const signature = this.signMessage(message, this.privateKey);
|
|
956
|
+
const request = {
|
|
957
|
+
'orderId': id,
|
|
958
|
+
'nonce': nonce,
|
|
959
|
+
'updatedQuantity': this.amountToPrecision(symbol, amount),
|
|
960
|
+
'updatedPrice': this.priceToPrecision(symbol, price),
|
|
961
|
+
'maxFeesPercent': this.numberToString(feeRate),
|
|
962
|
+
'signature': signature,
|
|
963
|
+
};
|
|
964
|
+
return this.extend(request, params);
|
|
965
|
+
}
|
|
966
|
+
/**
|
|
967
|
+
* @method
|
|
968
|
+
* @name hibachi#editOrder
|
|
969
|
+
* @description edit a limit order that is not matched
|
|
970
|
+
* @see https://api-doc.hibachi.xyz/#94d2cdaf-1c71-440f-a981-da1112824810
|
|
971
|
+
* @param {string} id order id
|
|
972
|
+
* @param {string} symbol unified symbol of the market to create an order in
|
|
973
|
+
* @param {string} type must be 'limit'
|
|
974
|
+
* @param {string} side 'buy' or 'sell', should stay the same with original side
|
|
975
|
+
* @param {float} amount how much of currency you want to trade in units of base currency
|
|
976
|
+
* @param {float} [price] the price at which the order is to be fulfilled, in units of the quote currency
|
|
977
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
978
|
+
* @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
979
|
+
*/
|
|
980
|
+
async editOrder(id, symbol, type, side, amount = undefined, price = undefined, params = {}) {
|
|
981
|
+
await this.loadMarkets();
|
|
982
|
+
const nonce = this.nonce();
|
|
983
|
+
const request = this.editOrderRequest(nonce, id, symbol, type, side, amount, price, params);
|
|
984
|
+
request['accountId'] = this.getAccountId();
|
|
985
|
+
await this.privatePutTradeOrder(request);
|
|
986
|
+
// At this time the response body is empty. A 200 response means the update request is accepted and sent to process
|
|
987
|
+
//
|
|
988
|
+
// {}
|
|
989
|
+
//
|
|
990
|
+
return this.safeOrder({
|
|
991
|
+
'id': id,
|
|
992
|
+
'status': 'pending',
|
|
993
|
+
});
|
|
994
|
+
}
|
|
995
|
+
/**
|
|
996
|
+
* @method
|
|
997
|
+
* @name hibachi#editOrders
|
|
998
|
+
* @description edit a list of trade orders
|
|
999
|
+
* @see https://api-doc.hibachi.xyz/#c2840b9b-f02c-44ed-937d-dc2819f135b4
|
|
1000
|
+
* @param {Array} orders list of orders to edit, each object should contain the parameters required by editOrder, namely id, symbol, type, side, amount, price and params
|
|
1001
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1002
|
+
* @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
1003
|
+
*/
|
|
1004
|
+
async editOrders(orders, params = {}) {
|
|
1005
|
+
await this.loadMarkets();
|
|
1006
|
+
const nonce = this.nonce();
|
|
1007
|
+
const requestOrders = [];
|
|
1008
|
+
for (let i = 0; i < orders.length; i++) {
|
|
1009
|
+
const rawOrder = orders[i];
|
|
1010
|
+
const id = this.safeString(rawOrder, 'id');
|
|
1011
|
+
const symbol = this.safeString(rawOrder, 'symbol');
|
|
1012
|
+
const type = this.safeString(rawOrder, 'type');
|
|
1013
|
+
const side = this.safeString(rawOrder, 'side');
|
|
1014
|
+
const amount = this.safeValue(rawOrder, 'amount');
|
|
1015
|
+
const price = this.safeValue(rawOrder, 'price');
|
|
1016
|
+
const orderParams = this.safeDict(rawOrder, 'params', {});
|
|
1017
|
+
const orderRequest = this.editOrderRequest(nonce + i, id, symbol, type, side, amount, price, orderParams);
|
|
1018
|
+
orderRequest['action'] = 'modify';
|
|
1019
|
+
requestOrders.push(orderRequest);
|
|
1020
|
+
}
|
|
1021
|
+
const request = {
|
|
1022
|
+
'accountId': this.getAccountId(),
|
|
1023
|
+
'orders': requestOrders,
|
|
1024
|
+
};
|
|
1025
|
+
const response = await this.privatePostTradeOrders(this.extend(request, params));
|
|
1026
|
+
//
|
|
1027
|
+
// { "orders": [ { "orderId": "589636801329628160" } ] }
|
|
1028
|
+
//
|
|
1029
|
+
const ret = [];
|
|
1030
|
+
const responseOrders = this.safeList(response, 'orders');
|
|
1031
|
+
for (let i = 0; i < responseOrders.length; i++) {
|
|
1032
|
+
const responseOrder = responseOrders[i];
|
|
1033
|
+
ret.push(this.safeOrder({
|
|
1034
|
+
'info': responseOrder,
|
|
1035
|
+
'id': this.safeString(responseOrder, 'orderId'),
|
|
1036
|
+
'status': 'pending',
|
|
1037
|
+
}));
|
|
1038
|
+
}
|
|
1039
|
+
return ret;
|
|
1040
|
+
}
|
|
1041
|
+
cancelOrderRequest(id) {
|
|
1042
|
+
const bigid = this.convertToBigInt(id);
|
|
1043
|
+
const idbase16 = this.intToBase16(bigid);
|
|
1044
|
+
const idPadded = idbase16.padStart(16, '0');
|
|
1045
|
+
const message = this.base16ToBinary(idPadded);
|
|
1046
|
+
const signature = this.signMessage(message, this.privateKey);
|
|
1047
|
+
return {
|
|
1048
|
+
'orderId': id,
|
|
1049
|
+
'signature': signature,
|
|
1050
|
+
};
|
|
1051
|
+
}
|
|
1052
|
+
/**
|
|
1053
|
+
* @method
|
|
1054
|
+
* @name hibachi#cancelOrder
|
|
1055
|
+
* @see https://api-doc.hibachi.xyz/#e99c4f48-e610-4b7c-b7f6-1b4bb7af0271
|
|
1056
|
+
* @description cancels an open order
|
|
1057
|
+
* @param {string} id order id
|
|
1058
|
+
* @param {string} symbol is unused
|
|
1059
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1060
|
+
* @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
1061
|
+
*/
|
|
1062
|
+
async cancelOrder(id, symbol = undefined, params = {}) {
|
|
1063
|
+
const request = this.cancelOrderRequest(id);
|
|
1064
|
+
request['accountId'] = this.getAccountId();
|
|
1065
|
+
const response = await this.privateDeleteTradeOrder(this.extend(request, params));
|
|
1066
|
+
// At this time the response body is empty. A 200 response means the cancel request is accepted and sent to cancel
|
|
1067
|
+
//
|
|
1068
|
+
// {}
|
|
1069
|
+
//
|
|
1070
|
+
return this.safeOrder({
|
|
1071
|
+
'info': response,
|
|
1072
|
+
'id': id,
|
|
1073
|
+
'status': 'canceled',
|
|
1074
|
+
});
|
|
1075
|
+
}
|
|
1076
|
+
/**
|
|
1077
|
+
* @method
|
|
1078
|
+
* @name hibachi#cancelOrders
|
|
1079
|
+
* @description cancel multiple orders
|
|
1080
|
+
* @see https://api-doc.hibachi.xyz/#c2840b9b-f02c-44ed-937d-dc2819f135b4
|
|
1081
|
+
* @param {string[]} ids order ids
|
|
1082
|
+
* @param {string} [symbol] unified market symbol, unused
|
|
1083
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1084
|
+
* @returns {object} an list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
1085
|
+
*/
|
|
1086
|
+
async cancelOrders(ids, symbol = undefined, params = {}) {
|
|
1087
|
+
const orders = [];
|
|
1088
|
+
for (let i = 0; i < ids.length; i++) {
|
|
1089
|
+
const orderRequest = this.cancelOrderRequest(ids[i]);
|
|
1090
|
+
orderRequest['action'] = 'cancel';
|
|
1091
|
+
orders.push(orderRequest);
|
|
1092
|
+
}
|
|
1093
|
+
const request = {
|
|
1094
|
+
'accountId': this.getAccountId(),
|
|
1095
|
+
'orders': orders,
|
|
1096
|
+
};
|
|
1097
|
+
const response = await this.privatePostTradeOrders(this.extend(request, params));
|
|
1098
|
+
//
|
|
1099
|
+
// { "orders": [ { "orderId": "589636801329628160" } ] }
|
|
1100
|
+
//
|
|
1101
|
+
const ret = [];
|
|
1102
|
+
const responseOrders = this.safeList(response, 'orders');
|
|
1103
|
+
for (let i = 0; i < responseOrders.length; i++) {
|
|
1104
|
+
const responseOrder = responseOrders[i];
|
|
1105
|
+
ret.push(this.safeOrder({
|
|
1106
|
+
'info': responseOrder,
|
|
1107
|
+
'id': this.safeString(responseOrder, 'orderId'),
|
|
1108
|
+
'status': 'canceled',
|
|
1109
|
+
}));
|
|
1110
|
+
}
|
|
1111
|
+
return ret;
|
|
1112
|
+
}
|
|
1113
|
+
/**
|
|
1114
|
+
* @method
|
|
1115
|
+
* @name hibachi#cancelAllOrders
|
|
1116
|
+
* @see https://api-doc.hibachi.xyz/#8ed24695-016e-49b2-a72d-7511ca921fee
|
|
1117
|
+
* @description cancel all open orders in a market
|
|
1118
|
+
* @param {string} symbol unified market symbol
|
|
1119
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1120
|
+
* @returns {object} an list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
1121
|
+
*/
|
|
1122
|
+
async cancelAllOrders(symbol = undefined, params = {}) {
|
|
1123
|
+
await this.loadMarkets();
|
|
1124
|
+
const nonce = this.nonce();
|
|
1125
|
+
const nonce16 = this.intToBase16(nonce);
|
|
1126
|
+
const noncePadded = nonce16.padStart(16, '0');
|
|
1127
|
+
const message = this.base16ToBinary(noncePadded);
|
|
1128
|
+
const signature = this.signMessage(message, this.privateKey);
|
|
1129
|
+
const request = {
|
|
1130
|
+
'accountId': this.getAccountId(),
|
|
1131
|
+
'nonce': nonce,
|
|
1132
|
+
'signature': signature,
|
|
1133
|
+
};
|
|
1134
|
+
if (symbol !== undefined) {
|
|
1135
|
+
const market = this.market(symbol);
|
|
1136
|
+
request['contractId'] = this.safeInteger(market, 'numericId');
|
|
1137
|
+
}
|
|
1138
|
+
const response = await this.privateDeleteTradeOrders(this.extend(request, params));
|
|
1139
|
+
// At this time the response body is empty. A 200 response means the cancel request is accepted and sent to process
|
|
1140
|
+
//
|
|
1141
|
+
// {}
|
|
1142
|
+
//
|
|
1143
|
+
return [
|
|
1144
|
+
this.safeOrder({
|
|
1145
|
+
'info': response,
|
|
1146
|
+
}),
|
|
1147
|
+
];
|
|
1148
|
+
}
|
|
1149
|
+
encodeWithdrawMessage(amount, maxFees, address) {
|
|
1150
|
+
// Converting them to internal representation:
|
|
1151
|
+
// - Quantity: Internal = External * (10^6)
|
|
1152
|
+
// - maxFees: Internal = External * (10^6)
|
|
1153
|
+
// We only have USDT as our currency as this time
|
|
1154
|
+
const USDTAssetId = 1;
|
|
1155
|
+
const USDTFactor = '1000000';
|
|
1156
|
+
const amountStr = this.numberToString(amount);
|
|
1157
|
+
const maxFeesStr = this.numberToString(maxFees);
|
|
1158
|
+
const one = '1';
|
|
1159
|
+
const quantityInternal = Precise.stringDiv(Precise.stringMul(amountStr, USDTFactor), one, 0);
|
|
1160
|
+
const maxFeesInternal = Precise.stringDiv(Precise.stringMul(maxFeesStr, USDTFactor), one, 0);
|
|
1161
|
+
// Encoding
|
|
1162
|
+
const usdtAsset16 = this.intToBase16(USDTAssetId);
|
|
1163
|
+
const usdtAssetPadded = usdtAsset16.padStart(8, '0');
|
|
1164
|
+
const encodedAssetId = this.base16ToBinary(usdtAssetPadded);
|
|
1165
|
+
const quantity16 = this.intToBase16(this.parseToInt(quantityInternal));
|
|
1166
|
+
const quantityPadded = quantity16.padStart(16, '0');
|
|
1167
|
+
const encodedQuantity = this.base16ToBinary(quantityPadded);
|
|
1168
|
+
const maxFees16 = this.intToBase16(this.parseToInt(maxFeesInternal));
|
|
1169
|
+
const maxFeesPadded = maxFees16.padStart(16, '0');
|
|
1170
|
+
const encodedMaxFees = this.base16ToBinary(maxFeesPadded);
|
|
1171
|
+
const encodedAddress = this.base16ToBinary(address);
|
|
1172
|
+
const message = this.binaryConcat(encodedAssetId, encodedQuantity, encodedMaxFees, encodedAddress);
|
|
1173
|
+
return message;
|
|
1174
|
+
}
|
|
1175
|
+
/**
|
|
1176
|
+
* @method
|
|
1177
|
+
* @name hibachi#withdraw
|
|
1178
|
+
* @description make a withdrawal
|
|
1179
|
+
* @see https://api-doc.hibachi.xyz/#6421625d-3e45-45fa-be9b-d2a0e780c090
|
|
1180
|
+
* @param {string} code unified currency code, only support USDT
|
|
1181
|
+
* @param {float} amount the amount to withdraw
|
|
1182
|
+
* @param {string} address the address to withdraw to
|
|
1183
|
+
* @param {string} tag
|
|
1184
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1185
|
+
* @returns {object} a [transaction structure]{@link https://docs.ccxt.com/#/?id=transaction-structure}
|
|
1186
|
+
*/
|
|
1187
|
+
async withdraw(code, amount, address, tag = undefined, params = {}) {
|
|
1188
|
+
const withdrawAddress = address.slice(-40);
|
|
1189
|
+
// Get the withdraw fees
|
|
1190
|
+
const exchangeInfo = await this.publicGetMarketExchangeInfo(params);
|
|
1191
|
+
// {
|
|
1192
|
+
// "feeConfig": {
|
|
1193
|
+
// "depositFees": "0.004518",
|
|
1194
|
+
// "tradeMakerFeeRate": "0.00000000",
|
|
1195
|
+
// "tradeTakerFeeRate": "0.00020000",
|
|
1196
|
+
// "transferFeeRate": "0.00010000",
|
|
1197
|
+
// "withdrawalFees": "0.012050"
|
|
1198
|
+
// },
|
|
1199
|
+
// }
|
|
1200
|
+
const feeConfig = this.safeDict(exchangeInfo, 'feeConfig');
|
|
1201
|
+
const maxFees = this.safeNumber(feeConfig, 'withdrawalFees');
|
|
1202
|
+
// Generate the signature
|
|
1203
|
+
const message = this.encodeWithdrawMessage(amount, maxFees, withdrawAddress);
|
|
1204
|
+
const signature = this.signMessage(message, this.privateKey);
|
|
1205
|
+
const request = {
|
|
1206
|
+
'accountId': this.getAccountId(),
|
|
1207
|
+
'coin': 'USDT',
|
|
1208
|
+
'network': 'ARBITRUM',
|
|
1209
|
+
'withdrawAddress': withdrawAddress,
|
|
1210
|
+
'selfWithdrawal': false,
|
|
1211
|
+
'quantity': this.numberToString(amount),
|
|
1212
|
+
'maxFees': this.numberToString(maxFees),
|
|
1213
|
+
'signature': signature,
|
|
1214
|
+
};
|
|
1215
|
+
await this.privatePostCapitalWithdraw(this.extend(request, params));
|
|
1216
|
+
// At this time the response body is empty. A 200 response means the withdraw request is accepted and sent to process
|
|
1217
|
+
//
|
|
1218
|
+
// {}
|
|
1219
|
+
//
|
|
1220
|
+
return {
|
|
1221
|
+
'info': undefined,
|
|
1222
|
+
'id': undefined,
|
|
1223
|
+
'txid': undefined,
|
|
1224
|
+
'timestamp': this.milliseconds(),
|
|
1225
|
+
'datetime': undefined,
|
|
1226
|
+
'address': undefined,
|
|
1227
|
+
'addressFrom': undefined,
|
|
1228
|
+
'addressTo': withdrawAddress,
|
|
1229
|
+
'tag': undefined,
|
|
1230
|
+
'tagFrom': undefined,
|
|
1231
|
+
'tagTo': undefined,
|
|
1232
|
+
'type': 'withdrawal',
|
|
1233
|
+
'amount': amount,
|
|
1234
|
+
'currency': code,
|
|
1235
|
+
'status': 'pending',
|
|
1236
|
+
'fee': { 'currency': 'USDT', 'cost': maxFees },
|
|
1237
|
+
'network': 'ARBITRUM',
|
|
1238
|
+
'updated': undefined,
|
|
1239
|
+
'comment': undefined,
|
|
1240
|
+
'internal': undefined,
|
|
1241
|
+
};
|
|
1242
|
+
}
|
|
1243
|
+
nonce() {
|
|
1244
|
+
return this.milliseconds();
|
|
1245
|
+
}
|
|
1246
|
+
signMessage(message, privateKey) {
|
|
1247
|
+
if (privateKey.length === 44) {
|
|
1248
|
+
// For Exchange Managed account, the key length is 44 and we use HMAC to sign the message
|
|
1249
|
+
return this.hmac(message, this.encode(privateKey), sha256, 'hex');
|
|
1250
|
+
}
|
|
1251
|
+
else {
|
|
1252
|
+
// For Trustless account, the key length is 66 including '0x' and we use ECDSA to sign the message
|
|
1253
|
+
const hash = this.hash(this.encode(message), sha256, 'hex');
|
|
1254
|
+
const signature = ecdsa(hash.slice(-64), privateKey.slice(-64), secp256k1, undefined);
|
|
1255
|
+
const r = signature['r'];
|
|
1256
|
+
const s = signature['s'];
|
|
1257
|
+
const v = signature['v'];
|
|
1258
|
+
return r.padStart(64, '0') + s.padStart(64, '0') + this.intToBase16(v).padStart(2, '0');
|
|
1259
|
+
}
|
|
1260
|
+
}
|
|
1261
|
+
/**
|
|
1262
|
+
* @method
|
|
1263
|
+
* @name hibachi#fetchOrderBook
|
|
1264
|
+
* @description fetches the state of the open orders on the orderbook
|
|
1265
|
+
* @see https://api-doc.hibachi.xyz/#4abb30c4-e5c7-4b0f-9ade-790111dbfa47
|
|
1266
|
+
* @param {string} symbol unified symbol of the market
|
|
1267
|
+
* @param {int} [limit] currently unused
|
|
1268
|
+
* @param {object} [params] extra parameters to be passed -- see documentation link above
|
|
1269
|
+
* @returns {object} A dictionary containg [orderbook information]{@link https://docs.ccxt.com/#/?id=order-book-structure}
|
|
1270
|
+
*/
|
|
1271
|
+
async fetchOrderBook(symbol, limit = undefined, params = {}) {
|
|
1272
|
+
await this.loadMarkets();
|
|
1273
|
+
const market = this.market(symbol);
|
|
1274
|
+
const request = {
|
|
1275
|
+
'symbol': market['id'],
|
|
1276
|
+
};
|
|
1277
|
+
const response = await this.publicGetMarketDataOrderbook(this.extend(request, params));
|
|
1278
|
+
const formattedResponse = {};
|
|
1279
|
+
formattedResponse['ask'] = this.safeList(this.safeDict(response, 'ask'), 'levels');
|
|
1280
|
+
formattedResponse['bid'] = this.safeList(this.safeDict(response, 'bid'), 'levels');
|
|
1281
|
+
// {
|
|
1282
|
+
// "ask": {
|
|
1283
|
+
// "endPrice": "3512.63",
|
|
1284
|
+
// "levels": [
|
|
1285
|
+
// {
|
|
1286
|
+
// "price": "3511.93",
|
|
1287
|
+
// "quantity": "0.284772482"
|
|
1288
|
+
// },
|
|
1289
|
+
// {
|
|
1290
|
+
// "price": "3512.28",
|
|
1291
|
+
// "quantity": "0.569544964"
|
|
1292
|
+
// },
|
|
1293
|
+
// {
|
|
1294
|
+
// "price": "3512.63",
|
|
1295
|
+
// "quantity": "0.854317446"
|
|
1296
|
+
// }
|
|
1297
|
+
// ],
|
|
1298
|
+
// "startPrice": "3511.93"
|
|
1299
|
+
// },
|
|
1300
|
+
// "bid": {
|
|
1301
|
+
// "endPrice": "3510.87",
|
|
1302
|
+
// "levels": [
|
|
1303
|
+
// {
|
|
1304
|
+
// "price": "3515.39",
|
|
1305
|
+
// "quantity": "2.345153070"
|
|
1306
|
+
// },
|
|
1307
|
+
// {
|
|
1308
|
+
// "price": "3511.22",
|
|
1309
|
+
// "quantity": "0.284772482"
|
|
1310
|
+
// },
|
|
1311
|
+
// {
|
|
1312
|
+
// "price": "3510.87",
|
|
1313
|
+
// "quantity": "0.569544964"
|
|
1314
|
+
// }
|
|
1315
|
+
// ],
|
|
1316
|
+
// "startPrice": "3515.39"
|
|
1317
|
+
// }
|
|
1318
|
+
// }
|
|
1319
|
+
return this.parseOrderBook(formattedResponse, symbol, this.milliseconds(), 'bid', 'ask', 'price', 'quantity');
|
|
1320
|
+
}
|
|
1321
|
+
/**
|
|
1322
|
+
* @method
|
|
1323
|
+
* @name hibachi#fetchMyTrades
|
|
1324
|
+
* @see https://api-doc.hibachi.xyz/#0adbf143-189f-40e0-afdc-88af4cba3c79
|
|
1325
|
+
* @description fetch all trades made by the user
|
|
1326
|
+
* @param {string} symbol unified market symbol
|
|
1327
|
+
* @param {int} [since] the earliest time in ms to fetch trades for
|
|
1328
|
+
* @param {int} [limit] the maximum number of trades structures to retrieve
|
|
1329
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1330
|
+
* @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}
|
|
1331
|
+
*/
|
|
1332
|
+
async fetchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
1333
|
+
await this.loadMarkets();
|
|
1334
|
+
let market = undefined;
|
|
1335
|
+
if (symbol !== undefined) {
|
|
1336
|
+
market = this.market(symbol);
|
|
1337
|
+
}
|
|
1338
|
+
const request = { 'accountId': this.getAccountId() };
|
|
1339
|
+
const response = await this.privateGetTradeAccountTrades(this.extend(request, params));
|
|
1340
|
+
//
|
|
1341
|
+
// {
|
|
1342
|
+
// "trades": [
|
|
1343
|
+
// {
|
|
1344
|
+
// "askAccountId": 221,
|
|
1345
|
+
// "askOrderId": 589168494921909200,
|
|
1346
|
+
// "bidAccountId": 132,
|
|
1347
|
+
// "bidOrderId": 589168494829895700,
|
|
1348
|
+
// "fee": "0.000477",
|
|
1349
|
+
// "id": 199511136,
|
|
1350
|
+
// "orderType": "MARKET",
|
|
1351
|
+
// "price": "119257.90000",
|
|
1352
|
+
// "quantity": "0.0000200000",
|
|
1353
|
+
// "realizedPnl": "-0.000352",
|
|
1354
|
+
// "side": "Sell",
|
|
1355
|
+
// "symbol": "BTC/USDT-P",
|
|
1356
|
+
// "timestamp": 1752543391
|
|
1357
|
+
// }
|
|
1358
|
+
// ]
|
|
1359
|
+
// }
|
|
1360
|
+
//
|
|
1361
|
+
const trades = this.safeList(response, 'trades');
|
|
1362
|
+
return this.parseTrades(trades, market, since, limit, params);
|
|
1363
|
+
}
|
|
1364
|
+
parseOHLCV(ohlcv, market = undefined) {
|
|
1365
|
+
//
|
|
1366
|
+
// [
|
|
1367
|
+
// {
|
|
1368
|
+
// "close": "3704.751036",
|
|
1369
|
+
// "high": "3716.530378",
|
|
1370
|
+
// "interval": "1h",
|
|
1371
|
+
// "low": "3699.627883",
|
|
1372
|
+
// "open": "3716.406894",
|
|
1373
|
+
// "timestamp": 1712628000,
|
|
1374
|
+
// "volumeNotional": "1637355.846362"
|
|
1375
|
+
// }
|
|
1376
|
+
// ]
|
|
1377
|
+
//
|
|
1378
|
+
return [
|
|
1379
|
+
this.safeIntegerProduct(ohlcv, 'timestamp', 1000),
|
|
1380
|
+
this.safeNumber(ohlcv, 'open'),
|
|
1381
|
+
this.safeNumber(ohlcv, 'high'),
|
|
1382
|
+
this.safeNumber(ohlcv, 'low'),
|
|
1383
|
+
this.safeNumber(ohlcv, 'close'),
|
|
1384
|
+
this.safeNumber(ohlcv, 'volumeNotional'),
|
|
1385
|
+
];
|
|
1386
|
+
}
|
|
1387
|
+
/**
|
|
1388
|
+
* @method
|
|
1389
|
+
* @name hibachi#fetchOpenOrders
|
|
1390
|
+
* @description fetches all current open orders
|
|
1391
|
+
* @see https://api-doc.hibachi.xyz/#3243f8a0-086c-44c5-ab8a-71bbb7bab403
|
|
1392
|
+
* @param {string} [symbol] unified market symbol to filter by
|
|
1393
|
+
* @param {int} [since] milisecond timestamp of the earliest order
|
|
1394
|
+
* @param {int} [limit] the maximum number of open orders to return
|
|
1395
|
+
* @param {object} [params] extra parameters
|
|
1396
|
+
* @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
1397
|
+
*/
|
|
1398
|
+
async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
1399
|
+
await this.loadMarkets();
|
|
1400
|
+
let market = undefined;
|
|
1401
|
+
if (symbol !== undefined) {
|
|
1402
|
+
market = this.market(symbol);
|
|
1403
|
+
}
|
|
1404
|
+
const request = {
|
|
1405
|
+
'accountId': this.getAccountId(),
|
|
1406
|
+
};
|
|
1407
|
+
const response = await this.privateGetTradeOrders(this.extend(request, params));
|
|
1408
|
+
// [
|
|
1409
|
+
// {
|
|
1410
|
+
// "accountId": 12452,
|
|
1411
|
+
// "availableQuantity": "0.0000230769",
|
|
1412
|
+
// "contractId": 2,
|
|
1413
|
+
// "creationTime": 1752684501,
|
|
1414
|
+
// "orderId": "589205486123876352",
|
|
1415
|
+
// "orderType": "LIMIT",
|
|
1416
|
+
// "price": "130000.00000",
|
|
1417
|
+
// "side": "ASK",
|
|
1418
|
+
// "status": "PLACED",
|
|
1419
|
+
// "symbol": "BTC/USDT-P",
|
|
1420
|
+
// "totalQuantity": "0.0000230769"
|
|
1421
|
+
// },
|
|
1422
|
+
// {
|
|
1423
|
+
// "accountId": 12452,
|
|
1424
|
+
// "availableQuantity": "1.234000000",
|
|
1425
|
+
// "contractId": 1,
|
|
1426
|
+
// "creationTime": 1752240682,
|
|
1427
|
+
// "orderId": "589089141754429441",
|
|
1428
|
+
// "orderType": "LIMIT",
|
|
1429
|
+
// "price": "1.234000",
|
|
1430
|
+
// "side": "BID",
|
|
1431
|
+
// "status": "PLACED",
|
|
1432
|
+
// "symbol": "ETH/USDT-P",
|
|
1433
|
+
// "totalQuantity": "1.234000000"
|
|
1434
|
+
// }
|
|
1435
|
+
// ]
|
|
1436
|
+
return this.parseOrders(response, market, since, limit);
|
|
1437
|
+
}
|
|
1438
|
+
/**
|
|
1439
|
+
* @name hibachi#fetchOHLCV
|
|
1440
|
+
* @see https://api-doc.hibachi.xyz/#4f0eacec-c61e-4d51-afb3-23c51c2c6bac
|
|
1441
|
+
* @description fetches historical candlestick data containing the close, high, low, open prices, interval and the volumeNotional
|
|
1442
|
+
* @param {string} symbol unified symbol of the market to fetch OHLCV data for
|
|
1443
|
+
* @param {string} timeframe the length of time each candle represents
|
|
1444
|
+
* @param {int} [since] timestamp in ms of the earliest candle to fetch
|
|
1445
|
+
* @param {int} [limit] the maximum amount of candles to fetch
|
|
1446
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1447
|
+
* @param {int} [params.until] timestamp in ms of the latest candle to fetch
|
|
1448
|
+
* @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume
|
|
1449
|
+
*/
|
|
1450
|
+
async fetchOHLCV(symbol, timeframe = '1m', since = undefined, limit = undefined, params = {}) {
|
|
1451
|
+
await this.loadMarkets();
|
|
1452
|
+
const market = this.market(symbol);
|
|
1453
|
+
timeframe = this.safeString(this.timeframes, timeframe, timeframe);
|
|
1454
|
+
const request = {
|
|
1455
|
+
'symbol': market['id'],
|
|
1456
|
+
'interval': timeframe,
|
|
1457
|
+
};
|
|
1458
|
+
if (since !== undefined) {
|
|
1459
|
+
request['fromMs'] = since;
|
|
1460
|
+
}
|
|
1461
|
+
let until = undefined;
|
|
1462
|
+
[until, params] = this.handleOptionAndParams(params, 'fetchOHLCV', 'until');
|
|
1463
|
+
if (until !== undefined) {
|
|
1464
|
+
request['toMs'] = until;
|
|
1465
|
+
}
|
|
1466
|
+
const response = await this.publicGetMarketDataKlines(this.extend(request, params));
|
|
1467
|
+
//
|
|
1468
|
+
// [
|
|
1469
|
+
// {
|
|
1470
|
+
// "close": "3704.751036",
|
|
1471
|
+
// "high": "3716.530378",
|
|
1472
|
+
// "interval": "1h",
|
|
1473
|
+
// "low": "3699.627883",
|
|
1474
|
+
// "open": "3716.406894",
|
|
1475
|
+
// "timestamp": 1712628000,
|
|
1476
|
+
// "volumeNotional": "1637355.846362"
|
|
1477
|
+
// }
|
|
1478
|
+
// ]
|
|
1479
|
+
//
|
|
1480
|
+
const klines = this.safeList(response, 'klines', []);
|
|
1481
|
+
return this.parseOHLCVs(klines, market, timeframe, since, limit);
|
|
1482
|
+
}
|
|
1483
|
+
/**
|
|
1484
|
+
* @method
|
|
1485
|
+
* @name hibachi#fetchPositions
|
|
1486
|
+
* @description fetch all open positions
|
|
1487
|
+
* @see https://api-doc.hibachi.xyz/#69aafedb-8274-4e21-bbaf-91dace8b8f31
|
|
1488
|
+
* @param {string[]} [symbols] list of unified market symbols
|
|
1489
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1490
|
+
* @returns {object[]} a list of [position structure]{@link https://docs.ccxt.com/#/?id=position-structure}
|
|
1491
|
+
*/
|
|
1492
|
+
async fetchPositions(symbols = undefined, params = {}) {
|
|
1493
|
+
await this.loadMarkets();
|
|
1494
|
+
symbols = this.marketSymbols(symbols);
|
|
1495
|
+
const request = {
|
|
1496
|
+
'accountId': this.getAccountId(),
|
|
1497
|
+
};
|
|
1498
|
+
const response = await this.privateGetTradeAccountInfo(this.extend(request, params));
|
|
1499
|
+
//
|
|
1500
|
+
// {
|
|
1501
|
+
// "assets": [
|
|
1502
|
+
// {
|
|
1503
|
+
// "quantity": "14.130626",
|
|
1504
|
+
// "symbol": "USDT"
|
|
1505
|
+
// }
|
|
1506
|
+
// ],
|
|
1507
|
+
// "balance": "14.186087",
|
|
1508
|
+
// "maximalWithdraw": "4.152340",
|
|
1509
|
+
// "numFreeTransfersRemaining": 96,
|
|
1510
|
+
// "positions": [
|
|
1511
|
+
// {
|
|
1512
|
+
// "direction": "Short",
|
|
1513
|
+
// "entryNotional": "10.302213",
|
|
1514
|
+
// "notionalValue": "10.225008",
|
|
1515
|
+
// "quantity": "0.004310550",
|
|
1516
|
+
// "symbol": "ETH/USDT-P",
|
|
1517
|
+
// "unrealizedFundingPnl": "0.000000",
|
|
1518
|
+
// "unrealizedTradingPnl": "0.077204"
|
|
1519
|
+
// },
|
|
1520
|
+
// {
|
|
1521
|
+
// "direction": "Short",
|
|
1522
|
+
// "entryNotional": "2.000016",
|
|
1523
|
+
// "notionalValue": "1.999390",
|
|
1524
|
+
// "quantity": "0.0000328410",
|
|
1525
|
+
// "symbol": "BTC/USDT-P",
|
|
1526
|
+
// "unrealizedFundingPnl": "0.000000",
|
|
1527
|
+
// "unrealizedTradingPnl": "0.000625"
|
|
1528
|
+
// },
|
|
1529
|
+
// {
|
|
1530
|
+
// "direction": "Short",
|
|
1531
|
+
// "entryNotional": "2.000015",
|
|
1532
|
+
// "notionalValue": "2.022384",
|
|
1533
|
+
// "quantity": "0.01470600",
|
|
1534
|
+
// "symbol": "SOL/USDT-P",
|
|
1535
|
+
// "unrealizedFundingPnl": "0.000000",
|
|
1536
|
+
// "unrealizedTradingPnl": "-0.022369"
|
|
1537
|
+
// }
|
|
1538
|
+
// ],
|
|
1539
|
+
// }
|
|
1540
|
+
//
|
|
1541
|
+
const data = this.safeList(response, 'positions', []);
|
|
1542
|
+
return this.parsePositions(data, symbols);
|
|
1543
|
+
}
|
|
1544
|
+
parsePosition(position, market = undefined) {
|
|
1545
|
+
//
|
|
1546
|
+
// {
|
|
1547
|
+
// "direction": "Short",
|
|
1548
|
+
// "entryNotional": "10.302213",
|
|
1549
|
+
// "notionalValue": "10.225008",
|
|
1550
|
+
// "quantity": "0.004310550",
|
|
1551
|
+
// "symbol": "ETH/USDT-P",
|
|
1552
|
+
// "unrealizedFundingPnl": "0.000000",
|
|
1553
|
+
// "unrealizedTradingPnl": "0.077204"
|
|
1554
|
+
// }
|
|
1555
|
+
//
|
|
1556
|
+
const marketId = this.safeString(position, 'symbol');
|
|
1557
|
+
market = this.safeMarket(marketId, market);
|
|
1558
|
+
const symbol = market['symbol'];
|
|
1559
|
+
const side = this.safeStringLower(position, 'direction');
|
|
1560
|
+
const quantity = this.safeString(position, 'quantity');
|
|
1561
|
+
const unrealizedFunding = this.safeString(position, 'unrealizedFundingPnl', '0');
|
|
1562
|
+
const unrealizedTrading = this.safeString(position, 'unrealizedTradingPnl', '0');
|
|
1563
|
+
const unrealizedPnl = Precise.stringAdd(unrealizedFunding, unrealizedTrading);
|
|
1564
|
+
return this.safePosition({
|
|
1565
|
+
'info': position,
|
|
1566
|
+
'id': undefined,
|
|
1567
|
+
'symbol': symbol,
|
|
1568
|
+
'entryPrice': this.safeString(position, 'average_entry_price'),
|
|
1569
|
+
'markPrice': undefined,
|
|
1570
|
+
'notional': this.safeString(position, 'notionalValue'),
|
|
1571
|
+
'collateral': undefined,
|
|
1572
|
+
'unrealizedPnl': unrealizedPnl,
|
|
1573
|
+
'side': side,
|
|
1574
|
+
'contracts': this.parseNumber(quantity),
|
|
1575
|
+
'contractSize': undefined,
|
|
1576
|
+
'timestamp': undefined,
|
|
1577
|
+
'datetime': undefined,
|
|
1578
|
+
'hedged': undefined,
|
|
1579
|
+
'maintenanceMargin': undefined,
|
|
1580
|
+
'maintenanceMarginPercentage': undefined,
|
|
1581
|
+
'initialMargin': undefined,
|
|
1582
|
+
'initialMarginPercentage': undefined,
|
|
1583
|
+
'leverage': undefined,
|
|
1584
|
+
'liquidationPrice': undefined,
|
|
1585
|
+
'marginRatio': undefined,
|
|
1586
|
+
'marginMode': undefined,
|
|
1587
|
+
'percentage': undefined,
|
|
1588
|
+
});
|
|
1589
|
+
}
|
|
1590
|
+
sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {
|
|
1591
|
+
const endpoint = '/' + this.implodeParams(path, params);
|
|
1592
|
+
let url = this.urls['api'][api] + endpoint;
|
|
1593
|
+
headers = {};
|
|
1594
|
+
if (method === 'GET') {
|
|
1595
|
+
const request = this.omit(params, this.extractParams(path));
|
|
1596
|
+
const query = this.urlencode(request);
|
|
1597
|
+
if (query.length !== 0) {
|
|
1598
|
+
url += '?' + query;
|
|
1599
|
+
}
|
|
1600
|
+
}
|
|
1601
|
+
if (method === 'POST' || method === 'PUT' || method === 'DELETE') {
|
|
1602
|
+
headers['Content-Type'] = 'application/json';
|
|
1603
|
+
body = this.json(params);
|
|
1604
|
+
}
|
|
1605
|
+
if (api === 'private') {
|
|
1606
|
+
this.checkRequiredCredentials();
|
|
1607
|
+
headers['Authorization'] = this.apiKey;
|
|
1608
|
+
}
|
|
1609
|
+
return { 'url': url, 'method': method, 'body': body, 'headers': headers };
|
|
1610
|
+
}
|
|
1611
|
+
handleErrors(httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody) {
|
|
1612
|
+
if (response === undefined) {
|
|
1613
|
+
return undefined; // fallback to default error handler
|
|
1614
|
+
}
|
|
1615
|
+
if ('status' in response) {
|
|
1616
|
+
//
|
|
1617
|
+
// {"errorCode":4,"message":"Invalid input: Invalid quantity: 0","status":"failed"}
|
|
1618
|
+
//
|
|
1619
|
+
const status = this.safeString(response, 'status');
|
|
1620
|
+
if (status === 'failed') {
|
|
1621
|
+
const code = this.safeString(response, 'errorCode');
|
|
1622
|
+
const feedback = this.id + ' ' + body;
|
|
1623
|
+
this.throwBroadlyMatchedException(this.exceptions['broad'], body, feedback);
|
|
1624
|
+
this.throwExactlyMatchedException(this.exceptions['exact'], code, feedback);
|
|
1625
|
+
const message = this.safeString(response, 'message');
|
|
1626
|
+
this.throwExactlyMatchedException(this.exceptions['exact'], message, feedback);
|
|
1627
|
+
throw new ExchangeError(feedback);
|
|
1628
|
+
}
|
|
1629
|
+
}
|
|
1630
|
+
return undefined;
|
|
1631
|
+
}
|
|
1632
|
+
parseTransactionType(type) {
|
|
1633
|
+
const types = {
|
|
1634
|
+
'deposit': 'transaction',
|
|
1635
|
+
'withdrawal': 'transaction',
|
|
1636
|
+
'transfer-in': 'transfer',
|
|
1637
|
+
'transfer-out': 'transfer',
|
|
1638
|
+
};
|
|
1639
|
+
return this.safeString(types, type, type);
|
|
1640
|
+
}
|
|
1641
|
+
parseTransactionStatus(status) {
|
|
1642
|
+
const statuses = {
|
|
1643
|
+
'pending': 'pending',
|
|
1644
|
+
'claimable': 'pending',
|
|
1645
|
+
'completed': 'ok',
|
|
1646
|
+
'failed': 'canceled',
|
|
1647
|
+
};
|
|
1648
|
+
return this.safeString(statuses, status, status);
|
|
1649
|
+
}
|
|
1650
|
+
parseLedgerEntry(item, currency = undefined) {
|
|
1651
|
+
const transactionType = this.safeString(item, 'transactionType');
|
|
1652
|
+
let timestamp = undefined;
|
|
1653
|
+
let type = undefined;
|
|
1654
|
+
let direction = undefined;
|
|
1655
|
+
let amount = undefined;
|
|
1656
|
+
let fee = undefined;
|
|
1657
|
+
let referenceId = undefined;
|
|
1658
|
+
let referenceAccount = undefined;
|
|
1659
|
+
let status = undefined;
|
|
1660
|
+
if (transactionType === undefined) {
|
|
1661
|
+
// response from TradeAccountTradingHistory
|
|
1662
|
+
timestamp = this.safeIntegerProduct(item, 'timestamp', 1000);
|
|
1663
|
+
type = 'trade';
|
|
1664
|
+
let amountStr = this.safeString(item, 'realizedPnl');
|
|
1665
|
+
if (Precise.stringLt(amountStr, '0')) {
|
|
1666
|
+
direction = 'out';
|
|
1667
|
+
amountStr = Precise.stringNeg(amountStr);
|
|
1668
|
+
}
|
|
1669
|
+
else {
|
|
1670
|
+
direction = 'in';
|
|
1671
|
+
}
|
|
1672
|
+
amount = this.parseNumber(amountStr);
|
|
1673
|
+
fee = { 'currency': 'USDT', 'cost': this.safeNumber(item, 'fee') };
|
|
1674
|
+
status = 'ok';
|
|
1675
|
+
}
|
|
1676
|
+
else {
|
|
1677
|
+
// response from CapitalHistory
|
|
1678
|
+
timestamp = this.safeIntegerProduct(item, 'timestampSec', 1000);
|
|
1679
|
+
amount = this.safeNumber(item, 'quantity');
|
|
1680
|
+
direction = (transactionType === 'deposit' || transactionType === 'transfer-in') ? 'in' : 'out';
|
|
1681
|
+
type = this.parseTransactionType(transactionType);
|
|
1682
|
+
status = this.parseTransactionStatus(this.safeString(item, 'status'));
|
|
1683
|
+
if (transactionType === 'transfer-in') {
|
|
1684
|
+
referenceAccount = this.safeString(item, 'srcAccountId');
|
|
1685
|
+
}
|
|
1686
|
+
else if (transactionType === 'transfer-out') {
|
|
1687
|
+
referenceAccount = this.safeString(item, 'receivingAccountId');
|
|
1688
|
+
}
|
|
1689
|
+
referenceId = this.safeString(item, 'transactionHash');
|
|
1690
|
+
}
|
|
1691
|
+
return this.safeLedgerEntry({
|
|
1692
|
+
'id': this.safeString(item, 'id'),
|
|
1693
|
+
'currency': this.currency('USDT'),
|
|
1694
|
+
'account': this.numberToString(this.accountId),
|
|
1695
|
+
'referenceAccount': referenceAccount,
|
|
1696
|
+
'referenceId': referenceId,
|
|
1697
|
+
'status': status,
|
|
1698
|
+
'amount': amount,
|
|
1699
|
+
'before': undefined,
|
|
1700
|
+
'after': undefined,
|
|
1701
|
+
'fee': fee,
|
|
1702
|
+
'direction': direction,
|
|
1703
|
+
'timestamp': timestamp,
|
|
1704
|
+
'datetime': this.iso8601(timestamp),
|
|
1705
|
+
'type': type,
|
|
1706
|
+
'info': item,
|
|
1707
|
+
}, currency);
|
|
1708
|
+
}
|
|
1709
|
+
/**
|
|
1710
|
+
* @method
|
|
1711
|
+
* @name hibachi#fetchLedger
|
|
1712
|
+
* @description fetch the history of changes, actions done by the user or operations that altered the balance of the user
|
|
1713
|
+
* @see https://api-doc.hibachi.xyz/#35125e3f-d154-4bfd-8276-a48bb1c62020
|
|
1714
|
+
* @param {string} [code] unified currency code, default is undefined
|
|
1715
|
+
* @param {int} [since] timestamp in ms of the earliest ledger entry, default is undefined
|
|
1716
|
+
* @param {int} [limit] max number of ledger entries to return, default is undefined
|
|
1717
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1718
|
+
* @returns {object} a [ledger structure]{@link https://docs.ccxt.com/#/?id=ledger}
|
|
1719
|
+
*/
|
|
1720
|
+
async fetchLedger(code = undefined, since = undefined, limit = undefined, params = {}) {
|
|
1721
|
+
await this.loadMarkets();
|
|
1722
|
+
const currency = this.currency('USDT');
|
|
1723
|
+
const request = { 'accountId': this.getAccountId() };
|
|
1724
|
+
const rawPromises = [
|
|
1725
|
+
this.privateGetCapitalHistory(this.extend(request, params)),
|
|
1726
|
+
this.privateGetTradeAccountTradingHistory(this.extend(request, params)),
|
|
1727
|
+
];
|
|
1728
|
+
const promises = await Promise.all(rawPromises);
|
|
1729
|
+
const responseCapitalHistory = promises[0];
|
|
1730
|
+
//
|
|
1731
|
+
// {
|
|
1732
|
+
// "transactions": [
|
|
1733
|
+
// {
|
|
1734
|
+
// "assetId": 1,
|
|
1735
|
+
// "blockNumber": 358396669,
|
|
1736
|
+
// "chain": "Arbitrum",
|
|
1737
|
+
// "etaTsSec": null,
|
|
1738
|
+
// "id": 358396669,
|
|
1739
|
+
// "quantity": "0.999500",
|
|
1740
|
+
// "status": "pending",
|
|
1741
|
+
// "timestampSec": 1752692872,
|
|
1742
|
+
// "token": "USDT",
|
|
1743
|
+
// "transactionHash": "0x408e48881e0ba77d8638e3fe57bc06bdec513ddaa8b672e0aefa7e22e2f18b5e",
|
|
1744
|
+
// "transactionType": "deposit"
|
|
1745
|
+
// },
|
|
1746
|
+
// {
|
|
1747
|
+
// "assetId": 1,
|
|
1748
|
+
// "etaTsSec": null,
|
|
1749
|
+
// "id": 13116,
|
|
1750
|
+
// "instantWithdrawalChain": null,
|
|
1751
|
+
// "instantWithdrawalToken": null,
|
|
1752
|
+
// "isInstantWithdrawal": false,
|
|
1753
|
+
// "quantity": "0.040000",
|
|
1754
|
+
// "status": "completed",
|
|
1755
|
+
// "timestampSec": 1752542708,
|
|
1756
|
+
// "transactionHash": "0xe89cf90b2408d1a273dc9427654145def102d9449e5e2cfc10690ccffc3d7e28",
|
|
1757
|
+
// "transactionType": "withdrawal",
|
|
1758
|
+
// "withdrawalAddress": "0x23625d5fc6a6e32638d908eb4c3a3415e5121f76"
|
|
1759
|
+
// },
|
|
1760
|
+
// {
|
|
1761
|
+
// "assetId": 1,
|
|
1762
|
+
// "id": 167,
|
|
1763
|
+
// "quantity": "10.000000",
|
|
1764
|
+
// "srcAccountId": 175,
|
|
1765
|
+
// "srcAddress": "0xc2f77ce029438a3fdfe68ddee25991a9fb985a86",
|
|
1766
|
+
// "status": "completed",
|
|
1767
|
+
// "timestampSec": 1732224729,
|
|
1768
|
+
// "transactionType": "transfer-in"
|
|
1769
|
+
// },
|
|
1770
|
+
// {
|
|
1771
|
+
// "assetId": 1,
|
|
1772
|
+
// "id": 170,
|
|
1773
|
+
// "quantity": "10.000000",
|
|
1774
|
+
// "receivingAccountId": 175,
|
|
1775
|
+
// "receivingAddress": "0xc2f77ce029438a3fdfe68ddee25991a9fb985a86",
|
|
1776
|
+
// "status": "completed",
|
|
1777
|
+
// "timestampSec": 1732225631,
|
|
1778
|
+
// "transactionType": "transfer-out"
|
|
1779
|
+
// },
|
|
1780
|
+
// ]
|
|
1781
|
+
// }
|
|
1782
|
+
//
|
|
1783
|
+
const rowsCapitalHistory = this.safeList(responseCapitalHistory, 'transactions');
|
|
1784
|
+
const responseTradingHistory = promises[1];
|
|
1785
|
+
//
|
|
1786
|
+
// {
|
|
1787
|
+
// "tradingHistory": [
|
|
1788
|
+
// {
|
|
1789
|
+
// "eventType": "MARKET",
|
|
1790
|
+
// "fee": "0.000008",
|
|
1791
|
+
// "priceOrFundingRate": "119687.82481",
|
|
1792
|
+
// "quantity": "0.0000003727",
|
|
1793
|
+
// "realizedPnl": "0.004634",
|
|
1794
|
+
// "side": "Sell",
|
|
1795
|
+
// "symbol": "BTC/USDT-P",
|
|
1796
|
+
// "timestamp": 1752522571
|
|
1797
|
+
// },
|
|
1798
|
+
// {
|
|
1799
|
+
// "eventType": "FundingEvent",
|
|
1800
|
+
// "fee": "0",
|
|
1801
|
+
// "priceOrFundingRate": "0.000203",
|
|
1802
|
+
// "quantity": "0.0000003727",
|
|
1803
|
+
// "realizedPnl": "-0.000009067899008751979",
|
|
1804
|
+
// "side": "Long",
|
|
1805
|
+
// "symbol": "BTC/USDT-P",
|
|
1806
|
+
// "timestamp": 1752508800
|
|
1807
|
+
// },
|
|
1808
|
+
// ]
|
|
1809
|
+
// }
|
|
1810
|
+
//
|
|
1811
|
+
const rowsTradingHistory = this.safeList(responseTradingHistory, 'tradingHistory');
|
|
1812
|
+
const rows = this.arrayConcat(rowsCapitalHistory, rowsTradingHistory);
|
|
1813
|
+
return this.parseLedger(rows, currency, since, limit, params);
|
|
1814
|
+
}
|
|
1815
|
+
/**
|
|
1816
|
+
* @method
|
|
1817
|
+
* @name hibachi#fetchDepositAddress
|
|
1818
|
+
* @description fetch deposit address for given currency and chain. currently, we have a single EVM address across multiple EVM chains. Note: This method is currently only supported for trustless accounts
|
|
1819
|
+
* @param {string} code unified currency code
|
|
1820
|
+
* @param {object} [params] extra parameters for API
|
|
1821
|
+
* @param {string} [params.publicKey] your public key, you can get it from UI after creating API key
|
|
1822
|
+
* @returns {object} an [address structure]{@link https://docs.ccxt.com/#/?id=address-structure}
|
|
1823
|
+
*/
|
|
1824
|
+
async fetchDepositAddress(code, params = {}) {
|
|
1825
|
+
const request = {
|
|
1826
|
+
'publicKey': this.safeString(params, 'publicKey'),
|
|
1827
|
+
'accountId': this.getAccountId(),
|
|
1828
|
+
};
|
|
1829
|
+
const response = await this.privateGetCapitalDepositInfo(this.extend(request, params));
|
|
1830
|
+
// {
|
|
1831
|
+
// "depositAddressEvm": "0x0b95d90b9345dadf1460bd38b9f4bb0d2f4ed788"
|
|
1832
|
+
// }
|
|
1833
|
+
return {
|
|
1834
|
+
'info': response,
|
|
1835
|
+
'currency': 'USDT',
|
|
1836
|
+
'network': 'ARBITRUM',
|
|
1837
|
+
'address': this.safeString(response, 'depositAddressEvm'),
|
|
1838
|
+
'tag': undefined,
|
|
1839
|
+
};
|
|
1840
|
+
}
|
|
1841
|
+
parseTransaction(transaction, currency = undefined) {
|
|
1842
|
+
const timestamp = this.safeIntegerProduct(transaction, 'timestampSec', 1000);
|
|
1843
|
+
const address = this.safeString(transaction, 'withdrawalAddress');
|
|
1844
|
+
let transactionType = this.safeString(transaction, 'transactionType');
|
|
1845
|
+
if (transactionType !== 'deposit' && transactionType !== 'withdrawal') {
|
|
1846
|
+
transactionType = this.parseTransactionType(transactionType);
|
|
1847
|
+
}
|
|
1848
|
+
return {
|
|
1849
|
+
'info': transaction,
|
|
1850
|
+
'id': this.safeString(transaction, 'id'),
|
|
1851
|
+
'txid': this.safeString(transaction, 'transactionHash'),
|
|
1852
|
+
'timestamp': timestamp,
|
|
1853
|
+
'datetime': this.iso8601(timestamp),
|
|
1854
|
+
'network': 'ARBITRUM',
|
|
1855
|
+
'address': address,
|
|
1856
|
+
'addressTo': address,
|
|
1857
|
+
'addressFrom': undefined,
|
|
1858
|
+
'tag': undefined,
|
|
1859
|
+
'tagTo': undefined,
|
|
1860
|
+
'tagFrom': undefined,
|
|
1861
|
+
'type': transactionType,
|
|
1862
|
+
'amount': this.safeNumber(transaction, 'quantity'),
|
|
1863
|
+
'currency': 'USDT',
|
|
1864
|
+
'status': this.parseTransactionStatus(this.safeString(transaction, 'status')),
|
|
1865
|
+
'updated': undefined,
|
|
1866
|
+
'internal': undefined,
|
|
1867
|
+
'comment': undefined,
|
|
1868
|
+
'fee': undefined,
|
|
1869
|
+
};
|
|
1870
|
+
}
|
|
1871
|
+
/**
|
|
1872
|
+
* @method
|
|
1873
|
+
* @name hibachi#fetchDeposits
|
|
1874
|
+
* @description fetch deposits made to account
|
|
1875
|
+
* @see https://api-doc.hibachi.xyz/#35125e3f-d154-4bfd-8276-a48bb1c62020
|
|
1876
|
+
* @param {string} [code] unified currency code
|
|
1877
|
+
* @param {int} [since] filter by earliest timestamp (ms)
|
|
1878
|
+
* @param {int} [limit] maximum number of deposits to be returned
|
|
1879
|
+
* @param {object} [params] extra parameters to be passed to API
|
|
1880
|
+
* @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}
|
|
1881
|
+
*/
|
|
1882
|
+
async fetchDeposits(code = undefined, since = undefined, limit = undefined, params = {}) {
|
|
1883
|
+
const currency = this.safeCurrency(code);
|
|
1884
|
+
const request = {
|
|
1885
|
+
'accountId': this.getAccountId(),
|
|
1886
|
+
};
|
|
1887
|
+
const response = await this.privateGetCapitalHistory(this.extend(request, params));
|
|
1888
|
+
// {
|
|
1889
|
+
// "transactions": [
|
|
1890
|
+
// {
|
|
1891
|
+
// "assetId": 1,
|
|
1892
|
+
// "blockNumber": 0,
|
|
1893
|
+
// "chain": null,
|
|
1894
|
+
// "etaTsSec": 1752758789,
|
|
1895
|
+
// "id": 42688,
|
|
1896
|
+
// "quantity": "6.130000",
|
|
1897
|
+
// "status": "completed",
|
|
1898
|
+
// "timestampSec": 1752758788,
|
|
1899
|
+
// "token": null,
|
|
1900
|
+
// "transactionHash": "0x8dcd7bd1155b5624fb5e38a1365888f712ec633a57434340e05080c70b0e3bba",
|
|
1901
|
+
// "transactionType": "deposit"
|
|
1902
|
+
// },
|
|
1903
|
+
// {
|
|
1904
|
+
// "assetId": 1,
|
|
1905
|
+
// "etaTsSec": null,
|
|
1906
|
+
// "id": 12993,
|
|
1907
|
+
// "instantWithdrawalChain": null,
|
|
1908
|
+
// "instantWithdrawalToken": null,
|
|
1909
|
+
// "isInstantWithdrawal": false,
|
|
1910
|
+
// "quantity": "0.111930",
|
|
1911
|
+
// "status": "completed",
|
|
1912
|
+
// "timestampSec": 1752387891,
|
|
1913
|
+
// "transactionHash": "0x32ab5fe5b90f6d753bab83523ebc8465eb9daef54580e13cb9ff031d400c5620",
|
|
1914
|
+
// "transactionType": "withdrawal",
|
|
1915
|
+
// "withdrawalAddress": "0x43f15ef2ef2ab5e61e987ee3d652a5872aea8a6c"
|
|
1916
|
+
// },
|
|
1917
|
+
// ]
|
|
1918
|
+
// }
|
|
1919
|
+
const transactions = this.safeList(response, 'transactions');
|
|
1920
|
+
const deposits = [];
|
|
1921
|
+
for (let i = 0; i < transactions.length; i++) {
|
|
1922
|
+
const transaction = transactions[i];
|
|
1923
|
+
if (this.safeString(transaction, 'transactionType') === 'deposit') {
|
|
1924
|
+
deposits.push(transaction);
|
|
1925
|
+
}
|
|
1926
|
+
}
|
|
1927
|
+
return this.parseTransactions(deposits, currency, since, limit, params);
|
|
1928
|
+
}
|
|
1929
|
+
/**
|
|
1930
|
+
* @method
|
|
1931
|
+
* @name hibachi#fetchWithdrawals
|
|
1932
|
+
* @description fetch withdrawals made from account
|
|
1933
|
+
* @see https://api-doc.hibachi.xyz/#35125e3f-d154-4bfd-8276-a48bb1c62020
|
|
1934
|
+
* @param {string} [code] unified currency code
|
|
1935
|
+
* @param {int} [since] filter by earliest timestamp (ms)
|
|
1936
|
+
* @param {int} [limit] maximum number of deposits to be returned
|
|
1937
|
+
* @param {object} [params] extra parameters to be passed to API
|
|
1938
|
+
* @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}
|
|
1939
|
+
*/
|
|
1940
|
+
async fetchWithdrawals(code = undefined, since = undefined, limit = undefined, params = {}) {
|
|
1941
|
+
const currency = this.safeCurrency(code);
|
|
1942
|
+
const request = {
|
|
1943
|
+
'accountId': this.getAccountId(),
|
|
1944
|
+
};
|
|
1945
|
+
const response = await this.privateGetCapitalHistory(this.extend(request, params));
|
|
1946
|
+
// {
|
|
1947
|
+
// "transactions": [
|
|
1948
|
+
// {
|
|
1949
|
+
// "assetId": 1,
|
|
1950
|
+
// "blockNumber": 0,
|
|
1951
|
+
// "chain": null,
|
|
1952
|
+
// "etaTsSec": 1752758789,
|
|
1953
|
+
// "id": 42688,
|
|
1954
|
+
// "quantity": "6.130000",
|
|
1955
|
+
// "status": "completed",
|
|
1956
|
+
// "timestampSec": 1752758788,
|
|
1957
|
+
// "token": null,
|
|
1958
|
+
// "transactionHash": "0x8dcd7bd1155b5624fb5e38a1365888f712ec633a57434340e05080c70b0e3bba",
|
|
1959
|
+
// "transactionType": "deposit"
|
|
1960
|
+
// },
|
|
1961
|
+
// {
|
|
1962
|
+
// "assetId": 1,
|
|
1963
|
+
// "etaTsSec": null,
|
|
1964
|
+
// "id": 12993,
|
|
1965
|
+
// "instantWithdrawalChain": null,
|
|
1966
|
+
// "instantWithdrawalToken": null,
|
|
1967
|
+
// "isInstantWithdrawal": false,
|
|
1968
|
+
// "quantity": "0.111930",
|
|
1969
|
+
// "status": "completed",
|
|
1970
|
+
// "timestampSec": 1752387891,
|
|
1971
|
+
// "transactionHash": "0x32ab5fe5b90f6d753bab83523ebc8465eb9daef54580e13cb9ff031d400c5620",
|
|
1972
|
+
// "transactionType": "withdrawal",
|
|
1973
|
+
// "withdrawalAddress": "0x43f15ef2ef2ab5e61e987ee3d652a5872aea8a6c"
|
|
1974
|
+
// },
|
|
1975
|
+
// ]
|
|
1976
|
+
// }
|
|
1977
|
+
const transactions = this.safeList(response, 'transactions');
|
|
1978
|
+
const withdrawals = [];
|
|
1979
|
+
for (let i = 0; i < transactions.length; i++) {
|
|
1980
|
+
const transaction = transactions[i];
|
|
1981
|
+
if (this.safeString(transaction, 'transactionType') === 'withdrawal') {
|
|
1982
|
+
withdrawals.push(transaction);
|
|
1983
|
+
}
|
|
1984
|
+
}
|
|
1985
|
+
return this.parseTransactions(withdrawals, currency, since, limit, params);
|
|
1986
|
+
}
|
|
1987
|
+
/**
|
|
1988
|
+
* @method
|
|
1989
|
+
* @name hibachi#fetchTime
|
|
1990
|
+
* @description fetches the current integer timestamp in milliseconds from the exchange server
|
|
1991
|
+
* @see http://api-doc.hibachi.xyz/#b5c6a3bc-243d-4d35-b6d4-a74c92495434
|
|
1992
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1993
|
+
* @returns {int} the current integer timestamp in milliseconds from the exchange server
|
|
1994
|
+
*/
|
|
1995
|
+
async fetchTime(params = {}) {
|
|
1996
|
+
const response = await this.publicGetExchangeUtcTimestamp(params);
|
|
1997
|
+
//
|
|
1998
|
+
// { "timestampMs":1754077574040 }
|
|
1999
|
+
//
|
|
2000
|
+
return this.safeInteger(response, 'timestampMs');
|
|
2001
|
+
}
|
|
2002
|
+
/**
|
|
2003
|
+
* @method
|
|
2004
|
+
* @name hibachi#fetchOpenInterest
|
|
2005
|
+
* @description retrieves the open interest of a contract trading pair
|
|
2006
|
+
* @see https://api-doc.hibachi.xyz/#bc34e8ae-e094-4802-8d56-3efe3a7bad49
|
|
2007
|
+
* @param {string} symbol unified CCXT market symbol
|
|
2008
|
+
* @param {object} [params] exchange specific parameters
|
|
2009
|
+
* @returns {object} an open interest structure{@link https://docs.ccxt.com/#/?id=open-interest-structure}
|
|
2010
|
+
*/
|
|
2011
|
+
async fetchOpenInterest(symbol, params = {}) {
|
|
2012
|
+
await this.loadMarkets();
|
|
2013
|
+
const market = this.market(symbol);
|
|
2014
|
+
const request = {
|
|
2015
|
+
'symbol': market['id'],
|
|
2016
|
+
};
|
|
2017
|
+
const response = await this.publicGetMarketDataOpenInterest(this.extend(request, params));
|
|
2018
|
+
//
|
|
2019
|
+
// { "totalQuantity" : "2.3299770166" }
|
|
2020
|
+
//
|
|
2021
|
+
const timestamp = this.milliseconds();
|
|
2022
|
+
return this.safeOpenInterest({
|
|
2023
|
+
'symbol': symbol,
|
|
2024
|
+
'openInterestAmount': this.safeString(response, 'totalQuantity'),
|
|
2025
|
+
'openInterestValue': undefined,
|
|
2026
|
+
'timestamp': timestamp,
|
|
2027
|
+
'datetime': this.iso8601(timestamp),
|
|
2028
|
+
'info': response,
|
|
2029
|
+
}, market);
|
|
2030
|
+
}
|
|
2031
|
+
/**
|
|
2032
|
+
* @method
|
|
2033
|
+
* @name hibachi#fetchFundingRate
|
|
2034
|
+
* @description fetch the current funding rate
|
|
2035
|
+
* @see https://api-doc.hibachi.xyz/#bca696ca-b9b2-4072-8864-5d6b8c09807e
|
|
2036
|
+
* @param {string} symbol unified market symbol
|
|
2037
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
2038
|
+
* @returns {object} a [funding rate structure]{@link https://docs.ccxt.com/#/?id=funding-rate-structure}
|
|
2039
|
+
*/
|
|
2040
|
+
async fetchFundingRate(symbol, params = {}) {
|
|
2041
|
+
await this.loadMarkets();
|
|
2042
|
+
const market = this.market(symbol);
|
|
2043
|
+
const request = {
|
|
2044
|
+
'symbol': market['id'],
|
|
2045
|
+
};
|
|
2046
|
+
const response = await this.publicGetMarketDataPrices(this.extend(request, params));
|
|
2047
|
+
//
|
|
2048
|
+
// {
|
|
2049
|
+
// "askPrice": "3514.650296",
|
|
2050
|
+
// "bidPrice": "3513.596112",
|
|
2051
|
+
// "fundingRateEstimation": {
|
|
2052
|
+
// "estimatedFundingRate": "0.000001",
|
|
2053
|
+
// "nextFundingTimestamp": 1712707200
|
|
2054
|
+
// },
|
|
2055
|
+
// "markPrice": "3514.288858",
|
|
2056
|
+
// "spotPrice": "3514.715000",
|
|
2057
|
+
// "symbol": "ETH/USDT-P",
|
|
2058
|
+
// "tradePrice": "2372.746570"
|
|
2059
|
+
// }
|
|
2060
|
+
//
|
|
2061
|
+
const funding = this.safeDict(response, 'fundingRateEstimation', {});
|
|
2062
|
+
const timestamp = this.milliseconds();
|
|
2063
|
+
const nextFundingTimestamp = this.safeIntegerProduct(funding, 'nextFundingTimestamp', 1000);
|
|
2064
|
+
return {
|
|
2065
|
+
'info': funding,
|
|
2066
|
+
'symbol': market['symbol'],
|
|
2067
|
+
'markPrice': undefined,
|
|
2068
|
+
'indexPrice': undefined,
|
|
2069
|
+
'interestRate': this.parseNumber('0'),
|
|
2070
|
+
'estimatedSettlePrice': undefined,
|
|
2071
|
+
'timestamp': timestamp,
|
|
2072
|
+
'datetime': this.iso8601(timestamp),
|
|
2073
|
+
'fundingRate': this.safeNumber(funding, 'estimatedFundingRate'),
|
|
2074
|
+
'fundingTimestamp': nextFundingTimestamp,
|
|
2075
|
+
'fundingDatetime': this.iso8601(nextFundingTimestamp),
|
|
2076
|
+
'nextFundingRate': undefined,
|
|
2077
|
+
'nextFundingTimestamp': undefined,
|
|
2078
|
+
'nextFundingDatetime': undefined,
|
|
2079
|
+
'previousFundingRate': undefined,
|
|
2080
|
+
'previousFundingTimestamp': undefined,
|
|
2081
|
+
'previousFundingDatetime': undefined,
|
|
2082
|
+
'interval': '8h',
|
|
2083
|
+
};
|
|
2084
|
+
}
|
|
2085
|
+
/**
|
|
2086
|
+
* @method
|
|
2087
|
+
* @name hibachi#fetchFundingRateHistory
|
|
2088
|
+
* @description fetches historical funding rate prices
|
|
2089
|
+
* @see https://api-doc.hibachi.xyz/#4abb30c4-e5c7-4b0f-9ade-790111dbfa47
|
|
2090
|
+
* @param {string} symbol unified symbol of the market to fetch the funding rate history for
|
|
2091
|
+
* @param {int} [since] timestamp in ms of the earliest funding rate to fetch
|
|
2092
|
+
* @param {int} [limit] the maximum amount of [funding rate structures]{@link https://docs.ccxt.com/#/?id=funding-rate-history-structure} to fetch
|
|
2093
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
2094
|
+
* @returns {object[]} a list of [funding rate structures]{@link https://docs.ccxt.com/#/?id=funding-rate-history-structure}
|
|
2095
|
+
*/
|
|
2096
|
+
async fetchFundingRateHistory(symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
2097
|
+
await this.loadMarkets();
|
|
2098
|
+
const market = this.market(symbol);
|
|
2099
|
+
const request = {
|
|
2100
|
+
'symbol': market['id'],
|
|
2101
|
+
};
|
|
2102
|
+
const response = await this.publicGetMarketDataFundingRates(this.extend(request, params));
|
|
2103
|
+
//
|
|
2104
|
+
// {
|
|
2105
|
+
// "data": [
|
|
2106
|
+
// {
|
|
2107
|
+
// "contractId": 2,
|
|
2108
|
+
// "fundingTimestamp": 1753488000,
|
|
2109
|
+
// "fundingRate": "0.000137",
|
|
2110
|
+
// "indexPrice": "117623.65010"
|
|
2111
|
+
// }
|
|
2112
|
+
// ]
|
|
2113
|
+
// }
|
|
2114
|
+
//
|
|
2115
|
+
const data = this.safeList(response, 'data');
|
|
2116
|
+
const rates = [];
|
|
2117
|
+
for (let i = 0; i < data.length; i++) {
|
|
2118
|
+
const entry = data[i];
|
|
2119
|
+
const timestamp = this.safeIntegerProduct(entry, 'fundingTimestamp', 1000);
|
|
2120
|
+
rates.push({
|
|
2121
|
+
'info': entry,
|
|
2122
|
+
'symbol': symbol,
|
|
2123
|
+
'fundingRate': this.safeNumber(entry, 'fundingRate'),
|
|
2124
|
+
'timestamp': timestamp,
|
|
2125
|
+
'datetime': this.iso8601(timestamp),
|
|
2126
|
+
});
|
|
2127
|
+
}
|
|
2128
|
+
const sorted = this.sortBy(rates, 'timestamp');
|
|
2129
|
+
return this.filterBySymbolSinceLimit(sorted, symbol, since, limit);
|
|
2130
|
+
}
|
|
2131
|
+
}
|