> ## Documentation Index
> Fetch the complete documentation index at: https://pegana.xyz/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Intrinsic value

> What an asset is supposed to be worth, per its own mechanism. Different formula per asset class.

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`).

```text theme={"theme":"github-dark"}
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.

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`](/docs/guides/rest-api).

## Fiat stables

Source: the **issuer's contract** = `$1`, no exception.

USDC, USDT, PYUSD, USDG, USD1, USDu, CASH, AUSD peg to $1 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*`).

```text theme={"theme":"github-dark"}
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, 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:

```text theme={"theme":"github-dark"}
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.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](/docs/concepts/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

<Card title="Market value" icon="chart-line" href="/docs/methodology/market-value">
  How we read what the asset actually trades for.
</Card>
