Transparency

Methodology

How vaults.xyz derives risk, complexity, and exposure metrics from on-chain Morpho data. Every formula is open and auditable — if you disagree with a weight, you can replicate the calculation.

Data source

All metrics are computed from the public Morpho Blue GraphQL API at blue-api.morpho.org/graphql. We index whitelisted MetaMorpho vaults on Ethereum mainnet and Base, ordered by total assets in USD. The dataset refreshes every 5 minutes.

Vault history (APY, TVL) is taken directly from the API. Risk and complexity scores are derived locally from the per-allocation data the API exposes (collateral asset, LLTV, utilization, share).

Risk score (0–100)

Risk is the expected magnitude of principal loss under stress. It decomposes into five independent components — each producing a sub-score in [0, 1] — combined with fixed weights:

utilDemand = 0.3 + 0.7 · utilization
loanDemand = clamp(medianApy(asset) / 5%, 0.3, 1.0)

structural = (0.45 · assetQuality + 0.25 · bufferPenalty) · utilDemand
      + 0.10 · redemptionRisk + 0.10 · concentration + 0.05

riskScore = (structural − 0.05) · loanDemand + 0.05
45%
Asset qualityShare-weighted depeg / counterparty / liquidity risk of each collateral asset. Pulled from the asset quality table below. Captures the structural risk that's intrinsic to the collateral, regardless of LLTV.
25%
Buffer penaltyFor each collateral, compares the actual buffer (1 − LLTV) to the safe buffer that asset class needs to absorb a ~99th-percentile single-day drawdown. Penalty is zero if actual ≥ safe. Pendle PTs get a small safe buffer (5%) because liquidation uses a maturity-based oracle, not spot price.
Utilization demand factorMultiplier on asset quality + buffer penalty: 0.3 + 0.7 × utilization. Structural risk only materializes proportional to capital actually deployed in markets.
Loan-asset demand factorMultiplier on the full structural score (after the SC base is preserved). Equal to clamp(median APY across vaults using this loan asset / 5%, 0.3, 1.0). Captures cross-vault borrowing demand for the loan asset — if no one is leveraging WETH right now, a WETH vault's structural risk is mostly dormant regardless of utilization on individual markets. This is what aligns the displayed risk score with the borrower-paid APY signal.
10%
Redemption riskSeparate from the demand factor: only the top 15% of the utilization range (above 85%) contributes. Captures the queue risk of being unable to withdraw under stress.
10%
ConcentrationNormalized Herfindahl-Hirschman index of allocation shares. A vault with one 80% market scores higher than five 20% markets at the same average LLTV.
5%
Smart-contract baseMorpho Blue is mature and audited, but protocol risk is never zero. A constant 0.05 floor.
Market signal (0–100)

A second risk signal derived purely from what borrowers actually pay. In an efficient market, supply APY reflects the demand for leverage on that collateral — higher APY means borrowers are willing to pay more, which is a market-implied risk premium.

marketSignal = clamp(APY × 8, 0, 100)

Fixed scale (12.5% APY caps at 100) so the number is comparable across time, not just relative to the current universe.

Divergence is the diagnostic. When our structural risk score is higher than the market signal, our model thinks the vault is riskier than borrowers do — either we're over-counting risk on under-utilized collateral, or the market is mispricing. When the market signal is higher than the structural score, the vault is yielding more than its collateral composition would suggest — usually a sign of strong borrower demand for that loan asset (not exotic strategy risk).

Complexity score (0–100)

Complexity measures strategy intricacy independent of risk. A vault can be simple and risky (one collateral at 95% LLTV), or complex and safe (well-managed split across many low-risk markets). The score reflects how many independent moving parts the strategy depends on.

score = 0.50 · weightedNovelty
      + 0.20 · maxNovelty
      + 0.15 · parameterSurface
      + 0.15 · noveltyDiversity
50%
Share-weighted noveltyEach collateral has a novelty value (vanilla = 0, LST = 0.15, LRT = 0.50, Pendle PT = 0.85, …). Weighted by allocation share. A vault with 5% Pendle and 95% USDC contributes less than 50/50.
20%
Novelty floorMax single-asset novelty across the vault's collaterals. A 5% Pendle slice still means the curator must monitor PT mechanics, so the vault is not 'simple' even if Pendle is a minority allocation.
15%
Parameter surfaceUnique market count, scaled so 1 market = 0 and 10+ markets = 1. More markets means more LLTVs, oracles, and IRMs for the curator to maintain.
15%
Novelty diversityCount of distinct novelty buckets present (LST / LRT / Pendle / yield-wrapper / exotic), normalized to 5. A vault that touches all 5 buckets is structurally more intricate than one that only uses LSTs.
Asset taxonomy
ClassExamplesQuality penaltySafe bufferNovelty
Vanilla stableUSDC, USDT, DAI, PYUSD, RLUSD, FRAX, crvUSD0.033%0.00
Vanilla BTC / ETHWETH, WBTC, cbBTC, tBTC0.0310%0.00
Newer BTC bridgesLBTC, kBTC, FBTC, uniBTC0.2013%0.00
Sky stablessUSDS, sDAI, USDS0.103%0.45
LSTwstETH, stETH, cbETH, rETH0.1512%0.15
LRTweETH, ezETH, rsETH, pufETH0.4018%0.50
EthenasUSDe, USDe0.506%0.45
Maple creditsyrupUSDC, syrupUSDT0.4510%0.45
Pendle PT/YTPT-sUSDE, PT-cUSD, …0.355%0.85
Tranche / RWAAA_FalconXUSDC, USCC, mF-ONE, XAUt, EUTBL0.5018%0.65
What's not in the score
  • Curator track record. We display vault counts and aggregate TVL per curator, but the risk score doesn't penalize new / unknown curators yet.
  • Timelocks and guardian quality. These are governance signals the API exposes (we surface guardian on the vault page) but don't factor into the score.
  • Vault cap utilization. Vaults V2 expose on-chain caps; V1 vaults we currently index do not, so capacity is currently shown as 1.5× current TVL.
  • Per-position LTV distribution. We use LLTV (protocol parameter) as a proxy for liquidation proximity. The actual buffer is determined by borrower behavior, which the API doesn't aggregate.
  • Morpho Vaults V2. The app currently only queries V1 (MetaMorpho) vaults. V2 vaults appear on app.morpho.org but aren't yet indexed here.
Found something we got wrong? Back to dashboard — every formula lives in lib/morpho.ts and is fully auditable.