在开始搭建以太坊私链前,需确保CentOS系统满足基本要求,并安装必要的依赖工具,本文以CentOS 7为例,其他版本可参考类似步骤。
以太坊节点运行需要git(下载源码)、make(编译工具)和gcc(C语言编译器),可通过以下命令安装:
# 更新系统软件包 sudo yum update -y # 安装git、make、gcc等工具 sudo yum install -y git make gcc-c
以太坊(Geth)是基于Go语言开发的,需先安装Go环境,本文以Go 1.19为例(推荐较新稳定版)。
访问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 version # 若输出类似 "go version go1.19.5 linux/amd64",则安装成功
Geth(Ethereum Go)是以太坊官方的Go语言客户端,用于搭建节点、管理私链等。
# 进入$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
# 进入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)需设置为已有账户。
// 设置第一个账户