EVM-RS v0.11 — A SputnikVM Release

Photo by Martin Reisch on Unsplash

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:

  • Byzantium opcodes implementation is tested and refined
  • The following opcodes are implemented and tested:
  • SHL, SHR, SAR (EIP-145)
  • CREATE2 (EIP-1014)
  • EXTCODEHASH (EIP-1052)
  • SSTORE opcode gas metering adjustments (EIP-1283)
  • Number of new and pre-0.11 interpreter bugs fixed

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 and DynamicPatch APIs.
  • Breaking changes in the Patch trait and related code

Documentation

Other changes

Related projects

  • evm-ffi received support of the DynamicPatch API.
  • Ethereum Classic specific APIs are deprecated in evm-ffi and are going to be removed in the future releases.

Dean Pappas | Building Grape on Solana | Ex Marlin, Ethereum Classic, Zel, Taucoin | Ex GM at Zeta Global | Hearthstone and MTG