😭Reliance On Fetching Oracle Functionality
Impact
Within the WrappedIbbtc
contract, users will encounter an inability to execute transfers if oracle.pricePerShare()
(found on Line 124) reverts. This issue arises because balanceToShares()
—a function integral to both transfer
and transferFrom
methods—incorporates a call to pricePerShare()
. This dependency means that any failure in pricePerShare()
would incapacitate the transfer
and transferFrom
functionalities.
It's crucial to highlight that there is an inconsistency in behavior with WrappedIbbtcEth
, which does not directly rely on oracle.pricePerShare()
for transfers. Instead, WrappedIbbtcEth
utilizes a cached value stored in a local variable pricePerShare
. This cached value isn't continuously updated but rather refreshed only through calls to the updatePricePerShare()
function.
Recommended Mitigation Steps
To rectify this inconsistency and potential transfer issue, careful review and modification of the contracts are necessary. Depending on the intended behavior specified in your design, you will need to adjust one of the contracts:
If the design requires real-time price per share for transfers, consider updating
WrappedIbbtcEth
to mirror the behavior ofWrappedIbbtc
.Conversely, if the design allows for the use of cached values, you should adjust
WrappedIbbtc
to use a locally stored variable forpricePerShare
similar to the approach inWrappedIbbtcEth
.
Through these changes, you can ensure consistent and expected behaviors across the contracts, enhancing the reliability and functionality of the transfer processes in both contracts.
Impact
Inability to call consult
on the TwapOracle and so calculate the exchange rate between USDV and VADER.
Proof of Concept
Should any of the Chainlink aggregators used by the TwapOracle becomes stuck in such a state that the check on L143-146 of TwapOracle.sol
consistently fails (through a botched upgrade, etc.) then the consult
function will always revert.
There is no method to update the address of the aggregator to use so the TwapOracle
will be irrecoverable.
Recommended Mitigation Steps
Allow governance to update the aggregator for a pair (ideally with a timelock.)
Last updated