Valid withdrawal can be denied due to minWithdrawalAmount check in queueWithdrawal function
https://github.com/Cyfrin/2024-09-stakelink/blob/main/contracts/core/priorityPool/WithdrawalPool.sol#L303
https://github.com/Cyfrin/2024-09-stakelink/blob/main/contracts/core/priorityPool/PriorityPool.sol#L679
When a user requsted withdrawal of amount greater than available queued tokens, remaining should be queued via queueWithdrawal function. But due to minWithdrawalAmount check, the withdrawal request can be denied.
Here's the minWithdrawalAmount check from queueWithdrawal function:
Below is a simple scenario that the revert can happen:
Legitimate user requests a withdrawal via PriorityPool contract
PriorityPool contract checks the amount of queued tokens and see if it can be fulfilled.
If it exceeds the queued amount, queueWithdrawal function is called to queue an additional withdrawal.
If the requested amount is smaller than minWithdrawalAmount, the function call would fail despite it being called from authorized party and to be a valid request.
That being said, while the minimum amount check could be valuable in one-time withdrawal requests or so there should be an improvement to deal with above edge cases without any unfair reverts.
This results in obvious DoS cases.
Manual Review
Check if the amount to queueWithdrawal function is residue or not. In case, min amount check can be skipped.
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.