Skip to content

Commit

Permalink
problem: not clear what is sputnikvm
Browse files Browse the repository at this point in the history
solution: more straightforward readme
  • Loading branch information
splix committed Nov 22, 2017
1 parent be13e3c commit 0eef40f
Showing 1 changed file with 44 additions and 43 deletions.
87 changes: 44 additions & 43 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,67 +4,61 @@
[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](./LICENSE)
[![Cargo](https://img.shields.io/crates/v/sputnikvm.svg)](https://crates.io/crates/sputnikvm)

* [Latest release documentation](https://docs.rs/sputnikvm)
* [Unstable documentation](https://that.world/~docs/sputnikvm/sputnikvm)

SputnikVM is an implementation of an Ethereum Virtual Machine. It aims to be an
efficient, pluggable virtual machine for different blockchains.
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](https://etcrfc.that.world/) 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.

## Reasoning

__RFC Advancement__: As the Ethereum Classic Request For Comment (RFC)
process advances, it'll become harder for the many and varied Ethereum Classic
clients to keep up with these changes.

> Having the Virtual Machine in library form allows us as a community to
cooperate and focus expertise on one VM. Clients that use SputnikVM will have a larger
community of users that'll be able to navigate the problem domain at a much
faster pace than an Ethereum Classic client that chooses to implement and
maintain their own virtual machine.

__Licensing__: Unless a business is specifically setup to earn money from
supporting code, it becomes hard for that business to use _GPLv3_ licensed
code, as the _GPLv3_ requires them to _GPLv3_ sublicense any source code that
links to a _GPLv3_ Ethereum Virtual Machine.

> SputnikVM is licensed under the Apache 2 License. Businesses may use the VM
without relicensing their code. Copyright is spread throughout the community,
meaning the code isn't easily susceptible to corporate hijacking and
relicensing thereafter. It's requested that if you use this code, you give
proper acknowledgement, and we also encourage you to send patches upstream.
Please don't develop in the dark.

__Accessiblity__: Most Ethereum Virtual Machines are tied up and buried in an
Ethereum Client implemenation, forcing you to use their Virtual Machine.

> We've deliberately designed SputnikVM to be portable and accessible in different
ways. This will encourage Ethereum Classic clients to use SputnikVM as their
Virtual Machine. The methods of access are:
>
> * Rust crate
> * Foreign Function Interface
> * Socket connection
> * Command Line Interface
## 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](https://github.com/ethereumproject/sputnikvm-dev) - SputnikVM instance for Smart Contract development,
provides testing environment and mock for JSON RPC API
* [SputnikVM in Browser](https://github.com/ethereumproject/sputnikvm-in-browser) - experimental version of SputnikVM
compiled into WebAssembly, therefore can be launched in a browser on Node.js
* [SputnikVM for embedded devices](https://github.com/ethereumproject/sputnikvm-on-rux) - 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.

## Build Instructions
## Documentation

* [Latest release documentation](https://docs.rs/sputnikvm)
* [Unstable documentation](https://that.world/~docs/sputnikvm/sputnikvm)

## Build from sources

SputnikVM is written Rust. If you are not familiar with Rust please
see the
[getting started guide](https://doc.rust-lang.org/book/getting-started.html).
[getting started guide](https://doc.rust-lang.org/book/getting-started.html).

* [Building and Testing](https://github.com/ethereumproject/sputnikvm/wiki/Building-and-Testing)
### Build

## Testing
To start working with SputnikVM you'll
need to install [rustup](https://www.rustup.rs/), then you can do:

```bash
$ git clone [email protected]: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:
Expand All @@ -79,3 +73,10 @@ aligns with other Ethereum Virtual Machine implementations:
system. See
[wiki](https://github.com/ethereumproject/sputnikvm/wiki/Building-and-Testing)
for how to reproduce the regression tests.

To learn more about building SputnikVM from source please read wiki page
[Building and Testing](https://github.com/ethereumproject/sputnikvm/wiki/Building-and-Testing)

## License

Apache 2.0

0 comments on commit 0eef40f

Please sign in to comment.