A Tale of Multiple Clients - The Daily Gwei #24
A look at the Ethereum network's multi-client architecture.
The Ethereum network isn’t just made up of 1 client (node) implementation - there are 5+ that are actively synced to the network at any given time with 3 clients accounting for the majority of the network. This is unlike Bitcoin which has 1 client that dominates almost the entire network (Bitcoin Core).
Source: https://ethernodes.org/
I’ll start from the beginning by explaining why the Ethereum network is a multi-client paradigm. The reasoning basically goes like this: by having multiple client implementations of the Ethereum protocol, it protects against a critical flaw or bug being found in any one client which could result in the Ethereum network bringing brought down or grinding to a halt.
On the other hand, Bitcoiners believe that there should only be 1 dominant client on the network and that client should be made to be as robust and secure as possible. Though of course there has indeed been many bugs found in the Bitcoin Core client (list here) with some of them being critical.
This isn’t to say that Ethereum clients haven’t suffered from any bugs or vulnerabilities in the past as well - they certainly have. The most famous of these was the “Shanghai DoS Attacks” of late 2016. This attack basically took Geth nodes offline which meant the network was relying on Parity Ethereum to handle the load. Obviously this is a perfect example of why having a multi-client network is hugely beneficial - if Ethereum was just relying on Geth then the entire network would have been taken down with this attack.
In saying all of that, there has been a concern lately because the Ethereum network is now being dominated by just 1 client - Geth (as you can see in the pie chart above). This is the client that the Ethereum Foundation maintains and is arguably the most battle-hardened one that we have today. It wasn’t always this way though - traditionally, Geth and Parity Ethereum shared a mostly even split of the network but a few months ago Parity announced that they were transitioning their clients ownership and maintenance to a DAO called OpenEthereum. This caused many people to shut down their Parity Ethereum nodes over the last few months which led to Geth growing to account for 77% of the network. Since then, Gnosis has taken the lead on developing OpenEthereum and has hired people to continue working on it internally. One thing to note here is if Parity Ethereum was the only client on the Ethereum network then this would of been a much bigger issue!
In general, Ethereum protocol development is really difficult. It takes a long time for new developers to get up to speed and there is limited time that current developers can spend on teaching others how things work. Not to mention that the few developers who do work on eth1 clients are starting to feel really burnt out. This is because the clients require constant maintenance and the Ethereum community has come to expect semi-regular network upgrades (hard forks) that introduce new features or change things that could lead to clients breaking if not implemented correctly (leading to stress for core devs). This topic was discussed extensively in the latest core dev call and I recommend reading this piece for more information.
Ethereum 2.0 is also being built as a multi-client network. There are currently 8 teams actively working on their own client with 4 of those clients synced to the current Altona eth2 phase 0 testnet. The main advantage here for these teams is that they get to start from scratch and work from first principles alongside the eth2 researchers. Not to mention that all of the eth2 development is happening in a more “centralized” fashion which gives the teams a lot more flexibility in how they work on the clients.
As it currently stands, if there was a critical bug or vulnerability found in Geth, the Ethereum network would suffer greatly and potentially be brought offline. Obviously this is something that we don’t ever want to happen and this problem needs to be dealt with as swiftly as possible. Don’t fret though - there is a way you can help!
If you’re running a Geth full node today, please consider switching over to one of the other options that are available (such as OpenEthereum, Nethermind or Besu). And if you’re not running a full node, the easiest way to get started is to use DAppNode.
Have a great day everyone,
Anthony Sassano
All information presented above is for educational purposes only and should not be taken as investment advice.
Follow and Support Me
Donations (sassal.eth and my Gitcoin Grant)
EthHub (ethhub.eth)