ccxt-ir 4.10.0 → 4.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -4
- package/dist/ccxt.browser.min.js +2 -2
- package/dist/cjs/ccxt.js +4 -1
- package/dist/cjs/src/abstract/bidarz.js +11 -0
- package/dist/cjs/src/bidarz.js +337 -0
- package/dist/cjs/src/bit24.js +4 -3
- package/js/ccxt.d.ts +5 -2
- package/js/ccxt.js +4 -2
- package/js/src/abstract/bidarz.d.ts +9 -0
- package/js/src/abstract/bidarz.js +11 -0
- package/js/src/bidarz.d.ts +22 -0
- package/js/src/bidarz.js +336 -0
- package/js/src/bit24.js +4 -3
- package/js/src/src/abantether.d.ts +21 -0
- package/js/src/src/abantether.js +353 -0
- package/js/src/src/abstract/abantether.d.ts +8 -0
- package/js/src/src/abstract/abantether.js +11 -0
- package/js/src/src/abstract/afratether.d.ts +9 -0
- package/js/src/src/abstract/afratether.js +11 -0
- package/js/src/src/abstract/alpaca.d.ts +77 -0
- package/js/src/src/abstract/alpaca.js +11 -0
- package/js/src/src/abstract/apex.d.ts +34 -0
- package/js/src/src/abstract/apex.js +11 -0
- package/js/src/src/abstract/arzinja.d.ts +8 -0
- package/js/src/src/abstract/arzinja.js +11 -0
- package/js/src/src/abstract/arzplus.d.ts +11 -0
- package/js/src/src/abstract/arzplus.js +11 -0
- package/js/src/src/abstract/ascendex.d.ts +80 -0
- package/js/src/src/abstract/ascendex.js +11 -0
- package/js/src/src/abstract/asretether.d.ts +8 -0
- package/js/src/src/abstract/asretether.js +11 -0
- package/js/src/src/abstract/bidarz.d.ts +9 -0
- package/js/src/src/abstract/bidarz.js +11 -0
- package/js/src/src/abstract/bigone.d.ts +48 -0
- package/js/src/src/abstract/bigone.js +11 -0
- package/js/src/src/abstract/binance.d.ts +773 -0
- package/js/src/src/abstract/binance.js +11 -0
- package/js/src/src/abstract/bingx.d.ts +165 -0
- package/js/src/src/abstract/bingx.js +11 -0
- package/js/src/src/abstract/bit24.d.ts +9 -0
- package/js/src/src/abstract/bit24.js +11 -0
- package/js/src/src/abstract/bit2c.d.ts +30 -0
- package/js/src/src/abstract/bit2c.js +11 -0
- package/js/src/src/abstract/bitbank.d.ts +35 -0
- package/js/src/src/abstract/bitbank.js +11 -0
- package/js/src/src/abstract/bitbarg.d.ts +8 -0
- package/js/src/src/abstract/bitbarg.js +11 -0
- package/js/src/src/abstract/bitbns.d.ts +43 -0
- package/js/src/src/abstract/bitbns.js +11 -0
- package/js/src/src/abstract/bitfinex.d.ts +143 -0
- package/js/src/src/abstract/bitfinex.js +11 -0
- package/js/src/src/abstract/bitflyer.d.ts +42 -0
- package/js/src/src/abstract/bitflyer.js +11 -0
- package/js/src/src/abstract/bitget.d.ts +578 -0
- package/js/src/src/abstract/bitget.js +11 -0
- package/js/src/src/abstract/bithumb.d.ts +35 -0
- package/js/src/src/abstract/bithumb.js +11 -0
- package/js/src/src/abstract/bitimen.d.ts +10 -0
- package/js/src/src/abstract/bitimen.js +11 -0
- package/js/src/src/abstract/bitir.d.ts +10 -0
- package/js/src/src/abstract/bitir.js +11 -0
- package/js/src/src/abstract/bitmart.d.ts +120 -0
- package/js/src/src/abstract/bitmart.js +11 -0
- package/js/src/src/abstract/bitmex.d.ts +100 -0
- package/js/src/src/abstract/bitmex.js +11 -0
- package/js/src/src/abstract/bitopro.d.ts +33 -0
- package/js/src/src/abstract/bitopro.js +11 -0
- package/js/src/src/abstract/bitpin.d.ts +11 -0
- package/js/src/src/abstract/bitpin.js +11 -0
- package/js/src/src/abstract/bitrue.d.ts +75 -0
- package/js/src/src/abstract/bitrue.js +11 -0
- package/js/src/src/abstract/bitso.d.ts +46 -0
- package/js/src/src/abstract/bitso.js +11 -0
- package/js/src/src/abstract/bitstamp.d.ts +262 -0
- package/js/src/src/abstract/bitstamp.js +11 -0
- package/js/src/src/abstract/bitteam.d.ts +32 -0
- package/js/src/src/abstract/bitteam.js +11 -0
- package/js/src/src/abstract/bittrade.d.ts +117 -0
- package/js/src/src/abstract/bittrade.js +11 -0
- package/js/src/src/abstract/bitunix.d.ts +9 -0
- package/js/src/src/abstract/bitunix.js +11 -0
- package/js/src/src/abstract/bitvavo.d.ts +30 -0
- package/js/src/src/abstract/bitvavo.js +11 -0
- package/js/src/src/abstract/blockchaincom.d.ts +31 -0
- package/js/src/src/abstract/blockchaincom.js +11 -0
- package/js/src/src/abstract/blofin.d.ts +70 -0
- package/js/src/src/abstract/blofin.js +11 -0
- package/js/src/src/abstract/btcalpha.d.ts +21 -0
- package/js/src/src/abstract/btcalpha.js +11 -0
- package/js/src/src/abstract/btcbox.d.ts +18 -0
- package/js/src/src/abstract/btcbox.js +11 -0
- package/js/src/src/abstract/btcmarkets.d.ts +42 -0
- package/js/src/src/abstract/btcmarkets.js +11 -0
- package/js/src/src/abstract/btcturk.d.ts +23 -0
- package/js/src/src/abstract/btcturk.js +11 -0
- package/js/src/src/abstract/bybit.d.ts +316 -0
- package/js/src/src/abstract/bybit.js +11 -0
- package/js/src/src/abstract/bydfi.d.ts +11 -0
- package/js/src/src/abstract/bydfi.js +11 -0
- package/js/src/src/abstract/cafearz.d.ts +8 -0
- package/js/src/src/abstract/cafearz.js +11 -0
- package/js/src/src/abstract/cex.d.ts +35 -0
- package/js/src/src/abstract/cex.js +11 -0
- package/js/src/src/abstract/coinbase.d.ts +97 -0
- package/js/src/src/abstract/coinbase.js +11 -0
- package/js/src/src/abstract/coinbaseexchange.d.ts +71 -0
- package/js/src/src/abstract/coinbaseexchange.js +11 -0
- package/js/src/src/abstract/coinbaseinternational.d.ts +42 -0
- package/js/src/src/abstract/coinbaseinternational.js +11 -0
- package/js/src/src/abstract/coincatch.d.ts +97 -0
- package/js/src/src/abstract/coincatch.js +11 -0
- package/js/src/src/abstract/coincheck.d.ts +36 -0
- package/js/src/src/abstract/coincheck.js +11 -0
- package/js/src/src/abstract/coinex.d.ts +240 -0
- package/js/src/src/abstract/coinex.js +11 -0
- package/js/src/src/abstract/coinmate.d.ts +65 -0
- package/js/src/src/abstract/coinmate.js +11 -0
- package/js/src/src/abstract/coinmetro.d.ts +37 -0
- package/js/src/src/abstract/coinmetro.js +11 -0
- package/js/src/src/abstract/coinone.d.ts +70 -0
- package/js/src/src/abstract/coinone.js +11 -0
- package/js/src/src/abstract/coinsph.d.ts +57 -0
- package/js/src/src/abstract/coinsph.js +11 -0
- package/js/src/src/abstract/coinspot.d.ts +31 -0
- package/js/src/src/abstract/coinspot.js +11 -0
- package/js/src/src/abstract/cryptocom.d.ts +126 -0
- package/js/src/src/abstract/cryptocom.js +11 -0
- package/js/src/src/abstract/cryptomus.d.ts +23 -0
- package/js/src/src/abstract/cryptomus.js +11 -0
- package/js/src/src/abstract/defx.d.ts +72 -0
- package/js/src/src/abstract/defx.js +11 -0
- package/js/src/src/abstract/delta.d.ts +53 -0
- package/js/src/src/abstract/delta.js +11 -0
- package/js/src/src/abstract/deribit.d.ts +129 -0
- package/js/src/src/abstract/deribit.js +11 -0
- package/js/src/src/abstract/derive.d.ts +120 -0
- package/js/src/src/abstract/derive.js +11 -0
- package/js/src/src/abstract/digifinex.d.ts +95 -0
- package/js/src/src/abstract/digifinex.js +11 -0
- package/js/src/src/abstract/ellipx.d.ts +28 -0
- package/js/src/src/abstract/ellipx.js +11 -0
- package/js/src/src/abstract/eterex.d.ts +8 -0
- package/js/src/src/abstract/eterex.js +11 -0
- package/js/src/src/abstract/excoino.d.ts +10 -0
- package/js/src/src/abstract/excoino.js +11 -0
- package/js/src/src/abstract/exir.d.ts +11 -0
- package/js/src/src/abstract/exir.js +11 -0
- package/js/src/src/abstract/exmo.d.ts +58 -0
- package/js/src/src/abstract/exmo.js +11 -0
- package/js/src/src/abstract/exnovin.d.ts +9 -0
- package/js/src/src/abstract/exnovin.js +11 -0
- package/js/src/src/abstract/farhadexchange.d.ts +8 -0
- package/js/src/src/abstract/farhadexchange.js +11 -0
- package/js/src/src/abstract/foxbit.d.ts +29 -0
- package/js/src/src/abstract/foxbit.js +11 -0
- package/js/src/src/abstract/gate.d.ts +287 -0
- package/js/src/src/abstract/gate.js +11 -0
- package/js/src/src/abstract/gemini.d.ts +62 -0
- package/js/src/src/abstract/gemini.js +11 -0
- package/js/src/src/abstract/hamtapay.d.ts +9 -0
- package/js/src/src/abstract/hamtapay.js +11 -0
- package/js/src/src/abstract/hashkey.d.ts +70 -0
- package/js/src/src/abstract/hashkey.js +11 -0
- package/js/src/src/abstract/hibachi.d.ts +29 -0
- package/js/src/src/abstract/hibachi.js +11 -0
- package/js/src/src/abstract/hitbtc.d.ts +118 -0
- package/js/src/src/abstract/hitbtc.js +11 -0
- package/js/src/src/abstract/hitobit.d.ts +11 -0
- package/js/src/src/abstract/hitobit.js +11 -0
- package/js/src/src/abstract/hollaex.d.ts +36 -0
- package/js/src/src/abstract/hollaex.js +11 -0
- package/js/src/src/abstract/htx.d.ts +551 -0
- package/js/src/src/abstract/htx.js +11 -0
- package/js/src/src/abstract/hyperliquid.d.ts +9 -0
- package/js/src/src/abstract/hyperliquid.js +11 -0
- package/js/src/src/abstract/independentreserve.d.ts +46 -0
- package/js/src/src/abstract/independentreserve.js +11 -0
- package/js/src/src/abstract/indodax.d.ts +29 -0
- package/js/src/src/abstract/indodax.js +11 -0
- package/js/src/src/abstract/iranexchange.d.ts +9 -0
- package/js/src/src/abstract/iranexchange.js +11 -0
- package/js/src/src/abstract/jibitex.d.ts +10 -0
- package/js/src/src/abstract/jibitex.js +11 -0
- package/js/src/src/abstract/kcex.d.ts +10 -0
- package/js/src/src/abstract/kcex.js +11 -0
- package/js/src/src/abstract/kifpoolme.d.ts +9 -0
- package/js/src/src/abstract/kifpoolme.js +11 -0
- package/js/src/src/abstract/kraken.d.ts +61 -0
- package/js/src/src/abstract/kraken.js +11 -0
- package/js/src/src/abstract/krakenfutures.d.ts +45 -0
- package/js/src/src/abstract/krakenfutures.js +11 -0
- package/js/src/src/abstract/kucoin.d.ts +227 -0
- package/js/src/src/abstract/kucoin.js +11 -0
- package/js/src/src/abstract/kucoinfutures.d.ts +254 -0
- package/js/src/src/abstract/kucoinfutures.js +11 -0
- package/js/src/src/abstract/latoken.d.ts +59 -0
- package/js/src/src/abstract/latoken.js +11 -0
- package/js/src/src/abstract/lbank.d.ts +65 -0
- package/js/src/src/abstract/lbank.js +11 -0
- package/js/src/src/abstract/luno.d.ts +41 -0
- package/js/src/src/abstract/luno.js +11 -0
- package/js/src/src/abstract/mazdax.d.ts +11 -0
- package/js/src/src/abstract/mazdax.js +11 -0
- package/js/src/src/abstract/mercado.d.ts +28 -0
- package/js/src/src/abstract/mercado.js +11 -0
- package/js/src/src/abstract/mexc.d.ts +183 -0
- package/js/src/src/abstract/mexc.js +11 -0
- package/js/src/src/abstract/modetrade.d.ts +122 -0
- package/js/src/src/abstract/modetrade.js +11 -0
- package/js/src/src/abstract/ndax.d.ts +100 -0
- package/js/src/src/abstract/ndax.js +11 -0
- package/js/src/src/abstract/nobitex.d.ts +10 -0
- package/js/src/src/abstract/nobitex.js +11 -0
- package/js/src/src/abstract/novadax.d.ts +32 -0
- package/js/src/src/abstract/novadax.js +11 -0
- package/js/src/src/abstract/oceanex.d.ts +30 -0
- package/js/src/src/abstract/oceanex.js +11 -0
- package/js/src/src/abstract/okcoin.d.ts +77 -0
- package/js/src/src/abstract/okcoin.js +11 -0
- package/js/src/src/abstract/okexchange.d.ts +11 -0
- package/js/src/src/abstract/okexchange.js +11 -0
- package/js/src/src/abstract/okx.d.ts +352 -0
- package/js/src/src/abstract/okx.js +11 -0
- package/js/src/src/abstract/ompfinex.d.ts +10 -0
- package/js/src/src/abstract/ompfinex.js +11 -0
- package/js/src/src/abstract/onetrading.d.ts +26 -0
- package/js/src/src/abstract/onetrading.js +11 -0
- package/js/src/src/abstract/oxfun.d.ts +37 -0
- package/js/src/src/abstract/oxfun.js +11 -0
- package/js/src/src/abstract/p2b.d.ts +25 -0
- package/js/src/src/abstract/p2b.js +11 -0
- package/js/src/src/abstract/paradex.d.ts +66 -0
- package/js/src/src/abstract/paradex.js +11 -0
- package/js/src/src/abstract/paymium.d.ts +31 -0
- package/js/src/src/abstract/paymium.js +11 -0
- package/js/src/src/abstract/phemex.d.ts +120 -0
- package/js/src/src/abstract/phemex.js +11 -0
- package/js/src/src/abstract/pingi.d.ts +9 -0
- package/js/src/src/abstract/pingi.js +11 -0
- package/js/src/src/abstract/poloniex.d.ts +108 -0
- package/js/src/src/abstract/poloniex.js +11 -0
- package/js/src/src/abstract/pooleno.d.ts +8 -0
- package/js/src/src/abstract/pooleno.js +11 -0
- package/js/src/src/abstract/probit.d.ts +26 -0
- package/js/src/src/abstract/probit.js +11 -0
- package/js/src/src/abstract/raastin.d.ts +11 -0
- package/js/src/src/abstract/raastin.js +11 -0
- package/js/src/src/abstract/ramzinex.d.ts +10 -0
- package/js/src/src/abstract/ramzinex.js +11 -0
- package/js/src/src/abstract/sarmayex.d.ts +8 -0
- package/js/src/src/abstract/sarmayex.js +11 -0
- package/js/src/src/abstract/sarrafex.d.ts +10 -0
- package/js/src/src/abstract/sarrafex.js +11 -0
- package/js/src/src/abstract/tabdeal.d.ts +10 -0
- package/js/src/src/abstract/tabdeal.js +11 -0
- package/js/src/src/abstract/tehran_exchange.d.ts +9 -0
- package/js/src/src/abstract/tehran_exchange.js +11 -0
- package/js/src/src/abstract/tetherland.d.ts +8 -0
- package/js/src/src/abstract/tetherland.js +11 -0
- package/js/src/src/abstract/timex.d.ts +65 -0
- package/js/src/src/abstract/timex.js +11 -0
- package/js/src/src/abstract/tokocrypto.d.ts +40 -0
- package/js/src/src/abstract/tokocrypto.js +11 -0
- package/js/src/src/abstract/toobit.d.ts +10 -0
- package/js/src/src/abstract/toobit.js +11 -0
- package/js/src/src/abstract/tradeogre.d.ts +21 -0
- package/js/src/src/abstract/tradeogre.js +11 -0
- package/js/src/src/abstract/twox.d.ts +8 -0
- package/js/src/src/abstract/twox.js +11 -0
- package/js/src/src/abstract/ubitex.d.ts +10 -0
- package/js/src/src/abstract/ubitex.js +11 -0
- package/js/src/src/abstract/upbit.d.ts +58 -0
- package/js/src/src/abstract/upbit.js +11 -0
- package/js/src/src/abstract/vertex.d.ts +22 -0
- package/js/src/src/abstract/vertex.js +11 -0
- package/js/src/src/abstract/wallex.d.ts +11 -0
- package/js/src/src/abstract/wallex.js +11 -0
- package/js/src/src/abstract/wavesexchange.d.ts +157 -0
- package/js/src/src/abstract/wavesexchange.js +11 -0
- package/js/src/src/abstract/whitebit.d.ts +117 -0
- package/js/src/src/abstract/whitebit.js +11 -0
- package/js/src/src/abstract/woo.d.ts +144 -0
- package/js/src/src/abstract/woo.js +11 -0
- package/js/src/src/abstract/woofipro.d.ts +122 -0
- package/js/src/src/abstract/woofipro.js +11 -0
- package/js/src/src/abstract/xt.d.ts +160 -0
- package/js/src/src/abstract/xt.js +11 -0
- package/js/src/src/abstract/yobit.d.ts +19 -0
- package/js/src/src/abstract/yobit.js +11 -0
- package/js/src/src/abstract/zaif.d.ts +41 -0
- package/js/src/src/abstract/zaif.js +11 -0
- package/js/src/src/abstract/zonda.d.ts +56 -0
- package/js/src/src/abstract/zonda.js +11 -0
- package/js/src/src/afratether.d.ts +21 -0
- package/js/src/src/afratether.js +356 -0
- package/js/src/src/alpaca.d.ts +332 -0
- package/js/src/src/alpaca.js +1908 -0
- package/js/src/src/apex.d.ts +333 -0
- package/js/src/src/apex.js +1942 -0
- package/js/src/src/arzinja.d.ts +21 -0
- package/js/src/src/arzinja.js +298 -0
- package/js/src/src/arzplus.d.ts +26 -0
- package/js/src/src/arzplus.js +581 -0
- package/js/src/src/ascendex.d.ts +424 -0
- package/js/src/src/ascendex.js +3699 -0
- package/js/src/src/asretether.d.ts +21 -0
- package/js/src/src/asretether.js +324 -0
- package/js/src/src/base/Exchange.d.ts +926 -0
- package/js/src/src/base/Exchange.js +7399 -0
- package/js/src/src/base/Precise.d.ts +42 -0
- package/js/src/src/base/Precise.js +275 -0
- package/js/src/src/base/errors.d.ts +168 -0
- package/js/src/src/base/errors.js +255 -0
- package/js/src/src/base/functions/crypto.d.ts +16 -0
- package/js/src/src/base/functions/crypto.js +131 -0
- package/js/src/src/base/functions/encode.d.ts +4 -0
- package/js/src/src/base/functions/encode.js +32 -0
- package/js/src/src/base/functions/generic.d.ts +29 -0
- package/js/src/src/base/functions/generic.js +203 -0
- package/js/src/src/base/functions/misc.d.ts +9 -0
- package/js/src/src/base/functions/misc.js +101 -0
- package/js/src/src/base/functions/number.d.ts +27 -0
- package/js/src/src/base/functions/number.js +313 -0
- package/js/src/src/base/functions/platform.d.ts +7 -0
- package/js/src/src/base/functions/platform.js +27 -0
- package/js/src/src/base/functions/rsa.d.ts +5 -0
- package/js/src/src/base/functions/rsa.js +49 -0
- package/js/src/src/base/functions/string.d.ts +7 -0
- package/js/src/src/base/functions/string.js +44 -0
- package/js/src/src/base/functions/throttle.d.ts +6 -0
- package/js/src/src/base/functions/throttle.js +67 -0
- package/js/src/src/base/functions/time.d.ts +21 -0
- package/js/src/src/base/functions/time.js +171 -0
- package/js/src/src/base/functions/totp.d.ts +3 -0
- package/js/src/src/base/functions/totp.js +25 -0
- package/js/src/src/base/functions/type.d.ts +37 -0
- package/js/src/src/base/functions/type.js +179 -0
- package/js/src/src/base/functions.d.ts +10 -0
- package/js/src/src/base/functions.js +18 -0
- package/js/src/src/base/types.d.ts +586 -0
- package/js/src/src/base/types.js +7 -0
- package/js/src/src/base/ws/Cache.d.ts +27 -0
- package/js/src/src/base/ws/Cache.js +260 -0
- package/js/src/src/base/ws/Client.d.ts +53 -0
- package/js/src/src/base/ws/Client.js +307 -0
- package/js/src/src/base/ws/Future.d.ts +8 -0
- package/js/src/src/base/ws/Future.js +35 -0
- package/js/src/src/base/ws/OrderBook.d.ts +25 -0
- package/js/src/src/base/ws/OrderBook.js +130 -0
- package/js/src/src/base/ws/OrderBookSide.d.ts +40 -0
- package/js/src/src/base/ws/OrderBookSide.js +286 -0
- package/js/src/src/base/ws/WsClient.d.ts +11 -0
- package/js/src/src/base/ws/WsClient.js +69 -0
- package/js/src/src/bequant.d.ts +4 -0
- package/js/src/src/bequant.js +35 -0
- package/js/src/src/bidarz.d.ts +16 -0
- package/js/src/src/bidarz.js +327 -0
- package/js/src/src/bigone.d.ts +296 -0
- package/js/src/src/bigone.js +2340 -0
- package/js/src/src/binance.d.ts +1667 -0
- package/js/src/src/binance.js +14400 -0
- package/js/src/src/binancecoinm.d.ts +6 -0
- package/js/src/src/binancecoinm.js +51 -0
- package/js/src/src/binanceus.d.ts +4 -0
- package/js/src/src/binanceus.js +225 -0
- package/js/src/src/binanceusdm.d.ts +6 -0
- package/js/src/src/binanceusdm.js +63 -0
- package/js/src/src/bingx.d.ts +778 -0
- package/js/src/src/bingx.js +6705 -0
- package/js/src/src/bit24.d.ts +24 -0
- package/js/src/src/bit24.js +520 -0
- package/js/src/src/bit2c.d.ts +146 -0
- package/js/src/src/bit2c.js +1029 -0
- package/js/src/src/bitbank.d.ts +181 -0
- package/js/src/src/bitbank.js +1146 -0
- package/js/src/src/bitbarg.d.ts +21 -0
- package/js/src/src/bitbarg.js +312 -0
- package/js/src/src/bitbns.d.ts +184 -0
- package/js/src/src/bitbns.js +1288 -0
- package/js/src/src/bitfinex.d.ts +516 -0
- package/js/src/src/bitfinex.js +3951 -0
- package/js/src/src/bitflyer.d.ts +229 -0
- package/js/src/src/bitflyer.js +1209 -0
- package/js/src/src/bitget.d.ts +1109 -0
- package/js/src/src/bitget.js +11033 -0
- package/js/src/src/bithumb.d.ts +165 -0
- package/js/src/src/bithumb.js +1257 -0
- package/js/src/src/bitimen.d.ts +23 -0
- package/js/src/src/bitimen.js +424 -0
- package/js/src/src/bitir.d.ts +23 -0
- package/js/src/src/bitir.js +521 -0
- package/js/src/src/bitmart.d.ts +736 -0
- package/js/src/src/bitmart.js +5639 -0
- package/js/src/src/bitmex.d.ts +395 -0
- package/js/src/src/bitmex.js +3088 -0
- package/js/src/src/bitopro.d.ts +295 -0
- package/js/src/src/bitopro.js +1892 -0
- package/js/src/src/bitpin.d.ts +23 -0
- package/js/src/src/bitpin.js +487 -0
- package/js/src/src/bitrue.d.ts +384 -0
- package/js/src/src/bitrue.js +3382 -0
- package/js/src/src/bitso.d.ts +270 -0
- package/js/src/src/bitso.js +1881 -0
- package/js/src/src/bitstamp.d.ts +355 -0
- package/js/src/src/bitstamp.js +2445 -0
- package/js/src/src/bitteam.d.ts +229 -0
- package/js/src/src/bitteam.js +2420 -0
- package/js/src/src/bittrade.d.ts +298 -0
- package/js/src/src/bittrade.js +2050 -0
- package/js/src/src/bitunix.d.ts +21 -0
- package/js/src/src/bitunix.js +326 -0
- package/js/src/src/bitvavo.d.ts +311 -0
- package/js/src/src/bitvavo.js +2204 -0
- package/js/src/src/blockchaincom.d.ts +256 -0
- package/js/src/src/blockchaincom.js +1259 -0
- package/js/src/src/blofin.d.ts +439 -0
- package/js/src/src/blofin.js +2576 -0
- package/js/src/src/btcalpha.d.ts +209 -0
- package/js/src/src/btcalpha.js +1056 -0
- package/js/src/src/btcbox.d.ts +144 -0
- package/js/src/src/btcbox.js +834 -0
- package/js/src/src/btcmarkets.d.ts +253 -0
- package/js/src/src/btcmarkets.js +1418 -0
- package/js/src/src/btcturk.d.ts +161 -0
- package/js/src/src/btcturk.js +1058 -0
- package/js/src/src/bybit.d.ts +1097 -0
- package/js/src/src/bybit.js +9382 -0
- package/js/src/src/bydfi.d.ts +23 -0
- package/js/src/src/bydfi.js +434 -0
- package/js/src/src/cafearz.d.ts +21 -0
- package/js/src/src/cafearz.js +346 -0
- package/js/src/src/cex.d.ts +286 -0
- package/js/src/src/cex.js +1799 -0
- package/js/src/src/coinbase.d.ts +623 -0
- package/js/src/src/coinbase.js +5220 -0
- package/js/src/src/coinbaseadvanced.d.ts +4 -0
- package/js/src/src/coinbaseadvanced.js +18 -0
- package/js/src/src/coinbaseexchange.d.ts +334 -0
- package/js/src/src/coinbaseexchange.js +2127 -0
- package/js/src/src/coinbaseinternational.d.ts +443 -0
- package/js/src/src/coinbaseinternational.js +2336 -0
- package/js/src/src/coincatch.d.ts +786 -0
- package/js/src/src/coincatch.js +5492 -0
- package/js/src/src/coincheck.d.ts +147 -0
- package/js/src/src/coincheck.js +962 -0
- package/js/src/src/coinex.d.ts +719 -0
- package/js/src/src/coinex.js +6166 -0
- package/js/src/src/coinmate.d.ts +202 -0
- package/js/src/src/coinmate.js +1215 -0
- package/js/src/src/coinmetro.d.ts +244 -0
- package/js/src/src/coinmetro.js +2024 -0
- package/js/src/src/coinone.d.ts +158 -0
- package/js/src/src/coinone.js +1278 -0
- package/js/src/src/coinsph.d.ts +310 -0
- package/js/src/src/coinsph.js +2203 -0
- package/js/src/src/coinspot.d.ts +108 -0
- package/js/src/src/coinspot.js +653 -0
- package/js/src/src/cryptocom.d.ts +463 -0
- package/js/src/src/cryptocom.js +3549 -0
- package/js/src/src/cryptomus.d.ts +158 -0
- package/js/src/src/cryptomus.js +1169 -0
- package/js/src/src/defx.d.ts +348 -0
- package/js/src/src/defx.js +2139 -0
- package/js/src/src/delta.d.ts +407 -0
- package/js/src/src/delta.js +3654 -0
- package/js/src/src/deribit.d.ts +516 -0
- package/js/src/src/deribit.js +3790 -0
- package/js/src/src/derive.d.ts +324 -0
- package/js/src/src/derive.js +2655 -0
- package/js/src/src/digifinex.d.ts +544 -0
- package/js/src/src/digifinex.js +4453 -0
- package/js/src/src/ellipx.d.ts +237 -0
- package/js/src/src/ellipx.js +2071 -0
- package/js/src/src/eterex.d.ts +21 -0
- package/js/src/src/eterex.js +299 -0
- package/js/src/src/excoino.d.ts +23 -0
- package/js/src/src/excoino.js +426 -0
- package/js/src/src/exir.d.ts +23 -0
- package/js/src/src/exir.js +403 -0
- package/js/src/src/exmo.d.ts +426 -0
- package/js/src/src/exmo.js +2825 -0
- package/js/src/src/exnovin.d.ts +22 -0
- package/js/src/src/exnovin.js +378 -0
- package/js/src/src/farhadexchange.d.ts +21 -0
- package/js/src/src/farhadexchange.js +280 -0
- package/js/src/src/fmfwio.d.ts +4 -0
- package/js/src/src/fmfwio.js +35 -0
- package/js/src/src/foxbit.d.ts +352 -0
- package/js/src/src/foxbit.js +2016 -0
- package/js/src/src/gate.d.ts +1071 -0
- package/js/src/src/gate.js +8282 -0
- package/js/src/src/gateio.d.ts +4 -0
- package/js/src/src/gateio.js +17 -0
- package/js/src/src/gemini.d.ts +257 -0
- package/js/src/src/gemini.js +2006 -0
- package/js/src/src/hamtapay.d.ts +21 -0
- package/js/src/src/hamtapay.js +303 -0
- package/js/src/src/hashkey.d.ts +628 -0
- package/js/src/src/hashkey.js +4363 -0
- package/js/src/src/hibachi.d.ts +346 -0
- package/js/src/src/hibachi.js +2137 -0
- package/js/src/src/hitbtc.d.ts +558 -0
- package/js/src/src/hitbtc.js +3847 -0
- package/js/src/src/hitobit.d.ts +23 -0
- package/js/src/src/hitobit.js +412 -0
- package/js/src/src/hollaex.d.ts +305 -0
- package/js/src/src/hollaex.js +2046 -0
- package/js/src/src/htx.d.ts +961 -0
- package/js/src/src/htx.js +9668 -0
- package/js/src/src/huobi.d.ts +4 -0
- package/js/src/src/huobi.js +17 -0
- package/js/src/src/hyperliquid.d.ts +651 -0
- package/js/src/src/hyperliquid.js +3937 -0
- package/js/src/src/independentreserve.d.ts +169 -0
- package/js/src/src/independentreserve.js +1115 -0
- package/js/src/src/indodax.d.ts +217 -0
- package/js/src/src/indodax.js +1454 -0
- package/js/src/src/iranexchange.d.ts +21 -0
- package/js/src/src/iranexchange.js +399 -0
- package/js/src/src/jibitex.d.ts +23 -0
- package/js/src/src/jibitex.js +416 -0
- package/js/src/src/kcex.d.ts +21 -0
- package/js/src/src/kcex.js +335 -0
- package/js/src/src/kifpoolme.d.ts +23 -0
- package/js/src/src/kifpoolme.js +410 -0
- package/js/src/src/kraken.d.ts +484 -0
- package/js/src/src/kraken.js +3518 -0
- package/js/src/src/krakenfutures.d.ts +362 -0
- package/js/src/src/krakenfutures.js +2885 -0
- package/js/src/src/kucoin.d.ts +759 -0
- package/js/src/src/kucoin.js +5153 -0
- package/js/src/src/kucoinfutures.d.ts +521 -0
- package/js/src/src/kucoinfutures.js +3381 -0
- package/js/src/src/latoken.d.ts +274 -0
- package/js/src/src/latoken.js +1824 -0
- package/js/src/src/lbank.d.ts +350 -0
- package/js/src/src/lbank.js +3146 -0
- package/js/src/src/luno.d.ts +252 -0
- package/js/src/src/luno.js +1479 -0
- package/js/src/src/mazdax.d.ts +23 -0
- package/js/src/src/mazdax.js +534 -0
- package/js/src/src/mercado.d.ts +160 -0
- package/js/src/src/mercado.js +1011 -0
- package/js/src/src/mexc.d.ts +768 -0
- package/js/src/src/mexc.js +6102 -0
- package/js/src/src/modetrade.d.ts +496 -0
- package/js/src/src/modetrade.js +2936 -0
- package/js/src/src/myokx.d.ts +4 -0
- package/js/src/src/myokx.js +54 -0
- package/js/src/src/ndax.d.ts +285 -0
- package/js/src/src/ndax.js +2598 -0
- package/js/src/src/nobitex.d.ts +23 -0
- package/js/src/src/nobitex.js +454 -0
- package/js/src/src/novadax.d.ts +279 -0
- package/js/src/src/novadax.js +1676 -0
- package/js/src/src/oceanex.d.ts +231 -0
- package/js/src/src/oceanex.js +1123 -0
- package/js/src/src/okcoin.d.ts +346 -0
- package/js/src/src/okcoin.js +3211 -0
- package/js/src/src/okexchange.d.ts +23 -0
- package/js/src/src/okexchange.js +373 -0
- package/js/src/src/okx.d.ts +1125 -0
- package/js/src/src/okx.js +9009 -0
- package/js/src/src/okxus.d.ts +4 -0
- package/js/src/src/okxus.js +54 -0
- package/js/src/src/ompfinex.d.ts +23 -0
- package/js/src/src/ompfinex.js +510 -0
- package/js/src/src/onetrading.d.ts +228 -0
- package/js/src/src/onetrading.js +1769 -0
- package/js/src/src/oxfun.d.ts +442 -0
- package/js/src/src/oxfun.js +2920 -0
- package/js/src/src/p2b.d.ts +189 -0
- package/js/src/src/p2b.js +1344 -0
- package/js/src/src/paradex.d.ts +389 -0
- package/js/src/src/paradex.js +2607 -0
- package/js/src/src/paymium.d.ts +133 -0
- package/js/src/src/paymium.js +644 -0
- package/js/src/src/phemex.d.ts +497 -0
- package/js/src/src/phemex.js +5333 -0
- package/js/src/src/pingi.d.ts +22 -0
- package/js/src/src/pingi.js +446 -0
- package/js/src/src/poloniex.d.ts +441 -0
- package/js/src/src/poloniex.js +3681 -0
- package/js/src/src/pooleno.d.ts +21 -0
- package/js/src/src/pooleno.js +347 -0
- package/js/src/src/pro/alpaca.d.ts +95 -0
- package/js/src/src/pro/alpaca.js +724 -0
- package/js/src/src/pro/apex.d.ts +160 -0
- package/js/src/src/pro/apex.js +1044 -0
- package/js/src/src/pro/ascendex.d.ts +99 -0
- package/js/src/src/pro/ascendex.js +1012 -0
- package/js/src/src/pro/bequant.d.ts +4 -0
- package/js/src/src/pro/bequant.js +42 -0
- package/js/src/src/pro/binance.d.ts +796 -0
- package/js/src/src/pro/binance.js +4373 -0
- package/js/src/src/pro/binancecoinm.d.ts +4 -0
- package/js/src/src/pro/binancecoinm.js +32 -0
- package/js/src/src/pro/binanceus.d.ts +4 -0
- package/js/src/src/pro/binanceus.js +52 -0
- package/js/src/src/pro/binanceusdm.d.ts +4 -0
- package/js/src/src/pro/binanceusdm.js +37 -0
- package/js/src/src/pro/bingx.d.ts +151 -0
- package/js/src/src/pro/bingx.js +1568 -0
- package/js/src/src/pro/bitfinex.d.ts +99 -0
- package/js/src/src/pro/bitfinex.js +1165 -0
- package/js/src/src/pro/bitget.d.ts +257 -0
- package/js/src/src/pro/bitget.js +2327 -0
- package/js/src/src/pro/bithumb.d.ts +59 -0
- package/js/src/src/pro/bithumb.js +395 -0
- package/js/src/src/pro/bitmart.d.ts +168 -0
- package/js/src/src/pro/bitmart.js +1686 -0
- package/js/src/src/pro/bitmex.d.ts +170 -0
- package/js/src/src/pro/bitmex.js +1760 -0
- package/js/src/src/pro/bitopro.d.ts +69 -0
- package/js/src/src/pro/bitopro.js +477 -0
- package/js/src/src/pro/bitrue.d.ts +40 -0
- package/js/src/src/pro/bitrue.js +461 -0
- package/js/src/src/pro/bitstamp.d.ts +53 -0
- package/js/src/src/pro/bitstamp.js +587 -0
- package/js/src/src/pro/bittrade.d.ts +66 -0
- package/js/src/src/pro/bittrade.js +606 -0
- package/js/src/src/pro/bitvavo.d.ts +321 -0
- package/js/src/src/pro/bitvavo.js +1451 -0
- package/js/src/src/pro/blockchaincom.d.ts +89 -0
- package/js/src/src/pro/blockchaincom.js +777 -0
- package/js/src/src/pro/blofin.d.ts +174 -0
- package/js/src/src/pro/blofin.js +743 -0
- package/js/src/src/pro/bybit.d.ts +397 -0
- package/js/src/src/pro/bybit.js +2519 -0
- package/js/src/src/pro/cex.d.ts +220 -0
- package/js/src/src/pro/cex.js +1535 -0
- package/js/src/src/pro/coinbase.d.ts +119 -0
- package/js/src/src/pro/coinbase.js +736 -0
- package/js/src/src/pro/coinbaseadvanced.d.ts +4 -0
- package/js/src/src/pro/coinbaseadvanced.js +18 -0
- package/js/src/src/pro/coinbaseexchange.d.ts +133 -0
- package/js/src/src/pro/coinbaseexchange.js +969 -0
- package/js/src/src/pro/coinbaseinternational.d.ts +143 -0
- package/js/src/src/pro/coinbaseinternational.js +804 -0
- package/js/src/src/pro/coincatch.d.ts +207 -0
- package/js/src/src/pro/coincatch.js +1562 -0
- package/js/src/src/pro/coincheck.d.ts +33 -0
- package/js/src/src/pro/coincheck.js +210 -0
- package/js/src/src/pro/coinex.d.ts +147 -0
- package/js/src/src/pro/coinex.js +1426 -0
- package/js/src/src/pro/coinone.d.ts +51 -0
- package/js/src/src/pro/coinone.js +413 -0
- package/js/src/src/pro/cryptocom.d.ts +300 -0
- package/js/src/src/pro/cryptocom.js +1414 -0
- package/js/src/src/pro/defx.d.ts +236 -0
- package/js/src/src/pro/defx.js +865 -0
- package/js/src/src/pro/deribit.d.ts +163 -0
- package/js/src/src/pro/deribit.js +1066 -0
- package/js/src/src/pro/derive.d.ts +100 -0
- package/js/src/src/pro/derive.js +753 -0
- package/js/src/src/pro/exmo.d.ts +97 -0
- package/js/src/src/pro/exmo.js +903 -0
- package/js/src/src/pro/gate.d.ts +360 -0
- package/js/src/src/pro/gate.js +2119 -0
- package/js/src/src/pro/gateio.d.ts +4 -0
- package/js/src/src/pro/gateio.js +17 -0
- package/js/src/src/pro/gemini.d.ts +106 -0
- package/js/src/src/pro/gemini.js +932 -0
- package/js/src/src/pro/hashkey.d.ts +121 -0
- package/js/src/src/pro/hashkey.js +843 -0
- package/js/src/src/pro/hitbtc.d.ts +235 -0
- package/js/src/src/pro/hitbtc.js +1400 -0
- package/js/src/src/pro/hollaex.d.ts +77 -0
- package/js/src/src/pro/hollaex.js +604 -0
- package/js/src/src/pro/htx.d.ts +141 -0
- package/js/src/src/pro/htx.js +2415 -0
- package/js/src/src/pro/huobi.d.ts +4 -0
- package/js/src/src/pro/huobi.js +17 -0
- package/js/src/src/pro/hyperliquid.d.ts +218 -0
- package/js/src/src/pro/hyperliquid.js +1126 -0
- package/js/src/src/pro/independentreserve.d.ts +36 -0
- package/js/src/src/pro/independentreserve.js +287 -0
- package/js/src/src/pro/kraken.d.ts +233 -0
- package/js/src/src/pro/kraken.js +1785 -0
- package/js/src/src/pro/krakenfutures.d.ts +178 -0
- package/js/src/src/pro/krakenfutures.js +1592 -0
- package/js/src/src/pro/kucoin.d.ts +221 -0
- package/js/src/src/pro/kucoin.js +1430 -0
- package/js/src/src/pro/kucoinfutures.d.ts +205 -0
- package/js/src/src/pro/kucoinfutures.js +1295 -0
- package/js/src/src/pro/lbank.d.ts +134 -0
- package/js/src/src/pro/lbank.js +950 -0
- package/js/src/src/pro/luno.d.ts +44 -0
- package/js/src/src/pro/luno.js +322 -0
- package/js/src/src/pro/mexc.d.ts +210 -0
- package/js/src/src/pro/mexc.js +2009 -0
- package/js/src/src/pro/modetrade.d.ts +155 -0
- package/js/src/src/pro/modetrade.js +1335 -0
- package/js/src/src/pro/myokx.d.ts +4 -0
- package/js/src/src/pro/myokx.js +39 -0
- package/js/src/src/pro/ndax.d.ts +60 -0
- package/js/src/src/pro/ndax.js +545 -0
- package/js/src/src/pro/okcoin.d.ts +91 -0
- package/js/src/src/pro/okcoin.js +763 -0
- package/js/src/src/pro/okx.d.ts +408 -0
- package/js/src/src/pro/okx.js +2479 -0
- package/js/src/src/pro/okxus.d.ts +4 -0
- package/js/src/src/pro/okxus.js +39 -0
- package/js/src/src/pro/onetrading.d.ts +107 -0
- package/js/src/src/pro/onetrading.js +1343 -0
- package/js/src/src/pro/oxfun.d.ts +234 -0
- package/js/src/src/pro/oxfun.js +1112 -0
- package/js/src/src/pro/p2b.d.ts +104 -0
- package/js/src/src/pro/p2b.js +506 -0
- package/js/src/src/pro/paradex.d.ts +54 -0
- package/js/src/src/pro/paradex.js +370 -0
- package/js/src/src/pro/phemex.d.ts +129 -0
- package/js/src/src/pro/phemex.js +1569 -0
- package/js/src/src/pro/poloniex.d.ts +214 -0
- package/js/src/src/pro/poloniex.js +1318 -0
- package/js/src/src/pro/probit.d.ts +91 -0
- package/js/src/src/pro/probit.js +593 -0
- package/js/src/src/pro/tradeogre.d.ts +49 -0
- package/js/src/src/pro/tradeogre.js +284 -0
- package/js/src/src/pro/upbit.d.ts +124 -0
- package/js/src/src/pro/upbit.js +689 -0
- package/js/src/src/pro/vertex.d.ts +104 -0
- package/js/src/src/pro/vertex.js +999 -0
- package/js/src/src/pro/whitebit.d.ts +123 -0
- package/js/src/src/pro/whitebit.js +971 -0
- package/js/src/src/pro/woo.d.ts +161 -0
- package/js/src/src/pro/woo.js +1351 -0
- package/js/src/src/pro/woofipro.d.ts +155 -0
- package/js/src/src/pro/woofipro.js +1335 -0
- package/js/src/src/pro/xt.d.ts +165 -0
- package/js/src/src/pro/xt.js +1230 -0
- package/js/src/src/probit.d.ts +283 -0
- package/js/src/src/probit.js +1935 -0
- package/js/src/src/protobuf/mexc/compiled.cjs +7186 -0
- package/js/src/src/protobuf/mexc/compiled.d.cts +8 -0
- package/js/src/src/raastin.d.ts +24 -0
- package/js/src/src/raastin.js +494 -0
- package/js/src/src/ramzinex.d.ts +23 -0
- package/js/src/src/ramzinex.js +510 -0
- package/js/src/src/sarmayex.d.ts +21 -0
- package/js/src/src/sarmayex.js +376 -0
- package/js/src/src/sarrafex.d.ts +23 -0
- package/js/src/src/sarrafex.js +501 -0
- package/js/src/src/static_dependencies/ethers/abi-coder.d.ts +50 -0
- package/js/src/src/static_dependencies/ethers/abi-coder.js +148 -0
- package/js/src/src/static_dependencies/ethers/address/address.d.ts +55 -0
- package/js/src/src/static_dependencies/ethers/address/address.js +162 -0
- package/js/src/src/static_dependencies/ethers/address/checks.d.ts +80 -0
- package/js/src/src/static_dependencies/ethers/address/checks.js +119 -0
- package/js/src/src/static_dependencies/ethers/address/contract-address.d.ts +47 -0
- package/js/src/src/static_dependencies/ethers/address/contract-address.js +73 -0
- package/js/src/src/static_dependencies/ethers/address/index.d.ts +48 -0
- package/js/src/src/static_dependencies/ethers/address/index.js +24 -0
- package/js/src/src/static_dependencies/ethers/bytes32.d.ts +14 -0
- package/js/src/src/static_dependencies/ethers/bytes32.js +45 -0
- package/js/src/src/static_dependencies/ethers/coders/abstract-coder.d.ts +120 -0
- package/js/src/src/static_dependencies/ethers/coders/abstract-coder.js +424 -0
- package/js/src/src/static_dependencies/ethers/coders/address.d.ts +12 -0
- package/js/src/src/static_dependencies/ethers/coders/address.js +34 -0
- package/js/src/src/static_dependencies/ethers/coders/anonymous.d.ts +14 -0
- package/js/src/src/static_dependencies/ethers/coders/anonymous.js +27 -0
- package/js/src/src/static_dependencies/ethers/coders/array.d.ts +24 -0
- package/js/src/src/static_dependencies/ethers/coders/array.js +162 -0
- package/js/src/src/static_dependencies/ethers/coders/boolean.d.ts +12 -0
- package/js/src/src/static_dependencies/ethers/coders/boolean.js +26 -0
- package/js/src/src/static_dependencies/ethers/coders/bytes.d.ts +18 -0
- package/js/src/src/static_dependencies/ethers/coders/bytes.js +39 -0
- package/js/src/src/static_dependencies/ethers/coders/fixed-bytes.d.ts +14 -0
- package/js/src/src/static_dependencies/ethers/coders/fixed-bytes.js +32 -0
- package/js/src/src/static_dependencies/ethers/coders/null.d.ts +11 -0
- package/js/src/src/static_dependencies/ethers/coders/null.js +29 -0
- package/js/src/src/static_dependencies/ethers/coders/number.d.ts +15 -0
- package/js/src/src/static_dependencies/ethers/coders/number.js +48 -0
- package/js/src/src/static_dependencies/ethers/coders/string.d.ts +12 -0
- package/js/src/src/static_dependencies/ethers/coders/string.js +26 -0
- package/js/src/src/static_dependencies/ethers/coders/tuple.d.ts +15 -0
- package/js/src/src/static_dependencies/ethers/coders/tuple.js +67 -0
- package/js/src/src/static_dependencies/ethers/fragments.d.ts +458 -0
- package/js/src/src/static_dependencies/ethers/fragments.js +1252 -0
- package/js/src/src/static_dependencies/ethers/hash/index.d.ts +10 -0
- package/js/src/src/static_dependencies/ethers/hash/index.js +15 -0
- package/js/src/src/static_dependencies/ethers/hash/solidity.d.ts +30 -0
- package/js/src/src/static_dependencies/ethers/hash/solidity.js +107 -0
- package/js/src/src/static_dependencies/ethers/hash/typed-data.d.ts +144 -0
- package/js/src/src/static_dependencies/ethers/hash/typed-data.js +490 -0
- package/js/src/src/static_dependencies/ethers/index.d.ts +19 -0
- package/js/src/src/static_dependencies/ethers/index.js +22 -0
- package/js/src/src/static_dependencies/ethers/interface.d.ts +380 -0
- package/js/src/src/static_dependencies/ethers/interface.js +990 -0
- package/js/src/src/static_dependencies/ethers/typed.d.ts +569 -0
- package/js/src/src/static_dependencies/ethers/typed.js +608 -0
- package/js/src/src/static_dependencies/ethers/utils/base58.d.ts +22 -0
- package/js/src/src/static_dependencies/ethers/utils/base58.js +68 -0
- package/js/src/src/static_dependencies/ethers/utils/base64.d.ts +39 -0
- package/js/src/src/static_dependencies/ethers/utils/base64.js +58 -0
- package/js/src/src/static_dependencies/ethers/utils/data.d.ts +92 -0
- package/js/src/src/static_dependencies/ethers/utils/data.js +175 -0
- package/js/src/src/static_dependencies/ethers/utils/errors.d.ts +509 -0
- package/js/src/src/static_dependencies/ethers/utils/errors.js +227 -0
- package/js/src/src/static_dependencies/ethers/utils/events.d.ts +76 -0
- package/js/src/src/static_dependencies/ethers/utils/events.js +52 -0
- package/js/src/src/static_dependencies/ethers/utils/fixednumber.d.ts +251 -0
- package/js/src/src/static_dependencies/ethers/utils/fixednumber.js +529 -0
- package/js/src/src/static_dependencies/ethers/utils/index.d.ts +30 -0
- package/js/src/src/static_dependencies/ethers/utils/index.js +38 -0
- package/js/src/src/static_dependencies/ethers/utils/maths.d.ts +65 -0
- package/js/src/src/static_dependencies/ethers/utils/maths.js +220 -0
- package/js/src/src/static_dependencies/ethers/utils/properties.d.ts +22 -0
- package/js/src/src/static_dependencies/ethers/utils/properties.js +59 -0
- package/js/src/src/static_dependencies/ethers/utils/rlp-decode.d.ts +5 -0
- package/js/src/src/static_dependencies/ethers/utils/rlp-decode.js +84 -0
- package/js/src/src/static_dependencies/ethers/utils/rlp-encode.d.ts +5 -0
- package/js/src/src/static_dependencies/ethers/utils/rlp-encode.js +54 -0
- package/js/src/src/static_dependencies/ethers/utils/rlp.d.ts +16 -0
- package/js/src/src/static_dependencies/ethers/utils/rlp.js +14 -0
- package/js/src/src/static_dependencies/ethers/utils/units.d.ts +23 -0
- package/js/src/src/static_dependencies/ethers/utils/units.js +88 -0
- package/js/src/src/static_dependencies/ethers/utils/utf8.d.ts +95 -0
- package/js/src/src/static_dependencies/ethers/utils/utf8.js +225 -0
- package/js/src/src/static_dependencies/ethers/utils/uuid.d.ts +7 -0
- package/js/src/src/static_dependencies/ethers/utils/uuid.js +35 -0
- package/js/src/src/static_dependencies/fflake/browser.d.ts +222 -0
- package/js/src/src/static_dependencies/fflake/browser.js +2578 -0
- package/js/src/src/static_dependencies/jsencrypt/JSEncrypt.d.ts +116 -0
- package/js/src/src/static_dependencies/jsencrypt/JSEncrypt.js +194 -0
- package/js/src/src/static_dependencies/jsencrypt/JSEncryptRSAKey.d.ts +142 -0
- package/js/src/src/static_dependencies/jsencrypt/JSEncryptRSAKey.js +307 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/asn1.d.ts +51 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/asn1.js +565 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/base64.d.ts +5 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/base64.js +94 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/hex.d.ts +3 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/hex.js +70 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/int10.d.ts +9 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/int10.js +91 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/base64.d.ts +3 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/base64.js +25 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.d.ts +101 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.js +1757 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/prng4.d.ts +10 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/prng4.js +50 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/rng.d.ts +3 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/rng.js +80 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/rsa.d.ts +23 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/rsa.js +377 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/util.d.ts +7 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/util.js +64 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.d.ts +24 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.js +1627 -0
- package/js/src/src/static_dependencies/noble-curves/_shortw_utils.d.ts +60 -0
- package/js/src/src/static_dependencies/noble-curves/_shortw_utils.js +22 -0
- package/js/src/src/static_dependencies/noble-curves/abstract/curve.d.ts +67 -0
- package/js/src/src/static_dependencies/noble-curves/abstract/curve.js +157 -0
- package/js/src/src/static_dependencies/noble-curves/abstract/edwards.d.ts +79 -0
- package/js/src/src/static_dependencies/noble-curves/abstract/edwards.js +432 -0
- package/js/src/src/static_dependencies/noble-curves/abstract/hash-to-curve.d.ts +56 -0
- package/js/src/src/static_dependencies/noble-curves/abstract/hash-to-curve.js +171 -0
- package/js/src/src/static_dependencies/noble-curves/abstract/modular.d.ts +68 -0
- package/js/src/src/static_dependencies/noble-curves/abstract/modular.js +351 -0
- package/js/src/src/static_dependencies/noble-curves/abstract/montgomery.d.ts +25 -0
- package/js/src/src/static_dependencies/noble-curves/abstract/montgomery.js +162 -0
- package/js/src/src/static_dependencies/noble-curves/abstract/poseidon.d.ts +29 -0
- package/js/src/src/static_dependencies/noble-curves/abstract/poseidon.js +115 -0
- package/js/src/src/static_dependencies/noble-curves/abstract/utils.d.ts +53 -0
- package/js/src/src/static_dependencies/noble-curves/abstract/utils.js +227 -0
- package/js/src/src/static_dependencies/noble-curves/abstract/weierstrass.d.ts +204 -0
- package/js/src/src/static_dependencies/noble-curves/abstract/weierstrass.js +1016 -0
- package/js/src/src/static_dependencies/noble-curves/ed25519.d.ts +53 -0
- package/js/src/src/static_dependencies/noble-curves/ed25519.js +402 -0
- package/js/src/src/static_dependencies/noble-curves/p256.d.ts +103 -0
- package/js/src/src/static_dependencies/noble-curves/p256.js +47 -0
- package/js/src/src/static_dependencies/noble-curves/secp256k1.d.ts +91 -0
- package/js/src/src/static_dependencies/noble-curves/secp256k1.js +257 -0
- package/js/src/src/static_dependencies/noble-hashes/_assert.d.ts +21 -0
- package/js/src/src/static_dependencies/noble-hashes/_assert.js +48 -0
- package/js/src/src/static_dependencies/noble-hashes/_sha2.d.ts +23 -0
- package/js/src/src/static_dependencies/noble-hashes/_sha2.js +119 -0
- package/js/src/src/static_dependencies/noble-hashes/_u64.d.ts +35 -0
- package/js/src/src/static_dependencies/noble-hashes/_u64.js +66 -0
- package/js/src/src/static_dependencies/noble-hashes/crypto.d.ts +1 -0
- package/js/src/src/static_dependencies/noble-hashes/crypto.js +7 -0
- package/js/src/src/static_dependencies/noble-hashes/hmac.d.ts +26 -0
- package/js/src/src/static_dependencies/noble-hashes/hmac.js +82 -0
- package/js/src/src/static_dependencies/noble-hashes/md5.d.ts +18 -0
- package/js/src/src/static_dependencies/noble-hashes/md5.js +242 -0
- package/js/src/src/static_dependencies/noble-hashes/sha1.d.ts +21 -0
- package/js/src/src/static_dependencies/noble-hashes/sha1.js +90 -0
- package/js/src/src/static_dependencies/noble-hashes/sha256.d.ts +34 -0
- package/js/src/src/static_dependencies/noble-hashes/sha256.js +129 -0
- package/js/src/src/static_dependencies/noble-hashes/sha3.d.ts +97 -0
- package/js/src/src/static_dependencies/noble-hashes/sha3.js +211 -0
- package/js/src/src/static_dependencies/noble-hashes/sha512.d.ts +66 -0
- package/js/src/src/static_dependencies/noble-hashes/sha512.js +236 -0
- package/js/src/src/static_dependencies/noble-hashes/utils.d.ts +77 -0
- package/js/src/src/static_dependencies/noble-hashes/utils.js +147 -0
- package/js/src/src/static_dependencies/proxies/agent-base/helpers.d.ts +14 -0
- package/js/src/src/static_dependencies/proxies/agent-base/helpers.js +42 -0
- package/js/src/src/static_dependencies/proxies/agent-base/index.d.ts +33 -0
- package/js/src/src/static_dependencies/proxies/agent-base/index.js +82 -0
- package/js/src/src/static_dependencies/proxies/http-proxy-agent/index.d.ts +40 -0
- package/js/src/src/static_dependencies/proxies/http-proxy-agent/index.js +119 -0
- package/js/src/src/static_dependencies/proxies/https-proxy-agent/index.d.ts +45 -0
- package/js/src/src/static_dependencies/proxies/https-proxy-agent/index.js +150 -0
- package/js/src/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.d.ts +15 -0
- package/js/src/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.js +95 -0
- package/js/src/src/static_dependencies/qs/formats.cjs +22 -0
- package/js/src/src/static_dependencies/qs/formats.d.cts +14 -0
- package/js/src/src/static_dependencies/qs/index.cjs +15 -0
- package/js/src/src/static_dependencies/qs/index.d.cts +10 -0
- package/js/src/src/static_dependencies/qs/parse.cjs +208 -0
- package/js/src/src/static_dependencies/qs/parse.d.cts +8 -0
- package/js/src/src/static_dependencies/qs/stringify.cjs +192 -0
- package/js/src/src/static_dependencies/qs/stringify.d.cts +8 -0
- package/js/src/src/static_dependencies/qs/utils.cjs +202 -0
- package/js/src/src/static_dependencies/qs/utils.d.cts +15 -0
- package/js/src/src/static_dependencies/scure-base/index.d.ts +92 -0
- package/js/src/src/static_dependencies/scure-base/index.js +420 -0
- package/js/src/src/static_dependencies/scure-starknet/index.d.ts +79 -0
- package/js/src/src/static_dependencies/scure-starknet/index.js +323 -0
- package/js/src/src/static_dependencies/starknet/constants.d.ts +61 -0
- package/js/src/src/static_dependencies/starknet/constants.js +67 -0
- package/js/src/src/static_dependencies/starknet/index.d.ts +3 -0
- package/js/src/src/static_dependencies/starknet/index.js +9 -0
- package/js/src/src/static_dependencies/starknet/types/cairoEnum.d.ts +2 -0
- package/js/src/src/static_dependencies/starknet/types/cairoEnum.js +7 -0
- package/js/src/src/static_dependencies/starknet/types/calldata.d.ts +19 -0
- package/js/src/src/static_dependencies/starknet/types/calldata.js +28 -0
- package/js/src/src/static_dependencies/starknet/types/index.d.ts +13 -0
- package/js/src/src/static_dependencies/starknet/types/index.js +16 -0
- package/js/src/src/static_dependencies/starknet/types/lib/contract/abi.d.ts +71 -0
- package/js/src/src/static_dependencies/starknet/types/lib/contract/abi.js +13 -0
- package/js/src/src/static_dependencies/starknet/types/lib/contract/index.d.ts +24 -0
- package/js/src/src/static_dependencies/starknet/types/lib/contract/index.js +16 -0
- package/js/src/src/static_dependencies/starknet/types/lib/contract/legacy.d.ts +33 -0
- package/js/src/src/static_dependencies/starknet/types/lib/contract/legacy.js +7 -0
- package/js/src/src/static_dependencies/starknet/types/lib/contract/sierra.d.ts +52 -0
- package/js/src/src/static_dependencies/starknet/types/lib/contract/sierra.js +7 -0
- package/js/src/src/static_dependencies/starknet/types/lib/index.d.ts +248 -0
- package/js/src/src/static_dependencies/starknet/types/lib/index.js +52 -0
- package/js/src/src/static_dependencies/starknet/types/typedData.d.ts +44 -0
- package/js/src/src/static_dependencies/starknet/types/typedData.js +19 -0
- package/js/src/src/static_dependencies/starknet/utils/assert.d.ts +7 -0
- package/js/src/src/static_dependencies/starknet/utils/assert.js +17 -0
- package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/felt.d.ts +6 -0
- package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/felt.js +43 -0
- package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.d.ts +72 -0
- package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.js +117 -0
- package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.d.ts +76 -0
- package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.js +136 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/byteArray.d.ts +32 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/byteArray.js +59 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/cairo.d.ts +183 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/cairo.js +229 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.d.ts +38 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.js +57 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.d.ts +35 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.js +64 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.d.ts +34 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.js +63 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/enum/index.d.ts +3 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/enum/index.js +9 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/formatter.d.ts +9 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/formatter.js +67 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/index.d.ts +89 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/index.js +280 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/parser/index.d.ts +5 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/parser/index.js +30 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/parser/interface.d.ts +20 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/parser/interface.js +8 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.d.ts +24 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.js +36 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.d.ts +23 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.js +40 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/propertyOrder.d.ts +2 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/propertyOrder.js +155 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/requestParser.d.ts +11 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/requestParser.js +248 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/responseParser.d.ts +11 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/responseParser.js +214 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/tuple.d.ts +6 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/tuple.js +113 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/validate.d.ts +6 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/validate.js +208 -0
- package/js/src/src/static_dependencies/starknet/utils/encode.d.ts +207 -0
- package/js/src/src/static_dependencies/starknet/utils/encode.js +282 -0
- package/js/src/src/static_dependencies/starknet/utils/hash/classHash.d.ts +57 -0
- package/js/src/src/static_dependencies/starknet/utils/hash/classHash.js +223 -0
- package/js/src/src/static_dependencies/starknet/utils/hash/index.d.ts +6 -0
- package/js/src/src/static_dependencies/starknet/utils/hash/index.js +13 -0
- package/js/src/src/static_dependencies/starknet/utils/merkle.d.ts +35 -0
- package/js/src/src/static_dependencies/starknet/utils/merkle.js +84 -0
- package/js/src/src/static_dependencies/starknet/utils/num.d.ts +182 -0
- package/js/src/src/static_dependencies/starknet/utils/num.js +244 -0
- package/js/src/src/static_dependencies/starknet/utils/selector.d.ts +48 -0
- package/js/src/src/static_dependencies/starknet/utils/selector.js +85 -0
- package/js/src/src/static_dependencies/starknet/utils/shortString.d.ts +57 -0
- package/js/src/src/static_dependencies/starknet/utils/shortString.js +96 -0
- package/js/src/src/static_dependencies/starknet/utils/typedData.d.ts +54 -0
- package/js/src/src/static_dependencies/starknet/utils/typedData.js +321 -0
- package/js/src/src/static_dependencies/watchable/src/types.d.ts +28 -0
- package/js/src/src/static_dependencies/watchable/src/types.js +8 -0
- package/js/src/src/static_dependencies/watchable/src/unpromise.d.ts +120 -0
- package/js/src/src/static_dependencies/watchable/src/unpromise.js +297 -0
- package/js/src/src/static_dependencies/zklink/zklink-sdk-web.d.ts +1279 -0
- package/js/src/src/static_dependencies/zklink/zklink-sdk-web.js +4282 -0
- package/js/src/src/tabdeal.d.ts +23 -0
- package/js/src/src/tabdeal.js +387 -0
- package/js/src/src/tehran_exchange.d.ts +21 -0
- package/js/src/src/tehran_exchange.js +333 -0
- package/js/src/src/tetherland.d.ts +21 -0
- package/js/src/src/tetherland.js +367 -0
- package/js/src/src/timex.d.ts +247 -0
- package/js/src/src/timex.js +1792 -0
- package/js/src/src/tokocrypto.d.ts +261 -0
- package/js/src/src/tokocrypto.js +2641 -0
- package/js/src/src/toobit.d.ts +22 -0
- package/js/src/src/toobit.js +445 -0
- package/js/src/src/tradeogre.d.ts +149 -0
- package/js/src/src/tradeogre.js +878 -0
- package/js/src/src/twox.d.ts +21 -0
- package/js/src/src/twox.js +371 -0
- package/js/src/src/ubitex.d.ts +23 -0
- package/js/src/src/ubitex.js +433 -0
- package/js/src/src/upbit.d.ts +377 -0
- package/js/src/src/upbit.js +2340 -0
- package/js/src/src/vertex.d.ts +346 -0
- package/js/src/src/vertex.js +3146 -0
- package/js/src/src/wallex.d.ts +23 -0
- package/js/src/src/wallex.js +467 -0
- package/js/src/src/wavesexchange.d.ts +244 -0
- package/js/src/src/wavesexchange.js +2747 -0
- package/js/src/src/whitebit.d.ts +571 -0
- package/js/src/src/whitebit.js +3437 -0
- package/js/src/src/woo.d.ts +727 -0
- package/js/src/src/woo.js +4183 -0
- package/js/src/src/woofipro.d.ts +497 -0
- package/js/src/src/woofipro.js +2941 -0
- package/js/src/src/xt.d.ts +568 -0
- package/js/src/src/xt.js +5184 -0
- package/js/src/src/yobit.d.ts +197 -0
- package/js/src/src/yobit.js +1453 -0
- package/js/src/src/zaif.d.ts +136 -0
- package/js/src/src/zaif.js +821 -0
- package/js/src/src/zonda.d.ts +214 -0
- package/js/src/src/zonda.js +1984 -0
- package/js/test.js +3 -3
- package/package.json +1 -1
|
@@ -0,0 +1,2336 @@
|
|
|
1
|
+
// ----------------------------------------------------------------------------
|
|
2
|
+
|
|
3
|
+
// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:
|
|
4
|
+
// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
|
|
5
|
+
// EDIT THE CORRESPONDENT .ts FILE INSTEAD
|
|
6
|
+
|
|
7
|
+
// ----------------------------------------------------------------------------
|
|
8
|
+
import Exchange from './abstract/coinbaseinternational.js';
|
|
9
|
+
import { ExchangeError, ArgumentsRequired, BadRequest, InvalidOrder, PermissionDenied, DuplicateOrderId, AuthenticationError } from './base/errors.js';
|
|
10
|
+
import { Precise } from './base/Precise.js';
|
|
11
|
+
import { TICK_SIZE } from './base/functions/number.js';
|
|
12
|
+
import { sha256 } from './static_dependencies/noble-hashes/sha256.js';
|
|
13
|
+
// ----------------------------------------------------------------------------
|
|
14
|
+
/**
|
|
15
|
+
* @class coinbaseinternational
|
|
16
|
+
* @augments Exchange
|
|
17
|
+
*/
|
|
18
|
+
export default class coinbaseinternational extends Exchange {
|
|
19
|
+
describe() {
|
|
20
|
+
return this.deepExtend(super.describe(), {
|
|
21
|
+
'id': 'coinbaseinternational',
|
|
22
|
+
'name': 'Coinbase International',
|
|
23
|
+
'countries': ['US'],
|
|
24
|
+
'certified': false,
|
|
25
|
+
'pro': true,
|
|
26
|
+
'rateLimit': 100,
|
|
27
|
+
'version': 'v1',
|
|
28
|
+
'userAgent': this.userAgents['chrome'],
|
|
29
|
+
'headers': {
|
|
30
|
+
'CB-VERSION': '2018-05-30',
|
|
31
|
+
},
|
|
32
|
+
'has': {
|
|
33
|
+
'CORS': true,
|
|
34
|
+
'spot': true,
|
|
35
|
+
'margin': true,
|
|
36
|
+
'swap': true,
|
|
37
|
+
'future': true,
|
|
38
|
+
'option': false,
|
|
39
|
+
'addMargin': false,
|
|
40
|
+
'cancelAllOrders': true,
|
|
41
|
+
'cancelOrder': true,
|
|
42
|
+
'cancelOrders': false,
|
|
43
|
+
'closeAllPositions': false,
|
|
44
|
+
'closePosition': false,
|
|
45
|
+
'createDepositAddress': true,
|
|
46
|
+
'createLimitBuyOrder': true,
|
|
47
|
+
'createLimitSellOrder': true,
|
|
48
|
+
'createMarketBuyOrder': true,
|
|
49
|
+
'createMarketBuyOrderWithCost': false,
|
|
50
|
+
'createMarketOrderWithCost': false,
|
|
51
|
+
'createMarketSellOrder': true,
|
|
52
|
+
'createMarketSellOrderWithCost': false,
|
|
53
|
+
'createOrder': true,
|
|
54
|
+
'createPostOnlyOrder': true,
|
|
55
|
+
'createReduceOnlyOrder': false,
|
|
56
|
+
'createStopLimitOrder': true,
|
|
57
|
+
'createStopMarketOrder': true,
|
|
58
|
+
'createStopOrder': true,
|
|
59
|
+
'editOrder': true,
|
|
60
|
+
'fetchAccounts': true,
|
|
61
|
+
'fetchBalance': true,
|
|
62
|
+
'fetchBidsAsks': false,
|
|
63
|
+
'fetchBorrowRateHistories': false,
|
|
64
|
+
'fetchBorrowRateHistory': false,
|
|
65
|
+
'fetchCanceledOrders': false,
|
|
66
|
+
'fetchClosedOrders': false,
|
|
67
|
+
'fetchCrossBorrowRate': false,
|
|
68
|
+
'fetchCrossBorrowRates': false,
|
|
69
|
+
'fetchCurrencies': true,
|
|
70
|
+
'fetchDeposits': true,
|
|
71
|
+
'fetchFundingHistory': true,
|
|
72
|
+
'fetchFundingRate': false,
|
|
73
|
+
'fetchFundingRateHistory': true,
|
|
74
|
+
'fetchFundingRates': false,
|
|
75
|
+
'fetchIndexOHLCV': false,
|
|
76
|
+
'fetchIsolatedBorrowRate': false,
|
|
77
|
+
'fetchIsolatedBorrowRates': false,
|
|
78
|
+
'fetchL2OrderBook': false,
|
|
79
|
+
'fetchLedger': false,
|
|
80
|
+
'fetchLeverage': false,
|
|
81
|
+
'fetchLeverageTiers': false,
|
|
82
|
+
'fetchMarginAdjustmentHistory': false,
|
|
83
|
+
'fetchMarginMode': false,
|
|
84
|
+
'fetchMarkets': true,
|
|
85
|
+
'fetchMarkOHLCV': false,
|
|
86
|
+
'fetchMyBuys': true,
|
|
87
|
+
'fetchMySells': true,
|
|
88
|
+
'fetchMyTrades': true,
|
|
89
|
+
'fetchOHLCV': true,
|
|
90
|
+
'fetchOpenInterestHistory': false,
|
|
91
|
+
'fetchOpenOrders': true,
|
|
92
|
+
'fetchOrder': true,
|
|
93
|
+
'fetchOrderBook': false,
|
|
94
|
+
'fetchOrders': false,
|
|
95
|
+
'fetchPosition': true,
|
|
96
|
+
'fetchPositionHistory': false,
|
|
97
|
+
'fetchPositionMode': false,
|
|
98
|
+
'fetchPositions': true,
|
|
99
|
+
'fetchPositionsHistory': false,
|
|
100
|
+
'fetchPositionsRisk': false,
|
|
101
|
+
'fetchPremiumIndexOHLCV': false,
|
|
102
|
+
'fetchTicker': true,
|
|
103
|
+
'fetchTickers': true,
|
|
104
|
+
'fetchTime': false,
|
|
105
|
+
'fetchTrades': false,
|
|
106
|
+
'fetchTradingFee': false,
|
|
107
|
+
'fetchTradingFees': false,
|
|
108
|
+
'fetchTransfers': true,
|
|
109
|
+
'fetchWithdrawals': true,
|
|
110
|
+
'reduceMargin': false,
|
|
111
|
+
'sandbox': true,
|
|
112
|
+
'setLeverage': false,
|
|
113
|
+
'setMargin': true,
|
|
114
|
+
'setMarginMode': false,
|
|
115
|
+
'setPositionMode': false,
|
|
116
|
+
'withdraw': true,
|
|
117
|
+
},
|
|
118
|
+
'urls': {
|
|
119
|
+
'logo': 'https://github.com/ccxt/ccxt/assets/43336371/866ae638-6ab5-4ebf-ab2c-cdcce9545625',
|
|
120
|
+
'api': {
|
|
121
|
+
'rest': 'https://api.international.coinbase.com/api',
|
|
122
|
+
},
|
|
123
|
+
'test': {
|
|
124
|
+
'rest': 'https://api-n5e1.coinbase.com/api',
|
|
125
|
+
},
|
|
126
|
+
'www': 'https://international.coinbase.com',
|
|
127
|
+
'doc': [
|
|
128
|
+
'https://docs.cloud.coinbase.com/intx/docs',
|
|
129
|
+
],
|
|
130
|
+
'fees': [
|
|
131
|
+
'https://help.coinbase.com/en/international-exchange/trading-deposits-withdrawals/international-exchange-fees',
|
|
132
|
+
],
|
|
133
|
+
'referral': '',
|
|
134
|
+
},
|
|
135
|
+
'requiredCredentials': {
|
|
136
|
+
'apiKey': true,
|
|
137
|
+
'secret': true,
|
|
138
|
+
'password': true,
|
|
139
|
+
},
|
|
140
|
+
'api': {
|
|
141
|
+
'v1': {
|
|
142
|
+
'public': {
|
|
143
|
+
'get': [
|
|
144
|
+
'assets',
|
|
145
|
+
'assets/{assets}',
|
|
146
|
+
'assets/{asset}/networks',
|
|
147
|
+
'instruments',
|
|
148
|
+
'instruments/{instrument}',
|
|
149
|
+
'instruments/{instrument}/quote',
|
|
150
|
+
'instruments/{instrument}/funding',
|
|
151
|
+
'instruments/{instrument}/candles',
|
|
152
|
+
],
|
|
153
|
+
},
|
|
154
|
+
'private': {
|
|
155
|
+
'get': [
|
|
156
|
+
'orders',
|
|
157
|
+
'orders/{id}',
|
|
158
|
+
'portfolios',
|
|
159
|
+
'portfolios/{portfolio}',
|
|
160
|
+
'portfolios/{portfolio}/detail',
|
|
161
|
+
'portfolios/{portfolio}/summary',
|
|
162
|
+
'portfolios/{portfolio}/balances',
|
|
163
|
+
'portfolios/{portfolio}/balances/{asset}',
|
|
164
|
+
'portfolios/{portfolio}/positions',
|
|
165
|
+
'portfolios/{portfolio}/positions/{instrument}',
|
|
166
|
+
'portfolios/fills',
|
|
167
|
+
'portfolios/{portfolio}/fills',
|
|
168
|
+
'transfers',
|
|
169
|
+
'transfers/{transfer_uuid}',
|
|
170
|
+
],
|
|
171
|
+
'post': [
|
|
172
|
+
'orders',
|
|
173
|
+
'portfolios',
|
|
174
|
+
'portfolios/margin',
|
|
175
|
+
'portfolios/transfer',
|
|
176
|
+
'transfers/withdraw',
|
|
177
|
+
'transfers/address',
|
|
178
|
+
'transfers/create-counterparty-id',
|
|
179
|
+
'transfers/validate-counterparty-id',
|
|
180
|
+
'transfers/withdraw/counterparty',
|
|
181
|
+
],
|
|
182
|
+
'put': [
|
|
183
|
+
'orders/{id}',
|
|
184
|
+
'portfolios/{portfolio}',
|
|
185
|
+
],
|
|
186
|
+
'delete': [
|
|
187
|
+
'orders',
|
|
188
|
+
'orders/{id}',
|
|
189
|
+
],
|
|
190
|
+
},
|
|
191
|
+
},
|
|
192
|
+
},
|
|
193
|
+
'fees': {
|
|
194
|
+
'trading': {
|
|
195
|
+
'taker': this.parseNumber('0.004'),
|
|
196
|
+
'maker': this.parseNumber('0.002'),
|
|
197
|
+
'tierBased': true,
|
|
198
|
+
'percentage': true,
|
|
199
|
+
'tiers': {
|
|
200
|
+
'taker': [
|
|
201
|
+
[this.parseNumber('0'), this.parseNumber('0.004')],
|
|
202
|
+
[this.parseNumber('1000000'), this.parseNumber('0.004')],
|
|
203
|
+
[this.parseNumber('5000000'), this.parseNumber('0.0035')],
|
|
204
|
+
[this.parseNumber('10000000'), this.parseNumber('0.0035')],
|
|
205
|
+
[this.parseNumber('50000000'), this.parseNumber('0.003')],
|
|
206
|
+
[this.parseNumber('250000000'), this.parseNumber('0.0025')],
|
|
207
|
+
],
|
|
208
|
+
'maker': [
|
|
209
|
+
[this.parseNumber('0'), this.parseNumber('0.002')],
|
|
210
|
+
[this.parseNumber('1000000'), this.parseNumber('0.0016')],
|
|
211
|
+
[this.parseNumber('5000000'), this.parseNumber('0.001')],
|
|
212
|
+
[this.parseNumber('10000000'), this.parseNumber('0.0008')],
|
|
213
|
+
[this.parseNumber('50000000'), this.parseNumber('0.0005')],
|
|
214
|
+
[this.parseNumber('250000000'), this.parseNumber('0')],
|
|
215
|
+
],
|
|
216
|
+
},
|
|
217
|
+
},
|
|
218
|
+
},
|
|
219
|
+
'precisionMode': TICK_SIZE,
|
|
220
|
+
'exceptions': {
|
|
221
|
+
'exact': {},
|
|
222
|
+
'broad': {
|
|
223
|
+
'DUPLICATE_CLIENT_ORDER_ID': DuplicateOrderId,
|
|
224
|
+
'Order rejected': InvalidOrder,
|
|
225
|
+
'market orders must be IoC': InvalidOrder,
|
|
226
|
+
'tif is required': InvalidOrder,
|
|
227
|
+
'Invalid replace order request': InvalidOrder,
|
|
228
|
+
'Unauthorized': PermissionDenied,
|
|
229
|
+
'invalid result_limit': BadRequest,
|
|
230
|
+
'is a required field': BadRequest,
|
|
231
|
+
'Not Found': BadRequest,
|
|
232
|
+
'ip not allowed': AuthenticationError,
|
|
233
|
+
},
|
|
234
|
+
},
|
|
235
|
+
'timeframes': {
|
|
236
|
+
'1m': 'ONE_MINUTE',
|
|
237
|
+
'5m': 'FIVE_MINUTE',
|
|
238
|
+
'15m': 'FIFTEEN_MINUTE',
|
|
239
|
+
'30m': 'THIRTY_MINUTE',
|
|
240
|
+
'1h': 'ONE_HOUR',
|
|
241
|
+
'2h': 'TWO_HOUR',
|
|
242
|
+
'6h': 'SIX_HOUR',
|
|
243
|
+
'1d': 'ONE_DAY',
|
|
244
|
+
},
|
|
245
|
+
'options': {
|
|
246
|
+
'brokerId': 'nfqkvdjp',
|
|
247
|
+
'portfolio': '',
|
|
248
|
+
'withdraw': {
|
|
249
|
+
'method': 'v1PrivatePostTransfersWithdraw', // use v1PrivatePostTransfersWithdrawCounterparty for counterparty withdrawals
|
|
250
|
+
},
|
|
251
|
+
'networksById': {
|
|
252
|
+
'ethereum': 'ETH',
|
|
253
|
+
'arbitrum': 'ARBITRUM',
|
|
254
|
+
'avacchain': 'AVAX',
|
|
255
|
+
'optimism': 'OPTIMISM',
|
|
256
|
+
'polygon': 'MATIC',
|
|
257
|
+
'solana': 'SOL',
|
|
258
|
+
'bitcoin': 'BTC',
|
|
259
|
+
},
|
|
260
|
+
},
|
|
261
|
+
'features': {
|
|
262
|
+
'default': {
|
|
263
|
+
'sandbox': true,
|
|
264
|
+
'createOrder': {
|
|
265
|
+
'marginMode': false,
|
|
266
|
+
'triggerPrice': true,
|
|
267
|
+
'triggerPriceType': undefined,
|
|
268
|
+
'triggerDirection': true,
|
|
269
|
+
'stopLossPrice': false,
|
|
270
|
+
'takeProfitPrice': false,
|
|
271
|
+
'attachedStopLossTakeProfit': undefined,
|
|
272
|
+
'timeInForce': {
|
|
273
|
+
'IOC': true,
|
|
274
|
+
'FOK': true,
|
|
275
|
+
'PO': true,
|
|
276
|
+
'GTD': true,
|
|
277
|
+
'GTC': true, // has 30 days max
|
|
278
|
+
},
|
|
279
|
+
'hedged': false,
|
|
280
|
+
'trailing': false,
|
|
281
|
+
'leverage': false,
|
|
282
|
+
'marketBuyByCost': false,
|
|
283
|
+
'marketBuyRequiresPrice': true,
|
|
284
|
+
'selfTradePrevention': true,
|
|
285
|
+
'iceberg': false,
|
|
286
|
+
},
|
|
287
|
+
'createOrders': undefined,
|
|
288
|
+
'fetchMyTrades': {
|
|
289
|
+
'marginMode': false,
|
|
290
|
+
'limit': 100,
|
|
291
|
+
'daysBack': undefined,
|
|
292
|
+
'untilDays': 10000,
|
|
293
|
+
'symbolRequired': false,
|
|
294
|
+
},
|
|
295
|
+
'fetchOrder': {
|
|
296
|
+
'marginMode': false,
|
|
297
|
+
'trigger': false,
|
|
298
|
+
'trailing': false,
|
|
299
|
+
'symbolRequired': false,
|
|
300
|
+
},
|
|
301
|
+
'fetchOpenOrders': {
|
|
302
|
+
'marginMode': false,
|
|
303
|
+
'limit': 100,
|
|
304
|
+
'trigger': false,
|
|
305
|
+
'trailing': false,
|
|
306
|
+
'symbolRequired': false,
|
|
307
|
+
},
|
|
308
|
+
'fetchOrders': undefined,
|
|
309
|
+
'fetchClosedOrders': undefined,
|
|
310
|
+
'fetchOHLCV': {
|
|
311
|
+
'limit': 300,
|
|
312
|
+
},
|
|
313
|
+
},
|
|
314
|
+
'spot': {
|
|
315
|
+
'extends': 'default',
|
|
316
|
+
},
|
|
317
|
+
'swap': {
|
|
318
|
+
'linear': {
|
|
319
|
+
'extends': 'default',
|
|
320
|
+
},
|
|
321
|
+
'inverse': {
|
|
322
|
+
'extends': 'default',
|
|
323
|
+
},
|
|
324
|
+
},
|
|
325
|
+
'future': {
|
|
326
|
+
'linear': undefined,
|
|
327
|
+
'inverse': undefined,
|
|
328
|
+
},
|
|
329
|
+
},
|
|
330
|
+
});
|
|
331
|
+
}
|
|
332
|
+
async handlePortfolioAndParams(methodName, params = {}) {
|
|
333
|
+
let portfolio = undefined;
|
|
334
|
+
[portfolio, params] = this.handleOptionAndParams(params, methodName, 'portfolio');
|
|
335
|
+
if ((portfolio !== undefined) && (portfolio !== '')) {
|
|
336
|
+
return [portfolio, params];
|
|
337
|
+
}
|
|
338
|
+
const defaultPortfolio = this.safeString(this.options, 'portfolio');
|
|
339
|
+
if ((defaultPortfolio !== undefined) && (defaultPortfolio !== '')) {
|
|
340
|
+
return [defaultPortfolio, params];
|
|
341
|
+
}
|
|
342
|
+
const accounts = await this.fetchAccounts();
|
|
343
|
+
for (let i = 0; i < accounts.length; i++) {
|
|
344
|
+
const account = accounts[i];
|
|
345
|
+
const info = this.safeDict(account, 'info', {});
|
|
346
|
+
if (this.safeBool(info, 'is_default')) {
|
|
347
|
+
const portfolioId = this.safeString(info, 'portfolio_id');
|
|
348
|
+
this.options['portfolio'] = portfolioId;
|
|
349
|
+
return [portfolioId, params];
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
throw new ArgumentsRequired(this.id + ' ' + methodName + '() requires a portfolio parameter or set the default portfolio with this.options["portfolio"]');
|
|
353
|
+
}
|
|
354
|
+
async handleNetworkIdAndParams(currencyCode, methodName, params) {
|
|
355
|
+
let networkId = undefined;
|
|
356
|
+
[networkId, params] = this.handleOptionAndParams(params, methodName, 'network_arn_id');
|
|
357
|
+
if (networkId === undefined) {
|
|
358
|
+
await this.loadCurrencyNetworks(currencyCode);
|
|
359
|
+
const networks = this.currencies[currencyCode]['networks'];
|
|
360
|
+
const network = this.safeString2(params, 'networkCode', 'network');
|
|
361
|
+
if (network === undefined) {
|
|
362
|
+
// find default network
|
|
363
|
+
if (this.isEmpty(networks)) {
|
|
364
|
+
throw new BadRequest(this.id + ' createDepositAddress network not found for currency ' + currencyCode + ' please specify networkId in params');
|
|
365
|
+
}
|
|
366
|
+
const defaultNetwork = this.findDefaultNetwork(networks);
|
|
367
|
+
networkId = defaultNetwork['id'];
|
|
368
|
+
}
|
|
369
|
+
else {
|
|
370
|
+
networkId = this.networkCodeToId(network, currencyCode);
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
return [networkId, params];
|
|
374
|
+
}
|
|
375
|
+
/**
|
|
376
|
+
* @method
|
|
377
|
+
* @name coinbaseinternational#fetchAccounts
|
|
378
|
+
* @description fetch all the accounts associated with a profile
|
|
379
|
+
* @see https://docs.cloud.coinbase.com/intx/reference/getportfolios
|
|
380
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
381
|
+
* @returns {object} a dictionary of [account structures]{@link https://docs.ccxt.com/#/?id=account-structure} indexed by the account type
|
|
382
|
+
*/
|
|
383
|
+
async fetchAccounts(params = {}) {
|
|
384
|
+
await this.loadMarkets();
|
|
385
|
+
const response = await this.v1PrivateGetPortfolios(params);
|
|
386
|
+
//
|
|
387
|
+
// [
|
|
388
|
+
// {
|
|
389
|
+
// "portfolio_id":"1ap32qsc-1-0",
|
|
390
|
+
// "portfolio_uuid":"028d7f6c-b92c-7361-8b7e-2932711e5a22",
|
|
391
|
+
// "name":"CCXT Portfolio 030624-17:16",
|
|
392
|
+
// "user_uuid":"e6cf46b6-a32f-5fa7-addb-3324d4526fbd",
|
|
393
|
+
// "maker_fee_rate":"0",
|
|
394
|
+
// "taker_fee_rate":"0.0002",
|
|
395
|
+
// "trading_lock":false,
|
|
396
|
+
// "borrow_disabled":false,
|
|
397
|
+
// "is_lsp":false,
|
|
398
|
+
// "is_default":true,
|
|
399
|
+
// "cross_collateral_enabled":false
|
|
400
|
+
// }
|
|
401
|
+
// ]
|
|
402
|
+
//
|
|
403
|
+
return this.parseAccounts(response, params);
|
|
404
|
+
}
|
|
405
|
+
parseAccount(account) {
|
|
406
|
+
//
|
|
407
|
+
// {
|
|
408
|
+
// "portfolio_id":"1ap32qsc-1-0",
|
|
409
|
+
// "portfolio_uuid":"028d7f6c-b92c-7361-8b7e-2932711e5a22",
|
|
410
|
+
// "name":"CCXT Portfolio 030624-17:16",
|
|
411
|
+
// "user_uuid":"e6cf46b6-a32f-5fa7-addb-3324d4526fbd",
|
|
412
|
+
// "maker_fee_rate":"0",
|
|
413
|
+
// "taker_fee_rate":"0.0002",
|
|
414
|
+
// "trading_lock":false,
|
|
415
|
+
// "borrow_disabled":false,
|
|
416
|
+
// "is_lsp":false,
|
|
417
|
+
// "is_default":true,
|
|
418
|
+
// "cross_collateral_enabled":false
|
|
419
|
+
// }
|
|
420
|
+
//
|
|
421
|
+
return {
|
|
422
|
+
'id': this.safeString2(account, 'portfolio_id', 'portfolio_uuid'),
|
|
423
|
+
'type': undefined,
|
|
424
|
+
'code': undefined,
|
|
425
|
+
'info': account,
|
|
426
|
+
};
|
|
427
|
+
}
|
|
428
|
+
/**
|
|
429
|
+
* @method
|
|
430
|
+
* @name coinbaseinternational#fetchOHLCV
|
|
431
|
+
* @description fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
|
|
432
|
+
* @see https://docs.cdp.coinbase.com/intx/reference/getinstrumentcandles
|
|
433
|
+
* @param {string} symbol unified symbol of the market to fetch OHLCV data for
|
|
434
|
+
* @param {string} timeframe the length of time each candle represents
|
|
435
|
+
* @param {int} [since] timestamp in ms of the earliest candle to fetch
|
|
436
|
+
* @param {int} [limit] the maximum amount of candles to fetch, default 100 max 10000
|
|
437
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
438
|
+
* @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume
|
|
439
|
+
* @param {int} [params.until] timestamp in ms of the latest candle to fetch
|
|
440
|
+
* @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [available parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
|
|
441
|
+
*/
|
|
442
|
+
async fetchOHLCV(symbol, timeframe = '1m', since = undefined, limit = 100, params = {}) {
|
|
443
|
+
await this.loadMarkets();
|
|
444
|
+
let paginate = false;
|
|
445
|
+
[paginate, params] = this.handleOptionAndParams(params, 'fetchOHLCV', 'paginate');
|
|
446
|
+
if (paginate) {
|
|
447
|
+
return await this.fetchPaginatedCallDeterministic('fetchOHLCV', symbol, since, limit, timeframe, params, 10000);
|
|
448
|
+
}
|
|
449
|
+
const market = this.market(symbol);
|
|
450
|
+
const request = {
|
|
451
|
+
'instrument': market['id'],
|
|
452
|
+
'granularity': this.safeString(this.timeframes, timeframe, timeframe),
|
|
453
|
+
};
|
|
454
|
+
if (since !== undefined) {
|
|
455
|
+
request['start'] = this.iso8601(since);
|
|
456
|
+
}
|
|
457
|
+
else {
|
|
458
|
+
throw new ArgumentsRequired(this.id + ' fetchOHLCV() requires a since argument');
|
|
459
|
+
}
|
|
460
|
+
const unitl = this.safeInteger(params, 'until');
|
|
461
|
+
if (unitl !== undefined) {
|
|
462
|
+
params = this.omit(params, 'until');
|
|
463
|
+
request['end'] = this.iso8601(unitl);
|
|
464
|
+
}
|
|
465
|
+
const response = await this.v1PublicGetInstrumentsInstrumentCandles(this.extend(request, params));
|
|
466
|
+
//
|
|
467
|
+
// {
|
|
468
|
+
// "aggregations": [
|
|
469
|
+
// {
|
|
470
|
+
// "start": "2024-04-23T00:00:00Z",
|
|
471
|
+
// "open": "62884.4",
|
|
472
|
+
// "high": "64710.6",
|
|
473
|
+
// "low": "62884.4",
|
|
474
|
+
// "close": "63508.4",
|
|
475
|
+
// "volume": "3253.9983"
|
|
476
|
+
// }
|
|
477
|
+
// ]
|
|
478
|
+
// }
|
|
479
|
+
//
|
|
480
|
+
const candles = this.safeList(response, 'aggregations', []);
|
|
481
|
+
return this.parseOHLCVs(candles, market, timeframe, since, limit);
|
|
482
|
+
}
|
|
483
|
+
parseOHLCV(ohlcv, market = undefined) {
|
|
484
|
+
//
|
|
485
|
+
// {
|
|
486
|
+
// "start": "2024-04-23T00:00:00Z",
|
|
487
|
+
// "open": "62884.4",
|
|
488
|
+
// "high": "64710.6",
|
|
489
|
+
// "low": "62884.4",
|
|
490
|
+
// "close": "63508.4",
|
|
491
|
+
// "volume": "3253.9983"
|
|
492
|
+
// }
|
|
493
|
+
//
|
|
494
|
+
return [
|
|
495
|
+
this.parse8601(this.safeString2(ohlcv, 'start', 'time')),
|
|
496
|
+
this.safeNumber(ohlcv, 'open'),
|
|
497
|
+
this.safeNumber(ohlcv, 'high'),
|
|
498
|
+
this.safeNumber(ohlcv, 'low'),
|
|
499
|
+
this.safeNumber(ohlcv, 'close'),
|
|
500
|
+
this.safeNumber(ohlcv, 'volume'),
|
|
501
|
+
];
|
|
502
|
+
}
|
|
503
|
+
/**
|
|
504
|
+
* @method
|
|
505
|
+
* @name coinbaseinternational#fetchFundingRateHistory
|
|
506
|
+
* @description fetches historical funding rate prices
|
|
507
|
+
* @see https://docs.cloud.coinbase.com/intx/reference/getinstrumentfunding
|
|
508
|
+
* @param {string} symbol unified symbol of the market to fetch the funding rate history for
|
|
509
|
+
* @param {int} [since] timestamp in ms of the earliest funding rate to fetch
|
|
510
|
+
* @param {int} [limit] the maximum amount of [funding rate structures]{@link https://docs.ccxt.com/#/?id=funding-rate-history-structure} to fetch
|
|
511
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
512
|
+
* @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
|
|
513
|
+
* @returns {object[]} a list of [funding rate structures]{@link https://docs.ccxt.com/#/?id=funding-rate-history-structure}
|
|
514
|
+
*/
|
|
515
|
+
async fetchFundingRateHistory(symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
516
|
+
if (symbol === undefined) {
|
|
517
|
+
throw new ArgumentsRequired(this.id + ' fetchFundingRateHistory() requires a symbol argument');
|
|
518
|
+
}
|
|
519
|
+
await this.loadMarkets();
|
|
520
|
+
let paginate = false;
|
|
521
|
+
[paginate, params] = this.handleOptionAndParams(params, 'fetchFundingRateHistory', 'paginate');
|
|
522
|
+
let maxEntriesPerRequest = undefined;
|
|
523
|
+
[maxEntriesPerRequest, params] = this.handleOptionAndParams(params, 'fetchFundingRateHistory', 'maxEntriesPerRequest', 100);
|
|
524
|
+
const pageKey = 'ccxtPageKey';
|
|
525
|
+
if (paginate) {
|
|
526
|
+
return await this.fetchPaginatedCallIncremental('fetchFundingRateHistory', symbol, since, limit, params, pageKey, maxEntriesPerRequest);
|
|
527
|
+
}
|
|
528
|
+
const market = this.market(symbol);
|
|
529
|
+
const page = this.safeInteger(params, pageKey, 1) - 1;
|
|
530
|
+
const request = {
|
|
531
|
+
'instrument': market['id'],
|
|
532
|
+
'result_offset': this.safeInteger2(params, 'offset', 'result_offset', page * maxEntriesPerRequest),
|
|
533
|
+
};
|
|
534
|
+
if (limit !== undefined) {
|
|
535
|
+
request['result_limit'] = limit;
|
|
536
|
+
}
|
|
537
|
+
const response = await this.v1PublicGetInstrumentsInstrumentFunding(this.extend(request, params));
|
|
538
|
+
//
|
|
539
|
+
// {
|
|
540
|
+
// "pagination":{
|
|
541
|
+
// "result_limit":"25",
|
|
542
|
+
// "result_offset":"0"
|
|
543
|
+
// },
|
|
544
|
+
// "results":[
|
|
545
|
+
// {
|
|
546
|
+
// "instrument_id":"149264167780483072",
|
|
547
|
+
// "funding_rate":"0.000011",
|
|
548
|
+
// "mark_price":"47388.1",
|
|
549
|
+
// "event_time":"2024-02-10T16:00:00Z"
|
|
550
|
+
// },
|
|
551
|
+
// ...
|
|
552
|
+
// ]
|
|
553
|
+
// }
|
|
554
|
+
//
|
|
555
|
+
const rawRates = this.safeList(response, 'results', []);
|
|
556
|
+
return this.parseFundingRateHistories(rawRates, market, since, limit);
|
|
557
|
+
}
|
|
558
|
+
parseFundingRateHistory(info, market = undefined) {
|
|
559
|
+
return this.parseFundingRate(info, market);
|
|
560
|
+
}
|
|
561
|
+
parseFundingRate(contract, market = undefined) {
|
|
562
|
+
//
|
|
563
|
+
// {
|
|
564
|
+
// "instrument_id":"149264167780483072",
|
|
565
|
+
// "funding_rate":"0.000011",
|
|
566
|
+
// "mark_price":"47388.1",
|
|
567
|
+
// "event_time":"2024-02-10T16:00:00Z"
|
|
568
|
+
// }
|
|
569
|
+
//
|
|
570
|
+
const fundingDatetime = this.safeString2(contract, 'event_time', 'time');
|
|
571
|
+
return {
|
|
572
|
+
'info': contract,
|
|
573
|
+
'symbol': this.safeSymbol(undefined, market),
|
|
574
|
+
'markPrice': this.safeNumber(contract, 'mark_price'),
|
|
575
|
+
'indexPrice': undefined,
|
|
576
|
+
'interestRate': undefined,
|
|
577
|
+
'estimatedSettlePrice': undefined,
|
|
578
|
+
'timestamp': this.parse8601(fundingDatetime),
|
|
579
|
+
'datetime': fundingDatetime,
|
|
580
|
+
'fundingRate': this.safeNumber(contract, 'funding_rate'),
|
|
581
|
+
'fundingTimestamp': this.parse8601(fundingDatetime),
|
|
582
|
+
'fundingDatetime': fundingDatetime,
|
|
583
|
+
'nextFundingRate': undefined,
|
|
584
|
+
'nextFundingTimestamp': undefined,
|
|
585
|
+
'nextFundingDatetime': undefined,
|
|
586
|
+
'previousFundingRate': undefined,
|
|
587
|
+
'previousFundingTimestamp': undefined,
|
|
588
|
+
'previousFundingDatetime': undefined,
|
|
589
|
+
};
|
|
590
|
+
}
|
|
591
|
+
/**
|
|
592
|
+
* @method
|
|
593
|
+
* @name coinbaseinternational#fetchFundingHistory
|
|
594
|
+
* @description fetch the history of funding payments paid and received on this account
|
|
595
|
+
* @see https://docs.cdp.coinbase.com/intx/reference/gettransfers
|
|
596
|
+
* @param {string} [symbol] unified market symbol
|
|
597
|
+
* @param {int} [since] the earliest time in ms to fetch funding history for
|
|
598
|
+
* @param {int} [limit] the maximum number of funding history structures to retrieve
|
|
599
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
600
|
+
* @returns {object} a [funding history structure]{@link https://docs.ccxt.com/#/?id=funding-history-structure}
|
|
601
|
+
*/
|
|
602
|
+
async fetchFundingHistory(symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
603
|
+
await this.loadMarkets();
|
|
604
|
+
const request = {
|
|
605
|
+
'type': 'FUNDING',
|
|
606
|
+
};
|
|
607
|
+
let market = undefined;
|
|
608
|
+
if (symbol !== undefined) {
|
|
609
|
+
market = this.market(symbol);
|
|
610
|
+
}
|
|
611
|
+
let portfolios = undefined;
|
|
612
|
+
[portfolios, params] = this.handleOptionAndParams(params, 'fetchFundingHistory', 'portfolios');
|
|
613
|
+
if (portfolios !== undefined) {
|
|
614
|
+
request['portfolios'] = portfolios;
|
|
615
|
+
}
|
|
616
|
+
if (since !== undefined) {
|
|
617
|
+
request['time_from'] = this.iso8601(since);
|
|
618
|
+
}
|
|
619
|
+
if (limit !== undefined) {
|
|
620
|
+
request['result_limit'] = limit;
|
|
621
|
+
}
|
|
622
|
+
else {
|
|
623
|
+
request['result_limit'] = 100;
|
|
624
|
+
}
|
|
625
|
+
const response = await this.v1PrivateGetTransfers(this.extend(request, params));
|
|
626
|
+
const fundings = this.safeList(response, 'results', []);
|
|
627
|
+
return this.parseIncomes(fundings, market, since, limit);
|
|
628
|
+
}
|
|
629
|
+
parseIncome(income, market = undefined) {
|
|
630
|
+
//
|
|
631
|
+
// {
|
|
632
|
+
// "amount":"0.0008",
|
|
633
|
+
// "asset":"USDC",
|
|
634
|
+
// "created_at":"2024-02-22T16:00:00Z",
|
|
635
|
+
// "from_portfolio":{
|
|
636
|
+
// "id":"13yuk1fs-1-0",
|
|
637
|
+
// "name":"Eng Test Portfolio - 2",
|
|
638
|
+
// "uuid":"018712f2-5ff9-7de3-9010-xxxxxxxxx"
|
|
639
|
+
// },
|
|
640
|
+
// "instrument_id":"149264164756389888",
|
|
641
|
+
// "instrument_symbol":"ETH-PERP",
|
|
642
|
+
// "position_id":"1xy4v51m-1-2",
|
|
643
|
+
// "status":"PROCESSED",
|
|
644
|
+
// "to_portfolio":{
|
|
645
|
+
// "name":"CB_FUND"
|
|
646
|
+
// },
|
|
647
|
+
// "transfer_type":"FUNDING",
|
|
648
|
+
// "transfer_uuid":"a6b708df-2c44-32c5-bb98-xxxxxxxxxx",
|
|
649
|
+
// "updated_at":"2024-02-22T16:00:00Z"
|
|
650
|
+
// }
|
|
651
|
+
//
|
|
652
|
+
const marketId = this.safeString(income, 'symbol');
|
|
653
|
+
market = this.safeMarket(marketId, market, undefined, 'contract');
|
|
654
|
+
const datetime = this.safeInteger(income, 'created_at');
|
|
655
|
+
const timestamp = this.parse8601(datetime);
|
|
656
|
+
const currencyId = this.safeString(income, 'asset');
|
|
657
|
+
const code = this.safeCurrencyCode(currencyId);
|
|
658
|
+
return {
|
|
659
|
+
'info': income,
|
|
660
|
+
'symbol': market['symbol'],
|
|
661
|
+
'code': code,
|
|
662
|
+
'timestamp': timestamp,
|
|
663
|
+
'datetime': this.iso8601(timestamp),
|
|
664
|
+
'id': this.safeString(income, 'transfer_uuid'),
|
|
665
|
+
'amount': this.safeNumber(income, 'amount'),
|
|
666
|
+
'rate': undefined,
|
|
667
|
+
};
|
|
668
|
+
}
|
|
669
|
+
/**
|
|
670
|
+
* @method
|
|
671
|
+
* @name coinbaseinternational#fetchTransfers
|
|
672
|
+
* @description fetch a history of internal transfers made on an account
|
|
673
|
+
* @see https://docs.cdp.coinbase.com/intx/reference/gettransfers
|
|
674
|
+
* @param {string} code unified currency code of the currency transferred
|
|
675
|
+
* @param {int} [since] the earliest time in ms to fetch transfers for
|
|
676
|
+
* @param {int} [limit] the maximum number of transfers structures to retrieve
|
|
677
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
678
|
+
* @returns {object[]} a list of [transfer structures]{@link https://docs.ccxt.com/#/?id=transfer-structure}
|
|
679
|
+
*/
|
|
680
|
+
async fetchTransfers(code = undefined, since = undefined, limit = undefined, params = {}) {
|
|
681
|
+
await this.loadMarkets();
|
|
682
|
+
const request = {
|
|
683
|
+
'type': 'INTERNAL',
|
|
684
|
+
};
|
|
685
|
+
let currency = undefined;
|
|
686
|
+
if (code !== undefined) {
|
|
687
|
+
currency = this.currency(code);
|
|
688
|
+
}
|
|
689
|
+
let portfolios = undefined;
|
|
690
|
+
[portfolios, params] = this.handleOptionAndParams(params, 'fetchTransfers', 'portfolios');
|
|
691
|
+
if (portfolios !== undefined) {
|
|
692
|
+
request['portfolios'] = portfolios;
|
|
693
|
+
}
|
|
694
|
+
if (since !== undefined) {
|
|
695
|
+
request['time_from'] = this.iso8601(since);
|
|
696
|
+
}
|
|
697
|
+
if (limit !== undefined) {
|
|
698
|
+
request['result_limit'] = limit;
|
|
699
|
+
}
|
|
700
|
+
else {
|
|
701
|
+
request['result_limit'] = 100;
|
|
702
|
+
}
|
|
703
|
+
const response = await this.v1PrivateGetTransfers(this.extend(request, params));
|
|
704
|
+
const transfers = this.safeList(response, 'results', []);
|
|
705
|
+
return this.parseTransfers(transfers, currency, since, limit);
|
|
706
|
+
}
|
|
707
|
+
parseTransfer(transfer, currency = undefined) {
|
|
708
|
+
//
|
|
709
|
+
// {
|
|
710
|
+
// "amount":"0.0008",
|
|
711
|
+
// "asset":"USDC",
|
|
712
|
+
// "created_at":"2024-02-22T16:00:00Z",
|
|
713
|
+
// "from_portfolio":{
|
|
714
|
+
// "id":"13yuk1fs-1-0",
|
|
715
|
+
// "name":"Eng Test Portfolio - 2",
|
|
716
|
+
// "uuid":"018712f2-5ff9-7de3-9010-xxxxxxxxx"
|
|
717
|
+
// },
|
|
718
|
+
// "instrument_id":"149264164756389888",
|
|
719
|
+
// "instrument_symbol":"ETH-PERP",
|
|
720
|
+
// "position_id":"1xy4v51m-1-2",
|
|
721
|
+
// "status":"PROCESSED",
|
|
722
|
+
// "to_portfolio":{
|
|
723
|
+
// "name":"CB_FUND"
|
|
724
|
+
// },
|
|
725
|
+
// "transfer_type":"FUNDING",
|
|
726
|
+
// "transfer_uuid":"a6b708df-2c44-32c5-bb98-xxxxxxxxxx",
|
|
727
|
+
// "updated_at":"2024-02-22T16:00:00Z"
|
|
728
|
+
// }
|
|
729
|
+
//
|
|
730
|
+
const datetime = this.safeInteger(transfer, 'created_at');
|
|
731
|
+
const timestamp = this.parse8601(datetime);
|
|
732
|
+
const currencyId = this.safeString(transfer, 'asset');
|
|
733
|
+
const code = this.safeCurrencyCode(currencyId);
|
|
734
|
+
const fromPorfolio = this.safeDict(transfer, 'from_portfolio', {});
|
|
735
|
+
const fromId = this.safeString(fromPorfolio, 'id');
|
|
736
|
+
const toPorfolio = this.safeDict(transfer, 'to_portfolio', {});
|
|
737
|
+
const toId = this.safeString(toPorfolio, 'id');
|
|
738
|
+
return {
|
|
739
|
+
'info': transfer,
|
|
740
|
+
'id': this.safeString(transfer, 'transfer_uuid'),
|
|
741
|
+
'timestamp': timestamp,
|
|
742
|
+
'datetime': this.iso8601(timestamp),
|
|
743
|
+
'currency': code,
|
|
744
|
+
'amount': this.safeNumber(transfer, 'amount'),
|
|
745
|
+
'fromAccount': fromId,
|
|
746
|
+
'toAccount': toId,
|
|
747
|
+
'status': this.parseTransferStatus(this.safeString(transfer, 'status')),
|
|
748
|
+
};
|
|
749
|
+
}
|
|
750
|
+
parseTransferStatus(status) {
|
|
751
|
+
const statuses = {
|
|
752
|
+
'FAILED': 'failed',
|
|
753
|
+
'PROCESSED': 'ok',
|
|
754
|
+
'NEW': 'pending',
|
|
755
|
+
'STARTED': 'pending',
|
|
756
|
+
};
|
|
757
|
+
return this.safeString(statuses, status, status);
|
|
758
|
+
}
|
|
759
|
+
/**
|
|
760
|
+
* @method
|
|
761
|
+
* @name coinbaseinternational#createDepositAddress
|
|
762
|
+
* @description create a currency deposit address
|
|
763
|
+
* @see https://docs.cloud.coinbase.com/intx/reference/createaddress
|
|
764
|
+
* @see https://docs.cloud.coinbase.com/intx/reference/createcounterpartyid
|
|
765
|
+
* @param {string} code unified currency code of the currency for the deposit address
|
|
766
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
767
|
+
* @param {string} [params.network_arn_id] Identifies the blockchain network (e.g., networks/ethereum-mainnet/assets/313ef8a9-ae5a-5f2f-8a56-572c0e2a4d5a) if not provided will pick default
|
|
768
|
+
* @param {string} [params.network] unified network code to identify the blockchain network
|
|
769
|
+
* @returns {object} an [address structure]{@link https://docs.ccxt.com/#/?id=address-structure}
|
|
770
|
+
*/
|
|
771
|
+
async createDepositAddress(code, params = {}) {
|
|
772
|
+
await this.loadMarkets();
|
|
773
|
+
let method = undefined;
|
|
774
|
+
[method, params] = this.handleOptionAndParams(params, 'createDepositAddress', 'method', 'v1PrivatePostTransfersAddress');
|
|
775
|
+
let portfolio = undefined;
|
|
776
|
+
[portfolio, params] = await this.handlePortfolioAndParams('createDepositAddress', params);
|
|
777
|
+
const request = {
|
|
778
|
+
'portfolio': portfolio,
|
|
779
|
+
};
|
|
780
|
+
if (method === 'v1PrivatePostTransfersAddress') {
|
|
781
|
+
const currency = this.currency(code);
|
|
782
|
+
request['asset'] = currency['id'];
|
|
783
|
+
let networkId = undefined;
|
|
784
|
+
[networkId, params] = await this.handleNetworkIdAndParams(code, 'createDepositAddress', params);
|
|
785
|
+
request['network_arn_id'] = networkId;
|
|
786
|
+
}
|
|
787
|
+
const response = await this[method](this.extend(request, params));
|
|
788
|
+
//
|
|
789
|
+
// v1PrivatePostTransfersAddress
|
|
790
|
+
// {
|
|
791
|
+
// address: "3LkwYscRyh6tUR1XTqXSJQoJnK7ucC1F4n",
|
|
792
|
+
// network_arn_id: "networks/bitcoin-mainnet/assets/6ecc0dcc-10a2-500e-b315-a3b9abae19ce",
|
|
793
|
+
// destination_tag: "",
|
|
794
|
+
// }
|
|
795
|
+
// v1PrivatePostTransfersCreateCounterpartyId
|
|
796
|
+
// {
|
|
797
|
+
// "portfolio_uuid":"018e0a8b-6b6b-70e0-9689-1e7926c2c8bc",
|
|
798
|
+
// "counterparty_id":"CB2ZPUCZBE"
|
|
799
|
+
// }
|
|
800
|
+
//
|
|
801
|
+
const tag = this.safeString(response, 'destination_tag');
|
|
802
|
+
const address = this.safeString2(response, 'address', 'counterparty_id');
|
|
803
|
+
return {
|
|
804
|
+
'currency': code,
|
|
805
|
+
'tag': tag,
|
|
806
|
+
'address': address,
|
|
807
|
+
'network': undefined,
|
|
808
|
+
'info': response,
|
|
809
|
+
};
|
|
810
|
+
}
|
|
811
|
+
findDefaultNetwork(networks) {
|
|
812
|
+
const networksArray = this.toArray(networks);
|
|
813
|
+
for (let i = 0; i < networksArray.length; i++) {
|
|
814
|
+
const info = networksArray[i]['info'];
|
|
815
|
+
const is_default = this.safeBool(info, 'is_default', false);
|
|
816
|
+
if (is_default === true) {
|
|
817
|
+
return networksArray[i];
|
|
818
|
+
}
|
|
819
|
+
}
|
|
820
|
+
return networksArray[0];
|
|
821
|
+
}
|
|
822
|
+
async loadCurrencyNetworks(code, params = {}) {
|
|
823
|
+
const currency = this.currency(code);
|
|
824
|
+
const networks = this.safeDict(currency, 'networks');
|
|
825
|
+
if (networks !== undefined) {
|
|
826
|
+
return false;
|
|
827
|
+
}
|
|
828
|
+
const request = {
|
|
829
|
+
'asset': currency['id'],
|
|
830
|
+
};
|
|
831
|
+
const rawNetworks = await this.v1PublicGetAssetsAssetNetworks(request);
|
|
832
|
+
//
|
|
833
|
+
// [
|
|
834
|
+
// {
|
|
835
|
+
// "asset_id":"1",
|
|
836
|
+
// "asset_uuid":"2b92315d-eab7-5bef-84fa-089a131333f5",
|
|
837
|
+
// "asset_name":"USDC",
|
|
838
|
+
// "network_arn_id":"networks/ethereum-mainnet/assets/9bc140b4-69c3-5fc9-bd0d-b041bcf40039",
|
|
839
|
+
// "min_withdrawal_amt":"1",
|
|
840
|
+
// "max_withdrawal_amt":"100000000",
|
|
841
|
+
// "network_confirms":35,
|
|
842
|
+
// "processing_time":485,
|
|
843
|
+
// "is_default":true,
|
|
844
|
+
// "network_name":"ethereum",
|
|
845
|
+
// "display_name":"Ethereum"
|
|
846
|
+
// },
|
|
847
|
+
// ....
|
|
848
|
+
// ]
|
|
849
|
+
//
|
|
850
|
+
currency['networks'] = this.parseNetworks(rawNetworks);
|
|
851
|
+
return true;
|
|
852
|
+
}
|
|
853
|
+
parseNetworks(networks, params = {}) {
|
|
854
|
+
const result = {};
|
|
855
|
+
for (let i = 0; i < networks.length; i++) {
|
|
856
|
+
const network = this.extend(this.parseNetwork(networks[i]), params);
|
|
857
|
+
result[network['network']] = network;
|
|
858
|
+
}
|
|
859
|
+
return result;
|
|
860
|
+
}
|
|
861
|
+
parseNetwork(network, params = {}) {
|
|
862
|
+
//
|
|
863
|
+
// {
|
|
864
|
+
// "asset_id":"1",
|
|
865
|
+
// "asset_uuid":"2b92315d-eab7-5bef-84fa-089a131333f5",
|
|
866
|
+
// "asset_name":"USDC",
|
|
867
|
+
// "network_arn_id":"networks/ethereum-mainnet/assets/9bc140b4-69c3-5fc9-bd0d-b041bcf40039",
|
|
868
|
+
// "min_withdrawal_amt":"1",
|
|
869
|
+
// "max_withdrawal_amt":"100000000",
|
|
870
|
+
// "network_confirms":35,
|
|
871
|
+
// "processing_time":485,
|
|
872
|
+
// "is_default":true,
|
|
873
|
+
// "network_name":"ethereum",
|
|
874
|
+
// "display_name":"Ethereum"
|
|
875
|
+
// }
|
|
876
|
+
//
|
|
877
|
+
const currencyId = this.safeString(network, 'asset_name');
|
|
878
|
+
const currencyCode = this.safeCurrencyCode(currencyId);
|
|
879
|
+
const networkId = this.safeString(network, 'network_arn_id');
|
|
880
|
+
const networkIdForCode = this.safeStringN(network, ['network_name', 'display_name', 'network_arn_id'], '');
|
|
881
|
+
return this.safeNetwork({
|
|
882
|
+
'info': network,
|
|
883
|
+
'id': networkId,
|
|
884
|
+
'name': this.safeString(network, 'display_name'),
|
|
885
|
+
'network': this.networkIdToCode(networkIdForCode, currencyCode),
|
|
886
|
+
'active': undefined,
|
|
887
|
+
'deposit': undefined,
|
|
888
|
+
'withdraw': undefined,
|
|
889
|
+
'precision': undefined,
|
|
890
|
+
'fee': undefined,
|
|
891
|
+
'limits': {
|
|
892
|
+
'withdraw': {
|
|
893
|
+
'min': this.safeNumber(network, 'min_withdrawal_amt'),
|
|
894
|
+
'max': this.safeNumber(network, 'max_withdrawal_amt'),
|
|
895
|
+
},
|
|
896
|
+
'deposit': {
|
|
897
|
+
'min': undefined,
|
|
898
|
+
'max': undefined,
|
|
899
|
+
},
|
|
900
|
+
},
|
|
901
|
+
});
|
|
902
|
+
}
|
|
903
|
+
/**
|
|
904
|
+
* @method
|
|
905
|
+
* @name coinbaseinternational#setMargin
|
|
906
|
+
* @description Either adds or reduces margin in order to set the margin to a specific value
|
|
907
|
+
* @see https://docs.cloud.coinbase.com/intx/reference/setportfoliomarginoverride
|
|
908
|
+
* @param {string} symbol unified market symbol of the market to set margin in
|
|
909
|
+
* @param {float} amount the amount to set the margin to
|
|
910
|
+
* @param {object} [params] parameters specific to the exchange API endpoint
|
|
911
|
+
* @returns {object} A [margin structure]{@link https://github.com/ccxt/ccxt/wiki/Manual#add-margin-structure}
|
|
912
|
+
*/
|
|
913
|
+
async setMargin(symbol, amount, params = {}) {
|
|
914
|
+
let portfolio = undefined;
|
|
915
|
+
[portfolio, params] = await this.handlePortfolioAndParams('setMargin', params);
|
|
916
|
+
if (symbol !== undefined) {
|
|
917
|
+
throw new BadRequest(this.id + ' setMargin() only allows setting margin to full portfolio');
|
|
918
|
+
}
|
|
919
|
+
const request = {
|
|
920
|
+
'portfolio': portfolio,
|
|
921
|
+
'margin_override': amount,
|
|
922
|
+
};
|
|
923
|
+
return await this.v1PrivatePostPortfoliosMargin(this.extend(request, params));
|
|
924
|
+
}
|
|
925
|
+
/**
|
|
926
|
+
* @method
|
|
927
|
+
* @name exchange#fetchDepositsWithdrawals
|
|
928
|
+
* @description fetch history of deposits and withdrawals
|
|
929
|
+
* @see https://docs.cloud.coinbase.com/intx/reference/gettransfers
|
|
930
|
+
* @param {string} [code] unified currency code for the currency of the deposit/withdrawals, default is undefined
|
|
931
|
+
* @param {int} [since] timestamp in ms of the earliest deposit/withdrawal, default is undefined
|
|
932
|
+
* @param {int} [limit] max number of deposit/withdrawals to return, default is undefined
|
|
933
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
934
|
+
* @param {string} [params.portfolios] Identifies the portfolios by UUID (e.g., 892e8c7c-e979-4cad-b61b-55a197932cf1) or portfolio ID (e.g., 5189861793641175). Can provide single or multiple portfolios to filter by or fetches transfers for all portfolios if none are provided.
|
|
935
|
+
* @param {int} [params.until] Only find transfers updated before this time. Use timestamp format
|
|
936
|
+
* @param {string} [params.status] The current status of transfer. Possible values: [PROCESSED, NEW, FAILED, STARTED]
|
|
937
|
+
* @param {string} [params.type] The type of transfer Possible values: [DEPOSIT, WITHDRAW, REBATE, STIPEND, INTERNAL, FUNDING]
|
|
938
|
+
* @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
|
|
939
|
+
* @returns {object} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}
|
|
940
|
+
*/
|
|
941
|
+
async fetchDepositsWithdrawals(code = undefined, since = undefined, limit = undefined, params = {}) {
|
|
942
|
+
await this.loadMarkets();
|
|
943
|
+
let paginate = undefined;
|
|
944
|
+
[paginate, params] = this.handleOptionAndParams(params, 'fetchDepositsWithdrawals', 'paginate');
|
|
945
|
+
let maxEntriesPerRequest = undefined;
|
|
946
|
+
[maxEntriesPerRequest, params] = this.handleOptionAndParams(params, 'fetchDepositsWithdrawals', 'maxEntriesPerRequest', 100);
|
|
947
|
+
const pageKey = 'ccxtPageKey';
|
|
948
|
+
if (paginate) {
|
|
949
|
+
return await this.fetchPaginatedCallIncremental('fetchDepositsWithdrawals', code, since, limit, params, pageKey, maxEntriesPerRequest);
|
|
950
|
+
}
|
|
951
|
+
const page = this.safeInteger(params, pageKey, 1) - 1;
|
|
952
|
+
const request = {
|
|
953
|
+
'result_offset': this.safeInteger2(params, 'offset', 'result_offset', page * maxEntriesPerRequest),
|
|
954
|
+
};
|
|
955
|
+
if (since !== undefined) {
|
|
956
|
+
request['time_from'] = this.iso8601(since);
|
|
957
|
+
}
|
|
958
|
+
if (limit !== undefined) {
|
|
959
|
+
const newLimit = Math.min(limit, 100);
|
|
960
|
+
request['result_limit'] = newLimit;
|
|
961
|
+
}
|
|
962
|
+
let portfolios = undefined;
|
|
963
|
+
[portfolios, params] = this.handleOptionAndParams(params, 'fetchDepositsWithdrawals', 'portfolios');
|
|
964
|
+
if (portfolios !== undefined) {
|
|
965
|
+
request['portfolios'] = portfolios;
|
|
966
|
+
}
|
|
967
|
+
let until = undefined;
|
|
968
|
+
[until, params] = this.handleOptionAndParams(params, 'fetchDepositsWithdrawals', 'until');
|
|
969
|
+
if (until !== undefined) {
|
|
970
|
+
request['time_to'] = this.iso8601(until);
|
|
971
|
+
}
|
|
972
|
+
const response = await this.v1PrivateGetTransfers(this.extend(request, params));
|
|
973
|
+
//
|
|
974
|
+
// {
|
|
975
|
+
// "pagination":{
|
|
976
|
+
// "result_limit":25,
|
|
977
|
+
// "result_offset":0
|
|
978
|
+
// },
|
|
979
|
+
// "results":[
|
|
980
|
+
// {
|
|
981
|
+
// "transfer_uuid":"8e471d77-4208-45a8-9e5b-f3bd8a2c1fc3",
|
|
982
|
+
// "transfer_type":"WITHDRAW",
|
|
983
|
+
// "amount":"1.000000",
|
|
984
|
+
// "asset":"USDC",
|
|
985
|
+
// "status":"PROCESSED",
|
|
986
|
+
// "network_name":"ethereum",
|
|
987
|
+
// "created_at":"2024-03-14T02:32:18.497795Z",
|
|
988
|
+
// "updated_at":"2024-03-14T02:35:38.514588Z",
|
|
989
|
+
// "from_portfolio":{
|
|
990
|
+
// "id":"1yun54bb-1-6",
|
|
991
|
+
// "uuid":"018e0a8b-6b6b-70e0-9689-1e7926c2c8bc",
|
|
992
|
+
// "name":"fungus technology o?Portfolio"
|
|
993
|
+
// },
|
|
994
|
+
// "to_address":"0xcdcE79F820BE9d6C5033db5c31d1AE3A8c2399bB"
|
|
995
|
+
// }
|
|
996
|
+
// ]
|
|
997
|
+
// }
|
|
998
|
+
//
|
|
999
|
+
const rawTransactions = this.safeList(response, 'results', []);
|
|
1000
|
+
return this.parseTransactions(rawTransactions);
|
|
1001
|
+
}
|
|
1002
|
+
/**
|
|
1003
|
+
* @method
|
|
1004
|
+
* @name coinbaseinternational#fetchPosition
|
|
1005
|
+
* @see https://docs.cloud.coinbase.com/intx/reference/getportfolioposition
|
|
1006
|
+
* @description fetch data on an open position
|
|
1007
|
+
* @param {string} symbol unified market symbol of the market the position is held in
|
|
1008
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1009
|
+
* @returns {object} a [position structure]{@link https://docs.ccxt.com/#/?id=position-structure}
|
|
1010
|
+
*/
|
|
1011
|
+
async fetchPosition(symbol, params = {}) {
|
|
1012
|
+
await this.loadMarkets();
|
|
1013
|
+
symbol = this.symbol(symbol);
|
|
1014
|
+
let portfolio = undefined;
|
|
1015
|
+
[portfolio, params] = await this.handlePortfolioAndParams('fetchPosition', params);
|
|
1016
|
+
const request = {
|
|
1017
|
+
'portfolio': portfolio,
|
|
1018
|
+
'instrument': this.marketId(symbol),
|
|
1019
|
+
};
|
|
1020
|
+
const position = await this.v1PrivateGetPortfoliosPortfolioPositionsInstrument(this.extend(request, params));
|
|
1021
|
+
//
|
|
1022
|
+
// {
|
|
1023
|
+
// "symbol":"BTC-PERP",
|
|
1024
|
+
// "instrument_id":"114jqr89-0-0",
|
|
1025
|
+
// "instrument_uuid":"b3469e0b-222c-4f8a-9f68-1f9e44d7e5e0",
|
|
1026
|
+
// "vwap":"52482.3",
|
|
1027
|
+
// "net_size":"0",
|
|
1028
|
+
// "buy_order_size":"0.001",
|
|
1029
|
+
// "sell_order_size":"0",
|
|
1030
|
+
// "im_contribution":"0.2",
|
|
1031
|
+
// "unrealized_pnl":"0",
|
|
1032
|
+
// "mark_price":"52406.8",
|
|
1033
|
+
// "entry_vwap":"52472.9"
|
|
1034
|
+
// }
|
|
1035
|
+
//
|
|
1036
|
+
return this.parsePosition(position);
|
|
1037
|
+
}
|
|
1038
|
+
parsePosition(position, market = undefined) {
|
|
1039
|
+
//
|
|
1040
|
+
// {
|
|
1041
|
+
// "symbol":"BTC-PERP",
|
|
1042
|
+
// "instrument_id":"114jqr89-0-0",
|
|
1043
|
+
// "instrument_uuid":"b3469e0b-222c-4f8a-9f68-1f9e44d7e5e0",
|
|
1044
|
+
// "vwap":"52482.3",
|
|
1045
|
+
// "net_size":"0",
|
|
1046
|
+
// "buy_order_size":"0.001",
|
|
1047
|
+
// "sell_order_size":"0",
|
|
1048
|
+
// "im_contribution":"0.2",
|
|
1049
|
+
// "unrealized_pnl":"0",
|
|
1050
|
+
// "mark_price":"52406.8",
|
|
1051
|
+
// "entry_vwap":"52472.9"
|
|
1052
|
+
// }
|
|
1053
|
+
//
|
|
1054
|
+
const marketId = this.safeString(position, 'symbol');
|
|
1055
|
+
let quantity = this.safeString(position, 'net_size');
|
|
1056
|
+
market = this.safeMarket(marketId, market, '-');
|
|
1057
|
+
let side = 'long';
|
|
1058
|
+
if (Precise.stringLe(quantity, '0')) {
|
|
1059
|
+
side = 'short';
|
|
1060
|
+
quantity = Precise.stringMul('-1', quantity);
|
|
1061
|
+
}
|
|
1062
|
+
return this.safePosition({
|
|
1063
|
+
'info': position,
|
|
1064
|
+
'id': this.safeString(position, 'id'),
|
|
1065
|
+
'symbol': market['symbol'],
|
|
1066
|
+
'entryPrice': undefined,
|
|
1067
|
+
'markPrice': this.safeNumber(position, 'mark_price'),
|
|
1068
|
+
'notional': undefined,
|
|
1069
|
+
'collateral': undefined,
|
|
1070
|
+
'unrealizedPnl': this.safeNumber(position, 'unrealized_pnl'),
|
|
1071
|
+
'side': side,
|
|
1072
|
+
'contracts': this.parseNumber(quantity),
|
|
1073
|
+
'contractSize': this.safeNumber(market, 'contractSize'),
|
|
1074
|
+
'timestamp': undefined,
|
|
1075
|
+
'datetime': undefined,
|
|
1076
|
+
'hedged': undefined,
|
|
1077
|
+
'maintenanceMargin': undefined,
|
|
1078
|
+
'maintenanceMarginPercentage': undefined,
|
|
1079
|
+
'initialMargin': this.safeNumber(position, 'im_contribution'),
|
|
1080
|
+
'initialMarginPercentage': undefined,
|
|
1081
|
+
'leverage': undefined,
|
|
1082
|
+
'liquidationPrice': undefined,
|
|
1083
|
+
'marginRatio': undefined,
|
|
1084
|
+
'marginMode': undefined,
|
|
1085
|
+
'percentage': undefined,
|
|
1086
|
+
});
|
|
1087
|
+
}
|
|
1088
|
+
/**
|
|
1089
|
+
* @method
|
|
1090
|
+
* @name coinbaseinternational#fetchPositions
|
|
1091
|
+
* @see https://docs.cloud.coinbase.com/intx/reference/getportfoliopositions
|
|
1092
|
+
* @description fetch all open positions
|
|
1093
|
+
* @param {string[]} [symbols] list of unified market symbols
|
|
1094
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1095
|
+
* @returns {object[]} a list of [position structure]{@link https://docs.ccxt.com/#/?id=position-structure}
|
|
1096
|
+
*/
|
|
1097
|
+
async fetchPositions(symbols = undefined, params = {}) {
|
|
1098
|
+
await this.loadMarkets();
|
|
1099
|
+
let portfolio = undefined;
|
|
1100
|
+
[portfolio, params] = await this.handlePortfolioAndParams('fetchPositions', params);
|
|
1101
|
+
const request = {
|
|
1102
|
+
'portfolio': portfolio,
|
|
1103
|
+
};
|
|
1104
|
+
const response = await this.v1PrivateGetPortfoliosPortfolioPositions(this.extend(request, params));
|
|
1105
|
+
//
|
|
1106
|
+
// [
|
|
1107
|
+
// {
|
|
1108
|
+
// "symbol":"BTC-PERP",
|
|
1109
|
+
// "instrument_id":"114jqr89-0-0",
|
|
1110
|
+
// "instrument_uuid":"b3469e0b-222c-4f8a-9f68-1f9e44d7e5e0",
|
|
1111
|
+
// "vwap":"52482.3",
|
|
1112
|
+
// "net_size":"0",
|
|
1113
|
+
// "buy_order_size":"0.001",
|
|
1114
|
+
// "sell_order_size":"0",
|
|
1115
|
+
// "im_contribution":"0.2",
|
|
1116
|
+
// "unrealized_pnl":"0",
|
|
1117
|
+
// "mark_price":"52406.8",
|
|
1118
|
+
// "entry_vwap":"52472.9"
|
|
1119
|
+
// }
|
|
1120
|
+
// ]
|
|
1121
|
+
//
|
|
1122
|
+
const positions = this.parsePositions(response);
|
|
1123
|
+
if (this.isEmpty(symbols)) {
|
|
1124
|
+
return positions;
|
|
1125
|
+
}
|
|
1126
|
+
symbols = this.marketSymbols(symbols);
|
|
1127
|
+
return this.filterByArrayPositions(positions, 'symbol', symbols, false);
|
|
1128
|
+
}
|
|
1129
|
+
/**
|
|
1130
|
+
* @method
|
|
1131
|
+
* @name coinbaseinternational#fetchWithdrawals
|
|
1132
|
+
* @description fetch all withdrawals made from an account
|
|
1133
|
+
* @see https://docs.cloud.coinbase.com/intx/reference/gettransfers
|
|
1134
|
+
* @param {string} code unified currency code
|
|
1135
|
+
* @param {int} [since] the earliest time in ms to fetch withdrawals for
|
|
1136
|
+
* @param {int} [limit] the maximum number of withdrawals structures to retrieve
|
|
1137
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1138
|
+
* @param {string} [params.portfolios] Identifies the portfolios by UUID (e.g., 892e8c7c-e979-4cad-b61b-55a197932cf1) or portfolio ID (e.g., 5189861793641175). Can provide single or multiple portfolios to filter by or fetches transfers for all portfolios if none are provided.
|
|
1139
|
+
* @param {int} [params.until] Only find transfers updated before this time. Use timestamp format
|
|
1140
|
+
* @param {string} [params.status] The current status of transfer. Possible values: [PROCESSED, NEW, FAILED, STARTED]
|
|
1141
|
+
* @param {string} [params.type] The type of transfer Possible values: [DEPOSIT, WITHDRAW, REBATE, STIPEND, INTERNAL, FUNDING]
|
|
1142
|
+
* @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
|
|
1143
|
+
* @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}
|
|
1144
|
+
*/
|
|
1145
|
+
async fetchWithdrawals(code = undefined, since = undefined, limit = undefined, params = {}) {
|
|
1146
|
+
await this.loadMarkets();
|
|
1147
|
+
params['type'] = 'WITHDRAW';
|
|
1148
|
+
return await this.fetchDepositsWithdrawals(code, since, limit, params);
|
|
1149
|
+
}
|
|
1150
|
+
/**
|
|
1151
|
+
* @method
|
|
1152
|
+
* @name coinbaseinternational#fetchDeposits
|
|
1153
|
+
* @description fetch all deposits made to an account
|
|
1154
|
+
* @param {string} code unified currency code
|
|
1155
|
+
* @param {int} [since] the earliest time in ms to fetch deposits for
|
|
1156
|
+
* @param {int} [limit] the maximum number of deposits structures to retrieve
|
|
1157
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1158
|
+
* @param {string} [params.portfolios] Identifies the portfolios by UUID (e.g., 892e8c7c-e979-4cad-b61b-55a197932cf1) or portfolio ID (e.g., 5189861793641175). Can provide single or multiple portfolios to filter by or fetches transfers for all portfolios if none are provided.
|
|
1159
|
+
* @param {int} [params.until] Only find transfers updated before this time. Use timestamp format
|
|
1160
|
+
* @param {string} [params.status] The current status of transfer. Possible values: [PROCESSED, NEW, FAILED, STARTED]
|
|
1161
|
+
* @param {string} [params.type] The type of transfer Possible values: [DEPOSIT, WITHDRAW, REBATE, STIPEND, INTERNAL, FUNDING]
|
|
1162
|
+
* @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
|
|
1163
|
+
* @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}
|
|
1164
|
+
*/
|
|
1165
|
+
async fetchDeposits(code = undefined, since = undefined, limit = undefined, params = {}) {
|
|
1166
|
+
await this.loadMarkets();
|
|
1167
|
+
params['type'] = 'DEPOSIT';
|
|
1168
|
+
return await this.fetchDepositsWithdrawals(code, since, limit, params);
|
|
1169
|
+
}
|
|
1170
|
+
parseTransactionStatus(status) {
|
|
1171
|
+
const statuses = {
|
|
1172
|
+
'PROCESSED': 'ok',
|
|
1173
|
+
'NEW': 'pending',
|
|
1174
|
+
'STARTED': 'pending',
|
|
1175
|
+
'FAILED': 'canceled',
|
|
1176
|
+
};
|
|
1177
|
+
return this.safeString(statuses, status, status);
|
|
1178
|
+
}
|
|
1179
|
+
parseTransaction(transaction, currency = undefined) {
|
|
1180
|
+
//
|
|
1181
|
+
// {
|
|
1182
|
+
// "idem":"8e471d77-4208-45a8-9e5b-f3bd8a2c1fc3"
|
|
1183
|
+
// }
|
|
1184
|
+
// const transactionType = this.safeString (transaction, 'type');
|
|
1185
|
+
const datetime = this.safeString(transaction, 'updated_at');
|
|
1186
|
+
const fromPorfolio = this.safeDict(transaction, 'from_portfolio', {});
|
|
1187
|
+
const addressFrom = this.safeStringN(transaction, ['from_address', 'from_cb_account', this.safeStringN(fromPorfolio, ['id', 'uuid', 'name']), 'from_counterparty_id']);
|
|
1188
|
+
const toPorfolio = this.safeDict(transaction, 'from_portfolio', {});
|
|
1189
|
+
const addressTo = this.safeStringN(transaction, ['to_address', 'to_cb_account', this.safeStringN(toPorfolio, ['id', 'uuid', 'name']), 'to_counterparty_id']);
|
|
1190
|
+
return {
|
|
1191
|
+
'info': transaction,
|
|
1192
|
+
'id': this.safeString(transaction, 'transfer_uuid'),
|
|
1193
|
+
'txid': this.safeString(transaction, 'transaction_uuid'),
|
|
1194
|
+
'timestamp': this.parse8601(datetime),
|
|
1195
|
+
'datetime': datetime,
|
|
1196
|
+
'network': this.networkIdToCode(this.safeString(transaction, 'network_name')),
|
|
1197
|
+
'address': undefined,
|
|
1198
|
+
'addressTo': addressTo,
|
|
1199
|
+
'addressFrom': addressFrom,
|
|
1200
|
+
'tag': undefined,
|
|
1201
|
+
'tagTo': undefined,
|
|
1202
|
+
'tagFrom': undefined,
|
|
1203
|
+
'type': this.safeString(transaction, 'resource'),
|
|
1204
|
+
'amount': this.safeNumber(transaction, 'amount'),
|
|
1205
|
+
'currency': this.safeCurrencyCode(this.safeString(transaction, 'asset'), currency),
|
|
1206
|
+
'status': this.parseTransactionStatus(this.safeString(transaction, 'status')),
|
|
1207
|
+
'updated': this.parse8601(datetime),
|
|
1208
|
+
'fee': {
|
|
1209
|
+
'cost': undefined,
|
|
1210
|
+
'currency': undefined,
|
|
1211
|
+
},
|
|
1212
|
+
};
|
|
1213
|
+
}
|
|
1214
|
+
parseTrade(trade, market = undefined) {
|
|
1215
|
+
//
|
|
1216
|
+
// {
|
|
1217
|
+
// "portfolio_id":"1wp37qsc-1-0",
|
|
1218
|
+
// "portfolio_uuid":"018d7f6c-b92c-7361-8b7e-2932711e5a22",
|
|
1219
|
+
// "portfolio_name":"CCXT Portfolio 020624-17:16",
|
|
1220
|
+
// "fill_id":"1xbfy19y-1-184",
|
|
1221
|
+
// "exec_id":"280841526207070392",
|
|
1222
|
+
// "order_id":"1xbfv8yw-1-0",
|
|
1223
|
+
// "instrument_id":"114jqr89-0-0",
|
|
1224
|
+
// "instrument_uuid":"b3469e0b-222c-4f8a-9f68-1f9e44d7e5e0",
|
|
1225
|
+
// "symbol":"BTC-PERP",
|
|
1226
|
+
// "match_id":"280841526207053840",
|
|
1227
|
+
// "fill_price":"52500",
|
|
1228
|
+
// "fill_qty":"0.01",
|
|
1229
|
+
// "client_id":"1x59ctku-1-1",
|
|
1230
|
+
// "client_order_id":"ccxt3e4e2a5f-4a89-",
|
|
1231
|
+
// "order_qty":"0.01",
|
|
1232
|
+
// "limit_price":"52500",
|
|
1233
|
+
// "total_filled":"0.01",
|
|
1234
|
+
// "filled_vwap":"52500",
|
|
1235
|
+
// "expire_time":"",
|
|
1236
|
+
// "stop_price":"",
|
|
1237
|
+
// "side":"BUY",
|
|
1238
|
+
// "tif":"GTC",
|
|
1239
|
+
// "stp_mode":"BOTH",
|
|
1240
|
+
// "flags":"",
|
|
1241
|
+
// "fee":"0.105",
|
|
1242
|
+
// "fee_asset":"USDC",
|
|
1243
|
+
// "order_status":"DONE",
|
|
1244
|
+
// "event_time":"2024-02-15T00:43:57.631Z"
|
|
1245
|
+
// }
|
|
1246
|
+
//
|
|
1247
|
+
const marketId = this.safeString(trade, 'symbol');
|
|
1248
|
+
const datetime = this.safeString(trade, 'event_time');
|
|
1249
|
+
return this.safeTrade({
|
|
1250
|
+
'info': trade,
|
|
1251
|
+
'id': this.safeString2(trade, 'fill_id', 'exec_id'),
|
|
1252
|
+
'order': this.safeString(trade, 'order_id'),
|
|
1253
|
+
'timestamp': this.parse8601(datetime),
|
|
1254
|
+
'datetime': datetime,
|
|
1255
|
+
'symbol': this.safeSymbol(marketId, market),
|
|
1256
|
+
'type': undefined,
|
|
1257
|
+
'side': this.safeStringLower(trade, 'side'),
|
|
1258
|
+
'takerOrMaker': undefined,
|
|
1259
|
+
'price': this.safeNumber(trade, 'fill_price'),
|
|
1260
|
+
'amount': this.safeNumber(trade, 'fill_qty'),
|
|
1261
|
+
'cost': undefined,
|
|
1262
|
+
'fee': {
|
|
1263
|
+
'cost': this.safeNumber(trade, 'fee'),
|
|
1264
|
+
'currency': this.safeCurrencyCode(this.safeString(trade, 'fee_asset')),
|
|
1265
|
+
},
|
|
1266
|
+
});
|
|
1267
|
+
}
|
|
1268
|
+
/**
|
|
1269
|
+
* @method
|
|
1270
|
+
* @name coinbaseinternational#fetchMarkets
|
|
1271
|
+
* @see https://docs.cloud.coinbase.com/intx/reference/getinstruments
|
|
1272
|
+
* @description retrieves data on all markets for coinbaseinternational
|
|
1273
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1274
|
+
* @returns {object[]} an array of objects representing market data
|
|
1275
|
+
*/
|
|
1276
|
+
async fetchMarkets(params = {}) {
|
|
1277
|
+
const response = await this.v1PublicGetInstruments(params);
|
|
1278
|
+
//
|
|
1279
|
+
// [
|
|
1280
|
+
// {
|
|
1281
|
+
// "instrument_id":"149264164756389888",
|
|
1282
|
+
// "instrument_uuid":"e9360798-6a10-45d6-af05-67c30eb91e2d",
|
|
1283
|
+
// "symbol":"ETH-PERP",
|
|
1284
|
+
// "type":"PERP",
|
|
1285
|
+
// "base_asset_id":"118059611793145856",
|
|
1286
|
+
// "base_asset_uuid":"d85dce9b-5b73-5c3c-8978-522ce1d1c1b4",
|
|
1287
|
+
// "base_asset_name":"ETH",
|
|
1288
|
+
// "quote_asset_id":"1",
|
|
1289
|
+
// "quote_asset_uuid":"2b92315d-eab7-5bef-84fa-089a131333f5",
|
|
1290
|
+
// "quote_asset_name":"USDC",
|
|
1291
|
+
// "base_increment":"0.0001",
|
|
1292
|
+
// "quote_increment":"0.01",
|
|
1293
|
+
// "price_band_percent":"0.02",
|
|
1294
|
+
// "market_order_percent":"0.0075",
|
|
1295
|
+
// "qty_24hr":"44434.8131",
|
|
1296
|
+
// "notional_24hr":"110943454.279785",
|
|
1297
|
+
// "avg_daily_qty":"1099171.6025",
|
|
1298
|
+
// "avg_daily_notional":"2637240145.456987",
|
|
1299
|
+
// "previous_day_qty":"78909.3939",
|
|
1300
|
+
// "open_interest":"1270.749",
|
|
1301
|
+
// "position_limit_qty":"1831.9527",
|
|
1302
|
+
// "position_limit_adq_pct":"0.05",
|
|
1303
|
+
// "replacement_cost":"0.23",
|
|
1304
|
+
// "base_imf":"0.1",
|
|
1305
|
+
// "min_notional_value":"10",
|
|
1306
|
+
// "funding_interval":"3600000000000",
|
|
1307
|
+
// "trading_state":"TRADING",
|
|
1308
|
+
// "quote":{
|
|
1309
|
+
// "best_bid_price":"2490.8",
|
|
1310
|
+
// "best_bid_size":"9.0515",
|
|
1311
|
+
// "best_ask_price":"2490.81",
|
|
1312
|
+
// "best_ask_size":"4.8486",
|
|
1313
|
+
// "trade_price":"2490.39",
|
|
1314
|
+
// "trade_qty":"0.9508",
|
|
1315
|
+
// "index_price":"2490.5",
|
|
1316
|
+
// "mark_price":"2490.8",
|
|
1317
|
+
// "settlement_price":"2490.81",
|
|
1318
|
+
// "limit_up":"2615.42",
|
|
1319
|
+
// "limit_down":"2366.34",
|
|
1320
|
+
// "predicted_funding":"0.000009",
|
|
1321
|
+
// "timestamp":"2024-02-10T16:07:39.454Z"
|
|
1322
|
+
// }
|
|
1323
|
+
// },
|
|
1324
|
+
// ...
|
|
1325
|
+
// ]
|
|
1326
|
+
//
|
|
1327
|
+
return this.parseMarkets(response);
|
|
1328
|
+
}
|
|
1329
|
+
parseMarket(market) {
|
|
1330
|
+
//
|
|
1331
|
+
// {
|
|
1332
|
+
// "instrument_id":"149264164756389888",
|
|
1333
|
+
// "instrument_uuid":"e9360798-6a10-45d6-af05-67c30eb91e2d",
|
|
1334
|
+
// "symbol":"ETH-PERP",
|
|
1335
|
+
// "type":"PERP",
|
|
1336
|
+
// "base_asset_id":"118059611793145856",
|
|
1337
|
+
// "base_asset_uuid":"d85dce9b-5b73-5c3c-8978-522ce1d1c1b4",
|
|
1338
|
+
// "base_asset_name":"ETH",
|
|
1339
|
+
// "quote_asset_id":"1",
|
|
1340
|
+
// "quote_asset_uuid":"2b92315d-eab7-5bef-84fa-089a131333f5",
|
|
1341
|
+
// "quote_asset_name":"USDC",
|
|
1342
|
+
// "base_increment":"0.0001",
|
|
1343
|
+
// "quote_increment":"0.01",
|
|
1344
|
+
// "price_band_percent":"0.02",
|
|
1345
|
+
// "market_order_percent":"0.0075",
|
|
1346
|
+
// "qty_24hr":"44434.8131",
|
|
1347
|
+
// "notional_24hr":"110943454.279785",
|
|
1348
|
+
// "avg_daily_qty":"1099171.6025",
|
|
1349
|
+
// "avg_daily_notional":"2637240145.456987",
|
|
1350
|
+
// "previous_day_qty":"78909.3939",
|
|
1351
|
+
// "open_interest":"1270.749",
|
|
1352
|
+
// "position_limit_qty":"1831.9527",
|
|
1353
|
+
// "position_limit_adq_pct":"0.05",
|
|
1354
|
+
// "replacement_cost":"0.23",
|
|
1355
|
+
// "base_imf":"0.1",
|
|
1356
|
+
// "min_notional_value":"10",
|
|
1357
|
+
// "funding_interval":"3600000000000",
|
|
1358
|
+
// "trading_state":"TRADING",
|
|
1359
|
+
// "quote":{
|
|
1360
|
+
// "best_bid_price":"2490.8",
|
|
1361
|
+
// "best_bid_size":"9.0515",
|
|
1362
|
+
// "best_ask_price":"2490.81",
|
|
1363
|
+
// "best_ask_size":"4.8486",
|
|
1364
|
+
// "trade_price":"2490.39",
|
|
1365
|
+
// "trade_qty":"0.9508",
|
|
1366
|
+
// "index_price":"2490.5",
|
|
1367
|
+
// "mark_price":"2490.8",
|
|
1368
|
+
// "settlement_price":"2490.81",
|
|
1369
|
+
// "limit_up":"2615.42",
|
|
1370
|
+
// "limit_down":"2366.34",
|
|
1371
|
+
// "predicted_funding":"0.000009",
|
|
1372
|
+
// "timestamp":"2024-02-10T16:07:39.454Z"
|
|
1373
|
+
// }
|
|
1374
|
+
// }
|
|
1375
|
+
//
|
|
1376
|
+
const marketId = this.safeString(market, 'symbol');
|
|
1377
|
+
const baseId = this.safeString(market, 'base_asset_name');
|
|
1378
|
+
const quoteId = this.safeString(market, 'quote_asset_name');
|
|
1379
|
+
const typeId = this.safeString(market, 'type'); // 'SPOT', 'PERP'
|
|
1380
|
+
const isSpot = (typeId === 'SPOT');
|
|
1381
|
+
const fees = this.fees;
|
|
1382
|
+
let symbol = baseId + '/' + quoteId;
|
|
1383
|
+
let settleId = undefined;
|
|
1384
|
+
if (!isSpot) {
|
|
1385
|
+
settleId = quoteId;
|
|
1386
|
+
symbol += ':' + quoteId;
|
|
1387
|
+
}
|
|
1388
|
+
return {
|
|
1389
|
+
'id': marketId,
|
|
1390
|
+
'lowercaseId': marketId.toLowerCase(),
|
|
1391
|
+
'symbol': symbol,
|
|
1392
|
+
'base': baseId,
|
|
1393
|
+
'quote': quoteId,
|
|
1394
|
+
'settle': settleId ? settleId : undefined,
|
|
1395
|
+
'baseId': baseId,
|
|
1396
|
+
'quoteId': quoteId,
|
|
1397
|
+
'settleId': settleId ? settleId : undefined,
|
|
1398
|
+
'type': isSpot ? 'spot' : 'swap',
|
|
1399
|
+
'spot': isSpot,
|
|
1400
|
+
'margin': false,
|
|
1401
|
+
'swap': !isSpot,
|
|
1402
|
+
'future': false,
|
|
1403
|
+
'option': false,
|
|
1404
|
+
'active': this.safeString(market, 'trading_state') === 'TRADING',
|
|
1405
|
+
'contract': !isSpot,
|
|
1406
|
+
'linear': isSpot ? undefined : (settleId === quoteId),
|
|
1407
|
+
'inverse': isSpot ? undefined : (settleId !== quoteId),
|
|
1408
|
+
'taker': fees['trading']['taker'],
|
|
1409
|
+
'maker': fees['trading']['maker'],
|
|
1410
|
+
'contractSize': isSpot ? undefined : 1,
|
|
1411
|
+
'expiry': undefined,
|
|
1412
|
+
'expiryDatetime': undefined,
|
|
1413
|
+
'strike': undefined,
|
|
1414
|
+
'optionType': undefined,
|
|
1415
|
+
'precision': {
|
|
1416
|
+
'amount': this.safeNumber(market, 'base_increment'),
|
|
1417
|
+
'price': this.safeNumber(market, 'quote_increment'),
|
|
1418
|
+
'cost': this.safeNumber(market, 'quote_increment'),
|
|
1419
|
+
},
|
|
1420
|
+
'limits': {
|
|
1421
|
+
'leverage': {
|
|
1422
|
+
'min': undefined,
|
|
1423
|
+
'max': this.safeNumber(market, 'base_imf'),
|
|
1424
|
+
},
|
|
1425
|
+
'amount': {
|
|
1426
|
+
'min': undefined,
|
|
1427
|
+
'max': isSpot ? undefined : this.safeNumber(market, 'position_limit_qty'),
|
|
1428
|
+
},
|
|
1429
|
+
'price': {
|
|
1430
|
+
'min': undefined,
|
|
1431
|
+
'max': undefined,
|
|
1432
|
+
},
|
|
1433
|
+
'cost': {
|
|
1434
|
+
'min': this.safeNumber(market, 'min_notional_value'),
|
|
1435
|
+
'max': undefined,
|
|
1436
|
+
},
|
|
1437
|
+
},
|
|
1438
|
+
'info': market,
|
|
1439
|
+
'created': undefined,
|
|
1440
|
+
};
|
|
1441
|
+
}
|
|
1442
|
+
/**
|
|
1443
|
+
* @method
|
|
1444
|
+
* @name coinbaseinternational#fetchCurrencies
|
|
1445
|
+
* @description fetches all available currencies on an exchange
|
|
1446
|
+
* @see https://docs.cloud.coinbase.com/intx/reference/getassets
|
|
1447
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1448
|
+
* @returns {object} an associative dictionary of currencies
|
|
1449
|
+
*/
|
|
1450
|
+
async fetchCurrencies(params = {}) {
|
|
1451
|
+
const currencies = await this.v1PublicGetAssets(params);
|
|
1452
|
+
//
|
|
1453
|
+
// [
|
|
1454
|
+
// {
|
|
1455
|
+
// "asset_id":"1",
|
|
1456
|
+
// "asset_uuid":"2b92315d-eab7-5bef-84fa-089a131333f5",
|
|
1457
|
+
// "asset_name":"USDC",
|
|
1458
|
+
// "status":"ACTIVE",
|
|
1459
|
+
// "collateral_weight":1.0,
|
|
1460
|
+
// "supported_networks_enabled":true
|
|
1461
|
+
// },
|
|
1462
|
+
// ...
|
|
1463
|
+
// ]
|
|
1464
|
+
//
|
|
1465
|
+
return this.parseCurrencies(currencies);
|
|
1466
|
+
}
|
|
1467
|
+
parseCurrency(currency) {
|
|
1468
|
+
//
|
|
1469
|
+
// {
|
|
1470
|
+
// "asset_id":"1",
|
|
1471
|
+
// "asset_uuid":"2b92315d-eab7-5bef-84fa-089a131333f5",
|
|
1472
|
+
// "asset_name":"USDC",
|
|
1473
|
+
// "status":"ACTIVE",
|
|
1474
|
+
// "collateral_weight":1.0,
|
|
1475
|
+
// "supported_networks_enabled":true
|
|
1476
|
+
// }
|
|
1477
|
+
//
|
|
1478
|
+
const id = this.safeString(currency, 'asset_name');
|
|
1479
|
+
const code = this.safeCurrencyCode(id);
|
|
1480
|
+
const statusId = this.safeString(currency, 'status');
|
|
1481
|
+
return this.safeCurrencyStructure({
|
|
1482
|
+
'id': id,
|
|
1483
|
+
'name': code,
|
|
1484
|
+
'code': code,
|
|
1485
|
+
'precision': undefined,
|
|
1486
|
+
'info': currency,
|
|
1487
|
+
'active': (statusId === 'ACTIVE'),
|
|
1488
|
+
'deposit': undefined,
|
|
1489
|
+
'withdraw': undefined,
|
|
1490
|
+
'networks': undefined,
|
|
1491
|
+
'fee': undefined,
|
|
1492
|
+
'fees': undefined,
|
|
1493
|
+
'limits': this.limits,
|
|
1494
|
+
});
|
|
1495
|
+
}
|
|
1496
|
+
/**
|
|
1497
|
+
* @method
|
|
1498
|
+
* @name coinbaseinternational#fetchTickers
|
|
1499
|
+
* @description fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
|
|
1500
|
+
* @see https://docs.cloud.coinbase.com/intx/reference/getinstruments
|
|
1501
|
+
* @param {string[]|undefined} symbols unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
|
|
1502
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1503
|
+
* @returns {object} a dictionary of [ticker structures]{@link https://docs.ccxt.com/#/?id=ticker-structure}
|
|
1504
|
+
*/
|
|
1505
|
+
async fetchTickers(symbols = undefined, params = {}) {
|
|
1506
|
+
await this.loadMarkets();
|
|
1507
|
+
symbols = this.marketSymbols(symbols);
|
|
1508
|
+
const instruments = await this.v1PublicGetInstruments(params);
|
|
1509
|
+
const tickers = {};
|
|
1510
|
+
for (let i = 0; i < instruments.length; i++) {
|
|
1511
|
+
const instrument = instruments[i];
|
|
1512
|
+
const marketId = this.safeString(instrument, 'symbol');
|
|
1513
|
+
const symbol = this.safeSymbol(marketId);
|
|
1514
|
+
const quote = this.safeDict(instrument, 'quote', {});
|
|
1515
|
+
tickers[symbol] = this.parseTicker(quote, this.safeMarket(marketId));
|
|
1516
|
+
}
|
|
1517
|
+
return this.filterByArray(tickers, 'symbol', symbols, true);
|
|
1518
|
+
}
|
|
1519
|
+
/**
|
|
1520
|
+
* @method
|
|
1521
|
+
* @name coinbaseinternational#fetchTicker
|
|
1522
|
+
* @description fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
|
1523
|
+
* @see https://docs.cloud.coinbase.com/intx/reference/getinstrumentquote
|
|
1524
|
+
* @param {string} symbol unified symbol of the market to fetch the ticker for
|
|
1525
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1526
|
+
* @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
|
|
1527
|
+
*/
|
|
1528
|
+
async fetchTicker(symbol, params = {}) {
|
|
1529
|
+
await this.loadMarkets();
|
|
1530
|
+
const market = this.market(symbol);
|
|
1531
|
+
const request = {
|
|
1532
|
+
'instrument': this.marketId(symbol),
|
|
1533
|
+
};
|
|
1534
|
+
const ticker = await this.v1PublicGetInstrumentsInstrumentQuote(this.extend(request, params));
|
|
1535
|
+
return this.parseTicker(ticker, market);
|
|
1536
|
+
}
|
|
1537
|
+
parseTicker(ticker, market = undefined) {
|
|
1538
|
+
//
|
|
1539
|
+
// {
|
|
1540
|
+
// "best_bid_price":"2490.8",
|
|
1541
|
+
// "best_bid_size":"9.0515",
|
|
1542
|
+
// "best_ask_price":"2490.81",
|
|
1543
|
+
// "best_ask_size":"4.8486",
|
|
1544
|
+
// "trade_price":"2490.39",
|
|
1545
|
+
// "trade_qty":"0.9508",
|
|
1546
|
+
// "index_price":"2490.5",
|
|
1547
|
+
// "mark_price":"2490.8",
|
|
1548
|
+
// "settlement_price":"2490.81",
|
|
1549
|
+
// "limit_up":"2615.42",
|
|
1550
|
+
// "limit_down":"2366.34",
|
|
1551
|
+
// "predicted_funding":"0.000009",
|
|
1552
|
+
// "timestamp":"2024-02-10T16:07:39.454Z"
|
|
1553
|
+
// }
|
|
1554
|
+
//
|
|
1555
|
+
const datetime = this.safeString(ticker, 'timestamp');
|
|
1556
|
+
return this.safeTicker({
|
|
1557
|
+
'info': ticker,
|
|
1558
|
+
'symbol': this.safeSymbol(undefined, market),
|
|
1559
|
+
'timestamp': this.parse8601(datetime),
|
|
1560
|
+
'datetime': datetime,
|
|
1561
|
+
'bid': this.safeNumber(ticker, 'best_bid_price'),
|
|
1562
|
+
'bidVolume': this.safeNumber(ticker, 'best_bid_size'),
|
|
1563
|
+
'ask': this.safeNumber(ticker, 'best_ask_price'),
|
|
1564
|
+
'askVolume': this.safeNumber(ticker, 'best_ask_size'),
|
|
1565
|
+
'high': undefined,
|
|
1566
|
+
'low': undefined,
|
|
1567
|
+
'open': undefined,
|
|
1568
|
+
'close': undefined,
|
|
1569
|
+
'last': undefined,
|
|
1570
|
+
'change': undefined,
|
|
1571
|
+
'percentage': undefined,
|
|
1572
|
+
'average': undefined,
|
|
1573
|
+
'vwap': undefined,
|
|
1574
|
+
'baseVolume': undefined,
|
|
1575
|
+
'quoteVolume': undefined,
|
|
1576
|
+
'previousClose': undefined,
|
|
1577
|
+
'markPrice': this.safeNumber(ticker, 'mark_price'),
|
|
1578
|
+
'indexPrice': this.safeNumber(ticker, 'index_price'),
|
|
1579
|
+
});
|
|
1580
|
+
}
|
|
1581
|
+
/**
|
|
1582
|
+
* @method
|
|
1583
|
+
* @name coinbaseinternational#fetchBalance
|
|
1584
|
+
* @description query for balance and get the amount of funds available for trading or funds locked in orders
|
|
1585
|
+
* @see https://docs.cloud.coinbase.com/intx/reference/getportfoliobalances
|
|
1586
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1587
|
+
* @param {boolean} [params.v3] default false, set true to use v3 api endpoint
|
|
1588
|
+
* @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}
|
|
1589
|
+
*/
|
|
1590
|
+
async fetchBalance(params = {}) {
|
|
1591
|
+
await this.loadMarkets();
|
|
1592
|
+
let portfolio = undefined;
|
|
1593
|
+
[portfolio, params] = await this.handlePortfolioAndParams('fetchBalance', params);
|
|
1594
|
+
const request = {
|
|
1595
|
+
'portfolio': portfolio,
|
|
1596
|
+
};
|
|
1597
|
+
const balances = await this.v1PrivateGetPortfoliosPortfolioBalances(this.extend(request, params));
|
|
1598
|
+
//
|
|
1599
|
+
// [
|
|
1600
|
+
// {
|
|
1601
|
+
// "asset_id":"0-0-1",
|
|
1602
|
+
// "asset_name":"USDC",
|
|
1603
|
+
// "asset_uuid":"2b92315d-eab7-5bef-84fa-089a131333f5",
|
|
1604
|
+
// "quantity":"500000.0000000000",
|
|
1605
|
+
// "hold":"0",
|
|
1606
|
+
// "hold_available_for_collateral":"0",
|
|
1607
|
+
// "transfer_hold":"0",
|
|
1608
|
+
// "collateral_value":"500000.0",
|
|
1609
|
+
// "max_withdraw_amount":"500000.0000000000",
|
|
1610
|
+
// "loan":"0",
|
|
1611
|
+
// "loan_collateral_requirement":"0.0"
|
|
1612
|
+
// }
|
|
1613
|
+
// ]
|
|
1614
|
+
//
|
|
1615
|
+
return this.parseBalance(balances);
|
|
1616
|
+
}
|
|
1617
|
+
parseBalance(response) {
|
|
1618
|
+
//
|
|
1619
|
+
// {
|
|
1620
|
+
// "asset_id":"0-0-1",
|
|
1621
|
+
// "asset_name":"USDC",
|
|
1622
|
+
// "asset_uuid":"2b92315d-eab7-5bef-84fa-089a131333f5",
|
|
1623
|
+
// "quantity":"500000.0000000000",
|
|
1624
|
+
// "hold":"0",
|
|
1625
|
+
// "hold_available_for_collateral":"0",
|
|
1626
|
+
// "transfer_hold":"0",
|
|
1627
|
+
// "collateral_value":"500000.0",
|
|
1628
|
+
// "max_withdraw_amount":"500000.0000000000",
|
|
1629
|
+
// "loan":"0",
|
|
1630
|
+
// "loan_collateral_requirement":"0.0"
|
|
1631
|
+
// }
|
|
1632
|
+
//
|
|
1633
|
+
const result = {
|
|
1634
|
+
'info': response,
|
|
1635
|
+
};
|
|
1636
|
+
for (let i = 0; i < response.length; i++) {
|
|
1637
|
+
const rawBalance = response[i];
|
|
1638
|
+
const currencyId = this.safeString(rawBalance, 'asset_name');
|
|
1639
|
+
const code = this.safeCurrencyCode(currencyId);
|
|
1640
|
+
const account = this.account();
|
|
1641
|
+
account['total'] = this.safeString(rawBalance, 'quantity');
|
|
1642
|
+
account['used'] = this.safeString(rawBalance, 'hold');
|
|
1643
|
+
result[code] = account;
|
|
1644
|
+
}
|
|
1645
|
+
return this.safeBalance(result);
|
|
1646
|
+
}
|
|
1647
|
+
/**
|
|
1648
|
+
* @method
|
|
1649
|
+
* @name coinbaseinternational#transfer
|
|
1650
|
+
* @description Transfer an amount of asset from one portfolio to another.
|
|
1651
|
+
* @see https://docs.cloud.coinbase.com/intx/reference/createportfolioassettransfer
|
|
1652
|
+
* @param {string} code unified currency code
|
|
1653
|
+
* @param {float} amount amount to transfer
|
|
1654
|
+
* @param {string} fromAccount account to transfer from
|
|
1655
|
+
* @param {string} toAccount account to transfer to
|
|
1656
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1657
|
+
* @returns {object} a [transfer structure]{@link https://github.com/ccxt/ccxt/wiki/Manual#transfer-structure}
|
|
1658
|
+
*/
|
|
1659
|
+
async transfer(code, amount, fromAccount, toAccount, params = {}) {
|
|
1660
|
+
await this.loadMarkets();
|
|
1661
|
+
const currency = this.currency(code);
|
|
1662
|
+
const request = {
|
|
1663
|
+
'asset': currency['id'],
|
|
1664
|
+
'ammount': amount,
|
|
1665
|
+
'from': fromAccount,
|
|
1666
|
+
'to': toAccount,
|
|
1667
|
+
};
|
|
1668
|
+
const response = await this.v1PrivatePostPortfoliosTransfer(this.extend(request, params));
|
|
1669
|
+
const success = this.safeBool(response, 'success');
|
|
1670
|
+
return {
|
|
1671
|
+
'info': response,
|
|
1672
|
+
'id': undefined,
|
|
1673
|
+
'timestamp': undefined,
|
|
1674
|
+
'datetime': undefined,
|
|
1675
|
+
'currency': code,
|
|
1676
|
+
'amount': amount,
|
|
1677
|
+
'fromAccount': fromAccount,
|
|
1678
|
+
'toAccount': toAccount,
|
|
1679
|
+
'status': success ? 'ok' : 'failed',
|
|
1680
|
+
};
|
|
1681
|
+
}
|
|
1682
|
+
/**
|
|
1683
|
+
* @method
|
|
1684
|
+
* @name coinbaseinternational#createOrder
|
|
1685
|
+
* @description create a trade order
|
|
1686
|
+
* @see https://docs.cloud.coinbase.com/intx/reference/createorder
|
|
1687
|
+
* @param {string} symbol unified symbol of the market to create an order in
|
|
1688
|
+
* @param {string} type 'market' or 'limit'
|
|
1689
|
+
* @param {string} side 'buy' or 'sell'
|
|
1690
|
+
* @param {float} amount how much you want to trade in units of the base currency, quote currency for 'market' 'buy' orders
|
|
1691
|
+
* @param {float} [price] the price to fulfill the order, in units of the quote currency, ignored in market orders
|
|
1692
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1693
|
+
* @param {float} [params.stopPrice] alias for triggerPrice
|
|
1694
|
+
* @param {float} [params.triggerPrice] price to trigger stop orders
|
|
1695
|
+
* @param {float} [params.stopLossPrice] price to trigger stop-loss orders
|
|
1696
|
+
* @param {bool} [params.postOnly] true or false
|
|
1697
|
+
* @param {string} [params.tif] 'GTC', 'IOC', 'GTD' default is 'GTC' for limit orders and 'IOC' for market orders
|
|
1698
|
+
* @param {string} [params.expire_time] The expiration time required for orders with the time in force set to GTT. Must not go beyond 30 days of the current time. Uses ISO-8601 format (e.g., 2023-03-16T23:59:53Z)
|
|
1699
|
+
* @param {string} [params.stp_mode] Possible values: [NONE, AGGRESSING, BOTH] Specifies the behavior for self match handling. None disables the functionality, new cancels the newest order, and both cancels both orders.
|
|
1700
|
+
* @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
1701
|
+
*/
|
|
1702
|
+
async createOrder(symbol, type, side, amount, price = undefined, params = {}) {
|
|
1703
|
+
await this.loadMarkets();
|
|
1704
|
+
const market = this.market(symbol);
|
|
1705
|
+
let typeId = type.toUpperCase();
|
|
1706
|
+
const triggerPrice = this.safeNumberN(params, ['triggerPrice', 'stopPrice', 'stop_price']);
|
|
1707
|
+
const clientOrderIdprefix = this.safeString(this.options, 'brokerId', 'nfqkvdjp');
|
|
1708
|
+
let clientOrderId = clientOrderIdprefix + '-' + this.uuid();
|
|
1709
|
+
clientOrderId = clientOrderId.slice(0, 17);
|
|
1710
|
+
const request = {
|
|
1711
|
+
'client_order_id': clientOrderId,
|
|
1712
|
+
'side': side.toUpperCase(),
|
|
1713
|
+
'instrument': market['id'],
|
|
1714
|
+
'size': this.amountToPrecision(market['symbol'], amount),
|
|
1715
|
+
};
|
|
1716
|
+
if (triggerPrice !== undefined) {
|
|
1717
|
+
if (type === 'limit') {
|
|
1718
|
+
typeId = 'STOP_LIMIT';
|
|
1719
|
+
}
|
|
1720
|
+
else {
|
|
1721
|
+
typeId = 'STOP';
|
|
1722
|
+
}
|
|
1723
|
+
request['stop_price'] = triggerPrice;
|
|
1724
|
+
}
|
|
1725
|
+
request['type'] = typeId;
|
|
1726
|
+
if (type === 'limit') {
|
|
1727
|
+
if (price === undefined) {
|
|
1728
|
+
throw new InvalidOrder(this.id + ' createOrder() requires a price parameter for a limit order types');
|
|
1729
|
+
}
|
|
1730
|
+
request['price'] = price;
|
|
1731
|
+
}
|
|
1732
|
+
let portfolio = undefined;
|
|
1733
|
+
[portfolio, params] = await this.handlePortfolioAndParams('createOrder', params);
|
|
1734
|
+
if (portfolio !== undefined) {
|
|
1735
|
+
request['portfolio'] = portfolio;
|
|
1736
|
+
}
|
|
1737
|
+
const postOnly = this.safeBool2(params, 'postOnly', 'post_only');
|
|
1738
|
+
let tif = this.safeString2(params, 'tif', 'timeInForce');
|
|
1739
|
+
// market orders must be IOC
|
|
1740
|
+
if (typeId === 'MARKET') {
|
|
1741
|
+
if (tif !== undefined && tif !== 'IOC') {
|
|
1742
|
+
throw new InvalidOrder(this.id + ' createOrder() market orders must have tif set to "IOC"');
|
|
1743
|
+
}
|
|
1744
|
+
tif = 'IOC';
|
|
1745
|
+
}
|
|
1746
|
+
else {
|
|
1747
|
+
tif = (tif === undefined) ? 'GTC' : tif;
|
|
1748
|
+
}
|
|
1749
|
+
if (postOnly !== undefined) {
|
|
1750
|
+
request['post_only'] = postOnly;
|
|
1751
|
+
}
|
|
1752
|
+
request['tif'] = tif;
|
|
1753
|
+
params = this.omit(params, ['client_order_id', 'user', 'postOnly', 'timeInForce']);
|
|
1754
|
+
const response = await this.v1PrivatePostOrders(this.extend(request, params));
|
|
1755
|
+
//
|
|
1756
|
+
// {
|
|
1757
|
+
// "order_id":"1x96skvg-1-0",
|
|
1758
|
+
// "client_order_id":"ccxt",
|
|
1759
|
+
// "side":"BUY",
|
|
1760
|
+
// "instrument_id":"114jqr89-0-0",
|
|
1761
|
+
// "instrument_uuid":"b3469e0b-222c-4f8a-9f68-1f9e44d7e5e0",
|
|
1762
|
+
// "symbol":"BTC-PERP",
|
|
1763
|
+
// "portfolio_id":"1wp37qsc-1-0",
|
|
1764
|
+
// "portfolio_uuid":"018d7f6c-b92c-7361-8b7e-2932711e5a22",
|
|
1765
|
+
// "type":"LIMIT",
|
|
1766
|
+
// "price":"10000",
|
|
1767
|
+
// "size":"0.001",
|
|
1768
|
+
// "tif":"GTC",
|
|
1769
|
+
// "stp_mode":"BOTH",
|
|
1770
|
+
// "event_type":"NEW",
|
|
1771
|
+
// "order_status":"WORKING",
|
|
1772
|
+
// "leaves_qty":"0.001",
|
|
1773
|
+
// "exec_qty":"0",
|
|
1774
|
+
// "avg_price":"0",
|
|
1775
|
+
// "fee":"0"
|
|
1776
|
+
// }
|
|
1777
|
+
//
|
|
1778
|
+
return this.parseOrder(response, market);
|
|
1779
|
+
}
|
|
1780
|
+
parseOrder(order, market = undefined) {
|
|
1781
|
+
//
|
|
1782
|
+
// {
|
|
1783
|
+
// "order_id":"1x96skvg-1-0",
|
|
1784
|
+
// "client_order_id":"ccxt",
|
|
1785
|
+
// "side":"BUY",
|
|
1786
|
+
// "instrument_id":"114jqr89-0-0",
|
|
1787
|
+
// "instrument_uuid":"b3469e0b-222c-4f8a-9f68-1f9e44d7e5e0",
|
|
1788
|
+
// "symbol":"BTC-PERP",
|
|
1789
|
+
// "portfolio_id":"1wp37qsc-1-0",
|
|
1790
|
+
// "portfolio_uuid":"018d7f6c-b92c-7361-8b7e-2932711e5a22",
|
|
1791
|
+
// "type":"LIMIT",
|
|
1792
|
+
// "price":"10000",
|
|
1793
|
+
// "size":"0.001",
|
|
1794
|
+
// "tif":"GTC",
|
|
1795
|
+
// "stp_mode":"BOTH",
|
|
1796
|
+
// "event_type":"NEW",
|
|
1797
|
+
// "order_status":"WORKING",
|
|
1798
|
+
// "leaves_qty":"0.001",
|
|
1799
|
+
// "exec_qty":"0",
|
|
1800
|
+
// "avg_price":"0",
|
|
1801
|
+
// "fee":"0"
|
|
1802
|
+
// }
|
|
1803
|
+
//
|
|
1804
|
+
const marketId = this.safeString(order, 'symbol');
|
|
1805
|
+
const feeCost = this.safeNumber(order, 'fee');
|
|
1806
|
+
let fee = undefined;
|
|
1807
|
+
if (feeCost !== undefined) {
|
|
1808
|
+
fee = {
|
|
1809
|
+
'cost': feeCost,
|
|
1810
|
+
};
|
|
1811
|
+
}
|
|
1812
|
+
const datetime = this.safeString2(order, 'submit_time', 'event_time');
|
|
1813
|
+
return this.safeOrder({
|
|
1814
|
+
'info': order,
|
|
1815
|
+
'id': this.safeString(order, 'order_id'),
|
|
1816
|
+
'clientOrderId': this.safeString(order, 'client_order_id'),
|
|
1817
|
+
'timestamp': this.parse8601(datetime),
|
|
1818
|
+
'datetime': datetime,
|
|
1819
|
+
'lastTradeTimestamp': undefined,
|
|
1820
|
+
'symbol': this.safeSymbol(marketId, market),
|
|
1821
|
+
'type': this.parseOrderType(this.safeString(order, 'type')),
|
|
1822
|
+
'timeInForce': this.safeString(order, 'tif'),
|
|
1823
|
+
'postOnly': undefined,
|
|
1824
|
+
'side': this.safeStringLower(order, 'side'),
|
|
1825
|
+
'price': this.safeString(order, 'price'),
|
|
1826
|
+
'triggerPrice': this.safeString(order, 'stop_price'),
|
|
1827
|
+
'amount': this.safeString(order, 'size'),
|
|
1828
|
+
'filled': this.safeString(order, 'exec_qty'),
|
|
1829
|
+
'remaining': this.safeString(order, 'leaves_qty'),
|
|
1830
|
+
'cost': undefined,
|
|
1831
|
+
'average': this.safeString(order, 'avg_price'),
|
|
1832
|
+
'status': this.parseOrderStatus(this.safeString(order, 'order_status')),
|
|
1833
|
+
'fee': fee,
|
|
1834
|
+
'trades': undefined,
|
|
1835
|
+
}, market);
|
|
1836
|
+
}
|
|
1837
|
+
parseOrderStatus(status) {
|
|
1838
|
+
const statuses = {
|
|
1839
|
+
'NEW': 'open',
|
|
1840
|
+
'PARTIAL_FILLED': 'open',
|
|
1841
|
+
'FILLED': 'closed',
|
|
1842
|
+
'CANCELED': 'canceled',
|
|
1843
|
+
'REPLACED': 'canceled',
|
|
1844
|
+
'PENDING_CANCEL': 'open',
|
|
1845
|
+
'REJECTED': 'rejected',
|
|
1846
|
+
'PENDING_NEW': 'open',
|
|
1847
|
+
'EXPIRED': 'expired',
|
|
1848
|
+
'PENDING_REPLACE': 'open',
|
|
1849
|
+
};
|
|
1850
|
+
return this.safeString(statuses, status, status);
|
|
1851
|
+
}
|
|
1852
|
+
parseOrderType(type) {
|
|
1853
|
+
if (type === 'UNKNOWN_ORDER_TYPE') {
|
|
1854
|
+
return undefined;
|
|
1855
|
+
}
|
|
1856
|
+
const types = {
|
|
1857
|
+
'MARKET': 'market',
|
|
1858
|
+
'LIMIT': 'limit',
|
|
1859
|
+
'STOP': 'limit',
|
|
1860
|
+
'STOP_LIMIT': 'limit',
|
|
1861
|
+
};
|
|
1862
|
+
return this.safeString(types, type, type);
|
|
1863
|
+
}
|
|
1864
|
+
/**
|
|
1865
|
+
* @method
|
|
1866
|
+
* @name coinbaseinternational#cancelOrder
|
|
1867
|
+
* @description cancels an open order
|
|
1868
|
+
* @see https://docs.cloud.coinbase.com/intx/reference/cancelorder
|
|
1869
|
+
* @param {string} id order id
|
|
1870
|
+
* @param {string} symbol not used by coinbaseinternational cancelOrder()
|
|
1871
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1872
|
+
* @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
1873
|
+
*/
|
|
1874
|
+
async cancelOrder(id, symbol = undefined, params = {}) {
|
|
1875
|
+
await this.loadMarkets();
|
|
1876
|
+
let portfolio = undefined;
|
|
1877
|
+
[portfolio, params] = await this.handlePortfolioAndParams('cancelOrder', params);
|
|
1878
|
+
const request = {
|
|
1879
|
+
'portfolio': portfolio,
|
|
1880
|
+
'id': id,
|
|
1881
|
+
};
|
|
1882
|
+
let market = undefined;
|
|
1883
|
+
if (symbol !== undefined) {
|
|
1884
|
+
market = this.market(symbol);
|
|
1885
|
+
}
|
|
1886
|
+
const orders = await this.v1PrivateDeleteOrdersId(this.extend(request, params));
|
|
1887
|
+
//
|
|
1888
|
+
// {
|
|
1889
|
+
// "order_id":"1x96skvg-1-0",
|
|
1890
|
+
// "client_order_id":"ccxt",
|
|
1891
|
+
// "side":"BUY",
|
|
1892
|
+
// "instrument_id":"114jqr89-0-0",
|
|
1893
|
+
// "instrument_uuid":"b3469e0b-222c-4f8a-9f68-1f9e44d7e5e0",
|
|
1894
|
+
// "symbol":"BTC-PERP",
|
|
1895
|
+
// "portfolio_id":"1wp37qsc-1-0",
|
|
1896
|
+
// "portfolio_uuid":"018d7f6c-b92c-7361-8b7e-2932711e5a22",
|
|
1897
|
+
// "type":"LIMIT",
|
|
1898
|
+
// "price":"10000",
|
|
1899
|
+
// "size":"0.001",
|
|
1900
|
+
// "tif":"GTC",
|
|
1901
|
+
// "stp_mode":"BOTH",
|
|
1902
|
+
// "event_type":"CANCELED",
|
|
1903
|
+
// "order_status":"DONE",
|
|
1904
|
+
// "leaves_qty":"0.001",
|
|
1905
|
+
// "exec_qty":"0",
|
|
1906
|
+
// "avg_price":"0",
|
|
1907
|
+
// "fee":"0"
|
|
1908
|
+
// }
|
|
1909
|
+
//
|
|
1910
|
+
return this.parseOrder(orders, market);
|
|
1911
|
+
}
|
|
1912
|
+
/**
|
|
1913
|
+
* @method
|
|
1914
|
+
* @name coinbaseinternational#cancelAllOrders
|
|
1915
|
+
* @description cancel all open orders
|
|
1916
|
+
* @param {string} symbol unified market symbol, only orders in the market of this symbol are cancelled when symbol is not undefined
|
|
1917
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1918
|
+
* @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
1919
|
+
*/
|
|
1920
|
+
async cancelAllOrders(symbol = undefined, params = {}) {
|
|
1921
|
+
await this.loadMarkets();
|
|
1922
|
+
let portfolio = undefined;
|
|
1923
|
+
[portfolio, params] = await this.handlePortfolioAndParams('cancelAllOrders', params);
|
|
1924
|
+
const request = {
|
|
1925
|
+
'portfolio': portfolio,
|
|
1926
|
+
};
|
|
1927
|
+
let market = undefined;
|
|
1928
|
+
if (symbol) {
|
|
1929
|
+
market = this.market(symbol);
|
|
1930
|
+
request['instrument'] = market['id'];
|
|
1931
|
+
}
|
|
1932
|
+
const orders = await this.v1PrivateDeleteOrders(this.extend(request, params));
|
|
1933
|
+
return this.parseOrders(orders, market);
|
|
1934
|
+
}
|
|
1935
|
+
/**
|
|
1936
|
+
* @method
|
|
1937
|
+
* @name coinbaseinternational#editOrder
|
|
1938
|
+
* @description edit a trade order
|
|
1939
|
+
* @see https://docs.cloud.coinbase.com/intx/reference/modifyorder
|
|
1940
|
+
* @param {string} id cancel order id
|
|
1941
|
+
* @param {string} symbol unified symbol of the market to create an order in
|
|
1942
|
+
* @param {string} type 'market' or 'limit'
|
|
1943
|
+
* @param {string} side 'buy' or 'sell'
|
|
1944
|
+
* @param {float} amount how much of currency you want to trade in units of base currency
|
|
1945
|
+
* @param {float} [price] the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
|
|
1946
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1947
|
+
* @param {string} params.clientOrderId client order id
|
|
1948
|
+
* @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
1949
|
+
*/
|
|
1950
|
+
async editOrder(id, symbol, type, side, amount = undefined, price = undefined, params = {}) {
|
|
1951
|
+
await this.loadMarkets();
|
|
1952
|
+
const market = this.market(symbol);
|
|
1953
|
+
const request = {
|
|
1954
|
+
'id': id,
|
|
1955
|
+
};
|
|
1956
|
+
let portfolio = undefined;
|
|
1957
|
+
[portfolio, params] = await this.handlePortfolioAndParams('editOrder', params);
|
|
1958
|
+
if (portfolio !== undefined) {
|
|
1959
|
+
request['portfolio'] = portfolio;
|
|
1960
|
+
}
|
|
1961
|
+
if (amount !== undefined) {
|
|
1962
|
+
request['size'] = this.amountToPrecision(symbol, amount);
|
|
1963
|
+
}
|
|
1964
|
+
if (price !== undefined) {
|
|
1965
|
+
request['price'] = this.priceToPrecision(symbol, price);
|
|
1966
|
+
}
|
|
1967
|
+
const triggerPrice = this.safeNumberN(params, ['stopPrice', 'stop_price', 'triggerPrice']);
|
|
1968
|
+
if (triggerPrice !== undefined) {
|
|
1969
|
+
request['stop_price'] = triggerPrice;
|
|
1970
|
+
}
|
|
1971
|
+
const clientOrderId = this.safeString2(params, 'client_order_id', 'clientOrderId');
|
|
1972
|
+
if (clientOrderId === undefined) {
|
|
1973
|
+
throw new BadRequest(this.id + ' editOrder() requires a clientOrderId parameter');
|
|
1974
|
+
}
|
|
1975
|
+
request['client_order_id'] = clientOrderId;
|
|
1976
|
+
const order = await this.v1PrivatePutOrdersId(this.extend(request, params));
|
|
1977
|
+
return this.parseOrder(order, market);
|
|
1978
|
+
}
|
|
1979
|
+
/**
|
|
1980
|
+
* @method
|
|
1981
|
+
* @name coinbaseinternational#fetchOrder
|
|
1982
|
+
* @description fetches information on an order made by the user
|
|
1983
|
+
* @see https://docs.cloud.coinbase.com/intx/reference/modifyorder
|
|
1984
|
+
* @param {string} id the order id
|
|
1985
|
+
* @param {string} symbol unified market symbol that the order was made in
|
|
1986
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1987
|
+
* @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
1988
|
+
*/
|
|
1989
|
+
async fetchOrder(id, symbol = undefined, params = {}) {
|
|
1990
|
+
await this.loadMarkets();
|
|
1991
|
+
let market = undefined;
|
|
1992
|
+
if (symbol !== undefined) {
|
|
1993
|
+
market = this.market(symbol);
|
|
1994
|
+
}
|
|
1995
|
+
let portfolio = undefined;
|
|
1996
|
+
[portfolio, params] = await this.handlePortfolioAndParams('fetchOrder', params);
|
|
1997
|
+
const request = {
|
|
1998
|
+
'id': id,
|
|
1999
|
+
'portfolio': portfolio,
|
|
2000
|
+
};
|
|
2001
|
+
const order = await this.v1PrivateGetOrdersId(this.extend(request, params));
|
|
2002
|
+
//
|
|
2003
|
+
// {
|
|
2004
|
+
// "order_id":"1x96skvg-1-0",
|
|
2005
|
+
// "client_order_id":"ccxt",
|
|
2006
|
+
// "side":"BUY",
|
|
2007
|
+
// "instrument_id":"114jqr89-0-0",
|
|
2008
|
+
// "instrument_uuid":"b3469e0b-222c-4f8a-9f68-1f9e44d7e5e0",
|
|
2009
|
+
// "symbol":"BTC-PERP",
|
|
2010
|
+
// "portfolio_id":"1wp37qsc-1-0",
|
|
2011
|
+
// "portfolio_uuid":"018d7f6c-b92c-7361-8b7e-2932711e5a22",
|
|
2012
|
+
// "type":"LIMIT",
|
|
2013
|
+
// "price":"10000",
|
|
2014
|
+
// "size":"0.001",
|
|
2015
|
+
// "tif":"GTC",
|
|
2016
|
+
// "stp_mode":"BOTH",
|
|
2017
|
+
// "event_type":"NEW",
|
|
2018
|
+
// "event_time":"2024-02-14T03:25:14Z",
|
|
2019
|
+
// "submit_time":"2024-02-14T03:25:13.999Z",
|
|
2020
|
+
// "order_status":"WORKING",
|
|
2021
|
+
// "leaves_qty":"0.001",
|
|
2022
|
+
// "exec_qty":"0",
|
|
2023
|
+
// "avg_price":"0",
|
|
2024
|
+
// "fee":"0"
|
|
2025
|
+
// }
|
|
2026
|
+
//
|
|
2027
|
+
return this.parseOrder(order, market);
|
|
2028
|
+
}
|
|
2029
|
+
/**
|
|
2030
|
+
* @method
|
|
2031
|
+
* @name coinbaseinternational#fetchOpenOrders
|
|
2032
|
+
* @description fetches information on all currently open orders
|
|
2033
|
+
* @see https://docs.cloud.coinbase.com/intx/reference/getorders
|
|
2034
|
+
* @param {string} symbol unified market symbol of the orders
|
|
2035
|
+
* @param {int} [since] timestamp in ms of the earliest order, default is undefined
|
|
2036
|
+
* @param {int} [limit] the maximum number of open order structures to retrieve
|
|
2037
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
2038
|
+
* @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
|
|
2039
|
+
* @param {int} [params.offset] offset
|
|
2040
|
+
* @param {string} [params.event_type] The most recent type of event that happened to the order. Allowed values: NEW, TRADE, REPLACED
|
|
2041
|
+
* @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
2042
|
+
*/
|
|
2043
|
+
async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
2044
|
+
await this.loadMarkets();
|
|
2045
|
+
let portfolio = undefined;
|
|
2046
|
+
[portfolio, params] = await this.handlePortfolioAndParams('fetchOpenOrders', params);
|
|
2047
|
+
let paginate = false;
|
|
2048
|
+
[paginate, params] = this.handleOptionAndParams(params, 'fetchOpenOrders', 'paginate');
|
|
2049
|
+
let maxEntriesPerRequest = undefined;
|
|
2050
|
+
[maxEntriesPerRequest, params] = this.handleOptionAndParams(params, 'fetchOpenOrders', 'maxEntriesPerRequest', 100);
|
|
2051
|
+
const pageKey = 'ccxtPageKey';
|
|
2052
|
+
if (paginate) {
|
|
2053
|
+
return await this.fetchPaginatedCallIncremental('fetchOpenOrders', symbol, since, limit, params, pageKey, maxEntriesPerRequest);
|
|
2054
|
+
}
|
|
2055
|
+
const page = this.safeInteger(params, pageKey, 1) - 1;
|
|
2056
|
+
const request = {
|
|
2057
|
+
'portfolio': portfolio,
|
|
2058
|
+
'result_offset': this.safeInteger2(params, 'offset', 'result_offset', page * maxEntriesPerRequest),
|
|
2059
|
+
};
|
|
2060
|
+
let market = undefined;
|
|
2061
|
+
if (symbol) {
|
|
2062
|
+
market = this.market(symbol);
|
|
2063
|
+
request['instrument'] = symbol;
|
|
2064
|
+
}
|
|
2065
|
+
if (limit !== undefined) {
|
|
2066
|
+
if (limit > 100) {
|
|
2067
|
+
throw new BadRequest(this.id + ' fetchOpenOrders() maximum limit is 100');
|
|
2068
|
+
}
|
|
2069
|
+
request['result_limit'] = limit;
|
|
2070
|
+
}
|
|
2071
|
+
if (since !== undefined) {
|
|
2072
|
+
request['ref_datetime'] = this.iso8601(since);
|
|
2073
|
+
}
|
|
2074
|
+
const response = await this.v1PrivateGetOrders(this.extend(request, params));
|
|
2075
|
+
//
|
|
2076
|
+
// {
|
|
2077
|
+
// "pagination":{
|
|
2078
|
+
// "result_limit":25,
|
|
2079
|
+
// "result_offset":0
|
|
2080
|
+
// },
|
|
2081
|
+
// "results":[
|
|
2082
|
+
// {
|
|
2083
|
+
// "order_id":"1y4cm6b4-1-0",
|
|
2084
|
+
// "client_order_id":"ccxtd0dd4b5d-8e5f-",
|
|
2085
|
+
// "side":"SELL",
|
|
2086
|
+
// "instrument_id":"114jqr89-0-0",
|
|
2087
|
+
// "instrument_uuid":"b3469e0b-222c-4f8a-9f68-1f9e44d7e5e0",
|
|
2088
|
+
// "symbol":"BTC-PERP",
|
|
2089
|
+
// "portfolio_id":"1wp37qsc-1-0",
|
|
2090
|
+
// "portfolio_uuid":"018d7f6c-b92c-7361-8b7e-2932711e5a22",
|
|
2091
|
+
// "type":"LIMIT",
|
|
2092
|
+
// "price":"54000",
|
|
2093
|
+
// "size":"0.01",
|
|
2094
|
+
// "tif":"GTC",
|
|
2095
|
+
// "stp_mode":"BOTH",
|
|
2096
|
+
// "event_type":"NEW",
|
|
2097
|
+
// "event_time":"2024-02-24T16:46:37.413Z",
|
|
2098
|
+
// "submit_time":"2024-02-24T16:46:37.412Z",
|
|
2099
|
+
// "order_status":"WORKING",
|
|
2100
|
+
// "leaves_qty":"0.01",
|
|
2101
|
+
// "exec_qty":"0",
|
|
2102
|
+
// "avg_price":"0",
|
|
2103
|
+
// "fee":"0"
|
|
2104
|
+
// },
|
|
2105
|
+
// ...
|
|
2106
|
+
// ]
|
|
2107
|
+
// }
|
|
2108
|
+
//
|
|
2109
|
+
const rawOrders = this.safeList(response, 'results', []);
|
|
2110
|
+
return this.parseOrders(rawOrders, market, since, limit);
|
|
2111
|
+
}
|
|
2112
|
+
/**
|
|
2113
|
+
* @method
|
|
2114
|
+
* @name coinbaseinternational#fetchMyTrades
|
|
2115
|
+
* @description fetch all trades made by the user
|
|
2116
|
+
* @see https://docs.cloud.coinbase.com/intx/reference/getmultiportfoliofills
|
|
2117
|
+
* @param {string} symbol unified market symbol of the trades
|
|
2118
|
+
* @param {int} [since] timestamp in ms of the earliest order, default is undefined
|
|
2119
|
+
* @param {int} [limit] the maximum number of trade structures to fetch
|
|
2120
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
2121
|
+
* @param {int} [params.until] the latest time in ms to fetch trades for
|
|
2122
|
+
* @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
|
|
2123
|
+
* @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}
|
|
2124
|
+
*/
|
|
2125
|
+
async fetchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
2126
|
+
await this.loadMarkets();
|
|
2127
|
+
let paginate = false;
|
|
2128
|
+
[paginate, params] = this.handleOptionAndParams(params, 'fetchMyTrades', 'paginate');
|
|
2129
|
+
const pageKey = 'ccxtPageKey';
|
|
2130
|
+
let maxEntriesPerRequest = undefined;
|
|
2131
|
+
[maxEntriesPerRequest, params] = this.handleOptionAndParams(params, 'fetchMyTrades', 'maxEntriesPerRequest', 100);
|
|
2132
|
+
if (paginate) {
|
|
2133
|
+
return await this.fetchPaginatedCallIncremental('fetchMyTrades', symbol, since, limit, params, pageKey, maxEntriesPerRequest);
|
|
2134
|
+
}
|
|
2135
|
+
let market = undefined;
|
|
2136
|
+
if (symbol !== undefined) {
|
|
2137
|
+
market = this.market(symbol);
|
|
2138
|
+
}
|
|
2139
|
+
const page = this.safeInteger(params, pageKey, 1) - 1;
|
|
2140
|
+
const request = {
|
|
2141
|
+
'result_offset': this.safeInteger2(params, 'offset', 'result_offset', page * maxEntriesPerRequest),
|
|
2142
|
+
};
|
|
2143
|
+
if (limit !== undefined) {
|
|
2144
|
+
if (limit > 100) {
|
|
2145
|
+
throw new BadRequest(this.id + ' fetchMyTrades() maximum limit is 100. Consider setting paginate to true to fetch more trades.');
|
|
2146
|
+
}
|
|
2147
|
+
request['result_limit'] = limit;
|
|
2148
|
+
}
|
|
2149
|
+
if (since !== undefined) {
|
|
2150
|
+
request['time_from'] = this.iso8601(since);
|
|
2151
|
+
}
|
|
2152
|
+
const until = this.safeStringN(params, ['until']);
|
|
2153
|
+
if (until !== undefined) {
|
|
2154
|
+
params = this.omit(params, ['until']);
|
|
2155
|
+
request['ref_datetime'] = this.iso8601(until);
|
|
2156
|
+
}
|
|
2157
|
+
const response = await this.v1PrivateGetPortfoliosFills(this.extend(request, params));
|
|
2158
|
+
//
|
|
2159
|
+
// {
|
|
2160
|
+
// "pagination":{
|
|
2161
|
+
// "result_limit":25,
|
|
2162
|
+
// "result_offset":0
|
|
2163
|
+
// },
|
|
2164
|
+
// "results":[
|
|
2165
|
+
// {
|
|
2166
|
+
// "portfolio_id":"1wp37qsc-1-0",
|
|
2167
|
+
// "portfolio_uuid":"018d7f6c-b92c-7361-8b7e-2932711e5a22",
|
|
2168
|
+
// "portfolio_name":"CCXT Portfolio 020624-17:16",
|
|
2169
|
+
// "fill_id":"1xbfy19y-1-184",
|
|
2170
|
+
// "exec_id":"280841526207070392",
|
|
2171
|
+
// "order_id":"1xbfv8yw-1-0",
|
|
2172
|
+
// "instrument_id":"114jqr89-0-0",
|
|
2173
|
+
// "instrument_uuid":"b3469e0b-222c-4f8a-9f68-1f9e44d7e5e0",
|
|
2174
|
+
// "symbol":"BTC-PERP",
|
|
2175
|
+
// "match_id":"280841526207053840",
|
|
2176
|
+
// "fill_price":"52500",
|
|
2177
|
+
// "fill_qty":"0.01",
|
|
2178
|
+
// "client_id":"1x59ctku-1-1",
|
|
2179
|
+
// "client_order_id":"ccxt3e4e2a5f-4a89-",
|
|
2180
|
+
// "order_qty":"0.01",
|
|
2181
|
+
// "limit_price":"52500",
|
|
2182
|
+
// "total_filled":"0.01",
|
|
2183
|
+
// "filled_vwap":"52500",
|
|
2184
|
+
// "expire_time":"",
|
|
2185
|
+
// "stop_price":"",
|
|
2186
|
+
// "side":"BUY",
|
|
2187
|
+
// "tif":"GTC",
|
|
2188
|
+
// "stp_mode":"BOTH",
|
|
2189
|
+
// "flags":"",
|
|
2190
|
+
// "fee":"0.105",
|
|
2191
|
+
// "fee_asset":"USDC",
|
|
2192
|
+
// "order_status":"DONE",
|
|
2193
|
+
// "event_time":"2024-02-15T00:43:57.631Z"
|
|
2194
|
+
// },
|
|
2195
|
+
// ]
|
|
2196
|
+
// }
|
|
2197
|
+
//
|
|
2198
|
+
const trades = this.safeList(response, 'results', []);
|
|
2199
|
+
return this.parseTrades(trades, market, since, limit);
|
|
2200
|
+
}
|
|
2201
|
+
/**
|
|
2202
|
+
* @method
|
|
2203
|
+
* @name coinbaseinternational#withdraw
|
|
2204
|
+
* @description make a withdrawal
|
|
2205
|
+
* @see https://docs.cloud.coinbase.com/intx/reference/withdraw
|
|
2206
|
+
* @see https://docs.cloud.coinbase.com/intx/reference/counterpartywithdraw
|
|
2207
|
+
* @param {string} code unified currency code
|
|
2208
|
+
* @param {float} amount the amount to withdraw
|
|
2209
|
+
* @param {string} address the address to withdraw to
|
|
2210
|
+
* @param {string} [tag] an optional tag for the withdrawal
|
|
2211
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
2212
|
+
* @param {boolean} [params.add_network_fee_to_total] if true, deducts network fee from the portfolio, otherwise deduct fee from the withdrawal
|
|
2213
|
+
* @param {string} [params.network_arn_id] Identifies the blockchain network (e.g., networks/ethereum-mainnet/assets/313ef8a9-ae5a-5f2f-8a56-572c0e2a4d5a)
|
|
2214
|
+
* @param {string} [params.nonce] a unique integer representing the withdrawal request
|
|
2215
|
+
* @returns {object} a [transaction structure]{@link https://docs.ccxt.com/#/?id=transaction-structure}
|
|
2216
|
+
*/
|
|
2217
|
+
async withdraw(code, amount, address, tag = undefined, params = {}) {
|
|
2218
|
+
[tag, params] = this.handleWithdrawTagAndParams(tag, params);
|
|
2219
|
+
this.checkAddress(address);
|
|
2220
|
+
await this.loadMarkets();
|
|
2221
|
+
const currency = this.currency(code);
|
|
2222
|
+
let portfolio = undefined;
|
|
2223
|
+
[portfolio, params] = await this.handlePortfolioAndParams('withdraw', params);
|
|
2224
|
+
let method = undefined;
|
|
2225
|
+
[method, params] = this.handleOptionAndParams(params, 'withdraw', 'method', 'v1PrivatePostTransfersWithdraw');
|
|
2226
|
+
let networkId = undefined;
|
|
2227
|
+
[networkId, params] = await this.handleNetworkIdAndParams(code, 'withdraw', params);
|
|
2228
|
+
const request = {
|
|
2229
|
+
'portfolio': portfolio,
|
|
2230
|
+
'type': 'send',
|
|
2231
|
+
'asset': currency['id'],
|
|
2232
|
+
'address': address,
|
|
2233
|
+
'amount': amount,
|
|
2234
|
+
'currency': currency['id'],
|
|
2235
|
+
'network_arn_id': networkId,
|
|
2236
|
+
'nonce': this.nonce(),
|
|
2237
|
+
};
|
|
2238
|
+
const response = await this[method](this.extend(request, params));
|
|
2239
|
+
//
|
|
2240
|
+
// {
|
|
2241
|
+
// "idem":"8e471d77-4208-45a8-9e5b-f3bd8a2c1fc3"
|
|
2242
|
+
// }
|
|
2243
|
+
//
|
|
2244
|
+
return this.parseTransaction(response, currency);
|
|
2245
|
+
}
|
|
2246
|
+
safeNetwork(network) {
|
|
2247
|
+
let withdrawEnabled = this.safeBool(network, 'withdraw');
|
|
2248
|
+
let depositEnabled = this.safeBool(network, 'deposit');
|
|
2249
|
+
const limits = this.safeDict(network, 'limits');
|
|
2250
|
+
const withdraw = this.safeDict(limits, 'withdraw');
|
|
2251
|
+
const withdrawMax = this.safeNumber(withdraw, 'max');
|
|
2252
|
+
const deposit = this.safeDict(limits, 'deposit');
|
|
2253
|
+
const depositMax = this.safeNumber(deposit, 'max');
|
|
2254
|
+
if (withdrawEnabled === undefined && withdrawMax !== undefined) {
|
|
2255
|
+
withdrawEnabled = (withdrawMax > 0);
|
|
2256
|
+
}
|
|
2257
|
+
if (depositEnabled === undefined && depositMax !== undefined) {
|
|
2258
|
+
depositEnabled = (depositMax > 0);
|
|
2259
|
+
}
|
|
2260
|
+
const networkId = this.safeString(network, 'id');
|
|
2261
|
+
const isEnabled = (withdrawEnabled && depositEnabled);
|
|
2262
|
+
return {
|
|
2263
|
+
'info': network['info'],
|
|
2264
|
+
'id': networkId,
|
|
2265
|
+
'name': this.safeString(network, 'name'),
|
|
2266
|
+
'network': this.safeString(network, 'network'),
|
|
2267
|
+
'active': this.safeBool(network, 'active', isEnabled),
|
|
2268
|
+
'deposit': depositEnabled,
|
|
2269
|
+
'withdraw': withdrawEnabled,
|
|
2270
|
+
'fee': this.safeNumber(network, 'fee'),
|
|
2271
|
+
'precision': this.safeNumber(network, 'precision'),
|
|
2272
|
+
'limits': {
|
|
2273
|
+
'withdraw': {
|
|
2274
|
+
'min': this.safeNumber(withdraw, 'min'),
|
|
2275
|
+
'max': withdrawMax,
|
|
2276
|
+
},
|
|
2277
|
+
'deposit': {
|
|
2278
|
+
'min': this.safeNumber(deposit, 'min'),
|
|
2279
|
+
'max': depositMax,
|
|
2280
|
+
},
|
|
2281
|
+
},
|
|
2282
|
+
};
|
|
2283
|
+
}
|
|
2284
|
+
sign(path, api = [], method = 'GET', params = {}, headers = undefined, body = undefined) {
|
|
2285
|
+
const version = api[0];
|
|
2286
|
+
const signed = api[1] === 'private';
|
|
2287
|
+
let fullPath = '/' + version + '/' + this.implodeParams(path, params);
|
|
2288
|
+
const query = this.omit(params, this.extractParams(path));
|
|
2289
|
+
const savedPath = '/api' + fullPath;
|
|
2290
|
+
if (method === 'GET' || method === 'DELETE') {
|
|
2291
|
+
if (Object.keys(query).length) {
|
|
2292
|
+
fullPath += '?' + this.urlencodeWithArrayRepeat(query);
|
|
2293
|
+
}
|
|
2294
|
+
}
|
|
2295
|
+
const url = this.urls['api']['rest'] + fullPath;
|
|
2296
|
+
if (signed) {
|
|
2297
|
+
this.checkRequiredCredentials();
|
|
2298
|
+
const nonce = this.nonce().toString();
|
|
2299
|
+
let payload = '';
|
|
2300
|
+
if (method !== 'GET') {
|
|
2301
|
+
if (Object.keys(query).length) {
|
|
2302
|
+
body = this.json(query);
|
|
2303
|
+
payload = body;
|
|
2304
|
+
}
|
|
2305
|
+
}
|
|
2306
|
+
const auth = nonce + method + savedPath + payload;
|
|
2307
|
+
const signature = this.hmac(this.encode(auth), this.base64ToBinary(this.secret), sha256, 'base64');
|
|
2308
|
+
headers = {
|
|
2309
|
+
'CB-ACCESS-TIMESTAMP': nonce,
|
|
2310
|
+
'CB-ACCESS-SIGN': signature,
|
|
2311
|
+
'CB-ACCESS-PASSPHRASE': this.password,
|
|
2312
|
+
'CB-ACCESS-KEY': this.apiKey,
|
|
2313
|
+
};
|
|
2314
|
+
}
|
|
2315
|
+
return { 'url': url, 'method': method, 'body': body, 'headers': headers };
|
|
2316
|
+
}
|
|
2317
|
+
handleErrors(code, reason, url, method, headers, body, response, requestHeaders, requestBody) {
|
|
2318
|
+
//
|
|
2319
|
+
// {
|
|
2320
|
+
// "title":"io.javalin.http.BadRequestResponse: Order rejected (DUPLICATE_CLIENT_ORDER_ID - duplicate client order id detected)",
|
|
2321
|
+
// "status":400
|
|
2322
|
+
// }
|
|
2323
|
+
//
|
|
2324
|
+
if (response === undefined) {
|
|
2325
|
+
return undefined; // fallback to default error handler
|
|
2326
|
+
}
|
|
2327
|
+
const feedback = this.id + ' ' + body;
|
|
2328
|
+
const errMsg = this.safeString(response, 'title');
|
|
2329
|
+
if (errMsg !== undefined) {
|
|
2330
|
+
this.throwExactlyMatchedException(this.exceptions['exact'], errMsg, feedback);
|
|
2331
|
+
this.throwBroadlyMatchedException(this.exceptions['broad'], errMsg, feedback);
|
|
2332
|
+
throw new ExchangeError(feedback);
|
|
2333
|
+
}
|
|
2334
|
+
return undefined;
|
|
2335
|
+
}
|
|
2336
|
+
}
|