taiko-geth
代码库基于 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 执行层实现。
稳定版本和不稳定的 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 页面。 |
evm | EVM(以太坊虚拟机)的开发者工具版本,能够在可配置的环境和执行模式下运行字节代码片段。其目的是允许对 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 的支持(标准 API
和 geth 特定 API)。
这些可以通过 HTTP、WebSockets 和 IPC(在基于 UNIX 的
平台上为 UNIX 套接字,在 Windows 上为命名管道)进行暴露。
IPC 接口默认启用,并暴露 geth 支持的所有 API,
而 HTTP 和 WS 接口需要手动启用,并且由于安全原因仅暴露
部分 API。这些可以按照预期进行开启/关闭和配置。
基于 HTTP 的 JSON-RPC API 选项:
--http启用 HTTP-RPC 服务器--http.addrHTTP-RPC 服务器监听接口 (默认:localhost)--http.portHTTP-RPC 服务器监听端口 (默认:8545)--http.api通过 HTTP-RPC 接口提供的 API (默认:eth,net,web3)--http.corsdomain接受跨域请求的域名列表,以逗号分隔 (由浏览器强制执行)--ws启用 WS-RPC 服务器--ws.addrWS-RPC 服务器监听接口 (默认:localhost)--ws.portWS-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 文件中。