Skip to content

Releases: ipsilon/evmone

evmone 0.21.0 "EVMC absorbed"

09 Apr 21:54
v0.21.0
35b7e1e

Choose a tag to compare

This release merges the required contents of the former EVMC project directly into evmone, replacing the git submodule. This allows evmone to evolve the EVM interface independently for future EVM revisions.

Added

  • evmone CLI tool replacing the evmc tool. Links evmone directly instead of dynamic loading via EVMC loader. Supports --trace and --histogram flags. #1502
  • New EVMONE_TOOLS CMake option (default: PROJECT_IS_TOP_LEVEL). #1502

Changed

  • EVMC merged into evmone: the EVMC git submodule has been replaced with vendored source code and its filtered git history. #1499
  • Minimum CMake version bumped to 3.22. #1501

Removed

  • EVMC_TOOLS and EVMC_INSTALL CMake options. #1499
  • Old evmc CLI tool and EVMC loader library (dynamic VM loading). #1504
  • External VM support in evmone-bench. #1503

evmone 0.20.0

07 Apr 10:39
v0.20.0
b95db0d

Choose a tag to compare

Added

  • Build option -DASSERTIONS=ON to force assertions in release builds. #1474

Changed

  • Modular exponentiation (modexp) continued optimizations: CRT-based flow unified, memory allocation consolidated, scratch space reduced, 256-bit Montgomery multiplication specialized, first multiplication iteration optimized. #1464 #1465 #1466 #1467 #1469 #1470 #1471 #1472 #1473 #1475

evmone 0.19.0 "dyn modexp"

04 Mar 20:41
v0.19.0
bbd269c

Choose a tag to compare

Added

  • Option EVMONE_PRECOMPILES_LIBSECP256K1=ON to use libsecp256k1 for ecrecover precompile. #1454

Changed

  • Modular exponentiation (modexp) rewrite: the precompile implementation has been substantially reworked to use variadic-length number representation and optimized algorithms. #1292 #1413 #1420 #1424 #1434 #1442 #1443 #1446 #1452 #1457 #1460 #1461 #1462
    • Almost Montgomery Multiplication (AMM) is now used instead of standard Montgomery multiplication. #1427 #1425 #1426 #1435 #1436
    • Newton–Raphson method is used for modular inversion. #1359 #1420 #1432
  • ECC optimizations:
    • BN254 ecmul optimized with the field endomorphism. #1389
    • ecrecover and p256verify optimized with Shamir trick multi-scalar multiplication. #1390
    • Field multiplications by constants optimized in ECC. #1393
    • secp256k1 refactored to use FieldElement instead of ModArith. #1402 #1415 #1416 #1417
  • Modexp precompile implementations ("evmone" and "gmp") are now split into separate source files. #1455
  • Upgraded [intx] to 0.15.0. #1371 #1430
  • Test utilities reorganized into a single evmone.testutils library. #1380 #1381 #1384 #1385 #1386

Removed

  • The optional "silkpre" precompile backend has been removed. #1456
  • Modexp stubs removed—the local implementation is now used for all inputs. #1453

Fixed

  • Missing EIP-7702 y_parity validation. #1450
  • BN254 input point validation. #1399
  • Missing Transaction::gas_limit initialization. #1382

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