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 encode arbitrarily nested arrays and will also be able to encode structs starting from the next release. Please try it out using pragma experimental ABIEncoderV2; and check if you have any issues with the encoder. It currently generates larger code than the old encoder, but we hope to fix that soon.

Finally, solc now include experimental support for automated overflow and assertion checking at compile-time using the SMT solver Z3. It is active if you use pragma experimental SMTChecker; and if solc was compiled with Z3 support. The latter is currently only the case for the PPA builds (or if you build from source and have libz3-dev in your system), but we also have a solution in the pipeline that will make it work for solc-js (and thus remix).

Features:

  • ABI JSON: Include new field stateMutability with values pure, view, nonpayable and payable.
  • Analyzer: Experimental partial support for Z3 SMT checker (“SMTChecker”).
  • Build System: Shared libraries (libdevcore, libevmasm, libsolidity and liblll) are no longer produced during the build process.
  • Code generator: Experimental new implementation of ABI encoder that can encode arbitrarily nested arrays (“ABIEncoderV2”)
  • Metadata: Store experimental flag in metadata CBOR.
  • Parser: Display previous visibility specifier in error if multiple are found.
  • Parser: Introduce pure and view keyword for functions, constant remains an alias for view and pureness is not enforced yet, so use with care.
  • Static Analyzer: Warn about large storage structures.
  • Syntax Checker: Support pragma experimental <feature>; to turn on experimental features.
  • Type Checker: More detailed error message for invalid overrides.
  • Type Checker: Warn about shifting a literal.

Bugfixes:

  • Assembly Parser: Be more strict about number literals.
  • Assembly Parser: Limit maximum recursion depth.
  • Parser: Enforce commas between array and tuple elements.
  • Parser: Limit maximum recursion depth.
  • Type Checker: Crash fix related to using.
  • Type Checker: Disallow constructors in libraries.
  • Type Checker: Reject the creation of interface contracts using the new statement.

A big thank you to all contributors who helped make this release possible!

Download the new version of Solidity here.