主页 > 下载imtoken钱包官方 > 第11课区块链常用共识算法介绍

第11课区块链常用共识算法介绍

下载imtoken钱包官方 2023-03-10 07:23:01

在上一节课中,我们学习了共识算法的理论基础。 今天我们继续深入研究区块链共识算法。 通过这门课,我们将学习工作量证明、权威证明、权威授权证明、实用的拜占庭容错等相关内容。

学习课程时,还可以获得为期一个月的BaaS平台试用机会,免费使用高性能区块链服务(点击链接免费领取)。 课程学习结合实操,让你快速成为区块链高手!

*以下是第11课的内容~

第11课区块链常用共识算法介绍一、共识算法的分类

共识算法解决的是对一个提案(Proposal)达成共识的过程。 根据要解决的问题是普通错误还是拜占庭一般问题,共识算法分为CFT(Crash Fault Tolerance)和BFT(Byzantine Fault Tolerance)。

CFT有一些经典的求解算法,包括Paxos、Raft及其变体。 在传统的分布式网络中,每个节点都不会为了盈利而故意伪造信息。 在很多情况下,是由于网络原因导致连接断开或发送错误信息。 因此,CFT共识算法被用于传统的分布式系统。

BFT 是区块链系统中常用的共识算法。 根据算法采用的策略,拜占庭容错算法可以分为两大类,即概率共识算法和绝对共识算法。 回顾CAP原理,两类算法的区别在于可用性和一致性的平衡:概率一致性算法以牺牲系统的一致性为代价来保证系统的可用性,而绝对一致性算法则是反之,保证系统的一致性。 以牺牲系统可用性为代价的一致性。

1.1 概率共识算法

概率一致性算法是指在不同的分布式节点之间,有很大的概率保证节点之间的数据是一致的,但仍有一定的概率保证部分节点之间的数据不一致。 对于某个数据点,节点间数据不一致的概率会随着时间的推移逐渐降低为零,最终达到一致性。

例如,工作量证明(PoW)、权益证明(PoS)和委托权益证明(DPoS)都是概率共识算法。

1.2. 绝对一致性算法

绝对共识算法是指在任何时间点,一旦对某一结果达成共识,就不可逆,即共识为最终结果,节点间数据保持绝对一致。 比如以PBFT算法为代表的确定性系列算法,就是绝对共识算法。

2. 区块链项目常用的共识算法

传统的分布式数据库主要使用Paxos和Raft算法来解决分布式一致性问题。 他们假设系统中的每个节点都是忠诚的,不作恶,但可能会出现消息丢失和延迟等问题。 当分布式数据库的所有节点由单个机构统一维护时,此假设成立。 在去中心化的区块链网络中,节点由互不认识、互不信任的多个参与者共同提供和维护。 在各种利益的驱使下,网络中的参与者可能会作弊作恶。 因此,Paxos 和 The Raft 算法不能直接用于区块链共识。

目前,区块链项目广泛使用的算法包括工作量证明(PoW)、权益证明(PoS)、共享授权证明(DPoS)、实用拜占庭容错(PBFT)等,其他项目使用混合算法两种算法,如PoW+PoS,DPoS+PBFT等。此外,还有燃烧证明(PoB,Proof of Burn),沉淀证明(PoD,Proof of Deposit),容量证明(PoC,Proof of Capacity)、经过时间证明(PoET,Proof of Elapsed Time)等新算法。

2.1. 工作量证明 (PoW)

比特币采用的共识算法_比特币的共识_比特币挖矿算法

工作量证明(PoW)需要工作端进行一些耗时且复杂的计算,而答案可以被服务器快速检查。 消耗的时间、设备、能源作为保障成本,确保服务和资源被真正的需求所使用。

在这里插入图片描述

工作量证明最常用的技术原理是哈希函数。 由于hash函数h()中输入的任意一个值n都会对应ah(n)的结果,而只要n改变一位,得到的结果就会完全不同,所以几乎不可能从中反推n h(n),因此,通过指定搜索h(n)的特性(比如要求小于某个值,即hash值的前缀需要一定数量的0,增加难度就意味着增加数量of prefix 0s), 允许用户进行大量的穷举计算, 只需工作量证明即可。

PoW项目案例:

PoW 共识算法最初是在比特币系统中提出并应用的。 在挖矿过程中,比特币系统将每个区块的预期出块时间设定为 10 分钟。 根据实际出块时间,定期调整出块目标难度,保证系统不会随算力变化而变化。 可以稳定运行。 为了保证比特币系统的稳定发展和区块的不断产生,比特币协议人为设定了这个10分钟的规则,让系统中的所有节点都可以用这10分钟来完成接收、打包、见证工作,同时在整个网络中广播生成的交易。

比特币将区块间隔设计为 10 分钟,这实际上是更快的交易确认和更低的分叉概率之间的折衷。 然而,分叉是不可避免的。 例如比特币采用的共识算法,当两个矿工 A 和 B 几乎同时计算出工作量证明解决方案时,他们立即将自己的区块传播到网络,这导致部分节点跟随 A 的区块,而另一部分节点节点跟随B的块。两部分网络数据不一致,即分叉。

比特币的策略是发生分叉后,两个分叉的网络分别继续挖矿。 由于算力的差异,一段时间后,两条分叉链的长度会不一致。 当网络上的节点收到两个分叉广播的区块后,选择包含区块最多的链(最长链,也就是难度最大的链)作为主链,这样较短的分叉上的工作就会停止,这样每个人都将处理相同的订单。 尽管一段时间内会有分歧,但可以保证最终会达成一致。

同时,由于比特币分叉问题的存在,为防止重复支付问题,约定每笔交易至少需要5个验证块进行验证后才能算作确认,即可以说,比特币的共识机制认为,在等待6次确认的情况下,分叉切换的概率足够低(例如,基于节点1%的算力,被分叉的概率超过6 个块后的长度是 100 1) 的 1/6。

以太坊是此类协议的另一个典型示例,它设定的出块时间预期仅为 15 秒。 以太坊的区块生成速度明显短于比特币的 10 分钟,这使得以太坊系统在输出速度上更加高效,交易在全网广播所需的时间更短。 问题,形成许多孤立块。

总结一下PoW共识算法的思想,其实就是放宽对最终一致性确认的要求。 约定大家选择最长的已知链进行确认。 PoW 系统的最终确认是概率性的,被迫推迟。 这样做的好处是即使有人试图恶意破坏它,也会付出高昂的经济代价(付出系统一半以上的算力)。

PoW 共识算法的问题:

算力竞争的设计导致了中心化矿池的出现:虽然PoW的目的是为了保证系统的去中心化运行,但系统到现在实际上已经形成了几个中心化程度很高的大型矿池。 几个已知的矿池垄断了全球90%以上的算力,这可能导致大型矿池摧毁整个网络。 算力竞争的设计导致大量能源消耗,对环境不利:PoW系统需要产生大量能源消耗:比特币挖矿消耗的能源超过159个国家; 目前全球77.7%的比特币网络算力仍在中国; 得益于内蒙古和四川丰富的电力资源,中国拥有世界上最多的比特币矿场。 比特币耗电量大,一直是其饱受诟病的关键问题。 业务处理性能低:虽然投入了大量的能源来支持系统的运行,但大部分能源消耗都用于工作量证明中的哈希计算,而不是用于处理交易。 交易处理性能很低,例如比特币每秒只能进行7笔左右的交易; 以太坊每秒只有几十笔交易。 近年来,交易拥堵频发,交易手续费飙升。 交易确认时间长:PoW 是概率共识算法,不是绝对共识算法。 分叉发生后,两个分叉的网络继续挖矿。 经过一段时间后,选择包含最多区块的链(最长链)作为主链。 比如比特币的一笔交易等了6个区块就可以认为安全是不会回滚的。 按出块间隔10分钟计算,交易安全确认时间超过1小时。 2.2. 股权证明(PoS)

Proof of Stake(POS),所有持有区块链电子货币的用户都可以通过特殊的交易将自己的电子货币锁定在一个金库中,然后他们就可以成为验证者。 算法通过固定的时间协调所有节点参与投票,根据一定的规则(比如持有的代币数量,或者提供的存储空间大小等)判断每个节点的权重,最终选出节点以最高权重作为支票。

POS 相对于 PoW 的优势包括:

比特币采用的共识算法_比特币的共识_比特币挖矿算法

PoW 需要耗费大量的算力资源。 POS 的好处当然是它消除了很多计算能力的竞争。

不需要通过不断发行新币来激励矿工参与算力竞争。 避免了未知的通货膨胀风险。 3) 提出了一种利用博弈论的新方法来避免区块链网络中集中的大规模参与者。 PoW 的算力竞争设计模式导致算力越来越集中在大型矿池中,这可能导致大型矿池摧毁整个网络。

PoS 还可以使 51% 攻击变得极其昂贵。 恶意参与者将面临押金被没收的风险。

PoS项目案例:

PoS 的原始版本是由 Peercoin 设计和实现的。 用户必须满足以下条件才能生成区块:

hash(stake_modifier, current_time, UTXO) < coin(UTXO) * age(UTXO) * 难度

具体解释如下

每一秒(current_time),用户遍历自己所有的UTXO,代入上式,看是否满足不等式条件; 如果是,则在区块中记录相应的 UTXO 并发布区块。

stake_modifier 是前一个区块中某些字段的哈希值。 增加此项是为了防止用户提前预知什么时候有挖矿权

难度会根据最近出块时间动态调整,保证稳定的出块时间间隔

由于每秒只需要完成与自身UTXO数量相等的哈希计算,所需算力较低

从不等式可以看出,持有的UTXO越多,UTXO中的代币数量(coin(UTXO))越大,UTXO持有时间(age(UTXO),或币龄)越长,越容易不等式成立,越容易开采

这个版本的 PoS 面临以下问题:

由于构建新区块没有算力成本,当区块链出现分叉时,用户可能会倾向于同时在多个分支上挖矿以获得潜在的更高收益,从而产生大量分支,破坏一致性。

比特币的共识_比特币挖矿算法_比特币采用的共识算法

存在币龄累积的现象,即关闭节点,直到币龄(UTXO)大到可以省电,再重新开始节点挖矿。 这就造成了在线节点数量太少,系统脆弱的问题。

当你可以存够币龄后,你就可以保证你有足够的UTXO来不断地出块,从而发起双花攻击。

Blackcoin在Peercoin的基础上进行了修改,以缓解上述问题。 主要变化是:

去掉不等式右边的age(UTXO),从而解决问题3中先累加币龄再双花的现象; 但是区块奖励仍然使用币龄,所以不能完全解决问题2中节点关闭的现象。

优化了stake_modifier的计算逻辑,使得用户更难提前预知自己获得挖矿权的时间。

PoS机制虽然兼顾了PoW的不足,但也有不足之处:

1)基于股权平衡的选择会导致首富的账户拥有更大的权力,并可能控制记账权。

2)PoS的一致性:PoS的挖矿过程与PoW的问题类似。 全网所有节点共同参与。 每时每刻,成千上万的节点都在同时尝试产生下一个区块,因此时不时会出现区块链分叉。 由于分叉的存在,出块时间间隔不能太短。 每个区块链通过动态调整的挖矿难度将块时间间隔稳定在其期望的水平。 长区块生成时间伴随着长交易确认时间和低交易处理性能。

2.3. 股权授权证明(DPoS)

由于缺乏 PoW 和 PoS,因此提出了委托权益证明(DPoS)。 DPoS算法通过一定的机制(比如持有的代币数量)从数千个PoS节点中选出若干个节点,并在其中投票(有些实现甚至使用代币环进行轮询,进一步减少投票开销)从每个节点中选出检查点(块)节点,而不必在网络中的所有节点之间进行选择。

DPoS项目案例:

石墨烯框架和EOS前身比特股(bitshares)项目提出的DPOS方案步骤简述如下:

1)持有代币的用户可以投票选出候选区块生产者;

2)选出票数最高的n个用户作为代表,负责下一个周期的出块,目前n=21;

比特币的共识_比特币挖矿算法_比特币采用的共识算法

3) 打乱代表顺序后,每个代表开始依次出块。 每个代表都有自己固定的时间间隔,需要在自己的时间间隔内完成区块的生产发布。 目前这个间隔是3秒,即正常情况下每3秒出一个块;

4)在生产一个区块时,每个代表需要找到当时唯一最长的链进行生产,不能在其他分支上生产。

通过上述方法,保证了较短的出块时间,并且由于为每个生产者设置了固定的时间间隔,不会因为候选节点的延迟而延迟出块。

EOS最初使用的是DPoS算法,后来为了缩短出块时间,改为BFT-DPoS算法。

DPoS 共识算法存在的问题:

以 EOS 为代表的 DPoS 算法旨在以少数节点代替多数节点进行共识。 事实上,它是以牺牲区块链的去中心化来换取共识效率的提升。

EOS的21个超级节点并不是21个不同的实体,节点之间可能存在内部阴谋。

超级节点选举争议。 由于网络无法解决女巫攻击问题,1人1票的民主投票制度将被1代币1票制度所取代,导致“财阀政治”的结果; 而相对不富裕、投票权较少的投资者投票无动于衷; 超级节点可以购买选民的选票; 鼓励超级节点相互勾结,这样他们就可以改变他们与选民分享的奖励比例。

DPoS 允许不超过节点总数三分之一的恶意或故障节点潜在地创建少量分叉。 在这种情况下,少数分叉每 9 秒只能产生一个区块,而多数分叉每 9 秒可以产生两个区块。 这样,诚实的 2/3 多数人将永远比少数人更长。

2.4. 实用拜占庭容错 (PBFT)

PBFT 是一种三阶段共识算法。 其主要流程如下图所示。 我们将在后面的章节中详细介绍该算法。

在这里插入图片描述

PBFT算法的简单步骤:

取一份作为主节点(图中0),其他份作为备份;

比特币采用的共识算法_比特币的共识_比特币挖矿算法

用户(图中C)向主节点发送消息请求;

主节点通过广播向其他节点发送请求(图中1、2、3);

所有节点执行请求并将结果返回给客户端;

客户端需要等待f+1个不同的副本节点发回相同的结果,才能作为整个操作的最终结果。

PBFT项目案例:

Hyperledger Fabric 推荐并实现了 PBFT 共识算法。

PBFT不仅具有强一致性的特点,还提供了高共识效率,更适合对一致性和性能要求高的区块链项目。 但是,由于PBFT需要两个或两个节点进行通信,通信量为O(n^2)(可以通过优化减少通信量),在公链全局环境下,节点数量和网络环境是不可控的,如此庞大的通信量是无法实现的。 但是对于联盟链和私有链来说,节点数量不是很多,使用PBFT效率更高,效果也更好。 因此,PBFT广泛应用于联盟链和私有链的区块链项目。 这就是 Fabric 项目使用 PBFT 算法的原因。

PBFT共识算法存在的问题:

流量为O(n^2),不适用于节点数量和网络环境不可控的公链项目。

PBFT是强一致性算法,在可用性上做出了让步。 当1/3或更多记账员停止工作时,系统将无法提供服务。

2.5. 工作量证明+证明

共识机制已经成为区块链系统性能的关键瓶颈。 单一的共识算法存在各种问题。 例如,PoW算法消耗大量计算资源,性能低下; 网络开销过大的问题。 结合多种共识算法优势的想法越来越受到关注。

例如,以太坊社区提出的正在开发的共识协议称为Casper,它是一种覆盖现有以太坊PoW提案机制的PoS。 Casper 结合了 PoW 和 PoS 算法。

Casper 的基本思想是,任何人只要抵押足够的以太坊到系统中,就可以成为矿工比特币采用的共识算法,参与到挖矿过程中。 共识算法要求所有矿工诚实工作。 如果矿工故意破坏且不遵守协议,系统将通过没收之前抵押的以太坊来惩罚矿工。 有人将Casper这样的挖矿机制称为“虚拟挖矿”。 比特币矿工需要购买矿机参与挖矿,Casper首先要抵押Ether到系统中; 然而,在卡斯帕,不遵守规则的惩罚更为严重。 除了失去挖矿收益外,“矿机”也必须被销毁:抵押的以太坊将被系统没收!

Casper 的应用程序逻辑存在于智能合约中。 要成为 Casper 中的验证者,您必须拥有 ETH,并将 ETH 作为杠杆权益存储在 Casper 智能合约中。 Casper 第一次迭代中的区块提议机制将被保留:它仍然使用中本聪的 PoW 共识,矿工可以创建区块。 但为了最终确定区块,Casper 的 PoS 覆盖层取得了控制权,并拥有自己的验证者,他们在 PoW 矿工之后投票。

三、总结

本节介绍区块链项目中常用的一些共识算法。 在后续课程中,我们将更详细地分析PoW和PBFT的共识过程和实现细节。