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.