Skip to content

Releases: ethereum/evmone

evmone 0.12.0

08 Aug 12:26
v0.12.0
bf6c91d
Compare
Choose a tag to compare

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 in evmc 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 and TestAccount to testing infrastructure. #811
  • Added support for validating "initcode" containers in eofparse and eoftest. #934 #943

Changed

  • EVM Object Format (EOF)

    Completed implementation of the EIP-7692: EVM Object Format (EOFv1) Meta.

    • Added EOFCREATE and RETURNCONTRACT 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 and SWAPN 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
  • 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"

21 Dec 22:16
v0.11.0
5d86573
Compare
Choose a tag to compare

This release is focused on Cancun and EOF.

Added

  • Cancun Network Upgrade fully supported
    • EIP-1153: Transient storage opcodes
      • transient storage & TLOAD and TSTORE instructions #669
      • clearing of transient storage between transactions #715
    • EIP-4788: Beacon block root in the EVM
      • don't assume the transaction sender exists #731
      • system call to the Beacon Roots contract #709
    • EIP-4844: Shard Blob Transactions
      • BLOBHASH instruction #668
      • blob transactions #713
      • stub of the point_evaluation precompile #730
    • EIP-5656: MCOPY - Memory copying instruction #629 #648
    • EIP-6780: SELFDESTRUCT only in same transaction #735
    • EIP-7516: BLOBBASEFEE opcode #708
  • EVM Modular Arithmetic Extensions ([EVMMAX])
    • Added basic EVMMAX support in form of C++ API. #673
    • Implementation of secp256k1 ECDSA recovery (ecrecovery precompile) using EVMMAX #688
    • Implementation of ecadd and ecmul BN254 precompiles using EVMMAX #716
  • 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 in evmone-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

...

Read more

evmone 0.10.0

08 May 21:49
v0.10.0
409f71d
Compare
Choose a tag to compare

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

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:
    • Better stack overflow/underflow checks. #518
    • SWAP instructions optimization for Clang. #527
    • Pass gas counter to memory grow/check helpers by value. #598
    • Pass gas counter to instructions by value. #600
  • Changes to EVM tracing:
    • Instruction trace prints "gas" and "gasUsed" as hex numbers to match geth. #592
    • C++ tracing API has separated the gas parameter. #599
  • Improvements to the JSON State Test execution tool evmone-statetest:
    • Ability to load tests from multiple dirs/files. #512
    • Validate deployed EOF code before state test execution. #593 #601
    • Added --trace command-line flag to enable EVM execution tracing. #543
    • Other improvements. #556 #603
  • 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

  • Fixed calling Tracer.notify_execution_start. #531
  • Fixed instruction tracing of EOF code. #536

New Contributors

evmone 0.9.1

07 Sep 10:57
v0.9.1
aa921c1
Compare
Choose a tag to compare

Fixed

  • Resetting gas refund counter when execution state is reused. #504

evmone 0.9.0

30 Aug 15:31
v0.9.0
f4c04ee
Compare
Choose a tag to compare

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:
    • RLP encoding, #463
    • Merkle Patricia Trie root hash computing, #477 #478
    • JSON State Transition Test loader. #479

Changed

  • EVMC options O=0 (use Baseline) and O=2 (use Advanced) have been replaced with single option advanced 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

26 Aug 09:47
v0.8.2
d2de6b1
Compare
Choose a tag to compare

Fixed

  • Fixed building of evmone-standalone static library when the llvm-ar tool is being used. #373 #374

evmone 0.8.1

03 Aug 13:31
v0.8.1
cc3efcc
Compare
Choose a tag to compare

Fixed

  • baseline: Fix incorrect exit after invalid jump. #370

evmone 0.8.0

01 Jul 10:56
v0.8.0
9570ee0
Compare
Choose a tag to compare

Added

  • Full support for London EVM revision:
    • EVMC upgraded to version 9.0.0. #348
    • Implementation of the [EIP-3198] "BASEFEE opcode". #333
  • 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 utilizing evmc::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

27 Apr 20:07
v0.7.0
f9694d2
Compare
Choose a tag to compare

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.

evmone 0.6.0

07 Apr 11:10
v0.6.0
fb96d98
Compare
Choose a tag to compare

Added

  • New experimental Baseline interpreter has been added to the project. It provides relatively straight-forward EVM implementation and can be enabled with O=0 option. #261 #280
  • A set of EVM synthetic benchmarks stressing individual low-level EVM instructions. #278
  • Silkworm-driven integration and Ethereum consensus testing. #290

Changed

  • EVMC upgraded to version 7.5.0. #294
  • evmone-bench tool under-the-hood improvements. #286 #287 #288
  • A lot of instructions implementation refactoring to allow code sharing between Baseline and Advanced interpreters.