EVM-RS v0.11 — A SputnikVM Release
The release of the new version of Sputnik VM, renamed EVM-RS, has been highly anticipated in the Ethereum Classic community. We’re transitioning SputnikVM naming to EVM-RS because it is a network agnostic EVM implementation built in Rust, and EVM-RS reflects that purpose.
SputnikVM/EVM-RS is an outstanding library/tool in terms of agility and its ability to be integrated into existing software. Unlike most of Ethereum Virtual Machines, SputnikVM is not a part of any particular ecosystem, it does not depend on a specific storage option, code base or network. — Mike Lubinets, ETC Labs Core Developer
EVM-RS is a standalone implementation of the Ethereum Virtual Machine written in Rust. Being a standalone EVM empowers developers to use the EVM outside of the main network with the fast performance of Rust. It can be integrated into any application and may be interfaced either as a Rust, C or Go library.
The new update sees the inclusion of several opcodes and fixes that bring EVM-RS toward ETC-ETH compatibility. As a standalone application, developers often will use this over an embedded client for the ease and flexibility it offers, and EVM-RS is suitable for multi-chain clients with the addition of the DynamicPatch API. This new update from Mike Lubinets comes after a long delay; the last update being Version 0.10.1, 22 Feb 2018.
Features
- Standalone — can be launched as an independent process or integrated into other apps
- Universal — supports different Ethereum chains, such as ETC, ETH or private ones
- Stateless — only an execution environment connected to independent State storage
- Fast — main focus is on performance
- IoT compatible — designed to support hardware used in embedded devices
- Written in Rust, can be used as a binary, cargo crate or shared library
It is standalone, stateless and easily configurable feature-wise, which grants its users the ability to integrate SputnikVM into any existing ethereum-based blockchain client, either as a Rust, C or Go library. — Mike Lubinets, ETC Labs Core Developer
Network support
EVM-RS v0.11 passes all Ethereum test suits.
The addition of CREATE2 is a major event — allowing developers to create smart contract addresses without having to deploy any contracts. This creates a new universe of options for dapp developers, as it enables user flows that don’t require keys.
Changes:
API
EVM-RS API is now more agile then ever: the new DynamicPatch API enables the patch-based configuration to be performed at runtime, as opposed to static patches that were based on using the static generic types. This change is particularly useful for multi-chain clients like multi-geth that cooperates with EVM-RS over an FFI boundary. Now it may configure EVM-RS feature-wise in runtime, and not rely on a pre-defined set of network and fork specific constructors. All that with keeping overhead as low as possible and completely zero-copy!
Changes:
- New evm-network with a set of precompiled contracts and re-exports of
Patch
andDynamicPatch
APIs. - Breaking changes in the
Patch
trait and related code
Documentation
Other changes
rust-secp256k1
feature is enabled by default- Minumum Rust version updated to 1.33.0.
- Rust 2018 edition is enabled by default.
- Code formatting with rustfmt and CI rules to enforce correct formatting.
- Continuous Integration with Jenkins CI.
- General dependencies upgrade.
- Transition back to
ethereumproject
under the nameevm-rs
. - Change of crate names to
evm
andevm-*
for related projects.
Related projects
evm-ffi
received support of theDynamicPatch
API.- Ethereum Classic specific APIs are
deprecated
inevm-ffi
and are going to be removed in the future releases.