Skip to content

Commit

Permalink
Merge pull request ethereum#13301 from ethereum/reth-update
Browse files Browse the repository at this point in the history
Reth update
  • Loading branch information
corwintines authored Jul 9, 2024
2 parents 54e3272 + 8b08945 commit 4c9caf6
Show file tree
Hide file tree
Showing 5 changed files with 55 additions and 31 deletions.
1 change: 1 addition & 0 deletions public/content/community/support/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,7 @@ Most of the teams building Ethereum clients also have dedicated, public-facing,
- [Nethermind](https://discord.gg/YJx3pm8z5C)
- [Besu](https://discord.gg/p8djYngzKN)
- [Erigon](https://github.com/ledgerwatch/erigon/issues)
- [Reth](https://github.com/paradigmxyz/reth/discussions)

### Consensus clients {#consensus-clients}

Expand Down
26 changes: 17 additions & 9 deletions public/content/developers/docs/nodes-and-clients/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -133,14 +133,14 @@ The Ethereum community maintains multiple open-source execution clients (previou

This table summarizes the different clients. All of them pass [client tests](https://github.com/ethereum/tests) and are actively maintained to stay updated with network upgrades.

| Client | Language | Operating systems | Networks | Sync strategies | State pruning |
| ------------------------------------------------------------------------ | ---------- | --------------------- | ------------------------- | ---------------------------------- | --------------- |
| Client | Language | Operating systems | Networks | Sync strategies | State pruning |
| ------------------------------------------------------------------------ | ---------- | --------------------- | ------------------------- | -------------------------------------------------------------- | --------------- |
| [Geth](https://geth.ethereum.org/) | Go | Linux, Windows, macOS | Mainnet, Sepolia, Holesky | [Snap](#snap-sync), [Full](#full-sync) | Archive, Pruned |
| [Nethermind](http://nethermind.io/) | C#, .NET | Linux, Windows, macOS | Mainnet, Sepolia, Holesky | [Snap](#snap-sync) (without serving), Fast, [Full](#full-sync) | Archive, Pruned |
| [Besu](https://besu.hyperledger.org/en/stable/) | Java | Linux, Windows, macOS | Mainnet, Sepolia, Holesky | [Snap](#snap-sync), [Fast](#fast-sync), [Full](#full-sync) | Archive, Pruned |
| [Erigon](https://github.com/ledgerwatch/erigon) | Go | Linux, Windows, macOS | Mainnet, Sepolia, Holesky | [Full](#full-sync) | Archive, Pruned |
| [Reth](https://github.com/paradigmxyz/reth) _(beta)_ | Rust | Linux, Windows, macOS | Mainnet, Sepolia, Holesky | [Full](#full-sync) | Archive, Pruned |
| [EthereumJS](https://github.com/ethereumjs/ethereumjs-monorepo) _(beta)_ | TypeScript | Linux, Windows, macOS | Sepolia, Holesky | [Full](#full-sync) | Pruned |
| [Nethermind](https://www.nethermind.io/) | C#, .NET | Linux, Windows, macOS | Mainnet, Sepolia, Holesky | [Snap](#snap-sync) (without serving), Fast, [Full](#full-sync) | Archive, Pruned |
| [Besu](https://besu.hyperledger.org/en/stable/) | Java | Linux, Windows, macOS | Mainnet, Sepolia, Holesky | [Snap](#snap-sync), [Fast](#fast-sync), [Full](#full-sync) | Archive, Pruned |
| [Erigon](https://github.com/ledgerwatch/erigon) | Go | Linux, Windows, macOS | Mainnet, Sepolia, Holesky | [Full](#full-sync) | Archive, Pruned |
| [Reth](https://reth.rs/) | Rust | Linux, Windows, macOS | Mainnet, Sepolia, Holesky | [Full](#full-sync) | Archive, Pruned |
| [EthereumJS](https://github.com/ethereumjs/ethereumjs-monorepo) _(beta)_ | TypeScript | Linux, Windows, macOS | Sepolia, Holesky | [Full](#full-sync) | Pruned |

For more on supported networks, read up on [Ethereum networks](/developers/docs/networks/).

Expand Down Expand Up @@ -172,6 +172,14 @@ Nethermind is an Ethereum implementation created with the C# .NET tech stack, li

Nethermind also has [detailed documentation](https://docs.nethermind.io), strong dev support, an online community and 24/7 support available for premium users.

### Reth {#reth}

Reth (short for Rust Ethereum) is an Ethereum full node implementation that is focused on being user-friendly, highly modular, fast and efficient. Reth was originally built and driven forward by Paradigm, and is licensed under the Apache and MIT licenses.

Reth is production ready, and suitable for usage in mission-critical environments such as staking or high-uptime services. Performs well in use cases where high performance with great margins is required such as RPC, MEV, indexing, simulations, and P2P activities.

Learn more by checking out the [Reth Book](https://reth.rs/), or the [Reth GitHub repo](https://github.com/paradigmxyz/reth?tab=readme-ov-file#reth).

### In development {#execution-in-development}

These clients are still in earlier stages of development and are not yet recommended for production use.
Expand Down Expand Up @@ -238,7 +246,7 @@ The execution layer may be run in different modes to suit different use cases, f

#### Full sync {#full-sync}

A full sync downloads all blocks (including headers and block bodies) and regenerates the state of the blockchain incrementally by executing every block from genesis.
A full sync downloads all blocks (including headers and block bodies) and regenerates the state of the blockchain incrementally by executing every block from genesis.

- Minimizes trust and offers the highest security by verifying every transaction.
- With an increasing number of transactions, it can take days to weeks to process all transactions.
Expand All @@ -247,7 +255,7 @@ A full sync downloads all blocks (including headers and block bodies) and regene

#### Fast sync {#fast-sync}

Like a full sync, a fast sync downloads all blocks (including headers, transactions, and receipts). However, instead of re-processing the historical transactions, a fast sync relies on the receipts until it reaches a recent head, when it switches to importing and processing blocks to provide a full node.
Like a full sync, a fast sync downloads all blocks (including headers, transactions, and receipts). However, instead of re-processing the historical transactions, a fast sync relies on the receipts until it reaches a recent head, when it switches to importing and processing blocks to provide a full node.

- Fast sync strategy.
- Reduces processing demand in favor of bandwidth usage.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -93,12 +93,13 @@ The sync mode and client you choose will affect space requirements, but we've es

| Client | Disk size (snap sync) | Disk size (full archive) |
| ---------- | --------------------- | ------------------------ |
| Geth | 500GB+ | 12TB+ |
| Nethermind | 500GB+ | 12TB+ |
| Besu | 800GB+ | 12TB+ |
| Erigon | N/A | 2.5TB+ |
| Geth | 500GB+ | 12TB+ |
| Nethermind | 500GB+ | 12TB+ |
| Reth | N/A | 2.2TB+ |

- Note: Erigon does not offer snap sync, but Full Pruning is possible (~500GB)
- Note: Erigon and Reth do not offer snap sync, but Full Pruning is possible (~2TB for Erigon, ~1.2TB for Reth)

For consensus clients, space requirement also depends on client implementation and enabled features (e.g. validator slasher) but generally count with another 200GB needed for beacon data. With a large number of validators, the bandwidth load grows as well. You can find [details on consensus client requirements in this analysis](https://mirror.xyz/0x934e6B4D7eee305F8C9C42b46D6EEA09CcFd5EDc/b69LBy8p5UhcGJqUAmT22dpvdkU-Pulg2inrhoS9Mbc).

Expand Down Expand Up @@ -155,6 +156,7 @@ Here are the release pages of clients where you can find their pre-built binarie
- [Erigon](https://github.com/ledgerwatch/erigon/releases)
- [Geth](https://geth.ethereum.org/downloads/)
- [Nethermind](https://downloads.nethermind.io/)
- [Reth](https://reth.rs/installation/installation.html)

It is also worth noting that client diversity is an [issue on the execution layer](/developers/docs/nodes-and-clients/client-diversity/#execution-layer). It is recommended that readers consider running a minority execution client.

Expand All @@ -178,7 +180,7 @@ Developers sign released binaries with their PGP keys so you can cryptographical

Another form of verification is to make sure that the hash, a unique cryptographic fingerprint, of the software you downloaded matches the one provided by developers. This is even easier than using PGP, and some clients offer only this option. Just run the hash function on the downloaded software and compare it to the one from the release page. For example:

```
```sh
sha256sum teku-22.6.1.tar.gz

9b2f8c1f8d4dab0404ce70ea314ff4b3c77e9d27aff9d1e4c1933a5439767dde
Expand Down Expand Up @@ -214,15 +216,15 @@ Execution and consensus clients communicate via an authenticated endpoint specif

This token is generated automatically by the client software, but in some cases, you might need to do it yourself. You can generate it using [OpenSSL](https://www.openssl.org/):

```
```sh
openssl rand -hex 32 > jwtsecret
```

#### Running an execution client {#running-an-execution-client}

This section will guide you through starting execution clients. It only serves as an example of a basic configuration, which will start the client with these settings:

- Specifies network to connect to, mainnet in our examples
- Specifies network to connect to, Mainnet in our examples
- You can instead choose [one of testnets](/developers/docs/networks/) for preliminary testing of your setup
- Defines data directory, where all the data including blockchain will be stored
- Make sure to substitute the path with a real one, e.g. pointing to your external drive
Expand All @@ -237,9 +239,9 @@ Please keep in mind that this is just a basic example, all other settings will b
##### Running Besu

This example starts Besu on mainnet, stores blockchain data in default format at `/data/ethereum`, enables JSON-RPC and Engine RPC for connecting consensus client. Engine API is authenticated with token `jwtsecret` and only calls from `localhost` are allowed.
This example starts Besu on Mainnet, stores blockchain data in default format at `/data/ethereum`, enables JSON-RPC and Engine RPC for connecting consensus client. Engine API is authenticated with token `jwtsecret` and only calls from `localhost` are allowed.

```
```sh
besu --network=mainnet \
--data-path=/data/ethereum \
--rpc-http-enabled=true \
Expand All @@ -251,17 +253,17 @@ besu --network=mainnet \

Besu also comes with a launcher option which will ask a series of questions and generate the config file. Run the interactive launcher using:

```
```sh
besu --Xlauncher
```

[Besu's documentation](https://besu.hyperledger.org/en/latest/HowTo/Get-Started/Starting-node/) contains additional options and configuration details.

##### Running Erigon

This example starts Erigon on mainnet, stores blockchain data at `/data/ethereum`, enables JSON-RPC, defines which namespaces are allowed and enables authentication for connecting the consensus client which is defined by the `jwtsecret` path.
This example starts Erigon on Mainnet, stores blockchain data at `/data/ethereum`, enables JSON-RPC, defines which namespaces are allowed and enables authentication for connecting the consensus client which is defined by the `jwtsecret` path.

```
```sh
erigon --chain mainnet \
--datadir /data/ethereum \
--http --http.api=engine,eth,web3,net \
Expand All @@ -272,9 +274,9 @@ Erigon by default performs a full sync with 8GB HDD which will result in more th

##### Running Geth

This example starts Geth on mainnet, stores blockchain data at `/data/ethereum`, enables JSON-RPC and defines which namespaces are allowed. It also enables authentication for connecting consensus client which requires path to `jwtsecret` and also option defining which connections are allowed, in our example only from `localhost`.
This example starts Geth on Mainnet, stores blockchain data at `/data/ethereum`, enables JSON-RPC and defines which namespaces are allowed. It also enables authentication for connecting consensus client which requires path to `jwtsecret` and also option defining which connections are allowed, in our example only from `localhost`.

```
```sh
geth --mainnet \
--datadir "/data/ethereum" \
--http --authrpc.addr localhost \
Expand All @@ -289,7 +291,7 @@ Check [docs for all configuration options](https://geth.ethereum.org/docs/fundam

Nethermind offers various [installation options](https://docs.nethermind.io/nethermind/first-steps-with-nethermind/getting-started). The package comes with various binaries, including a Launcher with a guided setup, which will help you to create the configuration interactively. Alternatively, you find Runner which is the executable itself and you can just run it with config flags. JSON-RPC is enabled by default.

```
```sh
Nethermind.Runner --config mainnet \
--datadir /data/ethereum \
--JsonRpc.JwtSecretFile=/path/to/jwtsecret
Expand All @@ -299,6 +301,19 @@ Nethermind docs offer a [complete guide](https://docs.nethermind.io/nethermind/f

An execution client will initiate its core functions, chosen endpoints, and start looking for peers. After successfully discovering peers, the client starts synchronization. The execution client will await a connection from consensus client. Current blockchain data will be available once the client is successfully synced to the current state.

##### Running Reth

This example starts Reth on Mainnet, using default data location. Enables JSON-RPC and Engine RPC authentication for connecting the consensus client which is defined by the `jwtsecret` path, with only calls from `localhost` are allowed.

```sh
reth node \
--authrpc.jwtsecret /path/to/jwtsecret \
--authrpc.addr 127.0.0.1 \
--authrpc.port 8551
```

See [Configuring Reth](https://reth.rs/run/config.html?highlight=data%20directory#configuring-reth) to learn more about data default data directories. [Reth's documentation](https://reth.rs/run/mainnet.html) contains additional options and configuration details.

#### Starting the consensus client {#starting-the-consensus-client}

The consensus client must be started with the right port configuration to establish a local RPC connection to the execution client. The consensus clients have to be run with the exposed execution client port as configuration argument.
Expand All @@ -309,13 +324,13 @@ If you plan to run a validator, make sure to add a configuration flag specifying

When starting a Beacon Node on a testnet, you can save significant syncing time by using a public endpoint for [Checkpoint sync](https://notes.ethereum.org/@launchpad/checkpoint-sync).

#### Running a consensus client
#### Running a consensus client {#running-a-consensus-client}

##### Running Lighthouse

Before running Lighthouse, learn more on how to install and configure it in [Lighthouse Book](https://lighthouse-book.sigmaprime.io/installation.html).

```
```sh
lighthouse beacon_node \
--network mainnet \
--datadir /data/ethereum \
Expand All @@ -328,7 +343,7 @@ lighthouse beacon_node \

Install Lodestar software by compiling it or downloading the Docker image. Learn more in [docs](https://chainsafe.github.io/lodestar/) and more comprehensive [setup guide](https://hackmd.io/@philknows/rk5cDvKmK).

```
```sh
lodestar beacon \
--rootDir="/data/ethereum" \
--network=mainnet \
Expand All @@ -342,7 +357,7 @@ lodestar beacon \
Nimbus comes with both consensus and execution clients. It can be run on various devices even with very modest computing power.
After [installing dependencies and Nimbus itself](https://nimbus.guide/quick-start.html), you can run its consensus client:

```
```sh
nimbus_beacon_node \
--network=mainnet \
--web3-url=http://127.0.0.1:8551 \
Expand All @@ -354,7 +369,7 @@ nimbus_beacon_node \

Prysm comes with script which allows easy automatic installation. Details can be found in the [Prysm docs](https://docs.prylabs.network/docs/install/install-with-script).

```
```sh
./prysm.sh beacon-chain \
--mainnet \
--datadir /data/ethereum \
Expand All @@ -364,7 +379,7 @@ Prysm comes with script which allows easy automatic installation. Details can be

##### Running Teku

```
```sh
teku --network mainnet \
--data-path "/data/ethereum" \
--ee-endpoint http://localhost:8551 \
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ Need a more basic primer first? Check out [ethereum.org/learn](/learn/) or [ethe
- [Ethers_rs](https://github.com/gakonst/ethers-rs)- _Ethereum library and wallet implementation_
- [SewUp](https://github.com/second-state/SewUp) - _A library to help you build your Ethereum webassembly contract with Rust and just like develop in a common backend_
- [Substreams](https://github.com/streamingfast/substreams) - _Parallelized blockchain data indexing technology_
- [Reth](https://github.com/paradigmxyz/reth) Reth (short for Rust Ethereum, pronunciation) is a new Ethereum full-node implementation
- [Reth](https://github.com/paradigmxyz/reth) Reth (short for Rust Ethereum) is a new Ethereum full-node implementation
- [Awesome Ethereum Rust](https://github.com/Vid201/awesome-ethereum-rust) - _A curated collection of projects in the Ethereum ecosystem written in Rust_

Looking for more resources? Check out [ethereum.org/developers.](/developers/)
Expand Down
2 changes: 1 addition & 1 deletion public/content/governance/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ There are various stakeholders in the [Ethereum community](/community/), each pl
- **Node Operators**: these people run nodes that propagate blocks and transactions, rejecting any invalid transaction or block that they come across. [More on nodes](/developers/docs/nodes-and-clients/).
- **EIP Authors**: these people propose changes to the Ethereum protocol, in the form of Ethereum Improvement Proposals (EIPs). [More on EIPs](/eips/).
- **Validators**: these people run nodes that can add new blocks to the Ethereum blockchain.
- **Protocol Developers** (a.k.a. "Core Developers" ): these people maintain the various Ethereum implementations (e.g. go-ethereum, Nethermind, Besu, Erigon at the execution layer or Prysm, Lighthouse, Nimbus, Teku, Lodestar at the consensus layer). [More on Ethereum clients](/developers/docs/nodes-and-clients/).
- **Protocol Developers** (a.k.a. "Core Developers" ): these people maintain the various Ethereum implementations (e.g. go-ethereum, Nethermind, Besu, Erigon, Reth at the execution layer or Prysm, Lighthouse, Nimbus, Teku, Lodestar at the consensus layer). [More on Ethereum clients](/developers/docs/nodes-and-clients/).

_Note: any individual can be part of multiple of these groups (e.g. a protocol developer could champion an EIP, and run a beacon chain validator, and use DeFi applications). For conceptual clarity, it is easiest to distinguish between them, though._

Expand Down

0 comments on commit 4c9caf6

Please sign in to comment.