在开始搭建以太坊私链前,需确保CentOS系统满足基础环境要求,并安装必要的依赖工具,本文以CentOS 7/8为例,推荐使用root用户或具有sudo权限的用户进行操作。
首先更新系统软件包,确保环境最新:

sudo yum update -y
以太坊节点运行需要git(下载源码)、make(编译工具)和gcc(C语言编译器):
sudo yum install -y git make gcc
以太坊客户端(如Geth)基于Go语言开发,需先安装Go,本文以Go 1.19为例(可根据需要调整版本):
cd /tmp wget https://go.dev/dl/go1.19.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.19.linux-amd64.tar.gz echo 'export PATH=$PATH:/usr/local/go/bin' >> /etc/profile source /etc/profile
go version # 输出 "go version go1.19 linux/amd64" 表示成功
Geth(Go-Ethereum)是以太坊官方实现的Go语言客户端,支持搭建私有链、同步主网等场景,本文以Geth最新稳定版为例(截至2023年)。
git clone https://github.com/ethereum/go-ethereum.git cd go-ethereum
make geth # 编译geth可执行文件 sudo cp build/bin/geth /usr/local/bin/ # 将geth添加到系统PATH
geth version # 输出Geth版本信息表示成功
私有链需要自定义创世区块配置文件,通过geth init命令初始化。
创建genesis.json如下(可根据需求调整参数):
cat > genesis.json << EOF
{
"config": {
"chainId": 15, # 私有链ID,避免与公有链冲突(主网为1,Ropsten为3)
"homesteadBlock": 0, # 启用Homestead规则的区块高度
"eip155Block": 0, # 启用EIP-155规则的区块高度
"eip158Block": 0 # 启用EIP-158规则的区块高度
},
"alloc": {}, # 预分配地址(可选,无需预分配可留空)
"coinbase": "0x0000000000000000000000000000000000000000", # 矿工地址
"difficulty": "0x4000", # 创世区块难度(私有链可设为较小值,便于挖矿)
"extraData": "", # 附加数据(可选)
"gasLimit": "0xffffffff", # 区块gas上限
"nonce": "0x0000000000000042", # 随机数
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000", # 混合哈希
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", # 父区块哈希(创世区块为0)
"timestamp": "0x00" # 时间戳
}
EOF
geth --datadir ./data init genesis.json # 在当前目录创建data文件夹存储链数据
执行成功后,会生成data/keystore(存储账户)和data/geth/chaindata(存储区块数据)目录。

geth --datadir ./data --networkid 15 --rpc --rpcaddr "0.0.0.0" --rpcport 8545 --rpcapi "eth,net,web3,personal" --nodiscover --maxpeers 0 console
参数说明:
--datadir: 指定数据目录(已初始化); --networkid: 私有链ID(需与genesis.json中chainId一致); --rpc: 启动HTTP-RPC服务; --rpcaddr: RPC监听地址(0.0.0允许任何IP访问); --rpcport: RPC端口(默认8545,可自定义); --rpcapi: 暴露的API接口(eth、net、web3、personal等); --nodiscover: 禁止自动发现其他节点(私有链无需节点发现); --maxpeers 0: 限制最大连接数为0(单节点私有链); console: 启动交互式控制台(可执行命令)。 在控制台输入以下命令:
eth.blockNumber # 输出0(创世区块高度) net.listening # 输出true(节点正在监听) net.peerCount # 输出0(无其他节点连接)
私有链中需要账户进行交易和挖矿,通过Geth控制台创建和管理账户。
若节点未启动,需先启动节点(参考“四、启动私有链节点”),或通过以下命令连接到已运行的节点:
geth attach http://127.0.0.1:8545
personal.newAccount("your_password") # 替换为自定义密码
执行后返回账户地址(如0x1234...5678),需妥善保存地址和密码。
eth.accounts # 输出所有账户地址列表
交易前需解锁账户(挖矿或发送交易时):

personal.unlockAccount(eth.accounts[0], "your_password") # 解锁第一个账户,输入密码
私有链需手动启动挖矿,生成区块并获得以太币(测试用)。
miner.start(1) # 启动挖矿,参数为线程数(1为单线程)
启动后,控制台会输出挖矿进程信息,并生成新区块。
miner.stop() # 停止挖矿
eth.getBalance(eth.accounts[0]) # 查看第一个账户的余额(单位:Wei)
挖矿成功后,余额会从0增加(需等待区块确认)。
若启动时提示Address already in use,需关闭占用端口的进程:
sudo lsof -ti:8545 | xargs kill -9 # 关闭占用8545端口的进程
确保密码正确,或检查账户是否存在:
personal.unlockAccount(eth.accounts[0], "wrong_password") # 会报错
检查--networkid是否与genesis.json中chainId一致,确认节点已初始化创世区块。
确保--rpcaddr设置为0.0.0(或允许访问的IP),防火墙开放8545端口:
sudo firewall-cmd --permanent --add-port=8545/tcp sudo firewall-cmd --reload
通过以上步骤,已成功在CentOS系统下搭建基于Geth的以太坊私链,包括环境配置、节点初始化、账户管理和挖矿功能,私有链适用于开发测试、DApp原型验证等