ccxt 4.3.16__tar.gz → 4.3.17__tar.gz
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.
Potentially problematic release.
This version of ccxt might be problematic. Click here for more details.
- {ccxt-4.3.16/ccxt.egg-info → ccxt-4.3.17}/PKG-INFO +4 -4
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/__init__.py +1 -1
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/__init__.py +1 -1
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/base/exchange.py +1 -1
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/binance.py +9 -9
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/bybit.py +10 -7
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/okx.py +18 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/base/exchange.py +1 -1
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/binance.py +9 -9
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/bybit.py +10 -7
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/okx.py +18 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/pro/__init__.py +1 -1
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/pro/bitfinex2.py +2 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/pro/bitget.py +3 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/pro/bybit.py +3 -3
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/pro/htx.py +2 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/pro/independentreserve.py +2 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/pro/kraken.py +2 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/pro/okx.py +22 -18
- {ccxt-4.3.16 → ccxt-4.3.17/ccxt.egg-info}/PKG-INFO +4 -4
- {ccxt-4.3.16 → ccxt-4.3.17}/package.json +1 -1
- {ccxt-4.3.16 → ccxt-4.3.17}/LICENSE.txt +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/MANIFEST.in +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/README.rst +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/__init__.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/ace.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/alpaca.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/ascendex.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/bequant.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/bigone.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/binance.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/binancecoinm.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/binanceus.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/binanceusdm.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/bingx.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/bit2c.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/bitbank.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/bitbay.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/bitbns.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/bitcoincom.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/bitfinex.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/bitfinex2.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/bitflyer.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/bitget.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/bithumb.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/bitmart.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/bitmex.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/bitopro.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/bitpanda.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/bitrue.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/bitso.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/bitstamp.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/bitteam.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/bitvavo.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/bl3p.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/blockchaincom.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/blofin.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/btcalpha.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/btcbox.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/btcmarkets.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/btcturk.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/bybit.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/cex.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/coinbase.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/coinbaseinternational.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/coinbasepro.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/coincheck.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/coinex.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/coinlist.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/coinmate.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/coinmetro.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/coinone.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/coinsph.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/coinspot.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/cryptocom.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/currencycom.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/delta.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/deribit.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/digifinex.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/exmo.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/fmfwio.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/gate.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/gateio.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/gemini.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/hitbtc.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/hitbtc3.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/hollaex.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/htx.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/huobi.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/huobijp.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/hyperliquid.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/idex.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/independentreserve.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/indodax.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/kraken.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/krakenfutures.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/kucoin.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/kucoinfutures.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/kuna.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/latoken.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/lbank.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/luno.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/lykke.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/mercado.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/mexc.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/ndax.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/novadax.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/oceanex.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/okcoin.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/okx.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/onetrading.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/p2b.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/paymium.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/phemex.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/poloniex.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/poloniexfutures.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/probit.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/timex.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/tokocrypto.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/tradeogre.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/upbit.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/wavesexchange.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/wazirx.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/whitebit.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/woo.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/yobit.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/zaif.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/abstract/zonda.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/ace.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/alpaca.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/ascendex.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/ace.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/alpaca.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/ascendex.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/base/__init__.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/base/throttler.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/base/ws/__init__.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/base/ws/aiohttp_client.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/base/ws/cache.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/base/ws/client.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/base/ws/fast_client.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/base/ws/functions.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/base/ws/future.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/base/ws/order_book.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/base/ws/order_book_side.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/bequant.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/bigone.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/binancecoinm.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/binanceus.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/binanceusdm.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/bingx.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/bit2c.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/bitbank.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/bitbay.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/bitbns.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/bitcoincom.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/bitfinex.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/bitfinex2.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/bitflyer.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/bitget.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/bithumb.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/bitmart.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/bitmex.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/bitopro.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/bitpanda.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/bitrue.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/bitso.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/bitstamp.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/bitteam.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/bitvavo.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/bl3p.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/blockchaincom.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/blofin.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/btcalpha.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/btcbox.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/btcmarkets.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/btcturk.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/cex.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/coinbase.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/coinbaseinternational.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/coinbasepro.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/coincheck.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/coinex.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/coinlist.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/coinmate.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/coinmetro.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/coinone.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/coinsph.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/coinspot.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/cryptocom.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/currencycom.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/delta.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/deribit.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/digifinex.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/exmo.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/fmfwio.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/gate.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/gateio.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/gemini.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/hitbtc.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/hitbtc3.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/hollaex.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/htx.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/huobi.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/huobijp.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/hyperliquid.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/idex.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/independentreserve.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/indodax.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/kraken.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/krakenfutures.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/kucoin.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/kucoinfutures.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/kuna.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/latoken.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/lbank.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/luno.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/lykke.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/mercado.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/mexc.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/ndax.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/novadax.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/oceanex.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/okcoin.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/onetrading.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/p2b.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/paymium.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/phemex.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/poloniex.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/poloniexfutures.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/probit.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/timex.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/tokocrypto.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/tradeogre.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/upbit.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/wavesexchange.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/wazirx.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/whitebit.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/woo.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/yobit.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/zaif.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/async_support/zonda.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/base/__init__.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/base/decimal_to_precision.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/base/errors.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/base/precise.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/base/types.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/bequant.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/bigone.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/binancecoinm.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/binanceus.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/binanceusdm.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/bingx.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/bit2c.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/bitbank.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/bitbay.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/bitbns.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/bitcoincom.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/bitfinex.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/bitfinex2.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/bitflyer.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/bitget.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/bithumb.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/bitmart.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/bitmex.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/bitopro.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/bitpanda.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/bitrue.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/bitso.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/bitstamp.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/bitteam.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/bitvavo.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/bl3p.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/blockchaincom.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/blofin.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/btcalpha.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/btcbox.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/btcmarkets.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/btcturk.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/cex.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/coinbase.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/coinbaseinternational.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/coinbasepro.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/coincheck.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/coinex.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/coinlist.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/coinmate.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/coinmetro.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/coinone.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/coinsph.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/coinspot.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/cryptocom.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/currencycom.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/delta.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/deribit.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/digifinex.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/exmo.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/fmfwio.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/gate.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/gateio.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/gemini.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/hitbtc.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/hitbtc3.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/hollaex.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/htx.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/huobi.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/huobijp.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/hyperliquid.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/idex.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/independentreserve.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/indodax.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/kraken.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/krakenfutures.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/kucoin.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/kucoinfutures.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/kuna.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/latoken.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/lbank.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/luno.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/lykke.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/mercado.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/mexc.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/ndax.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/novadax.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/oceanex.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/okcoin.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/onetrading.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/p2b.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/paymium.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/phemex.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/poloniex.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/poloniexfutures.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/pro/alpaca.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/pro/ascendex.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/pro/bequant.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/pro/binance.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/pro/binancecoinm.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/pro/binanceus.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/pro/binanceusdm.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/pro/bingx.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/pro/bitcoincom.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/pro/bitfinex.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/pro/bithumb.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/pro/bitmart.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/pro/bitmex.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/pro/bitopro.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/pro/bitpanda.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/pro/bitrue.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/pro/bitstamp.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/pro/bitvavo.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/pro/blockchaincom.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/pro/cex.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/pro/coinbase.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/pro/coinbaseinternational.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/pro/coinbasepro.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/pro/coincheck.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/pro/coinex.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/pro/coinone.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/pro/cryptocom.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/pro/currencycom.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/pro/deribit.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/pro/exmo.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/pro/gate.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/pro/gateio.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/pro/gemini.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/pro/hitbtc.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/pro/hollaex.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/pro/huobi.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/pro/huobijp.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/pro/hyperliquid.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/pro/idex.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/pro/krakenfutures.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/pro/kucoin.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/pro/kucoinfutures.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/pro/lbank.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/pro/luno.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/pro/mexc.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/pro/ndax.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/pro/okcoin.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/pro/onetrading.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/pro/p2b.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/pro/phemex.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/pro/poloniex.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/pro/poloniexfutures.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/pro/probit.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/pro/upbit.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/pro/wazirx.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/pro/whitebit.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/pro/woo.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/probit.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/__init__.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ecdsa/__init__.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ecdsa/_version.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ecdsa/curves.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ecdsa/der.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ecdsa/ecdsa.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ecdsa/ellipticcurve.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ecdsa/keys.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ecdsa/numbertheory.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ecdsa/rfc6979.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ecdsa/util.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ethereum/__init__.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ethereum/abi/__init__.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ethereum/abi/abi.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ethereum/abi/base.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ethereum/abi/codec.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ethereum/abi/constants.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ethereum/abi/decoding.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ethereum/abi/encoding.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ethereum/abi/exceptions.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ethereum/abi/grammar.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ethereum/abi/packed.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ethereum/abi/py.typed +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ethereum/abi/registry.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ethereum/abi/tools/__init__.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ethereum/abi/tools/_strategies.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ethereum/abi/utils/__init__.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ethereum/abi/utils/numeric.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ethereum/abi/utils/padding.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ethereum/abi/utils/string.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ethereum/account/__init__.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ethereum/account/encode_typed_data/__init__.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ethereum/account/encode_typed_data/encoding_and_hashing.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ethereum/account/encode_typed_data/helpers.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ethereum/account/messages.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ethereum/account/py.typed +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ethereum/hexbytes/__init__.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ethereum/hexbytes/_utils.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ethereum/hexbytes/main.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ethereum/hexbytes/py.typed +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ethereum/typing/__init__.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ethereum/typing/abi.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ethereum/typing/bls.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ethereum/typing/discovery.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ethereum/typing/encoding.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ethereum/typing/enums.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ethereum/typing/ethpm.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ethereum/typing/evm.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ethereum/typing/networks.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ethereum/typing/py.typed +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ethereum/utils/__init__.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ethereum/utils/abi.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ethereum/utils/address.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ethereum/utils/applicators.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ethereum/utils/conversions.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ethereum/utils/currency.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ethereum/utils/curried/__init__.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ethereum/utils/debug.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ethereum/utils/decorators.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ethereum/utils/encoding.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ethereum/utils/exceptions.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ethereum/utils/functional.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ethereum/utils/hexadecimal.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ethereum/utils/humanize.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ethereum/utils/logging.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ethereum/utils/module_loading.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ethereum/utils/numeric.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ethereum/utils/py.typed +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ethereum/utils/toolz.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ethereum/utils/types.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ethereum/utils/typing/__init__.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ethereum/utils/typing/misc.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/ethereum/utils/units.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/keccak/__init__.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/keccak/keccak.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/msgpack/__init__.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/msgpack/exceptions.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/msgpack/ext.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/msgpack/fallback.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/parsimonious/__init__.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/parsimonious/exceptions.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/parsimonious/expressions.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/parsimonious/grammar.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/parsimonious/nodes.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/parsimonious/utils.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/toolz/__init__.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/toolz/_signatures.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/toolz/_version.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/toolz/compatibility.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/toolz/curried/__init__.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/toolz/curried/exceptions.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/toolz/curried/operator.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/toolz/dicttoolz.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/toolz/functoolz.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/toolz/itertoolz.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/toolz/recipes.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/static_dependencies/toolz/utils.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/test/__init__.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/test/base/__init__.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/test/base/test_account.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/test/base/test_balance.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/test/base/test_borrow_interest.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/test/base/test_borrow_rate.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/test/base/test_calculate_fee.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/test/base/test_crypto.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/test/base/test_currency.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/test/base/test_datetime.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/test/base/test_decimal_to_precision.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/test/base/test_deep_extend.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/test/base/test_deposit_withdrawal.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/test/base/test_exchange_datetime_functions.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/test/base/test_funding_rate_history.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/test/base/test_last_price.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/test/base/test_ledger_entry.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/test/base/test_ledger_item.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/test/base/test_leverage_tier.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/test/base/test_margin_mode.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/test/base/test_margin_modification.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/test/base/test_market.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/test/base/test_number.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/test/base/test_ohlcv.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/test/base/test_open_interest.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/test/base/test_order.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/test/base/test_order_book.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/test/base/test_position.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/test/base/test_shared_methods.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/test/base/test_status.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/test/base/test_throttle.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/test/base/test_ticker.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/test/base/test_trade.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/test/base/test_trading_fee.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/test/base/test_transaction.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/test/test_async.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/test/test_sync.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/timex.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/tokocrypto.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/tradeogre.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/upbit.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/wavesexchange.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/wazirx.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/whitebit.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/woo.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/yobit.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/zaif.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt/zonda.py +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt.egg-info/SOURCES.txt +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt.egg-info/dependency_links.txt +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt.egg-info/requires.txt +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/ccxt.egg-info/top_level.txt +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/setup.cfg +0 -0
- {ccxt-4.3.16 → ccxt-4.3.17}/setup.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: ccxt
|
3
|
-
Version: 4.3.
|
3
|
+
Version: 4.3.17
|
4
4
|
Summary: A JavaScript / TypeScript / Python / C# / PHP cryptocurrency trading library with support for 100+ exchanges
|
5
5
|
Home-page: https://ccxt.com
|
6
6
|
Author: Igor Kroitor
|
@@ -226,13 +226,13 @@ Description: # CCXT – CryptoCurrency eXchange Trading Library
|
|
226
226
|
|
227
227
|
All-in-one browser bundle (dependencies included), served from a CDN of your choice:
|
228
228
|
|
229
|
-
* jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.3.
|
230
|
-
* unpkg: https://unpkg.com/ccxt@4.3.
|
229
|
+
* jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.3.17/dist/ccxt.browser.js
|
230
|
+
* unpkg: https://unpkg.com/ccxt@4.3.17/dist/ccxt.browser.js
|
231
231
|
|
232
232
|
CDNs are not updated in real-time and may have delays. Defaulting to the most recent version without specifying the version number is not recommended. Please, keep in mind that we are not responsible for the correct operation of those CDN servers.
|
233
233
|
|
234
234
|
```HTML
|
235
|
-
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.3.
|
235
|
+
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.3.17/dist/ccxt.browser.js"></script>
|
236
236
|
```
|
237
237
|
|
238
238
|
Creates a global `ccxt` object:
|
@@ -2612,7 +2612,7 @@ class binance(Exchange, ImplicitAPI):
|
|
2612
2612
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
2613
2613
|
:returns dict: an associative dictionary of currencies
|
2614
2614
|
"""
|
2615
|
-
fetchCurrenciesEnabled = self.
|
2615
|
+
fetchCurrenciesEnabled = self.safe_bool(self.options, 'fetchCurrencies')
|
2616
2616
|
if not fetchCurrenciesEnabled:
|
2617
2617
|
return None
|
2618
2618
|
# self endpoint requires authentication
|
@@ -4399,7 +4399,7 @@ class binance(Exchange, ImplicitAPI):
|
|
4399
4399
|
market = self.safe_market(marketId, market, None, marketType)
|
4400
4400
|
symbol = market['symbol']
|
4401
4401
|
side = None
|
4402
|
-
buyerMaker = self.
|
4402
|
+
buyerMaker = self.safe_bool_2(trade, 'm', 'isBuyerMaker')
|
4403
4403
|
takerOrMaker = None
|
4404
4404
|
if buyerMaker is not None:
|
4405
4405
|
side = 'sell' if buyerMaker else 'buy' # self is reversed intentionally
|
@@ -4675,14 +4675,14 @@ class binance(Exchange, ImplicitAPI):
|
|
4675
4675
|
uppercaseType = 'STOP_LOSS'
|
4676
4676
|
elif uppercaseType == 'LIMIT':
|
4677
4677
|
uppercaseType = 'STOP_LOSS_LIMIT'
|
4678
|
-
validOrderTypes = self.
|
4678
|
+
validOrderTypes = self.safe_list(market['info'], 'orderTypes')
|
4679
4679
|
if not self.in_array(uppercaseType, validOrderTypes):
|
4680
4680
|
if initialUppercaseType != uppercaseType:
|
4681
4681
|
raise InvalidOrder(self.id + ' stopPrice parameter is not allowed for ' + symbol + ' ' + type + ' orders')
|
4682
4682
|
else:
|
4683
4683
|
raise InvalidOrder(self.id + ' ' + type + ' is not a valid order type for the ' + symbol + ' market')
|
4684
4684
|
if clientOrderId is None:
|
4685
|
-
broker = self.
|
4685
|
+
broker = self.safe_dict(self.options, 'broker')
|
4686
4686
|
if broker is not None:
|
4687
4687
|
brokerId = self.safe_string(broker, 'spot')
|
4688
4688
|
if brokerId is not None:
|
@@ -7150,7 +7150,7 @@ class binance(Exchange, ImplicitAPI):
|
|
7150
7150
|
if until is not None:
|
7151
7151
|
request['endTime'] = until
|
7152
7152
|
raw = await self.sapiGetFiatOrders(self.extend(request, params))
|
7153
|
-
response = self.
|
7153
|
+
response = self.safe_list(raw, 'data', [])
|
7154
7154
|
# {
|
7155
7155
|
# "code": "000000",
|
7156
7156
|
# "message": "success",
|
@@ -7252,7 +7252,7 @@ class binance(Exchange, ImplicitAPI):
|
|
7252
7252
|
if since is not None:
|
7253
7253
|
request['beginTime'] = since
|
7254
7254
|
raw = await self.sapiGetFiatOrders(self.extend(request, params))
|
7255
|
-
response = self.
|
7255
|
+
response = self.safe_list(raw, 'data', [])
|
7256
7256
|
# {
|
7257
7257
|
# "code": "000000",
|
7258
7258
|
# "message": "success",
|
@@ -7459,7 +7459,7 @@ class binance(Exchange, ImplicitAPI):
|
|
7459
7459
|
txType = self.safe_string(transaction, 'transactionType')
|
7460
7460
|
if txType is not None:
|
7461
7461
|
type = 'deposit' if (txType == '0') else 'withdrawal'
|
7462
|
-
legalMoneyCurrenciesById = self.
|
7462
|
+
legalMoneyCurrenciesById = self.safe_dict(self.options, 'legalMoneyCurrenciesById')
|
7463
7463
|
code = self.safe_string(legalMoneyCurrenciesById, code, code)
|
7464
7464
|
status = self.parse_transaction_status_by_type(self.safe_string(transaction, 'status'), type)
|
7465
7465
|
amount = self.safe_number(transaction, 'amount')
|
@@ -7773,7 +7773,7 @@ class binance(Exchange, ImplicitAPI):
|
|
7773
7773
|
if subLevel is not None:
|
7774
7774
|
topLevel = topLevel + '/' + subLevel
|
7775
7775
|
impliedNetwork = self.safe_string(reverseNetworks, topLevel)
|
7776
|
-
impliedNetworks = self.
|
7776
|
+
impliedNetworks = self.safe_dict(self.options, 'impliedNetworks', {
|
7777
7777
|
'ETH': {'ERC20': 'ETH'},
|
7778
7778
|
'TRX': {'TRC20': 'TRX'},
|
7779
7779
|
})
|
@@ -8981,7 +8981,7 @@ class binance(Exchange, ImplicitAPI):
|
|
8981
8981
|
await self.load_markets()
|
8982
8982
|
# by default cache the leverage bracket
|
8983
8983
|
# it contains useful stuff like the maintenance margin and initial margin for positions
|
8984
|
-
leverageBrackets = self.
|
8984
|
+
leverageBrackets = self.safe_dict(self.options, 'leverageBrackets', {})
|
8985
8985
|
if (leverageBrackets is None) or (reload):
|
8986
8986
|
defaultType = self.safe_string(self.options, 'defaultType', 'future')
|
8987
8987
|
type = self.safe_string(params, 'type', defaultType)
|
@@ -1470,6 +1470,7 @@ class bybit(Exchange, ImplicitAPI):
|
|
1470
1470
|
# "quoteCoin": "USDT",
|
1471
1471
|
# "innovation": "0",
|
1472
1472
|
# "status": "Trading",
|
1473
|
+
# "marginTrading": "both",
|
1473
1474
|
# "lotSizeFilter": {
|
1474
1475
|
# "basePrecision": "0.000001",
|
1475
1476
|
# "quotePrecision": "0.00000001",
|
@@ -1506,7 +1507,9 @@ class bybit(Exchange, ImplicitAPI):
|
|
1506
1507
|
lotSizeFilter = self.safe_dict(market, 'lotSizeFilter')
|
1507
1508
|
priceFilter = self.safe_dict(market, 'priceFilter')
|
1508
1509
|
quotePrecision = self.safe_number(lotSizeFilter, 'quotePrecision')
|
1509
|
-
|
1510
|
+
marginTrading = self.safe_string(market, 'marginTrading', 'none')
|
1511
|
+
allowsMargin = marginTrading != 'none'
|
1512
|
+
result.append(self.safe_market_structure({
|
1510
1513
|
'id': id,
|
1511
1514
|
'symbol': symbol,
|
1512
1515
|
'base': base,
|
@@ -1517,7 +1520,7 @@ class bybit(Exchange, ImplicitAPI):
|
|
1517
1520
|
'settleId': None,
|
1518
1521
|
'type': 'spot',
|
1519
1522
|
'spot': True,
|
1520
|
-
'margin':
|
1523
|
+
'margin': allowsMargin,
|
1521
1524
|
'swap': False,
|
1522
1525
|
'future': False,
|
1523
1526
|
'option': False,
|
@@ -1556,7 +1559,7 @@ class bybit(Exchange, ImplicitAPI):
|
|
1556
1559
|
},
|
1557
1560
|
'created': None,
|
1558
1561
|
'info': market,
|
1559
|
-
})
|
1562
|
+
}))
|
1560
1563
|
return result
|
1561
1564
|
|
1562
1565
|
async def fetch_future_markets(self, params):
|
@@ -1669,7 +1672,7 @@ class bybit(Exchange, ImplicitAPI):
|
|
1669
1672
|
if expiry is not None:
|
1670
1673
|
symbol = symbol + '-' + self.yymmdd(expiry)
|
1671
1674
|
contractSize = self.safe_number_2(lotSizeFilter, 'minTradingQty', 'minOrderQty') if inverse else self.parse_number('1')
|
1672
|
-
result.append({
|
1675
|
+
result.append(self.safe_market_structure({
|
1673
1676
|
'id': id,
|
1674
1677
|
'symbol': symbol,
|
1675
1678
|
'base': base,
|
@@ -1719,7 +1722,7 @@ class bybit(Exchange, ImplicitAPI):
|
|
1719
1722
|
},
|
1720
1723
|
'created': self.safe_integer(market, 'launchTime'),
|
1721
1724
|
'info': market,
|
1722
|
-
})
|
1725
|
+
}))
|
1723
1726
|
return result
|
1724
1727
|
|
1725
1728
|
async def fetch_option_markets(self, params):
|
@@ -1797,7 +1800,7 @@ class bybit(Exchange, ImplicitAPI):
|
|
1797
1800
|
optionLetter = self.safe_string(splitId, 3)
|
1798
1801
|
isActive = (status == 'Trading')
|
1799
1802
|
if isActive or (self.options['loadAllOptions']) or (self.options['loadExpiredOptions']):
|
1800
|
-
result.append({
|
1803
|
+
result.append(self.safe_market_structure({
|
1801
1804
|
'id': id,
|
1802
1805
|
'symbol': base + '/' + quote + ':' + settle + '-' + self.yymmdd(expiry) + '-' + strike + '-' + optionLetter,
|
1803
1806
|
'base': base,
|
@@ -1847,7 +1850,7 @@ class bybit(Exchange, ImplicitAPI):
|
|
1847
1850
|
},
|
1848
1851
|
'created': self.safe_integer(market, 'launchTime'),
|
1849
1852
|
'info': market,
|
1850
|
-
})
|
1853
|
+
}))
|
1851
1854
|
return result
|
1852
1855
|
|
1853
1856
|
def parse_ticker(self, ticker, market: Market = None) -> Ticker:
|
@@ -26,6 +26,7 @@ from ccxt.base.errors import CancelPending
|
|
26
26
|
from ccxt.base.errors import ContractUnavailable
|
27
27
|
from ccxt.base.errors import NotSupported
|
28
28
|
from ccxt.base.errors import NetworkError
|
29
|
+
from ccxt.base.errors import DDoSProtection
|
29
30
|
from ccxt.base.errors import RateLimitExceeded
|
30
31
|
from ccxt.base.errors import ExchangeNotAvailable
|
31
32
|
from ccxt.base.errors import OnMaintenance
|
@@ -913,7 +914,24 @@ class okx(Exchange, ImplicitAPI):
|
|
913
914
|
'60017': BadRequest, # Invalid url path
|
914
915
|
'60018': BadRequest, # The {0} {1} {2} {3} {4} does not exist
|
915
916
|
'60019': BadRequest, # Invalid op {op}
|
917
|
+
'60020': ExchangeError, # APIKey subscription amount exceeds the limit
|
918
|
+
'60021': AccountNotEnabled, # This operation does not support multiple accounts login
|
919
|
+
'60022': AuthenticationError, # Bulk login partially succeeded
|
920
|
+
'60023': DDoSProtection, # Bulk login requests too frequent
|
921
|
+
'60024': AuthenticationError, # Wrong passphrase
|
922
|
+
'60025': ExchangeError, # Token subscription amount exceeds the limit
|
923
|
+
'60026': AuthenticationError, # Batch login by APIKey and token simultaneously is not supported
|
924
|
+
'60027': ArgumentsRequired, # Parameter {0} can not be empty
|
925
|
+
'60028': NotSupported, # The current operation is not supported by self URL
|
926
|
+
'60029': AccountNotEnabled, # Only users who are VIP5 and above in trading fee tier are allowed to subscribe to books-l2-tbt channel
|
927
|
+
'60030': AccountNotEnabled, # Only users who are VIP4 and above in trading fee tier are allowed to subscribe to books50-l2-tbt channel
|
928
|
+
'60031': AuthenticationError, # The WebSocket endpoint does not support multiple account batch login,
|
929
|
+
'60032': AuthenticationError, # API key doesn't exist,
|
916
930
|
'63999': ExchangeError, # Internal system error
|
931
|
+
'64000': BadRequest, # Subscription parameter uly is unavailable anymore, please replace uly with instFamily. More details can refer to: https://www.okx.com/help-center/changes-to-v5-api-websocket-subscription-parameter-and-url,
|
932
|
+
'64001': BadRequest, # This channel has been migrated to the business URL. Please subscribe using the new URL. More details can refer to: https://www.okx.com/help-center/changes-to-v5-api-websocket-subscription-parameter-and-url,
|
933
|
+
'64002': BadRequest, # This channel is not supported by business URL. Please use "/private" URL(for private channels), or "/public" URL(for public channels). More details can refer to: https://www.okx.com/help-center/changes-to-v5-api-websocket-subscription-parameter-and-url,
|
934
|
+
'64003': AccountNotEnabled, # Your trading fee tier doesnt meet the requirement to access self channel
|
917
935
|
'70010': BadRequest, # Timestamp parameters need to be in Unix timestamp format in milliseconds.
|
918
936
|
'70013': BadRequest, # endTs needs to be bigger than or equal to beginTs.
|
919
937
|
'70016': BadRequest, # Please specify your instrument settings for at least one instType.
|
@@ -2611,7 +2611,7 @@ class binance(Exchange, ImplicitAPI):
|
|
2611
2611
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
2612
2612
|
:returns dict: an associative dictionary of currencies
|
2613
2613
|
"""
|
2614
|
-
fetchCurrenciesEnabled = self.
|
2614
|
+
fetchCurrenciesEnabled = self.safe_bool(self.options, 'fetchCurrencies')
|
2615
2615
|
if not fetchCurrenciesEnabled:
|
2616
2616
|
return None
|
2617
2617
|
# self endpoint requires authentication
|
@@ -4398,7 +4398,7 @@ class binance(Exchange, ImplicitAPI):
|
|
4398
4398
|
market = self.safe_market(marketId, market, None, marketType)
|
4399
4399
|
symbol = market['symbol']
|
4400
4400
|
side = None
|
4401
|
-
buyerMaker = self.
|
4401
|
+
buyerMaker = self.safe_bool_2(trade, 'm', 'isBuyerMaker')
|
4402
4402
|
takerOrMaker = None
|
4403
4403
|
if buyerMaker is not None:
|
4404
4404
|
side = 'sell' if buyerMaker else 'buy' # self is reversed intentionally
|
@@ -4674,14 +4674,14 @@ class binance(Exchange, ImplicitAPI):
|
|
4674
4674
|
uppercaseType = 'STOP_LOSS'
|
4675
4675
|
elif uppercaseType == 'LIMIT':
|
4676
4676
|
uppercaseType = 'STOP_LOSS_LIMIT'
|
4677
|
-
validOrderTypes = self.
|
4677
|
+
validOrderTypes = self.safe_list(market['info'], 'orderTypes')
|
4678
4678
|
if not self.in_array(uppercaseType, validOrderTypes):
|
4679
4679
|
if initialUppercaseType != uppercaseType:
|
4680
4680
|
raise InvalidOrder(self.id + ' stopPrice parameter is not allowed for ' + symbol + ' ' + type + ' orders')
|
4681
4681
|
else:
|
4682
4682
|
raise InvalidOrder(self.id + ' ' + type + ' is not a valid order type for the ' + symbol + ' market')
|
4683
4683
|
if clientOrderId is None:
|
4684
|
-
broker = self.
|
4684
|
+
broker = self.safe_dict(self.options, 'broker')
|
4685
4685
|
if broker is not None:
|
4686
4686
|
brokerId = self.safe_string(broker, 'spot')
|
4687
4687
|
if brokerId is not None:
|
@@ -7149,7 +7149,7 @@ class binance(Exchange, ImplicitAPI):
|
|
7149
7149
|
if until is not None:
|
7150
7150
|
request['endTime'] = until
|
7151
7151
|
raw = self.sapiGetFiatOrders(self.extend(request, params))
|
7152
|
-
response = self.
|
7152
|
+
response = self.safe_list(raw, 'data', [])
|
7153
7153
|
# {
|
7154
7154
|
# "code": "000000",
|
7155
7155
|
# "message": "success",
|
@@ -7251,7 +7251,7 @@ class binance(Exchange, ImplicitAPI):
|
|
7251
7251
|
if since is not None:
|
7252
7252
|
request['beginTime'] = since
|
7253
7253
|
raw = self.sapiGetFiatOrders(self.extend(request, params))
|
7254
|
-
response = self.
|
7254
|
+
response = self.safe_list(raw, 'data', [])
|
7255
7255
|
# {
|
7256
7256
|
# "code": "000000",
|
7257
7257
|
# "message": "success",
|
@@ -7458,7 +7458,7 @@ class binance(Exchange, ImplicitAPI):
|
|
7458
7458
|
txType = self.safe_string(transaction, 'transactionType')
|
7459
7459
|
if txType is not None:
|
7460
7460
|
type = 'deposit' if (txType == '0') else 'withdrawal'
|
7461
|
-
legalMoneyCurrenciesById = self.
|
7461
|
+
legalMoneyCurrenciesById = self.safe_dict(self.options, 'legalMoneyCurrenciesById')
|
7462
7462
|
code = self.safe_string(legalMoneyCurrenciesById, code, code)
|
7463
7463
|
status = self.parse_transaction_status_by_type(self.safe_string(transaction, 'status'), type)
|
7464
7464
|
amount = self.safe_number(transaction, 'amount')
|
@@ -7772,7 +7772,7 @@ class binance(Exchange, ImplicitAPI):
|
|
7772
7772
|
if subLevel is not None:
|
7773
7773
|
topLevel = topLevel + '/' + subLevel
|
7774
7774
|
impliedNetwork = self.safe_string(reverseNetworks, topLevel)
|
7775
|
-
impliedNetworks = self.
|
7775
|
+
impliedNetworks = self.safe_dict(self.options, 'impliedNetworks', {
|
7776
7776
|
'ETH': {'ERC20': 'ETH'},
|
7777
7777
|
'TRX': {'TRC20': 'TRX'},
|
7778
7778
|
})
|
@@ -8980,7 +8980,7 @@ class binance(Exchange, ImplicitAPI):
|
|
8980
8980
|
self.load_markets()
|
8981
8981
|
# by default cache the leverage bracket
|
8982
8982
|
# it contains useful stuff like the maintenance margin and initial margin for positions
|
8983
|
-
leverageBrackets = self.
|
8983
|
+
leverageBrackets = self.safe_dict(self.options, 'leverageBrackets', {})
|
8984
8984
|
if (leverageBrackets is None) or (reload):
|
8985
8985
|
defaultType = self.safe_string(self.options, 'defaultType', 'future')
|
8986
8986
|
type = self.safe_string(params, 'type', defaultType)
|
@@ -1469,6 +1469,7 @@ class bybit(Exchange, ImplicitAPI):
|
|
1469
1469
|
# "quoteCoin": "USDT",
|
1470
1470
|
# "innovation": "0",
|
1471
1471
|
# "status": "Trading",
|
1472
|
+
# "marginTrading": "both",
|
1472
1473
|
# "lotSizeFilter": {
|
1473
1474
|
# "basePrecision": "0.000001",
|
1474
1475
|
# "quotePrecision": "0.00000001",
|
@@ -1505,7 +1506,9 @@ class bybit(Exchange, ImplicitAPI):
|
|
1505
1506
|
lotSizeFilter = self.safe_dict(market, 'lotSizeFilter')
|
1506
1507
|
priceFilter = self.safe_dict(market, 'priceFilter')
|
1507
1508
|
quotePrecision = self.safe_number(lotSizeFilter, 'quotePrecision')
|
1508
|
-
|
1509
|
+
marginTrading = self.safe_string(market, 'marginTrading', 'none')
|
1510
|
+
allowsMargin = marginTrading != 'none'
|
1511
|
+
result.append(self.safe_market_structure({
|
1509
1512
|
'id': id,
|
1510
1513
|
'symbol': symbol,
|
1511
1514
|
'base': base,
|
@@ -1516,7 +1519,7 @@ class bybit(Exchange, ImplicitAPI):
|
|
1516
1519
|
'settleId': None,
|
1517
1520
|
'type': 'spot',
|
1518
1521
|
'spot': True,
|
1519
|
-
'margin':
|
1522
|
+
'margin': allowsMargin,
|
1520
1523
|
'swap': False,
|
1521
1524
|
'future': False,
|
1522
1525
|
'option': False,
|
@@ -1555,7 +1558,7 @@ class bybit(Exchange, ImplicitAPI):
|
|
1555
1558
|
},
|
1556
1559
|
'created': None,
|
1557
1560
|
'info': market,
|
1558
|
-
})
|
1561
|
+
}))
|
1559
1562
|
return result
|
1560
1563
|
|
1561
1564
|
def fetch_future_markets(self, params):
|
@@ -1668,7 +1671,7 @@ class bybit(Exchange, ImplicitAPI):
|
|
1668
1671
|
if expiry is not None:
|
1669
1672
|
symbol = symbol + '-' + self.yymmdd(expiry)
|
1670
1673
|
contractSize = self.safe_number_2(lotSizeFilter, 'minTradingQty', 'minOrderQty') if inverse else self.parse_number('1')
|
1671
|
-
result.append({
|
1674
|
+
result.append(self.safe_market_structure({
|
1672
1675
|
'id': id,
|
1673
1676
|
'symbol': symbol,
|
1674
1677
|
'base': base,
|
@@ -1718,7 +1721,7 @@ class bybit(Exchange, ImplicitAPI):
|
|
1718
1721
|
},
|
1719
1722
|
'created': self.safe_integer(market, 'launchTime'),
|
1720
1723
|
'info': market,
|
1721
|
-
})
|
1724
|
+
}))
|
1722
1725
|
return result
|
1723
1726
|
|
1724
1727
|
def fetch_option_markets(self, params):
|
@@ -1796,7 +1799,7 @@ class bybit(Exchange, ImplicitAPI):
|
|
1796
1799
|
optionLetter = self.safe_string(splitId, 3)
|
1797
1800
|
isActive = (status == 'Trading')
|
1798
1801
|
if isActive or (self.options['loadAllOptions']) or (self.options['loadExpiredOptions']):
|
1799
|
-
result.append({
|
1802
|
+
result.append(self.safe_market_structure({
|
1800
1803
|
'id': id,
|
1801
1804
|
'symbol': base + '/' + quote + ':' + settle + '-' + self.yymmdd(expiry) + '-' + strike + '-' + optionLetter,
|
1802
1805
|
'base': base,
|
@@ -1846,7 +1849,7 @@ class bybit(Exchange, ImplicitAPI):
|
|
1846
1849
|
},
|
1847
1850
|
'created': self.safe_integer(market, 'launchTime'),
|
1848
1851
|
'info': market,
|
1849
|
-
})
|
1852
|
+
}))
|
1850
1853
|
return result
|
1851
1854
|
|
1852
1855
|
def parse_ticker(self, ticker, market: Market = None) -> Ticker:
|
@@ -25,6 +25,7 @@ from ccxt.base.errors import CancelPending
|
|
25
25
|
from ccxt.base.errors import ContractUnavailable
|
26
26
|
from ccxt.base.errors import NotSupported
|
27
27
|
from ccxt.base.errors import NetworkError
|
28
|
+
from ccxt.base.errors import DDoSProtection
|
28
29
|
from ccxt.base.errors import RateLimitExceeded
|
29
30
|
from ccxt.base.errors import ExchangeNotAvailable
|
30
31
|
from ccxt.base.errors import OnMaintenance
|
@@ -912,7 +913,24 @@ class okx(Exchange, ImplicitAPI):
|
|
912
913
|
'60017': BadRequest, # Invalid url path
|
913
914
|
'60018': BadRequest, # The {0} {1} {2} {3} {4} does not exist
|
914
915
|
'60019': BadRequest, # Invalid op {op}
|
916
|
+
'60020': ExchangeError, # APIKey subscription amount exceeds the limit
|
917
|
+
'60021': AccountNotEnabled, # This operation does not support multiple accounts login
|
918
|
+
'60022': AuthenticationError, # Bulk login partially succeeded
|
919
|
+
'60023': DDoSProtection, # Bulk login requests too frequent
|
920
|
+
'60024': AuthenticationError, # Wrong passphrase
|
921
|
+
'60025': ExchangeError, # Token subscription amount exceeds the limit
|
922
|
+
'60026': AuthenticationError, # Batch login by APIKey and token simultaneously is not supported
|
923
|
+
'60027': ArgumentsRequired, # Parameter {0} can not be empty
|
924
|
+
'60028': NotSupported, # The current operation is not supported by self URL
|
925
|
+
'60029': AccountNotEnabled, # Only users who are VIP5 and above in trading fee tier are allowed to subscribe to books-l2-tbt channel
|
926
|
+
'60030': AccountNotEnabled, # Only users who are VIP4 and above in trading fee tier are allowed to subscribe to books50-l2-tbt channel
|
927
|
+
'60031': AuthenticationError, # The WebSocket endpoint does not support multiple account batch login,
|
928
|
+
'60032': AuthenticationError, # API key doesn't exist,
|
915
929
|
'63999': ExchangeError, # Internal system error
|
930
|
+
'64000': BadRequest, # Subscription parameter uly is unavailable anymore, please replace uly with instFamily. More details can refer to: https://www.okx.com/help-center/changes-to-v5-api-websocket-subscription-parameter-and-url,
|
931
|
+
'64001': BadRequest, # This channel has been migrated to the business URL. Please subscribe using the new URL. More details can refer to: https://www.okx.com/help-center/changes-to-v5-api-websocket-subscription-parameter-and-url,
|
932
|
+
'64002': BadRequest, # This channel is not supported by business URL. Please use "/private" URL(for private channels), or "/public" URL(for public channels). More details can refer to: https://www.okx.com/help-center/changes-to-v5-api-websocket-subscription-parameter-and-url,
|
933
|
+
'64003': AccountNotEnabled, # Your trading fee tier doesnt meet the requirement to access self channel
|
916
934
|
'70010': BadRequest, # Timestamp parameters need to be in Unix timestamp format in milliseconds.
|
917
935
|
'70013': BadRequest, # endTs needs to be bigger than or equal to beginTs.
|
918
936
|
'70016': BadRequest, # Please specify your instrument settings for at least one instType.
|
@@ -642,6 +642,8 @@ class bitfinex2(ccxt.async_support.bitfinex2):
|
|
642
642
|
responseChecksum = self.safe_integer(message, 2)
|
643
643
|
if responseChecksum != localChecksum:
|
644
644
|
error = InvalidNonce(self.id + ' invalid checksum')
|
645
|
+
del client.subscriptions[messageHash]
|
646
|
+
del self.orderbooks[symbol]
|
645
647
|
client.reject(error, messageHash)
|
646
648
|
|
647
649
|
async def watch_balance(self, params={}) -> Balances:
|
@@ -541,7 +541,10 @@ class bitget(ccxt.async_support.bitget):
|
|
541
541
|
responseChecksum = self.safe_integer(rawOrderBook, 'checksum')
|
542
542
|
if calculatedChecksum != responseChecksum:
|
543
543
|
error = InvalidNonce(self.id + ' invalid checksum')
|
544
|
+
del client.subscriptions[messageHash]
|
545
|
+
del self.orderbooks[symbol]
|
544
546
|
client.reject(error, messageHash)
|
547
|
+
return
|
545
548
|
else:
|
546
549
|
orderbook = self.order_book({})
|
547
550
|
parsedOrderbook = self.parse_order_book(rawOrderBook, symbol, timestamp)
|
@@ -22,11 +22,11 @@ class bybit(ccxt.async_support.bybit):
|
|
22
22
|
return self.deep_extend(super(bybit, self).describe(), {
|
23
23
|
'has': {
|
24
24
|
'ws': True,
|
25
|
-
'createOrderWs':
|
26
|
-
'editOrderWs':
|
25
|
+
'createOrderWs': True,
|
26
|
+
'editOrderWs': True,
|
27
27
|
'fetchOpenOrdersWs': False,
|
28
28
|
'fetchOrderWs': False,
|
29
|
-
'cancelOrderWs':
|
29
|
+
'cancelOrderWs': True,
|
30
30
|
'cancelOrdersWs': False,
|
31
31
|
'cancelAllOrdersWs': False,
|
32
32
|
'fetchTradesWs': False,
|
@@ -418,6 +418,8 @@ class htx(ccxt.async_support.htx):
|
|
418
418
|
self.orderbooks[symbol] = orderbook
|
419
419
|
client.resolve(orderbook, messageHash)
|
420
420
|
except Exception as e:
|
421
|
+
del client.subscriptions[messageHash]
|
422
|
+
del self.orderbooks[symbol]
|
421
423
|
client.reject(e, messageHash)
|
422
424
|
|
423
425
|
async def watch_order_book_snapshot(self, client, message, subscription):
|
@@ -213,6 +213,8 @@ class independentreserve(ccxt.async_support.independentreserve):
|
|
213
213
|
responseChecksum = self.safe_integer(orderBook, 'Crc32')
|
214
214
|
if calculatedChecksum != responseChecksum:
|
215
215
|
error = InvalidNonce(self.id + ' invalid checksum')
|
216
|
+
del client.subscriptions[messageHash]
|
217
|
+
del self.orderbooks[symbol]
|
216
218
|
client.reject(error, messageHash)
|
217
219
|
if receivedSnapshot:
|
218
220
|
client.resolve(orderbook, messageHash)
|
@@ -734,6 +734,8 @@ class kraken(ccxt.async_support.kraken):
|
|
734
734
|
localChecksum = self.crc32(payload, False)
|
735
735
|
if localChecksum != c:
|
736
736
|
error = InvalidNonce(self.id + ' invalid checksum')
|
737
|
+
del client.subscriptions[messageHash]
|
738
|
+
del self.orderbooks[symbol]
|
737
739
|
client.reject(error, messageHash)
|
738
740
|
return
|
739
741
|
orderbook['symbol'] = symbol
|
@@ -9,6 +9,7 @@ import hashlib
|
|
9
9
|
from ccxt.base.types import Balances, Int, Num, Order, OrderBook, OrderSide, OrderType, Position, Str, Strings, Ticker, Tickers, Trade
|
10
10
|
from ccxt.async_support.base.ws.client import Client
|
11
11
|
from typing import List
|
12
|
+
from ccxt.base.errors import ExchangeError
|
12
13
|
from ccxt.base.errors import AuthenticationError
|
13
14
|
from ccxt.base.errors import ArgumentsRequired
|
14
15
|
from ccxt.base.errors import BadRequest
|
@@ -424,10 +425,12 @@ class okx(ccxt.async_support.okx):
|
|
424
425
|
|
425
426
|
async def watch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
|
426
427
|
"""
|
428
|
+
:see: https://www.okx.com/docs-v5/en/#order-book-trading-market-data-ws-order-book-channel
|
427
429
|
watches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
|
428
430
|
:param str symbol: unified symbol of the market to fetch the order book for
|
429
431
|
:param int [limit]: the maximum amount of order book entries to return
|
430
432
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
433
|
+
:param str [params.depth]: okx order book depth, can be books, books5, books-l2-tbt, books50-l2-tbt, bbo-tbt
|
431
434
|
:returns dict: A dictionary of `order book structures <https://docs.ccxt.com/#/?id=order-book-structure>` indexed by market symbols
|
432
435
|
"""
|
433
436
|
#
|
@@ -457,28 +460,30 @@ class okx(ccxt.async_support.okx):
|
|
457
460
|
|
458
461
|
async def watch_order_book_for_symbols(self, symbols: List[str], limit: Int = None, params={}) -> OrderBook:
|
459
462
|
"""
|
463
|
+
:see: https://www.okx.com/docs-v5/en/#order-book-trading-market-data-ws-order-book-channel
|
460
464
|
watches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
|
461
465
|
:param str[] symbols: unified array of symbols
|
462
466
|
:param int [limit]: 1,5, 400, 50(l2-tbt, vip4+) or 40000(vip5+) the maximum amount of order book entries to return
|
463
467
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
468
|
+
:param str [params.depth]: okx order book depth, can be books, books5, books-l2-tbt, books50-l2-tbt, bbo-tbt
|
464
469
|
:returns dict: A dictionary of `order book structures <https://docs.ccxt.com/#/?id=order-book-structure>` indexed by market symbols
|
465
470
|
"""
|
466
471
|
await self.load_markets()
|
467
472
|
symbols = self.market_symbols(symbols)
|
468
|
-
|
469
|
-
depth = self.
|
473
|
+
depth = None
|
474
|
+
depth, params = self.handle_option_and_params(params, 'watchOrderBook', 'depth', 'books')
|
470
475
|
if limit is not None:
|
471
476
|
if limit == 1:
|
472
477
|
depth = 'bbo-tbt'
|
473
478
|
elif limit > 1 and limit <= 5:
|
474
479
|
depth = 'books5'
|
475
|
-
elif limit == 400:
|
476
|
-
depth = 'books'
|
477
480
|
elif limit == 50:
|
478
481
|
depth = 'books50-l2-tbt' # Make sure you have VIP4 and above
|
479
|
-
elif limit ==
|
480
|
-
depth = 'books
|
482
|
+
elif limit == 400:
|
483
|
+
depth = 'books'
|
481
484
|
if (depth == 'books-l2-tbt') or (depth == 'books50-l2-tbt'):
|
485
|
+
if not self.check_required_credentials(False):
|
486
|
+
raise AuthenticationError(self.id + ' watchOrderBook/watchOrderBookForSymbols requires authentication for self depth. Add credentials or change the depth option to books or books5')
|
482
487
|
await self.authenticate({'access': 'public'})
|
483
488
|
topics = []
|
484
489
|
messageHashes = []
|
@@ -539,6 +544,8 @@ class okx(ccxt.async_support.okx):
|
|
539
544
|
storedBids = orderbook['bids']
|
540
545
|
self.handle_deltas(storedAsks, asks)
|
541
546
|
self.handle_deltas(storedBids, bids)
|
547
|
+
marketId = self.safe_string(message, 'instId')
|
548
|
+
symbol = self.safe_symbol(marketId)
|
542
549
|
checksum = self.safe_bool(self.options, 'checksum', True)
|
543
550
|
if checksum:
|
544
551
|
asksLength = len(storedAsks)
|
@@ -556,6 +563,8 @@ class okx(ccxt.async_support.okx):
|
|
556
563
|
localChecksum = self.crc32(payload, True)
|
557
564
|
if responseChecksum != localChecksum:
|
558
565
|
error = InvalidNonce(self.id + ' invalid checksum')
|
566
|
+
del client.subscriptions[messageHash]
|
567
|
+
del self.orderbooks[symbol]
|
559
568
|
client.reject(error, messageHash)
|
560
569
|
timestamp = self.safe_integer(message, 'ts')
|
561
570
|
orderbook['timestamp'] = timestamp
|
@@ -648,10 +657,10 @@ class okx(ccxt.async_support.okx):
|
|
648
657
|
# ]
|
649
658
|
# }
|
650
659
|
#
|
651
|
-
arg = self.
|
660
|
+
arg = self.safe_dict(message, 'arg', {})
|
652
661
|
channel = self.safe_string(arg, 'channel')
|
653
662
|
action = self.safe_string(message, 'action')
|
654
|
-
data = self.
|
663
|
+
data = self.safe_list(message, 'data', [])
|
655
664
|
marketId = self.safe_string(arg, 'instId')
|
656
665
|
market = self.safe_market(marketId)
|
657
666
|
symbol = market['symbol']
|
@@ -1416,23 +1425,18 @@ class okx(ccxt.async_support.okx):
|
|
1416
1425
|
# {event: 'error', msg: "Illegal request: {"op":"subscribe","args":["spot/ticker:BTC-USDT"]}", code: "60012"}
|
1417
1426
|
# {event: 'error", msg: "channel:ticker,instId:BTC-USDT doesn"t exist", code: "60018"}
|
1418
1427
|
#
|
1419
|
-
errorCode = self.
|
1428
|
+
errorCode = self.safe_string(message, 'code')
|
1420
1429
|
try:
|
1421
|
-
if errorCode:
|
1430
|
+
if errorCode and errorCode != '0':
|
1422
1431
|
feedback = self.id + ' ' + self.json(message)
|
1423
1432
|
self.throw_exactly_matched_exception(self.exceptions['exact'], errorCode, feedback)
|
1424
1433
|
messageString = self.safe_value(message, 'msg')
|
1425
1434
|
if messageString is not None:
|
1426
1435
|
self.throw_broadly_matched_exception(self.exceptions['broad'], messageString, feedback)
|
1436
|
+
raise ExchangeError(feedback)
|
1427
1437
|
except Exception as e:
|
1428
|
-
|
1429
|
-
|
1430
|
-
client.reject(e, messageHash)
|
1431
|
-
if messageHash in client.subscriptions:
|
1432
|
-
del client.subscriptions[messageHash]
|
1433
|
-
return False
|
1434
|
-
else:
|
1435
|
-
client.reject(e)
|
1438
|
+
client.reject(e)
|
1439
|
+
return False
|
1436
1440
|
return message
|
1437
1441
|
|
1438
1442
|
def handle_message(self, client: Client, message):
|