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.
intrinsic_sol(LST) = sanctum.sol_value(LST mint)
intrinsic_usd(LST) = intrinsic_sol × pyth.SOL/USD
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. Tracked LSTs: jitoSOL, mSOL, bSOL, INF, bbSOL, JupSOL, plus the Hylo LSTs hyloSOL, hyloSOL+.

Fiat stables

Source: the issuer’s contract = $1, no exception. USDC, USDT, PYUSD, USDS, USDe all 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. 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), or the mint’s on-chain InterestBearing extension (sUSD).
intrinsic_usd(USDY) = pyth.redemption_rate("USDY/USD")
intrinsic_usd(sUSD) = decode_token_2022_rebasing(sUSD_mint)
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 (Perena USD*, Piggybank pbUSDC), we scrape the dashboard NAV and tag the asset verified=false in assets.toml until a real feed lands.

CDP-style stables

Source: on-chain decode of the protocol’s collateral state. For Hylo’s hyUSD:
total_sol = decode(hylo.exchange_pda.total_sol_cache.total_sol)
collateral_usd = total_sol × pyth.SOL/USD
intrinsic_usd(hyUSD) = collateral_usd / supply(hyUSD mint)
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 currently track no EUR-pegged Solana asset, but the engine path is wired for it.

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 asset flips to UNKNOWN rather than emitting a confident-but-wrong number.

Next

Market value

How we read what the asset actually trades for.