evmone 0.12.0
This release is focused on the Prague upgrade and EOF.
Added
- Added
evmone-precompiles-bench
tool to benchmark precompiles. #765 - Added native implementations of the precompiled hash functions:
- Added
validate_eof
EVMC option to validate EOF before execution. This option is enabled by default inevmc run
. #768 #960 - Implemented EIP-7610 "Revert creation in case of non-empty storage" in the testing infrastructure. #816
- Added
--version
option to testing tools. #902 - Introduce
TestState
andTestAccount
to testing infrastructure. #811 - Added support for validating "initcode" containers in
eofparse
andeoftest
. #934 #943
Changed
-
EVM Object Format (EOF)
Completed implementation of the EIP-7692: EVM Object Format (EOFv1) Meta.
- Added
EOFCREATE
andRETURNCONTRACT
instructions. #553 - Added
TXCREATE
instruction, later moved to the future EOF version (Osaka). #702 #889 - Make
EXT*CALL
instructions Address Space Expansion ready. #915 - Added EOF validation of sub-container kinds. #876
- Limit validated container size to
MAX_INITCODE_SIZE
. #930 - Added
RETURNDATALOAD
instruction. #786 - Implementation of "less restricted" stack validation. #676
- Added implementation of
EXCHANGE
from EIP-663. #839 - Disallow unreachable code sections in EOF containers. #721 #866
- Restrict
DUPN
andSWAPN
to EOF only in EOF only. #788 - Change
DATA*
opcodes. #797 - Disable EOF ↔ legacy cross-creation. #825
- Deprecate and reject code/gas-observability in EOF. #834
- Make EOF opaque for
EXTCODE*
instructions. #587 - Implement EOF creation transactions. #878
- Modify EOF
RETURNDATA*
to allow out-of-bounds reads (instead of failing execution). #909 - Tune EOF validation: disallow truncated data in top-level EOF containers. #921
- Disallow unreferenced sub-containers and sub-containers of conflicting kinds. #916
- Added
-
Testing
There are a lot of improvements to the testing tools and test formats. In particular, big portion of evmone's unit tests has been re-shaped to have a structure of State Tests or EOF Validation Tests.
Moreover, we added the option to export these tests to JSON and the archive of the exported tests ("fixture") is the artifact of this release.
Upgraded external test suites:
Other details:
- Add some missing State Test export features. #807
- Check for unexpected
EF
prefix in test code. #809 - EOF Validation Test fixture. #810
- Export EOF validation unit tests to JSON EOF Validation Tests. #818
- Output failed test case index in EOF Validation Tests. #820
- Add
ExportableFixture
for JSON tests exporting. #821 - Recognize all official fork/revision names. #830
- Export State Tests with invalid transactions. #858
- Allow
"to": null
in JSON transactions. #927 - EOF Validation Tests runner: support "initcode" flag. #936
evmone-blockchaintest
: Simplify genesis handling. #954- Optimization: only empty accounts are marked "touched". #785
- Adjust ethash difficulty if below minimum
0x20000
. #803
-
Requirements and dependencies updates:
-
Use 32-byte aligned allocation for Baseline stack space. #907
-
Split Baseline analysis and execution into separate files. #946
-
Convert EVMMAX to header-only library with full
constexpr
capabilities. #864 #964 -
Return number of errors from
eofparse
. #873
Fixed
- Implement Frontier behavior of failing code deployment (testing infrastructure). #824
- Fix error messages for compatibility with external testing tools. #828 #886
- Fix initcode handling before EOF is enabled: an initcode staring with
EF00
should not be validated as EOF unconditionally. #893 - Fix EOF header parsing bug (introduced by code refactoring). #957 #958
- Fix
eoftest
to run all tests from a JSON file. #935 - Improve output buffer handling for precompiles in testing infrastructure. This fixes out-of-bound access for some fuzzing-generated state tests. #951