Skip to main content

Differences to Ethereum

EVM differences

The Immutable zkEVM chain is built from a geth fork. While Immutable keeps its chain as consistent as possible with mainnet Ethereum, there are some notable differences. This section summarises those differences.

Solidity compatibility

Immutable zkEVM's most recent hard fork brings us in line with Ethereum's Shanghai fork. We currently only support Solidity versions up to and including 0.8.23. Our EVM does not support versions 0.8.24 and beyond that were introduced in the most recent Ethereum hard fork, Dencun. This means that if you use ^, you will pull the latest solidity compiler version that is incompatible with Immutable zkEVM. We'll be transitioning to Dencun over the coming year; stay tuned.

In Solidity, that is

pragma solidity <=0.8.23;

PREVRANDAO Op Code

The PREVRANDAO op code was introduced by EIP-4399. The op code is specified to return the value of the mixHash field of the block header.

Immutable zkEVM runs a consensus mechanism based on EIP-225 which requires the mixHash field of the block header to always be set to uint256(0).

Therefore, smart contracts deployed on Immutable zkEVM cannot rely on PREVRANDAO op code to return a pseudo-random value. It will always return uint256(0).

RPC endpoint support

We’ve disabled support for debug_* calls because they have an unbounded memory usage on geth, and we don’t want it to be used as a DDoS vector. We expect users who rely on these endpoints to query QuickNode instead.

Additionally:

  • We’ve disabled support for engine_* calls because they are unnecessary in our current deployment
  • We’ve disabled support for txpool_* calls to prevent front-running
  • We’ve disabled support for admin_* calls

For a list of supported methods, see this documentation.

Access Control Lists (ACLs)

While these are separate pieces of configuration, the following are our two gating lists:

  1. Deployer allowlist - This ACL will only apply to Mainnet. Initially, we will limit which wallets addresses can deploy a contract on the chain. We will do this as a quality control measure and to conserve network bandwidth while the first set of Games and developers are onboarding. The long-term plan is to open up the Immutable zkEVM chain. Read more about the Deployer allowlist.
  2. Transaction blocklist - This ACL will apply to Mainnet and Testnet. To comply with international regulations, we must block a list of sanctioned wallet addresses from accessing the chain.