evm 0.9.4

Ethereum Virtual Machine implementation in Rust. Nightly version of SputnikVM.

evm-rs: Rust Ethereum Virtual Machine Implementation

evm-rs is an Ethereum Virtual Machine implementation, and is the nightly version of SputnikVM. It is also one of the implementation that supports the ethoxy specs initiative.

Features

  • Partially verified (WIP) - use various verification techniques to partially verify the correctness of functions.
  • Nightly - take advantage of Rust nightly features, such as compiler plugins
  • 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

Related projects

  • ethereum-rs - common traits and structs for Ethereum. Nightly development branch of etcommon-rs and support branch for evm-rs.
  • etclient - bare-minimal Ethereum client written in Rust.

Dependencies

Ensure you have at least rustc 1.16.0 (30cf806ef 2017-03-10). Rust 1.15.0 and before is not supported.

Documentation

Build from sources

SputnikVM is written Rust. If you are not familiar with Rust please see the getting started guide.

Build

To start working with SputnikVM you'll need to install rustup, then you can do:

$ git clone git@github.com:ethereumproject/sputnikvm.git
$ cd sputnikvm
$ cargo build --release --all

Testing

We currently use two ways to test SputnikVM and ensure its execution aligns with other Ethereum Virtual Machine implementations:

  • jsontests: This uses part of the Ethereum tests. Those tests currently does not have good coverage for system operation opcodes. Besides, some tests are incorrect so they are disabled.
  • regtests: A complete regression tests is done on the Ethereum Classic mainnet from genesis block to block 4 million. Some of the previously failed tests are also integrated into Rust's test system. See wiki for how to reproduce the regression tests.

To learn more about building SputnikVM from source please read wiki page Building and Testing

License

Apache 2.0