Skip to content

Releases: ethereum/evmc

EVMC 7.3.0

20 May 15:50
v7.3.0
2f75e06
Compare
Choose a tag to compare

Added

  • Support for Go modules. #486

Changed

  • The minimum Go version supported bumped to 1.11 (Go modules are required). #486
  • Removed dependency on go-ethereum in Go bindings by introducing own Address and Hash types. #513

EVMC 7.2.0

14 May 10:49
v7.2.0
7f9a90b
Compare
Choose a tag to compare

Added

  • Added Java bindings. #455 #490 #503 #512
  • New evmc command-line tool has been added. At the moment it supports command run for executing bytecode in any EVMC-compatible VM implementation. Try evmc run --help for more information.
  • C++: EVMC basic types address and bytes32 have all the comparison operators supported. #474
  • C++: Convenient constructors from uint64_t added for basic types address and bytes32. #488
  • C++: Added VM::get_raw_pointer() method to directly access VM C API when needed. #492

Changed

  • CMake minimum version required has been bumped to 3.10. #495

Fixed

  • The implementation of C++ operator< for evmc::address and evmc::bytes32 has been fixed. #498

EVMC 7.1.0

29 Nov 12:23
v7.1.0
1de7833
Compare
Choose a tag to compare

Added

  • Added MockedHost C++ class (in form of header-only evmc::mocked_host library) which can be used to emulate Host behavior when testing VM implementations. #456
  • In the Rust bindings added more type aliases (MessageKind, MessageFlags, StatusCode, StorageStatus, Revision). #206
  • In CMake the evmc::evmc_cpp target has been added which represents the C++ EVMC API. #470

Changed

  • Require Rust 1.37.0 as a minimum.
  • In the Rust bindings mark read-only functions in ExecutionContext as non-mutating. #444
  • In the C++ HostInterface the logically read-only methods are marked with const. #461
  • Updated dependencies of the Rust bindings to latest stable versions. #462

EVMC 7.0.0 „Istanbul Ready”

13 Nov 10:33
v7.0.0
e770f78
Compare
Choose a tag to compare

This version of EVMC delivers compatibility with Istanbul EVM revision. The ABI breaking change has been required in this case so some other backward-incompatible changes are also included and deprecated APIs have been removed.

Added

  • Support for Istanbul EIP-1344 (CHAINID opcode). chain_id added to evmc_tx_context struct. #375
  • Support for Istanbul EIP-1884 (Repricing for trie-size-dependent opcodes). #372
  • The Berlin EVM revision number has been added. #407
  • In C++ API, an overload for VM::execute() has been added that omits the Host context and interface parameters. This is useful for Precompiles VMs that do not interact with the Host. #302

Changed

  • The evmc_instance renamed to evmc_vm. #430
  • The evmc_context renamed to evmc_host_context. #426
  • The evmc_host_interface is now separated from evmc_host_context. This simplifies language bindings which implement the evmc_host_interface. #427
  • The evmc::vm renamed to evmc::VM in C++ API. #252
  • Previously deprecated helpers.hpp header file has been removed. #410
  • Previously deprecated EVMC_CONSTANTINOPLE2 and EVMC_LATEST_REVISION revisions have been removed. #411
  • Previously deprecated tracing API has been removed. #429
  • In evmc::instructions library the undefined instructions have 0 gas cost instead of previous -1 value.
    #425
  • The EVM instruction tables have been redesigned to be more useful. #435
  • The EVMC loader trims all extensions (previously only the last one) from the EVMC module file name. #439
  • The EVMC loader no longer ties to guess the VM create function name by dropping prefix words from the name. #440
  • The helper function evmc_is_abi_compatible() returns now bool instead of int. #442
  • In the Rust bindings make ExecutionContext optional within execute. #350
  • A set of small improvements to C++ API. #445 #449 #451

EVMC 6.3.1

19 Aug 21:20
v6.3.1
e9d4648
Compare
Choose a tag to compare

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]

EVMC 6.3.0

12 Aug 10:34
v6.3.0
f48ae8b
Compare
Choose a tag to compare

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]

EVMC 6.2.2

22 May 15:37
v6.2.2
14d70e4
Compare
Choose a tag to compare
  • Fixed: [#281] Compilation error of evmc::result::raw() in Visual Studio fixed.
  • Fixed: [#282] The evmc::result's move assignment operator fixed.

EVMC 6.2.1

29 Apr 16:07
v6.2.1
bc30e5a
Compare
Choose a tag to compare
  • Fixed: [#256, #257]
    Disallow implicit conversion from C++ evmc::result to evmc_result
    causing unintendent premature releasing of resources.

EVMC 6.2.0

25 Apr 07:06
6987a50
Compare
Choose a tag to compare
  • Added: [#216]
    CMake option EVMC_TEST_TOOLS to build evmc-vmtester without bothering with internal unit tests.
  • Added: [#217, #226]
    The full C++ EVMC API for both VM and Host implementations.
  • Added: [#201, #202, #233]
    Initial and rough bindings for Rust. It is possible to implement an
    EVMC VM in Rust utilizing some helpers.
  • Added: [#230, #232]
    Handling of DLL loading errors greatly improved by evmc_last_error_msg() function.
  • Changed: [#195]
    The minimum supported GCC version is 6 (bumped from undocumented version 4.8).
  • Changed: [#197]
    Go bindings improved by introduction of the TxContext struct.
  • Changed: [#221, #234, #238, #241, #242]
    A lot of evmc-vmtester improvements.
  • Changed: [#251]
    Cable upgraded to version 0.2.17.
  • Deprecated: [#196]
    The EVMC_CONSTANTINOPLE2 revision name is deprecated, replaced with EVMC_PETERSBURG.

EVMC 6.1.1

05 Mar 13:45
a3e35b5
Compare
Choose a tag to compare
  • Added: [#192] Documentation of elements of evmc_revision.
  • Fixed: [#190] Compilation with GCC 5 because of the "deprecated" attribute applied to an enum element.