pragma solidity ^0.8.20 defaults the EVM target to Shanghai, introducing the PUSH0 opcode (0x5F).
Several EVM-equivalent chains, notably zkSync Era, Polygon zkEVM, and older Arbitrum nodes, do not yet support PUSH0 causing deployment to fail silently or with an opcode-invalid error.
The project states compatibility with "EVM Equivalent Chains Only", making this a concrete deployment risk.
Likelihood:
The protocol explicitly targets "EVM Equivalent Chains", which includes L2s. zkSync Era uses a custom EVM dialect that rejects PUSH0 outright; Polygon zkEVM and older Arbitrum sequencer versions have the same restriction.
Any deployment attempt on these chains would fail at the point of contract creation before any protocol logic runs, silently wasting deployment gas. As L2 adoption grows, the surface area for this failure increases.
This is a deployment-time issue with no runtime PoC. The following shell commands confirm PUSH0 presence in the compiled artifact and show how to verify it:
Pin the EVM target to paris in foundry.toml this produces PUSH0-free bytecode while retaining all Solidity 0.8.20 language features:
Or downgrade the compiler to 0.8.19 (which pre-dates the Shanghai EVM target):
The contest is live. Earn rewards by submitting a finding.
Submissions are being reviewed by our AI judge. Results will be available in a few minutes.
View all submissionsThe contest is complete and the rewards are being distributed.