evmc/CHANGELOG.md

14 KiB

Changelog

Documentation of all notable changes to the EVMC project.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

7.0.0 - unreleased

Added

  • Support for Istanbul CHAINID opcode. chain_id added to evmc_tx_context struct. [#375]
  • The Berlin EVM revision has been added. [#407]

6.3.1 - 2019-08-19

Added

  • Added LoadAndConfigure method to the Go API. [#404]

Deprecated

  • Previously deprecated is_zero() helper has been removed, but replaced with new evmc::is_zero() in API compatible way. [#406]

Fixed

  • In C++ API the get_balance() method now returns expected evmc::uint256be instead of evmc_uint256be. [#403]
  • Cable upgraded to 0.4.4 to fix incompatibility with older versions. [#405]

6.3.0 - 2019-08-12

Added

  • Experimental support for Precompiles - EVMC modules containing implementations of Ethereum precompiled contracts. To learn more read the EVMC Precompiles feature description. [#267]
  • The vm::get_capabilities() method has been added in C++ API. [#301]
  • A CMake helper for running evmc-vmtester. [#303]
  • The loader module introduces standardized EVMC module configuration string which contains path to the module and additional options. E.g. ./modules/vm.so,engine=compiler,trace,verbosity=2. A VM can be loaded, created and configured atomically with new evmc_load_and_configure() function. [#313]
  • Full support for 32-bit architectures has been added. [#327]
  • The C/C++ API for creating execution results in VMs has been extended to handle common usage cases. [#333]
  • Support for moving evmc::vm objects in C++ API. [#341]
  • The basic types address and bytes32 have received their C++ wrappers to assure they are always initialized. They also have convenient overloaded operators for comparison and usage as keys in standard containers. [#357]
  • The C++ EVMC basic types address and bytes32 have user defined literals. [#359]
    auto a = 0xfB6916095ca1df60bB79Ce92cE3Ea74c37c5d359_address;
    auto b = 0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3_bytes32;
    
  • CMake option EVMC_INSTALL (ON by default) to disable installing EVMC targets. This may be useful when EVMC is included in other project as git submodule or subtree. [#360]
  • The evmc-vmtester tool received support for EVMC module configuration. E.g. evmc-vmtester ./my_vm,mode=interpreter. [#366]
  • In evmc-vm Rust crate, ExecutionResult now has success, failure and revert helpers. [#297, #368]
  • Introduction of evmc-declare Rust crate with a procedural macro for easy VM declaration. [#262, #316]
  • Introduction of ExecutionMessage wrapper in the evmc-vm Rust crate. [#324]
  • Added type aliases and traits on basic types in the evmc-vm Rust crate. [#342, #343]

Changed

  • A lot of documentation fixes, improvements and cleanups. [#271, #272, #276, #280, #345]
  • In C++ API evmc::result::raw() renamed to evmc::result::release_raw(). [#293]
  • In evmc_load_and_create() the error_code is optional (can be NULL). [#311]

Deprecated

  • The usage of evmc/helpers.hpp has been deprecated. Use evmc/evmc.hpp which provides the same features. [#358]
  • The tracing API has been deprecated as there have been some design flaws discovered. New API is expected to be introduced in future. [#376]

Fixed

  • The vmtester tool now builds with MSVC with /std:c++17. [#261, #263]
  • The evmc_release_result() helper has been fixed. [#266, #279]
  • The missing include guard in evmc.hpp has been fixed. [#300]
  • A loaded VM with incompatible ABI version is now properly destroyed. [#305, #306]

6.2.2 - 2019-05-16

Fixed

  • Compilation error of evmc::result::raw() in Visual Studio fixed. [#281]
  • The evmc::result's move assignment operator fixed. [#282]

6.2.1 - 2019-04-29

Fixed

  • Disallow implicit conversion from C++ evmc::result to evmc_result causing unintendent premature releasing of resources. [#256, #257]

6.2.0 - 2019-04-25

Added

  • CMake option EVMC_TEST_TOOLS to build evmc-vmtester without bothering with internal unit tests. [#216]
  • The full C++ EVMC API for both VM and Host implementations. [#217, #226]
  • Initial and rough bindings for Rust. It is possible to implement an EVMC VM in Rust utilising some helpers. [#201, #202, #233]
  • Handling of DLL loading errors greatly improved by new evmc_last_error_msg() function. [#230, #232]

Changed

  • The minimum supported GCC version is 6 (bumped from undocumented version 4.8). [#195]
  • Go bindings improved by introduction of the TxContext struct. [#197]
  • A lot improvements to the evmc-vmtester tool. [#221, #234, #238, #241, #242]
  • Cable upgraded to version 0.2.17. [#251]

Deprecated

  • The EVMC_CONSTANTINOPLE2 revision name is deprecated, replaced with EVMC_PETERSBURG. [#196]

6.1.1 - 2019-02-13

Added

  • Documentation of elements of evmc_revision. [#192]

Fixed

  • Fixed compilation with GCC 5 because of the "deprecated" attribute applied to an enum element. [#190]

6.1.0 - 2019-01-24

Added

  • The Istanbul EVM revision has been added. [#174]
  • The is_zero() C++ helper for basic data types has been added. [#182]
  • Reserved the post-Constantinople EVM revision number. [#186]
  • The C++ wrappers for VM and execution result objects have been added. [#187]

Deprecated

  • The EVMC_LATEST_REVISION name has been deprecated, replaced with EVMC_MAX_REVISION. [#184]

6.0.2 - 2019-01-16

Fixed

  • Add missing salt argument for CREATE2 in Host in Go bindings. [#179]

6.0.1 - 2018-11-10

Fixed

  • Integration of EVMC as a CMake subproject is easier because Hunter is not loaded unless building tests (EVMC_TESTING=ON) is requested. [#169]

6.0.0 - 2018-10-24

Added

Changed

  • EVMC loader symbol searching has been generalized. [#119]
  • The evmc_context_fn_table renamed to evmc_host_interface. [#125]
  • The evmc_message fields reordered. [#128]
  • The evmc_set_option() now returns more information about the failure cause. [#136]
  • In C the bool type is used instead of int for true/false flags. [#138, #140]
  • Simplification of signatures of Host methods. [#154]

5.2.0 - 2018-08-28

Added

  • Use also "evmc_create" function name for loading EVMC DLLs. [#81]

Changed

  • Documentation improvements, including documentation for the VM Tester. [#97, #107]

Fixed

  • The evmc.h header compatibility with C++98 fixed. [#92]
  • Compilation and build configuration fixes. [#93, #103]

5.1.0 - 2018-08-23

Added

  • Go language bindings for EVMC. [#41]
  • New error codes. [#56, #62]
  • More helper functions. [#67, #68, #70]

Changed

  • Documentation has been extended. [#58]
  • Optional Result Storage helper module has been separated. [#59]
  • Cable upgraded to 0.2.11. [#75]
  • The license changed from MIT to Apache 2.0. [#77]

Fixed

  • Go bindings: Properly handle unknown error codes. [#72]

5.0.0 - 2018-08-10

Added

  • List of status codes extended and reordered. [#23, #24]
  • VM Tracing API. [#32]
  • The support library with metrics tables for EVM1 instructions. [#33, #34]
  • Ability to create EVMC CMake package. [#35]
  • The loader support library for VM dynamic loading. [#40]
  • Constantinople: Support for CREATE2 instruction. [#45]
  • Constantinople: Support for EXTCODEHASH instruction. [#49]
  • Constantinople: Storage status is reported back from evmc_set_storage(). [#52]