v4.5.71
stalwartlabs/stalwartv4.5.71Aug 4, 2026by ccxt-release[bot]
AI Summary
A maintenance release for the CCXT crypto library focusing on dual-stack networking, orderbook stability, and performance optimizations.
Key Highlights
- Implemented dual-stack Happy Eyeballs across multiple languages (Go, Java, C#, PHP, JS)
- Fixed orderbook recursion on snapshot failure (Base, HTX)
- Resolved WebSocket authentication race conditions (MEXC)
- Removed BitMart exchange
Breaking Changes
- BitMart exchange delisted
New Features
- Orderbook copy across languages
- Dual-stack Happy Eyeballs support
Full Release Notes
## What's Changed
* feat(aster): memoize walletAddress by @carlosmiei in https://github.com/ccxt/ccxt/pull/29342
* chore: add imgs to .gitattributes by @carlosmiei in https://github.com/ccxt/ccxt/pull/29343
* chore: update name by @carlosmiei in https://github.com/ccxt/ccxt/pull/29344
* chore: Try new img cs by @carlosmiei in https://github.com/ccxt/ccxt/pull/29345
* chore: disable part os of release temporarily by @carlosmiei in https://github.com/ccxt/ccxt/pull/29347
* chore: restore release.yml by @carlosmiei in https://github.com/ccxt/ccxt/pull/29348
* fix(okx): support fetchFundingRate(s) for XPERP futures by @rayBastard in https://github.com/ccxt/ccxt/pull/29350
* test(structure): start requiring strict structure by @ttodua in https://github.com/ccxt/ccxt/pull/25823
* fix(php): disable php8.5 warnings by @carlosmiei in https://github.com/ccxt/ccxt/pull/29351
* chore: update examples by @carlosmiei in https://github.com/ccxt/ccxt/pull/29358
* fix(js): enable dual-stack Happy Eyeballs on undici (10ms floor) by @carlotestor in https://github.com/ccxt/ccxt/pull/29352
* fix(go): explicit dual-stack DialContext in exchange.go (FallbackDelay=1ns) by @carlotestor in https://github.com/ccxt/ccxt/pull/29357
* fix(java): remove preferIPv4Stack for dual-stack IPv6 by @carlotestor in https://github.com/ccxt/ccxt/pull/29356
* fix(aster): encode privateKey before keccak hash cache by @carlotestor in https://github.com/ccxt/ccxt/pull/29360
* fix(cs): explicit dual-stack REST/WS (runtime HE; no delay knob on netstandard) by @carlotestor in https://github.com/ccxt/ccxt/pull/29355
* fix(php): explicit dual-stack curl + 1ms Happy Eyeballs timeout by @carlotestor in https://github.com/ccxt/ccxt/pull/29354
* fix(bybit): private ws methods Authentication error handling by @carlosmiei in https://github.com/ccxt/ccxt/pull/29362
* fix(python): explicit dual-stack aiohttp connector (happy_eyeballs_delay=0) by @carlotestor in https://github.com/ccxt/ccxt/pull/29353
* update eslint cache-strategy by @frosty00 in https://github.com/ccxt/ccxt/pull/29363
* chore(php): remove unused/delisted by @ttodua in https://github.com/ccxt/ccxt/pull/29367
* feat: orderbook copy across langs by @ttodua in https://github.com/ccxt/ccxt/pull/29280
* chore: try to fix some tests by @carlosmiei in https://github.com/ccxt/ccxt/pull/29371
* delist: remove bitmart by @carlosmiei in https://github.com/ccxt/ccxt/pull/29376
* chore(php): update reactphp-http-proxy version to 1.10 by @ttodua in https://github.com/ccxt/ccxt/pull/29366
* chore: bitmart leftovers by @carlosmiei in https://github.com/ccxt/ccxt/pull/29378
* chore: remove bitmart and id test by @carlosmiei in https://github.com/ccxt/ccxt/pull/29382
* chore(build): point ast-transpiler at GitHub master by @carlotestor in https://github.com/ccxt/ccxt/pull/29372
* feat(transpile): rm using null as the key parameter for array_key_exi… by @carlosmiei in https://github.com/ccxt/ccxt/pull/29385
* chore: expose timed out tests by @carlosmiei in https://github.com/ccxt/ccxt/pull/29377
* blofin: fill market limits (#23973) + fix inverse swap parsing by @kroitor in https://github.com/ccxt/ccxt/pull/29386
* fix(python): remove setuptools from runtime dependencies by @kroitor in https://github.com/ccxt/ccxt/pull/29387
* okx: fill limits.amount.max from maxLmtSz by @kroitor in https://github.com/ccxt/ccxt/pull/29388
* fix(poloniex): handle_order crash on fill events for uncached orders by @kroitor in https://github.com/ccxt/ccxt/pull/29389
* fix(python): pytest collect guard for the shipped ccxt/test harness (#29383) by @kroitor in https://github.com/ccxt/ccxt/pull/29390
* chore(deps): bump ast-transpiler lock to master (Java emit idempotency) by @carlotestor in https://github.com/ccxt/ccxt/pull/29391
* fix(mexc): prevent concurrent listenKey fetch race in ws authenticate by @kroitor in https://github.com/ccxt/ccxt/pull/29392
* fix(mexc): transpiler-safe comments in ws authenticate (php build hotfix) by @kroitor in https://github.com/ccxt/ccxt/pull/29394
* feat(bingx): anchor spot daily candles to UTC by default (timeZone option) by @kroitor in https://github.com/ccxt/ccxt/pull/29395
* fix(bingx): add timeZone to spot ohlcv request fixture by @kroitor in https://github.com/ccxt/ccxt/pull/29396
* chore(deps): bump ast-transpiler lock for java bare-rethrow fix by @kroitor in https://github.com/ccxt/ccxt/pull/29397
* fix(base): stop infinite loadOrderBook recursion on snapshot failure (all languages) by @kroitor in https://github.com/ccxt/ccxt/pull/29398
* fix(base): route loadOrderBook snapshots through the safe fetch + go orderbook reset by @kroitor in https://github.com/ccxt/ccxt/pull/29400
* fix(ws): match cache rows by symbol and id to survive cross-symbol order-id collisions by @kroitor in https://github.com/ccxt/ccxt/pull/29401
* fix(bybit): align fetchOHLCV start up to the interval boundary by @kroitor in https://github.com/ccxt/ccxt/pull/29402
* fix(htx): remove the messageHash-keyed subscription on ws error by @kroitor in https://github.com/ccxt/ccxt/pull/29404
* fix(examples): undefined loop in async-gather-concurrency.py [skip ci] by @kroitor in https://github.com/ccxt/ccxt/pull/29406
* fix(krakenfutures): guard parsePositions against missing openPositions + map INSUFFICIENT_MARGIN by @kroitor in https://github.com/ccxt/ccxt/pull/29407
* chore(deps): bump ast-transpiler lock to master HEAD by @carlotestor in https://github.com/ccxt/ccxt/pull/29410
* chore(java): silence varargs warnings in credential init by @kroitor in https://github.com/ccxt/ccxt/pull/29408
* fix(build): remove global.checker from C# transpiler wrapper by @carlotestor in https://github.com/ccxt/ccxt/pull/29405
* perf(build): go transpile single-process piscina threads by @carlotestor in https://github.com/ccxt/ccxt/pull/29380
* perf(build): java transpile single-process piscina threads by @carlotestor in https://github.com/ccxt/ccxt/pull/29379
* fix(coinone): migrate createOrder and fetchOpenOrders to the v2.1 api by @kroitor in https://github.com/ccxt/ccxt/pull/29411
* refactor(playground): replace the JavaScript tab with TypeScript by @pcriadoperez in https://github.com/ccxt/ccxt/pull/29409
* chore: skip btcbox live tests by @carlosmiei in https://github.com/ccxt/ccxt/pull/29413
* fix(bitget): send the execute prices for attached take profit and stop loss by @kroitor in https://github.com/ccxt/ccxt/pull/29414
* perf(build): csharp transpile single-process piscina threads by @carlotestor in https://github.com/ccxt/ccxt/pull/29381
* fix(kucoin,bitvavo): map cancel-after-fill errors to OrderNotFound by @kroitor in https://github.com/ccxt/ccxt/pull/29422
* fix(coinone): parse v2.1 open-order fills by @ShiroKSH in https://github.com/ccxt/ccxt/pull/29420
* fix(bingx): restore the 0x prefix on evm deposit addresses by @kroitor in https://github.com/ccxt/ccxt/pull/29423
* perf(build): skip unchanged exchanges and up-to-date stages in the go/java/cs transpilers unless --force by @carlotestor in https://github.com/ccxt/ccxt/pull/29419
* fix(transpile): keep the negation outside php string-method emissions by @kroitor in https://github.com/ccxt/ccxt/pull/29424
* playground: enable the Go runner in production by @carlotestor in https://github.com/ccxt/ccxt/pull/29418
* fix(bybit): derive the used balance from the margin fields in the wallet stream by @kroitor in https://github.com/ccxt/ccxt/pull/29425
* chore: abstract the exchange name out of the time difference comment by @kroitor in https://github.com/ccxt/ccxt/pull/29427
* chore: fix docstrings naming the wrong exchange by @kroitor in https://github.com/ccxt/ccxt/pull/29428
* chore(docs): build docs + playground images for amd64 on the new box by @pcriadoperez in https://github.com/ccxt/ccxt/pull/29429
* chore: abstract the seed patterns out of the docstrings by @kroitor in https://github.com/ccxt/ccxt/pull/29431
* fix(kucoineu): set only spot by @ttodua in https://github.com/ccxt/ccxt/pull/29432
* chore: fix typos in the inline comments by @kroitor in https://github.com/ccxt/ccxt/pull/29434
* fix(coinbaseinternational): send amount instead of ammount in transfer by @kroitor in https://github.com/ccxt/ccxt/pull/29435
* fix(p2b): reset the order book on full depth updates in the stream by @kroitor in https://github.com/ccxt/ccxt/pull/29436
* fix(xt): derive the order side for stop loss and take profit entries by @kroitor in https://github.com/ccxt/ccxt/pull/29438
* fix(bitget): guard the execute price when editing spot plan orders by @kroitor in https://github.com/ccxt/ccxt/pull/29439
* docs: modernize the php async dependency instructions by @kroitor in https://github.com/ccxt/ccxt/pull/29440
* chore(bybit): rename the filterExecTypes option to execType by @kroitor in https://github.com/ccxt/ccxt/pull/29441
* docs: mark the symbol as optional in the cancelAllOrders docstrings by @kroitor in https://github.com/ccxt/ccxt/pull/29442
* docs: clean up three cancelAllOrders docstrings by @kroitor in https://github.com/ccxt/ccxt/pull/29443
* fix(python): guard the ws receive callback against cancelled tasks by @kroitor in https://github.com/ccxt/ccxt/pull/29445
* perf(build): stage cleanups from REST/WS profile (no concurrent REST+WS) by @carlotestor in https://github.com/ccxt/ccxt/pull/29437
* docs: fix the watchOrderBookForSymbols return description by @kroitor in https://github.com/ccxt/ccxt/pull/29446
* update js.yml to use lint instead of eslint (to reuse the cache) by @frosty00 in https://github.com/ccxt/ccxt/pull/29450
* fix(playground): load OpenRouter free models dynamically at startup by @carlotestor in https://github.com/ccxt/ccxt/pull/29452
* playground: skip sum.golang.org for ccxt's own go module during provisioning by @carlotestor in https://github.com/ccxt/ccxt/pull/29426
* fix(playground): unbreak webpack `next dev` on undici in instrumentation by @carlotestor in https://github.com/ccxt/ccxt/pull/29456
* fix(playground): responsive mobile layout for docs playground by @carlotestor in https://github.com/ccxt/ccxt/pull/29453
* fix(kucoin): accumulate the average fill price in the spot order stream by @kroitor in https://github.com/ccxt/ccxt/pull/29458
* fix(bybit): stop ws trade ops from hanging on auth errors without a reqId by @kroitor in https://github.com/ccxt/ccxt/pull/29459
* chore: strip redundant trailing undefined arguments by @kroitor in https://github.com/ccxt/ccxt/pull/29460
* coinex - parseTransaction fee_ccy field fallback by @kroitor in https://github.com/ccxt/ccxt/pull/29461
* indodax - parseOrder filled amount from receive_{base} field by @kroitor in https://github.com/ccxt/ccxt/pull/29462
* fix(blockchaincom,woofipro): resolve PHP null array offset deprecations by @carlotestor in https://github.com/ccxt/ccxt/pull/29467
* feat(playground): generate AI assistant code for all languages by @carlotestor in https://github.com/ccxt/ccxt/pull/29465
* fix(coinbase): swap flag enable by @ttodua in https://github.com/ccxt/ccxt/pull/29448
* fix(python): refuse lazy open after close to stop aiohttp session leaks by @carlotestor in https://github.com/ccxt/ccxt/pull/29466
* fix(tests): trim third-party frames from PHP test stack traces by @carlotestor in https://github.com/ccxt/ccxt/pull/29468
* playground: raise run caps to 6 CPUs / 12 GB; restrict Go imports to stdlib + ccxt by @carlotestor in https://github.com/ccxt/ccxt/pull/29469
* playground: stop doubling the image with a post-build chown -R by @carlotestor in https://github.com/ccxt/ccxt/pull/29470
* chore(docs): cap the docs container's docker log by @pcriadoperez in https://github.com/ccxt/ccxt/pull/29471
* feat(playground): runnable Java runner with REST + WebSocket proxy support by @carlotestor in https://github.com/ccxt/ccxt/pull/29472
* fix(playground): install JDK 21 via Temurin on bookworm by @carlotestor in https://github.com/ccxt/ccxt/pull/29473
* fix(playground): base image on Debian 13 (trixie), JDK 21 from apt by @carlotestor in https://github.com/ccxt/ccxt/pull/29474
* fix(base): enable strictNullChecks compliance across ts/src by @carlotestor in https://github.com/ccxt/ccxt/pull/29229
* fix(coinbase): sort websocket trades and refresh stale skips by @manojpramesh in https://github.com/ccxt/ccxt/pull/29477
* Delist kucoineu by @frosty00 in https://github.com/ccxt/ccxt/pull/29480
* chore(build): remove unused utils/remove-exchange.ts by @carlotestor in https://github.com/ccxt/ccxt/pull/29482
* chore(build): filter exchanges.json in delist.sh by @carlotestor in https://github.com/ccxt/ccxt/pull/29481
* feat(playground): progressive primary AI Insert with silent multi-lang fill by @carlotestor in https://github.com/ccxt/ccxt/pull/29475
* fix(xt): route setMarginMode to inverse endpoint for coin-margined ma… by @rayBastard in https://github.com/ccxt/ccxt/pull/29463
* fix(bingx): correct 3x inflated amount in fetchMyTrades for linear swaps by @pcriadoperez in https://github.com/ccxt/ccxt/pull/29478
* python - explicit aiohttp ClientTimeout with sock_read to prevent indefinite hangs by @kroitor in https://github.com/ccxt/ccxt/pull/29486
* docs - define what the rateLimit number means by @kroitor in https://github.com/ccxt/ccxt/pull/29487
* feat(hyperliquid): add fetchFundingRate (singular) by @kroitor in https://github.com/ccxt/ccxt/pull/29488
* feat(website): add exchange API latency study blog post with animated world map by @pcriadoperez in https://github.com/ccxt/ccxt/pull/29479
* chore(cryptocom): remove option support by @ttodua in https://github.com/ccxt/ccxt/pull/29447
* fix(derive): spot & perp flags; skip maker sides for trades by @ttodua in https://github.com/ccxt/ccxt/pull/29444
* feat(xt): add funding rate watch and unwatch methods by @rayBastard in https://github.com/ccxt/ccxt/pull/29483
* feat(coinbase): add transfer between portfolios by @manojpramesh in https://github.com/ccxt/ccxt/pull/29370
* chore(ts): enable noImplicitOverride and add override modifiers by @carlotestor in https://github.com/ccxt/ccxt/pull/29490
* chore(python): remove unused fastflake.sh and qa.py by @carlotestor in https://github.com/ccxt/ccxt/pull/29493
* throw an error when strictNullChecks fails by @frosty00 in https://github.com/ccxt/ccxt/pull/29491
* fix(ts): clear remaining strictNullChecks residuals on master by @carlotestor in https://github.com/ccxt/ccxt/pull/29498
* chore(build): remove unused dead helpers and fixTSBug by @carlotestor in https://github.com/ccxt/ccxt/pull/29497
* docs(coinbase): add WebSocket market-data examples by @manojpramesh in https://github.com/ccxt/ccxt/pull/29496
* fix: resynchronize Nado order books after update gaps by @mvanhorn in https://github.com/ccxt/ccxt/pull/29492
* chore(ts): enable noUnusedLocals and remove unused locals by @carlotestor in https://github.com/ccxt/ccxt/pull/29489
* chore(ts): enable noPropertyAccessFromIndexSignature by @carlotestor in https://github.com/ccxt/ccxt/pull/29499
* fix(cs): correct hand-written C# type structs to match ts/src/base/types.ts by @carlotestor in https://github.com/ccxt/ccxt/pull/29502
* playground: post the assistant to a configured chat endpoint by @carlotestor in https://github.com/ccxt/ccxt/pull/29503
* chore(ts): enable noImplicitAny and eliminate residual implicit any by @carlotestor in https://github.com/ccxt/ccxt/pull/29494
* feat(go): type fetchDepositWithdrawFee(s) returns and close types.ts/Go struct gaps by @carlotestor in https://github.com/ccxt/ccxt/pull/29504
* feat(java): wire ADL and BalanceAccount into typed wrapper generator by @carlotestor in https://github.com/ccxt/ccxt/pull/29501
* bitbank - support ACCESS-TIME-WINDOW authentication, default to it by @kroitor in https://github.com/ccxt/ccxt/pull/29508
* move deploy to self-hosted by @frosty00 in https://github.com/ccxt/ccxt/pull/29509
* add timeout by @frosty00 in https://github.com/ccxt/ccxt/pull/29511
* build: generate base types from ts/src/base/types.ts for all language ports by @carlotestor in https://github.com/ccxt/ccxt/pull/29507
* fix(docs): allow https://ccxt.com to iframe docs.ccxt.com by @carlotestor in https://github.com/ccxt/ccxt/pull/29512
* chore(ts): replace broad `any` with honest domain types from base/types by @carlotestor in https://github.com/ccxt/ccxt/pull/29506
* feat(xt): add break-list functionality to position fetching by @rayBastard in https://github.com/ccxt/ccxt/pull/29500
* feat(bitvavo): add watchXForSymbols and unWatch methods by @carlosmiei in https://github.com/ccxt/ccxt/pull/29516
* chore: push missing file by @carlosmiei in https://github.com/ccxt/ccxt/pull/29518
* chore: fix go build by @carlosmiei in https://github.com/ccxt/ccxt/pull/29519
* fix(docs/playground): prediction markets support (allowlist + examples + ccxt 4.5.66) + ?theme= URL param by @carlotestor in https://github.com/ccxt/ccxt/pull/29513
* build(deps): bump cryptography from 49.0.0 to 50.0.0 by @dependabot[bot] in https://github.com/ccxt/ccxt/pull/29521
* playground: build the language runtimes before the app source (29 min deploy -> ~4 min) by @carlotestor in https://github.com/ccxt/ccxt/pull/29523
* fix(okxus): set correct market types by @ttodua in https://github.com/ccxt/ccxt/pull/29430
* chore: loosen some python deps by @carlosmiei in https://github.com/ccxt/ccxt/pull/29520
* js: bump undici dep to 7.29.0 by @carlosmiei in https://github.com/ccxt/ccxt/pull/29524
* fix(docs/playground): proxy prediction-market exchanges through the egress allowlist by @carlotestor in https://github.com/ccxt/ccxt/pull/29525
## New Contributors
* @ShiroKSH made their first contribution in https://github.com/ccxt/ccxt/pull/29420
* @manojpramesh made their first contribution in https://github.com/ccxt/ccxt/pull/29477
* @mvanhorn made their first contribution in https://github.com/ccxt/ccxt/pull/29492
**Full Changelog**: https://github.com/ccxt/ccxt/compare/v4.5.70...v4.5.71