What is Go Ethereum? A Detailed Guide
The Ethereum blockchain is made possible by a protocol specified in the yellow paper and in a number of so-called Ethereum Improvement Proposals. Anyone can implement this protocol in order to provide the software necessary to connect to the public blockchain, execute and validate transactions, and participate in the consensus mechanism.
In fact, multiple implementations in a number of technologies are actively encouraged, in order to decrease the risk of implementation vulnerabilities affecting the whole network. One implementation, however, has established itself as the defacto reference implementation, Go Ethereum.
Go Ethereum, The Reference Implementation
Go Ethereum, usually abbreviated to Geth, is a mature implementation of the Ethereum node software. It is written in the Go programming language, a system programming language known for its performance and security.
Like its main rival, Parity Ethereum, Geth can be used to connect to the main Ethereum network, a number of test networks, such as Ropsten or Rinkeby, or custom networks. In contrast to Parity, Geth does not feature extensive support for private enterprise blockchains but does offer support for other Web3 concepts, such as decentralized private messaging and decentralized filestore. Furthermore, an enterprise-ready fork of Geth, Quorum, has been provided and is maintained by J.P. Morgan.
Supported Node Types
Geth includes a full implementation of the Ethereum virtual machine and uses the underlying P2P communication protocol to communicate with other peers on the network. There are three main types of Ethereum nodes, all of which are supported by Geth:
- Full nodes execute and validate all transactions and keep a copy of the state of the Ethereum blockchain. The actual state that is stored in the node’s database might be limited to the current state and a certain depth of the version history. However, historical state may be discarded in order to save space.
- Archive nodes are a special type of full node that also keeps track of the historical state. Such a node typically requires a lot of storage capacity to cope with the ever-increasing size of the Ethereum blockchain.
- Light nodes do not process transactions themselves, nor do they store any blockchain state. Instead, they rely on other peers to relay transactions and provide blockchain state for them. Light nodes are ideal for resource-constrained devices or nodes that only occasionally wish to transact with the blockchain.
On archive nodes and full nodes, Geth can be used to participate in the consensus mechanism by mining ether, although this is not efficient unless specific powerful hardware is used.
Proof of Authority Consensys
Geth, of course, implements Ethereum’s current main consensus mechanism, consisting of the Ethash block producer selection algorithm and the GHOST consensus algorithm. However, it also provides a proof of authority consensus mechanism, which can be used to connect to proof of authority networks, such as the Rinkeby test network or private proof of authority chains. In the Clique protocol, pre-approved authorities take turns in producing blocks. The protocol shares similarities with earlier Byzantine Fault Tolerance consensus (BFT) developed in the 1990s but forgoes expensive voting rounds. Essentially, this behavior favors availability over consistency, similarly to proof of work algorithms.
Clique is useful for providing stability in situations where there are no financial incentives for nodes to execute a consensus algorithm correctly, such as in an Ethereum test network, and in situations where certain nodes can be trusted with special privileges, namely acting as pre-selected block producers.
Geth, not only implements the Ethereum node software but also caters for other components that form part of the decentralized web ecosystem, namely distributed file storage and anonymous and secure messaging. To this end, Geth includes an implementation of Whisper, a secure decentralized messaging protocol, and is designed to work with the Swarm distributed file system.
Choosing the Right Node Software
When choosing an Ethereum implementation for a blockchain project, a number of considerations are important. Both, Go Ethereum and Parity, are stable, well-maintained implementations. Whereas Geth is the defacto reference implementation, Parity provides more support for experimental features and enterprise networks.