The _transfer function uses unchecked assembly arithmetic when adding to the recipient's balance, allowing silent integer overflow that can cause loss of tokens.
While the _transfer function checks if the sender has sufficient balance, it does not check for overflow when adding to the recipient's balance.
In Yul assembly, the add operation wraps on overflow without reverting.
Likelihood:
Requires recipient to already have a balance close to type(uint256).max
Unlikely in normal operation but possible in edge cases
Impact:
Recipient's balance wraps to a small value
Tokens are effectively lost/destroyed
Accounting inconsistency between totalSupply and sum of balances
Add overflow check before storing the new recipient balance.
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.
The contest is complete and the rewards are being distributed.