The PUSH0 opcode was introduced in Ethereum's Shanghai upgrade (April 2023) as part of EIP-3855 to optimize gas costs. While supported on Ethereum mainnet and most modern EVM chains, some L2s and alternative EVM implementations may not yet support this opcode.
Contracts compiled with Solidity 0.8.20+ may include PUSH0 instructions by default, potentially causing deployment failures or runtime errors on unsupported chains like:
Older Ethereum testnets not upgraded
Certain Layer 2 solutions
Alternative EVM chains (Polygon zkEVM, BSC before upgrades)
Likelihood: Medium
Deploying to chains that haven't implemented Shanghai upgrades
Using development environments with inconsistent EVM versions
Maintaining cross-chain compatible codebases
Impact:
Complete deployment failure on unsupported chains
Bytecode execution failures if somehow deployed
Fragmented deployment capabilities across ecosystems
The issue can be demonstrated by compiling with Solidity ≥0.8.20 and attempting deployment on unsupported chains (e.g., legacy testnets or non-upgraded L2s), resulting in PUSH0
-related revert errors.
Chain Compatibility Check:
Either:
Downgrade to Solidity 0.8.19 (pragma solidity 0.8.19;
), or
Explicitly set EVM version in configs:
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.