I have seen the usage of the word full node many times. What exactly is an Ethereum full node? What are bootstrap nodes and light nodes/clients? Are there any other types of nodes?
Ethereum Nodes – Types and Their Functions
nodes
Related Solutions
Disclaimer: I run ethernodes.org
There is a node explorer available at ethernodes.org which tries to estimate the number of nodes on the Ethereum network.
The estimation is based on an active crawling process that recursively connects to a node and asks for its known peers. As this approach only reaches nodes that are accessible from the outside a second, passive approach is used to reach nodes behind a NAT.
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:
Aleth
- C++ client: https://github.com/ethereum/aleth. (It was formerly known ascpp-ethereum
: https://github.com/ethereum/webthree-umbrella)Geth
- Golang client of thego-ethereum
project: https://github.com/ethereum/go-ethereumTrinity
- Python client: https://github.com/ethereum/trinity
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:
Besu
- (ex-Pantheon
) Java client by PegaSys: https://github.com/hyperledger/besuEthereumJ
- Java client by the ether.camp team: https://github.com/ethereum/ethereumjEthereumJS VM
- Javascript Ethereum Virtual Machine: https://github.com/ethereumjs/ethereumjs-vmMana
- Elixir by POA Network - https://github.com/mana-ethereum/manaMinimal
- Go client by umbracle - https://github.com/umbracle/minimalNethermind
- C# / .NET by NethermindParity Ethereum
- Rust client by Parity Technologies : https://www.parity.io/ethereum/
Third party implementations (GUI)
Non-official clients with a graphical user interface are:
Etherwall
, a Qt client like the good ol' bitcoin clients: https://github.com/almindor/etherwall
Deprecated or abandoned projects:
Official reference implementations (CLI):
Pyethapp
- (pyethapp has been deprecated
) Python client of thepyethereum
project: https://github.com/ethereum/pyethapp
Graphical clients:
AlethZero
(Alethzero has been deprecated
): https://github.com/ethereum/alethzeroMist Browser
(Mist and Ethereum Wallet have been deprecated
): https://github.com/ethereum/mist
Third Party clients:
ethereumH
- Haskell client from consensys, but it's not developed anymore: https://github.com/jamshidh/ethereum-client-haskell (project has not been updated in a long time)node-blockchain-server
- simple Javascript server: https://github.com/ethereumjs/node-blockchain-server (project has not been updated in a long time)ruby-ethereum
- Ruby client: https://github.com/janx/ruby-ethereum (project has not been updated in a long time)
NOTE: all clients are listed in alphabetical order.
Best Answer
I think that Bitcoin wiki has a good article: https://en.bitcoin.it/wiki/Full_node its not for ethereum but the concept is pretty much the same.
Full node is somebody connected to p2p network that verifies the blocks. I believe that all ethereum clients at this point are full nodes.
Lightweight nodes do not check or download the whole block-chain. See this: https://github.com/ethereum/wiki/wiki/Light-client-protocol
Miners are full nodes that, in addition, validate the new blocks by solving a crypto problem.