I have multiple versions of solc installed

❯ asdf list solidity 

latest solc includes the default evm version in the help output:

❯ solc --version && solc --help|grep evm
solc, the solidity compiler commandline interface
Version: 0.8.23+commit.f704f362.Linux.g++
  --evm-version version (=shanghai)
  --machine evm        Target machine in assembly or Yul mode.
  --yul-dialect evm    Input dialect to use in assembly or yul mode.

but older versions of solc don't have this information

❯ asdf shell solidity 0.4.24
❯ solc --version && solc --help|grep evm 
solc, the solidity compiler commandline interface
Version: 0.4.24+commit.e67f0147.Linux.g++
  --evm-version version
  --machine evm,evm15,ewasm

The problem is when I use foundry's chisel, I have to tell it the correct evm version otherwise it would fail

❯ chisel --use 0.4.24
solc 0.4.24 is not supported by the set evm version: paris. Please install and use a version of solc higher or equal to 0.8.18.
You can also set the solc version in your foundry.toml.

however this works (note that petersburg is just a random guess)

❯ chisel --use 0.4.24 --evm-version petersburg
Installing solidity version 0.4.24...
Welcome to Chisel! Type `!help` to show available commands.

1 Answer 1


solc release notes: https://soliditylang.org/blog/category/releases/

changelog: https://github.com/ethereum/solidity/blob/develop/Changelog.md

0.4.21 - byzantium

you can now specify which EVM version the contract should be compiled for. Valid values are "homestead", "tangerineWhistle", "spuriousDragon", "byzantium" (the default) and "constantinople".

0.4.22 - support constantinople but not set as default

Commandline interface: Support --evm-version constantinople properly.

It seems that constantinople never made it to be set as default, or constantinople is actually the same as petersburg. see https://github.com/ethereum/solidity/issues/6084 and https://github.com/ethereum/solidity/issues/6086.

Constantinople was launched on the testnets, but was cancelled last minute on mainnet. It is to be launched on the same block as "Petersburg", which disables "net gas metering" introduced in Constantinople.

Since we do not support net gas metering in the gas estimator this should have no effect for us.

While it feels strange to have two hard forks, which in practice mean a single one, I still suggest we introduced "petersburg" as an entry in our EVMVersion listed to avoid any further confusion with users.

It is not fully clear if the community will refer to this hardfork as "constantinople" or "petersburg", but technically all documentation and clients are referring to it separately.

0.5.5 - petersburg

Support petersburg as evmVersion and set as default.

0.5.13 - support istanbul but not set as default

provides Istanbul-EVM compatibility (default is still Petersburg)

0.5.14 - istanbul

Solidity 0.5.14 sets the default EVM version to "Istanbul" and is targeted as the last release in the 0.5.x series.

0.8.5 - berlin

EVM: Set the default EVM version to "Berlin".

0.8.7 - london

EVM: Set the default EVM version to "London".

0.8.18 - paris

EVM: Set the default EVM version to "Paris".

0.8.20 - shanghai

Important Note This compiler switches the default target EVM version to Shanghai

0.8.24 (unreleased) - support cancun (not sure whether is set as default)

EVM: Support for the EVM Version "Cancun".

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.