Skip to main content

Asset risk

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.

MechanismQuality term
Fiat-backed1.0
Overcollateralised0.85
Crypto-backed0.7
Algorithmic0.3
Other or unknown0.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:

ConditionFloor
Currently 10% or more below peg, or a sustained break of 20% or more in the window5
Currently 5% or more below peg, or a sustained break of 10% or more4
Currently 2% or more below peg, or 7 or more days off peg in the window3

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 typeUnderlying declared asApplied
Pendle PT/YT/SYan addressalways
Savings / staked wrappera symbolalways
LSTa base asset (ETH, BTC)only for COMPROMISED / DISCONTINUED
Vault sharean address, from the vault's own topologyalways

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, 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. 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.