49

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 fulfill?

0

5 Answers 5

38

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.

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:

Deprecated or abandoned projects:

Official reference implementations (CLI):

Graphical clients:

Third Party clients:

NOTE: all clients are listed in alphabetical order.

4
  • 1
    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? Nov 14, 2017 at 9:24
  • Is MyCrypto also considered an ethereum node? If not, how would you describe that then? (I'm very confused)
    – Happy Bird
    Apr 8, 2019 at 12:49
  • Nethermind in .NET Core github.com/NethermindEth/nethermind May 13, 2019 at 16:05
  • From the github page - Pyethapp is officially deprecated.
    – DRP
    Jul 15, 2019 at 15:41
15

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.

3
  • why is there no PHP? just wondering. Feb 4, 2016 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, 2016 at 19:39
  • 2
    @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? Dec 5, 2017 at 18:05
5

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

2

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.

0

To put it briefly , an Ethereum client is simply a piece of software that provide an application a gateway to interact with the ethereum blockchain .

Full nodes running on ethereum clients validate transactions in ethereum . There are remote clients as well like metamask that depend on full clients for access of the blockchain . Remote clients cannot perform validations on the blokchain,they provide a functionality of a wallet i.e they only create/braodcast transactions.

Clients can be written in many languages , parity (written in Rust ) and Geth(written in golang) are the most famous ones ...

Whereas Parity supports all of the ethereum-based blockchains , for different blockchains you require different versions of Geth.

These clients provide an API (JSON-RPC API) through which you can send/recieve JSON requests.

Reference

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

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