Skip to content

Releases: ipsilon/evmone

evmone 0.18.0 "No EOF"

31 Oct 21:33
v0.18.0
d4ade7f

Choose a tag to compare

Bye-bye, EOF.

Removed

  • The implementation of the EVM Object Format version 1 (EOFv1) has been completely removed. #1321
    • implementation of EOF validation and execution,
    • implementation of DUPN, SWAPN and EXCHANGE instructions,
    • "initcodes" transaction type,
    • additional testing tools: eofparse, eoftest and eofparsefuzz,
    • unit tests, integration tests, benchmarks and test helpers.

evmone 0.17.0 "Osaka"

29 Oct 14:26
v0.17.0
6888ddb

Choose a tag to compare

This release provides full Osaka compatibility by implementing 3 remaining EIPs.

Added

  • Implementation of the p256verify (EIP-7951) precompile for the secp256r1/P256 signature verification. #1321 #1328
  • Unit tests and benchmarks for the p256verify precompile. #1326 #1333
  • Support for EIP-7934—MAX_RLP_BLOCK_SIZE in testing infrastructure. #1329
  • Support for EIP-7892—Blob Parameter Only (BPO) forks in testing infrastructure. #1330

Changed

  • Testing infrastructure improvements:
    • State and blockchain test runners now discover tests by individual test cases. #1331
    • Block header validation fixes. #1244
    • Fix deposit log and system contract validations in t8n. #1339
  • Cryptography optimizations:
    • Optimize bit test of scalars in ECC multiplication. #1336
    • Add ECC doubling formula for curves with A coefficient of -3. #1321
    • Use g1_mul and g2_mul for single-input multiplication in BLS precompiles. #1340
  • Code quality and coverage improvements:
    • Refactor MPT implementation for more precise code coverage. #1341
    • Filter relevant functionality in call_impl template. #1348
    • Remove deprecated methods in TestState. #1352
    • Remove dead code: ethash_keccak256_32, secp256k1 affine point multiplication, and RLP encode(array). #1345 #1346 #1342
    • Degrade always-true condition to assert in the Host code. #1344
    • Remove potentially dead code in ExecutionState. #1338
    • Move BlobSchedule from state library to test utilities. #1349
  • Build and dependencies:
    • Upgrade minimum CMake version to 3.19. #1350
    • Disable -Werror by default. #1351
    • Upgrade minimum Xcode to 16.2.0. #1334
  • External test suites:
    • [Execution Spec Tests] upgraded to [v5.3.0][Execution Spec Tests 5.3.0]. #1334 #1327
    • Adjust coverage report for EEST tests. #1318

Fixed

  • Fix handling of the input point-at-infinity in secp256r1 signature verification. #1328

evmone 0.16.0

25 Sep 20:13
v0.16.0
ce313de

Choose a tag to compare

Added

Changed

  • EVM Object Format (EOF):
    • New address hashing scheme for EOFCREATE. #1140
    • TXCREATE and InitcodeTransaction type (EIP-7873). #1139 #1192
    • Align EOFCREATE args with EXT*CALL. #1147
    • Change container sections size to 4 bytes. #1171
    • Caching of TXCREATE validation results. #1193
    • Move EOF to EVMC_EXPERIMENTAL. #1243
  • Improvements to Elliptic Curve Cryptography code:
    • Add mixed-add formula. #1170
    • Better API for ECC. #1288 #1298 #1299
    • Improve bn254 point "on curve". #1300
    • Remove special case checks from point multiplication. #1301
    • Avoid conversion to/from Montgomery form of y in secp256k1. #1303
    • Reduce EC multiplication scalar by the order. #1305
    • Switch to Jacobian coordinates in ECC. #1312
  • Optimization to the Merkle Patricia Trie (MPT) implementation: "Extension node is a lie!" #703
  • Better EVM stack memory alignment and implementation:
    • Mark stack pointer as 32-byte aligned. #1233
    • Track stack "end" instead of "top". #895
    • Use alignas to specify EVM stack space alignment. #1304

evmone 0.15.0

08 Apr 08:00
v0.15.0
6c95236

Choose a tag to compare

Changed

  • EOF:
    The is the final version compatible with EOF devnet-0.
    • Rename RETURNCONTRACT to RETURNCODE #1153
    • Optimize allocations when validating the header #1160
  • EVMMAX:
    • evmmax: Add inversion method #1142
    • evmmax: Use inv() instead of generated addchains #1143
  • Precompiles:
    • Handle trivial inputs to the expmod precompile #1163
    • Use classic EC point add formula for BN precompiles #1165
    • Optimize EC point multiplication for BN precompiles #1166
    • Refactor the BN254 ecpairing precompile #1175
  • EIP-7702: Remove the check for empty in-state accounts #1141
  • Add prestate validation checks to the state test loader #1134
  • Upgrade the silkpre dependency #1173

Fixed

  • Fix incorrect output size in the BN254 ecpairing precompile #1174

evmone 0.14.1

11 Mar 14:13
v0.14.1
3186982

Choose a tag to compare

Fixed

Changed

evmone 0.14.0 "Pectra"

19 Feb 09:26
v0.14.0
41bb55f

Choose a tag to compare

Added

  • Support for all remaining Prague EIPs:
  • EVMMAX-based BN254 pairing check precompile. #852
  • New API for transaction execution: StateView & StateDiff. #802
  • Introduce BlockHashes interface. #1059
  • Add option -k to filter tests by name in evmone-statetest. #1111
  • Add support for EIP-4844 in blockchain tests. #1077
  • Add GDB pretty printers for common bytes and uint256 types. #1024

Changed

  • Improvements to EOF validation and execution:
    • Move EOF to Osaka. #1060
    • Optimized EOF validation using std::move. #1036
    • Return constant hash of EXTCODEHASH of EOF. #1035
    • Optimized EOF by reading types on demand. #1034
    • Move EOF type validation outside of header validation. #1052
    • Improve has_full_data() helper. #1097
  • Updates to BLS precompiles (EIP-2537). #1089
  • State and transaction execution improvements:
    • Split transaction and block related types. #1031
    • Avoid returning bytes_view in system contracts. #1048
    • Implement CREATE address scheme without RLP lib. #1055
    • Separate transaction validation from transition. #1069
    • Introduce TransactionProperties. #1098
    • Simplify code modification indicator in StateDiff. #1117
  • Requirements and dependencies updates:

evmone 0.13.0

23 Sep 09:05
v0.13.0
7961b60

Choose a tag to compare

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

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

08 Aug 12:26
v0.12.0
bf6c91d

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

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

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