Features
- LiFi compiles
BridgeIntentdirectly. The LiFi manifest advertisedBRIDGEbutLiFiCompileronly declaredSWAP, so production bridging had to be expressed as a cross-chainSwapIntent.compile_bridgenow routes through LiFi's cross-chain route path. (#3397, #3388) - Verified lending-market resolution (VIB-5985). A
market_idcan only enter a config after on-chain proof.ListLendingMarketsreturns every curated-catalog candidate (address-resolved filters; never ranks or auto-picks),GetLendingMarketrecomputes the id fromidToMarketParams(id)and compares — a record is never returned unverified. Surfaced asMarketSnapshot.lending_markets(...)/.lending_market(...), with matchingax lending-reservesUX. (#3430, #3424) - Perp fill accounting from measured settlement (VIB-3872). Keyed GMX V2 settlement decode + typed
PerpFillData,RunnerPerpSettlementCapabilitycorrelation, aperp_settlement_commitreconciler lane, and Accountant Test P3/P5 + dashboard consumption with ESTIMATED folds superseded rather than double-counted. (#3440, #3443, #3446, #3450, #3453) - Gateway-backed The Graph fallbacks for backtests — registry-driven subgraph discovery, run-wide shared and throttled funding history with no look-ahead, and funding-source provenance. (#3464, #3463, #3462)
- Safe-wallet Zodiac discovery for
PERP_CANCEL_ORDERongmx_v2'scancelOrder(VIB-5569). (#3437) - GMX async orders execute on managed Anvil via a keeper simulator driving the two-phase order flow to settlement. (#3413, #3409)
ledger_lp_leg_identity_missing_totalmeters LP label-order fallback (VIB-6053). (#3466)
Breaking Changes
-
GeckoTerminal naming retired in favour of CoinGecko Onchain. The gRPC method (
GeckoTerminalGetOHLCV→CoinGeckoOnchainGetOHLCV), the provider classes, thePOOL_HISTORY_*_GECKOTERMINALenv-var suffixes, thedata_overridesprovider id, and theChainDescriptor.external_idsvendor key all rename, with no aliases kept.Gateway and SDK must be upgraded together — a new SDK against an old gateway image (or the reverse) fails the OHLCV call with
UNIMPLEMENTED.Upstream HTTP endpoints and API keys are unchanged (
api.coingecko.com/api/v3/onchain,COINGECKO_API_KEY/ALMANAK_GATEWAY_COINGECKO_API_KEY). (#3465, #3467)
Deprecations
- Symbol-based token resolution. Symbols are metadata, not stable asset identity — the same ticker maps to a different contract per chain and is spoofable.
TokenResolver,MarketSnapshot, andIntentconstruction now emit aSymbolTokenResolutionWarning(aFutureWarning) once per external callsite. Symbols keep working for the rest of the 2.x line and are rejected in SDK 3.0.0 withSymbolTokenResolutionError. Use a contract address or a CAIP-19 asset identifier. (#3396)
Fixes
- Receipt parsers resolve the Safe as the trading wallet, not
receipt["from"](VIB-6043 P0). (#3439) - LP leg identity is bound to its own amounts at the parser, ending label-order token swaps (VIB-6053/6051/6045). (#3451, #3420, #3422, #3425)
- A degraded all-zero LP read is no longer booked as a measured $0; a $0 open position at HIGH confidence fails closed. (#3426, #3419)
- Perp closes no longer read as a −100% loss after keeper settlement; GMX demos can fully close (
size_usd=None). (#3436, #3434, #3417, #3429) - Uniswap V4 LP positions are discovered in teardown recovery (VIB-6109). (#3460)
- Production price-impact BLOCK default lowered from 30% to 10% (VIB-5924). (#3448, #3427)
- One config-validation engine —
strat checkand boot agree, and an invalid config fails loudly (VIB-5986). (#3423) - Swap quoting, Zodiac manifest, and strategy-config pinning fixes. (#3432, #3433, #3435, #3415, #3395, #3398, #3428, #3411)
Security
- The gateway rejects caller network-override elevation to Anvil; the pending-order waiver it interacted with is proof-carrying. (#3421)
Full changelog: almanak-co/almanak-sdk-private@v2.23.0...v2.24.0