Releases: argotorg/solidity
Version 0.8.33
We are excited to announce the release of the Solidity Compiler v0.8.33!
Changelog
Bugfixes:
- TypeChecker: Fix internal error when accessing getters of constant variables.
We would especially like to thank all the contributors that made this release possible:
Kamil Śliwak, Matheus Aguiar, Nikola Matić, rodiazet
Version 0.8.32
We are excited to announce the release of the Solidity Compiler v0.8.32!
Changelog
Important Bugfixes:
- Code Generator: Fix a bug in clearing/copying of arrays that straddle the end of storage, potentially resulting in assignment/initialization/
delete/push()/pop()skipping some or all of the intended storage writes.
Bugfixes:
- Codegen: Fix internal compiler error when emitting events via module member access.
- TypeChecker: Fix error and event selectors not being considered compile-time constant.
- TypeChecker: Fix
string.concatandbytes.concatwith constant arguments not being considered compile-time constant.
We would especially like to thank all the contributors that made this release possible:
Kamil Śliwak, Marco Castignoli, Matheus Aguiar, Nikola Matić, blishko, r0qs, rodiazet
Version 0.8.31
We are excited to announce the release of the Solidity Compiler v0.8.31!
This version of the compiler brings support for the new EVM features introduced by the Fusaka network upgrade, extends the functionality of storage layout specifiers and deprecates the first batch of features scheduled for removal in the 0.9.0 breaking release. We are also adding official ARM Linux builds.
Changelog
Language Features:
- Custom Storage Layout: Allow using
constantstate variables in the base slot expression. - DocString Parser: Warn about deprecation of inline assembly special comment
memory-safe-assembly. - Syntax Checker: Warn about deprecation of ABI coder v1.
- Syntax Checker: Warn about deprecation of virtual modifiers.
- Type Checker: Warn about deprecation of
sendandtransferfunctions on instances ofaddress. - Type Checker: Warn about deprecation of comparisons between variables of contract types.
- Yul: Introduce builtin
clz(x)for counting the number of leading zero bits in a 256-bit word.
Compiler Features:
- ethdebug: Experimental support for instructions and source locations under EOF.
- EVM: Set default EVM Version to
osaka.
Bugfixes:
- Assembler: Fix not using a fixed-width type for IDs being assigned to subassemblies nested more than one level away, resulting in inconsistent
--asm-jsonoutput between target architectures. - Yul Optimizer: Fix edge case in which invalid Yul code is produced by ExpressionSimplifier due to expressions being substituted that contain out-of-scope variables.
Build System:
- Enable Linux arm64 binaries for testing and releases.
- Ubuntu PPA Packages: Discontinue the PPA as a binary distribution channel.
- Update minimum version requirements of Boost to 1.83.0 for non-windows builds and of GCC and Clang to 13.3 and 18.1.3, respectively. Fixes infinite recursion on
boost::rationalcomparison affecting compiler binaries built with GCC<14.0 and Boost<1.75.
We would especially like to thank all the contributors that made this release possible:
Afounso Souza, Coder, David Klank, Doryu, Emmanuel Ferdman, FT, Fibonacci747, GarmashAlex, Henry Chu, James Niken, Kamil Śliwak, Kendra Karol Sevilla, Martin Blicha, Matheus Aguiar, Michael Cho, MozirDmitriy, Nikola Matić, ParKing666, Patrick Collins, Saw-mon & Natalie, Shane, Tomass, Tronica, clonker, emmmm, fhf, fuder.eth, kilavvy, otc group, phrwlk, r0qs, radik878
Version 0.8.31-pre.1
Changelog
Language Features:
- Yul: Introduce builtin
clz(x)for counting the number of leading zero bits in a 256-bit word.
Compiler Features:
- ethdebug: Experimental support for instructions and source locations under EOF.
Bugfixes:
- Assembler: Fix not using a fixed-width type for IDs being assigned to subassemblies nested more than one level away, resulting in inconsistent
--asm-jsonoutput between target architectures. - Yul Optimizer: Fix edge case in which invalid Yul code is produced by ExpressionSimplifier due to expressions being substituted that contain out-of-scope variables.
Build System:
- Update minimum version requirements of Boost to 1.83.0 for non-windows builds and of GCC and Clang to 13.3 and 18.1.3, respectively. Fixes infinite recursion on
boost::rationalcomparison affecting compiler binaries built with GCC<14.0 and Boost<1.75.
Version 0.8.30
Introducing the newest version of the Solidity Compiler!
We are excited to announce the release of the Solidity Compiler v0.8.30.
This latest version of the compiler introduces prague as the new default EVM version, in addition to a couple of other small additions and fixes.
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.
We would especially like to thank all the contributors that made this release possible:
argentpapa, Bilog WEB3, clonker, closeobserve, Daniel Kirchner, emmmm, ferranmesas@gmx.es, futreall, Henry Chu, Kaan Uzdoğan, Kamil Śliwak, Martin Blicha, Matheus Aguiar, matta, Maximilian Hubert, Maxim Ryabykh, Michael Cho, NeoByteX, Nikola Matić, Ocenka, PixelPilot, rodiazet, Skylar Ray, VolodymyrBg, Voronor
Version 0.8.29
Introducing the newest version of the Solidity Compiler!
We are excited to announce the release of the Solidity Compiler v0.8.29.
This latest version of the compiler brings support for EVM Object Format (experimental), Storage Layout Specifiers, and more!
Changelog
Language Features:
- Allow relocating contract storage to an arbitrary location.
Compiler Features:
- Error Reporting: Errors reported during code generation now point at the location of the contract when more fine-grained location is not available.
- ethdebug: Experimental support for instructions and source locations.
- EVM: Support for the EVM version "Osaka".
- EVM Assembly Import: Allow enabling opcode-based optimizer.
- General: The experimental EOF backend implements a subset of EOF sufficient to compile arbitrary high-level Solidity syntax via IR with optimization enabled.
- SMTChecker: Support
block.blobbasefeeandblobhash. - SMTChecker: The option
--model-checker-print-queryno longer requires--model-checker-solvers smtlib2. - SMTChecker: Z3 is now a runtime dependency, not a build dependency (except for emscripten build).
- Yul Parser: Make name clash with a builtin a non-fatal error.
Bugfixes:
- Commandline Interface: Report StackTooDeep errors in compiler mode as proper errors instead of printing diagnostic information meant for internal compiler errors.
- Error Reporting: Fix error locations not being shown for source files with empty names.
- General: Fix internal compiler error when requesting IR AST outputs for interfaces and abstract contracts.
- Metadata: Fix custom cleanup sequence missing from metadata when other optimizer settings have default values.
- SMTChecker: Fix internal compiler error when analyzing overflowing expressions or bitwise negation of unsigned types involving constants.
- SMTChecker: Fix reporting on targets that are safe in the context of one contract but unsafe in the context of another contract.
- SMTChecker: Fix SMT logic error when analyzing cross-contract getter call with BMC.
- SMTChecker: Fix SMT logic error when contract deployment involves string literal to fixed bytes conversion.
- SMTChecker: Fix SMT logic error when external call has extra effectless parentheses.
- SMTChecker: Fix SMT logic error when initializing a fixed-sized-bytes array using string literals.
- SMTChecker: Fix SMT logic error when translating invariants involving array store and select operations.
- SMTChecker: Fix wrong encoding of string literals as arguments of
ecrecoverprecompile. - Standard JSON Interface: Fix
generatedSourcesandsourceMapbeing generated internally even when not requested. - TypeChecker: Fix spurious compilation errors due to incorrect computation of contract storage size which erroneously included transient storage variables.
- Yul: Fix internal compiler error when a code generation error should be reported instead.
- Yul Optimizer: Fix failing debug assertion due to dereferencing of an empty
optionalvalue.
Build system:
- Linux release builds are fully static again and no longer depend on
glibc. - Switch from C++17 to C++20 as the target standard.
Solc-Js:
- The wrapper now requires at least nodejs v12.
We would especially like to thank all the contributors that made this release possible:
Alexander Arlt, chloefeal, clonker, comfsrt, Cypher Pepe, Daniel Kirchner, DaniPopes, dxsullivan, ericlehong, Fallengirl, flylai, FT, fuder.eth, Gaetan Lepage, gmh5225, haoyang9804, Hopium, Igor Żuk, imilygathia, irreduciblen, Jeff Wentworth, Kamil Śliwak, kilavvy, leopardracer, Marco, Martin Blicha, Matheus Aguiar, Maxim Evtush, monem, Nikola Matić, Noisy, piguagua, PixelPilot, planetBoy, r0qs, RiceChuan, rodiazet, Rudko Hanna, santamasa, Sebastian Miasojed, Skyge, Skylar Ray, sukey2008, Tran Quang Loc, Ustas, Vishwa Mehta, xiaobei0715, XxAlex74xX
Version 0.8.28
Introducing the newest version of the Solidity Compiler!
We are excited to announce the release of the Solidity Compiler Solidity v0.8.28. This is going to be a fairly small release compared to the last one - but an important nonetheless, as we're finally releasing high level language support for transient storage, although at this time, only transient storage state variables of value types are supported. We will of course be working on bringing full support (reference types) in the upcoming releases.
Changelog
Language Features:
- Transient storage state variables of value types are now fully supported.
Compiler Features:
- General: Generate JSON representations of Yul ASTs only on demand to reduce memory usage.
- Standard JSON Interface: Bytecode or IR can now be requested for a subset of all contracts without triggering unnecessary code generation for other contracts.
Bugfixes:
- SMTChecker: Fix SMT logic error when assigning to an array of addresses.
- Yul AST: Fix shifted native source locations when debug info selection included code snippets.
Build system:
- Removed
USE_LD_GOLDoption and default to use the compiler default linker. For custom linkers,CMAKE_CXX_FLAGScan be used.
We would especially like to thank all the contributors that made this release possible:
Alexander Arlt, Anandu Raveendran, backbonexe, clonker, Daniel Kirchner, Elias Rad, Franco Victorio, Kamil Śliwak, Martin Blicha, Matheus Aguiar, Nikola Matić, Pawel Gebal, r0qs, rodiazet, Vishwa Mehta
Version 0.8.27
Introducing the newest version of the Solidity Compiler!
We are excited to announce the release of the Solidity Compiler Solidity v0.8.27. We've got some exciting new features this time around as well - likely the most anticipated being the support for require with custom errors in the legacy pipeline, which was previously only supported with via IR. On the topic of via IR, we have also made some efficiency improvements with regards to compilation times, namely the caching of already optimized IR, and the re-use thereof. Apart from these, we've also fixed quite a few bugs, added some minor convenience features, and are continuing our work on high-level transient storage support.
Changelog
Language Features:
- Accept declarations of state variables with
transientdata location (parser support only, no code generation yet). - Make
require(bool, Error)available when using the legacy pipeline. - Yul: Parsing rules for source location comments have been relaxed: Whitespace between the location components as well as single-quoted code snippets are now allowed.
Compiler Features:
- Commandline Interface: Add
--transient-storage-layoutoutput. - Commandline Interface: Allow the use of
--asm-jsonoutput option in assembler mode to export EVM assembly of the contracts in JSON format. - Commandline Interface: Do not perform IR optimization when only unoptimized IR is requested.
- Constant Optimizer: Uses
PUSH0if supported by the selected evm version. - Error Reporting: Unimplemented features are now properly reported as errors instead of being handled as if they were bugs.
- EVM: Support for the EVM version "Prague".
- Peephole Optimizer:
PUSH0, when supported, is duplicated explicitly instead of usingDUP1. - Peephole Optimizer: Remove identical code snippets that terminate the control flow if they occur one after another.
- SMTChecker: Add CHC engine check for underflow and overflow in unary minus operation.
- SMTChecker: Replace CVC4 as a possible BMC backend with cvc5.
- Standard JSON Interface: Add
transientStorageLayoutoutput. - Standard JSON Interface: Do not perform IR optimization when only unoptimized IR is requested.
- Yul: Drop the deprecated typed Yul dialect that was only accessible via
--yulin the CLI. - Yul: The presence of types in untyped Yul dialects is now a parser error.
- Yul Optimizer: Caching of optimized IR to speed up optimization of contracts with bytecode dependencies.
- Yul Optimizer: The optimizer now treats some previously unrecognized identical literals as identical.
Bugfixes:
- Assembler: Fix ICE caused by imprecise calculation of required size of tags in bytecode when code size is above 255.
- Parser: Fix spuriously emitted parser error for unary plus operations when used as binary operator in some cases.
- SMTChecker: Fix error that reports invalid number of verified checks for BMC and CHC engines.
- SMTChecker: Fix formatting of unary minus expressions in invariants.
- SMTChecker: Fix internal compiler error when reporting proved targets for BMC engine.
- SMTChecker: Fix SMT logic error when assigning to an array of contracts or functions.
- Standard JSON Interface: For Yul input, properly produce output artifacts in case of warnings.
- TypeChecker: Fix segfault when assigning nested tuple to tuple.
- Yul IR Code Generation: Deterministic order of Yul subobjects.
- Yul Optimizer: Fix Yul source locations always referring to unoptimized source, even in optimized outputs.
- Yul Optimizer: Fix warnings being generated twice when there are no errors.
- Yul Optimizer: Name simplification could lead to forbidden identifiers with a leading and/or trailing dot, e.g.,
x._would get simplified intox.. - Yul Parser: Fix segfault when parsing very long location comments.
Build System:
- Change build system to use git submodules for some dependencies (nlohmann-json, fmtlib & range-v3).
We especially thank all the contributors that made this release possible:
Alex Beregszaszi, Alexander Arlt, Alireza Arjmand, Ardis Lu, Bhargava Shastry, Daniel Kirchner, Daniel Zahariev, Francisco Giordano, Guilherme Ferreira, Haoyang Ma, Howe, Ikko Eltociear Ashimine, Kaan Uzdoğan, Kamil Śliwak, Martin Blicha, Matheus Aguiar, Meet Mangukiya, Moritz Hoffmann, Nikola Matić, Pawel Gebal, Tilak Madichetti, ToonVanHove, Vishwa Mehta, Zuri Obozuwa, dxo, ljmanini, r0qs, rodiazet, shafu, snoppy
Version 0.8.26
Introducing the newest version of the Solidity Compiler!
We are excited to announce the release of the Solidity Compiler Solidity v0.8.26. This release brings some exciting new features, namely a much faster default optimizer sequence for the via IR pipeline, which cuts the compilation times significantly. We are introducing usage of require functions with custom errors, at this time for the via IR pipeline only, in addition to an optimization for reverting with errors of small static encoding sizes, which should now have lower gas costs. As always, there are multiple small bugfixes to go with the release.
Changelog
Language Features:
- Introduce a new overload
require(bool, Error)that allows usage ofrequirefunctions with custom errors. This feature is available in thevia-irpipeline only.
Compiler Features:
- SMTChecker: Create balance check verification target for CHC engine.
- Yul IR Code Generation: Cheaper code for reverting with errors of a small static encoding size.
- Yul Optimizer: New, faster default optimizer step sequence.
Bugfixes:
- Commandline Interface: Fix ICE when the optimizer is disabled and an empty/blank string is used for
--yul-optimizationssequence. - SMTChecker: Fix false positive when comparing hashes of same array or string literals.
- SMTChecker: Fix internal error on mapping access caused by too strong requirements on sort compatibility of the index and mapping domain.
- SMTChecker: Fix internal error when using an empty tuple in a conditional operator.
- SMTChecker: Fix internal error when using bitwise operators with an array element as argument.
- Standard JSON Interface: Fix ICE when the optimizer is disabled and an empty/blank string is used for
optimizerStepssequence. - StaticAnalyzer: Only raise a compile time error for division and modulo by zero when it's between literals.
- TypeChecker: Fix compiler crash when the left-hand side of an assignment was a parenthesized non-tuple expression of a tuple type.
- Yul Optimizer: Fix optimizer executing each repeating part of the step sequence at least twice, even if the code size already became stable after the first iteration.
- Yul Optimizer: Fix the order of assignments generated by
SSATransformbeing dependent on AST IDs, sometimes resulting in different (but equivalent) bytecode when unrelated files were added to the compilation pipeline.
Build System:
- Replace internal JSON library jsoncpp with nlohmann::json.
We especially thank all the contributors that made this release possible:
Alex Beregszaszi, Alexander Arlt, Ardis Lu, Daniel Kirchner, InventiveCoder, Juliano Penna, Kamil Śliwak, Martin Blicha, Matheus Aguiar, Moritz Hoffmann, Nikola Matić, Patrick Collins, Pawel Gebal, Snoppy, Tamas Molnar, Vc, Vijay Raj Panchal, Zuri Obozuwa, edurivara, hanghuge, hydai, looklose, pcw109550, r0qs, wilsoncusack, zo9999
Version 0.8.25
Introducing the newest version of the Solidity Compiler!
We are excited to announce the release of the Solidity Compiler Solidity v0.8.25. This release is a small one, and is mainly centered around the Dencun hard-fork that occurred yesterday. On that note, the default EVM version in the compiler is now cancun, and we've also introduced some gas savings via better exploitation of the MCOPY opcode, as well fixing an issue that could result in larger than necessary bytecode.
Changelog
Compiler Features:
- Code Generator: Use
MCOPYinstead ofMLOAD/MSTOREloop when copying byte arrays. - EVM: Set default EVM version to
cancun. - Yul Analyzer: Emit transient storage warning only for the first occurrence of
tstore.
Bugfixes:
- Assembler: Prevent incorrect calculation of tag sizes.
- Commandline Interface: Do not run IR pipeline when
--via-iris used but no output that depends on the IR is requested. - EVM Assembly Import: Fix handling of missing source locations during import.
- SMTChecker: Ensure query is properly flushed to a file before calling solver when using SMT-LIB interface.
- SMTChecker: Fix internal error caused by not respecting the sign of an integer type when constructing zero-value SMT expressions.
- SMTChecker: Run Eldarica only when explicitly requested with
--model-checker-solvers eld, even when it is present on the system.
We especially thank all the contributors that made this release possible:
Aditya Kode, Alexander Arlt, Bhargava Shastry, ByeongSu Go, Chomtana, Cyrus, Daniel Kirchner, Dimitris Apostolou, Jeason, Kamil Śliwak, Martin Blicha, Matheus Aguiar, Nikola Matić, Saw-mon & Natalie, Simon Perriard, Twice, Vishwa Mehta, Vojtch, minaminao, omahs, pgebal, r0qs, racerol
UPDATE 2024-03-14: The MacOS universal binary originally included here has been rebuilt and replaced due to a missing signature which made it unusable.
The SHA-256 hash of the old binary was ce09577e654628c2b4d00e66bcab7c8a4dc18c1d9812dcbab7bd8572a6d4d27e. The new one is cc3f94a70ac681b0304084acc1980aabe2a1bb3240d44ce76a8df0e1e77a2110.