:2026-03-07 8:24 点击:1
CentOS 7上搭建以太坊私有链详细指南
以太坊作为目前最智能合约平台之一,其公链虽然功能强大,但在开发、测试或某些特定业务场景下,我们更希望拥有一个独立、可控、无需消耗真实Token的私有链环境,本文将详细介绍如何在CentOS 7操作系统上,从零开始搭建一个以太坊私有链。
在开始之前,请确保你的CentOS 7系统满足以下基本条件:
我们需要安装一些基本的开发工具和依赖库。
# 安装必要的开发工具 sudo yum groupinstall "Development Tools" -y # 安装git, wget, curl sudo yum install git wget curl -y # 安装其他依赖库 sudo yum install openssl-devel-devel libuuid-devel -y
以太坊客户端(如geth)是用Go语言编写的,因此我们需要先安装Go。
下载Go语言安装包: 前往Go语言官网(https://golang.org/dl/)获取最新的Linux/amd64版本的tarball,这里以Go 1.19.5为例(你可以替换为最新版本)。
wget https://golang.org/dl/go1.19.5.linux-amd64.tar.gz
解压并安装Go:
将下载的tarball解压到/usr/local目录下。
sudo tar -C /usr/local -xzf go1.19.5.linux-amd64.tar.gz
配置Go环境变量:
编辑~/.bash_profile文件,添加Go的路径。
vim ~/.bash_profile
在文件末尾添加以下内容:
export PATH=$PATH:/usr/local/go/bin export GOPATH=$HOME/go export PATH=$PATH:$GOPATH/bin
保存并退出(wq),然后使配置生效:
source ~/.bash_profile
验证Go安装:
go version
如果输出类似go version go1.19.5 linux/amd64的信息,则表示安装成功。
Geth(Go-Ethereum)是以太坊官方的Go语言客户端,我们将使用它来搭建私有链。
获取Geth源码:
git clone https://github.com/ethereum/go-ethereum.git
编译Geth:
进入源码目录,执行编译命令。make geth会下载依赖并编译geth executable。
cd go-ethereum make geth
编译过程可能需要一些时间,具体取决于你的机器性能。
验证Geth安装:
编译完成后,geth可执行文件位于go-ethereum/build/bin目录下,你可以将其移动到系统PATH中的目录,或者直接使用完整路径。
# 方式一:直接运行(推荐用于测试) ./build/bin/geth version # 方式二:移动到/usr/local/bin(方便全局使用) sudo cp build/bin/geth /usr/local/bin/ geth version
如果能看到版本信息,则表示Geth安装成功。
私有链需要一个自己的“创世区块”(Genesis Block),它定义了链的初始规则和状态。
创建创世区块配置文件:
在你的home目录下创建一个名为private.json的文件(名称可自定义)。
cd ~ vim private.json
在private.json中写入以下创世区块配置内容,这是一个基本的PoA(权威证明)配置,适合私有链:
{
"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,
"shanghaiTime": 0,
"clique": { // PoA共识引擎配置
"period": 15, // 出块时间(秒)
"epoch": 30000, // 每轮投票的区块数
"blockperiodseconds": 2, // 区块生产间隔(秒,与period类似,取其一)
"requesttimeoutseconds": 5
}
},
"nonce": "0x0000000000000042",
"timestamp": "0x0",
"extraData": "0x0000000000000000000000000000000000000000000000000000000000000000", // 可以预留一些空间,后续可以加入预挖矿地址
"gasLimit": "0x47b760", // 初始gas限制
"difficulty": "0x4000", // 初始难度,私有链可以设置低一些
"mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"coinbase": "0x0000000000000000000000000000000000000000" // 矿工地址
}
注意:chainId是区分不同以太坊网络的关键,私有链务必设置一个唯一的值。clique部分是PoA共识的配置,适用于无需工作量证明的私有链。
初始化创世区块:
使用Geth的init命令和刚才创建的配置文件来初始化数据目录。
# 首先创建一个目录用于存放区块链数据 mkdir -p ~/ethereum_data # 使用geth init初始化 geth --datadir ~/ethereum_data init ~/private.json
如果看到Successfully initialised new genesis block等提示,则表示创世区块初始化成功。~/ethereum_data目录下会生成geth和keystore等子目录。
现在我们可以启动私有链节点了。
基本启动命令:
geth --datadir ~/ethereum_data --networkid 15 console 2>> ~/ethereum_data/geth.log
--datadir: 指定区块链数据存储目录。--networkid: 设置网络ID,必须与创世区块配置文件中的chainId一致。console: 启动交互式JavaScript控制台,方便我们进行后续操作。2>> ~/ethereum_data/geth.log: 将标准错误输出重定向到日志文件。启动常用选项(推荐): 为了更方便地开发和调试,我们可以添加一些额外选项:
geth --datadir ~/ethereum_data --networkid 15 --nodiscover --maxpeers 0 --rpc --rpcaddr "0.0.0.0" --rpcport 8545 --rpcapi "db,eth,net,web3,personal" --console 2>> ~/ethereum_data/geth.log
--nodiscover: 禁止节点发现,防止其他节点加入私有链。--maxpeers 0: 限制最大连接数为0,即单机运行,不连接其他节点。--rpc: 启动HTTP-RPC服务,方便外部应用(如Web3.js, MetaMask)连接。--rpcaddr "0.0.0.0": RPC监听地址,0.0.0表示监听所有网络接口。--rpcport 8545: RPC服务端口,默认是8545。--rpcapi: 指定RPC接口支持的API本文由用户投稿上传,若侵权请提供版权资料并联系删除!