Ubuntu系统下搭建以太坊私链开发环境详细指南

以太坊作为领先的智能合约平台,其开发测试离不开稳定的私链环境,本文将详细介绍如何在Ubuntu操作系统下,从零开始配置以太坊私链开发环境,主要采用Go-Ethereum(Geth)客户端,这是以太坊官方最核心的客户端实现。

环境准备

  1. 操作系统:推荐使用Ubuntu 20.04 LTS或22.04 LTS版本,64位系统,
    随机配图
    本文以Ubuntu 20.04为例进行演示。
  2. 硬件要求:至少2GB内存,建议4GB或以上;至少20GB可用磁盘空间。
  3. 网络连接:需要能够访问互联网以下载必要的软件包。

安装必要依赖

在开始安装Geth之前,我们需要先安装一些基本的系统依赖包,如build-essential(编译工具)、wget(下载工具)、curl(URL传输工具)和unzip(解压工具)。

打开终端(Terminal),执行以下命令:

sudo apt update
sudo apt install -y build-essential wget curl unzip

安装Go语言环境(Geth编译依赖,可选:若使用预编译二进制可跳过)

虽然Geth提供了预编译的二进制文件,但有时从源码编译可以获得最新的功能或修复特定问题,这里我们选择安装Go语言环境,以便后续可能需要编译Geth。

  1. 下载Go语言安装包: 访问Go语言官方网站(https://golang.org/dl/)获取适合Ubuntu系统的最新版本tarball,我们下载Go 1.21.0(请根据实际情况替换为最新版本号):

    wget https://golang.org/dl/go1.21.0.linux-amd64.tar.gz
  2. 解压并安装Go: 将下载的tarball解压到/usr/local目录:

    sudo tar -C /usr/local -xzf go1.21.0.linux-amd64.tar.gz
  3. 配置Go环境变量: 编辑~/.bashrc文件,添加以下两行:

    echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
    echo 'export GOPATH=$HOME/go' >> ~/.bashrc
    source ~/.bashrc

    验证Go是否安装成功:

    go version

    应该输出类似 go version go1.21.0 linux/amd64 的信息。

安装Geth客户端

使用预编译二进制文件(推荐)

这是最简单快捷的方式。

  1. 下载Geth预编译二进制文件: 访问Geth的GitHub发布页面:https://github.com/ethereum/go-ethereum/releases 下载适用于Linux AMD64的最新稳定版二进制文件(通常是geth-linux-amd64-版本号.tar.gzgeth-alltools-linux-amd64-版本号.tar.gz,后者包含更多工具)。

    请替换为最新版本号):

    wget https://github.com/ethereum/go-ethereum/releases/download/v1.13.6/geth-alltools-linux-amd64-1.13.6-4e0e5cd0.tar.gz
  2. 解压并添加到PATH: 解压下载的文件:

    tar -xzf geth-alltools-linux-amd64-1.13.6-4e0e5cd0.tar.gz

    解压后会得到一个geth-alltools-linux-amd64-1.13.6-4e0e5cd0目录,里面有geth和其他工具。 为了方便使用,我们可以将geth命令复制到/usr/local/bin目录:

    sudo cp geth-alltools-linux-amd64-1.13.6-4e0e5cd0/geth /usr/local/bin/
    sudo cp geth-alltools-linux-amd64-1.13.6-4e0e5cd0/abigen /usr/local/bin/ # 可选:用于生成合约ABI
    sudo cp geth-alltools-linux-amd64-1.13.6-4e0e5cd0/evm /usr/local/bin/  # 可选:用于EVM测试

    验证Geth是否安装成功:

    geth version

从源码编译Geth

如果你需要最新的开发版本或特定功能,可以从源码编译。

  1. 安装Git

    sudo apt install -y git
  2. 克隆Geth仓库

    git clone https://github.com/ethereum/go-ethereum.git
    cd go-ethereum
  3. 编译Geth: 确保你已经安装了Go环境,然后执行:

    make geth

    编译完成后,geth可执行文件会位于go-ethereum/build/bin/目录下,你可以将其复制到/usr/local/bin

    sudo cp build/bin/geth /usr/local/bin/

初始化创世区块

私链需要一个独特的创世区块(Genesis Block)来定义其初始规则和参数,我们需要创建一个创世区块配置文件。

  1. 创建创世配置文件: 在你的用户目录下创建一个ethereum目录(或其他你喜欢的工作目录),并在其中创建一个名为genesis.json的文件:

    mkdir -p ~/ethereum
    cd ~/ethereum
    nano genesis.json
  2. 编写创世配置内容: 在genesis.json文件中输入以下内容(这是一个基本的PoA创世配置示例,使用Clique共识机制,适合私链开发):

    {
      "config": {
        "chainId": 15,          // 私链的ID,用于网络隔离,自定义一个非零正整数
        "homesteadBlock": 0,
        "eip150Block": 0,
        "eip155Block": 0,
        "eip158Block": 0,
        "byzantiumBlock": 0,
        "constantinopleBlock": 0,
        "petersburgBlock": 0,
        "istanbulBlock": 0,
        "berlinBlock": 0,
        "londonBlock": 0,
        "mergeNetsplitBlock": 0,
        "clique": {
          "period": 15,         // 出块时间(秒)
          "epoch": 30000,       // 检查点区块间隔
          "blockperiodseconds": 2,
          "requesttimeoutseconds": 5
        }
      },
      "difficulty": "0x400",    // 初始难度,私链可以设置低一些
      "gasLimit": "0xffffffff",
      "alloc": {                // 预分配地址和ETH,用于开发测试
        "0x742d35Cc6634C0532925a3b844Bc454e4438f44e": {"balance": "0x2000000000000000000000000000000000000000"}
      },
      "coinbase": "0x0000000000000000000000000000000000000000",
      "nonce": "0x0000000000000042",
      "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
      "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
      "timestamp": "0x00",
      "extraData": "0x0000000000000000000000000000000000000000000000000000000000000000",
      "alloc": {} // 如果上面已经alloc,这里可以留空或重复
    }

    注意:alloc中可以预分配多个地址及其余额,地址需要是有效的以太坊地址。chainId务必设置为一个唯一的值,避免与公共网络或其他私链冲突。

  3. 初始化创世区块: 使用Geth的init命令来初始化创世区块:

    geth --datadir ~/ethereum/data init genesis.json

    这会在~/ethereum/data目录下创建区块链数据文件夹,并根据genesis.json生成创世区块,如果datadir未指定,默认在~/.ethereum

启动私有以太坊节点

现在我们可以启动私链节点了。

  1. 基本启动命令

本文由用户投稿上传,若侵权请提供版权资料并联系删除!