Skip to main content
Intrinsic value is the answer to “what should 1 unit of this asset return if I redeem it through the canonical path?” — not the secondary market, not the DEX, the redemption mechanism itself. It is always quoted in USD at the engine boundary (so spreads are comparable), but each asset class has a different source of truth.

SOL-pegged LSTs

Source: Sanctum’s sol_value per LST mint — or, for LSTs outside the Sanctum registry, a direct on-chain SPL stake-pool read (total_lamports / pool_token_supply).
Polled every 15s. Each LST has its own deterministic sol_value — for jitoSOL today, 1 jitoSOL ≈ 1.18 SOL because the underlying stake pool has accrued staking + MEV rewards since the asset was minted. We track 38 LSTs — major Sanctum-registry pools (jitoSOL, mSOL, bSOL, INF, JupSOL, BNSOL, PSOL, JSOL, hSOL, …) plus the Hylo LSTs (hyloSOL, hyloSOL+). LSTs not in Sanctum’s registry — e.g. STKESOL, rkuSOL, corvusSOL — use the on-chain stake-pool read described above instead. The full live list is always GET /v1/assets.

Fiat stables

Source: the issuer’s contract = $1, no exception. USDC, USDT, PYUSD, USDG, USD1, USDu, CASH, AUSD peg to 1bydesign.Theintrinsicisthereforeconstant.ThesignallivesentirelyonthemarketsideifUSDCtradesat1 by design. The intrinsic is therefore constant. The signal lives entirely on the market side — if USDC trades at 0.998, that’s a -2 bps spread; if it trades at $0.87 (the 2023 SVB weekend), that’s -1300 bps. USDS (a CDP-style stable, stable_cdp) and USDe (a delta-neutral synthetic stable, stable_dn) are not fiat stables — their intrinsic is not a flat issuer-contract $1. They are covered by the CDP and delta-neutral paths, not this group. We do not introduce a hardcoded 1.0 in the schema — the intrinsic comes from the configured peg target (USD, EUR, etc.) and is read from Pyth like any other FX.

Yield-bearing NAV stables

Source: Pyth Redemption Rate (USDY, syrupUSDC, sUSDe, ONyc, eUSX, PST), or an on-chain vault/reserve decode — the mint’s Token-2022 InterestBearing extension (sUSD), or a savings-vault reserve NAV (Perena USD*).
The NAV grows over time — 1 USDY ≈ $1.08 today because the underlying T-bill strategy has earned ~8% since launch. Treating these as $1-pegged would systematically under-value the position. For issuers that haven’t published a Pyth feed yet, we scrape the dashboard NAV and tag the asset verified=false in assets.toml until a real feed lands. (Piggybank pbUSDC was an example of this path but was deactivated 2026-06-01 — only a thin dust DEX pair remained, so its prices were no longer reliable.)

CDP-style stables

Source: on-chain decode of the protocol’s collateral state. For Hylo’s hyUSD:
Polled every 30s. The intrinsic here is effectively the collateral ratio — a hyUSD that trades at 1.000witha130tradesat1.000 with a 130% CR is in a different risk state than a hyUSD that trades at 1.000 with a 160% CR. See Hylo CDP CR signal for the alert mapping.

FX-pegged assets

Source: Pyth for the underlying FX rate, multiplied by the issuer’s redemption claim. A EUR-pegged stable should redeem at pyth.EUR/USD per token. Drift from that is the spread. We track EURC (Circle Euro Coin), the live EUR-pegged asset: its intrinsic redeems at pyth.EUR/USD per token. EURC is monitoring_only and dark on the forex weekend (the Pyth EUR/USD feed is closed Fri ~22:00 → Sun ~22:00 UTC) — that staleness is expected, not an outage.

Why one source per class

Two reasons:
  1. Determinism. When you ship a single alert that says “USDC entered DEPEG at 14:32:11,” subscribers need to be able to reproduce that decision from raw inputs. A blended price (Pyth + DEX1 + DEX2, weighted somehow) is reproducible only with the weighting algorithm published — and even then is harder to argue from.
  2. Failure mode honesty. If Sanctum’s sol_value is wrong, every Pegana LST signal is wrong, and we want to know loudly. If we blended Sanctum with a DEX-side LST redemption proxy, a Sanctum bug would be masked by the proxy. We prefer the loud failure.
The cost is dependency on a single upstream. We accept it — and on divergence (IDL drift on Hylo, SSE timeout on Pyth, polling staleness on Sanctum) the engine skips the recompute and holds the last published state rather than emitting a confident-but-wrong number. (UNKNOWN is published at cold-start and as honest-dark on a detectably broken anchor — a >10% premium on a NAV-priced asset, via the NAV-sanity gate (ADR-0025) — not on routine staleness; containment of unreliable sources is via monitoring_only — ADR-0024.)

Next

Market value

How we read what the asset actually trades for.