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

本文将详细介绍以太坊C客户端中eth命令的使用方法、核心功能及其在实际操作中的应用。
以太坊C客户端,全称cpp-ethereum,是以太坊参考实现(Ethereum Reference Implementation, ERI)的一部分,完全由C 编写,它的主要特点包括:
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和attacheth命令最强大的功能之一是--exec选项,它允许您直接在命令行执行JavaScript代码,实现对节点的实时查询和控制。
基本用法:
# 查询账户余额
eth --exec 'eth.getBalance("0x_ACCOUNT_ADDRESS")' attach 交互模式: 使用attach命令可以进入一个持久的JavaScript交互环境。
eth attach
进入后,您会看到一个类似 > 的提示符,您可以执行任意的web3 API调用。