The ManagerCut is sent to the ContestManager contract instead of the caller of the closeContest function. This issue arises because the Pot::closePot function transfers a portion of the remaining rewards to msg.sender, which is the ContestManager contract. However, since the ContestManager contract does not have a withdraw function and does not forward the funds to the closeContest caller, the funds are effectively lost.
When ContestManager::closeContest is called, it invokes the Pot::closePot function. The closePot function transfers 1/managerCutPercent of the remaining rewards to msg.sender (the ContestManager contract). As the ContestManager contract does not handle these funds or forward them to the actual caller, the funds remain stuck in the contract, resulting in a loss of fees.
Funds are trapped in the ContestManager contract, leading to a permanent loss of fees for the manager. This vulnerability affects the liquidity and proper reward distribution within the system.
Manual Review
To resolve this issue, modify the ContestManager::_closeContest function to forward the funds to the caller.
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.