Changelog
New AMM Integration & Updates
- The Fantastical Finance Factory integration (formerly Dr Fraudsworth): ZIG/ZAG faction pools and the ZIG/ZAG <-> MOTION vault
- Sanctum Infinity Reserve V2
- QuantumV2 with Token-2022 support
- BisonFi SDK 0.4.0 (batch-clock mode 2 quoting), and market-backed pools now pass the market tick account, which BisonFi will require on every swap
- Kipseli: stop quoting prices older than the pool's
max_slot_gap, SDK synced with the deployed program - Jupiter Lend: jlX tokens can route through any eligible pool, not only the Jupiter Lend pool
- Whitelist ZeroFi and Scorch PropAMMs for API users, exclude Obsidian
- Remove Metric (program closed)
- Alpenglow support: richat 14.1.1, yellowstone-grpc-proto 14.0.1 / client 15.0.0, account updates tracked per
(slot, bank_id). Servers that send nobank_idstill work - Agave 4.3.2 and v3 SPL interfaces
- Experimental
RouteByPricepartition algorithm, opt-in viaroutingConstraints.partitionAlgo(default unchanged)
Performances
- jemalloc replaces snmalloc: steady RSS 10.9 -> 8.2 GiB with the full market set on Linux, no CPU or latency change. New
allocator_*gauges on the metrics endpoint - Skip AMM updates for account changes that can't affect quotes (a WSOL mint rewrite used to re-update ~840K AMMs, a pump.fun
Globallamports change ~675K) - Lower router memory, on the benchmark snapshot: compact account <-> AMM link sets (1.28 GiB -> 682 MiB), Pump curves share decoded global accounts (2.43 -> 1.43 GiB of AMM state), smaller
AmmMetadata(-112 MiB), single-neighbor mints stored inline in the route graph - Raydium CLMM (and PancakeSwap / Stabble CLMM) keep only the swap window's tick arrays, so memory and update cost no longer grow with uptime
- Whirlpool: faster quote math, and updates reload only changed tick arrays (40–57% faster, 1 GiB -> 177 MiB held)
- Faster quotes and updates for Meteora DLMM, DefiTuna, Saber/Mercurial stable swaps, Sanctum and Pump
- Routing: pin AMM metadata per request, skip known-rejected AMM edges, one graph lookup per neighbor link, scc maps for market info and AMM metadata (less lock contention)
- Swap simulations request inner instructions only when simulation errors are logged (~8 ms faster
simulateTransactionat median, 37% smaller response) TCP_NODELAYon API connections
Bug Fixes
routingConstraints:maxhopabove 5 andbucketSizePercentageoutside 1–100 now return HTTP 400. Before, one request could abort the process, and a few could tie up every quote workerkeyedUiAccounts(--enable-external-amm-loading): return an error for undecodable account data instead of aborting the process- OpenBook V2: return an error for a missing or malformed oracle instead of aborting the process
- Keep the RPC URL, and any token in it, out of error responses and logs
- Keep the clock sysvar subscribed when no loaded market links it. With
--dex-program-ids,--exclude-dex-program-idsor--filter-markets-with-mints, AMMs could quote on the startup clock until restart - Always load Sanctum router AMMs at startup, even when a router PDA holds lamports
/quote-multiple-output-mints: cache base58 names only for routable mints (random mints grew memory until restart)skipLosingQuotes: account for pool rounding so a winning quote isn't skipped- Read rent from the Rent sysvar (SIMD-0437) for WSOL setup, vault and Sanctum prefund quotes
- Reject a platform fee in a transfer-hook mint instead of building a swap that fails on-chain
- Meteora DLMM: quote at the exact drain boundary at extreme prices. A single overflowing bin no longer stops the pool from updating
- Invariant: check liquidity using reserve amounts
- Scorch: declare underlying liquidities