There are multiple instances of unsafe ERC20 transfers which could lead to stakers losing their rewards.
Although SafeERC20
library is imported in LiquidationPool
and used for transferFrom
, it is not used for transfer
and the value from the transfer is not checked. If the transfer of ERC20 tokens fails (for example if it returns false), the protocol wouldn't know and will assume that everything is fine. If we look at LiquidationPool::claimRewards
, we can see that we delete the rewards
mapping before the transfer so if the transfer fails the user loses his rewards.
EIP20 states that the value returned from transfer
should always be checked:
Callers MUST handle
false
fromreturns (bool success)
. Callers MUST NOT assume thatfalse
is never returned!
Leads to loss of rewards for users if the transfer of tokens fails
Manual Review
Use the SafeERC20
library for transfer
as well. More precisely the safeTransfer
function.
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.