ITADN
taikoxyz/taiko-geth
taikoxyz/taiko-geth · 文件 下载 ZIP
文件最后提交记录最后更新时间
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈

taiko-geth

CI

代码库基于 go-ethereum v1.17.2

Tracing changes

taiko 团队的所有源代码更改均带有 "CHANGE(taiko): ...." 注释,所有额外文件的文件名均带有前缀 "taiko_"taiko_*.go)。

JSON-RPC API

taiko 特定的 JSON-RPC 调用的 JSON-RPC 文档可在此处找到 here

Go Ethereum

Ethereum 协议的 Golang 执行层实现。

API Reference Go Report Card Travis Discord Twitter

稳定版本和不稳定的 master 分支均可提供自动化构建。二进制 归档发布于 https://geth.ethereum.org/downloads/。

构建源代码

有关先决条件和详细构建说明,请参阅 安装说明

构建 geth 需要 Go(1.23 或更高版本)和 C 编译器。您可以使用 您喜欢的包管理器进行安装。安装完依赖项后,运行

make geth

或者,构建完整的工具集:

make all

可执行文件

go-ethereum 项目附带了多个位于 cmd 目录中的包装器/可执行文件。

命令描述
geth我们的主要 Ethereum CLI 客户端。它是进入 Ethereum 网络(主网、测试网或私有网络)的入口,能够作为全节点(默认)、归档节点(保留所有历史状态)或轻节点(实时获取数据)运行。其他进程可以通过在 HTTP、WebSocket 和/或 IPC 传输之上暴露的 JSON RPC 端点,将其用作进入 Ethereum 网络的网关。geth --help 以及 CLI 页面 以获取命令行选项。
clef独立签名工具,可用作 geth 的后端签名器。
devp2p用于在网络层与节点交互的工具,无需运行完整的区块链。
abigen源代码生成器,用于将以太坊合约定义转换为易于使用、编译时类型安全的 Go 包。它基于普通的 以太坊合约 ABI 运行,如果合约字节码也可用,则功能会扩展。然而,它也接受 Solidity 源文件,使开发更加流畅。详情请参阅我们的 原生 DApps 页面。
evmEVM(以太坊虚拟机)的开发者工具版本,能够在可配置的环境和执行模式下运行字节代码片段。其目的是允许对 EVM 操作码进行隔离的、细粒度的调试(例如 evm --code 60ff60ff --debug run)。
rlpdump开发者实用工具,用于将二进制 RLP(Recursive Length Prefix)转储(以太坊协议在网络和共识层面均使用的数据编码)转换为用户更友好的层级表示(例如 rlpdump --hex CE0183FFFFFFC4C304050583616263)。

运行 geth

遍历所有可能的命令行标志超出了本文范围(请参阅我们的 CLI Wiki 页面), 但我们列举了一些常见的参数组合,以便您快速了解 如何运行自己的 geth 实例。

硬件要求

最低配置:

  • 4 核或更多核心的 CPU
  • 8GB 内存
  • 1TB 可用存储空间以同步主网
  • 8 MBit/sec 下载速度的互联网服务

推荐配置:

  • 8 核或更多核心的快速 CPU
  • 16GB 或更多内存
  • 至少 1TB 可用空间的高性能 SSD
  • 25 MBit/sec 或更高下载速度的互联网服务

以太坊主网全节点

迄今为止最常见的场景是用户希望简单地与以太坊 网络交互:创建账户;转账;部署和交互合约。对于这种 特定用例,用户不关心多年前的历史数据,因此我们可以 快速同步到网络的当前状态。操作方法如下:

$ geth console

此命令将:

  • 以快照同步模式启动 geth(默认,可通过 --syncmode 标志更改), 使其下载更多数据,以换取避免处理整个以太坊网络的历史, 后者非常消耗 CPU。
  • 启动内置的交互式 JavaScript 控制台, (通过末尾的 console 子命令)你可以通过它使用 web3 方法 (注意:geth 中捆绑的 web3 版本非常旧,且未与官方文档保持同步), 以及 geth 自身的 管理 API。 此工具是可选的,如果你省略它,你始终可以使用 geth attach 将其附加到已运行的 geth 实例。

在 Holesky 测试网络上运行全节点

面向开发者,如果你想尝试创建以太坊 合约,你几乎肯定希望在熟悉整个系统之前, 不涉及任何真实资金。换句话说,与其连接到主 网络,你希望你的节点加入 测试 网络,该网络与 主网络完全等效,但仅使用测试以太币。

$ geth --holesky console

console 子命令具有与上文相同的含义,在测试网上同样有用。

然而,指定 --holesky 标志会稍微重新配置你的 geth 实例:

  • 客户端不会连接到主以太坊网络,而是连接到 Holesky 测试网络,该网络使用不同的 P2P 引导节点、不同的网络 ID 和创世 状态。
  • 客户端不会使用默认数据目录(例如在 Linux 上为 ~/.ethereum),geth 会嵌套到 holesky 子文件夹中更深一层(在 Linux 上为 ~/.ethereum/holesky)。请注意,在 OSX 和 Linux 上,这也意味着连接到正在运行的测试网节点 需要使用自定义端点,因为 geth attach 默认会尝试连接到 生产节点端点,例如 geth attach <datadir>/holesky/geth.ipc。Windows 用户不受 此影响。

注意:尽管某些内部保护措施可防止交易 在主网络和测试网络之间交叉,但你始终应 使用单独的账户用于娱乐和真实资金。除非你手动移动 账户,否则 geth 默认会正确隔离这两个网络,并且不会在它们之间 提供任何账户。

配置

作为向 geth 二进制文件传递众多标志的替代方案,你还可以通过以下方式传递 配置文件:

$ geth --config /path/to/your_config.toml

要了解文件应有的样子,您可以使用 dumpconfig 子命令 导出您的现有配置:

$ geth --your-favourite-flags dumpconfig

Docker 快速入门

在你的机器上快速运行 Ethereum 的方法之一,是使用 Docker:

docker run -d --name ethereum-node -v /Users/alice/ethereum:/root \
           -p 8545:8545 -p 30303:30303 \
           ethereum/client-go

这将使 geth 以 snap-sync 模式启动,并分配 1GB 的 DB 内存,正如 上述命令所做的那样。它还会在你的主目录中创建一个持久卷,用于 保存你的区块链,并映射默认端口。还有一个 alpine 标签 可用于该镜像的精简版本。

不要忘记 --http.addr 0.0.0.0,如果你希望从其他容器 和/或主机访问 RPC。默认情况下,geth 绑定到本地接口,RPC 端点无法 从外部访问。

以编程方式与 geth 节点交互

作为一名开发者,迟早你会希望开始通过自己的程序与 geth 以及 以太坊网络进行交互,而不是通过控制台手动操作。为了帮助 实现这一点,geth 内置了对基于 JSON-RPC 的 API 的支持(标准 APIgeth 特定 API)。 这些可以通过 HTTP、WebSockets 和 IPC(在基于 UNIX 的 平台上为 UNIX 套接字,在 Windows 上为命名管道)进行暴露。

IPC 接口默认启用,并暴露 geth 支持的所有 API, 而 HTTP 和 WS 接口需要手动启用,并且由于安全原因仅暴露 部分 API。这些可以按照预期进行开启/关闭和配置。

基于 HTTP 的 JSON-RPC API 选项:

  • --http 启用 HTTP-RPC 服务器
    • --http.addr HTTP-RPC 服务器监听接口 (默认: localhost)
    • --http.port HTTP-RPC 服务器监听端口 (默认: 8545)
    • --http.api 通过 HTTP-RPC 接口提供的 API (默认: eth,net,web3)
    • --http.corsdomain 接受跨域请求的域名列表,以逗号分隔 (由浏览器强制执行)
    • --ws 启用 WS-RPC 服务器
    • --ws.addr WS-RPC 服务器监听接口 (默认: localhost)
    • --ws.port WS-RPC 服务器监听端口 (默认: 8546)
    • --ws.api 通过 WS-RPC 接口提供的 API (默认: eth,net,web3)
    • --ws.origins 接受 WebSocket 请求的来源
    • --ipcdisable 禁用 IPC-RPC 服务器
    • --ipcpath 数据目录内的 IPC 套接字/管道文件名 (显式路径会绕过该目录)

您需要使用您自己的编程环境的功能 (库、工具等) 来 通过 HTTP、WS 或 IPC 连接到配置了上述标志的 geth 节点,并且 需要在所有传输层上支持 JSON-RPC。您可以 对多个请求复用同一连接!

注意:在这样做之前,请务必了解开放基于 HTTP/WS 的 传输层所带来的安全影响!互联网上的黑客正在积极尝试 颠覆暴露了 API 的 Ethereum 节点!此外,所有浏览器标签页都可以访问 本地运行的 Web 服务器,因此恶意网页可能会尝试颠覆本地可用的 API!

运营私有网络

维护您自己的私有网络更为复杂,因为官方网络中许多被视为理所当然的配置需要手动设置。

不幸的是,自 The Merge 以来, 不再能够轻松设置一个 geth 节点网络,而无需同时设置对应的 beacon chain。

根据您的用例,有三种不同的解决方案:

  • 如果您正在寻找一种简单的方法来在 CI 中从 go 测试智能合约,您可以使用 Simulated Backend
  • 如果您想要一个方便的单节点测试环境,您可以使用我们的 Dev Mode
  • 如果您正在寻找一个多节点测试网络,您可以使用 Kurtosis 轻松设置一个。

Contribution

感谢您考虑帮助改进源代码!我们欢迎来自互联网上任何人的贡献, 并对哪怕是最小的修复也深表感激!

如果您想为 go-ethereum 做出贡献,请 fork、修复、commit 并发送 pull request 供维护者审查并合并到主代码库中。如果您希望提交 更复杂的更改,请先在 our Discord Server 上与核心开发人员沟通, 以确保这些更改符合项目的一般理念,和/或获得 一些早期反馈,这可以使您的工作更轻松,并使我们的审查 和合并过程快速而简单。

请确保您的贡献符合我们的编码指南:

  • 代码必须遵循 Go 官方 格式化 指南(即使用 gofmt)。
  • 代码必须按照 Go 官方 注释 指南进行文档化。
  • Pull request 必须基于 master 分支并针对该分支提交。
  • 提交信息应以所修改的包作为前缀。
    • 例如:"eth, rpc: make trace configs optional"

有关配置环境、管理项目依赖项以及 测试流程的更多详细信息,请参阅 开发者指南

为 geth.ethereum.org 做贡献

对于 go-ethereum 网站 的贡献,请检出并针对 website 分支提交 pull request。 有关更详细的说明,请参阅 website 分支的 README 或网站的 贡献 页面。

许可证

go-ethereum 库(即 cmd 目录之外的所有代码)采用 GNU 宽通用公共许可证 v3.0 授权, 该许可证也包含在我们仓库的 COPYING.LESSER 文件中。

go-ethereum 二进制文件(即 cmd 目录内的所有代码)采用 GNU 通用公共许可证 v3.0 授权, 该许可证也包含在我们仓库的 COPYING 文件中。