# Asset risk

> Scoring tokens per chain - stablecoin peg behaviour, curated categories, LST and wrapper inheritance, token governance and liquidity.

Source: https://docs.1delta.io/risk/assets/

---

Scores the **token**, per chain, keyed by lowercase address. Per-chain keying is
deliberate: bridged assets are not the assets they are named after. WETH on
Ethereum and a bridged WETH on a side chain are different risks and must not share
a score.

---

## Resolution order

For each `(chainId, address)`:

1. **Stablecoin** — if it matches a scored stablecoin, use that score.
2. **Whitelist** — if it is in the curated per-chain whitelist, use the curated
   score and category.
3. **Default** — a conservative fallback of **4**.

Then two passes refine the result: **underlying inheritance** and, for vault
share tokens, the vault's own composite rating.

A default of 4 says *we have no information*, not *this is dangerous*. That
distinction matters downstream: unknown assets are never forwarded as a risk
signal into vault or market ratings.

---

## Stablecoins

A quality score from three terms — price against peg (40%), market cap (30%),
peg mechanism (30%) — mapped onto the 1-5 scale.

| Mechanism | Quality term |
| --- | --- |
| Fiat-backed | 1.0 |
| Overcollateralised | 0.85 |
| Crypto-backed | 0.7 |
| Algorithmic | 0.3 |
| Other or unknown | 0.5 |

Market cap runs from 1.0 at $1B or more down to 0.1 below $100k. Only *below*-peg
deviation is penalised; a stablecoin trading above peg is not a holder risk. A
null price, or a price below $0.50, sets quality to zero outright.

### Peg behaviour is a floor, not a term

Peg behaviour sets a **floor** the weighted score cannot undercut, rather than
being one weighted term among three. Otherwise size offsets a break: a token 5%
below peg with $306M circulating scored the same as a healthy mid-cap purely on
market cap.

The floor uses a 90-day price history, so a break that has partly healed still
counts:

| Condition | Floor |
| --- | --- |
| Currently 10% or more below peg, or a sustained break of 20% or more in the window | 5 |
| Currently 5% or more below peg, or a sustained break of 10% or more | 4 |
| Currently 2% or more below peg, or 7 or more days off peg in the window | 3 |

Every historical tier requires the break to have been **sustained** — at least 7
days off peg. A single-day print is as likely to be a bad quote as a real break,
and without this rule one glitch pins an asset at 5 for the whole window.

The floor is applied only when the verdict is trustworthy: the peg target must be
known (a USD peg, or a fiat both the supply source and the FX source quote), and
the price must not be a shared fallback quote served for many assets at once.
Non-USD pegs are converted at live fiat rates — a token tracking SGD at $0.78 is
not 22% depegged.

### Yield-bearing tokens carry no price term

Their price is a redemption ratio against an underlying, not a peg. Scoring it
against $1 reads yield accrual as instability. Their peg risk arrives through
inheritance instead.

### One asset, every deployment

A stablecoin is one asset with many addresses, and its score is a property of the
asset. Every published deployment is keyed into the output. Identity is resolved
by **issued address** where the source publishes one, with symbol matching as a
last resort — tickers are not identities, and symbol-only matching had one
project's yUSD wearing another's score.

---

## Curated categories

The whitelist carries a curated score plus a category:

`NATIVE`, `BLUE_CHIP`, `LST`, `LRT`, `ESTABLISHED_DEFI`, `OTHER`,
`COMPROMISED`, `DISCONTINUED`

`COMPROMISED` and `DISCONTINUED` are the only categories that make a *market*
risky downstream. Being an LST, an LRT or an RWA is not a defect — it is ordinary
lending risk, priced by LLTV.

---

## Wrapper and LST inheritance

**A wrapper is never safer than what it holds.** Every token that declares an
underlying is lifted to `max(own score, underlying score)`.

| Wrapper type | Underlying declared as | Applied |
| --- | --- | --- |
| Pendle PT/YT/SY | an address | always |
| Savings / staked wrapper | a symbol | always |
| LST | a base asset (ETH, BTC) | only for `COMPROMISED` / `DISCONTINUED` |
| Vault share | an address, from the vault's own topology | always |

The pass runs to a fixed point because wrappers stack (`sUSD3 -> USD3 -> USDC`).
Scores only ever rise, so it terminates.

LST inheritance is narrow on purpose: an LST's risk is its own staking and
withdrawal design, not the risk of ETH. Only a compromised or discontinued base
asset propagates.

Because inheritance only raises, it cannot help a vault share whose underlying is
*safer* than the default of 4. So a final pass replaces the blanket default on
vault shares with the vault's own composite rating from [Vault
risk](https://docs.1delta.io/risk/vaults/), floored by the underlying. It applies only where the entry is
still `default` — curated and stablecoin scores are never overridden. Only the
vault *topology* is consumed here, never the vault's score, so this is not a
cycle.

Symbol-declared underlyings are resolved conservatively: a same-chain symbol match
is used only when exactly one candidate is a recognised asset, otherwise the
asset group must map unambiguously corpus-wide. Ambiguous tickers are left alone
rather than guessed.

---

## Token governance

Each asset also carries an upgradeability and mint-authority rating — who can
swap the token's implementation or inflate its supply. The classifier, the score
table and the blacklist/pause/seize capability floor are documented in
[Governance](https://docs.1delta.io/risk/governance/). Assets that could not be probed are not merged at
all, so a transient RPC failure never fabricates a rating.

---

## Liquidity

Every asset is enriched with an approximate USD depth figure, sourced per asset
type: Pendle markets for PT/YT/SY tokens (they do not trade on ordinary DEXs, so
aggregator depth is meaningless for them), the wrapped-native token's depth for
the zero address, and DEX-aggregator depth for everything else.

Two flags matter more than the number:

- `deepLiquidity` — effectively bottomless depth.
- `noDexLiquidity` — used as collateral on a supported chain yet has no DEX
  liquidity at all. Typically a vault or redeem-only token, and a useful signal
  for collateral that cannot be unwound in a liquidation.

Liquidity is reported alongside the score rather than folded into it, since the
right threshold depends on position size.
