Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Documentation for Ethereum execution clients #309

Open
wants to merge 6 commits into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
106 changes: 72 additions & 34 deletions docs/wiki/EL/el-clients.md
Original file line number Diff line number Diff line change
@@ -1,60 +1,98 @@
# Execution Layer Implementations
# Execution Client

> :warning: This article is a [stub](https://en.wikipedia.org/wiki/Wikipedia:Stub), help the wiki by [contributing](/contributing.md) and expanding it.
> **Execution clients**, formerly known as *eth1 clients*, are tasked with processing and broadcasting transactions and managing Ethereum's state.
They run the computations for each transaction using the [Ethereum Virtual Machine](https://ethereum.org/en/developers/docs/evm/) to ensure that the rules of the protocol are followed.
Execution clients can be configured as archive nodes, which retain the entire history of the blockchain, or as full (pruned) nodes, which keep only the latest state and discard older data to save storage space.

Resources covering all current and historical execution clients. Overview of client unique features of each client, architecture, guides and resources.

## Clients in production
## Overview Table

| Client | Language | Developer | Status |
| --------------------------------------------------------------- | ---------- | ------------------- | ----------- |
| [Besu](https://github.com/hyperledger/besu) | Java | Hyperledger | Production |
| [Erigon](https://github.com/ledgerwatch/erigon) | Go | Ledgerwatch | Production |
| [Geth](https://github.com/ethereum/go-ethereum) | Go | Ethereum Foundation | Production |
| [Nethermind](https://github.com/NethermindEth/nethermind) | C# | Nethermind | Production |
| [Reth](https://github.com/paradigmxyz/reth) | Rust | Paradigm | Production |
| [Nimbus](https://github.com/status-im/nimbus-eth1) | Nim | Nimbus | Development |
| [Silkworm](https://github.com/erigontech/silkworm) | C++ | Erigon | Development |
| [JS Client](https://github.com/ethereumjs/ethereumjs-monorepo) | Typescript | Paradigm | Development |
| [Akula](https://github.com/akula-bft/akula) | Rust | Akula Developers | Deprecated |
| [Aleth](https://github.com/ethereum/aleth) | C++ | Aleth Developers | Deprecated |
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe I would split the table here to have clear overview of current and historical clients. At first glance it just feels weird to have it all in one place but maybe it works just with Status column, I'll let others comment on this.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Btw there is also a rust execution client in development by lambdaclass https://github.com/lambdaclass/ethereum_rust

| [Mana](https://github.com/mana-ethereum/mana) | Elixir | Mana Developers | Deprecated |
| [OpenEthereum](https://github.com/openethereum/parity-ethereum) | Rust | Parity | Deprecated |
| [Trinity](https://github.com/ethereum/trinity) | Python | OpenEthereum | Deprecated |


## Distribution

The overwhelming majority of node operators are currently using Geth as an Execution Client.
In the interest of supporting the health of the Execution Layer (formerly ETH1), it is recommended to use different clients.
[Why?](https://clientdiversity.org/#why)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This can be directly in the text with link over [client diversity] or so. There is also a great ethereum.org page on client diversity


### Besu
Developed by the Hyperledger Foundation in Java, Besu (Hyperledger Besu) is distinguished for its enterprise-grade features and compatibility with various Hyperledger projects.
It supports both public and private networks such as Rinkeby, Ropsten, and Goerli, offering robust command-line tools and a JSON-RPC API.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

all of these testnets are deprecated, it shouldnt even mention them :) I would update this and maybe remove the line about testnets altogether

Developed by Hyperledger Foundation in Java
Noteworthy Features:
- [Private Networks](https://besu.hyperledger.org/private-networks/)
- [Pruning](https://besu.hyperledger.org/public-networks/how-to/bonsai-limit-trie-logs#prune-command-for-mainnet)
- [Monitoring](https://besu.hyperledger.org/private-networks/how-to/monitor)
- [Parallel Transaction Execution](https://besu.hyperledger.org/public-networks/concepts/parallel-transaction-execution)

### Erigon
Initially a fork of Geth (Go Ethereum), Erigon focuses on optimizing performance, fast synchronization capabilities, and reducing disk space usage.
Erigon's architecture allows it to complete a full archive node sync in under three days with less than 2 TB of data storage, making it ideal for resource-efficient node deployments.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the original name was turbo-geth, worth mentioning here


Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the 2tb is old information, now it's almost 3. Also the 3 days are subjective because it depends on the machine. In this part, I would highlight that erigon came up with a new generation of handling MPT archive which enables modern archive nodes to take much less data. With some links to resources on their approach

Originally fork of geth called turbo-geth
Noteworthy Features:
- [Supported Networks](https://erigon.gitbook.io/erigon/basic-usage/supported-networks)
- [Pruning](https://erigon.gitbook.io/erigon/basic-usage/usage/type-of-node#full-node-or-pruned-node)

### Geth
As the official Go implementation of Ethereum, Geth (Go Ethereum) enjoys widespread adoption among developers and users alike.
It supports various node types (full, light, archive) and is renowned for its extensive toolset and community support.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it's called 'official' sometimes but I would avoid this term here, I think it doesnt really makes sense in ethereum context. But it could be mention it's one of the original implementation, therefore the oldest currently maintained EL

Geth's flexibility in deployment—through package managers, Docker containers, or manual setup—ensures its versatility in diverse blockchain environments.

Go-ethereum, developed by a team in EF
Noteworthy Features:
- [Pruning](https://geth.ethereum.org/docs/fundamentals/pruning)
- [Custom EVM Tracer](https://geth.ethereum.org/docs/developers/evm-tracing/custom-tracer)
- [Monitoring Dashboards](https://geth.ethereum.org/docs/monitoring/dashboards)

### Nethermind
Written in C# .NET, Nethermind is designed for stability and integration with existing tech infrastructures.
It offers optimized virtual machine performance, comprehensive analytics support via Prometheus/Grafana dashboards, and robust security features.
Nethermind is suitable for both private Ethereum networks and decentralized application (dApp) development, emphasizing data integrity and scalability.

Developed in .NET

## Clients in development
Noteworthy Features:
- [Private Networks](https://docs.nethermind.io/fundamentals/private-networks)
- [Prometheus and Grafana](https://docs.nethermind.io/monitoring/metrics/grafana-and-prometheus)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't know about metrics being a higlight here, every single client supports it

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

they have plugin system, snap support, bunch of cool features

### Reth
Reth (Rust Ethereum) is a modular and efficient Ethereum client designed for user-friendliness and high performance.
It emphasizes community-driven development and is suitable for robust production environments.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

here I would put emphasis on the performance and it's inspiration from erigon architecture


Developed by Paradigm, recently considered stable
Noteworthy Features:
- [Revm](https://bluealloy.github.io/revm/)
- [Prometheus and Grafana](https://reth.rs/run/observability.html)

### Nimbus EL

Execution client developed by Nimbus team as an addition to their Nim CL work.
### Nimbus
Nimbus focuses on efficiency and security as an ultra-lightweight Ethereum execution layer client.
It minimizes resource consumption while supporting Ethereum's execution layer functionalities and integrating with Fluffy (a Portal Network light client).
Nimbus offers enhanced memory savings and state synchronization mechanisms, ideal for resource-constrained environments.

### Silkworm

Modular C++ implementation by Erigon team. Also called Erigon++.
Silkworm is a C++ implementation of the Ethereum Execution Layer protocol, aiming to be the fastest Ethereum client.
It integrates the libmdbx database engine and emphasizes scalability and performance optimizations within the Erigon project (known as Erigon++).
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is it aiming to be fastest? I think their sales pitch is modularity


### JS Client
The TypeScript-based JavaScript client by Paradigm, part of the EthereumJS monorepo, offers flexibility and ease of integration for Ethereum's execution layer functionalities.
It's designed to be JavaScript-centric, suitable for web and Node.js environments.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

js client is not from paradigm lol. At least afaik? It was always developed by EF, led by Holger..
The highlight is that they implement EIPs very soon before hardfork and give people opportunity to test stuff


A JS/TS client developed by EF Javascript team, used for testing and prototyping

## Deprecated clients

### Aleth

An old client in C++

### Mana

Eth client in Elixir
https://github.com/mana-ethereum/mana

### Parity/OpenEthereum

Rust client developed by Parity, later maintained and deprecated as OE

### Trinity
## Additional resources

Experimental, prototyping client in Python developed by EF Snake Charmers
- [ETH Docker](https://eth-docker.net/)
- [Ethernodes](https://ethernodes.org/)
- [Client Diverisity](https://clientdiversity.org/)
- [Run the majority client at your own peril!](https://dankradfeist.de/ethereum/2022/03/24/
Loading