Xerberus Proposal for Scope 2: Llamalend / Isolated Markets Risk (plus a systemic-risk layer for the whole Curve perimeter)

Hey @strky — thank you for the response and the careful reading of our proposal.

To address your question up front: measuring, tracking, and recommending on legacy bad debt and deprecated markets is in scope for our bid — with recommendations applied only upon DAO request. We see ourselves as the measuring and analysis layer for the DAO; the ultimate decision-making stays with the DAO, as the CFP specifies. Concretely, our public findings register would carry a standing, per-market line item — the measured hole, its status, its resolution — so the existing losses stay visible even where they don’t yet have an owner.

And since we like to lead with examples and data: you mentioned several mechanisms already on the forum record, so rather than answer in the abstract, we rebuilt every position, trade, and oracle read in the Llamalend perimeter from raw Ethereum events and pointed the reconstruction at what is already in motion. Here is our data-driven read — first what the record shows, then our recommendations on top of it.

1. What’s already in motion — attested from the chain

The record deserves its due, and we can do better than praise it — we can attest it:

  • The recovery pool works. Since its deployment under vote #1400, 36 distinct sellers have exited $295,578 of nominal claims at an average of 67.9¢ per claim-dollar, against nearly matched buy-side volume ($294k, 38 addresses) — while the vault’s own withdrawals cleared $5.7k in all of July against available cash of $0.16 (RPC-verified against our reconstruction at 0.6% parity; withdrawals are instant redemptions bounded by controller cash, a first-come race). Your April 27 audit read $198 of depth; your May 6 read $63k; this morning it is ~$613k at market value ($291,690 crvUSD + $473k of nominal claims). The post-gauge leg of that growth — $63k to $613k after the 0.45% weight went live on May 7 — answers the “will investors arrive” test you posed on May 3: they arrived. Hubert’s call-spread floor was a reasonable ex-ante argument for why they wouldn’t; the gauge carry changed the economics it assumed.
  • The deprecation plan is executed, not just written. Rate-to-zero is live on-chain for the illiquid markets (CRV-long, UwU, sDOLA-long2 — all at 0.00% borrow APR today); WETH-Long2 sits on the liquid-market track exactly as the plan routes it.
  • The pool’s 71% centring is independently confirmed. Our per-position measurement of the CRV-long hole — $826,077 across 26 of 73 open positions — gives 71.4% solvency at the July 8 oracle read ($0.2043; ≈73% at the July 20 price_oracle() of $0.2188), derived separately from the OP’s analysis and landing on the same ratio. July’s trades clear ~4–6¢ below that static mark — a coherent price for immediacy plus the deliquidation-path losses the OP models in the $0.47–$0.84 range.
  • The disclosure fix shipped. Michael’s reply to specialist78 in the recovery thread says bad-debt visibility moved into the UI rather than living on third-party sites. A standing measured register makes that structural — for every market, whoever the provider is — and it is, almost line for line, the dashboard LlamaRisk asked for in their safeguards review: pool price, estimated backing, liquidation floor, bad debt cleared, depth. The two documents published with this reply are that dashboard’s v0; under a mandate they refresh every 12 hours.

The record shows the DAO is not missing mechanisms. What it is missing is a standing, measured picture that connects them — three snapshots of the same hole ($700k in the OP, ~$754k in your May 6 read, $826k at our July 8 mark, ≈$780k at the fresher July 20 price) drifted ±$50k a month in both directions while everyone watched. That picture is what we build.

2. To the lenders in this thread

Most of this reply is measurement, so one section that isn’t. The 67.9¢ average above means 36 of you accepted a ~32% haircut for cash — the pool gives you a choice, which the frozen vault did not, but nobody should mistake a haircut taken for a problem solved. Two things from our reconstruction are yours regardless of what happens with this mandate. First: specialist78 asked whether the large pre-freeze withdrawal was real. It is — a single $728,315 withdrawal on 2026-04-17, 60% of April’s entire outflow, eleven days before deposits stopped, by an address that remains among the largest holders; size and timing are published in the companion ledger, and the address is available to designated delegates on request. That is exactly the class of event a standing register surfaces in real time instead of months later. Second: on the responsibility question this thread keeps circling — the three-haircuts accounting, the Vyper-exploit precedent and the others strky catalogued — measurement can size every option on that list, and the numbers below do, but whether lenders bear 100% is a values decision only the DAO can take. We won’t pretend a dashboard answers it; we can promise the DAO decides it with the true numbers in front of them, updated every window, misses reported as misses.

3. Recommendations

Each carries its basis and what would change our mind. Sizing details and stop-condition definitions live in the evidence panel — standing trigger values belong in a live register, not hard-coded in a forum post.

R1 — Fund the CRV-long recovery pool to full exit capacity, from a capped fee stream routed as a DAO LP position.
Basis: the pool is proven and its crvUSD side covers ~19% of exit demand ($292k against ~$1.55M to cash out the seven largest non-pool holders — 76.9% of claims — at the ~68¢ the pool clears). The target is a flow target (cumulative crvUSD routed), because depth is consumed by the exits it funds. This is your fee-routing leg and the OP’s pool composing into one design — no lump-sum treasury spend, though it does need a parameter vote, fee-receiver plumbing, and (for L2 legs) the same admin handovers R2 lists. On the full-protocol fee base at a 25% cap it completes in ~7–9 months depending on the split rule; the base choice and whose income it is are laid out in the evidence panel. Would change our mind: the pool’s 30-day volume-weighted clearing price sustained below 60¢ on meaningful volume — the market signalling path losses beyond what the models price.

R2 — One joint funding picture before either funding vote.
Basis: the sDOLA-long2 reimbursement ($822,475 to 27 borrowers) and any cohort-wide framework both draw on the same uncollected L2 fee pot (~$1.14M gross) — roughly $2M of claims against a one-off pot plus a stream. Prerequisite: fix the fee-burner min_amount_out = 500 crvUSD hardcode before converting anything, or the gross-to-net haircut can be severe. This recommendation costs nothing and prevents two proposals discovering mid-vote that they spent the same money.

R3 — Mark UwU manually before it enters any split rule.
Basis: its oracle is dead (last in-transaction read January 2025; its single position last touched June 2024). Its per-position gap mechanically reads $0 and its aggregate netting reads ~$15.6k — neither is decision-grade, and a dead market’s allocation share should not be computed off a dead oracle. One external mark, then it slots into whatever rule the DAO adopts.

Your two open design questions from the deprecation thread — sustainable fee share, and the split rule — are answered with tables in the evidence panel: the short version is that the fee-share answer differs ~7× depending on which base the rule names (crvUSD-system fees vs full-protocol admin fees — the latter is the veCRV distribution’s own income, so the cap is a haircut its voters approve on themselves), and the split rules agree on CRV-long (~77–78%) and diverge exactly where harm class differs, which argues for your floor-plus-cap variant with borrower-harm routed through reimbursement. The register also opens with three further watch items — WETH-Long2’s accrual split, the live WBTC market’s latent gap, and the off-mainnet cohort including the FXS/FRAX market on Fraxtal, whose dormant compensation thread is your own baseline for per-case resolution — bases and properly-defined trigger conditions in the evidence panel.

4. The evidence

Per-market ledger, pool tape, recovery curve, split rule, fee bases, watch items

Per-market ledger (Ethereum lend markets with realized loss > $500 or open gap > $100; debt at last on-chain touch throughout):

id market realized bad debt (lifetime) forced liqs open debt per-position gap insolvent / open suppliers
3 CRV-long $10,615,458 214 $2,890,221 $826,077 26 / 73 199¹
8 UwU $433,450 3 $32,051† n/a† —† 20
39 fxSAVE $201,570 103 $341,792 $37,305 1 / 14 19
12 WETH-Long2 $164,085 65 $664,169 $228,605 6 / 27 31
1 WETH (OG) $130,760 30 $37,076 $21,991 1 / 8 29
14 USDe $26,836 19 $2,228 $1,900 2 / 6 20
2 tBTC $25,737 10 $28,247 $0 0 / 3 41
11 sUSDe $22,178 10 $1,728,645 $0 0 / 24 28
9 WBTC $3,667 31 $3,461,588 $103,740 1 / 63 60
17 sDOLA (old market) $0 0 $794 $794 3 / 3 17
30 sDOLA-long2 $0‡ 28‡ $58,291 $0 0 / 2 22
Lend family total $11,646,275 $1,221,518°

¹ includes the recovery pool itself, the #1 holder at 15.95%; seven largest non-pool holders = 76.9%.
† UwU’s oracle is dead (last read 2025-01-03); per-position reads $0 and aggregate netting ~$15.6k — neither is decision-grade (see R3). Accrual-inclusive debt: $54,173.
‡ the 2026-03-02 exploit; the realized-bad-debt estimator reads $0 because those liquidations repaid in full at manipulated prices — the harm was borrower equity ($822,475 per the post-mortem).
° per-position family total with UwU at n/a; includes dust rows not shown (sreUSD $702, wstUSR $210, PROS $100, ETHFI/wstETH/sFRAX/pufETH ≤ realized-only). Distinct from the deprecation plan’s all-chain cohort figure ($1,217,845) — the near-match is coincidence, not agreement.

CRV-long claim recovery curve (static mark — lower bound; the OP’s path-adjusted analysis puts arbitrage-clean recovery nearer $0.957):

CRV price vs 07-08 oracle gap claim value
$0.102 0.50× $1,287,934 55.4%
$0.204 1.00× $826,080 71.4%
$0.306 1.50× $525,633 81.8%
$0.409 2.00× $225,740 92.2%
$0.613 3.00× $15,335 99.5%

Only $15,335 is unrecoverable at any price. 90% solvency ≈ CRV $0.39 (interpolated; 1.89× the 07-08 mark, 1.77× the 07-20 price — read it off the live register, not this post). Denominator note: 71.4% is debt-basis (gap / $2.89M last-touch debt); claims-basis (vs $2.97M totalAssets) ≈ 69.5%. Three “full recovery” prices circulate in the thread — $1.24 (bad debt self-clears), $0.957 (OP, arbitrage-clean), $0.54 (our static mark) — all correct under their own definitions.

Recovery pool tape (pool 0x516c3ecf…3cb5, deployed 2026-04-25; A=2, fee 1%; 212 trades / 132 adds / 36 removes through 07-19; full addresses in the notes panel):

month claims sold (nominal) avg exit claims bought avg buy
Apr (from 25th) $1,115 80.2¢ $1,323 76.8¢
May $234,021 68.5¢ $190,274 69.9¢
Jun $40,455 64.7¢ $98,482 67.9¢
Jul (to 19th) $19,986 66.7¢ $3,630 67.5¢
total $295,578 → 200,596 crvUSD (67.9¢) $293,710 (69.2¢)

Depth: $198 (Apr 27) → ~$1,760 (May 3) → $63k (May 6, pre-gauge) → $291,690 crvUSD + $473k nominal claims (~$613k at market) on Jul 21 (post-gauge leg).

Split rule (strky Q2), measurable Ethereum cohort:

market gap by-gap share impacted users by-users share
CRV-long $826,077 78.3% 199¹ 77.4%
WETH-Long2 $228,605 21.7% 31 12.1%
sDOLA-long2 $0 (reimbursement-class harm) 0.0% 27 borrowers 10.5%
UwU n/a — enters after manual mark (R3) 20 (held out)

Measured cohort vs the deprecation plan’s Ethereum snapshot: $1,054,682 today vs $810,500 at plan time (+ UwU unmeasured) — price drift, accrual where rates still run, and per-position vs snapshot methodology; the mark moves in both directions with CRV.

Two fee bases (R1 basis) — they differ ~7×; any rule must name its base:

base measured value 25% cap fills Ethereum cohort (~$1.05M) in
A: crvUSD-system fees (mint interest + PegKeeper profits — our reconstruction) $95.6k/30d run rate ($4.44M trailing-365d, decaying; trailing-year quotes flatter by ~3.9×) ~44 months
B: full-protocol DAO admin fees (per DefiLlama; strky’s scale check) ~$8.6M/yr ~6 months

Base B is the veCRV distribution’s income — the cap is a haircut its own voters approve. We cannot yet independently reconstruct the AMM admin-fee stream (Curve’s crypto pools are our known depth-index gap, scheduled Phase 1) — Base B is quoted, not measured by us. The uncollected L2 pot (~$1.14M gross) is a one-off, contested between R1-class funding and the sDOLA reimbursement (R2), and subject to the burn-haircut prerequisite.

sDOLA-long2 definitional pins: 2026-03-02, 28 positions closed in 2 transactions; $21.8M debt extinguished (consistent with $20.8M net vault supply pre-exploit plus accrued interest); $24.7M crvUSD + ~39k sDOLA seized — the manipulated oracle had already converted the collateral inside the bands. The “~$10.9M” in press coverage is the single largest borrower’s debt ($10,904,728), not the market total; the post-mortem’s $822,475 / 27 borrowers is assessed equity harm — a different quantity. All three numbers are correct for what they measure.

Register watch items (opened at register launch, with defined triggers):

  • WETH-Long2 accrual split: the liquid track accrues 3.11% (≈$20.7k/yr on the $664k book) while 6 of 27 positions are underwater; we publish the underwater share of accrual first, and flag for the illiquid track if it sustains above 50% across two windows (rate is per-market via the MonetaryPolicy contract — the action is market-wide, and zeroing also removes healthy borrowers’ repayment incentive, so this is a measured tradeoff, not automatic).
  • WBTC latent gap: $103,740 in one position on a healthy $3.46M book; escalation if the gap grows ≥ 25% window-over-window and ≥ $50k absolute, sustained two windows (single-position gaps are differences of large numbers; raw percentage triggers are noise).
  • Off-mainnet cohort: $407k across Arbitrum/Fraxtal/Optimism incl. FXS/FRAX $145,857 — named in our Phase 0 chain-footprint confirmation so it cannot silently drop; split-rule table extends to all eleven markets when those planes land.

5. Raw data, definitions, and reproduction notes

Definitions, addresses, methods, honesty box, references

Definitions.

  • Realized bad debt = Σ per-liquidation max(0, debt_repaid − collateral_seized × day-price) over market lifetime. Excludes losses socialized without a Liquidate event and soft-liquidation grind (reported separately).
  • Per-position gap = Σ over open positions of max(0, debt_at_last_touch − (banded crvUSD + banded collateral × oracle price)). Insolvency is per-position: aggregate netting (≈ 0 here) is the wrong measure because a healthy borrower’s excess collateral does not back a neighbour’s empty debt.
  • Debt extinguished vs assessed harm: debt closed in Liquidate events vs post-mortem borrower-equity loss.
  • Claim value / solvency = (debt − gap) / debt at a stated price and stated debt basis (last-touch unless marked accrued).

Addresses (Ethereum mainnet).

  • Lend factory: 0xea6876dde9e3467564acbee1ed5bac88783205e0 (48 markets)
  • CRV-long controller: 0xeda215b7666936ded834f76f3fbc6f323295110a · vault: 0xcea18a8752bb7e7817f9ae7565328fe415c0f2ca · AMM: 0xafca625321df8d6a068bdd8f1585d489d2acf11b
  • Recovery pool: 0x516c3ecfe45f0820653e08dd7c93633d71b93cb5 · gauge: 0xF429AeC167C92aCA16cD77aef54F196B1988cBA3
  • crvUSD: 0xf939e0a03fb07f59a73314e73794be0e57ac1b4e

Method + windows. All positions, trades, band states, and oracle reads reconstructed from raw Ethereum logs and traces (no third-party data feeds). Position state 2026-07-20; risk-ledger build 2026-07-10; pool tape through 2026-07-19; RPC verification-only checks 2026-07-20/21 (controller cash, totalAssets, price_oracle(), pool reserves; reconstruction parity 0.6% on vault assets).

Honesty box.

  • Debt is at each position’s last on-chain touch; accrual since is not added (moot where rate = 0; live for WETH-Long2). Collateral valued at each market’s last in-transaction oracle read (CRV-long 2026-07-08; UwU 2025-01-03 — see R3).
  • Recovery-curve prices are oracle reads, not depth-adjusted exit prices; our depth index under-covers Curve’s own crypto pools (named Phase 1 deliverable).
  • Pool-tape claim-dollar conversion holds the current price-per-share (0.001251) constant across the three-month tape; drift is sub-cent with rates at zero, and per-trade pps from our replay is a scheduled upgrade.
  • The OP’s April chart showed 38 underwater positions (22 non-dust); we count 26 insolvent (> $1) of 73 open at the Jul-8 price — price movement and closures account for the difference.
  • Supplier counts are addresses with share balance > 0 from vault Transfer events; contract holders are not unwrapped to end users.

References.
CFP · our proposal thread · CRV-long recovery thread (strky’s Apr-27 audit; LlamaRisk safeguards; strky’s DAO-as-LP post) · v1 deprecation plan (strky’s framework, post #2) · sDOLA-long2 post-mortem · sDOLA-long2 funds-source proposal · WFRAX Curve-side thread · Vyper-exploit recompensation · vote #1400 · vote #1391 (CRV-long wind-down) · DefiLlama Curve revenue: defillama.com/protocol/curve-finance

Every number above is a rerunnable query; designated delegates can be given read-only access to rerun the headline figures — the CRV-long gap, the pool tape, the v1 loss ledger — before taking anything on faith.


1 Like