跳至内容
0%

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

Alchemy team headshot

作者 Alchemy

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

Geth 与节点简介

以太坊节点是以太坊区块链网络中的计算机。这些节点是真实运行软件的计算机,用于检查、存储区块,有时也生成区块。

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

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

Geth 的一些特点:

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

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

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

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

以太坊有一个核心网络(主网),所有交易都在其中进行,但它同时也使用了一些其他测试网络,用于测试功能(测试网)。可以考虑使用这些“游戏”区块链,在本地环境之外体验区块链功能。

1. 主网

以太坊主网是用于生成以太坊的网络。ETH 可以被挖出或在交易所交易,且始终可用。

2. Ropsten

Ropsten 是最接近主网的测试网络,基于相同的工作量证明机制。由于测试用 ETH 的挖矿方式与主网 ETH 相同,且很容易免费获得,因此这个 Ropsten 测试网络容易遭受垃圾邮件攻击。

3. Rinkeby

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

要开始在 Rinkeby 测试网上进行开发,可以从免费水龙头获取 Rinkeby Ether

4. Kovan

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

5. Goerli

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

了解如何获取 Goerli Ether,并使用 Alchemy 的 GoETH 水龙头开始在 Goerli 测试网络上进行开发。

6. Kiln

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

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

进一步了解 Kiln 测试网,并获取模拟的 Kiln Ether,开始在 Kiln 上进行开发。

什么是 Geth 节点?

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

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

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

轻节点

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

轻节点:

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

全节点

全节点验证区块中的交易是否符合以太坊黄皮书中规定的标准。它们这样做是为了确保通过网络传播的区块是真实有效的。你可以信赖它们所做的工作。全节点正是通过这种验证方式,使网络保持符合以太坊的要求。

全节点:

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

归档节点

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

归档节点:

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

安装 Geth 的要求

  • 多核 CPU(7GB 以上内存)
  • 本地 SSD 硬盘,至少约 600GB 以上的可用空间
  • 可选:使用 16/32 GB 以上内存以借助缓存优化性能。通过启用缓存功能(即使用 “--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 文件夹/根文件夹的位置打开终端,运行以下命令来启动它:

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

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

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

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

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

结语

在大多数供大众使用的网页/扩展钱包中(如 MetaMaskCoinbase、Rainbow 等),Geth 通常已经内置其中。

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

Background gradient

构建区块链应用

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