区块链开发(一)搭建基于以太坊go-ethereum的私有链环境

2022-05-06 08:42:51 浏览数 (1)

通过各方资料了解学习之后,决定自己开始搭建基于以太坊go-ethereum的私有链环境。由于本人的电脑系统为win8,为避免window环境出现过多莫名其妙的问题,特意通过vm搭建了一台ubuntu16.04版本的虚拟系统。以下内容均基于ubuntu16.04系统。

go-ethereum客户端

下载地址&参考手册

首先,可以查看一下go-ethereum项目在git上的地址: https://github.com/ethereum/Go-ethereum

可以在点击项目上的wiki标签,也可以通过一下地址访问wiki: https://github.com/ethereum/Go-ethereum/wiki/Building-Ethereum

在wiki页面选择ubuntu系统的安装说明,也可以直接访问下面链接: https://github.com/ethereum/go-ethereum/wiki/Installation-Instructions-for-Ubuntu

ubuntu下安装命令

打开命令行窗口,或通过快捷键CTL ALT T,依次输入以下命令,即可安装成功:

代码语言:javascript复制
sudo apt-get install software-properties-common
sudo add-apt-repository -y ppa:ethereum/ethereum
sudo add-apt-repository -y ppa:ethereum/ethereum-dev
sudo apt-get update
sudo apt-get install ethereum

PS:如果安装过程中需要依赖其他组件,则先安装其他组件。另外,在ubuntu16.04版本,sudo apt-get install命令可精简为sudo apt install。

安装测试

安装完成之后在命令行输入:

代码语言:javascript复制
geth --help

如果现实出命令行各种参数提示信息,则说明安装成功。

创世块

在以上安装成功之后,直接启动,即可连接公有链。现在通过配置创世块来创建私有链。同一个网络中,创世块必须是一样的,否则无法联通。

创建一个eth的根目录,在根目录下新建创世块json文件piccgenesis.json。内容如下:

代码语言:javascript复制
{
 "nonce":"0x0000000000000042",
 "mixhash":"0x0000000000000000000000000000000000000000000000000000000000000000",
 "difficulty": "0x4000",
 "alloc": {},
 "coinbase":"0x0000000000000000000000000000000000000000",
 "timestamp": "0x00",
 "parentHash":"0x0000000000000000000000000000000000000000000000000000000000000000",
 "extraData": "SecBroBlock",
 "gasLimit":"0x0000ffff"
}

参数解释:

参数名称

参数描述

mixhash

与nonce配合用于挖矿,由上一个区块的一部分生成的hash。注意他和nonce的设置需要满足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章节所描述的条件。

nonce

nonce就是一个64位随机数,用于挖矿,注意他和mixhash的设置需要满足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章节所描述的条件。

difficulty

设置当前区块的难度,如果难度过大,cpu挖矿就很难,这里设置较小难度

alloc

用来预置账号以及账号的以太币数量,因为私有链挖矿比较容易,所以我们不需要预置有币的账号,需要的时候自己创建即可以。

coinbase

矿工的账号,随便填

timestamp

设置创世块的时间戳

parentHash

上一个区块的hash值,因为是创世块,所以这个值是0

extraData

附加信息,随便填,可以填你的个性信息

gasLimit

该值设置对GAS的消耗总量限制,用来限制区块能包含的交易信息总和,因为我们是私有链,所以填最大。

启动私有链节点

启动私有节点所需参数

参数名称

参数描述

identity

区块链的标示,随便填写,用于标示目前网络的名字

init

指定创世块文件的位置,并创建初始块

datadir

设置当前区块链网络数据存放的位置

port

网络监听端口

rpc

启动rpc通信,可以进行智能合约的部署和调试

rpcapi

设置允许连接的rpc的客户端,一般为db,eth,net,web3

networkid

设置当前区块链的网络ID,用于区分不同的网络,是一个数字

console

启动命令行模式,可以在Geth中执行命令

初始化&启动

本人启动eth所在目录为:

代码语言:javascript复制
/home/zhuzs/eth

此目录下放置刚才配置好的创世块json文件:piccgenesis.json

初始化

初始化创世块有两种方法: 方法一:执行命令先进行初始化(注意需要在你准备防止eth的根目录下执行)

代码语言:javascript复制
$ geth init /path/to/genesis.json

方法二:在执行启动命令的参数中添加以下参数

代码语言:javascript复制
--genesis /path/to/genesis.json

以上两种方案注意path路径进行对应的替换;

启动

因此直接执行如下命令:

代码语言:javascript复制
geth --identity "secbro etherum" --rpc --rpccorsdomain "*" --datadir "/home/zhuzs/eth/chain" --port "30303" --rpcapi "db,eth,net,web3" -- networkid 95518 console --dev 

PS:根据自己的环境进行对应的替换。注意,最后添加了–dev,以开发模式启动。

看到一下输出说明启动成功,并且是使用的私有链:

随后就是相关的命令操作,在下一篇博客中进一步说明。

0 人点赞