★ Immutable oracle address
Liquity V1 + V2 (LUSD / BOLD)'s assessment for RD-F-180 — scored yellow on the v1.7.0 rubric. The evidence below is the curator's reasoning for this score.
Evidence summary #
[★ CANDIDATE per PD-017 -- flag for T-14] v2 oracle addresses stored as Oracle public struct (not Solidity immutable keyword). However PriceFeed contracts are fully immutable: no proxy, no admin key, no setter functions -- no setOracle(), updateFeed(), or equivalent exists in WETHPriceFeed, MainnetPriceFeedBase, WSTETHPriceFeed, or RETHPriceFeed. No admin can change the oracle address post-deploy. This is functionally equivalent to immutability. v1 uses setAddresses() + immediate renounceOwnership() -- same functional outcome. F180 risk is real: if Chainlink ETH/USD is deprecated, no migration path exists short of users migrating to a new Liquity deployment. Mitigated by: (1) per-branch isolation (one branch failure does not cascade), (2) shutdown/lastGoodPrice graceful halt, (3) Chainlink ETH/USD is the most mature DeFi feed (low deprecation risk), (4) Tellor fallback in v1. Yellow: risk present and partially mitigated; not green (migration impossible) and not red (strong mitigations
Sources #
- GitHubLiquity Bold MainnetPriceFeedBase -- oracle struct storage, no setterliquity/bold MainnetPriceFeedBase.sol -- Oracle public ethUsdOracle (not immutable keyword); no setter functionsretrieved 2026-05-16
- Liquity protocol profile §3 contract table -- immutable PriceFeed contracts.research/protocols/liquity/00-profile.md §3 -- all PriceFeed contracts listed as no proxy, no adminretrieved 2026-05-16
- Liquity v1 PriceFeed -- setAddresses + renounceOwnership patternliquity/dev PriceFeed.sol -- setAddresses() with renounceOwnership(); no post-deploy oracle change pathretrieved 2026-05-16
Methodology #
Determine whether any collateral oracle address is marked `immutable` in protocol config with no admin-replaceable adapter wrapper, preventing the protocol from repricing when the upstream asset depegs.
See the full factor methodology and distribution across all protocols →