Conversation
Refresh mutable state at block 25939320. Supply contraction (USDS 7.82B -> 6.65B mainnet, sUSDS totalAssets 5.88B -> 4.67B), LitePSM buf raised to 800M DAI, Pocket 4.11B -> 3.95B USDC, Chief hat rotated. Spark Liquidity Layer repatriated its Base/Optimism/Unichain positions to mainnet on 2026-07-13, cutting native-escrow USDS from ~448M to ~102M and escrowed sUSDS from ~812M to ~343M; LayerZero-locked USDS fell to ~6.67M. Restate Collateralization from onchain per-ilk debt: Prime allocator vaults (Spark/Grove/Obex) are ~49.5% of VAT debt and were previously absent from the report; GUSD-A/PAX-A PSMs and the Spark Aave-Lido D3M are now dust or zero. Proxy implementations, USDS/sUSDS wards, 48h GSM delay, OFT ownership and the 2-of-2 DVN config are unchanged. Score held at 1.3/5.0. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Verified all seven findings onchain at block 25939320 before acting. Accepted and fixed: - Collateralization "remainder" was misattributed to Vow surplus. The gap is vat.vice() = $690.1M (unbacked debt, all at the Vow) plus ~$41.8M of ilks the table omitted. Enumerated all 35 registered ilks; the table now reconciles exactly against debt = sum(Art*rate) + vice. Added the Vow's real position: $633.2M surplus DAI vs $690.1M sin = net -$56.9M, matching Observatory's Operating Cash Balance line. - Added missing ilks: ALLOCATOR-PRYSM-A, ALLOCATOR-GROVE-A, WBTC-A/B. Allocator share 49.5% -> 49.8%. - GUSD-A/PAX-A dust restated as ~$0.57/~$0.38 (was "1 wei / 0"). - Stale peg figures (0.9953, 0.47%) replaced with the new series. - Bug-bounty count 216 -> 255 in the Category 1 table. - USDC backing "~30%+" replaced with the precise 39.3% ilk / 32.7% USDC. - Cross-chain supply row rewritten to state the lock-and-mint methodology explicitly. Corrected the reviewer where the evidence did not hold: - vow.bump() is the flap auction lot size, not surplus; bump=0 with hump=2^256-1 means surplus auctions are disabled, not that surplus is zero. Actual surplus is vat.dai(vow) = $633.2M. - vow.Sin() ($228.2M) is the queued subset; total unbacked debt is vat.sin(vow) = $690.1M. That debt is structurally generated by savings accrual - sUSDS.drip() calls vat.suck(vow, ...) - so it is not simply realized bad debt. - The cross-chain supply total is not "arithmetically irreconcilable". Bridges are lock-and-mint, so the all-chain total should approximate mainnet totalSupply, not exceed it. The June figure (8.19B vs 7.82B mainnet) was the anomaly: DefiLlama then double-counted ~371M of escrowed L1 supply. Score: Collateralization 2.0 -> 2.5. Rubric Score 2 requires "100% onchain collateral" and ~24.0% of VAT debt is offchain credit confirmed by attestation, while ~49.8% sits in allocator vaults whose assets are not readable from the VAT. Final score 1.3 -> 1.4; tier unchanged (Minimal Risk). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
Worked through the external review — verified every finding onchain at block 25939320 before changing anything. Five of seven stand and are fixed; two do not hold as stated. Accepted#1 Collateralization remainder (High) — confirmed as an error, with different numbers. "The remainder (~$733M) is stability-fee accrual and surplus held in MCD_VOW" was wrong. I enumerated all 35 ilks in So the gap is #3–#6 all confirmed and fixed: stale peg figures ( Corrected#1's evidence.
Two consequences: #2 Cross-chain supply — not irreconcilable. Every Sky bridge is lock-and-mint, so escrowed L1 tokens are reattributed to the destination chain, not added on top. The all-chain total should therefore ≈ mainnet
So the June figure was the anomaly, not this one. That said, the metrics row did invite the misreading, so it has been rewritten to state the lock-and-mint methodology explicitly. #7 Collateralization score — raisedAgreed on re-examination. Rubric Score 2 requires "100% onchain collateral"; ~24.0% of VAT debt is offchain credit confirmed by periodic attestation, which is squarely the Score-3 backing and verifiability profile. Against that, ~76% is onchain and real-time verifiable (USDC PSM alone is 39.3%), which is better than a flat 3. The deciding factor is allocator opacity: ~49.8% of VAT debt sits in Prime allocator vaults where the ilk exposes only drawn debt, and reconstructing the assets requires Observatory's look-through rather than the VAT. That structure was undocumented in the June assessment. Collateralization 2.0 → 2.5, Cat 3 1.8 → 2.0, final 1.3 → 1.4. Tier unchanged (Minimal Risk, 1.0–1.5). This is a scoring correction from newly documented facts, not a deterioration — the offchain share actually fell from 25.9% to 24.0%. Follow-up needed (not touched here)The score change makes three cross-references in other reports stale — Validation after changes: |
…dencies Both review findings verified against Observatory and the VAT before acting; both hold. Backing denominator: "~76% of backing is onchain" was derived from an offchain share measured against VAT.debt(), which includes $690.1M of vice and prices the PSM at ilk debt. Observatory books the LitePSM at the Pocket value ($3.95B), not the $4.73B ilk, confirming the $786.5M of pre-minted DAI is not independent collateral. On a consistent backing denominator the split is 29.3% offchain / 70.7% onchain, not 24/76. Added an explicit note on which denominator applies where, and flagged that Observatory's offchain figures are attested holdings rather than independently verified reserves. Allocator dependencies: Category 2C listed only USDC, Chainlink and LayerZero while ~49.8% of VAT debt sits in Prime allocator vaults. Enumerated the named counterparties from Observatory - Janus Henderson Treasury Fund $758.7M, BlackRock BUIDL $568.7M, Maple Syrup USDC $398.6M, Galaxy $320.0M, Anemoy/Securitize AAA CLO $496M combined, Anchorage $220.0M, plus SparkLend/Morpho/Uniswap onchain positions and RLUSD/PYUSD reserves - and added them to the dependency table and the companion graph (three allocator nodes, two downstream dependency nodes, allocates-to and deposits-into edges). Scores: External Dependencies 1.5 -> 3.0 (rubric Score 3, held below 4 because counterparties are mostly blue-chip, none above ~7.7% of backing, and no core user function depends on them). Cat 2 1.2 -> 1.7. Final 1.4 -> 1.5; tier unchanged - colors.ts maps score <= 1.5 to Minimal Risk, consistent with origin-arm, yearn-yvusdc and yearn-yvweth. Collateralization held at 2.5 with the corrected 29.3% figure, and the case for 3.0 stated explicitly as the least settled call in the report. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
Both P2 findings verified and both hold. Fixed in 665a72a. P2-1 — Backing denominatorConfirmed, and the check that settles it is that Observatory books the LitePSM at the Pocket value, not the ilk debt: That is exactly the Recomputed on a consistent denominator (Observatory loan-coverage backing, same 10:50 UTC snapshot already cited):
So "~76% onchain" was wrong; it is 70.7%. The 24.0%-of-VAT-debt and 29.3%-of-backing figures were both arithmetically correct but answer different questions, and I had used the first to justify a claim about the second. The report now carries an explicit note on which denominator applies where, keeps the VAT-debt view only for the issuance table (labelled as such), and uses the backing denominator everywhere collateral quality is characterised. Also added the distinction you asked for between reported holdings and independently verified reserves — only the Pocket USDC and the onchain lending/LP positions survive a contract read; the offchain slice is attested. Score justification rewritten on the corrected numbers. Collateralization stays 2.5, but I have written the case for 3.0 into the report explicitly — two of the rubric's three columns match Score 3 outright — and labelled it the least settled judgment in the assessment. P2-2 — Allocator dependenciesAlso correct. Category 2C listed three dependencies while ~49.8% of VAT debt sat in allocator vaults with entirely unlisted downstream exposure. Pulled the named counterparties from Observatory: Offchain / tokenized credit (~29.3% of backing, ~$2.90B) — Janus Henderson Treasury Fund $758.7M · BlackRock BUIDL I Class $568.7M · Maple Syrup USDC $398.6M · Galaxy Warehouse OTC $320.0M · Janus Henderson Anemoy AAA CLO $262.2M · Anchorage OTC $220.0M · Janus Henderson AAA CLO $130.9M · Securitize Tokenized AAA CLO $103.2M · Anemoy/Apollo Diversified Credit $20.7M · legacy RWA $77.6M Onchain (~21.4%, ~$2.12B) — SparkLend USDS/USDT/USDC/DAI/PYUSD ~$1.25B · Steakhouse-curated Morpho vaults ~$261M · Uniswap V4 PYUSD/USDS and USDT/USDS ~$150M · Uniswap V3 AUSD/USDC ~$26M Third-party stablecoins held as backing — RLUSD $307.7M, PayPal USD $240.0M The mechanical link is direct, which is why it belongs in the score: impairment at a counterparty hits the allocator's ilk, settles as External Dependencies 1.5 → 3.0. The old 1.5 assumed a dependency list that stopped at USDC/Chainlink/LayerZero. Held at 3.0 rather than 4.0 because the counterparties are predominantly blue-chip rather than newer, no single allocator counterparty exceeds ~7.7% of backing, and no core user function (holding USDS, DAI conversion, SSR accrual) depends on any of them — only solvency does. Net score movement
Tier unchanged: Validation: build passes (114 pages), The four stale "Score 1.3" cross-references in |
| | Single point of failure | None. A USDC freeze/depeg impairs the USDS-USDC swap but the DAI-USDS converter still works; no single allocator counterparty exceeds ~7.7% of backing | | ||
|
|
||
| **Dependencies Score: 1.5 / 5** — One critical blue-chip external dependency (USDC) and one mature mid-criticality dependency (Chainlink). MCD core was previously double-counted as both internal architecture *and* external dependency — removing that, the residual external surface is small. Score 1.5 (between Score 1 "no external dependencies" and Score 2 "1-2 blue-chip non-critical") reflects that USDC is blue-chip but criticality is non-trivial. | ||
| **Dependencies Score: 3.0 / 5** — the rubric's Score 3 is "2-3 established protocol dependencies; some critical functions depend on them", and the honest count is higher than that once the allocator book is enumerated: a dozen-plus established counterparties, of which USDC is critical to the swap path and the offchain-credit set is critical to solvency. The prior 1.5 was derived from a dependency list that stopped at USDC, Chainlink and LayerZero, and is not defensible now that ~49.8% of VAT debt is documented as sitting in allocator vaults with named downstream exposure. It is held at 3.0 rather than 4.0 because the dependencies are mostly blue-chip rather than "newer", no single allocator counterparty exceeds ~7.7% of backing (the largest is the Janus Henderson Treasury Fund at ~$758.7M), and the *core user functions* — holding USDS, converting to DAI, accruing SSR in sUSDS — depend on none of them; only solvency does. |
There was a problem hiding this comment.
I think this should be 4.0 under the current rubric. Score 4 covers many or newer dependencies where critical functionality depends on them. This section identifies more than a dozen counterparties and explicitly says they are critical to solvency. Their established reputations and diversification are useful mitigants, but solvency is itself a core requirement for USDS. Holding the token or converting it to DAI can still work mechanically even when the backing is impaired. Please raise External Dependencies to 4.0 and recalculate the category and final scores.
There was a problem hiding this comment.
Agreed, fixed in cbec543. External Dependencies is now 4.0. The report lists a dozen-plus counterparties (Circle; Janus Henderson/Anemoy, BlackRock BUIDL, Maple, Galaxy, Anchorage, Securitize, Apollo; SparkLend, Morpho, Uniswap; RLUSD, PYUSD), and USDS solvency depends on them collectively. That matches rubric Score 4. Established names and the ~7.7% largest single exposure are kept as mitigants but no longer lower the row. Cat 2 is now 2.00.
| | Leverage | None at USDS holder level. CDP borrowers are leveraged by design | | ||
|
|
||
| **Collateralization Score: 2.0 / 5** — 100% backed by a *mix* of onchain (crypto, USDC PSM, D3M) and offchain-custody (RWA) assets. Mixed quality but extensively documented and historically robust. | ||
| **Collateralization Score: 2.5 / 5** — collateralized in aggregate (total collateral value ~$15.81B, ~131% of VAT debt), but not by the rubric's Score-2 standard of "100% **onchain** collateral". Measured against Observatory's ~$9.91B loan-coverage backing, **~29.3% (~$2.90B) is offchain** tokenized treasury, AAA corporate, private and OTC credit, confirmed by periodic attestation rather than contract reads — that is the Score-3 backing and verifiability profile. Against that, ~70.7% is onchain, and the single largest line — ~$3.95B of USDC in the PSM Pocket, ~39.9% of backing — is instantly verifiable by a `balanceOf` call. |
There was a problem hiding this comment.
I would use 3.0 here. With 29.3% of backing in offchain assets verified through periodic attestations, this matches the rubric’s score 3. The remaining onchain backing does not remove that dependence.
There was a problem hiding this comment.
Agreed, fixed in cbec543. Collateralization is now 3.0. About 29.3% of loan-coverage backing is offchain and verified by periodic attestation, which matches the Score-3 backing and verifiability columns. Allocator opacity (~49.8% of VAT debt) supports the same result. Cat 3 is now 2.25.
There was a problem hiding this comment.
I would score governance 2.0. The rubric requires a timelock of at least seven days for score 1, while Sky has 48 hours and broad upgrade and minting powers. Continuous voting does not extend that reaction window to seven days.
There was a problem hiding this comment.
Left at 1.0. After this comment was written, 951bdf0 changed the rubric so Score 1 requires a "48h+ timelock on critical operations". MCD_PAUSE.delay() is exactly 172800 (48 h), so the timelock column meets Score 1 with no margin. The report still said 48 h was "below the 7-day threshold", so that text is corrected in cbec543. The report also no longer relies on continuous voting to justify the score. It now states that any delay() reduction below 48 h would drop this row to Score 2, and that a single supporter above 50% of hat approvals triggers a re-review.
There was a problem hiding this comment.
Please correct this: redeem() burns sUSDS and transfers USDS already held by the vault. drip() mints only accrued yield via USDS_JOIN, not the full withdrawal amount.
There was a problem hiding this comment.
Fixed in cbec543. redeem() burns sUSDS and transfers USDS the vault already holds. drip() mints only accrued yield via vat.suck + USDS_JOIN. I checked this against the deployed SUsds source and onchain balances at block 25939320: the vault holds 4,674,942,458 USDS against totalAssets() of 4,674,942,773.
Resolve the final-score conflict with master's two-decimal round-down rule and hard tier lines (#484), and apply the pending review comments: - External Dependencies 3.0 -> 4.0: a dozen-plus allocator counterparties on which USDS solvency depends matches rubric row 4. - Collateralization 2.5 -> 3.0: ~29.3% of backing is offchain under periodic attestation, matching the rubric's Score-3 columns. - Governance stays 1.0: the rubric now treats a 48h+ timelock as Score 1 (changed in 951bdf0); stale "below the 7-day threshold" text removed. - Correct sUSDS redeem description: redeem() transfers USDS the vault already holds; drip() mints only accrued yield via USDS_JOIN. - Correct VAT debt vs ERC-20 supply gap: Vow surplus ($633.2M) plus Pot DSR deposits ($203.5M), verified at block 25939320. Cat 2 2.00, Cat 3 2.25, final 1.675 -> 1.67 (Low Risk). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Deploy preview for risk-score ready!
Deployed with vercel-action |
Closes #411.
Focused refresh of
reports/report/sky-usds.mdat snapshot block 25939320 (September 9, 2026). All figures re-read onchain viacast, the Sky chainlog, the Sky governance portal, DefiLlama, and Block Analitica's Observatory.Changed facts
Supply and rates
totalSupply(): 7,821,339,325 → 6,645,559,216 (−15%)totalAssets(): 5,875,069,384 → 4,674,942,773; share of mainnet supply 75.1% → 70.3%chi1.1002 → 1.1090;ssrunchanged at ~3.60% APYdebt()12.76B → 12.06B; DAI+USDS issued 12.04B → 11.22B$5.81B → **$5.51B**PSM
buf400M → 800M DAI (786.5M held at snapshot);tin = tout = 0unchangedCross-chain (largest structural change)
wards, and bridge ownership are unchanged.Collateralization (accuracy fix, not just a refresh)
The previous report's backing table omitted the Prime allocator vaults, which are the largest issuance class. Restated from onchain
MCD_VAT.ilksArt × rate:LITE-PSM-USDC-A~$4.73B (39.3%),ALLOCATOR-SPARK-A~$3.06B,ALLOCATOR-BLOOM-A(Grove) ~$2.50B,ALLOCATOR-OBEX-A~$403M,ALLOCATOR-PRYSM-A~$25.0M,ALLOCATOR-GROVE-A$16.6M — allocators total **$6.01B, ~49.8% of VAT debt**ILK_REGISTRYenumerated: Σ(Art × rate) $11,367,876,592.81 +vat.vice()$690,101,841.19 =vat.debt()$12,057,978,434.00 exactlyPSM-GUSD-A/PSM-PAX-Aare dust (~$0.57 / ~$0.38) andDIRECT-SPK-AAVE-LIDO-USDSis zero — all three previously described as live secondary channelsbufDAI is excluded from the backing denominator. Balance sheet ~$11.49B assets vs ~$11.42B liabilitiesvicewas previously described as Vow surplus. It is unbacked debt created structurally by SSR/DSR accrual (drip()→vat.suck(vow, …)). Vow surplusvat.dai(vow)is $633.2M; net Vow position −$56.9M, matching Observatory's Operating Cash Balance linesUSDS mechanics (accuracy fix)
redeem()burns sUSDS and transfers USDS the vault already holds;drip()mints only accrued yield viaUSDS_JOIN. The vault held 4,674,942,458 USDS againsttotalAssets()4,674,942,773 at the snapshotExternal dependencies (accuracy fix)
Governance
hat()rotated0x0aE3…e253→0x2bf5…2E05(executed spell)Other
Unchanged critical controls
Verified at the snapshot, all identical to the June 2026 assessment:
0x1923DfeE706A8E78157416C29cBCCFDe7cdF4102, sUSDS impl0x4e7991e5C547ce825BdEb665EE14a3274f9F61e0— noUpgradedevents since block 25345447USDS.wards= {USDS_JOIN, PauseProxy} only — noRely/Denyevents since block 25345447MCD_PAUSE.delay() = 172800(48 h),owner = address(0)LITE_PSM_MOMauthority = Chief, owner = PauseProxy; full log scan still returns exactly 4 events, none aHaltowner = PauseProxy; every configured channel (USDS↔Solana, USDS↔Avalanche, sUSDS↔Avalanche) still 2-of-2 DVN (LayerZero Labs + Nethermind), 12/32 confirmations. sUSDS↔Solana has no peer set, so its 4-DVN reading is the LayerZero default and carries no exposureScore
1.3 → 1.67 / 5.0 — Minimal Risk → Low Risk (Approved with standard monitoring).
The move is a scoring correction from newly documented facts, not a deterioration in the protocol. The supply contraction was orderly (no depeg beyond 0.25% on the daily series, no PSM halt, no fee change), and the offchain share of backing actually fell.
MCD_PAUSE.delay()is exactly 48 h. Any reduction below 48 h would drop it to Score 2.Assessment History table seeded with the June 18, 2026 initial assessment plus this reassessment.
Companion artifacts
reports/graph/sky-usds.yaml— node notes refreshed (sUSDStotalAssets(), Pocket USDC); added three Prime allocator nodes, two downstream dependency nodes, andallocates-to/deposits-into/controlsedges. Governance path, proxies and mint authority are unchanged.src/data/bridges.json— bothsky-usdsdetailstrings updated for the new locked/escrowed amounts.Validation
Re-run after merging
origin/master(cbec543):npm run build— passes (update_stats → check_bridges → check_graphs → astro build); 0 graph errors, remaining warnings are in other reportsnpm test— 0 failuresuv run scripts/check_defillama_links.py reports/report/sky-usds.md— all links validUnresolved / unverified
RWA007-A,RWA013-A) now read zero and dust onchain.Follow-up (not in this PR)
Other reports still cite USDS as 1.3 / Minimal Risk:
sky-stusds.md(lines 387, 802) andyearn-yvusd.md(lines 161, 408). They feed the USDS score into their own assessments, so they need their own reassessment rather than a find-and-replace.sky-stusdsis being refreshed in #493.🤖 Generated with Claude Code