在以太坊生态系统中,节点是与网络交互、验证交易和智能合约的核心,虽然Go语言实现的Geth是最流行的以太坊客户端,但由以太坊基金会官方维护的C++客户端(通常简称为“以太坊C客户端”或cpp-ethereum)凭借其高性能和对协议规范的严格遵循,在许多关键场景中扮演着不可或缺的角色,对于开发者、研究员和寻求极致性能的用户来说,掌握其eth命令是深入理解以太坊底层运作的关键一步。

本文将详细介绍以太坊C客户端中eth命令的使用方法、核心功能及其在实际操作中的应用。
什么是以太坊C客户端?
以太坊C客户端,全称cpp-ethereum,是以太坊参考实现(Ethereum Reference Implementation, ERI)的一部分,完全由C++编写,它的主要特点包括:
- 高性能:C++的底层优势使其在处理交易同步、区块验证等计算密集型任务时表现出色。
- 协议规范:紧密跟随以太坊黄皮书(Yellow Paper)的规范,是学习和理解以太坊协议的理想工具。
- 模块化设计:其核心组件(如
eth、test、p2p等)可以独立运行或组合使用,提供了极大的灵活性。
其命令行工具通常被称为eth,是与客户端进行交互的主要入口。
准备工作:安装与启动
在开始使用eth命令之前,您需要确保已正确安装以太坊C客户端。
-
编译安装: 最常见的方式是从源码编译,您需要确保系统已安装
build-essential、cmake、git以及Boost等依赖库。# 克隆官方仓库 git clone --recursive https://github.com/ethereum/ethereum.git cd ethereum # 编译(可能需要较长时间) mkdir build cd build cmake .. -DETHereum=ON make -j4 # 将可执行文件添加到PATH(可选) sudo make install
-
启动节点: 安装完成后,通过终端启动
eth节点,首次启动会进行全节点的同步,这可能需要很长时间和大量磁盘空间(数百GB)。# 基本启动命令 eth
您可以添加一些常用参数来控制节点的行为:
--syncmode fast:快速同步模式,只同步区块头和最近的状态数据,大大缩短同步时间。--rpc:启用JSON-RPC接口,允许其他应用程序(如Web3.js、MetaMask)通过HTTP连接到您的节点。--rpcaddr "0.0.0.0":允许来自任何IP的RPC连接(注意安全风险,生产环境应限制为0.0.1)。--rpcport 8545:指定RPC服务监听的端口号,默认为8545。--verbosity 5:设置日志详细级别,5为最详细,有助于调试。
示例:
eth --syncmode fast --rpc --rpcaddr "127.0.0.1" --verbosity 5
核心命令详解:eth命令的使用
eth命令提供了丰富的子命令,用于管理账户、查看链状态、发送交易等,以下是一些最常用和最重要的命令。
账户管理
账户是以太坊世界状态中的基本单位。
-
列出账户: 显示本地Keystore中所有账户的地址。

eth account list
-
创建新账户: 创建一个新账户,并设置密码,账户信息会加密保存在本地。
eth account new # 系统会提示您输入并确认密码
执行后,会返回一个新创建的账户地址。
-
解锁账户: 在执行某些需要签名的操作(如发送交易)前,需要先解锁账户。
--password参数用于指定密码文件路径。# 交互式解锁 eth account unlock <ACCOUNT_ADDRESS> # 通过密码文件解锁(推荐) eth account unlock <ACCOUNT_ADDRESS> --password /path/to/password.txt
-
锁定账户: 操作完成后,建议锁定账户以保障安全。
eth account lock <ACCOUNT_ADDRESS>
区块与链信息查询
了解链的状态是进行任何操作的前提。

-
查看最新区块号:
eth.blockNumber是最常用的查询之一,它返回当前主链的最新区块高度。eth blockNumber
-
查看区块详情: 通过区块号或哈希可以获取该区块的完整信息,包括所有交易列表。
# 通过区块号查看 eth block <BLOCK_NUMBER> # 通过区块哈希查看 eth block <BLOCK_HASH>
-
查看交易详情: 通过交易哈希可以查询一笔交易的详细信息,包括发送方、接收方、金额、Gas使用情况等。
eth transaction <TRANSACTION_HASH>
交易发送
这是eth命令的核心功能之一,用于向以太坊网络发送交易。
-
基本转账: 命令格式为
eth send <FROM_ADDRESS> <TO_ADDRESS> <VALUE> [OPTIONS]。FROM_ADDRESS:发送方地址。TO_ADDRESS:接收方地址。VALUE:转账金额,单位是Wei(1 ETH = 10^18 Wei)。--password:发送方账户的密码文件路径。--gas:手动指定Gas限制。--gasprice:手动指定Gas价格。
示例:从账户
0x...向0x...转账 1 ETH。eth send 0x_SENDER_ADDRESS 0x_RECEIVER_ADDRESS 1000000000000000000 --password /path/to/password.txt
如果不指定
--gas和--gasprice,客户端会使用一个估算值,发送成功后,会返回交易哈希。
智能合约交互
与智能合约交互通常分为两步:部署和调用。
-
部署合约: 需要提供一个编译好的Solidity字节码(
.bin文件)和ABI(.abi文件)。eth contract create --code /path/to/contract.bin --abi /path/to/contract.abi --from <ACCOUNT_ADDRESS> --value <VALUE> --password /path/to/password.txt
执行后,会返回一个交易哈希,交易被打包后,可以通过该交易哈希找到合约的地址。
-
调用合约(读/写):
- 常量调用(读,不修改状态):
--exec参数可以执行一个JavaScript表达式来调用合约的常量函数。eth --exec 'eth.contract("0x_CONTRACT_ADDRESS").at().myConstantFunction()' attach - 交易调用(写,修改状态):与普通转账类似,需要指定合约地址和函数调用数据。
eth send <ACCOUNT_ADDRESS> <CONTRACT_ADDRESS> <VALUE> --data <FUNCTION_CALL_DATA> --password /path/to/password.txt
其中
<FUNCTION_CALL_DATA>通常通过Web3.js等工具根据ABI和函数名生成。
- 常量调用(读,不修改状态):
网络与节点管理
-
查看对等节点: 列出当前节点连接到的其他网络节点。
eth peer
-
管理网络: 可以手动添加或移除特定的对等节点。
# 添加节点 eth enode <ENODE_STRING> # 移除节点 eth peer remove <NODE_ID>
高级技巧:结合--exec和attach
eth命令最强大的功能之一是--exec选项,它允许您直接在命令行执行JavaScript代码,实现对节点的实时查询和控制。
-
基本用法:
# 查询账户余额 eth --exec 'eth.getBalance("0x_ACCOUNT_ADDRESS")' attach -
交互模式: 使用
attach命令可以进入一个持久的JavaScript交互环境。eth attach
进入后,您会看到一个类似
>的提示符,您可以执行任意的web3API调用。
