The ERC20 contract is not marked as abstract, yet it lacks public mint and burn functions. This means:
The contract can be deployed directly, but will have 0 total supply with no way to create tokens
The contract is essentially unusable when deployed standalone
This contradicts the intended design pattern (similar to OpenZeppelin's ERC20) where it should be used as a base class
For example: OpenZeppelin's ERC20 implementation is explicitly marked as abstract with documentation stating: "This implementation is agnostic to the way tokens are created. This means that a supply mechanism has to be added in a derived contract using {_mint}."
Likelihood:
Nothing preventing user to driectly deploy the contract expecting them to work standalone
Impact:
Users can deploy a useless token contract (0 supply, no way to mint)
Confusion about intended usage pattern
Inconsistency with industry standards (OpenZeppelin pattern)
This test verifies that a token can be deployed directly with 0 supply and there is no way to mint more tokens after deployment.
Mark the contract as abstract, and extend the token documentation with the note: "This implementation is agnostic to the way tokens are created. This means that a supply mechanism has to be added in a derived contract using _mint."
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.