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 signaturePanic(uint256)
and error codes instead of invalid opcode on failing assertions. - Command Line Interface: JSON fields
abi
,devdoc
,userdoc
andstorage-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
andlog4
. - Parser: Exponentiation is right associative.
a**b**c
is parsed asa**(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
inreceive()
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
toaddress
type. - Type System: Disallow the
byte
type. It was an alias tobytes1
. - Type System: Explicit conversion to
address
type always returns a non-payableaddress
type. In particular,address(u)
,address(b)
,address(c)
andaddress(this)
have the typeaddress
instead ofaddress payable
(Hereu
,b
, andc
are arbitrary variables of typeuint160
,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 asbytes memory
. The size can be obtained viaaddress(...).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
andmsg.sender
have typeaddress
instead ofaddress 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 theUserDefinedTypeName
. - New AST Node
UncheckedBlock
used forunchecked { ... }
.
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.