Releases: ethereum/evmone
evmone 0.13.0
This release adds BLS precompiles and a system contract for Prague and improves the interpreter API.
Added
- Implementation of all EIP-2537 BLS precompiles, enabled in Prague: #984
- Implementation of KZG proof verification (aka "point evaluation") precompile from EIP-4844. #979
- Implementation of EIP-2935 "Serve historical block hashes from state". #953
Changed
- Refactor
system_call()
in preparation for more Pectra system contracts. #976 - Improved Baseline code analysis API. #941
- Provide execution states at VM object level and hide them from public API. #1005
- Requirements and dependencies updates:
- External test suites:
- EEST EOF tests upgraded to [email protected]. #1025
- Added EEST tests for Pectra [email protected] #997
- ethereum/tests upgraded to v14.1. #980
Fixed
- Fixed EOF parsing bug allowing multiple subcontainer kinds in the header. #978
- Ensure mandatory fields are included in the exported state tests. #993
- Properly handle EOF additions in
ExecutionState::reset()
. #1004
Removed
- The implementation of EOF's
TXCREATE
has been removed. It will be back when scheduled for a network upgrade. #992
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
evmone 0.11.0 "Cancun"
This release is focused on Cancun and EOF.
Added
- Cancun Network Upgrade fully supported
- EVM Modular Arithmetic Extensions ([EVMMAX])
- Initial support for [Blockchain Tests]
- Optionally use [Silkworm] as the precompiles implementation. #660
- Support for executing JSON EOF Tests (thanks @gzanitti) #678
- EVM tracing option
--trace
inevmone-t8n
#616 - Support for compiling for
riscv32
architecture #700 - Ability to export evmone's unit tests to the JSON State Test format #743
Changed
- EVM Object Format (EOF):
EOF implementation follows the [EOF spec] (aka Mega EOF Endgame) and is tentatively enabled in the Prague EVM revision.- Tests have been migrated to ipsilon/tests/eof #651
- Implementation of four new instructions for accessing data sections:
DATALOAD
,DATALOADN
,DATASIZE
,DATACOPY
#586 #663 #717 #741 - Forbid
DELEGATECALL
from EOF to legacy contracts during execution #588 - The data section kind has been changed to
0x04
#632 - The
RJUMPV
immediate argument meaning has been changed to "max index" #640 - Implementation of the
JUMPF
instruction and the non-returning functions #644
- Opcodes of new instructions have been assigned following the execution-spec opcodes list #665
- State changes are now reverted with the journal #689
- Compatibility of
evmone-statetest
with [goevmlab] has been improved #658 #757 - Minimal tested/supported compilers versions: #675
- GCC 11
- Clang 13
- XCode 14.3.1 (bumped from 13.4)
- Visual Studio 2022
- CMake 3.16...3.27
- EVMC has been upgraded to version 11.0.1. #754 #738 #707 #669
- intx has been upgraded to version 0.10.1. #674
- [Ethereum Execution Tests] has been upgraded to version [13][tests 13] and [Execution Spec Tests] version [1.0.6][Execution Spec Tests 1.0.6] has been added. #737
Fixed
- EOF: Fix
CALLF
runtime stack overflow check #677 - EOF: Fix missing
CALLF
stack overflow validation #619 - Fixed processing of withdrawals with 0 amount (testing infrastructure) #630
- Fixed handling of short nodes in Merkle Patricia Trie (testing infrastructure) #686
...
evmone 0.10.0
The highlights of this release are support for Shanghai execution specification upgrade and implementation of EOF "v1.0". There are also big enhancements to the EVM testing tools and infrastructure. In particular, we added the t8n command-line utility.
As it is tradition, the EVM performance has been improved as well. Comparing with the previous release using the "main" benchmark suite, the Baseline interpreter is now:
- 10–45% (mean 25%) faster for GCC builds,
- 0–19% (mean 11%) faster for Clang builds.
Added
- Shanghai support:
- EVM Object Format "EOF v1.0":
- The implementation of the revisions of EIP-3540, EIP-3670, EIP-4200, EIP-4750 and EIP-5450 originally proposed for Shanghai. #563 #572 #594 #508
- EOF is currently enabled in the Cancun revision but likely to be moved to Prague in the future. #561
- Added
evmone-eofparse
andevmone-eofparsefuzz
tools for testing EOF validation. #568
- Implemented EIP-663: Unlimited SWAP and DUP instructions (enabled in EOF). #529
- Added implementation of
evmc::Host
, state transition and block finalization for testing purposes. #484 #519 #575 #608 #609 - Added t8n tool
evmone-t8n
— a command line utility for transaction execution and state transition testing. It allows executing and generating tests with cooperation of retesteth or execution-spec-tests. #552 #555 #558 #569 #583 #590 #591 #604 #606 #607 #612 - Added partial support for EVM Precompiles — gas cost computation and execution via JSON stub file. #524
- Declarative state transition unit test suite. #589
- CMake option
EVMONE_X86_64_ARCH_LEVEL
to set the x86-64 microarchitecture level. On Linux and Windows this is set to x86-64-v2 by default. #548
Changed
- C++20 is now required to build evmone. #502
- Minimal tested/supported compilers versions: #535
- GCC 11
- Clang 13
- XCode 13.4
- Visual Studio 2022
- CMake 3.16
- EVMC has been upgraded to version 10.1.0. #623
- intx has been upgraded to version 0.10.0. #622
- ethash has been upgraded to version 1.0.0. #540
- Ethereum Execution Tests has been upgraded to version 12.2. #625
- Baseline interpreter optimizations:
- Changes to EVM tracing:
- Improvements to the JSON State Test execution tool
evmone-statetest
: - Benchmarks (invocable by
evmone-bench
) have been migrated to external evm-benchmarks which use JSON State Test format. #513 #530 - Removed dependency on
evmc::instructions
. #533 #534 #537
Fixed
New Contributors
evmone 0.9.1
Fixed
- Resetting gas refund counter when execution state is reused. #504
evmone 0.9.0
In this release we have been focused on improving performance of the Baseline interpreter. The end result is that the Baseline is 26% faster than in previous version 0.8.0 and 18% faster than the current Advanced interpreter while having over 8x smaller code analysis cost. The Baseline is now the default interpreter because it is simpler and has become better than the Advanced.
The Advanced also has got 4% faster than in the previous version.
All numbers are from running the "main" benchmark suite on 4.0 GHz Intel Haswell CPU, using the Clang 15 compiler.
Moreover, evmone now calculates gas refund and reports it back using EVMC 10 API.
Finally, the options O=2
and O=0
have been replaced by advanced
. See below for details.
Added
- Calculation of EVM gas refunds. #493
PUSH0
instruction implementation (EIP-3855), enabled in Shanghai. #448 #432- Experimental EOF validation and execution (EIP-3540), enabled in Shanghai. #334 #366 #471
- In progress State Transition execution tool for testing purposes. So far we've merged:
Changed
- EVMC options
O=0
(use Baseline) andO=2
(use Advanced) have been replaced with single optionadvanced
to use the non-default Advanced interpreter. #500 - Baseline has replaced Advanced as the default interpreter. The later can still be selected with the
advanced
option. Reasons are explained in the introduction. #500 - A lot of changes related to the optimization of the Baseline interpreter, including refactoring and optimization of instructions' implementations.
- The Baseline interpreter now uses "computed goto" dispatch if supported by C++ compiler. The "switch" dispatch can be forced with the
cgoto=no
option. #495 - Improvements to basic block metadata placement in the Advanced interpreter. #457 #474
- EVMC has been upgraded to version 10.0.0. #499
- intx has been upgrade to version 0.8.0. #446
Removed
evmone-fuzzer
has removed aleth-interpreter as it is not maintained and lacks the latest EVM features. #453
evmone 0.8.2
evmone 0.8.1
Fixed
- baseline: Fix incorrect exit after invalid jump. #370
evmone 0.8.0
Added
- Full support for London EVM revision:
- Instruction tracing (EIP-3155) can be enabled via
trace
option in Baseline. #325 - Summary of number of executed opcodes is reported if
histogram
option is enabled in Baseline. #323 - The
evmone-bench
now reports time of execution without code analysis under "execute" label. The EVMC-like analysis + execution invocation is reported as "total". #343 - The
evmone-bench
has started utilizingevmc::MockedHost
which allows using state-access (e.g.SLOAD
/SSTORE
) instructions in benchmarks. #319
Changed
- Improvements to semi-public
evmone::baseline
API. #314 - The intx has been upgraded to version 0.6.0 which increases performance of
ADDMOD
instruction. #345 - The ethash has been upgraded to version 0.7.0 which provides faster
KECCAK256
implementation. #332 - Optimizations in Baseline interpreter. #315 #341 #344
- The Ethereum Consensus Tests upgraded to version 9.0.2. #349
evmone 0.7.0
Added
Changed
- EVMC has been upgraded to version 8.0.0. This ABI breaking change has been required to support Berlin revision. #309
- Optimizations to basic
JUMPDEST
analysis used by Baseline interpreter. #306 #308 - The Baseline interpreter API has been modified to allow caching of the
JUMPDEST
analysis. #305 - The consensus testing is now driven by Silkworm as a replacement of the unmaintained Aleth. The Ethereum Consensus Tests 8.0.4 are currently being used.