The Verifier incorrectly calculates the storage slot for balance_of_self
, leading to incorrect price calculations and systemic protocol risks.
The Verifier assumes balance_of_self
is stored in an ERC20-style balanceOf
mapping and uses keccak256(abi.encode(18, scrvUSD))
to compute its slot.
Reality: In the Vyper-based scrvUSD Vault, balance_of_self
is a struct member (PriceParams
struct) stored at a fixed sequential slot (e.g., slot 12).
Vyper stores struct members in sequential slots (no hashing):
The Verifier’s hashing logic (keccak(18, scrvUSD)
) points to an arbitrary slot, resulting in garbage data being read.
The verifier will provide incorrect scrvUSD
price updates to the oracle.
This can lead to significant financial losses for users relying on the oracle's accuracy.
The entire price feed system becomes unreliable.
Manual Code Review
Update Verifier Logic:
Replace the current keccak256
-based calculation with direct slot access.
Use Fixed Slot for balance_of_self
:
Directly read balance_of_self
from its fixed slot (e.g., slot 12) instead of hashing.
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.