Skip to content

v2.24.0

Latest

Choose a tag to compare

@lars0x lars0x released this 27 Jul 18:33
· 248 commits to main since this release

Features

  • LiFi compiles BridgeIntent directly. The LiFi manifest advertised BRIDGE but LiFiCompiler only declared SWAP, so production bridging had to be expressed as a cross-chain SwapIntent. compile_bridge now routes through LiFi's cross-chain route path. (#3397, #3388)
  • Verified lending-market resolution (VIB-5985). A market_id can only enter a config after on-chain proof. ListLendingMarkets returns every curated-catalog candidate (address-resolved filters; never ranks or auto-picks), GetLendingMarket recomputes the id from idToMarketParams(id) and compares — a record is never returned unverified. Surfaced as MarketSnapshot.lending_markets(...) / .lending_market(...), with matching ax lending-reserves UX. (#3430, #3424)
  • Perp fill accounting from measured settlement (VIB-3872). Keyed GMX V2 settlement decode + typed PerpFillData, RunnerPerpSettlementCapability correlation, a perp_settlement_commit reconciler 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_ORDER on gmx_v2's cancelOrder (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_total meters LP label-order fallback (VIB-6053). (#3466)

Breaking Changes

  • GeckoTerminal naming retired in favour of CoinGecko Onchain. The gRPC method (GeckoTerminalGetOHLCVCoinGeckoOnchainGetOHLCV), the provider classes, the POOL_HISTORY_*_GECKOTERMINAL env-var suffixes, the data_overrides provider id, and the ChainDescriptor.external_ids vendor 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, and Intent construction now emit a SymbolTokenResolutionWarning (a FutureWarning) once per external callsite. Symbols keep working for the rest of the 2.x line and are rejected in SDK 3.0.0 with SymbolTokenResolutionError. 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 check and 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