-
Notifications
You must be signed in to change notification settings - Fork 87
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
base: main
Are you sure you want to change the base?
Changes from all commits
f8bbd36
f44668b
8a32642
43ccb86
8ebfd69
ce17bd7
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
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 | | ||
| [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) | ||
|
||
There was a problem hiding this comment. Choose a reason for hiding this commentThe 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. | ||
|
||
There was a problem hiding this comment. Choose a reason for hiding this commentThe 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. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. the original name was turbo-geth, worth mentioning here |
||
|
||
There was a problem hiding this comment. Choose a reason for hiding this commentThe 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. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe 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) | ||
|
||
There was a problem hiding this comment. Choose a reason for hiding this commentThe 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 There was a problem hiding this comment. Choose a reason for hiding this commentThe 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. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe 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++). | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe 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. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe 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.. |
||
|
||
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/ |
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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