README.md
Modular, contributor-friendly and blazing-fast implementation of the Ethereum protocol
Install | User Docs | Developer Docs | Crate Docs
Reth (short for Rust Ethereum, pronunciation) is a production-ready Ethereum execution layer client focused on modularity, performance, and user-friendliness. Reth is compatible with all Ethereum Consensus Layer (CL) implementations that support the Engine API. It is built and driven forward by Paradigm, and is licensed under the Apache and MIT licenses.
Note: OP-Reth has moved to ethereum-optimism/optimism. Git history has been preserved.
Reth is production ready, and suitable for usage in mission-critical environments such as staking or high-uptime services. We also actively recommend professional node operators to switch to Reth in production for performance and cost reasons in use cases where high performance with great margins is required such as RPC, MEV, Indexing, Simulations, and P2P activities.
Storage V2 is the default for new nodes in Reth 2.0. Existing V1 nodes continue to work, but V1 support will be removed in a future release — all users are encouraged to migrate. V2 snapshots are available at snapshots.reth.rs.
See the Reth documentation for instructions on how to install and run Reth.
You can use individual crates of reth in your project.
The crate docs can be found here.
For a general overview of the crates, see Project Layout.
If you want to contribute, or follow along with contributor discussion, you can use our main telegram to chat with us about the development of Reth!
CONTRIBUTING.md.The Minimum Supported Rust Version (MSRV) of this project is 1.93.0.
See the docs for detailed instructions on how to build from source.
To fully test Reth, you will need to have Geth installed, but it is possible to run a subset of tests without Geth.
First, clone the repository:
git clone https://github.com/paradigmxyz/reth
cd reth
Next, run the tests:
cargo nextest run --workspace
# Run the Ethereum Foundation tests
make ef-tests
We highly recommend using cargo nextest to speed up testing.
Using cargo test to run tests may work fine, but this is not tested and does not support more advanced features like retries for spurious failures.
Note
Some tests use random number generators to generate test data. If you want to use a deterministic seed, you can set the
SEEDenvironment variable.
If you have any questions, first see if the answer to your question can be found in the docs.
If the answer is not there:
See SECURITY.md.
Reth is a new implementation of the Ethereum protocol. In the process of developing the node we investigated the design decisions other nodes have made to understand what is done well, what is not, and where we can improve the status quo.
None of this would have been possible without them, so big shoutout to the teams below:
The NippyJar and Compact encoding formats and their implementations are designed for storing and retrieving data internally. They are not hardened to safely read potentially malicious data.