v4.5.76
parruda/swarmv4.5.76Aug 26, 2026by ccxt-release[bot]
AI Summary
Focuses on WebSocket authentication stability across multiple exchanges using single-flight primitives. Includes the official CCXT MCP server and refactoring of Binance authentication.
Key Highlights
- Implemented single-flight websocket token authentication for Lbank, Bitstamp, and others
- Released official CCXT MCP server
- Refactored Binance authentication (folded authenticateStock into authenticate)
- Improved PHP fiber performance
Breaking Changes
- fold authenticateStock into authenticate
New Features
- Single-flight websocket auth primitives
- CCXT MCP server
- Binance authentication refactoring
- PHP performance refactoring
Full Release Notes
## What's Changed * fix(lbank): single-flight subscribeKey authenticate (refs #29393) by @carlotestor in https://github.com/ccxt/ccxt/pull/29993 * fix(bitstamp): single-flight websocket token authenticate (refs #29393) by @carlotestor in https://github.com/ccxt/ccxt/pull/29994 * fix(xt): single-flight listen key acquisition (refs #29393) by @carlotestor in https://github.com/ccxt/ccxt/pull/29997 * fix(kraken): single-flight websockets token authenticate (refs #29393) by @carlotestor in https://github.com/ccxt/ccxt/pull/29996 * fix(whitebit): single-flight websocket token authenticate (refs #29393) by @carlotestor in https://github.com/ccxt/ccxt/pull/30000 * fix(bitrue): single-flight listenKey authenticate (refs #29393) by @carlotestor in https://github.com/ccxt/ccxt/pull/29999 * fix(hashkey): single-flight listenKey authenticate (refs #29393) by @carlotestor in https://github.com/ccxt/ccxt/pull/29995 * fix(tokocrypto): route fetchTrades by symbol type and await the open/v1 response by @rayBastard in https://github.com/ccxt/ccxt/pull/30013 * fix(bingx): correct fetchTrades limits by @AresArtemius in https://github.com/ccxt/ccxt/pull/30011 * fix(deepcoin): single-flight listenKey authenticate (refs #29393) by @carlotestor in https://github.com/ccxt/ccxt/pull/29998 * fix(bybit): anchor fetchOpenInterestHistory window when only since is given by @carlotestor in https://github.com/ccxt/ccxt/pull/30016 * fix(bithumb): remove incorrect ALT -> ArchLoot commonCurrencies mapping by @factec-kyle in https://github.com/ccxt/ccxt/pull/30015 * fix(gate): convert since to seconds in fetchOpenInterestHistory by @carlotestor in https://github.com/ccxt/ccxt/pull/30018 * chore: fix wiki-pushback by @carlosmiei in https://github.com/ccxt/ccxt/pull/30020 * fix(bingx): reject unsupported Coin-M fetchTrades by @AresArtemius in https://github.com/ccxt/ccxt/pull/30021 * fix(bingx): correct Coin-M open interest by @AresArtemius in https://github.com/ccxt/ccxt/pull/30026 * perf: python Precise by @ttodua in https://github.com/ccxt/ccxt/pull/30024 * docs(blog): add "Front-running the S-1" Anthropic-IPO prediction-markets post by @pcriadoperez in https://github.com/ccxt/ccxt/pull/30025 * fix(upbit): do not default unknown order side to sell by @rayBastard in https://github.com/ccxt/ccxt/pull/30012 * feat(mcp): official CCXT MCP server by @pcriadoperez in https://github.com/ccxt/ccxt/pull/29277 * chore(deps): bump hono from 4.12.31 to 4.13.3 in /mcp by @dependabot[bot] in https://github.com/ccxt/ccxt/pull/30029 * build(go): trampoline async cores so Promise.all fans out like the C#/Java ports by @carlotestor in https://github.com/ccxt/ccxt/pull/29647 * fix(java): bump msgpack-core to 0.9.12 (CVE-2026-21452) by @huiboxes in https://github.com/ccxt/ccxt/pull/30040 * refactor(php): one fiber per HTTP call (3 → 1) — collapse fetch2 and fetch by @carlotestor in https://github.com/ccxt/ccxt/pull/30039 * chore(deps): bump undici and ccxt in /mcp by @dependabot[bot] in https://github.com/ccxt/ccxt/pull/30030 * fix(whitebit): parse TradFi futures as swaps by @AresArtemius in https://github.com/ccxt/ccxt/pull/30033 * chore(deps): bump @hono/node-server from 1.19.14 to 1.19.17 in /mcp by @dependabot[bot] in https://github.com/ccxt/ccxt/pull/30032 * chore(deps): bump fast-uri from 3.1.4 to 3.1.5 in /mcp by @dependabot[bot] in https://github.com/ccxt/ccxt/pull/30035 * chore(deps): bump ip-address from 10.2.0 to 10.5.0 in /mcp by @dependabot[bot] in https://github.com/ccxt/ccxt/pull/30031 * fix(bingx): parse position liquidation price by @AresArtemius in https://github.com/ccxt/ccxt/pull/30034 * fix(bingx): parse Coin-M funding rate response by @AresArtemius in https://github.com/ccxt/ccxt/pull/30023 * fix(blofin): order cost is the quote volume, not the margin by @mkzung in https://github.com/ccxt/ccxt/pull/29975 * fix(bingx): ignore account updates without positions by @AresArtemius in https://github.com/ccxt/ccxt/pull/29948 * go: type wrapper optional locals and core body locals from TypeScript by @carlotestor in https://github.com/ccxt/ccxt/pull/30041 * fix(pro): js indexed order book side builds holes from no-op deltas by @L1nkus in https://github.com/ccxt/ccxt/pull/30049 * perf(pro): js order book side shift without copyWithin -3.3x by @L1nkus in https://github.com/ccxt/ccxt/pull/30048 * feat(cs): type wrapper optional scalar locals from TypeScript by @carlotestor in https://github.com/ccxt/ccxt/pull/30053 * fix(paradex): read reduceOnly from the flags array in parseOrder by @rayBastard in https://github.com/ccxt/ccxt/pull/30065 * feat(benchmarks): cross-language performance benchmark + blog post by @pcriadoperez in https://github.com/ccxt/ccxt/pull/30028 * fix(bingx): reject unsupported Coin-M leverage tiers by @AresArtemius in https://github.com/ccxt/ccxt/pull/30076 * fix(bingx): reject unsupported Coin-M position mode by @AresArtemius in https://github.com/ccxt/ccxt/pull/30068 * fix(paradex): omit zero trigger_price in parseOrder by @rayBastard in https://github.com/ccxt/ccxt/pull/30069 * fix(typescript): remove truth coercion by @carlosmiei in https://github.com/ccxt/ccxt/pull/30080 * perf(js): getValueFromKeysInArray optimization by @ttodua in https://github.com/ccxt/ccxt/pull/29798 * perf: check string first by @ttodua in https://github.com/ccxt/ccxt/pull/29804 * perf: undefined optimization in type by @ttodua in https://github.com/ccxt/ccxt/pull/29806 * fix(bingx): restrict position close by id to linear by @AresArtemius in https://github.com/ccxt/ccxt/pull/30088 * fix(p2b): read errorCode from response root in handleErrors by @rayBastard in https://github.com/ccxt/ccxt/pull/30098 * perf(go): precise reorganization by @ttodua in https://github.com/ccxt/ccxt/pull/30043 * perf(c#): precise optimization (c) by @ttodua in https://github.com/ccxt/ccxt/pull/30089 * perf(java): precise optimization (c) by @ttodua in https://github.com/ccxt/ccxt/pull/30090 * fix(btse): derive ticker percentage instead of using the raw ratio field by @carlotestor in https://github.com/ccxt/ccxt/pull/30093 * feat(cs): type the generated C# cores (incl. createOrder -> Task<Order>) and their parameters by @carlotestor in https://github.com/ccxt/ccxt/pull/30066 * refactor(ts): require boolean conditions via strict-boolean-expressions by @carlotestor in https://github.com/ccxt/ccxt/pull/30082 * fix(krakenfutures): raise ExchangeNotAvailable on degraded fetchPositions response by @akshaykumarhudedmani in https://github.com/ccxt/ccxt/pull/30084 * fix(xt): support postOnly orders via timeInForce GTX by @rayBastard in https://github.com/ccxt/ccxt/pull/30059 * ci(js): persist emitAPI abstracts on master auto-commit by @carlotestor in https://github.com/ccxt/ccxt/pull/30111 * bitget parseUtaBalance fix by @ndubel in https://github.com/ccxt/ccxt/pull/30083 * feat(cs): fold watch* Copy into cores and drop leftover wrappers by @carlotestor in https://github.com/ccxt/ccxt/pull/30110 * docs: remove status page from docs site and sidebar by @carlotestor in https://github.com/ccxt/ccxt/pull/30112 * fix(p2b): map min_total to market limits.cost by @rayBastard in https://github.com/ccxt/ccxt/pull/30099 * fix(pacifica): resolve order symbol in parseOrder and return latest order state from fetchOrder by @rayBastard in https://github.com/ccxt/ccxt/pull/30097 * fix(alpaca): declare limits.cost.min of 10 for USD-quoted crypto markets by @rayBastard in https://github.com/ccxt/ccxt/pull/30101 * fix(paradex): expose liquidation_price in parsePosition by @rayBastard in https://github.com/ccxt/ccxt/pull/30096 * fix(bingx): normalize leverage side by @AresArtemius in https://github.com/ccxt/ccxt/pull/30070 * fix(xt): satisfy strict-boolean-expressions lint on postOnly checks by @rayBastard in https://github.com/ccxt/ccxt/pull/30115 * fix(alpaca): classify error 40310000 by message, not by code by @rayBastard in https://github.com/ccxt/ccxt/pull/30103 * fix(tokocrypto): read market margin flag from marginTradingEnable by @rayBastard in https://github.com/ccxt/ccxt/pull/30064 * fix(bingx): reject unsupported Coin-M createOrders by @AresArtemius in https://github.com/ccxt/ccxt/pull/30091 * fix(alpaca): fetchTickers without symbols defaults to all markets by @rayBastard in https://github.com/ccxt/ccxt/pull/30102 * fix(alpaca): fetchOHLCV since sent day-truncated, intraday ranges return empty by @rayBastard in https://github.com/ccxt/ccxt/pull/30100 * fix(bingx): satisfy strict-boolean-expressions lint on the inverse market check by @rayBastard in https://github.com/ccxt/ccxt/pull/30118 * feat(transpiler): basetests only transpilation by @ttodua in https://github.com/ccxt/ccxt/pull/30116 * fix(binance): drop 'stock' from default fetchMarkets types by @carlotestor in https://github.com/ccxt/ccxt/pull/30126 * fix(bybit): increase paginationCalls in fetchLeveragetiers by @carlosmiei in https://github.com/ccxt/ccxt/pull/30127 ## New Contributors * @factec-kyle made their first contribution in https://github.com/ccxt/ccxt/pull/30015 * @huiboxes made their first contribution in https://github.com/ccxt/ccxt/pull/30040 * @akshaykumarhudedmani made their first contribution in https://github.com/ccxt/ccxt/pull/30084 **Full Changelog**: https://github.com/ccxt/ccxt/compare/v4.5.75...v4.5.76