Rust Ethereum Virtual Machine
Revm is an EVM written in Rust that is focused on speed and simplicity.
It has a fast and flexible implementation with a simple interface and embedded Host.
It passes all ethereum/tests
test suites.
Here is a list of guiding principles that Revm follows.
- EVM compatibility and stability - this goes without saying but it is nice to put it here. In the blockchain industry, stability is the most desired attribute of any system.
- Speed - is one of the most important things and most decisions are made to complement this.
- Simplicity - simplification of internals so that it can be easily understood and extended, and interface that can be easily used or integrated into other projects.
- interfacing - [no_std]
so that it can be used as wasm lib and integrate with JavaScript and cpp binding if needed.
Structure: * crates * revm -> main EVM library. * revm-primitives -> Primitive data types. * revm-interpreter -> Execution loop with instructions * revm-precompile -> EVM precompiles * bins: * revme: cli binary, used for running state test jsons
This project tends to use the newest rust version, so if you're encountering a build error try running rustup update
first.
There were some big efforts on optimization of revm: * Optimizing interpreter loop: https://github.com/bluealloy/revm/issues/7 * Introducing Bytecode format (and better bytecode analysis): https://github.com/bluealloy/revm/issues/121 * Unification of instruction signatures: https://github.com/bluealloy/revm/pull/283
go to cd bins/revme/
Download eth tests from (this will take some time): git clone https://github.com/ethereum/tests
run tests with command: cargo run --release -- statetest tests/GeneralStateTests/ tests/LegacyTests/Constantinople/GeneralStateTests
GeneralStateTests
contains all tests related to EVM.
TODO needs to be updated. Benches can now be found inside crates/revm/benches
shell
cargo run --package revm-test --release --bin snailtracer
shell
cargo flamegraph --root --freq 4000 --min-width 0.001 --package revm-test --bin snailtracer
shell
cargo run -p revm --features ethersdb --example fork_ref_transact
(If you want to add project to the list, ping me or open the PR)
The book can be found at github page here: https://bluealloy.github.io/revm/
The documentation (alas needs some love) can be found here: https://bluealloy.github.io/revm/docs/
To serve the mdbook documentation in a local environment, ensure you have mdbook installed (if not install it with cargo) and then run:
shell
mdbook serve documentation
There is public telegram group: https://t.me/+Ig4WDWOzikA3MzA0
Or if you want to hire me or contact me directly, here is my email: dragan0rakita@gmail.com and telegram: https://t.me/draganrakita