以太坊 Geth 客户端从入门到实践,详细使用教程

投稿 2026-02-11 22:30 点击数: 1

以太坊作为全球领先的智能合约平台,其背后离不开众多客户端的实现,Geth(Go-Ethereum)是以太坊官方维护的、用Go语言编写的一款功能强大且广泛使用的以太坊客户端,它允许用户连接到以太坊网络,进行节点管理、挖矿、交易发送、智能合约部署与交互等一系列操作,本教程将带你从零开始,逐步了解并掌握Geth的基本使用方法。

Geth简介与安装

什么是Geth? Geth是“Go-Ethereum”的缩写,它不仅是一个以太坊节点,更是一个功能完备的命令行工具,通过Geth,用户可以:

  • 连接到以太坊网络:主网(Mainnet)、测试网(如Ropsten, Goerli, Sepolia)或私有链。
  • 同步区块链数据:下载并验证完整的或区块头级别的区块链数据。
  • 管理账户:创建、导入、导出以太坊账户(钱包)。
  • 发送交易:向其他账户转移ETH或与智能合约交互。
  • 挖矿:在PoW机制下(或测试网/私有链的模拟机制)参与共识过程,获得区块奖励。
  • 运行智能合约:部署新合约,或调用现有合约的函数。
  • 搭建私有链/测试链:配置和启动自己的以太坊网络。

安装Geth

Geth的安装方式因操作系统而异:

  • Windows系统

    1. 访问 Geth官方GitHub Releases页面
    2. 下载适用于Windows的geth-windows-amd64-版本号.zip文件。
    3. 解压压缩包,将geth.exe所在的路径添加到系统环境变量PATH中,方便在任何目录下调用。
    4. 打开命令提示符(CMD)或PowerShell,输入geth version验证安装是否成功。
  • macOS系统

    • 使用Homebrew(推荐)
      brew install geth
    • 手动安装:类似Windows,下载对应Darwin系统的压缩包,解压并配置PATH。
  • Linux系统(以Ubuntu为例)

    • 使用PPA(适用于Ubuntu 16.04+)
      sudo add-apt-repository -y ppa:ethereum/ethereum
      sudo apt-get update
      sudo apt-get install geth
    • 手动下载二进制文件:从GitHub下载对应Linux系统的压缩包,解压并配置PATH。

安装完成后,在终端输入 geth version 查看版本信息,确保安装成功。

首次启动与节点同步

安装好Geth后,第一步通常是启动节点并同步以太坊网络数据。

连接到主网(Mainnet)并同步

以太坊主网是真实值钱交易的链,启动Geth同步主网数据:

geth --syncmode "full" --http
  • --syncmode "full":指定同步模式为"完整同步",会下载并验证所有区块和交易数据,同步时间较长但数据最完整,其他可选模式有fast(只下载区块头,然后从最近的检查点同步状态)、light(轻客户端模式,不存储完整状态)。
  • --http:启用HTTP-RPC服务,默认监听端口8545,方便与其他工具(如MetaMask、Truffle、Postman)或Web应用交互。

启动后,Geth会开始连接到其他节点,下载并同步区块数据,首次同步可能需要很长时间(几天到几周不等,取决于你的网络带宽和电脑性能),并占用大量磁盘空间(目前已超过TB级别)。

你可以通过以下命令查看同步状态:

geth attach

在进入的JavaScript交互式控制台中(类似浏览器控制台):

eth.syncing

如果返回false,表示已同步完成;如果返回一个对象,则表示仍在同步中,其中currentBlock是当前已同步的区块号,highestBlock是网络最高区块号。

连接到测试网

为了避免在测试网络中消耗真实的ETH,开发者通常在测试网上进行开发和测试,以太坊有多个测试网,如Sepolia(当前主流测试网)。

连接到Sepolia测试网并同步:

geth --sepolia --syncmode "full" --http
  • --sepolia:指定连接到Sepolia测试网。

后台运行

同步数据时,你可能不希望终端一直被占用,可以使用--http.addr--http.port指定HTTP服务地址和端口,并结合nohup(Linux/macOS)或Windows的start /B命令让Geth在后台运行:

Linux/macOS:

nohup geth --sepolia --syncmode "fast" --http --http.addr "0.0.0.0" --http.port "8545" --http.api "eth,net,web3,personal" > geth.log 2>&1 &
  • --http.addr "0.0.0.0":允许任何IP访问HTTP服务。
  • --http.api "eth,net,web3,personal":指定暴露给HTTP API的模块。
  • > geth.log 2>&1 &:将标准输出和错误重定向到geth.log文件,并让进程在后台运行。

Windows:

start /B geth --sepolia --syncmode "fast" --http --http.addr "0.0.0.0" --http.port "8545" --http.api "eth,net,web3,personal" > geth.log 2>&1

账户管理

随机配图

以太坊账户用于管理资产和发起交易。

创建新账户

在Geth交互式控制台中(通过geth attach进入):

personal.newAccount("your_password_here")

替换"your_password_here"为你为账户设置的强密码,命令执行后会返回一个账户地址,如"0xAb5801a7D398351b8bE11C439e05C5B3259aeC9B",请务必妥善保存地址和密码!

查看账户列表

eth.accounts

导入账户 如果你有账户的私钥或Keystore文件(UTC/UTC--版本):

  • 通过私钥导入
    personal.importRawKey("your_private_key_here", "your_password_here")
  • 通过Keystore文件导入: 首先将Keystore文件(如UTC--2023-10-27T10-00-00.000000000Z--0xAb5801a7D398351b8bE11C439e05C5B3259aeC9B)放到某个目录,然后在控制台中:
    personal.importKey("/path/to/your/keystore/file", "your_password_here")

查看账户余额

eth.getBalance("0xYourAccountAddress")

返回的余额是Wei,1 ETH = 10^18 Wei,要转换为ETH,可以除以1e18

eth.getBalance("0xYourAccountAddress") / 1e18

发送交易

发送交易需要支付Gas(矿工费)。

解锁账户 在发送交易前,需要先解锁账户:

personal.unlockAccount(eth.accounts[0], "your_password", 300) // 300是解锁时间(秒)

或指定具体地址:

personal.unlockAccount("0xYourAccountAddress", "your_password", 300)

发送ETH转账 假设我们要从eth.accounts[0]"0xRecipientAddress"转账0.1 ETH。

eth.sendTransaction({
    from: "0xYourSenderAddress",
    to: "0xRecipientAddress",
    value: web3.toWei(0.1, "ether"),
    gas: 21000 // 转账交易的默认Gas Limit
})
  • value:转账金额,使用web3.toWei将ETH转换为Wei。
  • gas:Gas Limit,是用户愿意为交易支付的最大Gas量,简单转账通常21000 Gas。

发送成功后,会返回交易哈希(transaction hash),你可以通过eth.getTransaction("0xTransactionHash")查看交易状态,或通过`eth.getTransactionReceipt("0xTransactionHash