# Protocol risk

> How a lending protocol is rated - baseline, exploit track record, audits, maturity and pool governance.

Source: https://docs.1delta.io/risk/lending-protocols/

---

Rates the **lender** itself: the code, the team's history with it, and who
controls it. This is the dimension that answers "is the protocol my position
sits in sound", independent of which market inside it you pick.

Identified by lender key (`AAVE_V3`, `MORPHO_BLUE`, `EULER_V2`, …), the same
identifier used in [market identifiers](https://docs.1delta.io/market-identifiers/).

---

## 1. Baseline

Every protocol starts from a third-party baseline rating (Exponential.fi's
`green` / `yellow` / `red`), which folds in code quality, complexity, team and
audit posture.

| Baseline | Level | Score |
| --- | --- | --- |
| green | green | 1 |
| yellow | yellow | 3 |
| red | red | 4 |
| no rating available | yellow | 3 |

An unrated protocol is **not** given the benefit of the doubt. Most protocols
with no third-party coverage are small, new, or both.

---

## 2. Track record: exploits

An incident's severity is its size *relative to what the protocol held at the
time*, not its headline USD figure. A $400k loss on a $1.7M protocol is an
existential event; $800k on a $58B protocol is a rounding error that says
nothing about the protocol's soundness today.

```
impact = hackAmountUsd / protocolTvlAtHackTime
```

Incidents below **0.1% of TVL** are treated as negligible. Above that, each
incident adds a penalty and forces a level downgrade.

| Impact | Score penalty |
| --- | --- |
| below 0.1% of TVL | none |
| under 1% | +0.5 |
| under 10% | +1 |
| under 50% | +1.5 |
| 50% or more | +2 |
| impact unknown | +1 |

**Downgrade.** If any incident clears the threshold — or its impact could not be
computed — the level drops one step: green becomes yellow, yellow becomes red,
red stays red. The score is then floored at the minimum for the downgraded level,
so the level and the number can never disagree.

**Unknown impact counts against the protocol.** An incident we cannot size is
treated as significant, not ignored. Historic hacks on protocols whose TVL
history is no longer published are the common case, and they are exactly the
protocols where an unexplained gap should not read as green.

Incidents are cumulative and are not time-decayed. A protocol that was drained
in 2021 carries it; what changes the rating is a re-audit and a new baseline, not
the passage of time.

### Worked example

Edel, an Aave fork on Ethereum, was exploited on 2026-06-30 for $403,000 through
a flaw in the wrapper between a tokenised equity and its collateral form, against
$1.69M of TVL.

```
impact  = 403,000 / 1,689,975 = 0.2385  (23.9% of TVL)
baseline= yellow / 3          (no third-party rating)
penalty = +1.5                (impact in the 10-50% band)
downgrade: yellow -> red, floor 4
score   = round(max(3 + 1.5, 4)) = 5
```

Result: **red, score 5, 1 incident**.

---

## 3. Audits and maturity

Audit links are collected from the baseline provider's auditor list and the
protocol's own published reports, falling back to DefiLlama's audit links. They
are surfaced on the protocol entry so the evidence is one click away.

Protocol age is derived from the first date the protocol reported non-zero TVL.
Both are context rather than direct score inputs: an audit is not a guarantee,
and the incident and governance signals are the ones that move the number.

---

## 4. Pool governance

Who can change the pool is folded into the protocol score. The full classifier is
documented in [Governance](https://docs.1delta.io/risk/governance/); its effect here:

| Worst deployment tier | Effect on the protocol rating |
| --- | --- |
| **high** — an EOA can upgrade or re-point the pool | forced `red`, score floored at 4 |
| **medium** — a small multisig, no timelock | one level down, +1 score |
| **low** / **unknown** | unchanged |

The tier is the **worst across all of that protocol's deployments**. A lender
that is DAO-governed on Ethereum and EOA-governed on a side chain is rated on the
side chain: it is the same brand, the same integration, and the same key that can
take the money.

---

## 5. Isolated-market protocols

Euler, Silo, Fluid, Morpho Blue and similar protocols have no single pool admin —
risk lives per market. They are handled two ways at once:

- The **protocol entry** carries an aggregate of its markets' governance, and is
  downgraded when a *material share* of classified markets is high-risk (above
  25%), rather than by weakest link. On a permissionless protocol nobody is
  exposed to a market they did not choose, and anyone can deploy a market nobody
  uses.
- Each **market** is additionally rated in its own right — oracle, governance,
  curation, bad debt — and surfaced as its own entry. See
  [Oracles](https://docs.1delta.io/risk/oracles/), [Curation](https://docs.1delta.io/risk/curators/) and
  [Bad debt](https://docs.1delta.io/risk/bad-debt/).

Markets that are unscreened count as `unknown` and are excluded from the
denominator of that share, so a protocol cannot improve its rating by being
harder to probe.

---

## 6. Manual overrides

A protocol that is winding down or has been abandoned is pinned to `red` with an
explicit status (`winding_down`, `wound_down`, `deprecated`) and a stated reason.
Nothing about the code changed; the reason it is unsafe is that nobody is
maintaining or defending it any more, which no automated signal captures.

Overrides are the only place a rating is set by hand, they always carry a reason,
and they can inject a protocol that the automated pipeline does not otherwise
cover.

---

## Output shape

```json
{
  "EDEL": {
    "level": "red",
    "score": 5,
    "data": { "auditLinks": [], "numberOfIncidents": 1 }
  },
  "AAVE_V2": {
    "level": "green",
    "score": 1,
    "governance": { "worstTier": "low", "deploymentCount": 3, "ownerKindMix": { "GOVERNANCE": 3 } },
    "data": { "auditLinks": [ { "name": "Audits", "url": "https://aave.com/security" } ], "numberOfIncidents": 0 }
  }
}
```

Per-market entries (Morpho markets, Silo configs, Fluid vaults) use the same
`level` / `score` envelope with a market-specific `data` payload, so a consumer
reads one shape for every granularity.
