Introducing the newest version of the Solidity Compiler!
We are excited to announce the latest release of the Solidity Compiler, Solidity v0.8.20.
This latest version includes a range of improvements and, most importantly, support for Shanghai!
It also contains performance improvements in the via-IR pipeline and improves the list of events exposed in the contract ABI.
IMPORTANT NOTE: This compiler switches the default target EVM version to Shanghai, which means that the generated bytecode will include PUSH0
opcodes. Be sure to select the appropriate EVM version in case you intend to deploy on a chain other than mainnet like L2 chains that may not yet support PUSH0
, otherwise deployment of your contracts will fail.
Changelog
Compiler Features:
- Assembler: Use
push0
for placing0
on the stack for EVM versions starting from "Shanghai". This decreases the deployment and runtime costs. - EVM: Set default EVM version to "Shanghai".
- EVM: Support for the EVM Version "Shanghai".
- NatSpec: Add support for NatSpec documentation in
enum
definitions. - NatSpec: Add support for NatSpec documentation in
struct
definitions. - NatSpec: Include NatSpec from events that are emitted by a contract but defined outside of it in userdoc and devdoc output.
- Optimizer: Re-implement simplified version of
UnusedAssignEliminator
andUnusedStoreEliminator
. It can correctly remove some unused assignments in deeply nested loops that were ignored by the old version. - Parser: Unary plus is no longer recognized as a unary operator in the AST and triggers an error at the parsing stage (rather than later during the analysis).
- SMTChecker: Group all messages about unsupported language features in a single warning. The CLI option
--model-checker-show-unsupported
and the JSON optionsettings.modelChecker.showUnsupported
can be enabled to show the full list. - SMTChecker: Properties that are proved safe are now reported explicitly at the end of analysis. By default, only the number of safe properties is shown. The CLI option
--model-checker-show-proved-safe
and the JSON optionsettings.modelChecker.showProvedSafe
can be enabled to show the full list of safe properties. - Standard JSON Interface: Add experimental support for importing ASTs via Standard JSON.
- Yul EVM Code Transform: If available, use
push0
instead ofcodesize
to produce an arbitrary value on stack in order to create equal stack heights between branches.
Bugfixes:
- ABI: Include events in the ABI that are emitted by a contract but defined outside of it.
- Immutables: Disallow initialization of immutables in try/catch statements.
- SMTChecker: Fix false positives in ternary operators that contain verification targets in its branches, directly or indirectly.
AST Changes:
- AST: Add the
internalFunctionIDs
field to the AST nodes of contracts containing IDs of functions that may be called via the internal dispatch. The field is a map from function AST IDs to internal dispatch function IDs. These IDs are always generated, but they are only used in via-IR code generation. - AST: Add the
usedEvents
field toContractDefinition
which contains the AST IDs of all events emitted by the contract as well as all events defined and inherited by the contract.
We especially thank all the contributors that made this release possible:
Alexander Arlt, Alex Beregszaszi, Bhargava Shastry, chriseth, Christian Parpart, Daniel Kirchner, Francois-Rene Rideau, hrkrshnn, Kaan Uzdoğan, Kamil Śliwak, Leo Alt, Matheus Aguiar, Michael de Hoog, minaminao, mmqxyz, Nikola Matic, Nuno Santos, Ojas Aklecha, Peter Lemenkov, Rodrigo Q. Saramago, uji, Vaibhaw
If you want to perform a source build, please only use solidity_0.8.20.tar.gz
and not the source archives generated automatically by GitHub.