「区块链基础概念100」:改进型实用拜占庭容错 | 023
「区块链基础概念100」由火星财经「学习区块链」频道出品,在区块链基础概念之上延展深度阅读,并紧密连接产业,关注产业发展热点和趋势。
1. 基础概念
改进型实用拜占庭容错/ Practical Byzantine Fault Tolerance / PBFT
PBET 共识机制是少数服从多数,根据信息在分布式网络中节点间互相交换后各节点列出所有得到的信息,一个节点代表一票,选择大多数的结果作为解决办法。PBET 将容错量控制在全部节点数的1/3,即如只要有超过2/3 的正常节点,整个系统便可正常运作。
2.深度解读
你知道POW的姐妹PBFT吗?

上一问讲到造成拜占庭将军问题的原因在于所有人没有达成共识,那么,在区块链中通过什么样的方式来达成共识呢?
之前提过POW、POS、DPOS等共识机制,就是为了解决拜占庭将军问题,小白可以回到数金博士第三问了解详情哦!
今天又双叒叕来讲一下另一个共识机制——实用拜占庭容错算法(PBFT),那么什么是PBFT呢?

PBFT机制是少数服从多数,根据信息在分布式网络中节点间互相交换后各节点列出所有得到的信息,一个节点代表一票,选择大多数的结果作为解决办法。
咦~这不就是投票选举代表吗?

PBFT采用了加密学算法保证恶意节点无法解密、篡改节点中的信息,只要恶意节点的总数不超过总节点数的1/3,就可以断定这个系统是可信的。
如何提高算法性能?
1、由于节点间的通信验证会影响系统性能,因此PBFT通过减少节点们传递给客户端的总数据传递量,来降低通信的消耗。
2、PBFT对所使用的加密算法数字签名和MAC(信息验证码)进行优化,在系统面临最高风险,需要选择新主节点的时候,采用数字签名,其他时候采用不怎么费资源的MAC。
联盟链的宠儿PBFT
PBFT算法可以说是最早的共识机制了,通常被应用于由于私有链和联盟链中,而公有链中常常使用POS算法和POW算法。
例如,数金链作为联盟链就运用了PBFT算法,对节点的加入进行权限控制。
除了数金链使用了PBFT算法,目前,蚂蚁区块链平台和央行所推出的区块链数字票据交易平台,也是使用优化后的PBFT算法。
结语
共识机制是区块链的灵魂,维系着区块链世界的正常运转,PBFT作为其中的一种共识机制具备高效、节能的特征,无需等待确认,耗能低。
导读:PBFT具备高效、节能的特征,无需等待确认,耗能低。
Casper FFG:以实现权益证明为目标的共识协议

前言
2017年,Vitalik Buterin 与 Virgil Griffith 共同发表了 Casper the Friendly Finality Gadget(Casper FFG)。Casper FFG 是受 PBFT 启发并经过改良的共识协议,它虽然被设计得很简洁(Simple),但其对安全性的证明却不简单(Easy)。
笔者将于本文解析 Casper FFG 的原理,读者可以一窥权益证明共识所尝试解决的问题及其设计理念。此外,Casper FFG 是以太坊 2.0 的共识机制,理解其运作也能帮助研究员与开发者进一步理解以太坊 2.0 的设计。
最后要特别感谢以太坊研究员 Chih-Cheng Liang(梁智程)提供重要素材并与笔者共同大量讨论及给予回馈,没有他的协助便不会有这篇文章的诞生。
Casper FFG 是怎么开始的?
以太坊对权益证明(Proof-of-Stake, PoS)的研究最早可追溯至 2014 年的这篇文章。从此之后,以太坊研究员们便一直朝「实现基于 PoS 的共识协议」此一目标前进。PoS 共识的设计是一个跨领域且相当复杂的问题,其包含计算机科学/经济学/密码学等方面。以太坊拥有区块链生态系中最跨领域的团队,对 PoS 的研究可以说是相当透彻。
笔者于日前翻译了一篇关于 Casper FFG 发展脉络的重要文献:
Casper FFG 与 Casper CBC 的瑜亮情结
Casper FFG 受到 PBFT 的启发,并可以被视为改良后的 PBFT ——它继承了 PBFT 的重要设计,同时添加新的机制与简化若干规则。若读者对 PBFT 感到陌生,可以参考笔者日前针对 PBFT 的解析文:
若想搞懂区块链就不能忽视的经典:PBFT
简而言之,PBFT 是一个具有二轮投票机制的共识协议,且具有下列特性:
- 许可制的(Permissioned):只有被「允许」的节点能参与共识。
- 基于领袖的(Leader-based):只由主导节点负责「提案」(Propose),其他节点只负责投票,因此需要视域变换(View Change)机制来节制不诚实的主导节点。
- 基于通讯的(Communication-based):使用决定性的(Deterministic)多数决来形成共识,而不是非决定性的(Non-Deterministic)算力解谜赛局。
- 安全性重于活跃性的(Safety-over-Liveness):无论网络是否延迟,协议都能保证共识的安全性(即不分叉),这赋予协议即时敲定(Instant Finality)的特性。
其中 PBFT 所具备的即时敲定性,或许是其受到 Vitalik 青睐的主要原因。Vitalik 在熟读 PBFT 后也特撰文总结,并于其中提出日后演变成 Casper FFG 的重要想法。
Casper FFG 的前身:砍押金的 4 条规则
PBFT 虽然具有即时敲定性,但并不具有抵抗共谋的能力,因此需要一个惩罚机制来遏止作恶的行为,只要节点做出逾越规则的行为,便必须承受经济损失——透过经济学法则来调节节点的行为正是 PoS 的设计理念。任何支付押金的节点,都可以加入网络参与共识,无需任何人的许可,因此基于 PoS 模型的共识都是非许可制的(Permissionless)。在这里要澄清一下「许可」这件事。我们会说他「非许可制」,是因为任何验证节点可以加入和退出。但如果在他加入的时候,链要维持一个验证节点清单,从这个角度看又有点是「许可制」。从 PBFT 的角度看,投票的验证节点也必须从许可的清单中挑选。那么下一个问题是:哪些行为该被惩罚?Vitalik 仔细推敲 PBFT 后发现,PBFT 只需 4 条规则(PBFT 中的断言)便能确保共识运作良好:最少的砍押金条件Vitalik 在这篇文章中总结了这 4 条规则,并把它们称为 PBFT 的「最少的砍押金条件」(Minimal Slashing Conditions),任何违反此 4 条规则的行为都要被取走押金。这 4 条规则如下:
1.提交(commit_req):收到 2/3 节点的预备讯息后才能提交。 2.预备(prepare_req):每个预备讯息只能指向某个也具有 2/3 节点预备讯息的高度(Epoch),且这些预备讯息也必须都指向同一个高度。 3.预备提交一致性(prepare_commit_consistency):任何新的预备讯息只能指向最后一个已提交的或其他比其更新的高度。 4.不重复预备(no_double_prepare):不能在同一个高度送出两次预备。 这 4 条规则可以进一步简化为 2 条:
某验证节点 v 必不可发出两个相异的投票:<ν, s1, t1, h(s1), h(t1)>及<ν, s2, t2, h(s2), h(t2)>,且使下列任一条件成立: 1. h(t1) = h(t2) 验证节点必不可对某高度发出两个相异投票。 2. h(s1) < h(s2) < h(t2) < h(t1) 验证节点必不可投出高度围绕/被围绕于另一投票高度的投票。 这 2 条规则便是 Casper FFG 的最少砍押金条件。
Casper FFG 如何运作?

-Casper FFG: 检查点树-Casper FFG 是一个将出块机制(Block Proposing Mechanism)抽象化的覆盖链(Overlay),只负责形成共识。出块机制由底层链实现,而来自底层链的出块(Block Proposal)称为检查点(Checkpoints)。检查点组成检查点树(Checkpoint Tree),例如:把高度为 0、50、100、150 的区块哈希值取出,形成一棵新的树,如上图所示。最底部的检查点则称为根检查点(Root)。每个节点都必须对检查点送出投票(Vote),投票的内容是由两个不同高度的检查点组成的连结(Link),连结的起点高度较低,称为源头(Source);连结的终点高度较高,称为目标(Target)。节点会将投票广播到网络中,并同时收集来自其他节点的投票。其中若投票给某连结 L 的节点押金总和超过全部押金的 2/3,则称 L 为绝对多数连结(Supermajority Link),以 s → t 表示。例如上图中,b1 / b2 / b3 之间都形成了绝对多数连结,分别以 b1 → b2、b2 → b3 表示。由根检查点开始,若两个检查点之间形成绝对多数连结,则该连结的目标进入「已证成」( Justified)状态;而在连结建立当下已处于「已证成」状态的源头,则进入「已敲定」(Finalized)状态;根检查点则预设为「已证成」及「已敲定」状态。由此可知,每个检查点在经过两次投票后,会先「证成」(Justify)而后「敲定」(Finalize),几乎等同于 PBFT 的「预备」与「提交」。例如在上图右边的分支中,r / b1 / b2 皆为「已敲定」状态,只有 b3 为「已证成」状态。那么验证节点该对哪些检查点建立连结?每个节点都必须遵循分叉选择规则(Fork Choice Rule)来选择下一个要连接的检查点,Casper FFG 的规则是:选择最高的「已证成」状态的检查点。

-Casper FFG: 验证节点集合的大幅变化引起的分叉-由于 Casper FFG 能让任何存入押金的节点成为验证节点,因此验证节点集合(Validator Set)会动态地随着时间变化。节点从退出网络至取出押金需要等待一段期间,该等待期间称为提领延迟(Withdrawal Delay)。每个检查点 C 都有其对应的朝代数(Dynasty),其定义为:从根检查点开始至 C 为止的已敲定检查点数量,例如上图中,b3 的朝代数为 3。每一代检查点都对应两种验证节点集合:前端(Front)验证节点集合(包含于此代加入的节点)以及后端(Rear)验证节点集合(包含于此代退出的节点)。理论上每代检查点的前端/后端集合会高度重复,但难保节点共谋造成前端/后端集合的大幅变化,若此情形发生,则出错时可能会砍不到坏节点的押金(因为坏节点已退出)导致安全性受到威胁。例如上图中,验证节点 A 可以退出,代表对 C' 分叉(绿色)来说 A 退出了,可是对 C 分叉(紫色)来说, A 却从来没退出过。因此 A 有办法继续投旧链 C,但新链 C' 砍不到 A 的押金(因为已退出)。为了让每代检查点在出错时都能确实归责,因此需要缝合机制(Stitching Mechanism)将检查点的前端/后端集合「缝」起来,确保每个错误都必定能归责(出错的可能是前端集合或者后端集合)。综合以上,Casper FFG 几乎针对 PBFT 的所有方面都做出改进:
- 经济上的制约:PBFT 是许可制的,它仰赖原本就存在信任基础的组织共同运行协议;Casper FFG 则是非许可制的,它引入最少砍押金条件,利用经济损失的风险来制约节点的行为,节点之间不需要任何信任基础也能共同运行协议,实现真正的去中心化。
- 抽象的出块机制:PBFT 仰赖诚实的主导节点产生区块并需要视域变换机制节制拜占庭节点;Casper FFG 无需理会底层的出块机制,只需负责形成共识。出块抽象的好处是:底层链的出块频率不必与覆盖链的共识频率一致,如此可以增加效率并降低网络的负担。例如:每 100 个底层区块只产生 1 个检查点。
- 流水线化的投票:PBFT 具有 < Prepare >、< Commit >、< View-change > 等数种投票讯息;Casper FFG 仅有 < Vote > 一种,且投票的内容并不是单一的区块/请求,而是两个形成连结的检查点,这使 Casper FFG 能够在不牺牲太多表达力的前提下变得简洁许多。这些形成链式结构的检查点,会于两个不同高度分别经历两轮投票,由于每一轮投票都会敲定源头与证成目标,因此共识能如流水线(Pipeline)般不断推进。相似的设计理念也出现于 Hot-Stuff,有趣的是,该论文作者 Dahlia Malkhi 还撰文比较 Hot-Stuff 与Casper FFG,其相似程度可见一斑。
- 强健的抗攻击性:PBFT 不具备对远程攻击(Long-range Attack)以及灾难性崩溃(Catastrophic Crash)的抗性;Casper FFG 则具有特别的机制来防御这两种攻击:针对远程攻击,节点必须定期同步区块及禁止回朔(Revert)已敲定的区块;针对灾难性崩溃,Casper FFG 则引入「离线溢金」(Inactivity Leak)机制来应对。关于这两种攻击的说明,笔者将于日后另撰文论述。
由于 Casper FFG 相当简洁,以太坊研究员一度实现了合约版本的 Casper FFG:ethereum/casper然而,这个合约版的 Casper FFG 后来被弃用了!在合约版中原本假设投票能够被并行处理,但在计算投票报酬有很多中间状态,不同投票处理的先后顺序将会影响最后得到的状态,这代表并行化将无法达成共识。而要修正这个问题则必须要在合约与客户端做大量修改,失去了「逻辑用合约实现,避免修改客户端」的精神。因此,为了能够更好地整合 Casper FFG 与其他优化提案(例如分片),全新的以太坊 2.0 磅礴登场了。
以太坊2.0 中的 Casper FFG

-以太坊 2.0: 分片-以太坊 2.0 是一个基于 EVM 并整合 Casper FFG 与众多优化提案(以分片为主)的分布式帐本。以太坊 2.0 除了想实现 PoS,还试图将每秒交易数(TPS)扩展到 10000 笔的量级,使区块链成为如网际网络一般的基础设施(Infrastructure),并且让任何存入 32 个以太币的押金的节点都能成为验证节点。分片(Sharding)即是为了增加可扩展性(Scalability)的重要设计,也是以太坊 2.0 最重要的目标。分片就是分工合作,我们可以用一个简单的例子来说明分片的概念(实际上的解释要比这复杂得多):2 人写 2 题作业,2 人各写不同的 1 题再合起来一定比 2 人都各写完 2 题来得更有效率。目前的以太坊只有 1 条区块链,所有节点必须各自处理所有交易(如同 2 人各自写完 2 题作业);在以太坊 2.0 中,网络会分成 1024个片(Shard),每片分别运行 1 条分片链(Shard Chain),它们将各自处理一部分的交易后再将结果交由 1 条信标链(Beacon Chain)统整(如同 2 人各做不同的 1 题再合起来)。因此,以太坊 2.0 预计会有 1 条信标链以及 1024 条分片链。值得注意的是:片是一个抽象层,并不特指某一群节点。为了更了解这个概念,笔者扩充一下上文的例子:假设写作业有找答案及抄答案两个步骤,那么 A / B 2人写 2 题作业,由读速快的 A 找第 1 题答案,读速慢的 B 找第 2 题答案;由手速快的 B 抄第 1 题答案,手速慢的 A 抄第 2 题答案。如此,A / B 便可以依照读/写的快/慢来分别负责不同题目的不同步骤。同样地,在以太坊 2.0 中,除了有 1024 个片,还会有 1024 个持续委员会(Persistent Committee)与 1024 个交联委员会(Crosslink Committee):
- 每个片都会对应 1 个持续委员会与 1 个交联委员会,如同上例中每个题目可以依照读/写的步骤来对应不同的个体。
- 使用链上随机数(On-chain Random Number)决定各委员会的分派,如同上例中依照读/写的快/慢来分派题目(关于链上随机数的实现细节留待笔者日后详述)。
- 持续委员会负责维护分片链与产生分片区块(Shard Block)、交联委员会负责维护信标链与产生信标区块(Beacon Block),如同上例中读速快的负责找答案、手速快的负责抄答案。各区块的出块节点(Block Proposer)也交由链上随机数决定。
换句话说,每个验证节点都需维护 1 条唯一的信标链及 1 条所属片的分片链,也都会隶属于与该分片对应之 1 个交联委员会与 1 个持续委员会。Casper FFG 是运行于以太坊 2.0 之上的覆盖链,这个覆盖链同样由检查点构成,各检查点之间的跨度称为时期(Epoch),1 个时期(Epoch)切成 64 个时段(Slot ),每个时段对应 16 个片(16 = 1024 ÷ 64),因此每片在每时期中都有对应的时段,并只能在轮到自己时才广播其对检查点的投票,且每分片只能 1 个时段中投出 1 票——也就是说,各分片需要先对投票内容形成共识,不过各片内部形成共识的方法仍尚未定论,近期最新的提案是使用聚合签名。另外,Casper FFG 在以太坊 2.0 中的分叉选择规则是最新消息驱动GHOST(Latest-Message Driven GHOST, LMD GHOST)。理论上,Casper FFG 于每个检查点的投票应该要与底层出块机制的投票分开;实际上,以太坊 2.0 的底层投票内容会同时包含顶层投票内容(检查点的连结),如同顶层投票搭了底层投票的便车(Piggyback),借此优化效能。如此在每个时期结束时,每个片都会收到所有其他片在该时期的投票,Casper FFG 活跃性得以维持。
结语
Casper FFG 是一个实现权益证明的大胆尝试,它在以太坊 2.0 的表现值得期待。然而以太坊 2.0 还有许多难题留待解决,例如轻节点(Light Client)/ 链上随机数生成器(On-chain Random Number Generator)/ 跨片交易(Cross-shard Transaction)等等。与此同时,许多以太坊 2.0 的竞争者也提出新的共识协议与分片技术,例如 RapidChain / Harmony / Chainspace 等等。Casper FFG 以及以太坊 2.0 是经过众多研究员/开发者不断激荡与迭代的重要结晶,但一直以来都缺乏提供系统性论述的中文材料,希望此文可以帮助中文世界的研究员/开发者快速理解 Casper FFG 与以太坊 2.0 的精要。
(完)
导读:Casper FFG 是受 PBFT 启发并经过改良的共识协议,它虽然被设计得很简洁(Simple),但其对安全性的证明却不简单(Easy)。
这一次让你彻底搞懂什么是实用拜占庭容错算法

上一节我们讲到PBFT是在共识节点较少的情况下拜占庭问题的一种解决方案,适用于联盟链。这一节我们就继续讲讲,什么是PBFT(实用拜占庭容错)算法。
早期提出的能解决拜占庭问题的算法(包括随拜占庭问题论文提出来的两种原生算法),要么仅仅停留在展示算法的理论可能性阶段,而实用性不高,要么就假设算法的使用环境为同步系统,而真实生产中的信息系统往往是异步的,例如互联网。
所以,Miguel Castro和Barbara Liskov在1999年提出PBFT,旨在解决拜占庭算法效率不高的问题,同时它也是首个能应用在异步系统中的拜占庭算法。

PBFT算法采用了加密学算法保证恶意节点无法解密篡改诚实节点中的信息,经证明,算法的拜占庭容错率为1/3,即只要恶意节点的总数不超过总节点数的三分之一,就可以断定这个系统是可信的。
算法选择分布式网络中的一个节点为主节点(primary),剩下的节点则是主节点的备份节点(backups),当客户端向分布式系统发送请求后,它经历以下几个阶段,最终得到正确的结果响应。
1. 客户端向主节点(primary)发送请求命令。
2. 主节点(primary)得到命令后,将命令分发给它的备份节点(backups)。
3. 备份节点得到命令后,处理命令,再将处理结果直接回传给客户端。
4. 客户端统计处理结果,当某一结果的数量达到f+1时,将其作为最终结果。
(f为系统允许的恶意节点数量)

(C是客户端,0是主节点,1、2、3是备份节点)
如上图所示,在实现这些阶段的过程中,主节点与备份节点间,备份节点与其他节点之间,会进行多次通信验证。
通信验证有两个目的:
1.使最终的结果响应是可信且有效的。
2.为主节点作恶或掉线的情况提供保护机制,即备份节点间通过通信验证,检测主节点是否作恶或掉线,如果作恶或掉线,则由备份节点们共同发起一个协议,选出新的主节点,让系统继续运行下去。
这种通信验证带来的弊端是,随着节点的增多,系统性能会下降的很快,但是在较少节点的情况下可以有不错的性能,并且分叉的几率很低。这也就是为什么PBFT主要用于联盟链。但是如果能够结合类似DPOS的见证人选举制度的话,它也可以应用于公链,TPS应该是远大于POW的。
PBFT还采用了一些优化方案来提高算法的性能。
首先,正如上文提到,节点间的通信验证会影响系统性能,所以PBFT想了三种办法来降低通信消耗。这里介绍其中一种,它的思路是尽量避免备份节点向客户端传递数据量大的响应结果。客户端请求委派其中一个备份节点传递完整的响应结果,而剩下的备份节点仅仅传递响应结果的摘要(digest)。
客户端可以通过摘要验证响应结果是否与其他节点传来的响应结果一致,从而判断那份完整的响应结果是否正确。这一方式能减少了节点们传递给客户端的总数据传递量,从而减少对系统的网络带宽占用和CPU资源占用。
此外,PBFT还针对其所使用的加密算法做了优化。PBFT采用两种加密算法数字签名和MAC(信息验证码),其中数字签名算法可以向第三方证明信息的准确性,MAC不行。而这种性质正是拜占庭容错问题所需要的。然而,越牛逼的加密算法往往也意味着会消耗越多的系统资源,加解密过程也会越久。如果PBFT算法每个需要加密的地方都用更牛逼的数字签名,就会导致系统的性能差,延迟高。
因此,好钢用在刀刃上,PBFT只在最需要的时候用数字签名,即主节点作恶了(系统面临的最高风险),需要选择新主节点的时候,采用数字签名,其他时候就采用常规一些,但是没那么费资源的MAC。

以上就是对PBFT的一个粗略介绍。其实,相比POW,POS这种更加直观易懂,甚至可以用讲故事的办法进行科普的角色来说,PBFT属于区块链中比较难理解的一个概念了。
因为它涉及到很多计算机的基础知识。本文也是试图略过一些计算机术语和代码,来更浅显地介绍PBFT,不过还是有些硬核。当然,也欢迎对此感兴趣的计算机相关技术人士,直接阅读PBFT的论文来更加详细地理解它。如果要从代码角度看它是如何具体实现的,可以到Github上查看Hyperledger Fabric源码的Consensus部分。
内容主编:招木
排版:大米
导读:Miguel Castro和Barbara Liskov在1999年提出PBFT,旨在解决拜占庭算法效率不高的问题,同时它也是首个能应用在异步系统中的拜占庭算法。
3.产业动态
区块链“攻克”拜占庭
众所周知,区块链是一个由许多节点组成的分布式网络,例如在比特币系统中,所有节点都可以自由加入和退出网络,并根据比特币协议的规定完成各自的任务,如验证和广播交易、阻止非法交易、传输合法区块等。
人们信任这样的分布式系统,是因为该系统有很强的安全性,能够保护用户的资产不被黑客攻击,不因为某些用户的恶意行为,或者故障的出现导致网络瘫痪。在这样的自由网络中,节点们绝大多数会按照比特币协议的规定去执行指令,然而也很可能会有一些节点,并不按照协议规定的行为去执行。

例如,有部分节点可能因为掉线而突然中止工作,还有的节点可能为了一些其他目的发送非法交易或进行黑客行为,以试图阻碍比特币网络的正常运转。这些非正常的节点,又被称之为故障节点。在这样的自由的公共网路中,我们没有办法去阻止这部分用户的非正常行为,那么如何设置协议使得网络可以防止这部分行为对网络运转带来的影响,使得网络的安全性与一致性不会受到阻碍呢?这个问题有一个很有趣的故事作为原型,即拜占庭将军问题。
拜占庭将军问题其实不像传说中那样,源于公元5世纪的东罗马战场,而是产生于1982年一个美国科学家写论文时的头脑风暴。
拜占庭国土辽阔,为了防御敌人,每个军队都分隔很远,互相之间只能通过通讯员进行两两通讯。而战争时,拜占庭军队内所有将军意见必须一致,同时进退才能赢。此时假设有5个平级的将军,要一起决定进攻还是撤退,以及进退的时间,他们必须达成一致。每个将军都派出信差,将自己的决定传达给其他四位将军,这样一来,每个将军看到信息后,加上自己的决定,如果有不少于3个将军的决定相同,那便作为最终的决定。

那么问题来了,困扰这些将军的是:不确定他们中是否有叛徒?叛徒会不会擅自变更进攻意向或者进攻时间?另外,即使没有叛徒,五位将军一致进攻,但通讯消息不及时,设想的进攻时间不一致,秩序混乱,又怎么办?
为此,Lamport从数学上证明了,只要这些好的将军们坚持听从大多数将军们的意见,即少数服从多数,同时坏将军的数目小于1/3,那么好将军们就可以达成正确的共识。
后来人们把拜占庭将军问题引申到通信领域,描述一个分布式系统中进行信息交互时面临的难题。假设区块链分布式网络中存在出错的节点或者恶意节点,这些节点可能因为种种原因伪造签名、恶意破坏系统的一致性。这就要求区块链网络的共识机制有容错设计,在部分节点作恶或者失效之时仍然能达成整体的一致性。
当前比较知名的解决方法是实用拜占庭容错算法,这是MIT两位教授在1999年提出的。他们的本意是为设计一个低延迟存储系统,将算法复杂度由指数级降低到多项式级,使得拜占庭容错算法在实际系统应用中变得可行。
实用拜占庭容错算法是一个循环,在每一轮中,首先会根据设定的规则选出一个主节点,由其来组织网络中的交易,这整个处理过程分为三个阶段:分别是预准备阶段、准备阶段和确认阶段。在每一个阶段中,都会进行投票,在本阶段中只有超过2/3的投票同意才会进入下一个阶段,每轮结束后都会产生一个新区块。

本质上来说,实用拜占庭容错方案就是少数服从多数。区块链正是使用了这种算法证明机制来创建一个共识网络,在整个网络中的任意节点都无法信任彼此,创建出共识基础来进行安全的信息交互,而无需担心数据被篡改,从而确保信息数据的安全与可靠。
目前有一些机构正在关注实用拜占庭容错算法,比如中国China Ledger联盟曾经就在研究探讨其实际应用,Fabric联盟链也曾经使用该算法作为其共识协议,迅雷发布的迅雷链也是使用的这一共识算法。
但是实用拜占庭容错算法也存在着一定的缺点,首先计算效率依赖于参与协议的节点数量,不适用于节点数量过大的区块链系统,扩展性差;其次系统节点是固定的,无法应对公有链的开放环境,一般仅适用于带身份认证的联盟链或私有链系统;另外就是系统的失效节点数量必须小于全网节点的三分之一,容错率相对较低;最后拜占庭容错算法不能很好的存储记录其交易信息,黑客能够截取一些失效的副本,这会让信息外漏。
无论如何,实用拜占庭容错算法的出现大幅推动了分布式领域的共识算法研究。如今应用于区块链的不少共识算法都是在该算法的基础上进化而来。这也让我们期待更多更好的共识算法的出现。
导读:拜占庭将军问题其实不像传说中那样,源于公元5世纪的东罗马战场,而是产生于1982年一个美国科学家写论文时的头脑风暴。
Zilliqa-曾经分片之王,如今廉颇老矣?
Zilliqa是第一个尝试把分片技术带入区块链扩容的项目,采用PoW防止女巫攻击,PBFT达成共识,并使用新智能合约语言Scilla,旨在解决交易速度的同时兼顾安全性。





























导读:Zilliqa是第一个尝试把分片技术带入区块链扩容的项目,采用PoW防止女巫攻击,PBFT达成共识,并使用新智能合约语言Scilla,旨在解决交易速度的同时兼顾安全性。
最热门的共识机制盘点:Tendermint还是Casper?
POW被广泛诟病的耗能问题(挖矿成本高)和POS被广泛诟病的“无利害关系“(“nothing at stake“)问题促使许多区块链行业的前驱在不断地研究和创造新的共识机制。当前最火的两个共识机制之一,Tendermint和Casper就是为了解决这些问题的产物。那么到底什么是Tendermint和Casper?它们各有什么优劣?新的区块链项目又应该怎么从中选择适合自己的共识机制?本文我们一起来看一看这些问题。
Tendermint是什么?
Tendermint属于拜占庭容错算法,它针对PBFT(实用拜占庭容错算法)做了优化,只需要有两轮投票即可达成共识。第一个真正提出将BFT研究应用到PoS公有区块链环境中是Jae Kwon,他在2014年创造了Tendermint。先简单介绍一下Tendermint算法的流程。 Tendermint的状态转换如下图(来自Tendermint wiki):

简单地说,Tendermint里面对高度为h的块共识的每一轮包括3个步骤:Propose(提议),Prevote(预投票),Precommit(预提交)。当在某一轮达成共识(收到大于2/3的Precommit投票)后,就会进入对下一个高度的共识,从第0轮开始 。 Tendermint中有个很重要的概念:PoLC,全称为Proof of Lock Change,表示在某个特定的高度和轮数(height,round),对某个块或nil(空块)超过总结点2/3的Prevote投票集合,简单来说PoLC就是Prevote的投票集。Tendermint中的参与者叫做 “验证人”(validator)。他们轮流对交易区块进行提议,并对这些区块进行投票。区块会被提交到链上,每一个块占据一个高度h。当然提交块可能会失败,如果失败就会开始下一轮的提交。 要想成功提交一个块,需要有两个阶段的投票:预投票和预提交。在同一轮提交中,只有超过2/3 的验证人对同一个块进行了预提交,这个块才能被提交到链上。假设少于1/3的验证者是拜占庭,Tendermint保证安全永远不会被破坏。也就是说验证者(2/3以上)永远不会在同一个高度提交冲突的区块。因此,基于Temdermint的区块链永远不会分叉。
Casper是什么?
Casper是以太坊从POW转型到POS的一个优化版POS共识机制,以太坊的核心贡献者V神有意通过Casper来硬分叉以太坊以实现这个转型。Casper有两个版本,CFFG和CTFG,笔者将在未来的文章里面对这两者进行详细的分解。总的来说,Casper要求验证人(validators)将保证金中的大部分对共识结果进行下注。而共识结果又通过验证人的下注情况形成:验证人必须猜测其他人会赌哪个块胜出,同时也下注这个块。如果赌对了,他们就可以拿回保证金外加交易费用,也许还会有一些新发的货币;如果下注没有迅速达成一致,他们只能拿回部分保证金。因此数个回合之后验证人的下注分布就会收敛。此外如果验证人过于显著的改变下注,例如先是赌某个块有很高概率胜出,然后又改赌另外一个块有高概率胜出,他将被严惩。这条规则确保了验证人只有在非常确信其他人也认为某个块有高概率胜出时才以高概率下注。Casper通过这个机制来确保不会出现下注先收敛于一个结果然后又收敛到另外一个结果的情况,只要验证人足够多。验证人对每一个高度h上的每一个候选块独立下注,给每个块指定一个胜出概率并公布。通过反复下注,对于每个高度h验证人会选出唯一的一个胜出块,这个过程也决定了交易执行的顺序。如果一个验证人在某个高度公布的概率分布总和大于100%,或者公布了小于0%的概率,或者对一个无效块指定了大于0%的概率,Casper将罚没他的保证金。
Tendermintvs. Casper
一句话来讲,Tendermint是一个基于轮次的投票机制,而Casper是一个基于赌博的投注机制。首先,Tendermint和Casper都能有效地解决“无利害关系“问题,V神2014年1月引入的“slasher”概念可以在协议内惩罚以减轻这个问题,后来JaeKwon在同一年通过Tendermint的第一个迭代也解决了这个问题。
在解决远程攻击问题上,Casper和Tendermint采用一种简单的锁定机制(Tendermint中俗称“冻结”,Casper中俗称保证金)来锁定一段时间(几周甚至几个月),以防止任何恶意联合验证者违反安全。在CFFG算法中,一个分叉选择规则永远只能修改最终块之后的块来阻止远程攻击。通过使用时间戳,在CFFG中的长距离分叉试图修改比最终块还要更早的块的时候会被协议直接忽略掉。
还有一个问题是卡特尔形式(Cartel Formation),卡特尔形式指的是在任意经济框架下的寡头垄断问题,数字货币经济体系当然也不例外会有这类问题。Tendermint没有任何协议内的手段,而是依靠协议外的管理方法来与寡头垄断验证者进行对抗,基本原理是:用户最终将不可避免地注意到卡特尔的形成,在协议以外的生活中出到对此进行传播然后放弃或者投票重新组织受到攻击的区块链。然而,在Casper的体系里面,CTFG协议明确使用了内审激励机制来打击卡特尔形式,这也是当前共识机制当中唯一一个协议内部自带防卡特尔形式的一种模式。
CAP理论下的Tendermint vs. Casper
CAP定理指的是在一个分布式系统中,Consistency(一致性)、 Availability(可用性)、Partitiontolerance(分区容错性),三者不可得兼。● 一致性(C):在分布式系统中的所有数据备份,在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本)●可用性(A):在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求。(对数据更新具备高可用性)● 分区容错性(P):以实际效果而言,分区相当于对通信的时限要求。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在C和A之间做出选择。CAP理论就是说在分布式存储系统中,最多只能实现上面的两点。而由于当前的网络硬件肯定会出现延迟丢包等问题,所以分区容忍性P是我们必须需要实现的。所以我们只能在一致性和可用性之间进行权衡。
Tendermint协议中绝大部分是异步的(前面部分也有弱同步的),并且验证者只有在接收到了超过2/3验证者的消息时才会处理。正是因为这样,所以Tendermint需要大多数的验证者可以100%正常运行,如果1/3或更多的验证者离线或脱机,网路就会停止运行了。从CAP理论来看,Tendermint的设计决策确实是把一致性C和分区容错性P地位放在了实用性A之上。在现实世界上有相当高的可能性是,系统真的会停止运行,参与者将会需要在协议外组织在某种软件上更新后重启系统。
而Casper强调的是在链上同步,所以Casper的设计选择了实用性A和分区容错性P多于一致性C。Casper对Tendermint的核心优势在于网络随时可以容纳更多数量的验证者。因为Tendermint中的区块在创建的时候就需要最终化,所以区块的确认时间应该短一点才可行。但是为了达到短区块时间,Tendermint PoS能够容纳的验证者数量就有了限制。由于CTFG和CFFG到在区块创建的时候都不需要安全性,所以可以容纳验证者的数量会更加的多一点,比如Tendermint只能容纳100个左右的验证者,而Casper则没有这个限制。
总得来说,Tendermint假设的是区块链的参与者在绝大多数时候不会作恶,因此验证者相应的惩罚机制比Casper轻,所以Tendermint更适合参与者们都相对可信的区块链,比如公有/私有链结合的企业级区块链。然而Casper假设的是区块链的参与者都是不可信的,所以相比Tendermint而言设计了非常严厉的惩罚机制,因而更适合去中心化无信任基础的区块链。当然,两者都还有问题,还远不是完美的共识机制,Code is Law, 期待未来我们能共同见证更完善的机制。
文章原标题:最热门的共识机制盘点:Tendermint还是Casper? 原作者:开门健山
导读:Tendermint属于拜占庭容错算法,它针对PBFT(实用拜占庭容错算法)做了优化,只需要有两轮投票即可达成共识。Casper是以太坊从POW转型到POS的一个优化版POS共识机制。二者还远不是完美的共识机制。
来源:学习区块链
- 免责声明
- 世链财经作为开放的信息发布平台,所有资讯仅代表作者个人观点,与世链财经无关。如文章、图片、音频或视频出现侵权、违规及其他不当言论,请提供相关材料,发送到:2785592653@qq.com。
- 风险提示:本站所提供的资讯不代表任何投资暗示。投资有风险,入市须谨慎。
- 世链粉丝群:提供最新热点新闻,空投糖果、红包等福利,微信:juu3644。

币网讯



