The price query functions in ScrvusdOracleV2.vy
(price_v0()
, price_v1()
, and price_v2()
) do not provide timestamp information alongside the returned prices, preventing users from verifying the freshness of the price data.
The oracle contract ScrvusdOracleV2.vy
implements three price query functions that return different versions of price calculations:
The critical issue is that these functions only return price values without any associated timestamp information. Without timestamps, users integrating with the oracle have no mechanism to determine when the prices were last updated or if they are stale.
Users cannot validate the freshness of price data
Potential use of stale prices in downstream applications
Reduced reliability of the oracle system
Manual Review
Modify the price query functions to return both price and timestamp data, using self.price_params_ts
as the timestamp reference
Consider implementing a struct return type that includes:
Price value
Last update timestamp
Any additional metadata relevant to price freshness
I believe this to be at best informational severity as - The moment sequencer is up again, the price updates that retrieve storage values from mainnet will be pushed. To note, price updates are retrieved from storage proofs are retrieved from Ethereum scrvUSD contract, so the concept of the next updated price being outdated is not possible, given mainnet does not utilize sequencers. - There are no problems with small lags if used in liquidity pools due to fees. Fees generate spread within which price can be lagged. - All price updates are subjected to smoothing, and as you can see from the historical price movements as seen [here](https://coinmarketcap.com/currencies/savings-crvusd/), there is never a large discrepancy in prices (absolute terms), and even more unlikely given sequencer downtimes will unlikely be long. This small price changes can be safely arbitrage aligning with [protocol design](https://github.com/CodeHawks-Contests/2025-03-curve?tab=readme-ov-file#parameters) , along with the above mentioned fees - Combined with the above, the max price increments can be temporarily increased to more effectively match the most updated price.
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.