你一觉醒来,发现自己没躺床上,而是站到皇帝身边,变成贴身侍卫。皇帝合上奏折,扭头问你:甘肃有没有旱灾?
你刚来,不熟悉业务,但欺君是罪,只好抱着问题溜出门,幸亏遇到三位大臣围在门口点烟,于是你凑前一步说:皇上让我问问你们,甘肃有旱灾?
两个大臣连忙点头,但另一个却吐出两个烟圈,笑而不语。
你的挑战才刚刚开始——到底有没有旱灾?
按照PBFT共识算法,你应该马上挽起两位点头大臣的手臂,找皇上汇报:甘肃确有旱灾一事。因为已达成2/3多数的共识,但且慢一步,先搞清楚一件事:
一、什么是PBFT?
PBFT指实用拜占庭容错算法,和POW(戳蓝字复习概念)一样,PBFT也是一种共识算法,解决的是拜占庭将军问题:几名将军带领各自部队围住敌城,合攻则胜,分攻则败,于是将军们约定攻城时间,但必须通过信使联络,可如果出现叛徒该怎么办?
将军喻指网络节点,解决拜占庭将军问题就要祭出一个概念:拜占庭容错。
网络节点总有错误,它们可能是叛徒(恶意节点),也可能是傻子(故障节点),各节点并不能确保收到的信息没被做过手脚。“拜占庭容错”指在分布式系统里容下这些“错”的同时,又能达成正确的共识。
我们已经熟悉经典的拜占庭容错解决方案:POW算法——使用工作量证明找随机数。
如果你读过专栏第一季的文章,就能体验到那场面的轰轰烈烈:腱鞘炎都快翻出来了,但随机数还是很难找到。可一旦找到随机数,硬邦邦的事实就戳在地上,谁都无法撼动。
很安全,但是没效率。
PBFT只是嫌弃传统方案不实用而已,所以增加一个假设,千万别小看这个假设,它把原本铺漫到天边的工作量变成几乎不需要工作量,这个假设就是:不良节点不超过节点总数的1/3。
最终,从效率角度望过去,拜占庭将军问题的传统解法POW在PBFT这种火箭推进器面前顿时灰头土脸,像台烧劈柴的锅炉。
那PBFT具体是如何运作的?
二、PBFT的运作过程
PBFT共识算法的全过程分五步:第一步是“请求”,相当于客户端发出读写需求,第五步是“答复”,相当于系统给客户端的最终答复。
真正达成共识的是中间三步:
第二步:你问大臣(预准备)
第三步:大臣回答(准备)
第四步:官僚系统间再次确认(确认)
PBFT把你和所有大臣(全网节点)称为“副本”,而你是最重要的副本,即“主节点”,负责从大臣们处搜集信息,统筹分发确认,最终牵头答复。
主节点向全网广播,这个过程就是预准备。预准备的关键是分发,主节点为每个请求编上号,然后群发向所有副本。
三、许可链
指经许可才能接入的链。
小规模的许可链就像私家庄园,称为私有链;较大规模的许可链就像经济开发区内的企业集群,我们称之为联盟链。不管是私有链还是联盟链,入网都必须经过有权人核准。
与许可链对应的概念就是公有链(公链),公有链的代表是比特币,任何节点都能随时出入、随时读取,账本全公开,没有私密性。
而许可链则在地上围了一圈篱笆,你想进来吗?先拿到批准再说,所以私密性好。
当然,和公有链相比,许可链的安全性就短了一截。比如就在4天前,基于PBFT开发的应用Ripple就被曝永久丢失32570个区块,这意味着没有人能够审核Ripple的完整区块链。
虽然当事方称未对普通用户造成影响,但和比特币平稳运行9年多相比,安全性瞬间矮下一头。甚至有人称Ripple的PBFT共识机制为“没有必要又毫无意义的烟雾镜像”。
没有错,PBFT算法并不是去中心化的共识,而是中心化的控制,这就是为什么很多人并没有把Ripple的代币XRP划分至中心化货币的原因。
但PBFT的效率终究秒杀POW,所以几乎所有的大型金融项目都倾向使用PBFT构建联盟链,那这么做对我们有什么好处呢?
举个小例子:传统跨境支付需要3-5天,而基于PBFT的Ripple搞定同样的事只需3-5秒,同时费用下降50%以上。
你看,不管是去中心化还是中心化,足够先进的科技,都和魔法无异。