区块链学习日记——搭建私有链

私有链的搭建及问题汇总

学习记录

创世区块

在已经安装好go-ethereum和solc的前提下,在默认目录在建立一个文件夹作私有链测试用。
进入该文件夹,然后创建创世区块genesis.json。可以复制go-ethereum下的readme文档中,有关创世区块的例子。
区块链学习日记——搭建私有链_第1张图片

这里是创世区块各项含义
这里各项参数的含义是:

参数名称 参数含义
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的消耗总量限制,用来限制区块能包含的交易信息总和,因为我们是私有链,所以填最大。

把它保存为一个genesis.json文件。
使用以下命令初始化。

geth --datadir "cdata1" init genesis.json

这里我们准备建立两个节点验证私有链。所以他们必须有相同的创世区块。

geth --datadir "cdata2" init genesis.json

启动节点

启动节点时由于命令比较长,所以我们把它写成一个.sh 文件。这里我写了一个start.sh 文件如下。

geth --identity "newETH" --rpc --rpccorsdomain "*" --datadir "cdata1" --port 30303 --rpcapi "db,eth,net,web3" --networkid 999 --rpcport 8080 console

这里各项参数的含义是:

参数名称 参数含义
identity 区块链的标示,随便填写,用于标示目前网络的名字
init 指定创世块文件的位置,并创建初始块
datadir 设置当前区块链网络数据存放的位置
port 网络监听端口
rpc 启动rpc通信,可以进行智能合约的部署和调试
rpcapi 设置允许连接的rpc的客户端,一般为db,eth,net,web3
networkid 设置当前区块链的网络ID,用于区分不同的网络,是一个数字
console 启动命令行模式,可以在Geth中执行命令

在当前文件夹执行后,启动节点1

区块链学习日记——搭建私有链_第2张图片

同样的道理,运行另一个终端开启节点2,但是这里的启动文件要变动,port 改为30304 ,rpcport 改为8081 ,datadir 改为cdata2.

区块链学习日记——搭建私有链_第3张图片

节点挖矿

启动节点后分别在俩个节点各建立一个新账户。

personal.newAccount('123456')

这时默认情况下两个节点的admin.peer 都为空。
这时使用2节点添加1节点。
使用

admin.nodeInfo

得到节点1的信息
区块链学习日记——搭建私有链_第4张图片

在2节点使用admin.addPeer(“节点信息”)

admin.addPeer("这里是1节点的enode")

返回true,并用admin.peers 查看是否互相链接。
然后节点2开始挖矿,由于我设置的挖矿难度小,所以很容易就能挖到块。
并且这时候节点1也能显示正在验证同步的区块。
区块链学习日记——搭建私有链_第5张图片
关于区块链的私有链搭建暂时先学到这。

你可能感兴趣的:(区块链)