Normal behavior: Contracts intended to be inherited and not deployed directly should be marked as abstract. This prevents accidental deployment of a contract that does not implement a full usable interface.
Issue: ERC20Internals contains only internal functions and state variables and is not intended for direct deployment. However, it is currently a concrete contract. Without the abstract keyword, Solidity allows deployment, which can lead to misuse or unintended behavior.
Likelihood: Medium
Reason 1: Developers may accidentally deploy ERC20Internals directly, thinking it is a usable ERC-20 token contract.
Reason 2: Automated tooling or scripts that deploy contracts generically may deploy this contract without realizing it is incomplete.
Impact: Medium
Impact 1: Deploying this contract directly results in a token with no public interface or usable functions, which is confusing and wastes gas.
Impact 2: Misuse could lead to untested or broken functionality if someone tries to use it as a base ERC-20 token without adding a proper implementation.
This contract has no public ERC-20 functions, so the deployed instance is non-functional.
Marking the contract as abstract prevents direct deployment and clarifies that it is intended only as a base contract.
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.