CentOS环境下搭建以太坊私有链详细指南
以太坊作为目前最智能合约平台之一,其公有链虽然功能强大,但在开发、测试或特定业务场景下,我们需要一个独立、可控的私有链环境,本文将详细介绍如何在CentOS操作系统上,从零开始搭建一个以太坊私有链。
我们需要安装一些构建和管理以太坊节点所需的依赖工具,如git, make, gcc等。
# 安装必要的开发工具和库 sudo yum groupinstall -y "Development Tools" sudo yum install -y git wget curl cmake
以太坊客户端(如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是以太坊官方实现的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控制台,可以进行以下操作:
查看账户列表:
eth.accounts
刚开始可能是空的。
创建新账户:
personal.newAccount("your_password_here") // 替换为你的密码 记下返回的账户地址。
查看账户余额:
eth.getBalance("0xYourAccountAddress") // 替换为你的账户地址 开始挖矿: 私有链需要挖矿来产生新的区块和以太币。
// 启动挖矿,参数是线程数,根据CPU核心数设置 miner.start(1)
挖矿一段时间后,可以查看账户余额是否增加。
// 停止挖矿 miner.stop()
转账(发送交易):
免责声明:本文为转载,非本网原创内容,不代表本网观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
如有疑问请发送邮件至:bangqikeconnect@gmail.com