diff --git a/docs/wiki/EL/el-clients.md b/docs/wiki/EL/el-clients.md index dcdb9db4..ba4d05e1 100644 --- a/docs/wiki/EL/el-clients.md +++ b/docs/wiki/EL/el-clients.md @@ -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) + ### 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. -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. -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. +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) ### 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 +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++). ### 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. -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/ \ No newline at end of file