Banked 2026-06-11 (SEAMS lane, Morpho Blue ezETH/WETH WALK-CLEAN)
When auditing an LRT-as-collateral oracle, the make-or-break question is NOT "does the wrapper have a cap/staleness guard" - it is "what does the underlying feed actually MEASURE: secondary-market price (depeg-visible) or fundamental/redemption rate (depeg-invisible, donation-inflatable)?"
The wrapper (e.g. MorphoChainlinkOracleV2) is a thin passthrough; its price() just multiplies feed answers. The trust gap lives ENTIRELY in the feed semantics. A "no staleness guard, no cap" wrapper is SAFE if the feed is a defended market feed, and DANGEROUS if the feed is a self-reported redemption rate.
cast call FEED "getDataFeedId()(bytes32)" then cast --to-ascii -> RedStone feeds self-label: "ezETH/ETH" (market) vs "ezETH_FUNDAMENTAL"/"ezETH/ETH-exchange-rate" (redemption). Decisive in one call.description() ("Redstone Price Feed") and decimals() (8 = Chainlink-style) confirm interface, not semantics - do not stop there.Morpho Blue oracle choice = permissionless curator accepted-risk (immutable oracle, no governance vetting) -> OUT of scope even if the wrapper ignores staleness, because the code behaves exactly as documented. Aave/Spark governance-listed reserve oracle = permissioned config -> a bad oracle choice IS in-scope. Always resolve permissioned-vs-permissionless BEFORE judging severity.
Hunt a lending market whose ezETH (or rsETH/pufETH) adapter reads a Renzo-style getRate() / LRT-self exchange-rate feed rather than a DEX-market feed. Renzo BalancerRateProvider 0x387dBc0fB00b26fb085aa658527D5BE98302c84C is documented donation-vulnerable (reads address(eigenPod).balance). Candidates to grep: Zerolend mainnet-lrt pool oracles, Euler ezETH vaults, smaller Morpho markets curated off the FUNDAMENTAL feed.