The UpliftOnlyExample contract collects owner fees from swap operations and stores them in the contract address (address(this)), but lacks any mechanism to withdraw these accumulated fees. This results in permanently locked funds as neither the contract owner nor any other party can access these fees once collected.
The issue occurs in the fee collection mechanism implemented in the onAfterSwap hook function of the UpliftOnlyExample contract. Here's a detailed breakdown:
Fee Collection Process:
UpliftOnlyExample.sol#L343
Here, you can see that owner fees are sent to address(this) instead of a withdrawable address.
The UpliftOnlyExample contract inherits from Ownable but doesn't implement any withdrawal functionality. No function exists in the contract or its inherited contracts to transfer tokens from the contract address.
All owner fees collected through swap operations are permanently locked in the contract
Manual Review
Add Withdrawal Function in UpliftOnlyExample contract:
Likelihood: High, every swap. Impact: High, funds are stuck.
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.