Version 0.8.5
Solidity 0.8.5 allows conversions from bytes
to bytesNN
values, adds the verbatim
builtin function to inject
arbitrary bytecode in Yul and fixes several smaller bugs.
For more details, please see the release announcement.
Language Features:
- Allowing conversion from
bytes
andbytes
slices tobytes1
/.../bytes32
. - Yul: Add
verbatim
builtin function to inject arbitrary bytecode.
Compiler Features:
- Code Generator: Insert helper functions for panic codes instead of inlining unconditionally. This can reduce costs if many panics (checks) are inserted, but can increase costs where few panics are used.
- EVM: Set the default EVM version to "Berlin".
- SMTChecker: Function definitions can be annotated with the custom Natspec tag
custom:smtchecker abstract-function-nondet
to be abstracted by a nondeterministic value when called. - Standard JSON / combined JSON: New artifact "functionDebugData" that contains bytecode offsets of entry points of functions and potentially more information in the future.
- Yul Optimizer: Evaluate
keccak256(a, c)
, when the value at memory locationa
is known at compile time andc
is a constant<= 32
.
Bugfixes:
- AST: Do not output value of Yul literal if it is not a valid UTF-8 string.
- Code Generator: Fix internal error when function arrays are assigned to storage variables and the function types can be implicitly converted but are not identical.
- Code Generator: Fix internal error when super would have to skip an unimplemented function in the virtual resolution order.
- Control Flow Graph: Assume unimplemented modifiers use a placeholder.
- Control Flow Graph: Take internal calls to functions that always revert into account for reporting unused or unassigned variables.
- Function Call Graph: Fix internal error connected with circular constant references.
- Name Resolver: Do not issue shadowing warning if the shadowing name is not directly accessible.
- Natspec: Allow multiple
@return
tags on public state variable documentation. - SMTChecker: Fix internal error on conversion from
bytes
tofixed bytes
. - SMTChecker: Fix internal error on external calls from the constructor.
- SMTChecker: Fix internal error on struct constructor with fixed bytes member initialized with string literal.
- Source Locations: Properly set source location of scoped blocks.
- Standard JSON: Properly allow the
inliner
setting undersettings.optimizer.details
. - Type Checker: Fix internal compiler error related to having mapping types in constructor parameter for abstract contracts.
- Type Checker: Fix internal compiler error when attempting to use an invalid external function type on pre-byzantium EVMs.
- Type Checker: Fix internal compiler error when overriding receive ether function with one having different parameters during inheritance.
- Type Checker: Make errors about (nested) mapping type in event or error parameter into fatal type errors.
- Type Checker: Fix internal compiler error when overriding an implemented modifier with an unimplemented one.
AST Changes:
- Add member
hexValue
for Yul string and hex literals.
We especially thank all the contributors that made this release possible:
a3d4, Alex Beregszaszi, Alexander Arlt, Anurag Dashputre, Bhargava Shastry, Christian Parpart, cxxboy, Daniel Kirchner, Đorđe Mijović, Franziska Heintel, Harikrishnan Mulackal, Kamil Śliwak, Keqi Huang, Leonardo Alt, Martin Blicha, Mathias Baumann, Maurelian, newbateni, Raphael Roullet, TerranCivilian, Wade Dorrell, William Entriken.
If you want to perform a source build, please only use solidity_0.8.5.tar.gz and not the zip provided by github directly.