Skip to content
Ethereum Virtual Machine implementation in Rust. Fork of the SputnikVM.
Branch: master
Clone or download
Type Name Latest commit message Commit time
Failed to load latest commit information.
ci fix(ci/windows): skip rustup install if Rust if already installed Mar 29, 2019
cli Version 0.11.0 Apr 29, 2019
gethrpc Version 0.11.0 Apr 29, 2019
jsontests fix(core): CALLCODE targetting precompiled contract Apr 5, 2019
network Version 0.11.0 Apr 29, 2019
precompiled Version 0.11.0 Apr 29, 2019
regtests Version 0.11.0 Apr 29, 2019
src Version 0.11.0 Apr 29, 2019
stateful Version 0.11.0 Apr 29, 2019
.arcconfig TransactionVM::new_from_unknown which deals with potentially invalid … Dec 18, 2017
.editorconfig Problem: .editorconfig max line length of 80chars is too short for rust Apr 7, 2017
.gitignore Ignore Cargo.lock Aug 10, 2017
.gitmodules feat(api): Dynamic patches API (#23) Mar 29, 2019
.travis.yml feat(ci): check formatting in travis CI for stable builds Mar 24, 2019
AUTHORS Add Elaine Ou to AUTHORS list Jul 15, 2017
Cargo.toml Version 0.11.0 Apr 29, 2019 feat(docs): update md files Apr 25, 2019 feat(docs): update md files Apr 25, 2019
Jenkinsfile fix(ci/lint): fail lint stage if errors were found by clippy Mar 29, 2019
LICENSE Initial commit Mar 31, 2017 feat(doc): remove outdated lines from the readme Apr 30, 2019
rustfmt.toml feat(code): custom formatting configuration with rustfmt.toml Mar 24, 2019
shell.nix Add valgrind in nix-shell files Nov 29, 2017

SputnikVM: Rust Ethereum Virtual Machine Implementation

Build Status License

Name Description Documentation
evm Core library for the Ethereum Virtual Machine Documentation
evm-stateful Merkle Trie stateful wrapper for SputnikVM Documentation


  • 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

Supported Networks

Supported Networks

Network Documentation
Any Network Documentation
Ethereum Classic Documentation
Ethereum Documentation
Ellaism Documentation
Ubiq Documentation
Expanse Documentation
Musicoin Documentation

Precompiled Contracts

The core library has the initial four precompiled contracts embedded. To use the bn128 and modexp precompiled contracts introduced by the Byzantium hard fork, pull the following crates.

Name Description Documentation
evm-precompiled-bn128 bn128 precompiled contracts Documentation
evm-precompiled-modexp modexp precompiled contracts Documentation

Related projects

  • ethereum-rs - common traits and structs for Ethereum.
  • etclient - bare-minimal Ethereum client written in Rust.
  • SputnikVM FFI - SputnikVM C and Go FFI bindings
  • SputnikVM Dev - SputnikVM instance for Smart Contract development, provides testing environment and mock for JSON RPC API
  • SputnikVM in Browser - experimental version of SputnikVM compiled into WebAssembly, therefore can be launched in a browser on Node.js
  • SputnikVM for embedded devices - experimental project to run on full functional EVM on embedded devices


Ensure you have at least rustc 1.33.0 (2aa4c46cf 2019-02-28). Rust 1.32.0 and before is not supported.


Build from sources

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


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

$ git clone
$ cd evm-rs
$ cargo build --release --all


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 do 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.

To run all tests, execute the following command in the cloned repository:

$ cargo test --all


Formatting policies are described in, and the recommended automated formatting techniques may be found at


Apache 2.0

You can’t perform that action at this time.