Loss of funds for removed operator due to missing unbond call
https://github.com/Cyfrin/2024-09-stakelink/blob/main/contracts/linkStaking/base/VaultControllerStrategy.sol#L478
https://github.com/Cyfrin/2024-09-stakelink/blob/main/contracts/linkStaking/FundFlowController.sol#L414
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.