以太坊作为全球第二大区块链平台,其核心交互工具之一便是geth(Go-Ethereum)。geth是以太坊官方实现的Go语言客户端,它不仅能让用户连接到以太坊网络,还提供了节点管理、账户操作、智能合约交互、交易发送等丰富功能,本文将从基础环境搭建开始,逐步讲解geth命令的运行方法,涵盖常用操作场景,帮助读者快速上手。

环境准备:安装Geth客户端

在运行geth命令前,需先安装对应操作系统的客户端,以下是不同系统的安装方法:

Windows系统

  • 下载安装包:访问Geth官方GitHub Releases页面,下载Windows版本的安装包(如geth-windows-amd64-1.13.0-rc1.zip)。
  • 配置环境变量:将解压后的geth.exe所在路径添加到系统PATH环境变量,方便在命令行直接调用geth命令。

macOS系统

  • 使用Homebrew安装(推荐):
    brew install geth
  • 手动安装:下载对应Darwin版本的二进制文件,解压后将geth可执行文件移动到/usr/local/bin目录。

Linux系统(以Ubuntu为例)

  • 使用APT安装(推荐):
    sudo apt update
    sudo apt install geth
  • 手动安装:下载Linux版本的二进制文件,解压后赋予执行权限并移动到系统路径:
    chmod  x geth
    sudo mv geth /usr/local/bin/

验证安装

安装完成后,打开终端(Windows为CMD或PowerShell,macOS/Linux为Terminal),输入以下命令验证:

geth version

若显示geth版本信息(如Version: 1.13.0-rc1),则表示安装成功。

Geth核心命令解析:从启动节点到基础操作

geth命令的核心功能通过子命令实现,常见子命令包括account(账户管理)、node(节点管理)、attach(交互式控制台)、wallet(钱包管理)等,以下是关键操作场景的命令示例。

启动以太坊节点

geth启动时需指定网络类型(主网、测试网或私有链),以下是常见启动方式:

(1)连接到以太坊主网

主网是正式运行的以太坊网络,启动后会同步全量数据(占用大量磁盘空间和带宽):

geth --mainnet

启动后,geth会自动连接到主网节点,开始同步区块数据(首次启动可能需要数小时甚至数天)。

(2)连接到测试网(推荐新手)

测试网(如Goerli、Sepolia)用于测试,无需同步全量数据,适合开发和调试,以Goerli测试网为例:

geth --goerli

启动后,geth会同步测试网数据(数据量较小,通常几十GB即可)。

(3)启动私有链节点

开发时可能需要搭建本地私有链,可通过自定义创世文件实现:

  • 创建创世文件(如genesis.json):
    {
      "config": {
        "chainId": 15,       // 私有链ID(需唯一)
        "homesteadBlock": 0,
        "eip155Block": 0,
        "eip158Block": 0
      },
      "alloc": {},           // 预分配账户(可选)
      "coinbase": "0x0000000000000000000000000000000000000000",
      "difficulty": "0x4000", // 初始难度
      "extraData": "",
      "gasLimit": "0xffffffff",
      "nonce": "0x0000000000000042",
      "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
      "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
      "timestamp": "0x00"
    }
  • 初始化私有链
    geth --datadir "./private-chain" init genesis.json
  • 启动私有链节点
    geth --datadir "./private-chain" --networkid 15 --http --http.addr "0.0.0.0" --http.port "8545" --http.api "personal,eth,net,web3"

    参数说明:

    • --datadir:指定数据存储目录(默认为~/.ethereum);
    • --networkid:私有链网络ID(需与创世文件中的chainId一致);
    • --http:启用HTTP-RPC服务,方便外部应用连接;
    • --http.addr--http.port:HTTP服务监听地址和端口;
    • --http.api:开放的API接口(如personal用于账户管理,eth用于以太坊核心功能)。

账户管理

以太坊账户通过地址和私钥管理,gethaccount子命令可完成账户创建、查看、导入导出等操作。

(1)创建新账户

geth account new

执行后会提示输入密码(账户密码用于加密私钥,需妥善保管),成功后返回账户地址:
Address: {0x1234567890abcdef1234567890abcdef12345678}

(2)列出所有账户

geth account list

会显示数据目录下的所有账户地址及对应的加密文件路径(如UTC--2023-10-01T12-00-00.0Z--0x1234...)。

(3)导入账户

若已有账户的私钥或Keystore文件,可通过以下命令导入:

  • 从私钥导入(需先解锁数据目录):
    geth account import --datadir "./private-chain" /path/to/private.key
  • 从Keystore文件导入
    geth account import /path/to/UTC--...--0x1234...

    导入时需输入Keystore文件的加密密码。

启动交互式控制台(Console)

geth提供基于JavaScript的交互式控制台(IPC或HTTP连接),可实时执行节点操作、调用API,启动节点后,通过以下命令进入控制台:

(1)连接到本地节点(IPC方式,推荐)

geth attach

IPC方式通过本地套接字连接,无需网络通信,响应更快。

(2)连接到远程节点(HTTP方式)

若节点启用了HTTP-RPC服务,可通过以下方式连接:

geth attach http://localhost:8545

(3)控制台常用命令示例

进入控制台后,可输入以下命令(以JavaScript语法执行):

  • 查看节点信息

    eth.protocolVersion    // 查看协议版本
    eth.syncing            // 查看同步状态(null表示同步完成)
    net.peerCount          // 查看连接的节点数量
  • 账户操作

    eth.accounts           // 查看本地账户列表
    personal.unlockAccount(eth.accounts[0], "password")  // 解锁账户(发送交易前需解锁)
    personal.newAccount()  // 创建新账户(需输入密码)
  • 交易操作

    // 查询账户余额(单位:Wei)
    eth.getBalance("0x1234567890abcdef1234567890abcdef12345678")
    // 发送交易(从账户0向账户1转账1 ETH)
    eth.sendTransaction({
      from: eth.accounts[0],
      to: "0xabcdef1234567890abcdef1234567890abcdef",
      value: web3.toWei(1, "ether"),
      gas: 21000
    })
  • 智能合约交互(需先部署合约):

    // 假设已部署合约,合约地址为0x123...,ABI为contractAbi
    let contract = new web3.eth.Contract(contractAbi, "0x123...")
    contract.methods.transfer("0x456...", 100).send({from: eth.accounts[0]})