the OperatorVault.isRemoved() is calling stakeController.isRemoved() as follows.
https://github.com/Cyfrin/2024-09-stakelink/blob/f5824f9ad67058b24a2c08494e51ddd7efdbb90b/contracts/linkStaking/OperatorVault.sol#L213C5-L215C6
the issue is that originale IStaking.sol of chainlink implementation doesn't contains any function called isRemoved(), see Staking.sol and IStaking.sol:
https://etherscan.io/address/0x3feB1e09b4bb0E7f0387CeE092a52e85797ab889#code
propably the developer confuse between isRemoved() and isOperator()
the following functions calls isRemoved() leading to a DOS of the Operators Vaults
https://github.com/Cyfrin/2024-09-stakelink/blob/f5824f9ad67058b24a2c08494e51ddd7efdbb90b/contracts/linkStaking/OperatorVault.sol#L226
https://github.com/Cyfrin/2024-09-stakelink/blob/f5824f9ad67058b24a2c08494e51ddd7efdbb90b/contracts/linkStaking/OperatorVCS.sol#L240
https://github.com/Cyfrin/2024-09-stakelink/blob/f5824f9ad67058b24a2c08494e51ddd7efdbb90b/contracts/linkStaking/OperatorVCS.sol#L279
all the following function will be dossed :
queueVaultRemoval(), getMaxDeposits() and exitVault().
manual review
i recomend to use Staking.isOperator()wich is implemented as we can see:
in Staking.sol line 612, and isOperator() calls s_pool._isOperator() internal function, see StakingPoolLib.sol line 197.
https://etherscan.io/address/0x3feB1e09b4bb0E7f0387CeE092a52e85797ab889#code
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.