区块链开发(一)搭建quorum联盟链环境

通过各方资料了解学习之后,决定自己搭建quorum联盟链。发现国内资料很少,仅有的几篇也都是坑,于是整理下搭建联盟链的过程,仅供产考。特意通过ubuntu服务器搭建。以下内容均基于ubuntu系统。

简介

Quorum是由美国的金融机构摩根大通推出的企业级区块链平台

Quorum是一个联盟链

Quorum基于以太坊, 在基础结构上保持与以太坊的同步, 增强的部分集中在隐私控制、权限控制、共识机制,以及提高整个链的交易性能

特点

逻辑架构


从上面的逻辑架构图可以看出一个Quorum结点由两部分组成:1.基于以太坊的QuorumNode 2.Quorum增加的Constellation.

Quorum最初设计的实现就是对以太坊geth的一个minimal fork, 官方的一个实践准则就是保持对以太坊geth的持续跟进.

在共识方法上, Quorum用QuorumChain取代了以太坊的POW, 最新推出的2.0.0又增加了Raft的共识方法, 最终的目标就是形成一个插件化的共识体系.

Quorum作为企业级联盟链, 强调隐私控制与权限管理, Constellation就是用于这一个目标的组件.Constellation中的Transaction Manager用于管理私有交易在联盟内部成员之间的同步, Enclave的职责就是配合Transaction Manager来完成私有交易的密码学相关的处理工作.

交易流程


结合上面的交易流程示意图, 一次Quorum的交易流程分成两种情况:

如果这是一个公开我交易, 那么这个交易直接走以太坊的交易流程, 交易不会经由Transaction Manager来处理.

如果这是一个私有交易, 那么这个交易就会被QuorumNode发送到Transaction Manager, 进行私有交易的处理(具体细节会在以后的系统中结合实例代码与演示加以剖析).

一,安装go环境

参考:https://blog.csdn.net/a1160712069/article/details/78257307

二、下载资源

首先安装quorum

git clone -b v2.1.0  https://github.com/jpmorganchase/quorum.git

cd quorum

make all

编译完后,quorum/build/bin目录下会生成如下文件列表

abigen bootnode evm examples faucet geth p2psim puppeth rlpdump swarm wnode

将上面这些加入系统path中。

三,获取costellation-node可执行文件

下载地址:https://github.com/jpmorganchase/constellation/releases/tag/v0.3.2

下载下来后解压,得到constellation-node,加入系统PATH中。

四、搭建raft共识的联盟链

因为联盟间一般是存在信任关系,因此可以使用raft共识算法,这个算法可以容忍节点挂掉,但不能容忍拜占庭错误,即不能存在恶意节点。这样就不用以太坊中的pow算法了,节省cup、内存,而且出块时间块。另外,这个算法中不会存在空块,节省大量空间,如果没有交易,那么生成区块就暂停。

1,首先安装quorum-examples

git clone https://github.com/jpmorganchase/quorum-examples.git

cd quorum-examples

2、初始化,创建7个节点,其中1-4号节点是permissioned节点,即这些节点只允许和permissioned-nodes.json中的节点建立连接,其他节点无法连接到这个节点。raft-init.sh

以第一个节点的配置为例解释命令:

第一行:创建节点1的目录

第二行:permissioned-nodes.json中存了已经设置好的enode值,即节点的地址,通过这个值,运行geth客户端时可以将不同的节点连接起来。与普通以太坊的geth客户端不同,这里需要一个static-nodes,应该是指定和哪些节点建立连接吧。如果启动geth时不指定--permissioned,启动后本节点就会寻找static-node里面的节点建立连接。

另外,这个enode的值是与nodekey相关的,就是第五行中的nodekey文件,两者应该是一一对应的。所以第五行中将nodekey复制到这个目录中,就相当于把一个节点的唯一标识复制过去。nodekey的生成方法:运行bootnode -genkey nodekey即可生成nodekey文件,再运行bootnode -nodekey nodekey就会输出本节点的enode信息,记录下来即可。

第三行:将permissioned-node.json复制到节点1的目录下,这里面记录了哪些节点可以与本节点建立连接,不在这个列表里的节点是不能和本节点连接的。

第四行:将一个账户文件复制到节点1下的目录,启动geth后,用eth.accounts查账户,就会显示这个文件中的账户地址。

第五行:将nodekey复制到节点1目录下,它作用如上面所述。

第六行:根据创世区块信息genesis.json初始化区块链。

3,启动constellation和geth节点

(1)constellation:可以将其看成是分布式密钥服务器、PGP加密和邮件传输代理的合并,用它来实现quorum的私有机制。

使用方法:生成密钥constellation-node --generatekeys node,就会生成node.pub和node.key两个密钥文件,分别是公私钥文件。如果在生成是使用密码加密,那么在启动contellation-node时是需要输入密码的,为了方便,下面的方法中不输入密码。启动节点的constellation-start.sh脚本

第五行是代表一共启动7个节点,需要在不同的节点目录

第7-9行:建立节点目录

第10-11行:将之前生成的公私钥对放到对应几点目录中

第12行:删除之前存在的旧的 .ipc文件(如果存在的话)

第13行:启动constellation-node节点,具体参数参考https://github.com/jpmorganchase/constellation/blob/master/sample.conf

第15行:将控制台的输出定向到指定文件里,如果启动错误,可以去对应文件查看错误内容

第18-28行:等待所有constellation-node启动完毕,其中24行 -S 是查看对应文件是否存在。

可以运行./constellation-start.sh来启动测试,启动完毕后输入ps -ef | grep constellation-node可以查看进程情况,输入killall constellation-node 来终止程序运行。

启动失败:

参考:https://www.jianshu.com/p/cb0f6372cf93

4,下面来启动7个geth节点,启动raft共识,raft-start.sh

其中

第7行:调用上面写的constellation-start.sh脚本,启动7个constellation

第11行:启动geth节点需要的参数,这里需要制定--raft来使用raft共识方法

第12-18行,启动7个geth节点,需要指定raftport端口号,用 --permissioned参数来指定那些节点是有连接权限的。

这样,constellation-node和geth节点都启动起来了,也就是环境已经搭建好了,可以在上面开发了。开发之前先做一下测试。

五,减少节点数量

很容易减少示例中使用的节点数量。您可能希望出于内存使用原因或仅尝试使用其他网络配置来执行此操作。

要运行具有5个节点而不是7个节点的示例,需要进行以下更改:

1,raft-start.sh

注释掉用于启动Quorum节点6和7的以下行

2.constellation-start.shtessera-start.sh(取决于您使用的隐私管理员):

将2个实例更改for i in {1..7}为for i in {1..5}

进行这些更改后,脚本raft-init.sh和raft-start.sh脚本可以正常运行。

本篇到此结束,

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,923评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,154评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,775评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,960评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,976评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,972评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,893评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,709评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,159评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,400评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,552评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,265评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,876评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,528评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,701评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,552评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,451评论 2 352

推荐阅读更多精彩内容

  • 原文链接:https://blog.csdn.net/zhj_fly/article/details/805607...
    万年小学生阅读 2,473评论 0 1
  • 根据英文原版整理,内容有增删 1、开发语言、框架与工具 语言 Solidity - 官方推荐以太坊智能合约开发语言...
    Rakutens阅读 848评论 0 2
  • 1.执行概要 在过去的几年里,企业已经意识到区块链技术(例如比特币和以太这样为公共网络提供动力的技术)是如何被用来...
    Toooooric阅读 1,516评论 0 0
  • 檀香一枚 清茶一壶 琴声悠然 只为等你盘膝而坐
    8a694f9ff49f阅读 197评论 1 1
  • 我开始了看简书的日子,每次看完后又有了激情,因为有那么多人在坚持写文章,坚持看文章,而我却因为害怕自己写不好...
    星丫丫阅读 257评论 5 2