跳至内容
0%

什么是 Geth 节点,以及如何运行一个

Alchemy team headshot

作者 Alchemy

发布于 2022年4月18日1 分钟阅读

Geth 与节点简介

Ethereum 节点是 Ethereum 区块链网络的组成部分。这些节点是运行相应软件的实际计算机,负责检查、存储,有时还负责生成区块。

“客户端”是这类软件的名称。它让我们能够通过 JSON-RPC API 与区块链交互,读取并验证区块链,或对智能合约进行读写操作。

Geth 是这些客户端之一,也是使用最广泛的客户端之一。它用 Go 语言编写,由一批任职于 Ethereum Foundation 的人员及其他协助者维护更新。

Geth 的一些特点:

  • 自带 JavaScript 控制台,可通过 “geth console” 运行。
  • 该客户端可与其他 JavaScript 客户端配合使用(web3js)。
  • 内置 Sepolia 及其他测试网(或可自行搭建私有 Ethereum 网络)
  • 通常被视为其他 Ethereum 节点的标准参照。

在本篇 Alchemy 博客中,我们将学习如何安装并运行 Geth 节点。

网络(主网与测试网)与 Geth

要理解 Geth 节点,首先需要了解 Ethereum 的不同网络。

Ethereum 有一个核心网络(主网),所有交易都在其上发生,同时它也使用了若干其他测试网络用于测试(测试网)。可以考虑使用这些“游乐场”区块链,在本地主机之外体验区块链功能。

1. 主网

Ethereum 主网是用于生成 Ethereum 的网络。ETH 可以在其中被挖矿或在交易所交易,且始终可用。

2. Sepolia

Sepolia 是当前 Geth 开发者应使用的 Ethereum 测试网。它是一个由 Ethereum 核心开发者维护的权益证明网络,而 Ropsten、Rinkeby、Kovan、Goerli、Kiln 等旧测试网已被弃用。

要开始在 Sepolia 上构建,请从水龙头获取 Sepolia ETH。

什么是 Geth 节点?

Geth 节点类型示意图:Ethereum 上的轻节点、全节点和归档节点

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

Ethereum 节点有多种类型,而 Geth 节点则分为三类:轻节点、全节点和归档节点。

轻节点

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

轻节点:

  • 存储区块头链,其余数据按需请求。
  • 依据区块头中的状态根验证数据的有效性。
  • 为存储空间有限的低性能设备(如嵌入式设备或手机)提供用途,这些设备无法承受存储数 GB 的区块链数据。

全节点

全节点验证区块中的交易是否符合 Ethereum Yellow Paper 中规定的标准。以此确保在网络中传输的区块是真实有效的。你可以信赖它们的工作。全节点正是通过这种验证方式,使网络保持符合 Ethereum 的要求。

全节点:

  • 存储完整的区块链数据。
  • 参与区块验证,验证所有区块和状态。
  • 推导所有状态。
  • 为网络提供服务,按需提供数据。

归档节点

归档节点是保存完整交易历史的节点。网络的健康程度与结构在很大程度上依赖这些节点。

归档节点:

  • 存储全节点所保存的一切内容,并构建历史状态的归档。如果你想查询账户余额或任何链上数据,或者只是想简单可靠地测试自己的交易集而不通过 OpenEthereum 挖矿处理,这一功能是必需的。
  • 提供的数据量达到数太字节(TB)级别。这使它们对普通用户吸引力较低,但对区块浏览器、钱包服务商和链上分析等服务而言十分实用。
Ethereum 节点在网络中达成工作量证明共识的示意图
source: https://ethereum.org/en/developers/docs/nodes-and-clients/

‍

安装 Geth 的要求

  • 多核 CPU(7GB+ 内存)
  • 本地 SSD 硬盘,至少 ~600GB+ 可用空间
  • 可选:使用 16/32 GB+ CPU 以通过缓存获得优化性能。启用缓存功能(即使用 “--cache” 参数)后,Geth 可以从内存而非硬盘中获取状态数据。
  • Mac 用户需要 Homebrew
  • Linux/Ubuntu 用户需要 PPA
  • 可选:Parity(更多信息请参阅如何从 parity 迁移到 Geth)‍

Geth 安装方式

你可以通过包管理器安装 Geth(MacOS 上使用 homebrew,Ubuntu 上使用 PPA),也可以直接下载,或在 docker 中运行,甚至从源码构建。

在 MacOS 终端中使用 Homebrew:

text
Copied
$ brew tap ethereum/ethereum $ brew install ethereum

可以在这里查看各种实用命令列表(abigen、bootnode、checkpoint-admin、clef、devp2p、ethkey、evm、faucet、geth 等),也可以运行:

text
Copied
$ geth --help

在 linux/ubuntu 上使用 PPA:

text
Copied
$ sudo add-apt-repository -y ppa:ethereum/ethereum

安装稳定版 go-Ethereum:

text
Copied
$ sudo apt-get update $ sudo apt-get install ethereum

Docker:

从这里下载 Docker。然后运行以下命令:

text
Copied
$ docker pull ethereum/client-go:latest

接着运行:

text
Copied
$ docker run ethereum/client-go:latest

运行 Geth

在解压 Geth 文件夹/根文件夹所在的位置打开终端,运行以下命令,即可启动 Geth:

text
Copied
$ ./Geth console --testnet --syncmode "light" --rpc --rpcaddr "localhost" --rpcport "8485" --rpccorsdomain "*" --rpcapi="db,eth,net,web3,personal"

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

输入 net,我们可以查看是否有任何 peer。输入 eth.syncing,可以查看节点当前是否正在同步。节点可能要在重启后才会开始同步。

例如,运行 eth.syncing 会输出如下示例查询结果:

Geth 控制台输出的 eth.syncing 查询结果,显示区块同步进度

结语

在目前面向大众的绝大多数网页/扩展钱包中(MetaMask、Coinbase、Rainbow 等),Geth 通常已经内置其中。

但如果你想尝试挖矿,或开发自己的 Ethereum 定制软件,安装并运行 Geth 仍然是值得的。如果你只是想自己掌控节点及钱包私钥(自行签署交易,而不依赖第三方软件),这同样很有用。借助 Geth,你就能开启 Ethereum 开发的整个世界!

Background gradient

构建区块链应用

Alchemy 将最强大的 Web3 开发者产品和工具与资源、社区及专业支持结合在一起。