Modular, contributor-friendly and blazing-fast implementation of the Ethereum protocol
Install | User Book | Developer Docs | Crate Docs
Reth (short for Rust Ethereum, pronunciation) is a new Ethereum full node implementation that is focused on being user-friendly, highly modular, as well as being fast and efficient. Reth is an Execution Layer (EL) and is compatible with all Ethereum Consensus Layer (CL) implementations that support the Engine API. It is originally built and driven forward by Paradigm, and is licensed under the Apache and MIT licenses.
As a full Ethereum node, Reth allows users to connect to the Ethereum network and interact with the Ethereum blockchain. This includes sending and receiving transactions/logs/traces, as well as accessing and interacting with smart contracts. Building a successful Ethereum node requires creating a high-quality implementation that is both secure and efficient, as well as being easy to use on consumer hardware. It also requires building a strong community of contributors who can help support and improve the software.
More concretely, our goals are:
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.
More historical context below:
We do not have any breaking database changes since beta.1, and do not plan any in the near future.
Reth v0.2.0-beta.1 includes a set of breaking database changes that makes it impossible to use database files produced by earlier versions.
If you had a database produced by alpha versions of Reth, you need to drop it with reth db drop
(using the same arguments such as --config
or --datadir
that you passed to reth node
), and resync using the same reth node
command you've used before.
See the Reth Book 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.82.0.
See the book 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:
# Without Geth
cargo test --workspace
# With Geth
cargo test --workspace --features geth-tests
# With Ethereum Foundation tests
#
# Note: Requires cloning https://github.com/ethereum/tests
#
# cd testing/ef-tests && git clone https://github.com/ethereum/tests ethereum-tests
cargo test -p ef-tests --features ef-tests
We recommend using cargo nextest
to speed up testing. With nextest installed, simply substitute cargo test
with cargo nextest run
.
Note
Some tests use random number generators to generate test data. If you want to use a deterministic seed, you can set the
SEED
environment variable.
If you have any questions, first see if the answer to your question can be found in the book.
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.