{ skip to content }

Solidity 0.8.30 Release Announcement

Posted by Solidity Team on May 7, 2025

Releases

We are releasing the Solidity Compiler v0.8.30. This latest version is a maintenance release in light of the Pectra Ethereum network upgrade scheduled for May 7, 2025 and changes the default EVM version from cancun to prague.

Pectra is an Ethereum protocol upgrade, following Dencun, that brings new functionality and changes to both the execution and consensus layer of the Ethereum network. Read more in the Pectra Mainnet Announcement.

Notable EIPs

Let's look at some of the EIPs among the list of changes introduced by Pectra that have the most impact on Solidity.

EIP-7623: Increase calldata cost

In Pectra, EIP-7623 proposes increasing the calldata cost for transactions that predominantly post data. This is meant to offset the bandwidth increase caused by another included EIP (EIP-7691) through reducing the maximum block size and its variance, without negatively impacting regular users.

The increase in calldata cost could affect the validity of decisions that compiler components have to make based on it. Most notably, the ConstantOptimizer, which is a part of the opcode-based optimizer module. To illustrate the issue, let's consider the constant 2**256 - 1. It could be encoded either as PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff (3 gas, 33 bytes) or PUSH0 NOT (5 gas, 2 bytes). The optimizer has to decide which one is a better choice and that involves making assumptions about the cost of each byte. Since the contract initcode is passed as calldata into the creation transaction, the cost of calldata is a part of that calculation, and has some influence on which form is chosen.

Despite this, we have decided not to introduce any adjustments to the calculations performed by the compiler. Firstly, it is nearly impossible to do so, due to fact that the cost increase is non-local and cannot easily be accounted for on the level of individual opcodes. The final cost now depends on the execution cost of the transaction, which is variable and depends on the input, the state and comes from the entirety of the path taken through the code. Secondly, going back to the ConstantOptimizer example, it is better mitigated by user's choice of optimization parameters, specifically --optimizer-runs. The default of 200 results in the compiler attempting to strike a balance between the cost of contract deployment and the cost of all expected calls over its lifetime and the higher calldata cost means the former may be underestimated. However, it is a common practice to choose either a very low or very high value to explicitly prioritize one or the other and this effectively removes the calldata cost from consideration.

EIP-7702: Set EOA account code

EIP-7702 in Pectra adds a new transaction type that allows an EOA owner to delegate their account to an existing contract and this way make it act as one. This is an important step on the road to full account abstraction. Read more in the EIP!

This newest release does not introduce any additional changes related to the above EIP. However, please note that the previous release of the compiler (v0.8.29) introduced control over storage layout specifically to allow multiple delegates to safely share storage belonging to the same EOA.

EIP-2537: Precompile for BLS12-381 curve operations

EIP-2537, nearly 5 years in the making, introduces a precompile necessary to perform BLS signature verification on chain. While Ethereum transactions use the much faster ECDSA signatures, BLS signatures are already used in the consensus and have long been requested due to a very desirable property: they can be aggregated.

Since precompile builtins are essentially thin wrappers over external function calls, they are straightforward to implement using existing features and do not require extending the language.

We believe that a feature like this is better delegated to an external library rather than being hard-coded in the Solidity compiler, though we do not exclude the possibility of it eventually becoming a part of the planned standard library.

The current release does not introduce any global builtins for the precompiles and thus, users will have to make calls to them manually. We understand that there might be community interest in support for BLS signatures in Solidity. While we are open to discussion and would love to understand its use-cases, we currently have no plans to implement it in the language.

Full Changelog

Compiler Features

  • EVM: Set default EVM Version to prague.
  • NatSpec: Capture Natspec documentation of enum values in the AST.

Bugfixes

  • SMTChecker: Do not consider loop conditions as constant-condition verification target as this could cause incorrect reports and internal compiler errors.
  • SMTChecker: Fix incorrect analysis when only a subset of contracts is selected with --model-checker-contracts.
  • SMTChecker: Fix internal compiler error when string literal is used to initialize user-defined type based on fixed bytes.

How to Install/Upgrade?

To upgrade to the latest version of the Solidity Compiler, please follow the installation instructions available in our documentation. You can download the new version of Solidity here: v0.8.30.

If you want to build from the source code, do not use the source archives generated automatically by GitHub. Instead, use the solidity_0.8.30.tar.gz source tarball or check out the v0.8.30 tag via git.

And last but not least, we would like to give a big thank you to all the contributors who helped make this release possible!

Next post

Get involved

GitHub

Twitter

Mastodon

Matrix

Discover more

BlogDocumentationUse casesContributeAboutForum

2025 Solidity Team

Security Policy

Code of Conduct