区块链共识算法综述论文阅读笔记:A Review on Consensus Algorithm of Blockchain

在阅读论文之前,首先有一个自己的思考过程,以及带着问题去看论文:

  • 什么是共识?
    • 共识就是在一个去中心化的系统中确保完成公平的判断的机制。
  • 共识都有哪些分类?
    • PoW, PoS, DPoS, PBFT等。
  • 不同种类的共识都有哪些优缺点?适用于哪些领域?
    • PoW允许任何人加入,但耗费大量运算资源且吞吐量低;
    • PoS减少预算量,但牺牲了一部分中心化的要素,且容易出现大权益的用户权重过高的问题;
    • DPoS没有了解过,待了解;
    • PBFT不进行运算,通过轮训验证者和提出者的方式来确保公平性,并且可以预防1/3以内的拜占庭节点;
  • 分片间的共识如何完成?
  • 目前的共识算法还有哪些可以改进的地方?能否应用于Tendermint的共识算法来减少通信量?
  • 共识发生在什么阶段?由哪些组件完成?

下面开始阅读论文,只对关键部分进行翻译和说明。本文是区块链共识算法的综述论文“A Review on Consensus Algorithm of Blockchain”的阅读笔记,论文对区块链的共识算法进行了全面的描述,但是受限于时代因素,里面的一些内容有一定错误或过时,例如PoS+PoW被分类为PoS、认为PoW具有无限的可扩展性等。
文中引用的网络文章在文末都有出处标明,强烈建议认真阅读并支持原作者,侵删。

A Review on Consensus Algorithm of Blockchain

摘要:共识算法在维护区块链的安全性和高效性方面起着至关重要的作用。本文综述了共识算法的基本原理和特点,分析了不同共识机制的性能和应用场景;为选择合适的一致性算法提供了技术指导,并总结了区块链技术的局限性和未来发展方向。

1 介绍

没啥内容,介绍了由比特币发展起来的区块俩历史,以及目前的发展方向,主要分为数字货币、非数字货币应用以及区块链底层技术——例如挖掘难度控制、共识算法的可扩展性、智能合约。区块链包括了P2P通信、共识算法、分布式存储技术、加密算法等。本文介绍了主流共识算法及其优缺点,并且给出了在不同场景下选择合适的共识算法的建议。

2 共识算法

区块链应用总是面临两个问题:双重支付和拜占庭问题。区块链技术通过很多分布式节点一起验证事务的方法来解决双重支付的问题。面对拜占庭问题,区块链需要正常节点识别恶意节点的信息,并维持正常节点提出的结果,这同样需要共识算法来保证。

2.1 PoW

比特币所使用的工作量证明,其核心思想是通过节点之间的哈希算力竞争来分配记账权和奖励。不同节点根据先前块的信息来计算一个数学问题的解决方案,第一个计算出结果的节点可以创建下一个块并获得一定量的比特币奖励。步骤如下:

  1. 每2016个块生成后比特币系统会根绝整个网络中的指标重新评估并调整计算难度;
  2. 在上一个数据块生成之后,收集网络上所有提交的事务。然后计算这些交易的Merkle根,并填写区块版本号、前一个区块的256位哈希值、当前目标哈希值、Nonce随机数等信息;
  3. 在第2步中,前两个值都是固定的,第三个值会因为网络延迟等问题导致不同节点打包的交易不同,第四个随机数需要在0~232中随机选取并计算SHA256哈希值。如果该哈希值小于目标值,那么就可以广播该区块。整个过程需要等到其他节点完成区块验证后结束。
  4. 如果在一定时间内节点没有试出正确的随机值,那么就重新根据新的块生成后的新状态来计算。

PoW以工作量为保障。新创建的块与它前面的块相链接。链的长度与工作量成正比。所有节点都信任最长的链。如果有人想篡改区块链,他需要控制世界上超过50%的哈希能力(51%算力攻击),以确保他可以成为第一个生成最新区块并掌握最长链的人。篡改的收益可能远远大于成本。因此PoW可以有效地保证区块链的安全。

为什么需要掌握51%算力呢?这是为了保证攻击者能够随意生成区块,而不需要被其他区块验证。设想以下场景:我是拥有51%算力的攻击者,我在当前块高度上记录“我给小明转了100比特币”。小明在看到这个区块后给了我现实中的商品,而我在拿到商品之后利用算力迅速计算出了后续6个块,但是这六个块中并没有包含该交易。在其他节点的视角来看,根本就不存在该交易,因为记录该交易的那个块已经由于不够长而被舍弃。如果我没有51%算力,那么我就无法确保我能够在其他矿工之前生成最长的区块链,区块链完全有可能沿着包含该交易的那个块的方向延伸下去,这样这笔交易就被记录了,我就无法作恶了。

2.2 PoS

个人感觉这部分并不是完全的PoS,毕竟点点币的共识算法属于PoS+PoW,真正的PoS应该是新的以太坊的共识算法,不过碍于论文年代限制,这里并没有介绍。

权益证明最早被用于点点币PPCoin中,点点币引入了币龄的概念,币龄=币的价值×币创建后经过的时间。币龄越大权益越大,并且在生成块后,币龄越高就可以获得越多的回报。点点币中生成块还是需要计算哈希值,只不过挖矿的难度与币龄成反比,一定程度上减少了解决难题的开销,点点币的具体例子可以看我的另一篇博客中的2.2小节。

点点币中的PoS鼓励硬币持有者增加持有时间。随着币时代的概念,区块链不再完全依赖工作量证明。使用PoS的区块链的安全性随着区块链值的增加而提高。攻击者需要积累大量的币并持有足够长的时间才能攻击区块链。这也大大增加了攻击的难度。

2.3 DPoS

Delegated Proof of Stake,委托权益证明。随着科技的发展和比特币的升值,中本聪设想的CPU挖矿早已过时。哈希算力被具有大量矿机的参与者所霸占,普通矿工很少有机会创建区块。在带有DPoS机制的区块链中,每个节点可以根据自身权益来选择目击者(witness)。在整个网络中,参与竞争并获得最多票数的前N名目击者拥有会计权。定义证人的数量N,使至少50%的投票股权拥有者认为有足够的去中心化。当选的目击者按照指定的方式一个接一个地创建新的区块,并获得一些奖励。如果目击者无法创建其分配的区块,该区块的活动将被移动到下一个区块,股权拥有者将投票选举一个新的目击者来取代它。使用DPoS的区块链比PoW和PoS更高效、更省电,但是也具有投票积极性低、公平性相比PoS较低、难以阻止坏节点等问题。

2.4 PBFT

1999年提出的实用拜占庭协议解决的传统拜占庭协议的指数级消息量的问题,同时能够预防1/3以内的拜占庭错误节点。实用拜占庭算法包含五个阶段:

  • request阶段:客户端发送请求,主服务器节点接受请求并设置时间戳;
  • pre-prepare阶段:主服务器节点记录请求消息并给它一个订单号。然后,主服务器节点向其他后续服务器节点广播一个pre-prepare消息。其他服务器节点决定是否接受请求。
  • prepare阶段:如果一个服务器节点选择接受请求,它会向所有其他服务器节点广播一个prepare消息,并接收来自其他节点的prepare消息。在接受了2f+1个消息之后,如果大多数节点接受请求,那么进入提交状态;
  • commit阶段:处于commit阶段的每个节点都向服务器中的所有其他节点发送commit消息。同时,如果服务器节点收到2f+1条commit消息,则认为大多数节点达成共识接受请求。然后节点执行请求消息中的指令;
  • reply阶段:服务器节点回复客户端。如果客户端由于网络延迟没有收到应答,则重新向服务器节点发送请求。如果请求已经执行,服务器节点只需要重复发送应答消息。

2.5 Raft

在拜占庭将军问题被提出后,Lamport在1990年提出了Paxos算法来解决特定条件下的一致性问题(他也因此获得了2013年的图灵奖)。Raft实现了与Paxos相同的效果,并且在工程实现和理解上更加方便。该文章很好地阐述了Raft算法及其和Multi-Paxos算法的异同对比,强烈建议阅读原文。

3 共识算法的分析

所有的共识算法都有自己的特点。本章分析了共识算法的安全性、验证速度、吞吐量(单位采用每秒事务数,transactions per second,TPS)、容错性、可扩展性和缺点,以及在不同场景下的使用情况。

3.1 性能

  1. 安全性:PoW和PoS利用全网共享账本解决了安全问题。只要诚实节点能保证最长链,系统就是稳定的。文中以PoW为例给出了安全性证明。当恶意节点算力大于诚实节点算力时,最终作恶成功的概率收敛于1;当恶意节点算力q小于诚实节点算力p时,假设n个块后当前区块被确认,文中给出了双重支付攻击成功概率与恶意节点算力占比之间的关系图:
    在这里插入图片描述

    可以发现,在比特币中采用n=6就意味着当恶意节点算力不超过总算力的20%时,双重攻击成功的概率几乎可以忽略不计。文中给出了具体的证明过程,这里略。

  2. 为了减少分岔和等待足够多的块确认,使用PoW或PoS的区块链的吞吐量受到限制。在该区块链中,所有节点都可以按照预先设定的规则进行挖掘。吞吐量和验证速度与节点数量无关。因此,这样的区块链网络几乎具有无限的可扩展性。

    这里说实话有点扯,区块链中的可扩展性是不能脱离吞吐量来说的。文中的观点是因为吞吐量大小与节点数量无关,所以理论上来说节点可以无限地增加。但这是不合理的,因为按理来说网络的吞吐量应该与节点数量相关,节点越多吞吐量应该越大,而比特币等系统采用的PoW和PoS相当于是无法增加吞吐量,这其实是在区块链不可能三角中牺牲了可扩展性。真正的可扩展性应该是随着节点数目的增加,为了满足交易要求,系统的吞吐量也应该有所增加,例如分片技术。

  3. 使用DPOS可以拥有比PoW和PoS更高的吞吐量和更快的验证速度。使用PBFT协议能够容忍33%的恶意节点,但是PBFT由于节点需要与其他所有节点进行通信才能更新提议者,因此协议运行速度可能受制于网络速度和节点网络稳定性。Raft协议中能够容忍一半以内的非拜占庭节点,但是无法容忍拜占庭节点,并且领导节点占据绝对优势地位,因此吞吐量、可扩展性和安全性都很大程度上受限于单个节点的最大性能。各个共识算法的对比如下图,其中请自动忽略可扩展性那一行:
    在这里插入图片描述

3.2 局限

  1. PoW具有以下的一些缺点:
    1. 能耗高:需要购买昂贵的硬件、耗费大量的电力;
    2. 吞吐量低:为了减少分支的产生,区块的平均计算时间被设置为10分钟,存在效率低的问题;
    3. 哈希能力的集中化:矿工们之间相互合作建立“矿池”机构,大的矿池算力可能会造成算力垄断;
  2. PoS+PoW的方法没有从根本上解决资源浪费和交易缓慢的问题,并且币龄的引入可能会导致流通性降低的问题。
  3. PBFT的主要问题是通信效率低,因为同步新提议者时需要与其他所有节点进行通信。
  4. 在Raft中leader节点占据绝对优势。保卫leader的安全非常重要。一旦leader被恶意控制,系统将被彻底摧毁。此外,系统性能受限于节点的最大吞吐量。

3.3 应用场景

区块链可以分为三类:

  1. 公链:
    • 每个人都可以成为节点中的一员,并根据规则做出贡献以获得奖励。
    • 节点之间没有信任关系。
    • 公共区块链是完全开放和去中心化的。
    • 公共区块链上的所有交易永远不能更改或撤销。
    • PoW、PoS和DPoS共识算法是公共区块链的常见选择。
  2. 私链:
    • 私有区块链表示区块链的拥有者拥有更改信息的最高权限。其余节点的读取权限有限。
    • 与公开的区块链相比,私有的区块链具有易于修改和交易成本低的特点。
    • 私有区块链的交易验证只需要指定一些高信用节点即可完成。
    • 私有区块链适用于更封闭的网络,如企业内网intranet。解决崩溃故障比解决拜占庭故障更重要。根据网络规模的不同,可以使用PBFT和RAFT共识机制。
  3. 联盟链:
    • 联盟链由多个参与方组成,主节点由参与者预先指定。
    • 被授权的区块链成员不完全信任其他成员。
    • 每个参与者根据规则选择自己的共识节点。交易需要被大多数共识节点识别。
    • 联合体区块链的开放程度和集中度介于公有和私有区块链之间。经过授权的区块链适用于不同企业搭建的半封闭网络。不同企业之间可能存在冲突,部分节点可能成为恶意节点,因此在这种场景下最好采用PBFT。

参考文章

  1. https://ieeexplore.ieee.org/document/8123011
  2. https://zhuanlan.zhihu.com/p/32052223
  3. https://zhuanlan.zhihu.com/p/37455007
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值