Description: The PUSH0 opcode is a new Ethereum Virtual Machine (EVM) instruction introduced in the Shanghai upgrade. It pushes the constant value 0 onto the stack. However, not all Ethereum-compatible blockchains (e.g., some Layer 2 solutions or forks) have adopted this opcode, leading to compatibility issues.
Impact:
Compatibility Issues: Contracts using PUSH0 may not deploy or execute correctly on chains that haven't implemented this opcode.
Deployment Failures: Attempting to deploy contracts on incompatible chains could result in errors or failed transactions.
Reduced Portability: Contracts are less portable across different EVM-compatible chains, limiting their usability and reach.
Proof of Concept: While PUSH0 is a low-level EVM instruction, its use can be indirectly observed in Solidity code compiled with newer compiler versions that target the Shanghai upgrade. Directly writing EVM bytecode is not typical in high-level Solidity contracts, but here's how you might encounter it:
Recommended Mitigation:
Target Compatible Chains: Ensure deployment targets are chains that support the Shanghai upgrade and PUSH0.
Use Compatible Compiler Versions: Compile contracts with versions that do not introduce PUSH0
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.