dcex 0.26.2__tar.gz → 0.26.3__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.
- {dcex-0.26.2 → dcex-0.26.3}/Cargo.lock +1 -1
- {dcex-0.26.2 → dcex-0.26.3}/PKG-INFO +1 -1
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/CHANGELOG.md +7 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/Cargo.toml +1 -1
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/tests/live_http_parity/binance.rs +3 -2
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/tests/live_http_parity/common.rs +26 -3
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/tests/live_stateful/aster.rs +24 -4
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/tests/live_stateful/backpack.rs +24 -4
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/tests/live_stateful/binance.rs +81 -21
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/tests/live_stateful/bingx.rs +78 -46
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/tests/live_stateful/bitget.rs +34 -21
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/tests/live_stateful/bitmart.rs +65 -19
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/tests/live_stateful/bitmex.rs +60 -19
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/tests/live_stateful/bybit.rs +174 -21
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/tests/live_stateful/common.rs +13 -27
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/tests/live_stateful/gateio.rs +174 -43
- dcex-0.26.3/crates/dcex/tests/live_stateful/hyperliquid.rs +231 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/tests/live_stateful/kraken.rs +225 -29
- dcex-0.26.3/crates/dcex/tests/live_stateful/kucoin.rs +176 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/tests/live_stateful/lighter.rs +166 -3
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/tests/live_stateful/mexc.rs +169 -30
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/tests/live_stateful/okx.rs +142 -27
- {dcex-0.26.2 → dcex-0.26.3}/pyproject.toml +1 -1
- dcex-0.26.2/crates/dcex/tests/live_stateful/hyperliquid.rs +0 -106
- dcex-0.26.2/crates/dcex/tests/live_stateful/kucoin.rs +0 -80
- {dcex-0.26.2 → dcex-0.26.3}/Cargo.toml +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/LICENSE +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/LICENSES/Apache-2.0.txt +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/README.md +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/THIRD_PARTY_NOTICES.md +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/README.md +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/aster_public.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/aster_ws_private_readonly.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/aster_ws_public.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/backpack_public.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/backpack_ws_private_readonly.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/backpack_ws_public.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/binance_public.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/binance_time.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/binance_ws_private_readonly.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/binance_ws_public.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/bingx_public.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/bingx_ws_private_readonly.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/bingx_ws_public.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/bitget_public.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/bitget_ws_private_readonly.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/bitget_ws_public.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/bitmart_public.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/bitmart_ws_private_readonly.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/bitmart_ws_public.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/bitmex_public.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/bitmex_ws_private_readonly.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/bitmex_ws_public.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/bybit_public.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/bybit_ws_private_readonly.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/bybit_ws_public.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/core_local_benchmark.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/gateio_public.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/gateio_ws_private_readonly.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/gateio_ws_public.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/hyperliquid_public.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/hyperliquid_ws_private_readonly.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/hyperliquid_ws_public.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/kraken_public.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/kraken_ws_private_readonly.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/kraken_ws_public.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/kucoin_public.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/kucoin_ws_private_readonly.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/kucoin_ws_public.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/lighter_bench.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/lighter_public.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/lighter_ws_private_readonly.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/lighter_ws_public.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/mexc_public.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/mexc_ws_private_readonly.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/mexc_ws_public.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/okx_public.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/okx_ws_private_readonly.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/okx_ws_public.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/public_http_benchmark.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/common.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/crypto.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/ethereum.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchange.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/aster/account.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/aster/client.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/aster/endpoints.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/aster/market.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/aster/mod.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/aster/params.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/aster/signing.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/aster/tests.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/aster/trade.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/aster/websocket/mod.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/aster/websocket/private.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/aster/websocket/public.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/aster/wrappers.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/backpack/account.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/backpack/client.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/backpack/endpoints.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/backpack/market.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/backpack/mod.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/backpack/params.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/backpack/signing.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/backpack/tests.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/backpack/trade.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/backpack/websocket/mod.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/backpack/websocket/private.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/backpack/websocket/public.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/backpack/wrappers.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/binance/account.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/binance/client.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/binance/endpoints.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/binance/market.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/binance/mod.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/binance/params.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/binance/private.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/binance/signing.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/binance/stream.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/binance/tests.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/binance/trade.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/binance/websocket/mod.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/binance/websocket/private.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/binance/websocket/public.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bingx/account.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bingx/client.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bingx/endpoints.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bingx/market.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bingx/mod.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bingx/params.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bingx/private.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bingx/signing.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bingx/tests.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bingx/trade.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bingx/websocket/mod.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bingx/websocket/private.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bingx/websocket/public.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bingx/wrappers.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitget/account.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitget/client.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitget/endpoints.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitget/market.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitget/mod.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitget/params.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitget/private.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitget/signing.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitget/tests.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitget/trade.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitget/websocket/mod.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitget/websocket/private.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitget/websocket/public.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitget/wrappers.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitmart/account.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitmart/client.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitmart/endpoints.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitmart/market.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitmart/mod.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitmart/params.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitmart/private.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitmart/signing.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitmart/tests.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitmart/trade.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitmart/websocket/mod.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitmart/websocket/private.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitmart/websocket/public.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitmart/wrappers.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitmex/account.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitmex/client.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitmex/endpoints.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitmex/market.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitmex/mod.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitmex/params.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitmex/position.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitmex/private.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitmex/signing.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitmex/tests.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitmex/trade.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitmex/trading.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitmex/websocket/mod.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitmex/websocket/private.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitmex/websocket/public.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitmex/wrappers.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bybit/account.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bybit/asset.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bybit/client.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bybit/endpoints.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bybit/market.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bybit/mod.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bybit/params.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bybit/position.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bybit/private.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bybit/signing.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bybit/trade.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bybit/websocket/mod.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bybit/websocket/private.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bybit/websocket/public.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bybit/wrappers.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/gateio/account.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/gateio/client.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/gateio/endpoints.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/gateio/market.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/gateio/mod.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/gateio/params.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/gateio/private.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/gateio/signing.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/gateio/tests.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/gateio/trade.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/gateio/websocket/mod.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/gateio/websocket/private.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/gateio/websocket/public.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/gateio/wrappers.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/hyperliquid/account.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/hyperliquid/asset.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/hyperliquid/client.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/hyperliquid/endpoints.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/hyperliquid/market.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/hyperliquid/mod.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/hyperliquid/msgpack.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/hyperliquid/params.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/hyperliquid/signing.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/hyperliquid/tests.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/hyperliquid/trade.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/hyperliquid/websocket/mod.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/hyperliquid/websocket/private.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/hyperliquid/websocket/public.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/hyperliquid/wrappers.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/kraken/account.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/kraken/client.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/kraken/endpoints.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/kraken/market.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/kraken/mod.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/kraken/params.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/kraken/private.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/kraken/signing.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/kraken/tests.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/kraken/trade.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/kraken/websocket/mod.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/kraken/websocket/private.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/kraken/websocket/public.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/kraken/wrappers.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/kucoin/account.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/kucoin/client.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/kucoin/endpoints.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/kucoin/market.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/kucoin/mod.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/kucoin/params.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/kucoin/private.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/kucoin/signing.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/kucoin/tests.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/kucoin/trade.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/kucoin/websocket/mod.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/kucoin/websocket/private.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/kucoin/websocket/public.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/kucoin/wrappers.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/lighter/account.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/lighter/client.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/lighter/endpoints.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/lighter/market.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/lighter/mod.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/lighter/params.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/lighter/signing.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/lighter/tests.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/lighter/trade.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/lighter/websocket/mod.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/lighter/websocket/private.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/lighter/websocket/public.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/lighter/wrappers.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/mexc/account.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/mexc/client.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/mexc/endpoints.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/mexc/market.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/mexc/mod.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/mexc/params.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/mexc/private.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/mexc/signing.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/mexc/tests.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/mexc/trade.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/mexc/websocket/mod.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/mexc/websocket/private.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/mexc/websocket/public.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/mexc/wrappers.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/mod.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/okx/account.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/okx/asset.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/okx/client.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/okx/endpoints.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/okx/market.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/okx/mod.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/okx/params.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/okx/private.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/okx/signing.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/okx/tests.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/okx/trade.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/okx/websocket/mod.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/okx/websocket/private.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/okx/websocket/public.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/okx/wrappers.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/http.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/lib.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/lighter.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/product_table.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/product_table_fetch/exchanges.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/product_table_fetch/tests.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/product_table_fetch.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/ws/aster.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/ws/backpack.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/ws/binance.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/ws/bingx.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/ws/bitget.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/ws/bitmart.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/ws/bitmex.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/ws/bybit.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/ws/connection.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/ws/gateio.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/ws/hyperliquid.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/ws/kraken.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/ws/kucoin.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/ws/lighter.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/ws/mexc.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/ws/mod.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/ws/okx.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/tests/api_surface.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/tests/live_http_parity/aster.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/tests/live_http_parity/backpack.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/tests/live_http_parity/bingx.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/tests/live_http_parity/bitget.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/tests/live_http_parity/bitmart.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/tests/live_http_parity/bitmex.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/tests/live_http_parity/bybit.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/tests/live_http_parity/gateio.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/tests/live_http_parity/hyperliquid.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/tests/live_http_parity/kraken.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/tests/live_http_parity/kucoin.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/tests/live_http_parity/lighter.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/tests/live_http_parity/mexc.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/tests/live_http_parity/okx.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/tests/live_http_parity.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/tests/live_stateful.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/Cargo.toml +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/src/clients/aster.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/src/clients/backpack.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/src/clients/binance.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/src/clients/bingx.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/src/clients/bitget.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/src/clients/bitmart.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/src/clients/bitmex.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/src/clients/bybit.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/src/clients/gateio.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/src/clients/http.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/src/clients/hyperliquid.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/src/clients/kraken.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/src/clients/kucoin.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/src/clients/lighter.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/src/clients/mexc.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/src/clients/okx.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/src/functions.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/src/lib.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/src/product_table.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/src/ws/aster.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/src/ws/backpack.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/src/ws/binance.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/src/ws/bingx.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/src/ws/bitget.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/src/ws/bitmart.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/src/ws/bitmex.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/src/ws/bybit.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/src/ws/gateio.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/src/ws/hyperliquid.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/src/ws/kraken.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/src/ws/kucoin.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/src/ws/lighter.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/src/ws/mexc.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/src/ws/okx.rs +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/__init__.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/_native.pyi +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/_native_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/aster/__init__.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/aster/_account_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/aster/_http_manager.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/aster/_market_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/aster/_trade_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/aster/client.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/__init__.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/aster/__init__.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/aster/_account_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/aster/_http_manager.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/aster/_market_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/aster/_trade_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/aster/client.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/backpack/__init__.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/backpack/_account_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/backpack/_http_manager.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/backpack/_market_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/backpack/_trade_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/backpack/client.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/binance/__init__.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/binance/_account_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/binance/_http_manager.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/binance/_market_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/binance/_trade_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/binance/client.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/binance/enums.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/bingx/__init__.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/bingx/_account_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/bingx/_http_manager.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/bingx/_market_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/bingx/_trade_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/bingx/client.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/bitget/__init__.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/bitget/_account_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/bitget/_http_manager.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/bitget/_market_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/bitget/_trade_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/bitget/client.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/bitmart/__init__.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/bitmart/_account_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/bitmart/_http_manager.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/bitmart/_market_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/bitmart/_trade_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/bitmart/client.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/bitmex/__init__.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/bitmex/_account_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/bitmex/_http_manager.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/bitmex/_market_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/bitmex/_position_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/bitmex/_trade_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/bitmex/_trading_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/bitmex/client.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/bybit/__init__.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/bybit/_account_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/bybit/_asset_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/bybit/_http_manager.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/bybit/_market_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/bybit/_position_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/bybit/_trade_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/bybit/client.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/gateio/__init__.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/gateio/_account_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/gateio/_http_manager.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/gateio/_market_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/gateio/_trade_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/gateio/client.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/hyperliquid/__init__.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/hyperliquid/_account_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/hyperliquid/_asset_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/hyperliquid/_http_manager.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/hyperliquid/_market_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/hyperliquid/_trade_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/hyperliquid/client.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/kraken/__init__.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/kraken/_account_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/kraken/_http_manager.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/kraken/_market_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/kraken/_trade_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/kraken/client.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/kucoin/__init__.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/kucoin/_account_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/kucoin/_http_manager.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/kucoin/_market_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/kucoin/_trade_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/kucoin/client.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/lighter/__init__.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/lighter/_account_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/lighter/_http_manager.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/lighter/_market_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/lighter/_trade_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/lighter/client.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/mexc/__init__.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/mexc/_account_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/mexc/_http_manager.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/mexc/_market_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/mexc/_trade_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/mexc/client.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/okx/__init__.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/okx/_account_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/okx/_asset_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/okx/_http_manager.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/okx/_market_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/okx/_public_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/okx/_trade_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/okx/client.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/product_table/fetch.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/product_table/manager.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/backpack/__init__.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/backpack/_account_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/backpack/_http_manager.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/backpack/_market_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/backpack/_trade_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/backpack/client.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/base/__init__.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/base/http_manager.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/binance/__init__.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/binance/_account_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/binance/_http_manager.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/binance/_market_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/binance/_trade_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/binance/client.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/binance/enums.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/bingx/__init__.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/bingx/_account_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/bingx/_http_manager.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/bingx/_market_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/bingx/_trade_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/bingx/client.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/bitget/__init__.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/bitget/_account_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/bitget/_http_manager.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/bitget/_market_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/bitget/_trade_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/bitget/client.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/bitmart/__init__.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/bitmart/_account_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/bitmart/_http_manager.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/bitmart/_market_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/bitmart/_trade_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/bitmart/client.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/bitmex/__init__.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/bitmex/_account_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/bitmex/_http_manager.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/bitmex/_market_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/bitmex/_position_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/bitmex/_trade_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/bitmex/_trading_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/bitmex/client.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/bybit/__init__.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/bybit/_account_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/bybit/_asset_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/bybit/_http_manager.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/bybit/_market_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/bybit/_position_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/bybit/_trade_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/bybit/client.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/enums.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/gateio/__init__.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/gateio/_account_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/gateio/_http_manager.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/gateio/_market_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/gateio/_trade_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/gateio/client.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/hyperliquid/__init__.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/hyperliquid/_account_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/hyperliquid/_asset_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/hyperliquid/_http_manager.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/hyperliquid/_market_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/hyperliquid/_trade_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/hyperliquid/client.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/kraken/__init__.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/kraken/_account_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/kraken/_http_manager.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/kraken/_market_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/kraken/_trade_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/kraken/client.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/kucoin/__init__.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/kucoin/_account_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/kucoin/_http_manager.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/kucoin/_market_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/kucoin/_trade_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/kucoin/client.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/lighter/__init__.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/lighter/_account_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/lighter/_http_manager.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/lighter/_market_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/lighter/_trade_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/lighter/client.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/mexc/__init__.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/mexc/_account_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/mexc/_http_manager.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/mexc/_market_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/mexc/_trade_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/mexc/client.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/okx/__init__.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/okx/_account_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/okx/_asset_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/okx/_http_manager.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/okx/_market_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/okx/_public_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/okx/_trade_http.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/okx/client.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/product_table/_query.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/product_table/fetch.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/product_table/manager.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/registry.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/utils/address_utils.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/utils/common.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/utils/decimal_utils.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/utils/errors.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/utils/helpers.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/utils/jupyter_helper.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/utils/timeframe_utils.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/ws/__init__.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/ws/_base.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/ws/aster.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/ws/backpack.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/ws/binance.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/ws/bingx.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/ws/bitget.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/ws/bitmart.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/ws/bitmex.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/ws/bybit.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/ws/gateio.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/ws/hyperliquid.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/ws/kraken.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/ws/kucoin.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/ws/lighter.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/ws/mexc.py +0 -0
- {dcex-0.26.2 → dcex-0.26.3}/dcex/ws/okx.py +0 -0
|
@@ -6,7 +6,7 @@ edition.workspace = true
|
|
|
6
6
|
license.workspace = true
|
|
7
7
|
readme = "README.md"
|
|
8
8
|
repository.workspace = true
|
|
9
|
-
version = "0.4.
|
|
9
|
+
version = "0.4.4"
|
|
10
10
|
keywords = ["crypto", "trading", "exchange", "http"]
|
|
11
11
|
categories = ["api-bindings", "web-programming::http-client"]
|
|
12
12
|
|
|
@@ -4,14 +4,14 @@ use dcex::exchange::ValidatedResponse;
|
|
|
4
4
|
use dcex::exchanges::binance::BinanceClient;
|
|
5
5
|
|
|
6
6
|
use super::common::{
|
|
7
|
-
require_env,
|
|
7
|
+
require_env, run_cases_with_delay, run_private_cases, Case, BTC_USDT_SPOT, BTC_USDT_SWAP,
|
|
8
8
|
};
|
|
9
9
|
|
|
10
10
|
#[tokio::test]
|
|
11
11
|
#[ignore = "requires live exchange API access"]
|
|
12
12
|
async fn binance_public_live_parity() -> dcex::Result<()> {
|
|
13
13
|
let client = BinanceClient::public(Duration::from_secs(20))?;
|
|
14
|
-
|
|
14
|
+
run_cases_with_delay(
|
|
15
15
|
vec![
|
|
16
16
|
Case::new(
|
|
17
17
|
"get_spot_exchange_info",
|
|
@@ -95,6 +95,7 @@ async fn binance_public_live_parity() -> dcex::Result<()> {
|
|
|
95
95
|
],
|
|
96
96
|
),
|
|
97
97
|
],
|
|
98
|
+
Duration::from_secs(2),
|
|
98
99
|
|case| {
|
|
99
100
|
let client = client.clone();
|
|
100
101
|
async move { binance_public_case(&client, case).await }
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
use std::collections::HashMap;
|
|
2
2
|
use std::sync::OnceLock;
|
|
3
|
-
use std::time::{SystemTime, UNIX_EPOCH};
|
|
3
|
+
use std::time::{Duration, SystemTime, UNIX_EPOCH};
|
|
4
4
|
|
|
5
5
|
use dcex::exchange::ValidatedResponse;
|
|
6
|
+
use tokio::time::sleep;
|
|
6
7
|
|
|
7
8
|
pub(crate) const BTC_USDT_SPOT: &str = "BTC-USDT-SPOT";
|
|
8
9
|
pub(crate) const BTC_USDT_SWAP: &str = "BTC-USDT-SWAP";
|
|
@@ -51,7 +52,14 @@ pub(crate) fn require_env(names: &[&str]) -> Option<Vec<String>> {
|
|
|
51
52
|
if missing.is_empty() {
|
|
52
53
|
Some(values)
|
|
53
54
|
} else {
|
|
54
|
-
|
|
55
|
+
let message = format!(
|
|
56
|
+
"missing required live private environment variables: {}",
|
|
57
|
+
missing.join(", ")
|
|
58
|
+
);
|
|
59
|
+
if live_http_enabled() {
|
|
60
|
+
panic!("{message}");
|
|
61
|
+
}
|
|
62
|
+
eprintln!("skipping live private test; {message}");
|
|
55
63
|
None
|
|
56
64
|
}
|
|
57
65
|
}
|
|
@@ -95,7 +103,19 @@ fn assert_success(response: &ValidatedResponse) {
|
|
|
95
103
|
assert!(!response.data.is_null(), "{response:?}");
|
|
96
104
|
}
|
|
97
105
|
|
|
98
|
-
pub(crate) async fn run_cases<F, Fut>(cases: Vec<Case>,
|
|
106
|
+
pub(crate) async fn run_cases<F, Fut>(cases: Vec<Case>, request: F) -> dcex::Result<()>
|
|
107
|
+
where
|
|
108
|
+
F: FnMut(Case) -> Fut,
|
|
109
|
+
Fut: std::future::Future<Output = dcex::Result<ValidatedResponse>>,
|
|
110
|
+
{
|
|
111
|
+
run_cases_with_delay(cases, Duration::ZERO, request).await
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
pub(crate) async fn run_cases_with_delay<F, Fut>(
|
|
115
|
+
cases: Vec<Case>,
|
|
116
|
+
delay: Duration,
|
|
117
|
+
mut request: F,
|
|
118
|
+
) -> dcex::Result<()>
|
|
99
119
|
where
|
|
100
120
|
F: FnMut(Case) -> Fut,
|
|
101
121
|
Fut: std::future::Future<Output = dcex::Result<ValidatedResponse>>,
|
|
@@ -110,6 +130,9 @@ where
|
|
|
110
130
|
let response = request(case).await?;
|
|
111
131
|
assert_success(&response);
|
|
112
132
|
eprintln!("ok {method}");
|
|
133
|
+
if !delay.is_zero() {
|
|
134
|
+
sleep(delay).await;
|
|
135
|
+
}
|
|
113
136
|
}
|
|
114
137
|
Ok(())
|
|
115
138
|
}
|
|
@@ -4,8 +4,8 @@ use dcex::exchange::Exchange;
|
|
|
4
4
|
use dcex::exchanges::aster::AsterClient;
|
|
5
5
|
|
|
6
6
|
use super::common::{
|
|
7
|
-
assert_success, fetch_trading_details, minimum_order_quantity, params,
|
|
8
|
-
require_env, require_live_trading, require_order_id, BTC_USDT_SWAP,
|
|
7
|
+
assert_success, fetch_trading_details, live_test_error, minimum_order_quantity, params,
|
|
8
|
+
post_only_buy_price, require_env, require_live_trading, require_order_id, BTC_USDT_SWAP,
|
|
9
9
|
};
|
|
10
10
|
|
|
11
11
|
#[tokio::test]
|
|
@@ -39,8 +39,28 @@ async fn aster_futures_direct_live_stateful_order() -> dcex::Result<()> {
|
|
|
39
39
|
.as_array()
|
|
40
40
|
.is_some_and(|orders| !orders.is_empty())
|
|
41
41
|
{
|
|
42
|
-
|
|
43
|
-
|
|
42
|
+
let cancel = super::common::exchange_method_request(
|
|
43
|
+
&client,
|
|
44
|
+
"cancel_all_futures_open_orders",
|
|
45
|
+
params(&[("product_symbol", BTC_USDT_SWAP)]),
|
|
46
|
+
)
|
|
47
|
+
.await?;
|
|
48
|
+
assert_success(&cancel);
|
|
49
|
+
let remaining = super::common::exchange_method_request(
|
|
50
|
+
&client,
|
|
51
|
+
"get_futures_open_orders",
|
|
52
|
+
params(&[("product_symbol", BTC_USDT_SWAP)]),
|
|
53
|
+
)
|
|
54
|
+
.await?;
|
|
55
|
+
if remaining
|
|
56
|
+
.data
|
|
57
|
+
.as_array()
|
|
58
|
+
.is_some_and(|orders| !orders.is_empty())
|
|
59
|
+
{
|
|
60
|
+
return Err(live_test_error(
|
|
61
|
+
"Aster futures still has open BTC-USDT swap orders after cleanup",
|
|
62
|
+
));
|
|
63
|
+
}
|
|
44
64
|
}
|
|
45
65
|
|
|
46
66
|
let orderbook = client.get_futures_orderbook(BTC_USDT_SWAP).limit(5).await?;
|
|
@@ -4,8 +4,8 @@ use dcex::exchange::Exchange;
|
|
|
4
4
|
use dcex::exchanges::backpack::BackpackClient;
|
|
5
5
|
|
|
6
6
|
use super::common::{
|
|
7
|
-
assert_success, fetch_trading_details, minimum_order_quantity, params,
|
|
8
|
-
require_env, require_live_trading, require_order_id,
|
|
7
|
+
assert_success, fetch_trading_details, live_test_error, minimum_order_quantity, params,
|
|
8
|
+
post_only_buy_price, require_env, require_live_trading, require_order_id,
|
|
9
9
|
};
|
|
10
10
|
|
|
11
11
|
const BTC_USDC_SPOT: &str = "BTC-USDC-SPOT";
|
|
@@ -37,8 +37,28 @@ async fn backpack_direct_live_stateful_order() -> dcex::Result<()> {
|
|
|
37
37
|
.as_array()
|
|
38
38
|
.is_some_and(|orders| !orders.is_empty())
|
|
39
39
|
{
|
|
40
|
-
|
|
41
|
-
|
|
40
|
+
let cancel = super::common::exchange_method_request(
|
|
41
|
+
&client,
|
|
42
|
+
"cancel_open_orders",
|
|
43
|
+
params(&[("product_symbol", BTC_USDC_SPOT)]),
|
|
44
|
+
)
|
|
45
|
+
.await?;
|
|
46
|
+
assert_success(&cancel);
|
|
47
|
+
let remaining = super::common::exchange_method_request(
|
|
48
|
+
&client,
|
|
49
|
+
"get_open_orders",
|
|
50
|
+
params(&[("product_symbol", BTC_USDC_SPOT)]),
|
|
51
|
+
)
|
|
52
|
+
.await?;
|
|
53
|
+
if remaining
|
|
54
|
+
.data
|
|
55
|
+
.as_array()
|
|
56
|
+
.is_some_and(|orders| !orders.is_empty())
|
|
57
|
+
{
|
|
58
|
+
return Err(live_test_error(
|
|
59
|
+
"Backpack still has open BTC-USDC spot orders after cleanup",
|
|
60
|
+
));
|
|
61
|
+
}
|
|
42
62
|
}
|
|
43
63
|
|
|
44
64
|
let orderbook = super::common::exchange_method_request(
|
|
@@ -7,10 +7,10 @@ use tokio::time::sleep;
|
|
|
7
7
|
use super::common::{
|
|
8
8
|
assert_success, asset_amount, contains_non_empty_array, fetch_trading_details, find_f64,
|
|
9
9
|
first_bid_price, format_transfer_amount, format_transfer_amount_floor,
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
BTC_USDT_SPOT, BTC_USDT_SWAP,
|
|
10
|
+
insufficient_funds_error, leveraged_margin_required, live_test_error, margin_target,
|
|
11
|
+
minimum_order_quantity, parse_positive, post_only_buy_price_from_bid, price_below_market,
|
|
12
|
+
require_env, require_live_trading, require_order_id, wait_for_flat_position,
|
|
13
|
+
wait_for_positive_position, BTC_USDT_SPOT, BTC_USDT_SWAP,
|
|
14
14
|
};
|
|
15
15
|
|
|
16
16
|
struct TransferBack {
|
|
@@ -47,7 +47,11 @@ async fn binance_direct_live_stateful_order() -> dcex::Result<()> {
|
|
|
47
47
|
amount: "0".to_string(),
|
|
48
48
|
transfer_type: "",
|
|
49
49
|
},
|
|
50
|
-
None =>
|
|
50
|
+
None => {
|
|
51
|
+
return Err(live_test_error(
|
|
52
|
+
"Binance spot has insufficient transferable USDT for live stateful order",
|
|
53
|
+
));
|
|
54
|
+
}
|
|
51
55
|
};
|
|
52
56
|
|
|
53
57
|
let order_result = client
|
|
@@ -87,14 +91,7 @@ async fn binance_futures_direct_live_stateful_order() -> dcex::Result<()> {
|
|
|
87
91
|
Some(keys[1].clone()),
|
|
88
92
|
Duration::from_secs(20),
|
|
89
93
|
)?;
|
|
90
|
-
|
|
91
|
-
eprintln!("skipping Binance futures live stateful order; open BTC-USDT swap orders exist");
|
|
92
|
-
return Ok(());
|
|
93
|
-
}
|
|
94
|
-
if futures_position_abs(&client).await? > 0.0 {
|
|
95
|
-
eprintln!("skipping Binance futures live stateful order; BTC-USDT swap position exists");
|
|
96
|
-
return Ok(());
|
|
97
|
-
}
|
|
94
|
+
cleanup_binance_futures_state(&client).await?;
|
|
98
95
|
|
|
99
96
|
let ticker = client
|
|
100
97
|
.get_futures_ticker()
|
|
@@ -114,7 +111,11 @@ async fn binance_futures_direct_live_stateful_order() -> dcex::Result<()> {
|
|
|
114
111
|
leveraged_margin_required(bid, &quantity, &details, BINANCE_FUTURES_LEVERAGE_VALUE)?;
|
|
115
112
|
let transfer = match ensure_futures_usdt(&client, margin_target(required_usdt)).await? {
|
|
116
113
|
Some(transfer) => transfer,
|
|
117
|
-
None =>
|
|
114
|
+
None => {
|
|
115
|
+
return Err(live_test_error(
|
|
116
|
+
"Binance futures has insufficient transferable USDT for live stateful order",
|
|
117
|
+
));
|
|
118
|
+
}
|
|
118
119
|
};
|
|
119
120
|
|
|
120
121
|
let order_result = client
|
|
@@ -147,6 +148,12 @@ async fn binance_futures_direct_live_stateful_order() -> dcex::Result<()> {
|
|
|
147
148
|
.await;
|
|
148
149
|
let opened = match open_result {
|
|
149
150
|
Ok(opened) => opened,
|
|
151
|
+
Err(error) if insufficient_funds_error(&error) => {
|
|
152
|
+
return_binance_transfer(&client, &transfer).await?;
|
|
153
|
+
return Err(live_test_error(format!(
|
|
154
|
+
"Binance futures insufficient margin for market open: {error}"
|
|
155
|
+
)));
|
|
156
|
+
}
|
|
150
157
|
Err(error) => {
|
|
151
158
|
return_binance_transfer(&client, &transfer).await?;
|
|
152
159
|
return Err(error);
|
|
@@ -202,9 +209,6 @@ async fn ensure_spot_usdt(
|
|
|
202
209
|
}));
|
|
203
210
|
}
|
|
204
211
|
}
|
|
205
|
-
eprintln!(
|
|
206
|
-
"skipping Binance live stateful order; insufficient transferable USDT, required={required:.8}"
|
|
207
|
-
);
|
|
208
212
|
Ok(None)
|
|
209
213
|
}
|
|
210
214
|
|
|
@@ -242,12 +246,64 @@ async fn ensure_futures_usdt(
|
|
|
242
246
|
}));
|
|
243
247
|
}
|
|
244
248
|
}
|
|
245
|
-
eprintln!(
|
|
246
|
-
"skipping Binance futures live stateful order; insufficient transferable USDT, required={required:.8}"
|
|
247
|
-
);
|
|
248
249
|
Ok(None)
|
|
249
250
|
}
|
|
250
251
|
|
|
252
|
+
async fn cleanup_binance_futures_state(client: &BinanceClient) -> dcex::Result<()> {
|
|
253
|
+
if binance_open_swap_orders(client).await? {
|
|
254
|
+
let cancel = client.cancel_all_open_orders(BTC_USDT_SWAP).await?;
|
|
255
|
+
assert_success(&cancel);
|
|
256
|
+
sleep(Duration::from_secs(1)).await;
|
|
257
|
+
}
|
|
258
|
+
let open_algo = client
|
|
259
|
+
.get_all_open_futures_algo_orders()
|
|
260
|
+
.param("product_symbol", BTC_USDT_SWAP)
|
|
261
|
+
.await?;
|
|
262
|
+
if contains_non_empty_array(&open_algo.data, &["orders", "data"]) {
|
|
263
|
+
let cancel = client
|
|
264
|
+
.cancel_all_open_futures_algo_orders(BTC_USDT_SWAP)
|
|
265
|
+
.await?;
|
|
266
|
+
assert_success(&cancel);
|
|
267
|
+
sleep(Duration::from_secs(1)).await;
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
let amount = futures_position_amt(client).await?;
|
|
271
|
+
if amount != 0.0 {
|
|
272
|
+
let quantity = format_transfer_amount_floor(amount.abs(), 8);
|
|
273
|
+
let close = client
|
|
274
|
+
.place_market_order(
|
|
275
|
+
BTC_USDT_SWAP,
|
|
276
|
+
if amount > 0.0 { "SELL" } else { "BUY" },
|
|
277
|
+
quantity.as_str(),
|
|
278
|
+
)
|
|
279
|
+
.param("reduceOnly", "true")
|
|
280
|
+
.await?;
|
|
281
|
+
assert_success(&close);
|
|
282
|
+
sleep(Duration::from_secs(1)).await;
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
if binance_open_swap_orders(client).await? {
|
|
286
|
+
return Err(live_test_error(
|
|
287
|
+
"Binance futures still has open BTC-USDT swap orders after cleanup",
|
|
288
|
+
));
|
|
289
|
+
}
|
|
290
|
+
let open_algo = client
|
|
291
|
+
.get_all_open_futures_algo_orders()
|
|
292
|
+
.param("product_symbol", BTC_USDT_SWAP)
|
|
293
|
+
.await?;
|
|
294
|
+
if contains_non_empty_array(&open_algo.data, &["orders", "data"]) {
|
|
295
|
+
return Err(live_test_error(
|
|
296
|
+
"Binance futures still has open BTC-USDT algo orders after cleanup",
|
|
297
|
+
));
|
|
298
|
+
}
|
|
299
|
+
if wait_for_flat_position(|| futures_position_abs(client)).await? != 0.0 {
|
|
300
|
+
return Err(live_test_error(
|
|
301
|
+
"Binance futures BTC-USDT swap position still exists after cleanup",
|
|
302
|
+
));
|
|
303
|
+
}
|
|
304
|
+
Ok(())
|
|
305
|
+
}
|
|
306
|
+
|
|
251
307
|
async fn return_binance_transfer(
|
|
252
308
|
client: &BinanceClient,
|
|
253
309
|
transfer: &TransferBack,
|
|
@@ -298,8 +354,12 @@ async fn futures_usdt(client: &BinanceClient) -> dcex::Result<f64> {
|
|
|
298
354
|
}
|
|
299
355
|
|
|
300
356
|
async fn futures_position_abs(client: &BinanceClient) -> dcex::Result<f64> {
|
|
357
|
+
Ok(futures_position_amt(client).await?.abs())
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
async fn futures_position_amt(client: &BinanceClient) -> dcex::Result<f64> {
|
|
301
361
|
let response = client.get_future_position(BTC_USDT_SWAP).await?;
|
|
302
|
-
Ok(
|
|
362
|
+
Ok(find_f64(&response.data, &["positionAmt"]).unwrap_or(0.0))
|
|
303
363
|
}
|
|
304
364
|
|
|
305
365
|
async fn binance_open_swap_orders(client: &BinanceClient) -> dcex::Result<bool> {
|
|
@@ -6,8 +6,8 @@ use dcex::exchanges::bingx::BingxClient;
|
|
|
6
6
|
use super::common::{
|
|
7
7
|
assert_success, asset_amount, contains_non_empty_array, fetch_trading_details, find_f64,
|
|
8
8
|
first_bid_price, format_transfer_amount_floor, insufficient_funds_error,
|
|
9
|
-
leveraged_margin_required, margin_target, minimum_order_quantity, params,
|
|
10
|
-
price_below_market, require_env, require_live_trading, require_order_id,
|
|
9
|
+
leveraged_margin_required, live_test_error, margin_target, minimum_order_quantity, params,
|
|
10
|
+
post_only_buy_price, price_below_market, require_env, require_live_trading, require_order_id,
|
|
11
11
|
sum_abs_values_for_symbols, unique_client_id, wait_for_flat_position,
|
|
12
12
|
wait_for_positive_position, BTC_USDT_SPOT, BTC_USDT_SWAP,
|
|
13
13
|
};
|
|
@@ -40,10 +40,7 @@ async fn bingx_spot_direct_live_stateful_order() -> dcex::Result<()> {
|
|
|
40
40
|
Duration::from_secs(20),
|
|
41
41
|
)?;
|
|
42
42
|
|
|
43
|
-
|
|
44
|
-
eprintln!("skipping BingX spot live stateful order; open BTC-USDT spot orders exist");
|
|
45
|
-
return Ok(());
|
|
46
|
-
}
|
|
43
|
+
cleanup_bingx_spot_orders(&client).await?;
|
|
47
44
|
|
|
48
45
|
let orderbook = super::common::exchange_method_request(
|
|
49
46
|
&client,
|
|
@@ -62,10 +59,9 @@ async fn bingx_spot_direct_live_stateful_order() -> dcex::Result<()> {
|
|
|
62
59
|
let transfers = match ensure_bingx_usdt(&client, BINGX_SPOT_ACCOUNT, required_usdt).await? {
|
|
63
60
|
Some(transfers) => transfers,
|
|
64
61
|
None => {
|
|
65
|
-
|
|
66
|
-
"
|
|
67
|
-
);
|
|
68
|
-
return Ok(());
|
|
62
|
+
return Err(live_test_error(
|
|
63
|
+
"BingX spot has insufficient transferable USDT for live stateful order",
|
|
64
|
+
));
|
|
69
65
|
}
|
|
70
66
|
};
|
|
71
67
|
|
|
@@ -120,14 +116,7 @@ async fn bingx_swap_direct_live_stateful_order() -> dcex::Result<()> {
|
|
|
120
116
|
Duration::from_secs(20),
|
|
121
117
|
)?;
|
|
122
118
|
|
|
123
|
-
|
|
124
|
-
eprintln!("skipping BingX swap live stateful order; open BTC-USDT swap orders exist");
|
|
125
|
-
return Ok(());
|
|
126
|
-
}
|
|
127
|
-
if bingx_swap_position_abs(&client).await? > 0.0 {
|
|
128
|
-
eprintln!("skipping BingX swap live stateful order; BTC-USDT swap position exists");
|
|
129
|
-
return Ok(());
|
|
130
|
-
}
|
|
119
|
+
cleanup_bingx_swap_state(&client).await?;
|
|
131
120
|
|
|
132
121
|
let orderbook = super::common::exchange_method_request(
|
|
133
122
|
&client,
|
|
@@ -141,21 +130,15 @@ async fn bingx_swap_direct_live_stateful_order() -> dcex::Result<()> {
|
|
|
141
130
|
let market_price = bingx_swap_market_price(&client).await?;
|
|
142
131
|
let required_usdt =
|
|
143
132
|
leveraged_margin_required(market_price, &quantity, &details, BINGX_LEVERAGE_VALUE)?;
|
|
144
|
-
let transfers =
|
|
145
|
-
&client,
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
eprintln!(
|
|
154
|
-
"skipping BingX swap live stateful order; insufficient transferable USDT, required={required_usdt:.8}"
|
|
155
|
-
);
|
|
156
|
-
return Ok(());
|
|
157
|
-
}
|
|
158
|
-
};
|
|
133
|
+
let transfers =
|
|
134
|
+
match ensure_bingx_usdt(&client, BINGX_SWAP_ACCOUNT, margin_target(required_usdt)).await? {
|
|
135
|
+
Some(transfers) => transfers,
|
|
136
|
+
None => {
|
|
137
|
+
return Err(live_test_error(
|
|
138
|
+
"BingX swap has insufficient transferable USDT for live stateful order",
|
|
139
|
+
));
|
|
140
|
+
}
|
|
141
|
+
};
|
|
159
142
|
|
|
160
143
|
let order_result = super::common::exchange_method_request(
|
|
161
144
|
&client,
|
|
@@ -173,10 +156,9 @@ async fn bingx_swap_direct_live_stateful_order() -> dcex::Result<()> {
|
|
|
173
156
|
Ok(order) => order,
|
|
174
157
|
Err(error) if insufficient_funds_error(&error) => {
|
|
175
158
|
return_bingx_transfers(&client, &transfers).await?;
|
|
176
|
-
|
|
177
|
-
"
|
|
178
|
-
);
|
|
179
|
-
return Ok(());
|
|
159
|
+
return Err(live_test_error(format!(
|
|
160
|
+
"BingX swap insufficient margin for post-only order: {error}"
|
|
161
|
+
)));
|
|
180
162
|
}
|
|
181
163
|
Err(error) => {
|
|
182
164
|
return_bingx_transfers(&client, &transfers).await?;
|
|
@@ -219,10 +201,9 @@ async fn bingx_swap_direct_live_stateful_order() -> dcex::Result<()> {
|
|
|
219
201
|
Ok(market_order) => market_order,
|
|
220
202
|
Err(error) if insufficient_funds_error(&error) => {
|
|
221
203
|
return_bingx_transfers(&client, &transfers).await?;
|
|
222
|
-
|
|
223
|
-
"
|
|
224
|
-
);
|
|
225
|
-
return Ok(());
|
|
204
|
+
return Err(live_test_error(format!(
|
|
205
|
+
"BingX swap insufficient margin for market open: {error}"
|
|
206
|
+
)));
|
|
226
207
|
}
|
|
227
208
|
Err(error) => {
|
|
228
209
|
return_bingx_transfers(&client, &transfers).await?;
|
|
@@ -257,6 +238,25 @@ async fn bingx_spot_open_orders(client: &BingxClient) -> dcex::Result<bool> {
|
|
|
257
238
|
Ok(contains_non_empty_array(&response.data, &["orders"]))
|
|
258
239
|
}
|
|
259
240
|
|
|
241
|
+
async fn cleanup_bingx_spot_orders(client: &BingxClient) -> dcex::Result<()> {
|
|
242
|
+
if bingx_spot_open_orders(client).await? {
|
|
243
|
+
let cancel = super::common::exchange_method_request(
|
|
244
|
+
client,
|
|
245
|
+
"cancel_spot_open_orders",
|
|
246
|
+
params(&[("product_symbol", BTC_USDT_SPOT)]),
|
|
247
|
+
)
|
|
248
|
+
.await?;
|
|
249
|
+
assert_success(&cancel);
|
|
250
|
+
sleep(Duration::from_secs(1)).await;
|
|
251
|
+
}
|
|
252
|
+
if bingx_spot_open_orders(client).await? {
|
|
253
|
+
return Err(live_test_error(
|
|
254
|
+
"BingX spot still has open BTC-USDT orders after cleanup",
|
|
255
|
+
));
|
|
256
|
+
}
|
|
257
|
+
Ok(())
|
|
258
|
+
}
|
|
259
|
+
|
|
260
260
|
async fn bingx_swap_open_orders(client: &BingxClient) -> dcex::Result<bool> {
|
|
261
261
|
let response = super::common::exchange_method_request(
|
|
262
262
|
&client,
|
|
@@ -267,6 +267,40 @@ async fn bingx_swap_open_orders(client: &BingxClient) -> dcex::Result<bool> {
|
|
|
267
267
|
Ok(contains_non_empty_array(&response.data, &["orders"]))
|
|
268
268
|
}
|
|
269
269
|
|
|
270
|
+
async fn cleanup_bingx_swap_state(client: &BingxClient) -> dcex::Result<()> {
|
|
271
|
+
if bingx_swap_open_orders(client).await? {
|
|
272
|
+
let cancel = super::common::exchange_method_request(
|
|
273
|
+
client,
|
|
274
|
+
"cancel_swap_all_orders",
|
|
275
|
+
params(&[("product_symbol", BTC_USDT_SWAP)]),
|
|
276
|
+
)
|
|
277
|
+
.await?;
|
|
278
|
+
assert_success(&cancel);
|
|
279
|
+
sleep(Duration::from_secs(1)).await;
|
|
280
|
+
}
|
|
281
|
+
if bingx_swap_position_abs(client).await? != 0.0 {
|
|
282
|
+
let close = super::common::exchange_method_request(
|
|
283
|
+
client,
|
|
284
|
+
"close_swap_all_positions",
|
|
285
|
+
params(&[("product_symbol", BTC_USDT_SWAP)]),
|
|
286
|
+
)
|
|
287
|
+
.await?;
|
|
288
|
+
assert_success(&close);
|
|
289
|
+
sleep(Duration::from_secs(2)).await;
|
|
290
|
+
}
|
|
291
|
+
if bingx_swap_open_orders(client).await? {
|
|
292
|
+
return Err(live_test_error(
|
|
293
|
+
"BingX swap still has open BTC-USDT orders after cleanup",
|
|
294
|
+
));
|
|
295
|
+
}
|
|
296
|
+
if wait_for_flat_position(|| bingx_swap_position_abs(client)).await? != 0.0 {
|
|
297
|
+
return Err(live_test_error(
|
|
298
|
+
"BingX BTC-USDT swap position still exists after cleanup",
|
|
299
|
+
));
|
|
300
|
+
}
|
|
301
|
+
Ok(())
|
|
302
|
+
}
|
|
303
|
+
|
|
270
304
|
async fn bingx_swap_position_abs(client: &BingxClient) -> dcex::Result<f64> {
|
|
271
305
|
let response = super::common::exchange_method_request(
|
|
272
306
|
&client,
|
|
@@ -329,9 +363,7 @@ async fn ensure_bingx_usdt(
|
|
|
329
363
|
let source_available = match bingx_account_usdt(client, source_account).await {
|
|
330
364
|
Ok(value) => value,
|
|
331
365
|
Err(error) => {
|
|
332
|
-
eprintln!(
|
|
333
|
-
"skipping BingX transfer source {source_account}; balance unavailable: {error}"
|
|
334
|
-
);
|
|
366
|
+
eprintln!("BingX transfer source {source_account} balance unavailable: {error}");
|
|
335
367
|
continue;
|
|
336
368
|
}
|
|
337
369
|
};
|
|
@@ -341,7 +373,7 @@ async fn ensure_bingx_usdt(
|
|
|
341
373
|
Ok(value) => value,
|
|
342
374
|
Err(error) => {
|
|
343
375
|
eprintln!(
|
|
344
|
-
"
|
|
376
|
+
"BingX transfer route {source_account}->{target_account} transferable amount unavailable: {error}"
|
|
345
377
|
);
|
|
346
378
|
continue;
|
|
347
379
|
}
|
|
@@ -366,7 +398,7 @@ async fn ensure_bingx_usdt(
|
|
|
366
398
|
}
|
|
367
399
|
Err(error) => {
|
|
368
400
|
eprintln!(
|
|
369
|
-
"
|
|
401
|
+
"BingX transfer route {source_account}->{target_account} transfer failed: {error}"
|
|
370
402
|
);
|
|
371
403
|
}
|
|
372
404
|
}
|
|
@@ -8,10 +8,10 @@ use tokio::time::sleep;
|
|
|
8
8
|
use super::common::{
|
|
9
9
|
account_restriction, assert_success, asset_amount, bitget_unified_account_error,
|
|
10
10
|
contains_non_empty_array, fetch_trading_details, first_bid_price, format_transfer_amount,
|
|
11
|
-
format_transfer_amount_floor, leveraged_margin_required,
|
|
12
|
-
params, post_only_buy_price, price_below_market, push, require_env,
|
|
13
|
-
require_order_id, sum_abs_values_for_symbols, unique_client_id,
|
|
14
|
-
wait_for_positive_position, BTC_USDT_SPOT, BTC_USDT_SWAP,
|
|
11
|
+
format_transfer_amount_floor, leveraged_margin_required, live_test_error, margin_target,
|
|
12
|
+
minimum_order_quantity, params, post_only_buy_price, price_below_market, push, require_env,
|
|
13
|
+
require_live_trading, require_order_id, sum_abs_values_for_symbols, unique_client_id,
|
|
14
|
+
wait_for_flat_position, wait_for_positive_position, BTC_USDT_SPOT, BTC_USDT_SWAP,
|
|
15
15
|
};
|
|
16
16
|
|
|
17
17
|
const BITGET_FUTURES_PRODUCT_TYPE: &str = "USDT-FUTURES";
|
|
@@ -71,8 +71,9 @@ async fn bitget_direct_live_stateful_order() -> dcex::Result<()> {
|
|
|
71
71
|
let order = match order_result {
|
|
72
72
|
Ok(response) => response,
|
|
73
73
|
Err(error) if bitget_unified_account_error(&error) => {
|
|
74
|
-
|
|
75
|
-
|
|
74
|
+
return Err(live_test_error(format!(
|
|
75
|
+
"Bitget classic stateful order is unsupported on unified account: {error}"
|
|
76
|
+
)));
|
|
76
77
|
}
|
|
77
78
|
Err(error) => return Err(error),
|
|
78
79
|
};
|
|
@@ -126,14 +127,7 @@ async fn bitget_swap_direct_live_stateful_order() -> dcex::Result<()> {
|
|
|
126
127
|
)?;
|
|
127
128
|
let uta = is_uta(&client).await;
|
|
128
129
|
|
|
129
|
-
|
|
130
|
-
eprintln!("skipping Bitget swap live stateful order; open BTC-USDT swap orders exist");
|
|
131
|
-
return Ok(());
|
|
132
|
-
}
|
|
133
|
-
if bitget_swap_position_abs(&client, uta).await? > 0.0 {
|
|
134
|
-
eprintln!("skipping Bitget swap live stateful order; BTC-USDT swap position exists");
|
|
135
|
-
return Ok(());
|
|
136
|
-
}
|
|
130
|
+
cleanup_bitget_swap_state(&client, uta).await?;
|
|
137
131
|
|
|
138
132
|
let orderbook = super::common::exchange_method_request(
|
|
139
133
|
&client,
|
|
@@ -159,7 +153,11 @@ async fn bitget_swap_direct_live_stateful_order() -> dcex::Result<()> {
|
|
|
159
153
|
let transferred =
|
|
160
154
|
match ensure_bitget_futures_margin(&client, uta, margin_target(required_usdt)).await? {
|
|
161
155
|
Some(amount) => amount,
|
|
162
|
-
None =>
|
|
156
|
+
None => {
|
|
157
|
+
return Err(live_test_error(
|
|
158
|
+
"Bitget swap has insufficient transferable USDT for live stateful order",
|
|
159
|
+
));
|
|
160
|
+
}
|
|
163
161
|
};
|
|
164
162
|
|
|
165
163
|
let order_result = bitget_place_swap_post_only_buy(&client, uta, &quantity, &price).await;
|
|
@@ -305,6 +303,27 @@ async fn bitget_swap_position_abs(client: &BitgetClient, uta: bool) -> dcex::Res
|
|
|
305
303
|
))
|
|
306
304
|
}
|
|
307
305
|
|
|
306
|
+
async fn cleanup_bitget_swap_state(client: &BitgetClient, uta: bool) -> dcex::Result<()> {
|
|
307
|
+
if bitget_open_swap_orders(client, uta).await? {
|
|
308
|
+
return Err(live_test_error(
|
|
309
|
+
"Bitget swap has open BTC-USDT orders before live stateful order",
|
|
310
|
+
));
|
|
311
|
+
}
|
|
312
|
+
let position = bitget_swap_position_abs(client, uta).await?;
|
|
313
|
+
if position > 0.0 {
|
|
314
|
+
let quantity = format_transfer_amount_floor(position, 8);
|
|
315
|
+
let close = bitget_place_swap_market_sell_reduce_only(client, uta, &quantity).await?;
|
|
316
|
+
assert_success(&close);
|
|
317
|
+
sleep(Duration::from_secs(2)).await;
|
|
318
|
+
}
|
|
319
|
+
if wait_for_flat_position(|| bitget_swap_position_abs(client, uta)).await? != 0.0 {
|
|
320
|
+
return Err(live_test_error(
|
|
321
|
+
"Bitget BTC-USDT swap position still exists after cleanup",
|
|
322
|
+
));
|
|
323
|
+
}
|
|
324
|
+
Ok(())
|
|
325
|
+
}
|
|
326
|
+
|
|
308
327
|
async fn ensure_bitget_futures_margin(
|
|
309
328
|
client: &BitgetClient,
|
|
310
329
|
uta: bool,
|
|
@@ -316,16 +335,10 @@ async fn ensure_bitget_futures_margin(
|
|
|
316
335
|
}
|
|
317
336
|
let needed = required - futures;
|
|
318
337
|
if uta {
|
|
319
|
-
eprintln!(
|
|
320
|
-
"skipping Bitget UTA swap live stateful order; insufficient USDT, required={required:.8}, futures={futures:.8}"
|
|
321
|
-
);
|
|
322
338
|
return Ok(None);
|
|
323
339
|
}
|
|
324
340
|
let spot = bitget_spot_usdt(client).await?;
|
|
325
341
|
if spot < needed {
|
|
326
|
-
eprintln!(
|
|
327
|
-
"skipping Bitget swap live stateful order; insufficient transferable USDT, required={required:.8}, futures={futures:.8}, spot={spot:.8}"
|
|
328
|
-
);
|
|
329
342
|
return Ok(None);
|
|
330
343
|
}
|
|
331
344
|
let amount = format_transfer_amount(needed);
|