Ethereum.org's introductory Command Line Interface tutorial mentions these clients:

  • eth - a C++ client suitable for mining, IoT and contract development
  • geth - a security audited Go client for use with Mist, suitable for Dapp development
  • pyethapp - Python client to help understand and hack Ethereum

On the Wiki I also read about:

  • Webthree - C++
  • AlethZero - ?
  • EthereumJs - JavaScript

What exactly is an Ethereum client? Is it a full network node that can post transactions to the blockchain (if that is the correct lingo?) or could it also be a light JS client that connects from a browser to a full node?

Could someone please shed some light on what clients there currently are and what roles they fulfil?

up vote 31 down vote accepted

An 'Ethereum client' is just a term. It refers to any node able to parse and verify the blockchain, its smart contracts and everything related. It also allows you/provides interfaces to create transactions and mine blocks which is the key for any blockchain interaction.

Official reference implementations (CLI)

There are currently three reference implementations available, as you already highlighted:

All clients should work the same, from the user's perspective. They provide the same interfaces and so on. For example, if you launch a DApp or the Ethereum Wallet or a DApp browser instance, it should not note any difference in communicating with the client.

Official reference implementations (GUI)

Graphical clients available by the Ethereum core developers are:

Third party implementations (CLI)

Non-official clients implementing the yellow paper specification are:

Third party implementations (GUI)

Non-official clients with a graphical user interface are:

  • So an ethereum client is actually a full server node? If so, is it participating the same as the real server nodes? Who is providing the real production server nodes? Why dont they call it a server instead of a client? Is it just developers, miners and exchanges, or are there commercial people hosting nodes for the general benefit? If the former, then developers PCs would presumably the be majority? What if they all switch off their machines? – John Little Nov 14 '17 at 9:24

There are a couple of "reference implementations" that the Ethereum foundation is supporting.

  1. Ethereum C++ (known as Eth or "TurboEthereum")
  2. Go Ethereum (known for the command line client Geth)
  3. EthereumJ
  4. Pyethereum

There are a couple of reasons for doing this.

  1. Finding consensus problems.

Bitcoin was created in an isolated environment, because of this some bugs crept in that are hard to fix because they break the consensus and would require a fork. Because of this anybody wanting to build a app to support the Bitcoin protocol need to add these bugs in or they won't be able to get consensus.

By supporting multiple clients from the start you have multiple people interpreting the white and yellow paper so any consensus issues will pop-up much faster, and they did. Luckily this is happening less and less as the technology matures.

  1. Spreading the risk.

If there is an attack vector or bug in any of the Ethereum implementations it means the network is usually fine as there is a bigger diversity of clients available. As I'm writing this this is sadly not 100% true yet because Geth has a majority of the network but we hope that the other clients will grow in usage in the coming months.

  1. Playing on strengths

Not all languages are good in the same thing (some opinions in the next bit)

  • C++ is super fast, but harder to build or read.
  • Go is easy to build, code and read but loses some of the speed.
  • Java can be used in most Enterprise environments and has the best support for Android.
  • Python is very easy to understand and read but gives up some speed to do it.

Hope this helps understand it.

  • why is there no PHP? just wondering. – Patoshi パトシ Feb 4 '16 at 19:13
  • 3
    PHP is a scripting language made for web-applcaitions. It's not suitable for large performance driven applications. PHP on the front-end would require a server to interpret it. Javascript requires no server and is therefor ideal for DApps. – Maran Feb 4 '16 at 19:39
  • 1
    @Patoshi short comment: why not wonder instead, what is wrong with PHP that it is not used in any large development environment or in none that is not related with web development? – JuanRocamonde Dec 5 '17 at 18:05

As you mentioned there are 3 official clients mentioned in the wiki

  1. Webthree (C++)
  2. Geth (Go)
  3. pyeth (Python)

by the way, a github search resulted in a lot more list..

enter image description here

This could do with an update:

https://github.com/ethereum/wiki/wiki/Clients,-tools,-dapp-browsers,-wallets-and-other-projects

I'm still not sure which can run a full client/node. The only ones on Ethstats are Geth, Parity and C++, plus a few unspecified nodes: enter image description here

On Ethernodes, Geth has about two thirds, and Parity has most of the other third. I haven't seen the names for the other clients before. I looked up a couple of the tiny ones. Moac just provides an interface for Geth, Parity and Eth. Simillarly, Pirl (349) uses Geth. Eth (C++) has 9 nodes, ethereumJS has 27. Alot of the other clients start with g, indicating that they may be a custom/forked Geth client. Here's an archived snapshot of these stats.

Your Answer

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Not the answer you're looking for? Browse other questions tagged or ask your own question.