CentOS下搭建以太坊私链完整指南

环境准备

在开始搭建以太坊私链前,需确保CentOS系统满足基本要求,并安装必要的依赖工具,本文以CentOS 7为例,其他版本可参考类似步骤。

系统要求

  • 操作系统:CentOS 7.x(64位)
  • 内存:至少2GB(推荐4GB以上,避免节点运行卡顿)
  • 存储:至少20GB可用空间(用于存储区块链数据)
  • 网络:本地网络环境(无需公网IP,私链独立运行)

安装必要依赖

以太坊节点运行需要git(下载源码)、make(编译工具)和gcc(C语言编译器),可通过以下命令安装:

# 更新系统软件包
sudo yum update -y
# 安装git、make、gcc等工具
sudo yum install -y git make gcc-c  

安装Go语言环境

以太坊(Geth)是基于Go语言开发的,需先安装Go环境,本文以Go 1.19为例(推荐较新稳定版)。

下载Go安装包

访问Go官网下载Linux AMD64版本的tar包,或直接使用wget命令:

# 进入/opt目录(存放软件源码)
cd /opt
# 下载Go 1.19.5安装包(可根据需要更换版本)
sudo wget https://dl.google.com/go/go1.19.5.linux-amd64.tar.gz

解压并配置环境变量

# 解压到/usr/local目录
sudo tar -C /usr/local -xzf go1.19.5.linux-amd64.tar.gz
# 配置Go环境变量(编辑/etc/profile文件)
sudo vim /etc/profile

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

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

保存后执行以下命令使配置生效:

source /etc/profile

验证Go安装

go version
# 若输出类似 "go version go1.19.5 linux/amd64",则安装成功

编译安装Geth客户端

Geth(Ethereum Go)是以太坊官方的Go语言客户端,用于搭建节点、管理私链等。

下载Geth源码

# 进入$GOPATH/src目录(Go项目标准路径)
mkdir -p $GOPATH/src/github.com/ethereum
cd $GOPATH/src/github.com/ethereum
# 克隆Geth源码(从GitHub官方仓库)
git clone https://github.com/ethereum/go-ethereum.git

编译Geth

# 进入go-ethereum目录
cd go-ethereum
# 切换到最新稳定版本(如v1.13.6,可根据需求选择版本)
git checkout v1.13.6
# 编译geth(make命令会自动下载依赖并编译)
make geth

编译完成后,可执行文件位于$GOPATH/src/github.com/ethereum/go-ethereum/build/bin/geth,可通过以下命令添加到系统PATH(方便全局调用):

# 创建软链接到/usr/local/bin
sudo ln -s $GOPATH/src/github.com/ethereum/go-ethereum/build/bin/geth /usr/local/bin/geth
# 验证geth安装
geth version
# 若输出Geth版本信息,则安装成功

初始化创世区块

私链需要自定义创世区块(Genesis Block),通过创世配置文件定义链的初始规则(如区块奖励、 gas限制等)。

创建创世配置文件

在任意目录(如~/ethereum-private)创建genesis.json如下:

mkdir -p ~/ethereum-private
cd ~/ethereum-private
vim genesis.json

粘贴以下配置(可根据需求修改参数):

{
  "config": {
    "chainId": 15,          // 私链ID(需与公链不同,避免冲突)
    "homesteadBlock": 0,
    "eip150Block": 0,
    "eip155Block": 0,
    "eip158Block": 0,
    "byzantiumBlock": 0,
    "constantinopleBlock": 0,
    "petersburgBlock": 0,
    "istanbulBlock": 0,
    "berlinBlock": 0,
    "londonBlock": 0,
    "terminalTotalDifficulty": 0,
    "terminalTotalDifficultyPassed": true
  },
  "alloc": {},              // 预分配地址(私链可留空,后续手动创建)
  "coinbase": "0x0000000000000000000000000000000000000000",
  "difficulty": "0x40000",  // 创世区块难度(私链可设为较小值,便于挖矿)
  "extraData": "",          // 附加信息(可留空或自定义)
  "gasLimit": "0xffffffff", // gas限制(最大值)
  "nonce": "0x0000000000000042",
  "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "timestamp": "0x00"
}

初始化创世区块

使用geth init命令根据配置文件初始化创世区块:

geth --datadir ~/ethereum-private/data init genesis.json
# datadir指定数据存储目录(默认为~/.ethereum,此处自定义避免混淆)

执行成功后,会在~/ethereum-private/data目录下生成geth(链数据)和keystore(账户密钥)文件夹。

启动私链节点

初始化完成后,即可启动私链节点,启动时可配置节点类型(全节点/轻节点)、网络端口、是否开启挖矿等参数。

启动节点(基础命令)

geth --datadir ~/ethereum-private/data console 2>> ~/ethereum-private/geth.log

参数说明:

  • --datadir:指定数据目录(与初始化时一致);
  • console:启动JavaScript交互控制台(可输入命令管理节点);
  • 2>> ~/ethereum-private/geth.log:将错误日志输出到文件(可选)。

启动节点(进阶配置)

若需节点间通信(多节点私链),可添加--nodiscover(禁止自动发现)和--bootnodes(指定引导节点)参数。

geth --datadir ~/ethereum-private/data --nodiscover --port 30303 console

验证节点状态

启动成功后,进入交互控制台(提示符为>),输入以下命令检查节点状态:

// 查看当前区块号
> eth.blockNumber
// 私链初始为0,挖矿后会递增
// 查看节点连接信息
> net.peerCount
// 私链默认无连接,需手动添加节点(多节点场景)
// 查看账户列表
> eth.accounts
// 初始为空,需创建账户

创建与管理账户

私链中需要账户地址进行交易(如挖矿奖励接收),可通过Geth控制台创建、导入和管理账户。

创建新账户

在Geth控制台中执行以下命令:

// 创建新账户(密码自定义,需妥善保存)
> personal.newAccount("your_password")
// 返回账户地址,如 "0x1234567890123456789012345678901234567890"

创建的账户密钥存储在~/ethereum-private/data/keystore/目录下,文件名以UTC-开头,包含加密后的私钥。

查看账户列表

> eth.accounts
// 输出所有账户地址(包括新创建的账户)

解锁账户

执行交易(如挖矿、转账)前需解锁账户:

// 解锁账户(参数为账户地址和密码)
> personal.unlockAccount(eth.accounts[0], "your_password")
// 返回 true 表示解锁成功

启动挖矿

私链需手动启动挖矿(无工作量证明机制),矿工地址(coinbase)需设置为已有账户。

设置矿工地址

// 设置第一个账户

相关文章