> ## Documentation Index
> Fetch the complete documentation index at: https://docs.webacy.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Yield Scores

> How Webacy reranks DeFi stablecoin yield pools by risk-adjusted APY, discounting raw yield by the issuer's risk rating so safer pools beat shaky high-APY pools.

The Yield page reranks DeFi stablecoin pools by **risk-adjusted APY** — raw yield discounted by the issuer's risk rating. A high-yield pool backed by a shaky stablecoin may rank lower than a modest-yield pool backed by USDC.

# Formula

`Risk-Adjusted APY = Effective APY × (Safety Score / 100)`

**Effective APY** is normally the raw APY, but when a pool is flagged as an APY spike (see below), the 30-day mean APY is used instead.

Examples:

* 4% APY from an **A+** issuer (safety score 96) → **3.84% risk-adjusted**
* 15% APY from a **C+** issuer (safety score 35) → **5.25% risk-adjusted**
* 25% APY from an **F** issuer (safety score 2) → **0.5% risk-adjusted**

# ⚠ 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.

<Warning>
  **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. Risk-Adj APY for this pool correctly used the 8% mean: **7.57%** rather than the misleading **36.14%**.
</Warning>

Spiked rows are marked with a **⚠** icon on the Raw APY and an asterisk (\*) on the Risk-Adj APY. Hover either for the spike ratio.

# Pool Matching

Pools are drawn from Webacy's stablecoin pool dataset (stablecoin=true, TVL ≥ \$1M, APY ≥ 0.1%, APY \< 200%). Each pool is then matched to a Risk Rating entry in two steps:

1. **Address match** — each pool's `underlyingTokens` addresses matched against our chain+address grade index.
2. **Symbol fallback** — if no address match, the pool symbol is split on "-" and each part matched against the grade symbol index (e.g., "USDC-USDT" tries "USDC" then "USDT").

Pools with no match are included at the bottom of the table with no grade or risk-adjusted APY displayed.

# Filters Applied

| **Filter** | **Value** | **Reason**                           |
| :--------- | :-------- | :----------------------------------- |
| stablecoin | **true**  | Only stablecoin-denominated pools    |
| outlier    | **false** | Exclude statistical outliers         |
| min TVL    | **\$1M**  | Filter out thin, illiquid pools      |
| min APY    | **0.1%**  | Exclude near-zero noise              |
| max APY    | **200%**  | Exclude unsustainable outlier yields |

# Column Definitions

| **Column**       | **Description**                                                                                        |
| :--------------- | :----------------------------------------------------------------------------------------------------- |
| **Symbol**       | Pool token pair(s) as reported upstream.                                                               |
| **Project**      | Protocol name (Aave, Morpho, Curve, etc.).                                                             |
| **Chain**        | Network the pool is deployed on.                                                                       |
| **Grade**        | Risk Rating of the matched stablecoin (A+ to F). See [Risk Rating](/safety-grade) docs.                |
| **Safety Score** | Numeric 0–100 safety score underlying the discount (higher = safer; equivalent to `100 − risk score`). |
| **Raw APY**      | Nominal APY as reported upstream.                                                                      |
| **Risk-Adj APY** | Raw APY × (Safety Score / 100). Primary sort column.                                                   |
| **TVL**          | Total Value Locked in the pool (USD).                                                                  |

# 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 daily at 04:30 UTC.
