From f8bbd3661588d1e7c9342a956428b92fdb97ab2a Mon Sep 17 00:00:00 2001 From: Karrenbelt Date: Tue, 20 Aug 2024 18:38:53 +0200 Subject: [PATCH 1/5] docs: description EL clients --- docs/wiki/EL/el-clients.md | 67 ++++++++++++++------------------------ 1 file changed, 24 insertions(+), 43 deletions(-) diff --git a/docs/wiki/EL/el-clients.md b/docs/wiki/EL/el-clients.md index dcdb9db4..427f0c6d 100644 --- a/docs/wiki/EL/el-clients.md +++ b/docs/wiki/EL/el-clients.md @@ -1,60 +1,41 @@ -# 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 ### Besu - -Developed by Hyperledger Foundation in Java +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. ### Erigon - -Originally fork of geth called turbo-geth +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. ### Geth - -Go-ethereum, developed by a team in EF +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. +Geth's flexibility in deployment—through package managers, Docker containers, or manual setup—ensures its versatility in diverse blockchain environments. ### Nethermind - -Developed in .NET - -## Clients in development +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. ### 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. -Developed by Paradigm, recently considered stable - -### 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++). ### JS Client - -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 - -Experimental, prototyping client in Python developed by EF Snake Charmers +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. From f44668b2ee105d18fe7bd2972786dc3c0a2c92b4 Mon Sep 17 00:00:00 2001 From: Karrenbelt Date: Tue, 20 Aug 2024 18:40:46 +0200 Subject: [PATCH 2/5] docs: add noteworthy features to EL clients in production --- docs/wiki/EL/el-clients.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/docs/wiki/EL/el-clients.md b/docs/wiki/EL/el-clients.md index 427f0c6d..00afc20f 100644 --- a/docs/wiki/EL/el-clients.md +++ b/docs/wiki/EL/el-clients.md @@ -9,24 +9,47 @@ Execution clients can be configured as archive nodes, which retain the entire hi 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. +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. +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. Geth's flexibility in deployment—through package managers, Docker containers, or manual setup—ensures its versatility in diverse blockchain environments. +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. +Noteworthy Features: +- [Private Networks](https://docs.nethermind.io/fundamentals/private-networks) +- [Prometheus and Grafana](https://docs.nethermind.io/monitoring/metrics/grafana-and-prometheus) + ### 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. +Noteworthy Features: +- [Revm](https://bluealloy.github.io/revm/) +- [Prometheus and Grafana](https://reth.rs/run/observability.html) + ### 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). From 8a326421327acd687898438de28ff3666b2da890 Mon Sep 17 00:00:00 2001 From: Karrenbelt Date: Tue, 20 Aug 2024 18:41:35 +0200 Subject: [PATCH 3/5] docs: add overview table EL clients --- docs/wiki/EL/el-clients.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/docs/wiki/EL/el-clients.md b/docs/wiki/EL/el-clients.md index 00afc20f..ee8e26a6 100644 --- a/docs/wiki/EL/el-clients.md +++ b/docs/wiki/EL/el-clients.md @@ -5,6 +5,25 @@ They run the computations for each transaction using the [Ethereum Virtual Machi 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. +## 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 | + + ### 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. From 43ccb86f671ae19c64e6104d5c5370a863f33965 Mon Sep 17 00:00:00 2001 From: Karrenbelt Date: Tue, 20 Aug 2024 18:42:50 +0200 Subject: [PATCH 4/5] docs: add distribution section to EL clients --- docs/wiki/EL/el-clients.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/docs/wiki/EL/el-clients.md b/docs/wiki/EL/el-clients.md index ee8e26a6..3f8ac71c 100644 --- a/docs/wiki/EL/el-clients.md +++ b/docs/wiki/EL/el-clients.md @@ -24,6 +24,13 @@ Execution clients can be configured as archive nodes, which retain the entire hi | [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) + + ### 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. From 8ebfd698c52d651bf3bebcb49f662065b81c123a Mon Sep 17 00:00:00 2001 From: Karrenbelt Date: Tue, 20 Aug 2024 18:43:09 +0200 Subject: [PATCH 5/5] docs: add additional resources EL clients --- docs/wiki/EL/el-clients.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/wiki/EL/el-clients.md b/docs/wiki/EL/el-clients.md index 3f8ac71c..ba4d05e1 100644 --- a/docs/wiki/EL/el-clients.md +++ b/docs/wiki/EL/el-clients.md @@ -88,3 +88,11 @@ It integrates the libmdbx database engine and emphasizes scalability and perform ### 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. + + +## Additional resources + +- [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/ \ No newline at end of file