Releases: ipsilon/evmone
evmone 0.18.0 "No EOF"
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"
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
p256verifyprecompile. #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:
- Cryptography optimizations:
- Code quality and coverage improvements:
- Refactor MPT implementation for more precise code coverage. #1341
- Filter relevant functionality in
call_impltemplate. #1348 - Remove deprecated methods in
TestState. #1352 - Remove dead code:
ethash_keccak256_32, secp256k1 affine point multiplication, and RLPencode(array). #1345 #1346 #1342 - Degrade always-true condition to assert in the
Hostcode. #1344 - Remove potentially dead code in
ExecutionState. #1338 - Move
BlobSchedulefrom state library to test utilities. #1349
- Build and dependencies:
- External test suites:
Fixed
- Fix handling of the input point-at-infinity in secp256r1 signature verification. #1328
evmone 0.16.0
Added
- Partial [Osaka] support:
- Add
CLZopcode (EIP-7939). #1264 - Implement blob count limit per transaction (EIP-7594). #1279
- Modify blob base fee calculation (EIP-7918). #1281 #1322
- Enforce max transaction gas limit (EIP-7825). #1285
- Add the
modexpprecompile changes from EIP-7823 and EIP-7883. #1242 #1268 #1294 - Add
p256verify(EIP-7951) precompile ID/address (no implementation yet). #1309
- Add
Changed
- EVM Object Format (EOF):
- 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
yin 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:
evmone 0.15.0
Changed
- EOF:
The is the final version compatible with EOF devnet-0. - EVMMAX:
- Precompiles:
- 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
evmone 0.14.0 "Pectra"
Added
- Support for all remaining Prague EIPs:
- EIP-6110: Supply validator deposits on chain. #1079
- EIP-7002 and EIP-7251: Withdrawal and consolidation requests. #1084
- EIP-7623: Increase calldata cost. #1095 #1108
- EIP-7685: General purpose execution layer requests. #1083
- EIP-7691: Blob throughput increase. #1118
- EIP-7702: Set EOA account code. #961
- EVMMAX-based BN254 pairing check precompile. #852
- New API for transaction execution:
StateView&StateDiff. #802 - Introduce
BlockHashesinterface. #1059 - Add option
-kto filter tests by name inevmone-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:
- 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
CREATEaddress 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
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 eip7692@v1.1.0. #1025
- Added EEST tests for Pectra pectra-devnet-3@v1.5.0 #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
TXCREATEhas 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-benchtool to benchmark precompiles. #765 - Added native implementations of the precompiled hash functions:
- Added
validate_eofEVMC 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
--versionoption to testing tools. #902 - Introduce
TestStateandTestAccountto testing infrastructure. #811 - Added support for validating "initcode" containers in
eofparseandeoftest. #934 #943
Changed
-
EVM Object Format (EOF)
Completed implementation of the EIP-7692: EVM Object Format (EOFv1) Meta.
- Added
EOFCREATEandRETURNCONTRACTinstructions. #553 - Added
TXCREATEinstruction, later moved to the future EOF version (Osaka). #702 #889 - Make
EXT*CALLinstructions Address Space Expansion ready. #915 - Added EOF validation of sub-container kinds. #876
- Limit validated container size to
MAX_INITCODE_SIZE. #930 - Added
RETURNDATALOADinstruction. #786 - Implementation of "less restricted" stack validation. #676
- Added implementation of
EXCHANGEfrom EIP-663. #839 - Disallow unreachable code sections in EOF containers. #721 #866
- Restrict
DUPNandSWAPNto 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
EFprefix 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
ExportableFixturefor JSON tests exporting. #821 - Recognize all official fork/revision names. #830
- Export State Tests with invalid transactions. #858
- Allow
"to": nullin 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
constexprcapabilities. #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
EF00should not be validated as EOF unconditionally. #893 - Fix EOF header parsing bug (introduced by code refactoring). #957 #958
- Fix
eoftestto 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
--traceinevmone-t8n#616 - Support for compiling for
riscv32architecture #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
DELEGATECALLfrom EOF to legacy contracts during execution #588 - The data section kind has been changed to
0x04#632 - The
RJUMPVimmediate argument meaning has been changed to "max index" #640 - Implementation of the
JUMPFinstruction 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-statetestwith [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
CALLFruntime stack overflow check #677 - EOF: Fix missing
CALLFstack 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-eofparseandevmone-eofparsefuzztools 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_LEVELto 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