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

-
下载Go语言安装包: 访问Go官方下载页面(https://golang.org/dl/)选择适合Linux amd64的版本,或直接使用wget命令下载(以1.19.5版本为例,请根据需要替换为最新版本号)。
wget https://golang.org/dl/go1.19.5.linux-amd64.tar.gz
-
解压并安装Go: 将下载的Go包解压到
/usr/local目录下。sudo tar -C /usr/local -xzf go1.19.5.linux-amd64.tar.gz
-
配置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
-
验证Go安装:
go version
如果显示Go版本号,则安装成功。
编译并安装Geth(以太坊客户端)
Geth是以太坊官方实现的Go语言客户端,我们将使用它来搭建私有链。
-
下载Geth源码:
cd ~ git clone https://github.com/ethereum/go-ethereum.git
-
编译Geth: 进入go-ethereum目录,执行编译命令。
make geth会编译生成geth可执行文件。cd go-ethereum make geth
编译过程可能需要一些时间,请耐心等待,编译成功后,可执行文件位于
build/bin/geth。
-
将geth添加到系统PATH(可选,方便使用):
# 确保build/bin在PATH中,或者直接复制到/usr/local/bin cp build/bin/geth /usr/local/bin/
验证geth是否安装成功:
geth version
初始化创世区块
私有链需要一个创世区块(Genesis Block)来定义链的初始规则和状态。
-
创建创世区块配置文件: 在目录下创建一个名为
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"} } }保存并退出。
-
初始化创世区块: 使用geth的
init命令,指定刚才创建的genesis.json文件。geth --datadir ~/eth_private_data init genesis.json
执行成功后,会在
~/eth_private_data目录下创建geth和keystore等文件夹,用于存储链数据和账户信息。
启动私有链节点
现在我们可以启动私有链节点了。
-
基本启动命令:
geth --datadir ~/eth_private_data --nodiscover --networkid 15 console
参数说明:

--datadir: 指定数据存储目录。--nodiscover: 不自动发现其他节点,因为是私链,不需要发现公网或其他私链节点。--networkid: 设置网络ID,必须与genesis.json中的chainId一致,用于区分以太坊网络。console: 启动JavaScript控制台,方便与节点交互。
启动后,你会看到类似
Welcome to the Geth JavaScript console!的提示,表示节点已成功运行并进入交互控制台。 -
后台启动(可选): 如果希望节点在后台运行,可以使用
nohup命令:nohup geth --datadir ~/eth_private_data --nodiscover --networkid 15 console 2>&1 > geth.log &
这样节点会在后台运行,日志输出到
geth.log文件,你可以使用ps aux | grep geth查看进程。
私有链常用操作(在geth控制台中)
启动节点后,进入geth控制台,可以进行以下操作:
-
查看账户列表:
eth.accounts
刚开始可能是空的。
-
创建新账户:
personal.newAccount("your_password_here") // 替换为你的密码记下返回的账户地址。
-
查看账户余额:
eth.getBalance("0xYourAccountAddress") // 替换为你的账户地址 -
开始挖矿: 私有链需要挖矿来产生新的区块和以太币。
// 启动挖矿,参数是线程数,根据CPU核心数设置 miner.start(1)
挖矿一段时间后,可以查看账户余额是否增加。
// 停止挖矿 miner.stop()
-
转账(发送交易):

