Skip to content

evmone 0.2.0

Compare
Choose a tag to compare
@chfast chfast released this 24 Sep 14:40
· 1599 commits to master since this release
v0.2.0
99b5e71

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