{Solidity:log}
Solidity 0.8.28 Release Announcement
Posted by Solidity Team on October 9, 2024
We are excited to announce the release of the Solidity Compiler v0.8.28. This latest version of the compiler brings full support for transient storage state variables of value types, improvements that will speed up compilation via IR and significantly lower memory usage, some bugfixes, and more! Notable Features Support for Transient Storage Value Type State Variables The previous release of the compiler (v0.8.27) introduced support for transient storage variables into the parser (see Additional Notes). This meant that the compiler could accept the syntax...
Read moreSolidity 0.8.27 Release Announcement
Posted by Solidity Team on September 4, 2024
We are excited to announce the release of the Solidity Compiler v0.8.27. This newest version of the compiler brings support for custom errors in require to the legacy pipeline, optimizer improvements such as caching of optimized IR that will speed up compilation via IR, several bugfixes, and more! Notable Features Legacy Support for require with Custom Errors Custom errors in Solidity provide a convenient and gas-efficient way to explain to the user why an operation failed. Support for using errors with the require function...
Read moreSolidity 0.8.26 Release Announcement
Posted by Solidity Team on May 21, 2024
We are excited to announce the release of the Solidity Compiler v0.8.26. This newest version of the compiler brings support for custom errors in require, improved default Yul Optimizer sequence that will speed up compilation via IR, several bugfixes, and more! Notable Features Custom errors support in require Custom errors in Solidity provide a convenient and gas-efficient way to explain to the user why an operation failed. Solidity 0.8.26 introduces a highly anticipated feature that enables the usage of errors with require function. The require function...
Read moreSolidity 0.8.25 Release Announcement
Posted by Solidity Team on March 14, 2024
Introducing the newest version of the Solidity Compiler: v0.8.25. This is a minor release following the Dencun hard-fork on Ethereum mainnet that occurred on March 13, 2024 at 13:55 UTC. Dencun Upgrade The Dencun upgrade combines changes to both Ethereum's consensus and execution layers. The full list of protocol changes can be found in EIP-7569. With Dencun now live on mainnet, we are accordingly making cancun the default EVM version the compiler will emit code for. MCOPY in code generator The previous release made the mcopy() builtin...
Read moreSolidity 0.8.24 Release Announcement
Posted by Solidity Team on January 26, 2024
We are excited to announce the release of the Solidity Compiler v0.8.24. This newest version of the compiler brings readiness for the "Cancun" network upgrade, including support for transient storage (EIP-1153), shard blob transactions (EIP-4844) & more. The release binaries for macOS are now also compatible with Apple silicon chips. Cancun Network Upgrade The "Cancun" network upgrade provides new features in the form of opcodes and precompiles, which will need to be explicitly used to have any benefits, but also introduces changes in the existing...
Read moreSolidity 0.8.23 Release Announcement
Posted by Solidity Team on November 8, 2023
Today, we announce the release of the Solidity Compiler v0.8.23. This newest version of the compiler is meant to be a pure bugfix release that includes the fix for an important bug of low severity. Based on our investigations, we do not foresee real-world instances of the bug being used as an exploit or an attack vector and thus, we assess its overall severity as low. This version also introduces a small change to optimizer settings to make them more intuitive. Since v0.8.21,...
Read moreSolidity 0.8.22 Release Announcement
Posted by Solidity Team on October 25, 2023
We are excited to announce the release of the Solidity Compiler v0.8.22. This newest version of the compiler includes a range of language as well as compiler improvements such as file-level event definitions, optimizations for unchecked loop increments, support for importing EVM assembly JSON, & more. Important Note This release deprecates support for EVM versions older than Constantinople, which are becoming increasingly hard to maintain. These ancient versions have long been obsolete on the Ethereum mainnet and testnets and we suspect that they are no...
Read moreSolidity 0.8.21 Release Announcement
Posted by Solidity Team on July 19, 2023
We are excited to announce the latest release of the Solidity Compiler, Solidity v0.8.21. Notable New Features Stack-to-memory mover always enabled via-IR The release addresses the issue of unoptimized code produced by the IR-based code generation pipeline being overly prone to "Stack Too Deep" errors. This is meant to help tools such as debuggers, which lose much of their effectiveness when working with optimized code. The legacy pipeline can often avoid running out of reachable stack slots even in unoptimized mode, but this comes at...
Read moreSolidity 0.8.20 Release Announcement
Posted by Solidity Team on May 10, 2023
We are excited to announce the latest release of the Solidity Compiler, Solidity v0.8.20. This latest version includes a range of improvements in the via-IR pipeline and improves the list of events exposed in the contract ABI, and, most importantly, support for the Shanghai hard fork! 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...
Read moreSolidity 0.8.19 Release Announcement
Posted by Solidity Team on February 22, 2023
We are excited to announce the latest release of the Solidity Compiler, Solidity v0.8.19. This latest version includes a range of improvements and it also introduces the support for defining operators on user-defined value types (UDVTs)! You can learn about it at length in our feature deep-dive blogpost. Notable New Features These are the features we want to highlight in this release. Operators for User-Defined Value Types The ability to use operators is meant to bring the UDVTs closer to being as natural to use as the...
Read moreSolidity 0.8.18 Release Announcement
Posted by Solidity Team on February 1, 2023
Introducing the newest version of the Solidity Compiler! We are excited to announce the latest release of the Solidity Compiler, Solidity v0.8.18. This latest version includes a range of improvements and it also introduces support for the Paris upgrade! Notable New Features These are the features we want to highlight in this release. Disabling CBOR metadata A new command-line flag (--no-cbor-metadata) and Standard JSON option (settings.metadata.appendCBOR: false) to prevent compiler from appending the CBOR metadata section at the end of the bytecode. Until now, it was only...
Read moreSolidity 0.8.17 Release Announcement
Posted by Solidity Team on September 8, 2022
Solidity v0.8.17 fixes an important bug, makes overflow checks on multiplication more efficient and adds an LSP feature to always analyze all files in a project. Important Bugs Storage Write Removal Bug On Conditional Early Termination The bug may result in storage writes being incorrectly considered redundant and removed by the optimizer. The problem manifests in presence of assembly functions that may conditionally terminate the external EVM call using the return() or stop() opcode. See the security alert post on Storage Write Removal Bug On Conditional Early Termination for...
Read moreSolidity 0.8.16 Release Announcement
Posted by Solidity Team on August 8, 2022
Solidity v0.8.16 fixes an important bug. The bug may result in small parts of dynamic tuple components being inadvertently zeroed during ABI re-encoding when the last component is a statically-sized uint or bytes32 calldata array. See Head Overflow Bug in Calldata Tuple ABI-Reencoding for more information. Apart from that, there are several minor bug fixes and improvements like more gas-efficient overflow checks for addition and subtraction. Full Changelog Important Bugfixes: Code Generation: Fix data corruption that affected ABI-encoding of calldata values represented by tuples: structs at any nesting level; argument...
Read moreSolidity 0.8.15 Release Announcement
Posted by Solidity Team on June 15, 2022
Solidity v0.8.15 fixes two important bugs, improves inlining heuristics and adds a .selector member for errors and events. Important Bugs The first one is an optimizer bug that can lead to memory write operations in inline assembly being removed if the result of such an operation is not read back from within the same assembly block. The bug can be triggered only when using the default legacy compiler pipeline (the new compilation pipeline via IR is not affected) and happens only in assembly blocks that never...
Read moreSolidity 0.8.14 Release Announcement
Posted by Solidity Team on May 18, 2022
Solidity v0.8.14 fixes two important bugs. The first one is related to ABI-encoding nested arrays directly from calldata. You can find more information in the blog post. The second bug is triggered in certain inheritance structures and can cause a memory pointer to be interpreted as a calldata pointer or vice-versa. We also have a dedicated blog post about this bug. Apart from these, there are several minor bug fixes and improvements. Please note: Unfortunately, the npm wrapper package of this version is corrupted. Using the new soljson.js...
Read moreSolidity 0.8.13 Release Announcement
Posted by Solidity Team on March 16, 2022
Solidity v0.8.13 fixes an important bug related to abi.encodeCall, extends the using for directive and implements "go to definition" for the language server. Furthermore, compiling via the new Yul IR pipeline is now considered production ready. Important Bugs When abi.encodeCall was introduced in Solidity 0.8.11, hex literals (0x1234) and string literals ("abcd") were not handled properly. Please read more about it in the security alert. Notable New Features Yul IR Pipeline Production Ready We have been working on Yul as an intermediate language for Solidity for several years now. Yul in...
Read moreSolidity 0.8.12 Release Announcement
Posted by Solidity Team on February 16, 2022
Solidity v0.8.12 improves the JavaScript / Wasm binary and fixes several bugs. Notable New Features Emscripten Build / solc-js We were able to reduce the size of the JavaScript / WebAssembly binaries from 27 MB to just over 8 MB. The reason for the large binary in the first place is that we include the SMT solver Z3. The size reduction is achieved by compressing the binary using LZ4 and decompressing it when it is loaded, which should be completely transparent to the user. We were initially worried that...
Read moreSolidity 0.8.11 Release Announcement
Posted by Solidity Team on December 20, 2021
Solidity v0.8.11 adds a first implementation of a Language Server, allows a safer way to perform ABI-encoding and fixes several bugs. Notable New Features Language Server Preview Language Server Protocol is an initiative that allows better interoperability between IDEs and compilers, or more generally, language diagnostics tools. The idea is that instead of writing a different plugin for each combination of IDEs and languages, every IDE implements a single client and every compiler implements a single server and since both of them use the same protocol, you can combine all of...
Read moreSolidity 0.8.10 Release Announcement
Posted by Solidity Team on November 9, 2021
Solidity v0.8.10 can now report contract invariants and reentrancy properties through the SMTChecker. It also contains some new optimizations with regards to external function calls and enables the new EVM code generator for pure Yul mode. Notable New Features New EVM Code Transform for Compilation via Yul IR With this release, we introduce a new EVM code generation backend that is used for the experimental compilation pipeline of Solidity via Yul (with enabled optimizer), as well as for optimized compilation of Yul input. While...
Read moreSolidity 0.8.9 Release Announcement
Posted by Solidity Team on September 29, 2021
Solidity v0.8.9 is a pure bugfix release and fixes two important, but low severity, bugs. The first bug is related to immutables of signed integer types shorter than 256 bits. The bug causes sign extension (cleanup) of those values to not always being properly performed. It was introduced in Solidity 0.6.5. Read more in the respective security alert. The second bug was introduced with user defined value types in Solidity v0.8.8 (released two days ago). User defined types with underlying type shorter...
Read moreSolidity 0.8.8 Release Announcement
Posted by Solidity Team on September 27, 2021
Solidity v0.8.8 introduces user defined value types as a major feature. The override keyword is now optional for interface functions, immutable variables can be read in the constructor, there is support for retrieving the smallest and largest value of an enum, you can specify include directories and the commandline interface was cleaned up. Furthermore, we fixed several bugs and the SMTChecker has improved language coverage. Notable New Features User Defined Value Types A user defined value type allows creating a zero-cost-abstraction over an elementary value type that also...
Read moreSolidity 0.8.7 Release Announcement
Posted by Solidity Team on August 11, 2021
Solidity v0.8.7 introduces support for the London upgrade, includes various improvements to Yul to EVM code transformation, the SMTChecker and some bugfixes. Please note: Unfortunately, the npm package of this version is corrupted. Pulling the solc-js repository directly will work. Support for London Upgrade Solidity adds support for the BASEFEE opcode (EIP-3198 and EIP-1559) which exposes the block's base fee. This can be accessed via the global block.basefee or using basefee() in inline assembly or Yul. The following contract illustrates an example: contract Basefee { function...
Read moreSolidity 0.8.6 Release Announcement
Posted by Solidity Team on June 22, 2021
Solidity v0.8.6 fixes some non-critical but annoying bugs, especially a warning about unreachable code that is in fact reachable. Bugfixes Unreachable Warning With Solidity 0.8.5, we released a new feature that detects if code is unreachable because a called function always reverts before the code is executed. This detection contained a bug in connection with nested calls to internal library functions where the "reverting behaviour" of a function was not properly updated after a function called by it was determined to be not always reverting. Because the bug was rather...
Read moreSolidity 0.8.5 Release Announcement
Posted by Solidity Team on June 10, 2021
Solidity v0.8.5 allows conversions from bytes to bytesNN values, adds the verbatim builtin function to inject arbitrary bytecode in Yul and fixes several smaller bugs. Notable New Features Bytes Conversion Find the complete feature documentation here. This release introduces the ability to convert bytes and bytes slices to fixed bytes types bytes1 / ... / bytes32. While conversion between fixed-length bytes types has always been possible, it is now also possible to convert dynamically-sized bytes types to fixed-length bytes types. In case a byte array is longer...
Read moreSolidity 0.8.4 Release Announcement
Posted by Solidity Team on April 21, 2021
Solidity v0.8.4 adds custom structured errors, bytes.concat(...), allows more flexible configuration of the SMT checker and fixes a bug in the Solidity ABI decoder v2. Important Bugfixes: On April 5th, 2021, a bug in the Solidity ABI decoder v2 was reported by John Toman of the Certora development team. For two-dimensional arrays and specially crafted data in memory, the result of abi.decode can depend on data elsewhere in memory. Calldata decoding is not affected. The bug is present in all prior versions of...
Read moreSolidity 0.8.3 Release Announcement
Posted by Solidity Team on March 23, 2021
Solidity v0.8.3 fixes the Solidity Optimizer Keccak Caching Bug, which is present in all prior versions of Solidity, and, in addition, includes two improvements to the optimizer which can provide a big gas benefit when writing structs that cover a full storage slot to storage. Important Bugfixes Solidity Optimizer Keccak Caching Bug On March 20, 2021, a bug in Solidity’s bytecode optimizer was found by differential fuzzing. The bug is fixed with this version. The bug is present in all prior versions of...
Read moreSolidity 0.8.2 Release Announcement
Posted by Solidity Team on March 2, 2021
Solidity v0.8.2 adds an optimizer stage that can inline small amounts of code to save gas and provides more means to work with code documentation by exporting inline comments and allowing custom natspec tags. Notable New Features Inliner This release adds a simple inliner to the low-level optimizer of Solidity. It can inline short functions that do not contain control-flow branches or opcodes with side-effects. If you want to learn more about the inliner, read this post. Custom Natspec and Exported Documentation It is now possible to use documentation...
Read moreSolidity 0.8.1 Release Announcement
Posted by Solidity Team on January 27, 2021
Solidity v0.8.1 introduces many new features for the SMTChecker (see below), updates the emscripten version for building soljson.js to 2.0.12, allows to catch panic errors and adds other small improvements. Notable New Features SMTChecker Counterexamples and Synthesis of External Functions The SMTChecker already reports transaction traces as counterexamples to failing verification targets, but 0.8.1 adds internal calls, msg.value and synthesized unknown code called externally in the form of reentrant calls to counterexamples. A recent blog post presents that topic in more detail. How to select SMTChecker targets Prior to 0.8.1, the SMTChecker...
Read moreSolidity 0.8.0 Release Announcement
Posted by Solidity Team on December 16, 2020
Solidity 0.8.0 is a breaking release of the Solidity compiler and language. Some of the new features of this release have been elaborated in the 0.8.x preview release post. Please consider the preview release binary superseded and do not use it anymore. Notable New Features and Changes As per usual, this breaking release does not include many features but rather changes that require a backwards-incompatible adjustment in syntax or semantics. For a detailed explanation, please see the documentation. The change that will affect most users is...
Read moreSolidity 0.7.6 Release Announcement
Posted by Solidity Team on December 16, 2020
Solidity v0.7.6 adds better support for calldata types. Furthermore, the fallback function can now have a parameter and explicitly return data. Notable New Features Detection of Overflowing Unicode Direction Markers The winning entry in the Solidity Underhanded Contest used a clever combination of Unicode direction markers to deceive the reader about the semantics of a time-locked upgrade mechanism. Starting from Solidity 0.7.6, the parser will reject comments and Unicode strings where the text direction is not properly reset before the end of the comment or string. Better Support for...
Read moreSolidity 0.7.5 Release Announcement
Posted by Solidity Team on November 18, 2020
Solidity v0.7.5 adds the ability so select the ABI coder via pragma abicoder v1 and pragma abicoder v2 in preparation for making ABI coder v2 the default for 0.8.0 and introduces --experimental-via-ir which compiles via the new experimental Yul-based compiler pipeline. Full Changelog Language Features: Ability to select the abi coder using pragma abicoder v1 and pragma abicoder v2. Inline Assembly: Use .offset and .length for calldata variables of dynamic array type to access their calldata offset and length (number of elements). Both of...
Read moreSolidity 0.8.x Preview Release
Posted by Solidity Team on October 28, 2020
With the Solidity 0.8.x series being just around the corner, we would like to provide insights into the upcoming breaking changes that will come with it. We want to provide a preview release binary for everyone to try out so that you can give your feedback. The main change for 0.8.x is the switch to checked arithmetic operations by default. This means that x + y will throw an exception on overflow. In other words: You will not need SafeMath anymore! Since the scope...
Read moreSolidity 0.7.4 Release Announcement
Posted by Solidity Team on October 19, 2020
Solidity v0.7.4 fixes a storage corruption bug of medium severity. To learn more about the bug and to check if your contract is vulnerable please read this post with further details about the bug. The bug has been reported by John Toman of the Certora development team. Additionally, v0.7.4 adds constants at file-level. Important Bugfixes Code Generator: Fix data corruption bug when copying empty byte arrays from memory or calldata to storage. Read more here. Notable New Features Constants at File-Level In order to make functions at...
Read moreSolidity 0.7.3 Release Announcement
Posted by Solidity Team on October 7, 2020
Solidity v0.7.3 fixes a bug in the dynamic-array cleanup. To learn more about the bug and check if your contract is vulnerable please read this post with further details about the bug. Additionally, v0.7.3 adds the option to stop compilation after the parsing stage using solc --stop-after parsing. Important Bugfixes Code Generator: Properly cleanup after copying dynamic-array to storage for packed types. Read more here. Notable New Features Stop Compilation after Parsing solc --stop-after parsing (or settings.stopAfter = 'parsing' in standard-json) can now be used to instruct...
Read moreSolidity 0.7.2 Release Announcement
Posted by Solidity Team on September 28, 2020
Solidity v0.7.2 fixes a bug in free functions, which had been introduced with v0.7.1, and adds compiler-generated utility file export. Furthermore, it comes with a considerably broadened language support of the SMTChecker. Important Bugfixes Free Function Overloading Checks Free functions were introduced in the previous release (Solidity v0.7.1). It turned out that it was possible to define a function with the same name multiple times, even containing the same parameter types. Allowing two functions with the same name, but different parameter types is called "overloading" and...
Read moreSolidity 0.7.1 Release Announcement
Posted by Solidity Team on September 2, 2020
Solidity v0.7.1 adds functions at file-level and fixes several small bugs. Notable New Features Functions At File-Level Functions can now be defined at file-level. Such functions are called "free functions" (as opposed to functions bound to a specific contract). Free functions are always internal functions and are meant to replace internal library functions and their very special behaviour. A free function behaves like an internal function of the contract that called it. The main difference is that a free function cannot directly access state variables and internal functions of...
Read moreSolidity 0.7.0 Release Announcement
Posted by Solidity Team on July 28, 2020
Solidity 0.7.0 is a breaking release of the Solidity compiler and language. This release does not include many features but rather changes that require a backwards-incompatible adjustment in syntax or semantics. For a detailed explanation, please see the documentation. Most notably, further cleanup of visibility and state mutability has been performed and several unpopular keywords have been removed. Types with mappings in memory are disallowed and shift and exponentiation operations use more reasonable types. Since we usually do not backport bugfixes, it is recommended to upgrade all...
Read moreSolidity 0.6.12 Release Announcement
Posted by Solidity Team on July 22, 2020
Solidity v0.6.12 adds more flexibility when using inheritance with NatSpec comments and introduces many small improvements to the optimizer. Notable New Features NatSpec Inheritance As explained in the Solidity 0.6.11 release announcement, NatSpec comments are now inherited automatically if you do not provide any NatSpec in the derived function. Starting from Solidity 0.6.12, you can explicitly inherit comments from a base contract using the tag @inheritdoc even if you specify some of the tags. The tags that are not given will then be taken from the specified base class' function. //...
Read moreSolidity 0.6.11 Release Announcement
Posted by Solidity Team on July 7, 2020
Solidity v0.6.11 adds inheritance to NatSpec comments, improves debugging data output and fixes some minor issues with opening up calldata for non-external functions. Notable New Features NatSpec Inheritance and on Events NatSpec comments are a way to describe the behaviour of a function to end-users. It also allows to provide more detailed information to developers. One regular use-case is that you document the behaviour of an interface and then implement the interface in a derived contract. Previously, you had to repeat the documentation in the derived contract. This...
Read moreSolidity 0.6.10 Release Announcement
Posted by Solidity Team on June 11, 2020
Solidity v0.6.10 fixes an important bug that was introduced in the previous release and adds error codes. Please upgrade if you are using internal library functions with calldata parameters in connection with using for. Important Bugfixes Invalid Access for Calldata Parameters in Internal Library Functions Problem: The previous release, Solidity 0.6.9, introduced the possibility to use calldata types in internal and not, as previously, only in external functions. This resulted in a bug related to calling library functions with calldata parameters via using for. More specifically,...
Read moreSolidity 0.6.9 Release Announcement
Posted by Solidity Team on June 5, 2020
Solidity v0.6.9 adds SMT-checking to solc-js, allows calldata for all variables and provides a mechanism to specify an import directory. Please note that the solc-js / soljson binary includes the Z3 SMT solver built-in, which causes an increase in the binary size. Notable New Features SMTChecker The SMTChecker is a component of the Solidity compiler which has been in development for quite some time now. Its aim is to bring formal verification methods to the Solidity compiler. Solidity implements a formal verification approach based on SMT/Horn...
Read moreSolidity 0.6.8 Release Announcement
Posted by Solidity Team on May 14, 2020
Solidity v0.6.8 fixes three important bugs in the code generator and introduces a recommendation to use SPDX license identifiers. Furthermore, support for WebAssembly has been extended and it is now possible to access the min and max values of an integer type directly. Please upgrade if you are using array slices, backslashes in string literals for ABIEncoderV2 or are concerned about non-payable constructors. Important Bugfixes Please note that the three bugs outlined below have all been rated with a severity level of "very...
Read moreSolidity 0.6.7 Release Announcement
Posted by Solidity Team on May 4, 2020
Solidity v0.6.7 introduces support for EIP-165 via type(InterfaceName).interfaceId. Language Features: Add support for EIP 165 interface identifiers with type(I).interfaceId. Allow virtual modifiers inside abstract contracts to have empty body. Compiler Features: Optimizer: Simplify repeated AND and OR operations. Option to specify optimization steps to be performed by Yul optimizer with yul-optimizations in the commandline interface or optimizer.details.yulDetails.optimizerSteps in standard-json. Standard Json Input: Support the prefix file:// in the field urls. Bugfixes: SMTChecker: Fix internal error when fixed points are used. SMTChecker: Fix internal error when using array slices. Type Checker: Disallow...
Read moreSolidity 0.6.6 Release Announcement
Posted by Solidity Team on April 9, 2020
This is a small bugfix release that solves an issue with certain tuple assignments. Important Bugfixes: Fix tuple assignments with components occupying multiple stack slots and different stack size on left- and right-hand-side. Bugfixes: AST export: Export immutable property in the field mutability. SMTChecker: Fix internal error in the CHC engine when calling inherited functions internally. Type Checker: Error when trying to encode functions with call options gas and value set. A big thank you to all contributors who helped make this release possible! Download the new version...
Read moreSolidity 0.6.5 Release Announcement
Posted by Solidity Team on April 6, 2020
Version 0.6.5 of Solidity fixes an important bug and introduces immutable as a major feature. The bug concerns the allocation of dynamic memory arrays using e.g. new uint. The bug is considered to have a severity level of "low" but is present in all prior versions of Solidity. Therefore, please read more about how check if your contract is vulnerable in this blog post. The immutable feature supports setting contract-level variables at construction time if they do not change later on. These...
Read moreSolidity 0.5.17 Release Announcement
Posted by Solidity Team on March 17, 2020
This maintenance release of the 0.5.x series fixes a bug that was always present in the compiler. Some people do not even consider it a bug, though, which might explain why it was undiscovered for so long: A private function can be overridden in a derived contract by a private function of the same name and types. In other words, the virtual function calling mechanism does not respect visibility. The same applies to two private functions of the same name and type...
Read moreSolidity 0.6.4 Release Announcement
Posted by Solidity Team on March 10, 2020
Version 0.6.4 of Solidity fixes a bug that did not allow calling base contract functions directly, another bug that caused issues with variable scoping in try/catch and it allows for greater flexibility with regards to storage: It is now possible to set storage slots for storage reference variables from inline assembly. We expect this to allow new patterns in connection to delegatecall proxies and upgradable contracts. Please be careful when using this feature! Language Features: General: Deprecated value(...) and gas(...) in favor...
Read moreSolidity 0.6.3 Release Announcement
Posted by Solidity Team on February 18, 2020
This release adds reason strings for compiler-generated reverts if you specify revert-strings debug or use the setting settings.debug.revertStrings = "debug". Furthermore, contract types and enums are now allowed as keys for mappings and the doxygen-style comments are better supported by the AST. Language Features: Allow contract types and enums as keys for mappings. Allow function selectors to be used as compile-time constants. Compiler Features: AST: Add a new node for doxygen-style, structured documentation that can be received by contract, function, event and modifier definitions. Code Generator:...
Read moreSolidity 0.6.2 Release Announcement
Posted by Solidity Team on January 27, 2020
After long discussions, we finally enabled a high-level way to use the create2 opcode introduced in Constantinople: When creating a contract, you can specify the salt as a "function call option": new Contract{salt: 0x1234}(arg1, arg2). We took this opportunity and also extended the use of these function call options to specifying the gas and value options in external function calls: c.f{value: 10, gas: 20000}(arg1, arg2). Furthermore, interfaces can now inherit from interfaces, making them even more useful for specification purposes. To allow...
Read moreSolidity 0.6.1 Release Announcement
Posted by Solidity Team on January 2, 2020
This release fixes a bug in the Yul optimizer related to break and continue statements in loops. The Yul optimizer is part of the regular optimizer since version 0.6.0. In version 0.5.x, you had to explicitly activate the Yul optimizer in addition to the regular optimizer. The Yul optimizer only operates on the code generated by ABIEncoderV2 or if you use it in a stand-alone way. The code generated by ABIEncoderV2 does not make use of break and continue, but...
Read moreSolidity 0.5.16 Release Announcement
Posted by Solidity Team on January 2, 2020
This release fixes a bug in the Yul optimizer. You are only affected if you manually enabled the Yul optimizer (not the regular optimizer) and either used Yul stand-alone or via ABIEncoderV2. For more details, please see buglist.json. Bugfixes: Yul Optimizer: Fix bug in redundant assignment remover in combination with break and continue statements. A big thank you to all contributors who helped make this release possible! Download the new version of Solidity here.
Read moreSolidity 0.6.0 Release Announcement
Posted by Solidity Team on December 17, 2019
This is a major breaking release of the Solidity compiler and language. Changes include explicit virtual and override keywords in inheritance, support for try/catch, splitting the fallback function into a receive Ether function and an actual fallback function and limitations on how the length of an array can be changed, among others. For a detailed explanation, please see the documentation or refer to the list below that shows every single change. From this release on, ABIEncoderV2 is not considered experimental any...
Read moreSolidity 0.5.15 Release Announcement
Posted by Solidity Team on December 17, 2019
This release fixes a bug that was introduced in 0.5.14 (the previous release). You are only affected if you manually enabled the Yul optimizer (not the regular optimizer) and either used Yul stand-alone or via ABIEncoderV2. For more details, please see buglist.json. Bugfixes: Yul Optimizer: Fix incorrect redundant load optimization crossing user-defined functions that contain for-loops with memory / storage writes. A big thank you to all contributors who helped make this release possible! Download the new version of Solidity here.
Read moreSolidity 0.5.14 Release Announcement
Posted by Solidity Team on December 9, 2019
Solidity 0.5.14 sets the default EVM version to "Istanbul" and is targeted as the last release in the 0.5.x series. The SMT checker supports constructors now and it is possible to directly translate EVM-flavoured Yul to Ewasm from the commandline interface. Language Features: Allow to obtain the selector of public or external library functions via a member .selector. Parser: Allow splitting string and hexadecimal string literals into multiple parts. Inline Assembly: Support constants that reference other constants. Compiler Features: Commandline Interface: Allow translation from yul / strict...
Read moreSolidity 0.5.13 Release Announcement
Posted by Solidity Team on November 14, 2019
Solidity 0.5.13 provides Istanbul-EVM compatibility (default is still set to Petersburg), is the first version to generate Ethereum-Webassembly (EWasm) binary output (not fully working yet, though), improves the developer experience by listing potential overloads when resolution fails and can output the layout of the storage variables of a contract. As with all other releases, the coverage of the SMT checker is further improved. Language Features: Allow to obtain the address of a linked library with address(LibraryName). Compiler Features: Code Generator: Use SELFBALANCE opcode for...
Read moreSolidity 0.5.12 Release Announcement
Posted by Solidity Team on October 1, 2019
This is a small bugfix release that also includes loop support for the SMT solver and some improvements to the Yul optimizer. The reason for the smaller feature set is that we are mainly working on the upcoming 0.6.0 release. Language Features: Type Checker: Allow assignment to external function arguments except for reference types. Compiler Features: ABI Output: Change sorting order of functions from selector to kind, name. Optimizer: Add rule that replaces the BYTE opcode by 0 if the first argument is larger than...
Read moreSolidity 0.5.11 Release Announcement
Posted by Solidity Team on August 12, 2019
This release fixes a bug related to calldata structs in ABIEncoderV2 and calldata decoding in V1. Several internal bugs of the SMT checker are fixed. Furthermore, internal types are added to the ABI output which allows you to see which struct type is behind an ABI tuple. Finally, Yul and web assembly support are progressing. We also improved our testing framework which now allows for semantics tests to run in 4 seconds instead of 1 minute. Language Features: Inline Assembly: Support direct constants of...
Read moreSolidity 0.5.10 Release Announcement
Posted by Solidity Team on June 25, 2019
Apart from further invisible work on the Yul optimizer, the Solidity to Yul code generation, the eWasm backend and the SMT checker, this release contains two important bug fixes related to storage arrays. For details see our earlier blog post. It also contains an experimental mode that allows recovery from parser error (implemented by @rocky, funded by ConsenSys) in the hope that this might be useful for IDE developers. Important Bugfixes: ABIEncoderV2: Fix incorrect abi encoding of storage array of data type that occupy...
Read moreSolidity 0.5.9 Release Announcement
Posted by Solidity Team on May 28, 2019
As in previous releases, we spent most of the time making Solidity future-proof by further working on the Yul optimizer, the Solidity to Yul (and eWasm) translator and the SMT Checker. Code generated from Solidity now always includes the version number in the CBOR metadata so that it becomes possible to quickly assess whether a contract might be affected by a compiler bug or not. Language Features: Inline Assembly: Revert change introduced in 0.5.7: The callvalue() instruction does not require payable anymore. Static Analyzer:...
Read moreSolidity 0.5.8 Release Announcement
Posted by Solidity Team on April 30, 2019
This release fixes important but very unlikely bugs and further completes ABIEncoderV2, SMTChecker and Yul and improves the optimizer. Notably, if ABIEncoderV2 is activated, the ABI decoder will now revert on input with dirty higher order bits instead of ignoring those bits. Important Bugfixes: Code Generator: Fix initialization routine of uninitialized internal function pointers in constructor context. Type System: Use correct type name for contracts in event parameters when used in libraries. This affected code generation. Yul Optimizer: Fix SSA transform for multi-assignments. Language Features: ABIEncoderV2: Implement...
Read moreSolidity 0.4.26 Release Announcement
Posted by Solidity Team on April 29, 2019
This is a bugfix release for the 0.4.x series that contains backported fixes for important bugs that affected code generation. It also contains a fix that makes the emscripten target compatible with newer browser versions. Important Bugfixes: Code Generator: Fix initialization routine of uninitialized internal function pointers in constructor context. Type System: Use correct type name for contracts in event parameters when used in libraries. This affected code generation. Bugfixes: ABIEncoderV2: Refuse to generate code that is known to be potentially buggy. General: Split rule list...
Read moreSolidity 0.5.7 Release Announcement
Posted by Solidity Team on March 26, 2019
This release mainly fixes bugs in the optimizer and in the experimental ABI encoder. For details about the bug, please see the official announcement. Furthermore, this release also allows you to use Yul as a language option (instead of "Solidity") in the standard-json-interface. Important Bugfixes: ABIEncoderV2: Fix bugs related to loading short value types from storage when encoding an array or struct from storage. ABIEncoderV2: Fix buffer overflow problem when encoding packed array from storage. Optimizer: Fix wrong ordering of arguments in byte optimization rule...
Read moreSolidity 0.5.6 Release Announcement
Posted by Solidity Team on March 13, 2019
This release mainly fixes an optimizer bug related to multiple shift opcodes that was introduced in the previous release. It is unlikely that any existing contracts are affected, but you should still not use Solidity 0.5.5. Apart from that, the support for calldata structs and arrays by ABIEncoderV2 is almost finished now, we added some more optimizer rules and added enums and one-dimensional arrays to the SMT checker. Important Bugfixes: Yul Optimizer: Fix visitation order bug for the structural simplifier. Optimizer: Fix overflow in...
Read moreSolidity 0.5.5 Release Announcement
Posted by Solidity Team on March 5, 2019
This release focuses on the stabilization of the ABIEncoderV2 and the optimizer. We also prepared for the Petersburg release which is the default EVM now and improved the SMT checker, such that it now reports less false positives when using SafeMath. You can now activate the experimental Yul optimizer using settings: {optimizer: {enabled: true, details: {yul: true}}} or in the commandline via solc optimize-yul. Language Features: Add support for getters of mappings with string or bytes key types. Meta programming: Provide access to the...
Read moreSolidity 0.5.4 Release Announcement
Posted by Solidity Team on February 12, 2019
This release adds support for calldata structs and packed encoding with ABIEncoderV2. We also introduced some changes to the C API and added support for continuous fuzzing via Google oss-fuzz. In addition to that, we added a new commandline option for improved (colorized) diagnostics formatting. Language Features: Allow calldata structs without dynamically encoded members with ABIEncoderV2. Compiler Features: ABIEncoderV2: Implement packed encoding. C API (libsolc / raw soljson.js): Introduce solidity_free method which releases all internal buffers to save memory. Commandline Interface: Adds new option new-reporter for...
Read moreSolidity 0.5.3 Release Announcement
Posted by Solidity Team on January 22, 2019
This release adds support for accessing the code of a contract type, which will hopefully make the new CREATE2 opcode easier to use. We also added some static analysis features to the compiler, but most changes were done "under the hood" to pave the way for using the new Yul-based optimizer with ABIEncoderV2. Language Features: Provide access to creation and runtime code of contracts via type(C).creationCode / type(C).runtimeCode. Compiler Features: Control Flow Graph: Warn about unreachable code. SMTChecker: Support basic typecasts without truncation. SMTChecker: Support external...
Read moreSolidity 0.5.2 Release Announcement
Posted by Solidity Team on December 19, 2018
This release of the Solidity compiler includes several performance optimizations. These include faster compilation time but also cheaper contracts in some situations. This version also checks for all instances of uninitialized storage references, has some improved error messages and other checks. You can now create complete contracts in Yul through the support of the Yul object format and the special functions datasize, dataoffset and datacopy. A big thank you to all contributors who helped make this release possible! Download the new version of...
Read moreSolidity 0.5.1 Release Announcement
Posted by Solidity Team on December 3, 2018
This release improves the usability of interfaces, fixes some bugs, extends the SMT checker and provides an early preview of the Yul optimizer. A big thank you to all contributors who helped make this release possible! Download the new version of Solidity here.
Read moreSolidity 0.5.0 Release Announcement
Posted by Solidity Team on November 13, 2018
This is a major breaking release of the Solidity language and compiler that includes many new safety features. In general, programmers have to be more explicit, some weird edge-cases are removed from the language and the low-level compiler interface is much simpler. This release was long overdue and as a result has amassed an incredibly long list of changes. Please refer to the "Solidity v0.5.0 Breaking Changes” section in the documentation about a good description of what has changed and how...
Read moreSolidity 0.4.25 Release Announcement
Posted by Solidity Team on September 13, 2018
This release fixed a cleanup error concerning the exponentiation operator. It is a bugfix-only release and does not contain any features. A more detailed description of the bugs fixed can be found on the ethereum blog. Note that nightly builds of Solidity currently contain changes unrelated to this bugfix release. A big thank you to all contributors who helped make this release possible! Download the new version of Solidity here.
Read moreSolidity 0.4.24 Release Announcement
Posted by Solidity Team on May 16, 2018
All remaining breaking changes planned for version 0.5.0 that can be implemented in a backwards-compatible way made it into this release. Solidity can now detect uninitialized storage pointers using control-flow analysis. It is again possible to assign multiple return values from a function to newly declared variables and the SMT checker is able to work with simple storage variables. A big thank you to all contributors who helped make this release possible! Download the new version of Solidity here.
Read moreSolidity 0.4.23 Release Announcement
Posted by Solidity Team on April 19, 2018
Bugfix release: In the previous release, it was possible to define two constructors (one using the new constructor-keyword syntax, another one with the old syntax) for a contract, but only one of them got used in the end. We also included other bugfixes. A big thank you to all contributors who helped make this release possible! Download the new version of Solidity here.
Read moreSolidity 0.4.22 Release Announcement
Posted by Solidity Team on April 17, 2018
This release features several major and long-awaited changes: It is now possible to access dynamic data (arrays, strings, etc) returned by function calls. You can specify error reason strings for revert and require (support by tooling is still pending). We added the global functions abi.encode(), abi.encodePacked(), abi.encodeWithSelector() and abi.encodeWithSignature() which expose the ABI encoding functions and each return a bytes value. Constructors should now be defined using constructor(uint arg1, uint arg2) { ... } to make them stand out and avoid bugs when contracts...
Read moreSolidity 0.4.21 Release Announcement
Posted by Solidity Team on March 8, 2018
We again introduced several changes that are scheduled for version 0.5.0 and can be activated using pragma experimental "v0.5.0";. In this release, this pragma does not generate a warning anymore, so you can (and should) use it in production code. In addition to that, you can now specify which EVM version the contract should be compiled for. Valid values are "homestead", "tangerineWhistle", "spuriousDragon", "byzantium" (the default) and "constantinople". Depending on this setting, different opcodes will be used in some cases. The...
Read moreSolidity 0.4.20 Release Announcement
Posted by Solidity Team on February 14, 2018
This release includes some usability and security improvements and a further evolution of the SMT component. The var keyword has been deprecated for security reasons. Significant steps were made in writing optimisation stages for the intermediate language, which will be used by the new ABI encoder to produce highly optimised output. The main goal is to have a resulting bytecode size similar to the old ABI encoder, while having more runtime checks for a stricter decoding process. This is not yet...
Read moreSolidity 0.4.19 Release Announcement
Posted by Solidity Team on November 30, 2017
In the last weeks, we have mainly been working on big internal changes. One of them is the new ABI decoder, which is still in experimental mode, but will hopefully be production-usable soon. External contributions like allowing constant variables for array lengths and improved error messages should make your life as a programmer easier. Finally, the standard-json-io-system now allows to select certain artifacts from a contract which should speed up your code-compile-test-cycle even more! Features: Code Generator: New ABI decoder which supports...
Read moreSolidity 0.4.18 Release Announcement
Posted by Solidity Team on October 18, 2017
This release adds further backwards-incompatible security measures enabled via pragma experimental "v0.5.0"; and contains another important feature: You can now select to compile only certain contracts using the outputSelection field of the standard-json-io compiler interface, which should speed up tools like truffle tremendously. There are also two important bug fixes: One was an oversight in the way bytes variables are allocated in memory and can reduce the memory requirements 32-fold. The second is a security fix: In extremely specific circumstances, it...
Read moreSolidity 0.4.17 Release Announcement
Posted by Solidity Team on September 21, 2017
As we are getting closer to the next breaking release, we want to give everyone a heads up by introducing pragma experimental "v0.5.0" which already enables some of the new safety features of the 0.5.0 release. Furthermore, this release finally checks the modifiers view (used to be named constant) and pure on functions. As a rule of thumb, use view if your function does not modify storage and pure if it does not even read any state information - but the...
Read moreSolidity 0.4.16 Release Announcement
Posted by Solidity Team on August 24, 2017
This release introduces several new features, some of which have to be explicitly activated using pragma experimental ;. We split the constant keyword for functions into pure (neither reads from nor writes to the state) and view (does not modify the state). They are not enforced yet, but will most likely make use of the the new STATIC_CALL feature after Metropolis. Furthermore, the ABI encoder was re-implemented in a much cleaner way using our new intermediate language. It can encode arbitrarily nested arrays and will...
Read moreSolidity 0.4.15 Release Announcement
Posted by Solidity Team on August 8, 2017
This is mainly a bugfix release that corrects a problem with the return value of the low-level delegatecall function and removes some invalid warning messages. Features: Type Checker: Show unimplemented function if trying to instantiate an abstract class. Bugfixes: Code Generator: .delegatecall() should always return execution outcome. Code Generator: Provide "new account gas" for low-level callcode and delegatecall. Type Checker: Constructors must be implemented if declared. Type Checker: Disallow the .gas() modifier on ecrecover, sha256 and ripemd160. Type Checker: Do not mark overloaded functions as shadowing other functions. Type...
Read moreSolidity 0.4.14 Release Announcement
Posted by Solidity Team on July 31, 2017
This release contains several new features and bugfixes and also an important security fix: The ecrecover function can be forced to return invalid data, which can be used to bypass authentication in very special circumstances. Features: C API (jsonCompiler): Export the license method. Code Generator: Optimise the fallback function, by removing a useless jump. Inline Assembly: Show useful error message if trying to access calldata variables. Inline Assembly: Support variable declaration without initial value (defaults to 0). Metadata: Only include files which were used to compile...
Read moreSolidity 0.4.13 Release Announcement
Posted by Solidity Team on July 6, 2017
This is a small bugfix release that fixes several trivial but very annoying bugs that were introduced with 0.4.12. We also deprecate some old features in preparation of the breaking release 0.5.0. Features: Syntax Checker: Deprecated throw in favour of require(), assert() and revert(). Type Checker: Warn if a local storage reference variable does not explicitly use the keyword storage. Bugfixes: Code Generator: Correctly unregister modifier variables. Compiler Interface: Only output AST if analysis was successful. Error Output: Do not omit the error type. A big thank you...
Read moreSolidity 0.4.12 Release Announcement
Posted by Solidity Team on July 3, 2017
This release introduces the AST export, solidifies inline assembly, introduces some more warnings and fixes several bugs. Manual jumps in assembly are deprecated in favour of the structured constructs switch, for and function calls also to provide better portability in the future. Features: Assembly: Add CREATE2 (EIP86), STATICCALL (EIP214), RETURNDATASIZE and RETURNDATACOPY (EIP211) instructions. Assembly: Display auxiliary data in the assembly output. Assembly: Renamed SHA3 to KECCAK256. AST: export all attributes to JSON format. C API (jsonCompiler): Use the Standard JSON I/O internally. Code Generator: Added the Whiskers...
Read moreSolidity 0.4.11 Release Announcement
Posted by Solidity Team on May 3, 2017
This release fixes a bug in the optimizer (more about this on the blog), introduces the standard JSON interface, adds interface contracts and implements some additional safety checks. The standard JSON interface provides a unified way to invoke the Solidity compiler in order to ease cross-platform adoption and compilation verification. Features: Implement the Standard JSON Input / Output API Support interface contracts. C API (jsonCompiler): Add the compileStandard() method to process a Standard JSON I/O. Commandline interface: Add the standard-json parameter to process a Standard JSON...
Read moreSolidity 0.4.10 Release Announcement
Posted by Solidity Team on March 15, 2017
This release is focused on stability and also introduces some new smart contract safety features: require, assert and transfer. Note that the new revert function will only be gas-efficient starting from homestead. Features: Add assert(condition), which throws if condition is false (meant for internal errors). Add require(condition), which throws if condition is false (meant for invalid input). Commandline interface: Do not overwrite files unless forced. Introduce .transfer(value) for sending Ether. Code generator: Support revert() to abort with rolling back, but not consuming all gas. Inline assembly: Support...
Read moreSolidity 0.4.9 Release Announcement
Posted by Solidity Team on January 31, 2017
This release fixes quite some bugs and also adds several new features. Things to look out for: To disambiguate contracts and libraries of the same name in different files, everything is now prefixed by "filename:". This applies to the compiler output, the linker input and other things. Internal exceptions are now thrown by using an invalid opcode (0xfe), manual exceptions still use an invalid jump. Features: Compiler interface: Contracts and libraries can be referenced with a file: prefix to make them unique. Compiler interface: Report source...
Read moreSolidity 0.4.8 Release Announcement
Posted by Solidity Team on January 13, 2017
Features: Optimiser: Performance improvements. Output: Print assembly in new standardized Solidity assembly format. Bugfixes: Remappings: Prefer longer context over longer prefix. Type checker, code generator: enable access to events of base contracts' names. Imports: import ".dir/a" is not a relative path. Relative paths begin with directory . or ... Type checker: disallow inheritances of different kinds (e.g. a function and a modifier) of members of the same name A big thank you to all contributors who helped make this release possible! Download the new version of Solidity here.
Read moreSolidity 0.4.7 Release Announcement
Posted by Solidity Team on December 15, 2016
Features: Bitshift operators. Type checker: Warn when msg.value is used in non-payable function. Code generator: Inject the Swarm hash of a metadata file into the bytecode. Code generator: Replace expensive memcpy precompile by simple assembly loop. Optimizer: Some dead code elimination. Bugfixes: Code generator: throw if calling the identity precompile failed during memory (array) copying. Type checker: string literals that are not valid UTF-8 cannot be converted to string type Code generator: any non-zero value given as a boolean argument is now converted into 1. AST Json Converter: replace VariableDefinitionStatement...
Read moreSolidity 0.4.6 Release Announcement
Posted by Solidity Team on November 22, 2016
Bugfixes: Optimizer: Knowledge about state was not correctly cleared for JUMPDESTs Swarm hash of js compiler: bzzr:/b873fa122233c91b1531527c390f6ca49df4d2a2c5f75706f4b612a0c813cb6a A big thank you to all contributors who helped make this release possible! Download the new version of Solidity here.
Read moreSolidity 0.4.5 Release Announcement
Posted by Solidity Team on November 21, 2016
This Solidity release adds function types. Use-cases include supplying callbacks for asynchronous or off-chain operations or generic library features (for example map-reduce-style programming). This release also improves the safety of enums and sending Ether to a contract constructor. Features: Function types Do-while loops: support for a do while (); control structure Inline assembly: support invalidJumpLabel as a jump label. Type checker: now more eagerly searches for a common type of an inline array with mixed types Code generator: generates a runtime error when an out-of-range...
Read moreSolidity 0.4.4 Release Announcement
Posted by Solidity Team on November 1, 2016
This is a bugfix release that fixes a storage corruption that appears when multiple variables are stored in the same slot (details). Bugfixes: Type checker: forbid signed exponential that led to an incorrect use of EXP opcode. Code generator: properly clean higher order bytes before storing in storage. A big thank you to all contributors who helped make this release possible! Download the new version of Solidity here.
Read moreSolidity 0.4.3 Release Announcement
Posted by Solidity Team on October 25, 2016
This is a real bugfix release as you can see from the changelog below. The most important fix concerns the optimizer which generated invalid code connected to the SHA3 opcode in certain situations. Features: Inline assembly: support both suicide and selfdestruct opcodes (note: suicide is deprecated). Inline assembly: issue warning if stack is not balanced after block. Include keccak256() as an alias to sha3(). Support shifting constant numbers. Bugfixes: Commandline interface: Disallow unknown options in solc. Name resolver: Allow inheritance of enum definitions. Type checker: Proper type checking...
Read moreSolidity 0.4.2 Release Announcement
Posted by Solidity Team on September 17, 2016
Bugfixes: Code Generator: Fix library functions being called from payable functions. Type Checker: Fixed a crash about invalid array types. Code Generator: Fixed a call gas bug that became visible after version 0.4.0 for calls where the output is larger than the input. A big thank you to all contributors who helped make this release possible! Download the new version of Solidity here.
Read moreSolidity 0.4.1 Release Announcement
Posted by Solidity Team on September 9, 2016
This is a bugfix release that fixes an error when compiling libraries with the latest version 0.4.0. A big thank you to all contributors who helped make this release possible! Download the new version of Solidity here.
Read moreSolidity 0.4.0 Release Announcement
Posted by Solidity Team on September 8, 2016
Note: Version 0.4.0 is unable to compile libraries. Please upgrade to 0.4.1. This release deliberately breaks backwards compatibility mostly to enforce some safety features. The most important change is that you have to explicitly specify if functions can receive ether via the payable modifier. Furthermore, more situations cause exceptions to be thrown. Minimal changes to be made for upgrade: Add payable to all functions that want to receive Ether (including the constructor and the fallback function). Change ` to ;` in modifiers. Add version pragma...
Read moreSolidity 0.3.6 Release Announcement
Posted by Solidity Team on August 10, 2016
This is the first release from the new "solidity-standalone" repository. It does not have dependencies to cpp-ethereum anymore and can be built just from the solidity github repository. Note that the optimizer was disabled in some situations which could lead to larger (but correcter) code. Features: Formal verification: Take external effects on a contract into account. Type Checker: Warning about unused return value of low-level calls and send. Output: Source location and node id as part of AST output Output: Source location mappings for bytecode Output: Formal...
Read moreSolidity 0.3.5 Release Announcement
Posted by Solidity Team on June 10, 2016
Features: Context-dependent path remappings (different modules can use the same library in different versions) Bugfixes: Type Checking: Dynamic return types were removed when fetching data from external calls, now they are replaced by an "unusable" type. Type Checking: Overrides by constructors were considered making a function non-abstract. A big thank you to all contributors who helped make this release possible! Download the new version of Solidity here.
Read moreSolidity 0.3.4 Release Announcement
Posted by Solidity Team on May 31, 2016
This release contains no changes outside of the documentation. A big thank you to all contributors who helped make this release possible! Download the new version of Solidity here.
Read moreSolidity 0.3.3 Release Announcement
Posted by Solidity Team on May 27, 2016
This release mainly makes libraries more flexible in that it allows internal functions to be called. Features Allow internal library functions to be called (by "inlining") Fractional/rational constants (only usable with fixed point types, which are still in progress) Inline assembly has access to internal functions (as jump labels) Running solc without arguments on a terminal will print help. Fixes Code Generation: Remove some non-determinism in code generation. Code Generation: Corrected usage of not / bnot / iszero in inline assembly Code Generation: Correctly clean bytesNN types before comparison A...
Read moreSolidity 0.3.2 Release Announcement
Posted by Solidity Team on April 18, 2016
This is mainly a bugfix release. Under the hood, we are in the process of separating the Solidity source code from the rest of the cpp-ethereum source code so that it can soon be built (and released) in isolation. Fixes: Code generation: Dynamic arrays of structs were not deleted correctly. Code generation: Static arrays in constructor parameter list were not decoded correctly. Parser: Inline assembly parser: byte opcode was unusable Error reporting: tokens for variably-sized types were not converted to string properly A big thank you...
Read moreSolidity 0.3.1 Release Announcement
Posted by Solidity Team on March 31, 2016
This release mainly introduces inline assembly (documentation). Inline assembly provides a way to write low-level but still well readable code. Together with the coming features of inline library functions and templates, it allows to move much of the development that had to be done in the compiler itself into libraries written in Solidity. In the future, it will be possible to introduce new versatile types that still look like builtins. Features: inline assembly Fixes: Code generation: array access with narrow types did not clean...
Read moreSolidity 0.3.0 Release Announcement
Posted by Solidity Team on March 11, 2016
This version is synchronized to the Homestead changes on the main Ethereum network and introduces various breaking changes. BREAKING CHANGES: You should not rely on division for literals resulting in a (truncated) integer. This is still the case but will change once we implement fixed point types, i.e. in the future 1/2 == 0.5 will be true, currently we have 1/2 == 0. Note that this only applies to literals ((2 + 7) / 2) and not variables (x / 2). Library calls...
Read moreSolidity 0.2.2 Release Announcement
Posted by Solidity Team on February 17, 2016
Features: Index access for types bytes1, ..., bytes32 (only read access for now). Bugfixes: Type checker crash for wrong number of base constructor parameters. A big thank you to all contributors who helped make this release possible! Download the new version of Solidity here.
Read moreSolidity 0.2.1 Release Announcement
Posted by Solidity Team on January 30, 2016
This release includes three major features and one very important bugfix in the optimizer. In some situations, the optimizer generated incorrect code. Please always test your code before you use it, unfortunately, we can never guarantee 100% correctness. We are especially grateful about the many voluntary community contributions this release received. Two fearless individuals dived deep into the solidity code and delivered two major features: Thanks a lot to @VoR0220 for the inline arrays and to @guanqun for the ternary operator! Furthermore, @bobsummerwill spent...
Read moreSolidity 0.2.0 Release Announcement
Posted by Solidity Team on December 1, 2015
Features: Allocation of memory arrays using new. Binding library functions to types via using x for y Breaking Change**: new ContractName.value(10)() has to be written as (new ContractName).value(10)() Added selfdestruct as an alias for suicide. Bugfixes: Constructor arguments of fixed array type were not read correctly. Memory allocation of structs containing arrays or strings. Data location for explicit memory parameters in libraries was set to storage. The two main features of this release is the ability to create memory arrays (of dynamic length) and to attach library functions to types....
Read moreSolidity 0.1.7 Release Announcement
Posted by Solidity Team on November 17, 2015
Features: Improved error messages for unexpected tokens. Proof-of-concept transcompilation to why3 for formal verification of contracts. Bugfixes: Writing to elements of bytes or string overwrite others. Arrays (also strings) as indexed parameters of events. "Successor block not found" on Windows. Using string literals in tuples. Cope with invalid commit hash in version for libraries. Some test framework fixes on windows. A big thank you to all contributors who helped make this release possible! Download the new version of Solidity here.
Read moreSolidity 0.1.6 Release Announcement
Posted by Solidity Team on October 16, 2015
Features: .push() for dynamic storage arrays. Tuple expressions ((1,2,3) or return (1,2,3);) Declaration and assignment of multiple variables (var (x,y,) = (1,2,3,4,5); or var (x,y) = f();) Destructuring assignment ((x,y,) = (1,2,3)) Handling of multiple source files in the json compiler. Bugfixes: Internal error about usage of library function with invalid types. Correctly parse Library.structType a at statement level. Correctly report source locations of parenthesized expressions (as part of "tuple" story). A big thank you to all contributors who helped make this release possible! Download the new version of Solidity here.
Read moreSolidity 0.1.5 Release Announcement
Posted by Solidity Team on October 7, 2015
Changes: Breaking change in storage encoding: Encode short byte arrays and strings together with their length in storage. Report warnings. Allow storage reference types for public library functions. Access to types declared in other contracts and libraries via .. Version stamp at beginning of runtime bytecode of libraries. Bugfix: Problem with initialized string state variables and dynamic data in constructor. Bugfix: Resolve dependencies concerning new automatically. Bugfix: Allow four indexed arguments for anonymous events. Bugfix: Detect too large integer constants in functions that accept arbitrary parameters. A big thank you...
Read moreSolidity 0.1.4 Release Announcement
Posted by Solidity Team on September 30, 2015
Changes: Bugfix: combined-json output of solc incorrectly returned the runtime binary instead of the binary. Bugfix: Accessing fixed-size array return values. Bugfix: Disallow assignment from literal strings to storage pointers. Refactoring: Move type checking into its own module. A big thank you to all contributors who helped make this release possible! Download the new version of Solidity here.
Read moreSolidity 0.1.3 Release Announcement
Posted by Solidity Team on September 22, 2015
Changes: throw statement. Libraries that contain functions which are called via CALLCODE. Linker stage for compiler to insert other contract's addresses (used for libraries). Compiler option to output runtime part of contracts. Compile-time out of bounds check for access to fixed-size arrays by integer constants. Version string includes libevmasm/libethereum's version (contains the optimizer). Bugfix: Accessors for constant public state variables. Bugfix: Propagate exceptions in clone contracts. Bugfix: Empty single-line comments are now treated properly. Bugfix: Properly check the number of indexed arguments for events. Bugfix: Strings in struct constructors. A big thank...
Read moreSolidity 0.1.2 Release Announcement
Posted by Solidity Team on August 21, 2015
Changes: Improved commandline interface (breaking change). Explicit conversion between bytes and string. Bugfix: Value transfer used in clone contracts. Bugfix: Problem with strings as mapping keys. Bugfix: Prevent usage of some operators. A big thank you to all contributors who helped make this release possible! Download the new version of Solidity here.
Read more