Instead of using an older version of Solidity compiler, in hardhat to prevent use of `PUSH0` you can try setting `evmVersion` to a previous version (e.g. `paris`, which is the one before `shanghai`) whilst still using the latest compiler version (0.8.21 currently): ```json solidity: { compilers: [ { version: `0.8.21`, settings: { optimizer: { enabled: true, runs: 15000 }, evmVersion: `paris` } }, ], }, ``` Polygon announced last week that they’ve just implemented `PUSH0` on their zkEVM blockchain. I’ve tested the testnet and it works. zkEVM mainnet will work from 2023-09-10: [Polygon zkEVM: Dragon Fruit Upgrade (with New Opcode) Coming to Mainnet Beta][1] I also tested 140 blockchains today and only found these ones (16%) that support `PUSH0` currently: - auroraTestnet - edgeware - edgewareTestnet - gnosis - chiado - goerli - mainnet - moonbaseAlpha - moonbeam - moonriver - polygonZkEvmTestnet - pulsechain - pulsechainV4 - sapphire - sapphireTestnet - scrollSepolia - sepolia - syscoin - syscoinTestnet - taikoTestnetSepolia Hopefully the many other blockchains will follow, as developers want to be able to use the latest version. [1]: https://polygon.technology/blog/polygon-zkevm-dragon-fruit-upgrade-with-new-opcode-coming-to-mainnet-beta