Skip to main content
The Yield Scores feed ranks DeFi stablecoin pools by a safety-weighted rank score — raw yield weighted by the Risk Rating of the pool’s riskiest constituent token. A high-yield pool holding a shaky stablecoin ranks below a modest-yield pool holding only USDC.
The rank is not a yield. safety_weighted_rank_score is a unitless ordering index. Multiplying an APY by a safety score is neither a return you will earn nor a risk adjustment: a true risk-adjusted yield is yield minus expected loss (APY − PD × LGD), which needs a loss model the Risk Rating does not yet carry. That field is reserved as expected_loss_adjusted_apy and is null until the rated-event model ships. Do not present the rank as a percentage.

Formula

safety_weighted_rank_score = Effective APY × (Safety Score / 100)
  • Effective APY is the raw APY, except when the pool is flagged as an APY spike (see below), in which case the 30-day mean APY is used.
  • Safety Score is the score of the pool’s riskiest constituent (0–100, higher = safer; equivalent to 100 − risk score).
Examples (same arithmetic, read as an ordering only):
  • 4% APY, every constituent A+ (safety score 96) → rank 3.84
  • 15% APY from a pool whose riskiest constituent is C+ (safety score 35) → rank 5.25
  • 25% APY, riskiest constituent F (safety score 2) → rank 0.5
The second pool outranks the first; that says nothing about what either pays after losses.

Pool Grade = Riskiest Constituent

Pools are drawn from Webacy’s stablecoin pool dataset (stablecoin=true, TVL ≥ $1M, APY ≥ 0.1%, APY < 200%). Every underlying token of a pool is resolved to a Risk Rating by its chain and contract address — never by ticker symbol. Ticker matching is not used at all: the same ticker exists on several chains and from several issuers, and a ticker fallback would hand a pool the grade of whichever twin happened to match. The pool’s grade and safety_score are those of the least safe constituent. A USDC-FRAX pool carries FRAX’s grade, not USDC’s. Each pool reports how much of its constituent set is graded: constituents[] lists every graded leg (symbol, chain, address, grade, safety_score) in the pool’s own order; unmatched_constituents[] lists the addresses with no rating. Ungraded pools sort after ranked ones.

⚠ APY Spike Detection

When a pool’s current APY is 3× or more above its 30-day mean APY, it is flagged as a stress spike. These spikes almost always indicate a crisis event — exploit, oracle failure, or liquidation cascade — not a genuine yield opportunity.
Real example — Resolv/Morpho USDC (March 2026):After the Resolv USR minting exploit, the RESOLVUSDC Morpho vault on Ethereum showed 38% APY while its 30-day mean was ~8% (spike ratio 4.77×). The elevated rate reflected liquidation stress and oracle risk — not a safe high-yield deposit opportunity. Gauntlet (vault risk curator) emergency-deallocated from all Resolv markets. The rank for this pool correctly used the 8% mean (rank 7.57) rather than the spiked 38% (rank 36.14).
apy_spike and apy_spike_ratio are reported on every pool; the apy field is always the raw current APY.

Filters Applied

Field Definitions

Update Cadence

  • Pool data — fetched fresh each run.
  • Risk ratings — recalculated daily at 04:15 UTC; yield scores depend on them.
  • Yield scores output — recalculated every 6 hours.