TokenManager::withdraw function transfers wrapped native tokens to the TokenManager contract instead of the caller (msg.sender).
In the TokenManager::withdraw function, if the token to be withdrawn is the native token, the wrapped native tokens are transferred to the address(this) (TokenManager contract). However, the documentation stipulates that those funds should be transferred to the msg.sender from capitalPoolAddr to msg.sender.
Below is the TokenManger::_transfer function :
This means that when withdrawing users withdraw tokens, wrapped native tokens are sent to the TokenManager contract instead of the caller.
When calling the TokenManager::withdraw function, if the token to be withdrawn is the native token, the caller will not receive their wrapped native tokens. Those funds will be stuck in the TokenManger contract.
Manual review.
Change the receiver to msg.sender instead of address(this) at TokenManager#L163.
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.