手机版

当前位置:数字货币交易所 > 区块 >

深度分析企业级区块链解决方法——Quorum (上)

时间:2021-07-14 07:53:26|浏览:

出处:360区块链实验室

导读:Quorum是由摩根大通开发的企业级分布式账本和智能合约平台,主如果为知道决区块链技术在金融及其他行业应用的特殊挑战而设计。大家将对Quorum非常重要的几个特质做剖析,本文是这个系列的第一篇,《第二篇》《第三篇》Quorum介绍。

简介

Quorum是一个网盟链策略,由摩根大通开发的企业级分布式账本和智能合约平台,它是在ETH的基础上开发的,提供私有智能合约实行策略,并满足企业级的性能需要。适用于需要高速买卖与高吞吐量处置网盟间进行私有买卖的应用场景,主如果为知道决区块链技术在金融及其他行业应用的特殊挑战而设计。

Quorum是基于ETH的Golang版本开发而成,为金融服务行业提供ETH许可链策略,可以便捷的支持买卖与合约的隐私性。在go-ethereum的基础上,主要的改动点有如下几项:

· 添加了买卖与合约的隐私性:对于一笔买卖来讲,只有买卖的有关适才能看到买卖的细则,非有关方是看不到买卖细则的
· 互联网/节点的许可管理:因为Quorum不是公链,而是网盟链,这个特征决定了不是任何节点都是可以随意加入区块链的,只有经过授权的节点才可以加入区块链
· 调整了共识机制:把ETH原有些PoW调整为基于Raft的共识机制
· 更高性能:因为共识算法的调整,创建新块的步骤和整个区块链对新块达成协议的速度大大提升

Quorum的系统构造

如下图所示,这是Quorum企业级区块链的系统构造图:

从构造图中大家可以看到,Quorum是基于ETH的Golang版本开发。Quorum做设计之初就确定尽量防止重复造轮子,尽可能复用更多的已有技术,尽量的降低对ETH的修改,以便于将来合并ETH升级之后的代码更容易。

整个Quorum的系统构造分为上下两层,

下层是传统的区块链层

这一层为整个Quorum提供基础的区块链功能服务,作为上层应用层的基础设施,为上层提供相应的编程接口,使得应用层可以充分的借助底层的区块链功能。

从图中可以明显的看出来,这一层包含了三大组件:

· 基于ETH的Quorum节点
· 事物管理器
· 飞地

Quorum节点,就是修改后的ETH的Golang版本达成,用以存储公共的买卖和私有买卖。Quorum对geth做了以下改动:

· 把PoW共识算法,修改成基于Raft的共识算法
· 点对点互联网层,修改成只有授权节点才能加入互联网
· 区块生成逻辑,由检查“全局状况root”改为检查“全局公开状况root”
· 区块验证逻辑,在区块头,将“全局状况root”替换成“全局公开状况root”
· 状况树,分成公开状况树和私有状况树
· 区块链验证逻辑,修改成处置“私有事务”
· 创建事务,修改成允许买卖数据被加密哈希替代,以维护必需的隐私数据
· 删除ETH中Gas的定价,尽管保留Gas本身

另外就是包含了Quorum添加进去的非常重要的Constellation模块,这个模块大家可以想象它是一个分布式的密钥服务器,等同于用PGP加密消息的MTA(消息传输加盟)互联网,做为一个独立的模块,它可以适用于包括区块链在内的很多种类的应用程序,它是达成Quorum的“隐私引擎”,现在的版本用Haskell语言撰写。

Constellation模块又进一步的细分为两个子模块:

1.事务管理器(Transaction Manager): 允许访问私有事务的加密买卖数据、管理当地数据存储与与其他事务管理器的通信。它做隐私数据的数据层,提供数据的安全访问并借助Enclave来达成数据的安全加密。

2.飞地(Enclave) Enclave就是为知道决区块链中记帐的真实性和安全性而达成的一个模块。它通过事务隔离和特定的加密手段来提供并行操作,大大提升了性能。正如上面所讲,隐私数据的安全处置基本都是通过Enclave来达成的。

上层是商业逻辑层

具体的业务应用程序全部都在这一层,应用层用底层提供的区块链功能来达成传统的商业业务到区块链系统的移植。这一层又细分为三个子模块:

· 智能合约模块:
· 去中心化应用模块
· 已有些App集成模块

Quorum的解决方法,是用密码学技术来对私有买卖数据加密,以预防买卖方以外的人看到敏锐数据。这种策略用一个单独的共享区块链,一个智能合约框架,与修改后的ETH;其中智能合约框架对隐私数据进行了隔离。对go-ethereum代码库进行的修改,包括区块提案和验证过程的修改。区块验证过程,是通过实行买卖合约代码来进行的,譬如所有节点都对公开买卖、和与买卖方有关的私有买卖进行验证;对于其他私有买卖,节点将会忽视合约代码的实行过程。

这种设计,把状况数据库切分成为了两部分,一部分是公开状况数据库,一部分是私有状况数据库。其中公开状况数据库存储所有公开的数据,譬如原始ETH的所有买卖信息都是公开数据。而私有状况数据库则只保存私有些买卖信息,而且这种买卖信息只有买卖的有关适才能对其解密和查询,非买卖有关方则没办法查询买卖的详细情况,这都是通过Constellation模块的加密所完成的。另外,链上所有些事物仍然可以同步到所有节点,为预防篡改和隐私而做了安全加密处置。如下图所示:

买卖隐私性

买卖隐私性是Quorum的独有特征,是其核心功能之一。为此,Quorum引入“公开买卖”和“私有买卖”这两个定义。注意,这只不过一个理论上的定义,事实上Quorum并未引入新的事务种类;只不过在ETH事务模型的基础上扩展包含一个可选的privateFor参数,这个私有参数会使得Quorum把这些事务当做私有事务,另外加入一个IsPrivate办法来辨别买卖是不是是私有事务种类。

下面大家以处置私有买卖的步骤为例讲解Quorum的事务步骤,如下图所示:

在这个案例中,A和B构成了私有买卖AB的买卖双方,而C机构不参与该买卖。

1. A将隐私买卖发送到Quorum节点,节点指定买卖的有效载荷(内容),并为A和B指定PrivateFor参数为A和B的公钥。
2. 节点将Tx发送到对应的Transaction Manager并存储有关的买卖数据。
3. Transaction Manager调用加密的Enclave模块有关函数请求对Tx加密。
4. 节点A的Enclave检验A的私钥,假如验证通过,就进行下列动作:
5. 第一步,生成一个对称密钥和随机值(说明一下这里用对称密钥有哪些用途是为了加迅速度)。
6. 第二步,用上一步生成的密钥加密Tx及有关内容。
7. 第三步,由SHA3-512来计算加密后的Tx的内容的HASH值。
8. 第四步,遍历买卖方列表(此处为A和B)用第一步产生的密钥对用第一步中的public key加密,然后生成一个新的值(加密办法PGP)。
9. 第五步,将上述二三四步的结果返回给Transaction Manager.
10.A的Transaction Manager用从 Enclave 中获得的 hash 值作为索引把加密后的TX与加密后的密钥保存到当地。同时,Transaction Manager会把hash值,加密后的Tx,public_key_B加密的密钥这三项通过HTTPS发送给PartyB的Transaction Manager。PartyB的Transaction Manager收到数据后,会进行ACK/NACK的应答。应该注意的是,假如A没收到应答,那样买卖不会在网上传播,也就是说,接收人存储通信的有效载荷是互联网传播的首要条件条件。
11.一旦发往B的Transaction Manager的买卖成功,A的事务管理器便将hash值返回给其对应的Quorum节点。该节点用hash值来替换原来Tx的买卖内容(有效载荷)。修改Tx的V值为37或者38(Private Transaction的标识)。其他节点可以通过这个V的值来判断其是不是为已加密买卖内容的有关私有买卖;不然,即为一个无意义的字节码有关的公开买卖。
12. 用标准的ETH的通信协议将节点通过点对点方法广播给整个互联网。
13. 此买卖被打包到区块中,并分发到各个互联网用户。
14. 节点收到这个Tx的区块后,发现这个Tx的V值为37或38。表明这个Tx是隐私的买卖,需要解密,需要调用当地的事务管理器,最后决定是不是赞同这笔买卖(用hash索引查找)。
15. 由于用户C的节点不可以控制这笔Tx,所以它只能接收到一个NotARecipient的消息,从而忽视这笔买卖——c用户不会更新我们的私有状况数据库。A和B将会在我们的事务管理器中查找哈希值,辨别他们的确赞同该买卖,然后它们调用对应的Enclave模块,传递已加密买卖内容和加密的系统密钥和签名。
16. Enclave模块验证签名,然后用在Enclave中保存的该用户的私钥解密对称密钥,用解密的密钥对买卖内容进行解密,然后将解密的买卖内容返回给事务管理器。
17. 用户A和B的事务管理器,将解密的Tx后通过EVM实行。实行完成后将实行结果返回给Quorum节点,并更新Quorum节点的私有状况。注意:一旦代码被实行后将会被抛弃,因此在不经过上述过程的状况下,它没办法被读取。

基于Raft的共识机制

Quorum放弃了ETH本身的PoW共识算法,而是用了基于Raft的共识机制,其用了ETCd的Raft达成源码。Quorum觉得对于这种网盟链来讲,没有作恶节点,所以无需拜占庭容错并且需要更快的出块时间(以毫秒而非秒为单位)和事务最后确认(没有分叉)。还有一个特征是,这种共识机制不会去创建空白区块,而是根据需要更快、更有效的创建新区块。

在geth命令添加 --raft 标志,就会使得geth节点运行raft共识算法。

Raft和以太坊都有我们的“节点”定义,但它们稍微有点儿不同。

在Raft里面,一个“节点”在正常操作的时候,要么是Leader,要么是Follower。在整个集群里面,只有一个Leader,所有其他的节点都要从这个Leader来获得日志数据。这里还有一个Candidate的定义,不过只是在Leader选举期间才有。

但在以太坊里面却没Leader和Follower如此的定义,对于任何一个节点来讲,都可以创建一个新块,这就像Raft里面的Leader。

在基于Raft的共识算法中,在Raft和以太坊节点之间做了一对一的对应关系,每一个以太坊节点也是Raft节点,并且根据约定,Raft集群的Leader是产生新块的唯一以太坊节点。这个Leader负责将买卖打包成一个区块,但不提供工作量证明。

在这里把Leader和产生新块的节点绑定到一块的重要原因有两点:第一是为了便捷,由于Raft确保一次只有一个Leader,第二是为了防止从节点创建新块到Leader的互联网跳转,所有些Raft写入操作都需要通过该跳转。Quorum的达成关注Raft Leader的变化——假如一个节点成为Leader,它将开始产生新块,假如一个节点失去Leader地位,它将停止产生新块。

Quorum用现有些ETHum 点对点传输层来负责在节点之间的通讯,但只通过Raft的传输层来传输Block。它们是由Leader创造的,并从那里传输到集群的其余部分,一直以相同的顺序通过Raft传输。

当Leader创建新块时,不像在以太坊中,块被写入数据库并立即成为链的新Head,只在新块通过Raft传输之后才插入块或将其设置为链的新Head。所有节点都会在锁定步骤中将链扩展到新的状况,就仿佛是他们在Raft中同步日志。

节点授权与安全

节点授权,是用来控制哪些节点可以连接到指定节点、与可以从哪些指定节点移除的功能。现在,当启动节点的时候,通过指定--permissioned参数在节点级别处进行管理。

假如指定了--permissioned参数,节点将查找名为permissioned-nodes.json的文件。此文件包含此节点可以连接并同意来自其连接的enodes白名单。因此,启用权限后,只有permissioned-nodes.json文件中列出的节点成为互联网的一部分。 假如指定了--permissioned参数,但没节点添加到permissioned-nodes.json文件,则该节点既不可以连接到任何节点也不可以同意任何接入的连接。

概要

Quorum通过对互联网节点的授权管理,使得只有被授权的节点才可以加入互联网;对共识算法的调整,使得Quorum拥有更高的速度和性能;革新的隐私模型,特别私有买卖的处置,使得买卖的隐私性大大加大,这所有都使得Quorum很合适为金融场景服务。

Copyright © 2002-2021 数字货币交易所 (http://www.bjfdjx.com) 网站地图 TAG标签