The returned values of functions like transfer, transferFrom and approve are not checked.
The functions Staking::deposit, Staking::withdraw, Staking::claimRewards and Airdrop::claim call transfer and transferFrom in order to transfer tokens from/to msg.sender, stakingContract, stakingVault. But it is not checked if these functions are correclty executed:
Additionally, in the LoveToken::initVault is used approve function to approve amount of tokens. But the returned value from this function is not checked. If the approvement is not successful, the protocol would not work as intended.
If some of the stakingVault, stakingContract or msg.sender doesn't have enough balance, the transaction will revert with due Reason: panic: arithmetic underflow or overflow. But the user may not uderstand why this is happened.
And if the LoveToken::initVault doesn't succeed to initiate properly the Staking and Airdrop contracts, the functionality of the protocol will be broken.
If the approve function fails and does not return true, it means that the allowance was not set correctly. Since the return value of this function is not checked in the LoveToken::initVault constructor, the contract deployment will proceed as if the allowance was set correctly. This could lead to serious issues later on when the Staking and Airdrop contracts try to transfer tokens from the stakingVault and airdropVault. If the allowance was not set correctly, these transfer operations will fail, but the contract has no way of knowing this in advance because the return value of the approve function was not checked.
Manual Review
Add a check with meaningfull error message in the functions Staking::deposit, Staking::withdraw, Staking::claimRewards to ensure that the contract that transfer tokens has enough amount and check the returned value from the transfer and transferFrom functions.
Also, check of the return value of the transfer and transferFrom functions is required in Airdrop::claim function and in Lovetoken::initVault for the approve 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.