in UpliftOnlyExample::onAfterRemoveLiquidity() the function sends the QuantAMMAdmin to the admin in the wrong way, making it non retrievable for the admin
in UpliftOnlyExample::onAfterRemoveLiquidity(), the fees are sent the to QuantAMMAdmin as a BPT tokens here
But the problem is that when the admin wants to exchange those BPT tokens, he can't do it through UpliftOnlyExample directly, since the admin doesn't have LPNFT token or a stored position in poolsFeeData failing his txn in onAfterRemoveLiquidity by this loop that will underflow if he doesn't have enough BPT token balance registered in the contract here
this will underflow cause his desired withdrawal balance haven't been substracted during the loop to break it here
And if he tries to remove directly from BalancerV3 vault, he can't since balancer calls onAfterRemoveLiquidity with msg.sender as the router, which will fail due to onlySelfRouter modifier
This way, the admin is holding useless BPT tokens that can't be exchanged to tokens
Loss of funds (fees) to QuantAMMAdmin
Manual Review
Implement position registering to admin and mint NFT to him (complex and gas costly)
Implement a logic to send Tokens to admin and not adding liquidity to him (easier and less gas costly)
Likelihood: High, won’t be able to withdraw. Impact: High, funds 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.