ERC20 should follow the OpenZeppelin specification:
Zero-address sends revert with "ERC20: transfer to the zero address"
approve(address(0)) should be allowed (believe it or not, OZ allows this!)
mint and burn must be controlled by access control
Allowance changes must follow OZ patterns
Your custom ERC20 introduces:
Unknown revert selectors (IERC20Errors.ERC20InvalidReceiver)
Disallowed approve(address(0)) even though OZ allows it
Anyone can mint/burn tokens
Reverts mismatch OZ semantics
Tests encode these incorrect semantics as “correct”
Likelihood:
This will happen whenever the token integrates with a DEX, wallet, or bridge, because revert selectors do NOT match ERC20 standard expectations.
Impact:
ERC20 integrations (DEXes, bridges, wallets, explorers) will break because revert selectors are nonstandard.
Tests encode incorrect behavior as “correct”, making developers believe this ERC20 is valid.
1. Anyone can mint unlimited tokens
2. Anyone can burn a victim’s balance
approve(address(0)) incorrectly reverts, breaking standard ERC20 integrations
test_approveRevert() expects revert on approve(address(0)) → this is wrong behavior per OZ.
Follow OZ revert patterns.
Write tests using OZ revert messages / revert selectors.
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.