# Nodes and Clients

Ethereum is a distributed network of computers (known as 'nodes') running software that can verify blocks and transaction data. The software (known as 'clients') must be run on your computer to turn it into an Ethereum node.

These software are known as Ethereum client software such as Geth, OpenEthereum, Besu, MetaMask, Parity Light, etc.

## What are nodes and clients? <a href="#what-are-nodes-and-clients" id="what-are-nodes-and-clients"></a>

The term "node" refers to any instance of Ethereum client software. These nodes form an Ethereum network by connecting to each other.

A client is an implementation of Ethereum that verifies data against the protocol rules means each client implements the Ethereum protocol, which defines the rules governing the network's operation. These rules dictate how transactions are formed, validated, and added to the blockchain. Clients verify that all data they receive (transactions, blocks, etc.) comply with these established rules.

A node has to run two clients: a **consensus client** and an **execution client**.

### Execution Client

The execution client (also known as the Execution Engine, EL client, or formerly the Eth1 client) listens to new transactions broadcasted in the network, executes them in EVM, and holds the latest state and database of all current Ethereum data.

The Ethereum community maintains multiple open-source execution clients developed by different teams using different programming languages.

| Client                                          | Language | OS                    | Networks                           |
| ----------------------------------------------- | -------- | --------------------- | ---------------------------------- |
| [Geth](https://geth.ethereum.org/)              | Go       | Linux, Windows, macOS | Mainnet, Sepolia, Goerli           |
| [Nethermind](http://nethermind.io/)             | C#, .NET | Linux, Windows, macOS | Mainnet, Sepolia, Goerli, and more |
| [Besu](https://besu.hyperledger.org/en/stable/) | Java     | Linux, Windows, macOS | Mainnet, Sepolia, Goerli, and more |
| [Erigon](https://github.com/ledgerwatch/erigon) | Go       | Linux, Windows, macOS | Mainnet, Sepolia, Goerli, and more |
| [Reth](https://github.com/paradigmxyz/reth)     | Rust     | Linux, Windows, macOS | Mainnet, Sepolia, Goerli, and more |

### Consensus Client

The consensus client (also known as the Beacon Node, CL client, or formerly the Eth2 client) implements the [proof-of-stake](https://0xrisec.gitbook.io/blockchain/consensus-protocol/proof-of-stake-pos) consensus algorithm, which enables the network to achieve agreement based on validated data from the execution client.&#x20;

There are multiple consensus clients to support the [consensus upgrades](https://ethereum.org/en/roadmap/beacon-chain/). They are responsible for all consensus-related logic including the fork-choice algorithm, processing attestations, and managing [proof-of-stake](https://0xrisec.gitbook.io/blockchain/consensus-protocol/proof-of-stake-pos) rewards and penalties.

| Client                                                        | Language   | OS                    | Networks                                                          |
| ------------------------------------------------------------- | ---------- | --------------------- | ----------------------------------------------------------------- |
| [Lighthouse](https://lighthouse.sigmaprime.io/)               | Rust       | Linux, Windows, macOS | Beacon Chain, Goerli, Pyrmont, Sepolia, Ropsten, and more         |
| [Lodestar](https://lodestar.chainsafe.io/)                    | TypeScript | Linux, Windows, macOS | Beacon Chain, Goerli, Sepolia, Ropsten, and more                  |
| [Nimbus](https://nimbus.team/)                                | Nim        | Linux, Windows, macOS | Beacon Chain, Goerli, Sepolia, Ropsten, and more                  |
| [Prysm](https://docs.prylabs.network/docs/getting-started/)   | Go         | Linux, Windows, macOS | Beacon Chain, Gnosis, Goerli, Pyrmont, Sepolia, Ropsten, and more |
| [Teku](https://consensys.net/knowledge-base/ethereum-2/teku/) | Java       | Linux, Windows, macOS | Beacon Chain, Gnosis, Goerli, Sepolia, Ropsten, and more          |

> There is also a third piece of software, known as a 'validator' that can be added to the consensus client, allowing a node to participate in securing the network.

These clients work together to keep track of the head of the Ethereum chain and allow users to interact with the Ethereum network.&#x20;

## Node types <a href="#node-types" id="node-types"></a>

If you want to [run your own node](https://ethereum.org/en/developers/docs/nodes-and-clients/run-a-node/), you should understand that there are different types of node that consume data differently. In fact, clients can run three different types of nodes: light, full and archive.

#### Full node <a href="#full-node" id="full-node"></a>

Full nodes do a block-by-block validation of the blockchain, including downloading and verifying the block body and state data for each block. There are different classes of full node - some start from the genesis block and verify every single block in the entire history of the blockchain. Others start their verification at a more recent block that they trust to be valid (e.g. Geth's 'snap sync'). Regardless of where the verification starts, full nodes only keep a local copy of relatively recent data (typically the most recent 128 blocks), allowing older data to be deleted to save disk space. Older data can be regenerated when it is needed.

* Stores full blockchain data (although this is periodically pruned so a full node does not store all state data back to genesis)
* Participates in block validation, verifies all blocks and states.
* All states can be either retrieved from local storage or regenerated from 'snapshots' by a full node.
* Serves the network and provides data on request.

#### &#x20;<a href="#archive-node" id="archive-node"></a>

#### Archive node <a href="#archive-node" id="archive-node"></a>

Archive nodes are full nodes that verify every block from genesis and never delete any of the downloaded data.

* Stores everything kept in the full node and builds an archive of historical states. It is needed if you want to query something like an account balance at block #4,000,000, or simply and reliably test your own transactions set without mining them using tracing.
* This data represents units of terabytes, which makes archive nodes less attractive for average users but can be handy for services like block explorers, wallet vendors, and chain analytics.

Syncing clients in any mode other than archive will result in pruned blockchain data. This means, there is no archive of all historical states but the full node is able to build them on demand.

Learn more about [Archive nodes](https://ethereum.org/en/developers/docs/nodes-and-clients/archive-nodes/).

#### &#x20;<a href="#light-node" id="light-node"></a>

#### Light node <a href="#light-node" id="light-node"></a>

Instead of downloading every block, light nodes only download block headers. These headers contain summary information about the contents of the blocks. Any other information the light node requires gets requested from a full node. The light node can then independently verify the data they receive against the state roots in the block headers. Light nodes enable users to participate in the Ethereum network without the powerful hardware or high bandwidth required to run full nodes. Eventually, light nodes might run on mobile phones or embedded devices. The light nodes do not participate in consensus (i.e. they cannot be miners/validators), but they can access the Ethereum blockchain with the same functionality and security guarantees as a full node.

Light clients are an area of active development for Ethereum and we expect to see new light clients for the consensus layer and execution layer soon. There are also potential routes to providing light client data over the [gossip network(opens in a new tab)](https://www.ethportal.net/)

. This is advantageous because the gossip network could support a network of light nodes without requiring full nodes to serve requests.

Ethereum does not support a large population of light nodes yet, but light node support is an area expected to develop rapidly in the near future. In particular, clients like [Nimbus(opens in a new tab)](https://nimbus.team/)

, [Helios(opens in a new tab)](https://github.com/a16z/helios), and [LodeStar(opens in a new tab)](https://lodestar.chainsafe.io/) are currently heavily focused on light nodes.

<https://ethereum.org/en/developers/docs/nodes-and-clients/>
