---
title: "什么是 Geth 节点以及如何运行"
description: "要求、安装与部署"
---

## Geth 与节点简介

[以太坊节点](http://www.alchemy.com/overviews/what-is-an-ethereum-node)是以太坊区块链网络中的计算机。这些节点是真实运行软件的计算机，用于检查、存储区块，有时也生成区块。

“客户端”是这类软件的名称。它让我们能够通过 JSON-RPC API 与区块链交互、读取并验证区块链，以及读取或写入智能合约。

Geth 是这些客户端之一，也是最流行的客户端之一。它使用 Go 语言编写，由以太坊基金会的一部分人员以及其他协作者共同维护。

**Geth 的一些特点：**

- 自带 JavaScript 控制台，可通过 "geth console" 运行。
- 该客户端可与其他 JavaScript 客户端配合使用（web3js）。
- 内置 Rinkeby 测试网（或搭建自己的私有以太坊网络）
- 通常被视为其他以太坊节点的标准参照。

在最新的这篇 Alchemy 博客中，我们将学习如何安装并运行一个 Geth 节点。

## 网络（主网与测试网）与 Geth

要理解 Geth 节点，我们需要先了解以太坊的不同网络。

以太坊有一个核心网络（主网），所有交易都在其中进行，但它同时也使用了一些[其他测试网络](https://www.alchemy.com/overviews/what-are-testnets)，用于测试功能（测试网）。可以考虑使用这些“游戏”区块链，在本地环境之外体验区块链功能。

### 1. 主网

[以太坊主网](https://www.alchemy.com/rpc/ethereum)是用于生成以太坊的网络。ETH 可以被挖出或在交易所交易，且始终可用。

### 2. Ropsten

Ropsten 是最接近主网的测试网络，基于相同的工作量证明机制。由于测试用 ETH 的挖矿方式与主网 ETH 相同，且很容易免费获得，因此这个 [Ropsten 测试网络](https://www.alchemy.com/overviews/ropsten-testnet)容易遭受垃圾邮件攻击。

### 3. Rinkeby

Rinkeby 测试网使用权威证明机制，这意味着除非你能证明自己的身份，否则无法获得测试用 ETH。验证方式是将以太坊地址与社交媒体账号（例如 Facebook）关联。这使得攻击网络变得困难得多，因为要获得大量 ETH 需要付出相当大的努力。Rinkeby 只能通过 Geth 节点访问。

要开始在 Rinkeby 测试网上进行开发，可以[从免费水龙头获取 Rinkeby Ether](https://rinkebyfaucet.com/)。

### 4. Kovan

主要区别在于，Kovan 仅在 parity 节点上可用，且你必须通过 GitHub 验证身份。

### 5. Goerli

Goerli 是在权威证明框架下部署的。它采用 Clique 共识机制，该机制最初由 Chainsafe 和 Afri Schoedon 开发。Goerli 网络由社区维护，得到了 Geth、Parity、[Nethermind](https://www.alchemy.com/dapps/nethermind) 和 Hyperledger Besu 的支持。相比 Kovan 和 Rinkeby，Goerli 拥有更大的网络规模、更多的节点数量以及更广泛的客户端支持。

了解[如何获取 Goerli Ether](https://goerlifaucet.com/)，并使用 Alchemy 的 [GoETH 水龙头](https://goerlifaucet.com/)开始在 Goerli 测试网络上进行开发。

### 6. Kiln

在撰写本文时，由于以太坊正全力推进今年晚些时候的权益证明合并，上述许多测试网将被弃用或升级。截至目前，Kiln 测试网是切换到权益证明之前的最后一个公共测试网。

这次切换对以太坊网络而言是一项重大成就，它即将经历自诞生以来最重大的变革之一。假设 Kiln 不出现问题，目前的以太坊测试网（Goerli、Ropsten 等）将能够不受干扰地继续运行。

进一步了解 [Kiln 测试网](https://www.alchemy.com/overviews/kiln-testnet)，并[获取模拟的 Kiln Ether](https://kilnfaucet.com/)，开始在 Kiln 上进行开发。

## 什么是 Geth 节点？

<ImageBlock
  src="https://media.alchemy.com/1704166765-geth-node.png"
  alt="Geth 节点类型示意图：Ethereum 上的轻节点、全节点和归档节点"
  width={1224}
  height={602}
/>

借助 Geth，你可以建立自己的私有以太坊网络。以太坊网络的区块链从一个被称为创世区块的根区块开始。创世区块中不包含任何交易。

以太坊节点有多种类型，但 Geth 节点可分为三类：轻节点、全节点和归档节点。

### _轻节点_

由于轻节点不验证每一个区块，它们并不保存完整的以太坊区块链副本，因此依赖来自全节点的数据。运行轻节点有若干优势，包括启动更快、存储占用更低、计算/内存需求更少。轻节点的信任级别较低，且往往依赖全节点，这可能带来问题。

轻节点：

- 存储区块头链，并请求获取其余数据。
- 根据区块头中的状态根验证数据的有效性。
- 为低性能设备（如嵌入式设备或手机）提供用途，这些设备无法承担存储数 GB 区块链数据的开销。

### _全节点_

全节点验证区块中的交易是否符合[以太坊黄皮书](https://ethereum.github.io/yellowpaper/paper.pdf)中规定的标准。它们这样做是为了确保通过网络传播的区块是真实有效的。你可以信赖它们所做的工作。全节点正是通过这种验证方式，使网络保持符合以太坊的要求。

全节点：

- 存储完整的区块链数据。
- 参与区块验证，并验证所有区块与状态。
- 推导出所有状态。
- 为网络提供服务，并按请求提供数据。

### _归档节点_

归档节点是保存完整交易历史的节点。网络的健康与结构状况都依赖这些节点。

归档节点：

- 存储全节点保存的所有内容，并建立历史状态的存档。如果你想查询账户余额或任何链上数据，或者只是想简单可靠地测试自己的交易集而不必通过 [OpenEthereum](https://ethereum.org/en/developers/docs/nodes-and-clients/#:~:text=Stores%20everything%20kept,and%20chain%20analytics.) 挖矿处理，这些数据就是必需的。
- 提供以 TB 为单位的数据量。这使得它们对普通用户吸引力不大，但对区块浏览器、钱包服务商和链上分析等服务而言非常实用。

<ImageBlock
  src="https://media.alchemy.com/1704166787-pow-consensus.png"
  alt="Ethereum 节点在网络中达成工作量证明共识的示意图"
  width={1079}
  height={493}
  caption="source: https://ethereum.org/en/developers/docs/nodes-and-clients/"
/>

‍

## 安装 Geth 的要求

- 多核 CPU（7GB 以上内存）
- 本地 SSD 硬盘，至少约 600GB 以上的可用空间
- 可选：使用 16/32 GB 以上内存以借助缓存优化性能。通过启用缓存功能（即使用 “--cache” 标志），Geth 可以从内存而不是硬盘读取状态数据。
- Mac 用户需要 [Homebrew](https://formulae.brew.sh/formula/ethereum)
- Linux/Ubuntu 用户需要 [PPA](https://launchpad.net/~ethereum/+archive/ubuntu/ethereum)
- 可选：Parity（了解更多信息，请参阅[如何从 Parity 迁移到 Geth](https://hub.docker.com/r/ethereum/client-go/)）‍

## Geth 安装方式

你可以通过包管理器安装 Geth——在 MacOS 上使用 homebrew，在 Ubuntu 上使用 PPA，也可以直接下载，或在 [docker](https://hub.docker.com/r/ethereum/client-go/) 中运行，甚至[从源码构建](https://github.com/ethereum/go-ethereum)。

### 在 MacOS 终端中使用 Homebrew：

<CodeSnippet
  code={`\$ brew tap ethereum/ethereum
\$ brew install ethereum`}
  language="text"
  theme="light"
/>

可以在[这里](https://hub.docker.com/r/ethereum/client-go/)查看一系列有用的命令列表（abigen、bootnode、checkpoint-admin、clef、devp2p、ethkey、evm、faucet、geth 等），也可以运行：

<CodeSnippet code={`\$ geth --help`} language="text" theme="light" />

### 在 linux/ubuntu 上使用 PPA：

<CodeSnippet
  code={`\$ sudo add-apt-repository -y ppa:ethereum/ethereum`}
  language="text"
  theme="light"
/>

### 安装稳定版 go-Ethereum：

<CodeSnippet
  code={`\$ sudo apt-get update
\$ sudo apt-get install ethereum`}
  language="text"
  theme="light"
/>

### Docker：

从[这里](https://hub.docker.com/r/ethereum/client-go/)下载 Docker，然后运行以下命令：

<CodeSnippet
  code={`\$ docker pull ethereum/client-go:latest`}
  language="text"
  theme="light"
/>

接着运行：

<CodeSnippet
  code={`\$ docker run ethereum/client-go:latest`}
  language="text"
  theme="light"
/>

## 运行 Geth

在我们解压出 Geth 文件夹/根文件夹的位置打开终端，运行以下命令来启动它：

<CodeSnippet
  code={`\$ ./Geth console --testnet --syncmode "light" --rpc --rpcaddr "localhost" --rpcport "8485" --rpccorsdomain "*" --rpcapi="db,eth,net,web3,personal"`}
  language="text"
  theme="light"
/>

这会立即将我们带入 Geth 控制台。

通过输入 `net`，我们可以查看是否有任何对等节点。通过输入 `eth.syncing`，我们可以查看节点当前是否正在同步。你的节点可能需要重启后才会开始同步。

例如，运行 `eth.syncing` 会输出以下示例查询结果：

<ImageBlock
  src="https://media.alchemy.com/1704167169-eth-syncing-output.svg"
  alt="Geth 控制台输出的 eth.syncing 查询结果，显示区块同步进度"
  width={1570}
  height={393}
/>

## 结语

在大多数供大众使用的网页/扩展钱包中（如 [MetaMask](https://www.alchemy.com/dapps/metamask)、[Coinbase](https://www.alchemy.com/dapps/coinbase)、Rainbow 等），Geth 通常已经内置其中。

但是，如果你想尝试挖矿，或者开发自己定制的以太坊软件，安装并运行 Geth 是非常值得的。如果你只是想掌控自己的节点和钱包私钥（自行签署交易，而不依赖第三方软件），Geth 同样有用。使用 Geth，你现在就可以打开以太坊开发的整个世界！
