Ethereum Nodes, Clients and Networks
The following article covers a high level technical summary of nodes, clients and networks on Ethereum and is one in of a series articles covering The Basics of Ethereum following the Introduction to Ethereum article.
Nodes on Ethereum are just machines running the Ethereum software. These machines maintain the state of Ethereum and communicate with each other. The Ethereum network itself is the aggregate of all Ethereum nodes and their communications. The nodetracker on Etherscan displays the statistics of all the nodes running on the Ethereum network.
There are three types of nodes on Ethereum:
- Stores the full blockchain data.
- Participates in block validation.
- All states can be derived from a full node.
- Serves the network and provides data on request.
- Stores only the header chain (only the root hashes and not the entire trie data).
- Can verify the validity of the data against the state roots.
- Stores everything kept in the full node and also all the historical states (including transactions not included on a block).
- Useful for block explorers and chain analytics.
Why are full nodes important?
Full nodes are required to help light nodes sync. Light nodes are able to request more information from full nodes. Full nodes also enforce the proof-of-work consensus rules so they blocks cannot be falsified.
An Ethereum client is a software application that implements the Ethereum specification and communicates over the peer-to-peer network with other Ethereum clients. The ideal goal is to achieve diversity without any client dominating to reduce any single points of failure.
- Geth — Go Ethereum (written in Go licensed under GNU LGPL v3) is a fully open source original implementation of the Ethereum protocol. Currently, the most widespread client with the largest user base and variety of tooling for users and developers.
- OpenEthereum — OpenEthereum (written in Rust licensed under GPLv3.) is aimed at being a lightweight minimal memory and storage based client.
- Nethermind — Nethermind (C# .NET)
- Besu — Besu (written in Java and is Apache 2.0 licensed) is an enterprise-grade Ethereum client.
Nodes as a Service
Third party API providers like Infura, Alchemy, or QuikNode can also generate full nodes that you can connect to. These nodes can be scaled (like a cloud service). Likewise ArchiveNode is a community-funded Archive node that is easily accessible to everyone without users hosting their own archive nodes.
Since Ethereum is a software platform, anyone can create a network to run the Ethereum protocol. Networks can range from development, testing, or production. Each account, addresses, balances, are separate between networks and independent.
Public networks are publicly accessible (read, create or validate transactions) to anyone via the internet.
- Mainnet — The primary public Ethereum production blockchain (often just called the Ethereum Network), where the real transactions occur on the distributed ledger.
- Testnet- In addition to mainnet, there are public testnets. These are networks used by protocol developers or smart contract developers to test their developments in a production-like environment before deployment to mainnet.
Proof of Authority
Three out of the four public testnets on Ethereum utilises proof-of-authority as the consensus mechanism. Proof of Authority (PoA) is a reputation-based consensus algorithm and works as so:
- Participants on the network have identities verified.
- Validating nodes are arbitrarily selected out of participants of the network.
- The selected nodes validate transactions and create new block.
Unlike PoS where the probability of selection is based on size of stake, PoA selection is random (with the exception of removing bad actor nodes). With PoA, individuals have to consistently earn the right to validators, so they are incentivised to uphold the proper transaction process to retain their positions and benefit. Also, by attaching a reputation to identity, validators actively risk a negative reputation for untrustworthy actions.
PoA is used on testnets as it is difficult to incentivise a proof-of-work system (due to smaller size easier to abuse).
To obtain ETH on testnets users input an address onto a faucet which is a web application and ETH is sent to the user.
Currently Available Public Testnets:
- Gorli — PoA testnet that works across many clients: Geth, Pantheon, Nethermind and Open Ethereum
- Kovan — PoA testnet for those running OpenEthereum clients.
- Rinkeby — PoA testnet for those running the Geth client.
- Ropsten — PoW testnet. Closest representation to Ethereum. Supported by all Ethereum clients. ETH can be mined.
An Ethereum network is a private network if its nodes are not connected to a public network.
Like creating a local server when developing an app, a development network in Ethereum is a private netwrok allowing faster testing compared to public testnets.
Advantages of deploying to a development network over replicating a full testnet node also include:
- Seeding the local blockchain with data of your specification.
- Instantly mining blocks, self determining ordering, with no delay.
If a public Ethereum network is like the public internet, you can think of a consortium network as the intranet where blocks are validated by a threshold of signatories within the network.