论文原名:Survey on Private Blockchain Consensus Algorithms
作者: Sunny Pahlajani,Avinash Kshirsagar,Vinod Pachghare
链接:ieeexplore.ieee.org/document/87…
写在前面:本人在区块链方向了解不够深入,如有错译、漏译等问题欢迎在评论区指正
摘要
区块链是一种分块记录形式的分布式账本,这些块使用加密哈希进行连接。每个块都包含了前一块的哈希、时间戳,以及事务数据。共识层是区块链体系的主要结构,在这一层中配置了共识协议来决定如何在区块链中添加新块。共识算法解决了区块链的信任问题,这一算法可以分为两类,第一类是基于投票的共识,其需要加入到区块链网络的节点在将块添加到区块链之前,广播它们交易或挖掘到新块的结果。第二种是基于证明的共识,其需要加入到区块链网络中的节点进行数学难题的求解,以证明它们比其他块更有资格进行块追加或挖掘工作。可以通过使用合适的共识算法来提高区块链的效率,然而,私有区块链中对共识算法的选择可供的数据和理论支持非常有限。本论文为选择合适的算法提供了一些理论和数据,将有助于研究者进一步探索私有区块链环境中的共识
关键词
基于证明的共识;基于投票的共识;拜占庭容错共识;崩溃容错共识
1. 介绍
区块链是同时存在于网络中多个节点的分布式数据库,是一种随着新“块”的添加而不断增长的分类账册。每一块都包含了时间戳和前一块的链接,因此它们实际上形成了一种可追溯到初始块i的链式结构。区块链中不存在有单个节点对数据库进行维护,而是每个节点都有一个数据库副本。旧块保存着交易记录,同时新块被不可逆地追加到账册中,这让操作以前的交易记录是不可能的,也因此使得账册不变
所有块都经过唯一编码,因此每个节点都可以验证数据,但是只有拥有唯一加密密钥(私有)的节点才能将另一个块添加到特定链中。只要您仍然是唯一知道密钥(私有)的节点,那就没有人可以控制您的兑换行为。同样,密码学也被用来确保网络中每个节点上区块链副本的同步
你可以将区块链视为一种先进的可恢复性记录:每个记录都是一个块,上面有一个标记,表示输入记录的日期和时间。可恢复性的历史记录[1]对于结论和恢复目的至关重要,因此专家和患者[2]都不应具有有效更改记录的能力。在任何情况下,专家都要求使用私人密钥以使他能够创建新记录,而患者拥有公用密钥,使他可以在任何需要的时候获取记录。这种技术使信息既开放又安全
这样,区块链是自治、直接并安全的。这种分布式账本的好处不言而喻:无论是成本和风险的降低,还是信息安全性提高,以及交易更加直接,大多数领域的组织都可以从这项新创新中明显受益
但是这种思想本身并不新鲜:它最初是在1976年的一篇研究论文《密码学的新方向》中说明的,但相当长一段时间以来,人们一直认为它是混乱的,没有被广为探讨。即便如此,在2008年,一个以笔名Nakamoto的无名人士或组织(比特币)出现了,这是一种作为数字货币方式较不复杂的区块链创新方式。比特币最终成为主要的计算机货币标准之一,以利用分布式创新来鼓励即时付款。由于区块链的缘故,它同样成为了主要的电子现金来解决双重支出[3]的问题。更重要的是,比特币绝对没有在后台操纵运行,并且是不可变的
比特币的稳定性、安全性和分散性使其成为发展最快的资源之一:仅今年一年,其成本就上涨了至少500%。因此,比特币不断发展的恶名使人们对其的基础创新进行了深入思考。目前,许多新技术企业都在争先恐后依赖区块链来干“下一件大事”,并且越来越多的从事金融和不同领域工作的个人开始意识到在比特币公开后所带来的效益。在全球供应链,财务管理,医药服务,政府和众多不同的企业中,开拓者正在研究利用区块链来破坏和改变常规行动计划的方法。许多行业负责人刚刚取得了显着的业务收益,包括更加突出的直接性,升级的安全性,功能的增强,可检测性,扩展的熟练度和交换速度,以及支出的减少
2. 共识
共识算法是一组节点的处理过程,其中,这组节点构建并支持最适合他们的选择。这是一种决策类型,这些节点需要帮助更优先的部分进行选择,而无视单个选择会带来怎样的后果。从根本上讲,这只是在组内部得出结论的一种技术手段。设想一个由十个节点组成的组,这些节点需要就一项使它们都受益的任务来做出选择。所有人都可以提出想法,但是其中最主要的那部分权值会更高。在任何情况下,其他节点都需要管理这一选择。现在设想一个具有大量节点的类似事物,可以保证一定不会使它变得越来越麻烦吗?共识计算不仅与投票的主要部分一致,而且还同意使每个人都受益的选票。这显然是该系统的成功。区块链共识模型是在网络世界中实现统一和正派的策略。在这种理解之下的共识框架被称为共识假设。共识算法有两种类型:基于证明的和基于投票的,以下各节将对它们进行说明
2.1 基于证明的共识算法
在基于证明的共识算法中,加入网络的节点需要解决加密问题才能获得附加块的权利。在公共区块链中,节点将区块附加到区块链后可获得奖励。基于证明的共识算法[4]的第一个版本是中本聪(Santoshi Nakamoto)提出的工作量证明。直到今天,基于证据的共识有不同版本,如下所示:
- 工作量证明 - 解决数学难题
- 权益证明 - 在区块链中拥有更多股份
- 耗时证明 - 有计划地设置一些超时时间
- 运气证明 - 随机选择
- 空间证明 - 需要更大内存的硬盘
以及上述任何共识类型组合的混合版本
1. 基于工作量的证明示例
如下图所示,节点/矿工将计算一个私有值。在猜出一个称为nonce的值后,通过SHA256的帮助完成散列,并以给定的困难级别来检查输出。如果散列值被接受,那么也可以正确地猜测nonce值,否则重复整个过程,即猜测另一个nonce值,直到找到正确的数。找出正确的nonce值之后,节点才可以广播其块散列值和nonce值到网络中的其他节点,以进行验证并将其附加到自己的账册中。从积极的角度来看,工作量的证明是高度安全的,而从消极的方面来看,其需要很高的计算能力。由于其缺点,权益证明和更多基于证明的共识算法得到了发展
2.2 基于投票的共识算法
在节点已知的私有区块链中,投票共识算法更可取。这是与基于证明的共识计算相反的根本区别,在共识计算中,定期允许节点加入并从检查系统中撤出。在基于投票的共识中,它要求在将区块附加到区块链之前在网络中交换结果。如果一个对等方希望在其链上附加一个块,则应检查至少x个(x是阈值集)对等方,如果其均对此表示同意才可以。如果存在f个失败的节点,则对于f决定追加一个块应该是可行的。因此,投票共识大致分为以下几类。
A. 拜占庭式 – 节点崩溃且不稳定
B. 崩溃 – 节点崩溃
3. 拜占庭共识
3.1 Hyperledger
Hyperledger[5]作为Linux基金会的一个项目于2016年启动,目前有50多个活跃成员。Hyperledger是分布式账本平台的应用。它用于运行智能合约,允许可插入实现的模块化体系结构。分布式账本协议的Hyperledger fabric协议由对等方运行。Hyperledger fabric中有两种类型的对等体:
- 验证对等方 - 这些对等方部署共识算法并验证交易
- 非验证对等方 - 这些对等方充当代理,可帮助连接客户端以验证对等方。它们可用于验证交易,但不能用于执行
验证对等方执行名为拜占庭式容错(BFT)的共识协议,并且有3种类型的事务要操作:
- 部署事务 - 在对等节点上部署智能代码
- 查询交易 - 返回交易条目
- 调用事务 - 执行已部署的事务并返回结果
为了进行事务验证(节点数为X),至少有三分之二的验证节点应正确执行部署在节点上的链式代码,以取得BFT共识中的正确结果。对于实用的拜占庭容错(PBFT)共识,智能代码事务应该是确定性的,否则会导致节点状态不一致。更简单的实现是在SIEVE协议中完成的,在该协议中,不确定的智能代码交易在最初就会被过滤掉
当前结构版本的功能包括:
- 具有确定性结果的专用区块链
- 可插拔的共识协议
- 安全证书,交易证书,注册证书的证书颁发机构
- 使用Node.js SDK与架构交互
Hyperledger fabric实现专用账本,同时包含安全性基础结构,所有交易授权和认证都是通过私钥证书来完成。证书颁发机构(CA)向想要加入网络的节点颁发注册证书。类似的,会颁发交易证书来进行提交,并且需要使用交易,更细粒度的交易安全性计划在下一个版本中提供
3.2 Corda
Corda是专门针对金融领域的区块链版本。Corda支持智能合约,一旦符合条件,该合约将自动执行,并可根据应用需求进行控制。财务数据通过智能合约链接到其法律上可强制执行的逻辑
双方及其状态之间的数字文档协议在Corda中称为状态对象。状态对象仅对相关方可见,这与公共对象的区块链不同。为了确保这种安全性,使用散列来识别各方及其数据。所有这些状态对象都是不可变的,并共同构成一个账本
Corda中的所有修改都是在事务的帮助下完成的,事务需要状态对象作为输入,并返回另一个对象作为输出。Corda中共识的主要特征是:
- 交易有效性
- 交易唯一性
正确性检查输出是否正确以及合同代码是否成功运行,唯一性检查是否执行过其他相同交易
Corda提供了达成共识的工具,如下:
- 用于检查有效交易的智能合约逻辑
- 时间戳和定制服务来对交易进行排序
- 用于在其间编写复杂协议的更简易的过程
3.3 采用Sumeragi算法的Iroha
Hyperledger iroha是Linux基金会托管的框架。Hyperledger Iroha易于使用,它为移动应用程序提供C ++驱动的特殊支持。Iroha的设计方式使其可以轻松地与另一种分布式账本技术集成,可以用作可重用组件的存储库
Iroha的目标:
- C++环境
- 移动和网络支持
- API支持以及与其他框架的集成
以下是具有sumeragi共识算法的hyperledger iroha体系结构。hyperledger iroha的功能是它的互操作性,这是一个开放源代码库,可以满足开发人员的需求和业务需求。该架构是从API、对等方交互、链业务逻辑和存储开始的不同组件的分层视图
超级账本iroha的事务流中的步骤如下
- Torii Gate接受客户端组成的事务,然后将其转发到特定对等方以进行无状态验证
-
验证后,事务首先被路由到Ordering Gate,Ordering Gate创建控制计划以连接订购服务
-
指令服务执行
1.事务排序2.将交易作为提案路由到对等方。Ordering Gate会路由未签名的区块,称为提案,如下图所示。仅当收集到一定数量的交易时或在一定的超时后才发送提案,因此,禁止共享空提案
- 在模拟器块中,状态验证由节点执行,并组成一个已验证交易的块,然后将其路由到Consensus Gate,以执行YAC
-
使用YAC[6]共识逻辑从一组对等方中选出一位领导者,然后由节点通过将其提议的区块及其签名转发给领导者来投票
-
仅当领导者从节点接收到多数签名的通过提议的块(阈值集,此处是其2/3)时,才提交一个块,然后领导者广播提交消息,提议该块应作为每个节点链中的下一个块进行提交
3.4 Ripple共识协议
为了解决分布式支付系统面临的三个主要问题,即准确性,一致性和实用性,创造出了Ripple共识算法。市场上有许多共识算法可以解决拜占庭将军的问题,但没有任何一个可以同时解决上述三个问题
Ripple协议组成:
- Serve(服务器)r - 运行Ripple服务器软件并帮助达成共识
- Ledger(账本) - 用于记帐交易记录,并在交易成功完成时更新
- Last Closed Ledger(最近关闭的账本) - 账本中最近成功修改的副本
- Open Ledger(开放账本) - 包含未通过的共识过程进行的交易的节点的本地副本,一旦交易通过共识过程,则该Open Ledger将成为Last Closed Ledger
- Proposer(提议者) - 多个服务器提议的交易将包含在共识轮次中,但仅接受服务器UNL列表提交的提议
- Unique Node List(UNL,唯一节点列表)- 每个服务器都有一个唯一的服务器节点列表,这有助于达成共识
Ripple共识算法在每个特定时间间隔运行并作用所有节点。成功达成共识后,Open Ledger将成为 Closed Ledger,并由网络中的所有节点维护
Ripple共识算法按以下过程循环运行:
- 所有有效事务均由先前未在Closed Ledger中作为候选集提交的服务器处理
- 然后,所有服务器在其UNL上合并服务器的候选集并开始投票
- 收到的票数超过最小比例的交易被移至下一轮,其余部分从第一轮撤回或重新开始
- 在最后一轮UNL的80%的交易中需要达成共识,从而引导交易从Open Ledger到Last Closed Ledger
凭借低延迟,*Ripple共识算法在分布式支付系统中做出了重大贡献,而分布式支付系统是早期共识算法所不能实现的
3.5 Stellar共识协议
Stellar共识协议是基于联邦拜占庭协议(FBA)这一全新模型的共识协议。FBA是一个链状结构,在每个节点中都有一个它认为重要的节点集。在考虑提交事务之前,它会等待其他重要节点中的大部分就任何事务达成协议。那些其他重要的节点直到它们所知道的节点也都同意该事务后,才同意交易,同样,大多数网络都接受该事务,因此对于任何攻击都不可行。毕竟在该协议中,交易被认为是所有对等方都承诺的。SCP是一种异步协议,即使在节点发生故障的情况下也可以确保共识
SCP提供了分散控制,低延迟灵活信任和渐近安全性等有利于达成共识的属性
SCP可以进一步分为:
- 提名协议
- 投票协议
在提名协议中,为每个slot生成密钥值,在充分运行后,为每个节点生成相同的密钥值。但是,存在两个主要难点。首先,节点之间没有协调,第二个故障节点可以重置多次提名过程。接着节点预测提名协议已执行成功后,它将启动投票协议。它使用联合投票来中止或进行投票,中止投票将被放弃,被卡住的投票将以更高的票数投票。因此,所有卡住的选票将移至更高的选票决定
SCP提供了保证不会卡死的保证,但是如果未选择适当的仲裁片,则SCP不提供安全性。仲裁是一组节点,仲裁片是其子集,可帮助节点进行协议处理
4. 崩溃共识
4.1 基于Raft的协议
基于Raft的共识机制用于私有区块链中更快创建区块、不需要拜占庭式失败,同时保证交易最终一致性的场景。它按需创建块并管理复制的日志,使用RPC调用进行通信
在Raft中,有三种类型的同级别角色:
- Follower(跟随者)
- Candidate(候选人)
- Leader(领导者)
下图为这三种角色的生命周期:
RPC调用:
- 请求投票选举Leader
- 附加由Leader发起的所有复制日志的条目
- 安装快照以将Leader日志的副本发送给Follower
客户端交互
客户端将请求发送给Leader。客户端首次启动时,它会随机连接到任何服务器。如果连接的服务器不是Leader,它将拒绝客户端的请求,并提供与最新Leader有关的信息。如果Leader崩溃,客户端请求将超时,并且客户端再次开始将请求发送到另一台服务器。通过心跳机制来检查Leader的状态
4.2 采用Federated共识的链协议
链协议使用Federated共识协议来达成共识。仅当自己由指定的最小允许数量的被块签名者签名时,才接受这个块。它检查M-of-N多签名规则,其中n是块签名者数量,m是要接受的块考虑的签名数量。可以根据当今的业务需求和安全性来调整M和N值
当新的块签名者加入并离开联盟[7]时,将添加或删除签名。块签名者的公钥作为参数传递给程序。该程序针对新块的哈希签名的公共密钥验证进行验证
共识算法
每个对等方都有一组受信任的对等方用于块签名,仅需要对n个块签名者中的m个达成共识,从而降低了所关注问题需要遍及整个网络这一复杂性。块签名者之间存在单个块生成器来进行协调,因此可以有效达成共识
块生成器从网络接收到的交易会过滤掉无效的交易,并将其聚合为块,然后将其路由给块签名者以进行验证。块签名者验证生成器转发的块,并在合适时对其进行签名
在大多数块签名者对块进行签名之后,它将在网络中发布该块,出售节点,对其进行验证并追加到其本地账本中
5. 结论
本文总结了一些用于私有区块链的最重要的区块链共识协议。我们讨论了私有区块链中使用的基于投票的不同共识,因此根据业务需求直接选择共识将对其性能产生影响。共识协议及其属性的概述将有助于研究人员将来的研究。可以通过在不同负载和同伴数量下实施不同的共识比较来进行进一步的研究,并使用一些基准进行评估,以获得所使用共识的实际性能指标