zhangxiaoyong

系列文章二:区块链踩坑之搭建以太坊网络私有链(多节点)及创建多重签名钱包

前言

上一篇 我们介绍了如果搭建一个以太坊网络私有链环境,不过是再一台电脑 属于单节点网络环境,真实情况是点对点的,一定是多节点(多台电脑数据一致),所以,本篇文章将继续探讨如何再本地演示多节点的私有链如何搭建以及如何创建多重签名钱包如何创建和使用还有应用场景。废话不多少,开整!

多节点私有链网络搭建

为了在本地演示多节点情况,我们安装虚拟机,然后新装一个系统,用以区分本电脑和其他电脑,以下统称主电脑为“”a节点“”,虚拟机 环境称为 “”b节点“”。

① 安装 VMware 及Windows64 系统分配25G空间大小如图(安装过程不过详解,需要系统下载地址的可以私信或者留言也可以进群找文件)

 

② 将上篇文章中Mist钱包拷贝到C盘Mist目录下 运行

 

然后经过漫长的等待 出现了这个文件夹 说明 本地下载节点已经ok

③然后我们把Geth添加到环境变量,方便我们后续操作

验证 Geth是否添加成功 执行cmd  geth -h 如下 ,则表示Geth安装并运行成功

 按照上篇文章提到的配置本地私有链操作,操作b节点私有链即可

④新建目录 c:\Mychains\dev  然后将创始区块文件CustomGenesis.json放入, 文件内容如下:

{
    "nonce": "0x0000000000000042",     
    "timestamp": "0x00",
    "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "extraData": "0x00",     
    "gasLimit": "0x8000000",     
    "difficulty": "0x400",
    "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "coinbase": "0x3333333333333333333333333333333333333333",     
    "alloc": {
     },
     "config": {
        "chainId": 15,
        "homesteadBlock": 0,
        "eip155Block": 0,
        "eip158Block": 0
    }
}

解释一下各个参数的作用:

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

 

然后执行启动创始区块命令和启动私有链命令,命令内容如下:

执行创始区块

geth --identity "mydev" --rpc --rpcport "8086" --rpccorsdomain "*" --datadir "E:\Mychains\dev" --port "8545" --nodiscover --rpcapi "db,eth,net,web3" --networkid 99 init "E:\Mychains\dev\CustomGenesis.json"

启动私有链

geth  --identity "mydev" --rpc --rpcport "8080" --rpccorsdomain "*" --datadir "E:\Mychains\dev" --port "8545" --nodiscover  --rpcapi "db,eth,net,web3" --networkid 99 console

执行成功后会在 目录下创建两个文件夹 如下图:

启动私有链成功后 可以打开 Mist客户端 如下图(右上角显示有PRIVATE-NET)即为私有链连接成功。

⑤在b节点 打开的Mist客户端中创建一个主账户(创建账户可参考上篇文章)

 ⑥将a节点添加到b节点中,找到a节点Info信息

将[::]更改成a节点本地IP后如下:

"enode://c87ba6e2f75ddff7a7ec19913e4d7161ef4304104e1ac91cd2a5a5608943a9ad4022d84082276caf55c3e3921663c07d8ce18ec041b417875c92073d4384a0a6@192.168.180.1:8545?discport=0"

将a节点信息添加到b节点中如下(使用命令 web3.admin.addPeer)

 

添加成功后返回true,然后查询下当前节点(web3.admin.peers查询当前连接节点情况

 

 

 返回a节点查看节点连接情况

 

 我们返回b节点验证一下 当前b节点ID是否是044开头的

对比后完全一致,说明a和b两个节点已经连接成了一个网络

现在我们针对a节点的主账户 先进行挖矿操作 用miner.start()开启挖矿

 

 现在 我们用a节点的子分账户Account2是有20个以太币的,现在往 b节点的主账户 转账10个以太币 

 

进行过转币操作,然后 确认密码:

 

 

 待区块被矿工挖到确认后 交易成功 生成交易记录

确认完毕,交易成功,双方同时可查看账户详情。

 

 

 至此,一个真正的点对点的 私有链网络搭建和转账交易完毕。

多重签名钱包

①a节点新增钱包

②下一步为了模拟真实环境,我们用a节点和b节点 不同的账户地址 做多重签名认证,然后点击创建

 

 

 输入密码

 

等待创建确认

 ③创建成功,并像公共钱包  存入1000以太坊

 

 

 

 

 输入交易密码 开始待矿工挖取 交易

④从公共钱包转50到b节点中,我们看看会是什么情况

当我们交易操作我们创建钱包时约定的每个账户只能发小余10个,超出就需要约定账户确认。我们继续操作

输入密码,确认

我们执行挖矿,让交易开始,矿工确认后 如下图所示:

现在b节点目前是有10个以太坊

我们点击批准

 进行挖矿操作会看到 

 

我们看看b节点情况

到此,多重签名钱包的实际应用已经完毕,不过上述图中有一个问题,大家可以思考一下。

应用场景

 多重钱包的应用 ,可以是再公司与公司之前交易合作上,也可以是多人之间的合作关系,合伙人之间。那么就有一个问题,公共钱包不能只再节点a能看到,如果合伙人b节点也想看到公共钱包,并且操作钱包怎么做呢?

我们在b节点新增钱包,选择钱包类型的时候  我们选择导入钱包 

 

 

 

然后我们从b节点操作公共钱包,往a节点子账户发送50个以太坊,

此时,a节点子账户是有20个以太坊的,我们直接操作转账:

b节点上操作公共钱包超出限额 也是需要其他账户确认的。我们继续操作

 

 我们点击批准并选择Account2 继续

输入密码 确定

至此,关于以搭建以太坊私有网络多节点和创建及使用多重钱包 已经全部结束,文中并未涉及完整,还有些细微地方可能没有提及到,如有需要,可以进群讨论。

下一篇,我们将开始 讨论 关于编写 智能合约及发一个简单代币 

 

未完待续。。。。

 

相关文章: