v4.5.75

parruda/swarmv4.5.75Aug 21, 2026by ccxt-release[bot]

AI Summary

Addresses WebSocket frame routing issues and introduces performance optimizations for order book handling. Includes fixes for account data frames falling through to order book handlers.

Key Highlights

  • Fixed account websocket frames falling through to order book handlers
  • Refactored Binance authentication to use single-flight primitives
  • Speed up ArrayCache append hot path by 63%-93%
  • Implemented ws auth single-flight primitives

New Features

  • WebSocket frame routing fix
  • Auth refactoring to single-flight
  • ArrayCache performance optimization
  • Base single-flight guards for concurrent auth

Full Release Notes

## What's Changed
* test(bitmex): skip the last-vs-median ticker check through the wind-down by @kroitor in https://github.com/ccxt/ccxt/pull/29914
* bingx: fix websocket balance routing by @AresArtemius in https://github.com/ccxt/ccxt/pull/29936
* fix(poloniex): map futures v3 error codes by @rayBastard in https://github.com/ccxt/ccxt/pull/29920
* fix(krakenfutures): parse unrealizedPnl in parsePosition by @shuxue6662-a11y in https://github.com/ccxt/ccxt/pull/29937
* fix(binance): deduplicate and merge keepAliveStockListenKey into keepAliveListenKey by @kroitor in https://github.com/ccxt/ccxt/pull/29908
* fix(krakenfutures): don't resolve watchPositions with empty list on malformed frame by @shuxue6662-a11y in https://github.com/ccxt/ccxt/pull/29943
* fix(extended): stop account ws frames falling through to handleOrderBook by @carlotestor in https://github.com/ccxt/ccxt/pull/29942
* fix(binance): guard option and stock from the linear/inverse rewrite in authenticate by @kroitor in https://github.com/ccxt/ccxt/pull/29946
* perf(pro): speed up ArrayCache append hot path -63%..-93% by @carlotestor in https://github.com/ccxt/ccxt/pull/29945
* refactor(binance)!: fold authenticateStock into authenticate by @kroitor in https://github.com/ccxt/ccxt/pull/29950
* fix(cs): settle Future.reject once, under the resolve lock by @kroitor in https://github.com/ccxt/ccxt/pull/29951
* fix(poloniex): TRC20 withdrawals must send network TRX, not TRON by @rayBastard in https://github.com/ccxt/ccxt/pull/29954
* ci: move language workflows back to GitHub-hosted runners by @frosty00 in https://github.com/ccxt/ccxt/pull/29957
* Revert "ci: move language workflows back to GitHub-hosted runners" by @frosty00 in https://github.com/ccxt/ccxt/pull/29959
* fix(build): go ws client casts panic when the transport hands a *WSClient by @carlosmiei in https://github.com/ccxt/ccxt/pull/29962
* fix(cs): normalize mixed numeric boxes in sortBy keys by @kroitor in https://github.com/ccxt/ccxt/pull/29964
* fix(poloniex): map unified clientOrderId to clOrdId for swap orders by @rayBastard in https://github.com/ccxt/ccxt/pull/29966
* fix(phemex): apply amount precision to swap order quantity in createOrder by @rayBastard in https://github.com/ccxt/ccxt/pull/29967
* refactor(binance): centralize user-data type derivation in resolveAuthType by @kroitor in https://github.com/ccxt/ccxt/pull/29969
* fix(krakenfutures): map open_orders cancel reason to unified status by @official-burak in https://github.com/ccxt/ccxt/pull/29970
* fix(kucoin): priceChgPct on contracts is a ratio, so scale it by @mkzung in https://github.com/ccxt/ccxt/pull/29918
* fix(kraken): watchOHLCV returned strings in descending order by @mkzung in https://github.com/ccxt/ccxt/pull/29976
* fix(toobit): strip the _OPEN and _CLOSE suffix from the order side by @mkzung in https://github.com/ccxt/ccxt/pull/29974
* fix(foxbit): drop the misspelt fecthOrderBook capability flag by @mkzung in https://github.com/ccxt/ccxt/pull/29973
* feat(base): ws auth single-flight primitives by @kroitor in https://github.com/ccxt/ccxt/pull/29903
* fix(bitmex): the watchPositions flag is spelled watchPostions by @mkzung in https://github.com/ccxt/ccxt/pull/29972
* refactor(binance): migrate authenticate to the singleFlight primitives by @kroitor in https://github.com/ccxt/ccxt/pull/29977
* fix(aster): prevent concurrent ws auth races via base single-flight guard by @kroitor in https://github.com/ccxt/ccxt/pull/29984
* fix(binance): reject the auth flight on an empty listenKey by @kroitor in https://github.com/ccxt/ccxt/pull/29986
* fix(bingx): prevent concurrent ws auth races via base single-flight guard by @kroitor in https://github.com/ccxt/ccxt/pull/29987
* test(exchange): exempt option markets from ticker percentage bounds by @kroitor in https://github.com/ccxt/ccxt/pull/29988
* chore(tests): store JSON request fixture output as objects by @carlotestor in https://github.com/ccxt/ccxt/pull/29980
* fix(toobit): a reduce-only order was sent on the opposite side by @mkzung in https://github.com/ccxt/ccxt/pull/29982
* perf(js): precise methods  (version 1) by @ttodua in https://github.com/ccxt/ccxt/pull/29952
* fix(phemex): correct fetchPositionsADLRank jsdoc name and unify scale getters by @rayBastard in https://github.com/ccxt/ccxt/pull/29985
* chore: remove this[method] from rest side by @carlosmiei in https://github.com/ccxt/ccxt/pull/30003
* revert(pro): drop Client.resolve pending-results queue by @carlotestor in https://github.com/ccxt/ccxt/pull/30008
* fix(java): guard WsClient futures/rejections with a monitor by @carlotestor in https://github.com/ccxt/ccxt/pull/30004
* fix(bitmex, cryptocom): watchPositions never resolves for a symbol-filtered subscription by @mkzung in https://github.com/ccxt/ccxt/pull/29981
* fix(binance): load stock markets if in options by @carlosmiei in https://github.com/ccxt/ccxt/pull/30010
* refactor(pro): inline the ws auth single-flight logic into authenticate() by @carlotestor in https://github.com/ccxt/ccxt/pull/29992

## New Contributors
* @shuxue6662-a11y made their first contribution in https://github.com/ccxt/ccxt/pull/29937
* @official-burak made their first contribution in https://github.com/ccxt/ccxt/pull/29970

**Full Changelog**: https://github.com/ccxt/ccxt/compare/v4.5.74...v4.5.75