Skip to content

Version 0.8.0

Compare
Choose a tag to compare
@chriseth chriseth released this 16 Dec 17:40
· 5875 commits to develop since this release
c7dfd78

Solidity 0.8.0 is a breaking release of the Solidity compiler and language.

For a detailed explanation of the new features and changes, please see the blog post.

Breaking Changes:

  • Code Generator: All arithmetic is checked by default. These checks can be disabled using unchecked { ... }.
  • Code Generator: Cause a panic if a byte array in storage is accessed whose length is encoded incorrectly.
  • Code Generator: Use revert with error signature Panic(uint256) and error codes instead of invalid opcode on failing assertions.
  • Command Line Interface: JSON fields abi, devdoc, userdoc and storage-layout are now sub-objects rather than strings.
  • Command Line Interface: Remove the --old-reporter option.
  • Command Line Interface: Remove the legacy --ast-json option. Only the --ast-compact-json option is supported now.
  • General: Enable ABI coder v2 by default.
  • General: Remove global functions log0, log1, log2, log3 and log4.
  • Parser: Exponentiation is right associative. a**b**c is parsed as a**(b**c).
  • Scanner: Remove support for the \b, \f, and \v escape sequences.
  • Standard JSON: Remove the legacyAST option.
  • Type Checker: Function call options can only be given once.
  • Type System: Declarations with the name this, super and _ are disallowed, with the exception of public functions and events.
  • Type System: Disallow msg.data in receive() function.
  • Type System: Disallow type(super).
  • Type System: Disallow enums with more than 256 members.
  • Type System: Disallow explicit conversions from negative literals and literals larger than type(uint160).max to address type.
  • Type System: Disallow the byte type. It was an alias to bytes1.
  • Type System: Explicit conversion to address type always returns a non-payable address type. In particular, address(u), address(b), address(c) and address(this) have the type address instead of address payable (Here u, b, and c are arbitrary variables of type uint160, bytes20 and contract type respectively.)
  • Type System: Explicit conversions between two types are disallowed if it changes more than one of sign, width or kind at the same time.
  • Type System: Explicit conversions from literals to enums are only allowed if the value fits in the enum.
  • Type System: Explicit conversions from literals to integer type is as strict as implicit conversions.
  • Type System: Introduce address(...).code to retrieve the code as bytes memory. The size can be obtained via address(...).code.length, but it will currently always include copying the code.
  • Type System: Introduce block.chainid for retrieving the current chain id.
  • Type System: Support address(...).codehash to retrieve the codehash of an account.
  • Type System: The global variables tx.origin and msg.sender have type address instead of address payable.
  • Type System: Unary negation can only be used on signed integers, not on unsigned integers.
  • View Pure Checker: Mark chainid as view.
  • Yul: Disallow the use of reserved identifiers, such as EVM instructions, even if they are not available in the given dialect / EVM version.
  • Yul: The assignimmutable builtin in the "EVM with objects" dialect takes the base offset of the code to modify as an additional argument.

Language Features:

  • Super constructors can now be called using the member notation e.g. M.C(123).

Bugfixes:

  • Type Checker: Perform proper truncating integer arithmetic when using constants in array length expressions.

AST Changes:

  • New AST Node IdentifierPath replacing in many places the UserDefinedTypeName.
  • New AST Node UncheckedBlock used for unchecked { ... }.

We especially thank all the contributors that made this release possible:

Alex Beregszaszi, Christian Parpart, Daniel Kirchner, Djordje Mijovic, Harikrishnan Mulackal, Kamil Śliwak, Leonardo Alt, Mathias Baumann, ssi91

If you want to perform a source build, please only use solidity_0.8.0.tar.gz and not the zip provided by github directly.