Skip to content
v0.8.2
d2de6b1
Compare
Choose a tag to compare
v0.8.1
cc3efcc
Compare
Choose a tag to compare

Fixed

  • baseline: Fix incorrect exit after invalid jump. #370
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
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.
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.
v0.5.0
330c545
Compare
Choose a tag to compare

Changed

  • intx upgraded to version 0.5.0, small performance increase for ADDMOD and MULMOD instructions expected. #239
  • EVMC upgraded to version 7.4.0. #243
  • C++ exception handling and Run-Time Type Information (RTTI) have been disabled for the evmone library (in GCC and Clang compilers). #244
v0.4.1
66d8b1e
Compare
Choose a tag to compare

Fixed

  • The release binaries for Windows are now built without AVX instruction set enabled. That was never intended and is consistent with binaries for other operating systems. #230
v0.4.0
f2fcd90
Compare
Choose a tag to compare

Fixed

  • In previous versions evmone incorrectly assumed that code size cannot exceed 24576 bytes (0x6000) — the limit introduced for the size of newly deployed contracts by EIP-170 in Spurious Dragon. The limit do not apply to contract creating init code (i.e. in context of "create" transaction or CREATE instruction). Therefore, the pre-processing phase in evmone has been reworked to raise the technical limits or eliminated them entirely. From now on, only blocks of instruction with total base gas cost exceeding 4294967295 (2³² - 1) combined with execution gas limit also above this value can cause issues. #217 #218 #219 #221

Changed

v0.3.0
20bd8f2
Compare
Choose a tag to compare

This release of evmone adds changes for the Istanbul EVM revision.

Added

  • Istanbul EVM revision support with new costs for some instructions (EIP-1884). #191
  • Implementation of CHAINID instruction from the Istanbul EVM revision (EIP-1344). #190
  • Implementation of SELFBALANCE instruction from the Istanbul EVM revision (EIP-1884). #24
  • Implementation of new cost model for SSTORE from the Istanbul EVM revision (EIP-2200). #142

Changed

v0.2.0
99b5e71
Compare
Choose a tag to compare

This release of evmone is binary compatible with 0.1 and delivers big performance improvements
– both code preprocessing and execution is ~66% faster (needs ~40% less time).

Added

  • evm-test – the testing tool for EVMC-compatible EVM implementations. #85
  • evmone-fuzzer – the testing tool that fuzzes evmone execution against aleth-interpreter execution. Any other EVMC-compatible EVM implementation can be added easily. #162 #184
  • evmone-standalone – single static library that bundles evmone with all its static library dependencies (available on Linux, but support can be extended to other platforms). #95
  • The evmone-bench tool has learned how to benchmark external EVMC-compatible EVMs. #111
  • The evmone-bench tool sorts test cases by file names and allows organizing them in subfolders. #150
  • The docker image ethereum/evmone with evmone and modified geth is available on Docker Hub. #127

Changed

Optimizations

  • Instead of checking basic block preconditions (base gas cost, stack requirements) in the dispatch loop, this is now done in the special "BEGINBLOCK" instruction — execution time reduction -2–8%. #74
  • New EVM stack implementation has replaced naïve usage of std::vector<intx::uint256>-8–16%. #79
  • Improvements to interpreter's dispatch loop — -4–9%. #107
  • Optimization of the JUMPDEST map — up to -34%. #80
  • Optimizations to code preprocessing / analysis. #121 #125 #153 #168 #178
  • Push instructions with values up to 8 bytes (PUSH1–PUSH8) are now handled much more efficiently — up to -9%. #122
  • Pointer to next instruction is now obtained in instruction implementations (instead of the dispatch loop) and is kept in CPU registers only — -3–7%. #133
  • The run-time information about basic blocks has been compressed. #139 #144

Other changes

  • The DUP, SWAP, LOG and CALL instructions are now implemented by individual functions (template instances) instead of a parametrized function handling each family of instructions. #126 #159
  • EVMC upgraded to version 6.3.1. #129 #77 #96
  • intx upgraded to version 0.4.0. #131
  • The ability to provide custom opcode table for code preprocessing has been dropped. #167

Fixed

  • The gas calculation for blocks containing an undefined instruction has been fixed. This bug could not cause consensus issue because a block with an undefined instruction terminates with an exception despite incorrect gas checking. However, execution might have ended with a confusing error code. #93
  • Fix for LOG being emitted after out-of-gas exception. #120