bnb-chain / revm

MIT License
12 stars 9 forks source link

revm

CI License Chat

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.

Project

Structure:

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:

Building from source

git clone https://github.com/bluealloy/revm.git
cd revm
cargo build --release

Note: clang is required for building revm with c-kzg or secp256k1 feature flags as they depend on C libraries. If you don't have it installed, you can install it with apt install clang.

Running eth tests

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.

Running benchmarks

Benches can be found in crates/revm/benches.

Currently, available benches include the following.

To run the snailtracer bench, execute the cargo bench subcommand below.

cargo bench --package revm --profile release -- snailtracer

Using flamegraph, you can create a visualization breaking down the runtime of various sections of the bench execution - a flame graph. Executing the cargo flamegraph subcommand requires installing flamegraph by running cargo install flamegraph.

cargo flamegraph --root --freq 4000 --min-width 0.001 --package revm --bench bench -- snailtracer

This command will produce a flamegraph image output to flamegraph.svg. Flamegraph also requires sudo mode to run (hence the --root cli arg) and will prompt you for your password if not in sudo mode already.

Running examples

cargo run -p revm --features ethersdb --example fork_ref_transact

Generate block traces and write them to json files in a new traces/ directory. Each file corresponds to a transaction in the block and is named as such: <tx index>.json.

cargo run -p revm --features std,serde-json,ethersdb --example generate_block_traces

Used by:

(If you want to add project to the list, ping me or open the PR)

Documentation

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:

mdbook serve documentation

Contact

There is public telegram group: https://t.me/+Ig4WDWOzikA3MzA0

Or if you want to contact me directly, here is my email: dragan0rakita@gmail.com and telegram: https://t.me/draganrakita