mirror of https://github.com/status-im/evmc.git
18 KiB
18 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.2.0 — unreleased
Added
- Added Java bindings. #455
- The C++ EVMC basic types
address
andbytes32
have all the comparison operators supported. #474 - 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.
Fixed
- The implementation of C++
operator<
forevmc::address
andevmc::bytes32
has been fixed. #498
7.1.0 — 2019-11-29
Added
- Added
MockedHost
C++ class (in form of header-onlyevmc::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 withconst
. #461 - Updated dependencies of the Rust bindings to latest stable versions. #462
7.0.0 „Istanbul Ready” — 2019-11-11
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 toevmc_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 - In C++ API, the
VM::has_capability()
method has been added. #465
Changed
- The
evmc_instance
renamed toevmc_vm
. #430 - The
evmc_context
renamed toevmc_host_context
. #426 - The
evmc_host_interface
is now separated fromevmc_host_context
. This simplifies language bindings which implement theevmc_host_interface
. #427 - The
evmc::vm
renamed toevmc::VM
in C++ API. #252 - Previously deprecated
helpers.hpp
header file has been removed. #410 - Previously deprecated
EVMC_CONSTANTINOPLE2
andEVMC_LATEST_REVISION
revisions have been removed. #411 - Previously deprecated tracing API has been removed. #429
- In
evmc::instructions
library the undefined instructions have0
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 nowbool
instead ofint
. #442 - In the Rust bindings make
ExecutionContext
optional withinexecute
. #350 - A set of small improvements to C++ API. #445 #449 #451
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 newevmc::is_zero()
in API compatible way. #406
Fixed
- In C++ API the
get_balance()
method now returns expectedevmc::uint256be
instead ofevmc_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 newevmc_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
andbytes32
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
andbytes32
have user defined literals. #359auto 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 hassuccess
,failure
andrevert
helpers. #297 #368 - Introduction of
evmc-declare
Rust crate with a procedural macro for easy VM declaration. #262 #316 - Introduction of
ExecutionMessage
wrapper in theevmc-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 toevmc::result::release_raw()
. #293 - In
evmc_load_and_create()
theerror_code
is optional (can beNULL
). #311
Deprecated
- The usage of
evmc/helpers.hpp
has been deprecated. Useevmc/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
toevmc_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 withEVMC_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 withEVMC_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
- EVMC Host implementation example. #116
- Support for Constantinople SSTORE net gas metering. #127
- Support for Constantinople CREATE2 salt in Go bindings. #133
- A VM can now report its capabilities (i.e. EVM and/or ewasm). #144
- Introduction of the
evmc_bytes32
type. #152 - EVMC Host implementation guide. #159
- EVMC VM implementation guide. #160
Changed
- EVMC loader symbol searching has been generalized. #119
- The
evmc_context_fn_table
renamed toevmc_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 ofint
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
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
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