All Releases posts:

Solidity 0.8.16 Release Announcement

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. [Read More]

Solidity 0.8.14 Release Announcement

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... [Read More]

Solidity 0.8.13 Release Announcement

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. [Read More]

Solidity 0.8.10 Release Announcement

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. [Read More]

Solidity 0.8.9 Release Announcement

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... [Read More]

Solidity 0.8.8 Release Announcement

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. [Read More]

Solidity 0.8.7 Release Announcement

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. [Read More]

Solidity 0.8.3 Release Announcement

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. [Read More]

Solidity 0.8.2 Release Announcement

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. [Read More]

Solidity 0.8.1 Release Announcement

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. [Read More]

Solidity 0.8.0 Release Announcement

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. [Read More]

Solidity 0.7.5 Release Announcement

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. [Read More]

Solidity 0.8.x Preview Release

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... [Read More]

Solidity 0.7.4 Release Announcement

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. [Read More]

Solidity 0.7.3 Release Announcement

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. [Read More]

Solidity 0.7.2 Release Announcement

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. [Read More]

Solidity 0.7.0 Release Announcement

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... [Read More]

Solidity 0.6.10 Release Announcement

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. [Read More]

Solidity 0.6.9 Release Announcement

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. [Read More]

Solidity 0.6.8 Release Announcement

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. [Read More]

Solidity 0.6.7 Release Announcement

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.... [Read More]

Solidity 0.6.6 Release Announcement

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... [Read More]

Solidity 0.6.5 Release Announcement

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... [Read More]

Solidity 0.5.17 Release Announcement

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... [Read More]

Solidity 0.6.4 Release Announcement

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(...)... [Read More]

Solidity 0.6.3 Release Announcement

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,... [Read More]

Solidity 0.6.2 Release Announcement

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.... [Read More]

Solidity 0.6.1 Release Announcement

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 More]

Solidity 0.5.16 Release Announcement

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.

Solidity 0.6.0 Release Announcement

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... [Read More]

Solidity 0.5.15 Release Announcement

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... [Read More]

Solidity 0.5.14 Release Announcement

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... [Read More]

Solidity 0.5.13 Release Announcement

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:... [Read More]

Solidity 0.5.12 Release Announcement

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... [Read More]

Solidity 0.5.11 Release Announcement

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:... [Read More]

Solidity 0.5.10 Release Announcement

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... [Read More]

Solidity 0.5.9 Release Announcement

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... [Read More]

Solidity 0.5.8 Release Announcement

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... [Read More]

Solidity 0.4.26 Release Announcement

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... [Read More]

Solidity 0.5.7 Release Announcement

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... [Read More]

Solidity 0.5.6 Release Announcement

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.... [Read More]

Solidity 0.5.5 Release Announcement

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:... [Read More]

Solidity 0.5.4 Release Announcement

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... [Read More]

Solidity 0.5.3 Release Announcement

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... [Read More]

Solidity 0.5.2 Release Announcement

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... [Read More]

Solidity 0.5.1 Release Announcement

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.

Solidity 0.5.0 Release Announcement

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... [Read More]

Solidity 0.4.25 Release Announcement

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.

Solidity 0.4.24 Release Announcement

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.

Solidity 0.4.23 Release Announcement

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.

Solidity 0.4.22 Release Announcement

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... [Read More]

Solidity 0.4.21 Release Announcement

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.... [Read More]

Solidity 0.4.20 Release Announcement

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... [Read More]

Solidity 0.4.19 Release Announcement

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... [Read More]

Solidity 0.4.18 Release Announcement

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,... [Read More]

Solidity 0.4.17 Release Announcement

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... [Read More]

Solidity 0.4.16 Release Announcement

This release introduces several new features, some of which have to be explicitly activated using pragma experimental <feature name>;. 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... [Read More]

Solidity 0.4.15 Release Announcement

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... [Read More]

Solidity 0.4.14 Release Announcement

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... [Read More]

Solidity 0.4.13 Release Announcement

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... [Read More]

Solidity 0.4.12 Release Announcement

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... [Read More]

Solidity 0.4.11 Release Announcement

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... [Read More]

Solidity 0.4.10 Release Announcement

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... [Read More]

Solidity 0.4.9 Release Announcement

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... [Read More]

Solidity 0.4.8 Release Announcement

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... [Read More]

Solidity 0.4.7 Release Announcement

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... [Read More]

Solidity 0.4.6 Release Announcement

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.

Solidity 0.4.5 Release Announcement

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 <block> while (<expr>); 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... [Read More]

Solidity 0.4.4 Release Announcement

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.

Solidity 0.4.3 Release Announcement

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... [Read More]

Solidity 0.4.2 Release Announcement

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.

Solidity 0.4.1 Release Announcement

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.

Solidity 0.4.0 Release Announcement

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 _;... [Read More]

Solidity 0.3.6 Release Announcement

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:... [Read More]

Solidity 0.3.5 Release Announcement

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.

Solidity 0.3.4 Release Announcement

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.

Solidity 0.3.3 Release Announcement

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... [Read More]

Solidity 0.3.2 Release Announcement

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... [Read More]

Solidity 0.3.1 Release Announcement

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... [Read More]

Solidity 0.3.0 Release Announcement

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 /... [Read More]

Solidity 0.2.2 Release Announcement

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.

Solidity 0.2.1 Release Announcement

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... [Read More]

Solidity 0.2.0 Release Announcement

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... [Read More]

Solidity 0.1.7 Release Announcement

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 More]

Solidity 0.1.6 Release Announcement

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... [Read More]

Solidity 0.1.5 Release Announcement

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... [Read More]

Solidity 0.1.4 Release Announcement

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.

Solidity 0.1.3 Release Announcement

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... [Read More]

Solidity 0.1.2 Release Announcement

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.