created_at2023-01-29 21:25:35.224001
updated_at2024-04-02 19:34:41.464012
descriptionrevm primitives



# revm [![CI](][gh-ci] [![License](][mit-license] [![Chat][tg-badge]][tg-url] [mit-license]: [gh-ci]: [tg-url]: [tg-badge]: **Rust Ethereum Virtual Machine** ![](./assets/revm-banner.png) 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. # Project 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: * Introducing Bytecode format (and better bytecode analysis): * Unification of instruction signatures: # Building from source ```shell git clone 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` 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`](./crates/revm/benches). Currently, available benches include the following. - *analysis* - *snailtracer* - *transfer* To run the `snailtracer` bench, execute the `cargo bench` subcommand below. ```shell cargo bench --package revm --profile release -- snailtracer ``` Using [flamegraph][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][flamegraph] by running `cargo install flamegraph`. ```shell 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. [flamegraph]: ## Running examples ```shell 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: `.json`. ```shell cargo run -p revm --features std,serde-json,ethersdb --example generate_block_traces ``` # Used by: * [Foundry]( is a blazing fast, portable and modular toolkit for Ethereum application development written in Rust. * [Helios]( is a fully trustless, efficient, and portable Ethereum light client written in Rust. * [Reth]( Modular, contributor-friendly and blazing-fast implementation of the Ethereum protocol * [Arbiter]( is a framework for stateful Ethereum smart-contract simulation * [Zeth]( is an open-source ZK block prover for Ethereum built on the RISC Zero zkVM. * [VERBS]( an open-source Ethereum agent-based modelling and simulation library with a Python API. * [Hardhat]( is a development environment to compile, deploy, test, and debug your Ethereum software. * ... (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: The documentation (alas needs some love) can be found here: 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 ``` # Contact There is public telegram group: Or if you want to contact me directly, here is my email: and telegram:
Commit count: 1064

cargo fmt