Potential DoS (blocked) on rETH unstake
The rETH token has a feature that makes sure a certain amount of time has passed since the last deposit. It does this using a timelock system in the _beforeTokenTransfer
function.
https://github.com/rocket-pool/rocketpool/blob/master/contracts/contract/token/RocketTokenRETH.sol#L157-L170
This function is called before all transfer, mint, and burns.
in DittoETH, there is an unstake
on BridgeReth which will burn the rETH.
Originally, it took 24 hours before you could withdraw your deposit. However, at some point, this was changed to zero, meaning there's a chance it might be changed back to a non-zero value. This could potentially prevent withdrawals from Reth because when someone deposits into Rocket Pool, they can only withdraw (or "burn") after a certain number of blocks have passed.
So, whenever the Reth contract deposits into Rocket Pool, it updates a value called lastDepositBlock
, and then withdrawals are blocked for a number of blocks equal to depositDelay
. This means users can't withdraw from all the different parts (or "derivatives") because the process of unstaking goes through all of them.
Additionally, a user with bad intentions could stake their deposit at regular intervals (every depositDelay
amount of blocks) in order to block withdrawals for others.
Thus, any valid user may be blocked to unstake due to some bad user keep blocking the withdrawals.
There is a thread discussion about this on rocketpool which you may want to read.
And also, for a referrence, this same issue was classified as accepted medium issue on Code4rena:
https://code4rena.com/reports/2023-03-asymmetry#m-08-possible-dos-on-unstake
https://github.com/code-423n4/2023-03-asymmetry-findings/issues/685
https://github.com/code-423n4/2023-03-asymmetry-findings/issues/202
https://github.com/code-423n4/2023-03-asymmetry-findings/issues/522
If the delay value is changed again for any reason, any withdrawals that don't wait for the required delay time since the last deposit will not work. Since users can keep adding more ETH, this would make the admins have to shut down the Rocket Pool derivative for an unknown amount of time so that users can take their ETH out.
Manual analysis
Consider changing the Reth so that users can also get rETH through the UniswapV3 pool. This might mean users get slightly less rETH on average because of slippage, but it would help avoid potential problems with the deposit delay mechanism in the future.
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.