47 lines
2.6 KiB
Markdown
47 lines
2.6 KiB
Markdown
|
||
## Node architecture
|
||
|
||
Geth is an [execution client](https://ethereum.org/en/developers/docs/nodes-and-clients/#execution-clients).
|
||
Originally, an execution client alone was enough to run a full Ethereum node.
|
||
However, ever since Ethereum turned off proof-of-work and implemented proof-of-stake,
|
||
Geth must to be coupled to another piece of software called a
|
||
[“consensus client”](https://ethereum.org/en/developers/docs/nodes-and-clients/#consensus-clients).
|
||
|
||
The execution client is responsible for transaction handling, transaction gossip, state management and
|
||
the Ethereum Virtual Machine (EVM). However, Geth is **not** responsible for block building, block gossiping
|
||
or handling consensus logic. These are in the remit of the consensus client.
|
||
|
||
The relationship between the two Ethereum clients is shown in the schematic below. The two clients each
|
||
connect to their own respective peer-to-peer (P2P) networks. This is because the execution clients gossip
|
||
transactions over their P2P network enabling them to manage their local transaction pool. The consensus clients
|
||
gossip blocks over their P2P network, enabling consensus and chain growth.
|
||
|
||
![node-architecture](/assets/node_architecture.png)
|
||
|
||
For this two-client structure to work, consensus clients must be able to pass bundles of transactions to
|
||
Geth to be executed. Executing the transactions locally is how the client validates that the transactions
|
||
do not violate any Ethereum rules and that the proposed update to Ethereum’s state is correct. Likewise,
|
||
when the node is selected to be a block producer the consensus client must be able to request bundles of
|
||
transactions from Geth to include in the new block. This inter-client communication is handled by a local
|
||
RPC connection using the engine API which is part of the JSON-RPC API exposed by Geth.
|
||
|
||
|
||
|
||
## What does Geth do?
|
||
|
||
As an execution client, Geth is responsible for creating the execution payloads - the bundles of transactions -
|
||
that consensus clients include in their blocks. Geth is also responsible for re-executing transactions that arrive
|
||
in new blocks to ensure they are valid. Executing transactions is done on Geth's embedded computer, known as the
|
||
Ethereum Virtual Machine (EVM).
|
||
|
||
Geth also offers a user-interface to Ethereum by exposing a set of RPC methods that enable users to query the
|
||
Ethereum blockchain, submit transactions and deploy smart contracts using the command line, programmatically
|
||
using Geth's built-in console, web3 development frameworks such as Hardhat and Truffle or via web-apps and wallets.
|
||
|
||
In summary, Geth is:
|
||
- a user gateway to Ethereum
|
||
- home to the Ethereum Virtual Machine, Ethereum's state and transaction pool.
|
||
|
||
|
||
|