SputnikVM: Rust Ethereum Virtual Machine Implementation

Build Status License

| Name | Description | Crates.io | Documentation | |--------------------|:---------------------------------------------:|:-------------------------------------------------------------------------------------------------------------------:|:----------------------------------------------------------------------------------------------------:| | evm | Core library for the Ethereum Virtual Machine | crates.io | Documentation | | evm-stateful | Merkle Trie stateful wrapper for SputnikVM | crates.io | Documentation |

Features

Supported Networks

Supported Networks

| Network | Crates.io | Documentation | |------------------|:---------------------------------------------------------------------------------------------------------------------------------------:|:------------------------------------------------------------------------------------------------------------------------:| | Any Network | crates.io | Documentation | | Ethereum Classic | crates.io | Documentation | | Ethereum | crates.io | Documentation | | Ellaism | crates.io | Documentation | | Ubiq | crates.io | Documentation | | Expanse | crates.io | Documentation | | Musicoin | crates.io | 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 | Crates.io | Documentation | |------------------------------|:----------------------------:|:---------------------------------------------------------------------------------------------------------------------------------------:|:------------------------------------------------------------------------------------------------------------------------:| | evm-precompiled-bn128 | bn128 precompiled contracts | crates.io | Documentation | | evm-precompiled-modexp | modexp precompiled contracts | crates.io | Documentation |

Related projects

Dependencies

Ensure you have at least rustc 1.33.0 (2aa4c46cf 2019-02-28). Rust 1.32.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:

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

Testing

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

Contribution

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

License

Apache 2.0