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 enabled in this release.

Features:

  • Code Generator: Prevent non-view functions in libraries from being called directly (as opposed to via delegatecall).
  • Commandline interface: Support strict mode of assembly (disallowing jumps, instructional opcodes, etc) with the strict-assembly switch.
  • Inline Assembly: Issue warning for using jump labels (already existed for jump instructions).
  • Inline Assembly: Support some restricted tokens (return, byte, address) as identifiers in IULIA mode.
  • Optimiser: Replace x % 2**i by x & (2**i-1).
  • Resolver: Continue resolving references after the first error.
  • Resolver: Suggest alternative identifiers if a given identifier is not found.
  • SMT Checker: Take if-else branch conditions into account in the SMT encoding of the program variables.
  • Syntax Checker: Deprecate the var keyword (and mark it an error as experimental 0.5.0 feature).
  • Type Checker: Allow this.f.selector to be a pure expression.
  • Type Checker: Issue warning for using public visibility for interface functions.
  • Type Checker: Limit the number of warnings raised for creating abstract contracts.

Bugfixes:

  • Error Output: Truncate huge number literals in the middle to avoid output blow-up.
  • Parser: Disallow event declarations with no parameter list.
  • Standard JSON: Populate the sourceLocation field in the error list.
  • Standard JSON: Properly support contract and library file names containing a colon (such as URLs).
  • Type Checker: Suggest the experimental ABI encoder if using structs as function parameters (instead of an internal compiler error).
  • Type Checker: Improve error message for wrong struct initialization.

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

Download the new version of Solidity here.