Loss of funds for removed operator due to missing unbond
call
https://github.com/Cyfrin/2024-09-stakelink/blob/main/contracts/linkStaking/OperatorVault.sol#L225
After an operator is removed, unbond
should be called in order to withdraw principal amount of operator. But there's a flaw calling unbond which causes revert of unstakeRemovedPrincipal
function for removed operators in exitVault
.
Ideally, operators are called unbound
via updateVaultGroups
function which loops through the vaults.
In the process, the vaults array are retrieved by FundFlowController._getTotalDepositRoom
function which excludes removed operators.
Hence, removed operators won't be called unbond
function which means unbond period will never get started for them.
Finally, if it tries to exit via exitVault
function, unstakeRemovedPrincipal
will revert because of locked funds in Staking Contract.
Funds of removed operators get stuck in OperatorStakingPool
contract.
Manual Review
There are several possible solutions to resolve this situation. One of them would be to adjust updateVaultGroups
to properly unbond
removed operators so that vaults can exit without issues.
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.