Summary
This OIP proposes upgrading the PRICE module to PRICE v1.2 to improve the resilience of price feeds used by protocol contracts, particularly for OHM.
The updated configuration keeps backwards compatibility with the PRICE v1 interface while allowing PRICE to resolve assets from multiple sources and strategies.
Asset Configuration
USDS (0xdC0...84F)
- Price feeds:
- Strategy:
getAveragePriceExcludingDeviations() with 1% deviation from median
- Strict mode: enabled, requiring at least 2 valid values
- Moving average: not stored, not used
sUSDS (0xa39...fbD)
- Price feed:
- ERC4626 submodule, using the underlying USDS price and the sUSDS conversion rate
- Strategy: none required, as this is a single derived feed
- Moving average: not stored, not used
wETH (0xc02...cc2)
- Price feeds:
- Strategy:
getAveragePriceExcludingDeviations() with 5% deviation from median
- Strict mode: enabled, requiring at least 2 valid values
- Moving average: not stored, not used
OHM (0x64a...1d5)
- Price feeds:
- Strategy:
getAveragePriceExcludingDeviations() with 2% deviation from median
- Strict mode: enabled, requiring at least 2 valid values
- Moving average: stored, not used in spot price resolution
- Moving average duration: migrated from the live PRICE v1 module, expected to remain 30 days
Configuration Parameters
Update thresholds
| Asset | Feed | Update Threshold |
| USDS | Chainlink USDS-USD | 24 hours |
| USDS | Chainlink DAI-USD | 24 hours |
| USDS | Pyth USDS-USD | 24 hours |
| wETH | Chainlink ETH-USD | 1 hour |
| wETH | RedStone ETH-USD | 1 hour |
| wETH | Pyth ETH-USD | 1 hour |
| wETH | Chainlink ETH-BTC leg | 24 hours |
| wETH | Chainlink BTC-USD leg | 1 hour |
| OHM | Chainlink OHM-ETH leg | 24 hours |
| OHM | Chainlink ETH-USD leg | 1 hour |
Observation windows
| Asset | Feed | Observation Window |
| OHM | Uniswap V3 OHM/WETH | 25 minutes |
| OHM | Uniswap V3 OHM/sUSDS | 25 minutes |
Pyth confidence intervals
| Asset | Pyth Feed | Max Confidence |
| USDS | Pyth USDS-USD | 0.01e18 ($0.01) |
| wETH | Pyth ETH-USD | 10e18 ($10) |
Note: Pyth feeds require regular updates. If a Pyth feed is not updated within the configured update threshold, that feed will not contribute a valid price.
Timelock Behaviour
PRICE configuration is split between immediate setup actions and timelocked maintenance actions.
The following actions are queued through PriceConfigv2 and can only be executed after the current timelockDelay:
queueRemoveAsset: removes an approved asset from PRICE.
queueUpdateAsset: updates an approved asset's feeds, strategy, or moving-average configuration.
queueUpgradeSubmodule: upgrades an already-installed PRICE submodule.
queueExecOnSubmodule: performs a call on an installed PRICE submodule.
queueTimelockDelay: changes the delay used for newly queued actions.
Queued actions store their proposer, queue timestamp, executable timestamp, expiry timestamp, target, selector, and encoded payload. Execution is permissionless after the delay has elapsed and before the action expires. The emergency role can cancel queued actions before execution.
The following actions are not timelocked:
addAsset, because adding a new asset does not affect existing live price resolution paths.
installSubmodule, because installing a new submodule does not replace an already-live submodule implementation.
storeObservation and storeObservations, because these are operational moving-average maintenance actions.
Rationale
This configuration improves PRICE resilience by:
- Adding independent sources for USDS and wETH.
- Using deviation filtering to exclude stale, zero, manipulated, or materially divergent feed values.
- Keeping strict mode enabled so prices fail closed when too few valid values remain.
- Adding a third OHM path through Chainlink OHM-ETH x ETH-USD, so OHM can tolerate the loss of one OHM path while still requiring agreement between valid paths.
- Preserving the existing PRICE v1 interface so downstream policies do not need to be changed.
- Adding a timelock for material post-deployment PRICE configuration changes.
Deployment Process
Following community approval, the upgrade is expected to be executed via DAO multisig batch:
- Deploy PRICE v1.2 and required submodules.
- Install submodules through
PriceConfigv2.
- Configure USDS, sUSDS, wETH, and OHM in the same batch.
- Validate price resolution and Heart cycle behaviour before execution.
PriceConfigv2 is enabled by default so initial configuration can happen without a heartbeat downtime window. Future material changes to live PRICE configuration are routed through the timelock queue.
Next Steps
- OIP vote
- Snapshot vote
- DAO multisig batch execution (PriceConfigv2 enabled by default to prevent downtime)
- Deploy PRICE v1.2 module and 5 submodules
- Configure all assets (USDS, sUSDS, wETH, OHM) in same transaction
- Automatic validation via Heart cycle simulation