Skip to content

Stellar Index v0.23.0

Choose a tag to compare

@github-actions github-actions released this 02 Aug 20:05

[v0.23.0] — 2026-08-02

Added

  • Multi-path rate router with anti-manipulation corroboration — thin FX
    crosses (e.g. XLM/GBP served 100% from a single venue) can now be priced
    and cross-checked through multiple independent routes over the XLM/BTC/USD
    hub topology (internal/aggregate/router.go), modelled on the predecessor
    Rates Engine. Shortest routes preferred; each route's price is an exact
    big.Rat composite and its confidence the weakest link. The freeze's
    source_count is widened only by routes that are INDEPENDENT
    (edge-disjoint), TIGHTLY agreeing (within 3%, far tighter than the 40%
    outlier band) and non-diverged — a manipulator cannot manufacture false
    corroboration by wash-trading one shared leg (fail-closed: a divergent or
    shared-bottleneck set drops below the single-path baseline). The SERVED
    price is the median of only the highest-confidence surviving route(s), so a
    lower-confidence route (e.g. through a thin, USD-volume-floor-exempt bridge)
    corroborates and can flag divergence but can never move the served value.
    New config aggregate.max_hops (default 3) + aggregate.min_route_confidence
    (default 0.0). Single-route targets — the entire shipped config today — are
    byte-identical to the pre-router behaviour; the machinery activates only when
    a target has a second independent route configured.
  • Valuation-integrity guard on market cap / FDV — a market cap is no
    longer presented as authoritative when its backing price came from
    negligible liquidity (an obscure asset with one $10 SDEX trade must not
    read as worth billions). market_cap_usd and fdv_usd are now SUPPRESSED
    (served null) with a new market_cap_low_liquidity: true flag on
    Asset and GlobalAssetView when the backing price came from a single
    venue AND the asset's trailing-24h USD volume is below the new
    aggregate.min_market_cap_volume_usd floor (default 1000 USD). The AND is
    load-bearing: a single-venue asset with real volume, or any multi-source
    asset, keeps its cap; the price_usd itself is untouched — the guard is on
    the valuation, not the price. Applies to both the /v1/assets/{id} detail
    path (populateMarketCap) and the /v1/assets listing path
    (computeMarketCapUSD); the fiat market cap (M2 × deep FX rate) is
    deliberately not gated. New config knob aggregate.min_market_cap_volume_usd
    (0 disables).