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.