SputnikVM: A Blockchain Virtual Machine

SputnikVM is an implementation of an Ethereum Virtual Machine. It aims to be an
efficient, pluggable virtual machine for different Ethereum-based blockchains.
We encourage all Ethereum'esque blockchains to adopt SputnikVM, and to make use
of SputnikVM's RFC governance project which
governs the parameters of each blockchain's VM. This way we can draw from the
experience of the community and learn from other proposed RFCs.
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
- FFI, Protobuf and JSON interface
- written in Rust, can be used as a binary, cargo crate or shared library
Related projects
- 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
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:
bash
$ 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