In 'Staking.sol::claimRewards' the lastClaim time of the msg.sender is not calculated correctly if the address has deposited LoveTokens but does not have a soulmate.
If an address has been transfered LoveTokens and deposits them into Staking.sol then they can claim rewards for how ever many tokens they deposited times the amount of weeks that have passed since the Ethereum blockchain started.
when calculating the lastClaim time, if the msg.sender does not have a soulmate then lastClaim would be set to 0
Now that lastClaim for the msg.sender = 0. timeInWeeksSinceLastClaim would equal the current (block.timestamp - 0) / 1 week. This would make timeInWeeksSinceLastClaim equal to the amount of weeks that have passed since the Ethereum blockchain started.
Now amountToClaim will equal timeInWeeksSinceLastClaim * the amount the msg.sender staked. Giving them far more tokens than they should be able to claim.
This test passes showing that an address that was transferred LoveTokens can stake them and claim a reward even if they don't have a soulmate.
--Foundry
It is reccomended to add a check to make sure the address claiming a reward has a soulmate.
High severity, as it allows any pending user to claim staking rewards without owning a soulmate NFT by - Obtaining love tokens on secondary markets - Transfer previously accrued love tokens via airdrops/rewards to another account and abusing the `deposit()` 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.