本文档涵盖了用户和应用程序与 geth 以太坊客户端交互的各种接口。它描述了命令行界面、JSON-RPC API、控制台访问以及用于共识层通信的专用接口。
有关底层网络协议和点对点通信的信息,请参阅网络。有关这些接口公开的核心区块链和交易处理系统的详细信息,请参阅核心组件。
Geth 提供多种用户界面以适应不同的用例和集成模式。这些接口通过不同的传输机制和交互模型公开相同的底层功能。
来源:cmd/geth/main.go1-406 internal/ethapi/api.go1-100 eth/backend.go90-126 eth/api_backend.go47-53
geth 命令行界面是运行和管理以太坊节点的入口点。它实现在 cmd/geth/main.go 中,并使用 urfave/cli 框架进行命令和标志处理。
CLI 应用程序定义为一个全局变量 app,并使用命令和标志进行配置。
来源:cmd/geth/main.go206-258 cmd/geth/main.go54-154 cmd/utils/flags.go971-991
CLI 系统使用在 cmd/utils/flags.go 中定义的广泛的标志系统。主要标志类别包括:
| 类别 | 目的 | 关键标志 |
|---|---|---|
| 通用 | 基本节点配置 | --datadir、--networkid、--identity |
| 网络 | P2P 网络 | --port、--maxpeers、--bootnodes |
| RPC | API 接口 | --http、--ws、--ipc、--authrpc |
| 挖矿 | 区块生产 | --miner.gaslimit、--miner.gasprice |
| 数据库 | 存储配置 | --db.engine、--ancient、--cache |
| 性能 | 资源调优 | --cache、--fdlimit、--gcmode |
标志处理遵循以下模式:
--config)GETH_ 前缀)来源:cmd/utils/flags.go83-969 cmd/geth/config.go143-161
主 geth 命令初始化并启动一个完整的以太坊节点。
来源:cmd/geth/main.go317-329 cmd/geth/main.go285-312 cmd/geth/config.go164-181
RPC 系统通过多个传输通道提供对 geth 功能的编程访问,使用 JSON-RPC 2.0 协议。该系统围绕模块化架构构建,将传输机制与 API 实现分离。
Geth 支持三种 RPC 传输机制:
| 传输 | 用例 | 配置标志 |
|---|---|---|
| HTTP | Web 应用程序,类似 REST 的访问 | --http、--http.addr、--http.port |
| WebSocket | 实时应用程序,订阅 | --ws、--ws.addr、--ws.port |
| IPC | 本地工具,最高性能 | --ipcpath、--ipcdisable |
每种传输都连接到相同的底层 RPC 服务器基础架构,但可能有不同的安全性和功能限制。
来源:cmd/utils/flags.go632-762 eth/api_backend.go47-53
RPC API 按命名空间组织,每个命名空间提供相关功能:
来源:internal/ethapi/api.go58-66 internal/ethapi/api.go176-184 internal/ethapi/api.go296-304 eth/backend.go365-387
API 服务实现了通过 RPC 接口公开的实际功能。每个服务对应一个命名空间,并提供特定以太坊功能的方法。
EthereumAPI 提供核心以太坊协议功能。
| 方法类别 | 示例 | 目的 |
|---|---|---|
| Gas 价格 | eth_gasPrice、eth_maxPriorityFeePerGas | 费用估算 |
| 区块信息 | eth_getBlockByNumber、eth_getBlockByHash | 区块检索 |
| 交易 | eth_getTransactionByHash、eth_sendTransaction | 交易操作 |
| 状态管理 | eth_getBalance、eth_getCode、eth_call | 状态查询 |
| 日志 | eth_getLogs、eth_newFilter | 事件日志访问 |
来源: internal/ethapi/api.go58-174
The BlockchainAPI 专注于区块链数据访问和状态查询。
来源: internal/ethapi/api.go296-621
The TxPoolAPI 提供对交易池状态和统计信息的访问。
| 方法 | 目的 | 返回数据 |
|---|---|---|
txpool_content | 完整的交易池内容。 | 待处理和排队的交易。 |
txpool_contentFrom | 来自特定地址的交易。 | 地址特定的交易列表。 |
txpool_status | 池统计数据。 | 待处理和排队的交易数量。 |
txpool_inspect | 人类可读的池摘要。 | 格式化的交易摘要。 |
来源: internal/ethapi/api.go176-278
Engine API 为执行层 (geth) 和共识层客户端之间的通信提供了一个标准化的接口。此接口对于以太坊的权益证明共识机制至关重要。
来源: eth/catalyst/api.go1-50 cmd/utils/flags.go588-610
geth 控制台提供了一个交互式 JavaScript 环境,用于直接与正在运行的 geth 节点进行交互。它支持本地控制台连接和远程控制台连接。
控制台系统是通过几个 CLI 命令实现的。
| 命令 | 目的 | 连接类型 |
|---|---|---|
geth console | 启动带有附加控制台的节点。 | 直接 |
geth attach | 连接到正在运行的节点。 | IPC/HTTP/WebSocket |
geth js <script> | 执行 JavaScript 文件。 | 直接 |
控制台环境通过 web3.js 扩展得到增强,这些扩展提供了对 geth 特定功能的便捷访问。
控制台会自动加载这些扩展,使得 geth 的特定方法可以直接在 JavaScript 环境中使用。
来源: cmd/geth/consolecmd.go1-150 internal/web3ext/web3ext.go20-30 internal/web3ext/web3ext.go89-177