Bytecode Size Limit
Overview
The bytecode size limit detector identifies contracts whose deployed bytecode approaches or exceeds the 24,576 byte limit imposed by EIP-170. Contracts exceeding this limit cannot be deployed on Ethereum mainnet or most EVM-compatible chains.
Why This Is an Issue
EIP-170 (Spurious Dragon hard fork) set a maximum contract code size of 24,576 bytes. Contracts exceeding this limit fail to deploy. Contracts approaching the limit (>23,000 bytes) are at risk of exceeding it with minor additions, and they incur higher deployment gas costs.
Large contracts typically indicate insufficient modularization – logic that should be split across libraries or separate contracts is monolithically bundled.
How to Resolve
- Split large contracts into libraries using
DELEGATECALL - Use the diamond proxy pattern (EIP-2535) for modular facets
- Move view/pure functions to separate utility contracts
- Use external libraries instead of internal ones (external libraries are deployed separately)
Examples
Sample Sigvex Output
{
"detector_id": "bytecode-size-limit",
"severity": "medium",
"confidence": 0.95,
"description": "Contract bytecode is 23,842 bytes (97% of 24,576 byte EIP-170 limit). Adding more logic may prevent deployment. Consider splitting into libraries or proxy facets.",
"location": { "function": "contract-level", "offset": 0 }
}
Detection Methodology
- Size measurement: Measures the deployed bytecode length.
- Threshold check: Flags contracts above 22,000 bytes (90% of limit) as warning, above 24,576 as error.
- Function analysis: Reports the largest functions by bytecode contribution to guide refactoring.
Limitations
- Constructor code (initcode) is not subject to the 24KB limit and is not flagged.
- EIP-7702 and future EIPs may adjust the limit for specific contract types.
Related Detectors
- Gas Optimization – general gas optimization
- Dead Code – unreachable code that inflates size