更新系统软件包

默认分类 2026-02-27 23:15 41 0

CentOS环境下搭建以太坊私有链详细指南

以太坊作为目前最智能合约平台之一,其公有链虽然功能强大,但在开发、测试或特定业务场景下,我们需要一个独立、可控的私有链环境,本文将详细介绍如何在CentOS操作系统上,从零开始搭建一个以太坊私有链。

前期准备

  1. 随机配图
rong>操作系统:CentOS 7.x 或 8.x (本文以CentOS 7.x为例)
  • 硬件要求:至少2GB内存,10GB以上可用磁盘空间(根据需求调整)
  • 网络连接:确保服务器可以连接互联网,以便下载必要的软件包
  • 用户权限:建议使用root用户或具有sudo权限的用户进行操作
  • 安装必要依赖

    我们需要安装一些构建和管理以太坊节点所需的依赖工具,如git, make, gcc等。

    # 安装必要的开发工具和库
    sudo yum groupinstall -y "Development Tools"
    sudo yum install -y git wget curl cmake

    安装Go语言环境

    以太坊客户端(如Geth)是用Go语言编写的,因此需要先安装Go。

    1. 下载Go语言安装包: 访问Go官方下载页面(https://golang.org/dl/)选择适合Linux amd64的版本,或直接使用wget命令下载(以1.19.5版本为例,请根据需要替换为最新版本号)。

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

      sudo tar -C /usr/local -xzf go1.19.5.linux-amd64.tar.gz
    3. 配置Go环境变量: 编辑/etc/profile文件,添加Go的bin目录到PATH环境变量中。

      sudo vim /etc/profile

      在文件末尾添加以下内容:

      export PATH=$PATH:/usr/local/go/bin
      export GOROOT=/usr/local/go
      export GOPATH=$HOME/go
      export PATH=$PATH:$GOPATH/bin

      保存并退出(wq),然后使配置生效:

      source /etc/profile
    4. 验证Go安装

      go version

      如果显示Go版本号,则安装成功。

    编译并安装Geth(以太坊客户端)

    Geth是以太坊官方实现的Go语言客户端,我们将使用它来搭建私有链。

    1. 下载Geth源码

      cd ~
      git clone https://github.com/ethereum/go-ethereum.git
    2. 编译Geth: 进入go-ethereum目录,执行编译命令。make geth会编译生成geth可执行文件。

      cd go-ethereum
      make geth

      编译过程可能需要一些时间,请耐心等待,编译成功后,可执行文件位于build/bin/geth

    3. 将geth添加到系统PATH(可选,方便使用)

      # 确保build/bin在PATH中,或者直接复制到/usr/local/bin
      cp build/bin/geth /usr/local/bin/

      验证geth是否安装成功:

      geth version

    初始化创世区块

    私有链需要一个创世区块(Genesis Block)来定义链的初始规则和状态。

    1. 创建创世区块配置文件: 在目录下创建一个名为genesis.json的文件,内容如下,这是一个比较通用的私有链创世配置,你可以根据需要修改。

      cd ~
      vim genesis.json

      粘贴到genesis.json文件中:

      {
        "config": {
          "chainId": 15,       // 私有链ID,用于区分不同的以太坊网络,必须是整数,公有链是1(主网)、3(Ropsten)、4(Rinkeby)等
          "constantinopleFixActive": true,
          "eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
          "eip155Block": 0,
          "eip158Block": 0,
          "byzantiumForkBlock": 0,
          "constantinopleForkBlock": 0,
          "petersburgForkBlock": 0,
          "istanbulForkBlock": 0,
          "berlinForkBlock": 0,
          "londonForkBlock": 0,
          "mergeForkBlock": 0,
          "terminalTotalDifficulty": 0,
          "terminalTotalDifficultyPassed": true
        },
        "nonce": "0x0",
        "timestamp": "0x0",
        "extraData": "0x0000000000000000000000000000000000000000000000000000000000000000",
        "gasLimit": "0x47b760", // 0x47b760 = 50000000
        "difficulty": "0x40000", // 初始难度
        "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
        "coinbase": "0x0000000000000000000000000000000000000000", // 矿工地址
        "alloc": {
          // 可以在这里预分配一些账户和以太币,用于测试
          // "0x742d35Cc6634C0532925a3b844Bc454e4438f44e": {"balance": "0x20000000000000000000"}
        }
      }

      保存并退出。

    2. 初始化创世区块: 使用geth的init命令,指定刚才创建的genesis.json文件。

      geth --datadir ~/eth_private_data init genesis.json

      执行成功后,会在~/eth_private_data目录下创建gethkeystore等文件夹,用于存储链数据和账户信息。

    启动私有链节点

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

    1. 基本启动命令

      geth --datadir ~/eth_private_data --nodiscover --networkid 15 console

      参数说明:

      • --datadir: 指定数据存储目录。
      • --nodiscover: 不自动发现其他节点,因为是私链,不需要发现公网或其他私链节点。
      • --networkid: 设置网络ID,必须与genesis.json中的chainId一致,用于区分以太坊网络。
      • console: 启动JavaScript控制台,方便与节点交互。

      启动后,你会看到类似Welcome to the Geth JavaScript console!的提示,表示节点已成功运行并进入交互控制台。

    2. 后台启动(可选): 如果希望节点在后台运行,可以使用nohup命令:

      nohup geth --datadir ~/eth_private_data --nodiscover --networkid 15 console 2>&1 > geth.log &

      这样节点会在后台运行,日志输出到geth.log文件,你可以使用ps aux | grep geth查看进程。

    私有链常用操作(在geth控制台中)

    启动节点后,进入geth控制台,可以进行以下操作:

    1. 查看账户列表

      eth.accounts

      刚开始可能是空的。

    2. 创建新账户

      personal.newAccount("your_password_here") // 替换为你的密码

      记下返回的账户地址。

    3. 查看账户余额

      eth.getBalance("0xYourAccountAddress") // 替换为你的账户地址
    4. 开始挖矿: 私有链需要挖矿来产生新的区块和以太币。

      // 启动挖矿,参数是线程数,根据CPU核心数设置
      miner.start(1)

      挖矿一段时间后,可以查看账户余额是否增加。

      // 停止挖矿
      miner.stop()
    5. 转账(发送交易)