-->

左耳听风_067_66_区块链技术细节去中心化的共识机制

你好,我是陈浩网名左耳朵耗子。

那今天我们要讲的内容呢是去中心化的共识机制。

那其实去中心化的共识机制呢,也就是要解决拜占庭将军问题。

他是莱斯利兰伯特在一九八二年提出来的,用来解释一致性问题的这么一个虚构的模型。

那同时呢它也是分布式领域中最复杂、最严格的容错模型。

戴占亭的将军们没有一个中心化的领导机构。

所以如果他们需要攻击某个城市呢,所有将军啊都需要对任何将军可能提出来的攻击时间达成共识。

也就是说呢只要所有的将军都达成了共识,在同一个攻击时间内攻击啊就会有非常大的胜率。

但是呢问题来了,在这个时间点呢可能会有多个将军同时发出不同的攻击计划。

而且这些将军中啊还会有叛徒,那么将军们怎样达成共识呢?莱斯利兰伯特证明啊,当叛变者不超过三分之一的时候,存在着有效的算法。

不论叛变者怎么折腾,忠诚的将军们总能达成一致的结果。

那如果叛定者过多呢,那就无法保证一定能达到一致性。

那拜占庭问题之所以难解啊,是因为在任何时候,系统中呢都可能存在多个提案,而且要完成最终的一致性,确认过程十分的困难啊,容易受干扰啊,但是一旦确认了,就是最终的确认。

那比特币的区块链网络在设计的时候呢,使用的是POW算法思路。

那一个是限制一段时间之内整个网络中出现提案的个数。

那另外一个呢是放宽对最终一致性确认的需求约定。

好,大家都确认,并且沿着已知最长的脸进行拓宽。

也就是说啊如果比特币系统在某一个时刻同时出现了两个都合法的区块啊,那么两个都承认,于是区块链上就会出现两个合法的分支,那术语呢叫做分叉。

此时矿空就可以选择任何一个分支来继续。

那在某个分支的长度超过了另一个分支的时候呢,短的那个分支马上作废。

如果你看过我之前写的分布式系统架构本质系列的文章呢,那么一定知道paxel协议,那这个也是一种分布式一致性的共识算法。

但为什么不用paxels和raft来做区块链的一致性算法协议呢?这两个算法对资源的消耗比POW要小得多呢?那如果你熟悉这几个算法,那么你就会知PPOW和paxel raft的算法在本质上呢有这么一些不同。

那第一呢就是对于paxel和raft,它需要leader选举。

而对于比特币或者以太坊这样的无中性化的方式呢,是没有leader的那第二呢,对于pixels和raft加入它网络的节点,前期假设都是授信的。

然而对于比特币或者以太坊来说,他们的前提假设都是不受信的啊,他们只相信超过一半节点所同意的东西。

那第三点不同呢,就是对于pencils和raft,需要事先对整个集群中的节点数有定义。

而去中心化的比特币和以太坊中的节点是想来就来,想走就走,来去自由。

那如果pixel和rappt在这样的环境之下,就会处于一个非常尴尬的境地啊,又能随时进行伸缩。

而且呢pixas和wrapped并不适合在一个非常大的网络中玩啊,比如上百万的节点。

但是他们啊也有一些相同的地方,那首先呢他们都是一致性的算法。

那其次呢对系统的修改啊,总是需要一个人来干。

那区块链呢用POW来消耗资源,让提案变得困难。

而paxel和raft呢用领导选举,那还有一个相同点,就是系统中暂时的不一致是可以被修正的那区块链呢会考虑最常链牺牲的强一志性啊,保证了可用性。

而paxels和raft如果没有超过半数的节点,在线呢,会停止工作,牺牲了可用性,保证了强一致性。

总之呢,区块链所面对的无中心化的p to p网络,要比paxels和raft所面对的相对中性式的分布式网络要复杂多得多。

所以就不不可能使用pxelas和raft的协议来替代POW协议。

除非呢你想干一个相对中心化的区块链。

然而这就成为了区块链的一个悖论了。

那无论你是搞区块链还是搞分布式,你都需要知道。

拜占庭容错系统研究中的三个重要理论,CAPFLP和DIOS.那接下来我们一一来说,这三个理论。

首先CAP理论说的是在网络发生阻断的时候,你只能选择数据的一致性或者可用性,无法两者兼得。

那论点呢比较直观,就是如果网络因为阻断而分割为二,那在其中一半我送出一笔交易,将我的十元给a在另一半呢我送出另一笔交易,将我的十元给b那此时系统啊要么是无可用性,也就是这两笔交易至少会有一笔交易,不会被接受,要么呢就是无一致性在注是一半儿,看到的是a多了十元,而另一半呢则看到b多了十元。

要注意的是,CAP理论和扩展性是无关的,在分片或者非分片的系统啊都适用。

而FLP不可能性说的是在异步环境中啊,如果节点间的网络延迟没有上限,那只要有一个恶意节点存在,就没有算法,能在有限的时间之内达成共识。

但值得注意的是啊,拉斯维加斯算法在每一轮呢都会有一定的几率达成共识。

那随着时间的增加,共识的几率啊会越趋近到一,而这个呢也是许多成功的共识,演算法会采用的解决办法。

那所谓拉斯维加斯算法呢又叫做壮大运算法,只是保证结果正确,只是在运算时所用的资源上进行赌博。

那一个简单的例子呢是随机快速排序,那它的pivot是随机选的,但排序的结果永远一致。

而关于容错的上限呢,由DLS的论文我们可以得到这么几个结论。

那第一呢,在部分同步的网络环境中,协议可以容忍最多三分之一的干热停故障。

那第二呢,在异步网络环境之中,具有确定性质的协议,无法容忍任何错误。

但这篇论文呢并没有提及rdoomize orgorithms在这种情情况可以容忍最多三分之一的半暂停故障。

那第三呢,在同步网络环境当中啊,网络延迟是有上限的,而且上限呢是已知的协议,可以容忍百分之一百的半暂停故障。

但是当超过二分之一的节点为恶意节点的时候呢,会有一些限制条件。

要注意的是,我们考虑的是具有认证特性的半长亭模型,而不是一般的半长亭模型。

具有认证特性了,指的是将如今已经做过大量研究,并且成本低廉的公司要加密机制应用在我们的算法中。

那接着呢我们来谈一谈工作量,证明比特币所用的挖矿算法并不是比特币开创了。

那它的原型呢叫做hash cash.这个想法最初是由哈佛大学的女计算机科学家sincere沃dework加州伯克利大学的尼尔,还有艾monnori poyak towaskei在一九九二年的一篇论文中提出来的。

论文的名字呢叫做pricing will procecesing or combbating unk mail.是的,一开始这个算法呢是用来限制垃圾邮件的那简单说来呢,haandkk是一开始要求邮件发送方对邮件头计算一个一百六十比特的沙万哈希值。

它前面需要有五个零啊,也就是二十比特的零。

那接收端啊会检查这个事儿,那为什么要设计成这个样子呢?因为如果我们要发邮件呢,这点算力对于发送方来说是没有什么。

但是对于需要大量发送垃圾邮件的人来说呢,这就是一个很大的成本了。

就算是那些控制着用户的僵尸网络的黑客来说,发送垃圾邮件的时候呢,导致CPU使用率过高啊,会马上引起电脑所有者的警觉,而且呢还很容易定位相应的恶意程序。

那对于一些授信的邮件服务器呢,我们可以把它放进白名单里。

那这样呢就不需要他们接受hash cash挑战,那他们也不用为他付出成本。

于是这种玩法就叫做probe of work,简称就叫做POW.也就是工作量证明我们用这种消耗对手能源的手段来阻止一些恶意的攻击啊,或者像垃圾邮件这样的对服务的滥用。

Pow呢有两种协议,一种叫做challenge response协议,用于client到server.就像文中这张图表示的。

这样如果client呢需要使用服务呢,那么就需要被challenge去花费一些资源。

那如果证明自己的资源已经被花费了,则通过认证授权使用。

而另一种呢叫做solution verification协议用于验证使用。

那还是cash呢?就是使用这种协议。

我同样在文中呢放了一张图,帮助你更形象的理解。

那通过前面的描述,我们可以得知啊,我们需要为用户记录的交易是不能被修改的。

所以使用harsh方法为每个账本做了签名,还把它不断的打包,再harsh形成morbal root,然后呢再形成一个串链。

于是呢修改一个地方会导致所有的地方的签名都需需要被跟着一起修改,就形成了复杂度。

但是呢这样的复杂度对于计算机来说并不高,找上一台或者几台主流点的电脑呢,分分钟就破解掉了。

因为哈希运维这个事儿对于计算机来说是一件非常高效,根本不费事的事儿。

于是我们就需要通过挖矿啊,也就是POW这样的协议来大幅度的提高修改成本。

使得有恶意的人需要改一个地方,需要花很大很大的成本来修改。

那这个呢几乎是一件不可能的事情。

因为比特币是去中心化的p to p系统,任何人呢都可以方便的获得所有的数据。

所以为了防止有恶意的人修改数据,使用POW的挖矿机制呢就可以大幅度提高。

想要通过修改来攻击这个系统的人的成本。

那当然POW的初衷是通过消耗资源的方式来阻止一些恶意攻击。

但是在区块链的去中心化的世界里呢,POW还有另一个功能,那就是让这些不受控制的分布式的p to p网络的节点统一思想,也就是我们常说的分布式一致性。

那这个对于分布式系统中的交易系统来说是一件非常重要的事儿。

那总结一下工作量证明就是为了这么几个事儿。

那第一呢就是提高对数据篡改的成本,让你修改数据需要付出大量的算力。

而区块链的数据相互依赖,导致一处改,处处改。

因此呢你要完全修改,就需要付出大量的算力。

那第二呢就是提高网络中有不同声音的成本。

试想一下,如果一个网络有不同的人给出了不同的账本,而且都合法,你会信谁的呢?所以挖矿就可以解决这个事儿,让你要做一个伪造账本的成本非常大,而校验账本的成本呢就很小。

那第三呢就是解决分歧。

当有不同声音的时候呢,也就是区块链出现分叉的时候,那所有的矿工只能选择其中一个分支,于是大多数人选择的那个分支啊就会成为事实。

那少数人选择那头呢就会被遗忘了。

那这就让整个去中心化系统的一致性不再以人数多认可的数据为准,而是以算力多的人认可的数据为准。

那只要网络越来越大能掌握半数以上算力的人啊,基本上是不可能的啊,确实是这样的吗?啊,我表示怀疑那POW解决这种无中心化网络的作弊分析,这样的问题是目前最有效的。

呃,其他不用POW,这样玩法呢都有很大的安全问题。

但是呢现在的POW也有几个非常严重的问题。

那第一呢就是记账越来越中心化了,本来是要大众一起参与去中心化的事儿。

那现在因为算力的问题,因为GPU的出现,导致一般人啊几乎无法参与其中了。

那其次呢就是越来越跑不动。

比特币今天的链越来越长,导致要验证数据是否正确的成本呢也越来越高,一般人的电脑基本都快要跑不起来了。

所以比特币社区呢也开始分裂出好几个衍生品,用不同的手段在解决这个问题。

但是呢目前为止啊我没有看到什么比较好的方式,因为这世界上不存在完美的解决方案。

你要一头另一头就没了。

那POW这个机制需要找到符合条件的哈希值,在目前来看,它耗费的电力和时间成本是越来越大了。

所以为了每个block更快的生成,就出现了POS协议。

那全称呢,是pro of steak中文翻译为股权证明协议。

在POS机制下呢,矿工不再叫矿工,而是叫validator校验者。

那假设现在有一个区域需要生成,而现在呢有四个validator,每一个validator呢需要以交押金的方式来取得记账权。

那假如a交的押金占了百分之三十八,b占了百分之二十五,c占了百分之二十一,d呢占了百分之十六,那么他们就会按照股权的比例来获得计账权。

比如a呢就有百分之三十八的概率可以获得记账权。

那当然呢不是由系统随机分配,还是要算哈希值,只不过是财富越多的人呢,挖矿的难度越小。

而如果你发起恶意攻击的话,你的钱呢就会被系统没收充公。

而y记记账之后,有奖金只有手续费。

也就是说呢呢在ddatp OS机制之下呢,记账权不再像POW那样,谁的算力大谁就有机会来记账,而是由谁的财富多,谁就越有可能来记账。

于是呢记账权就会按大家财富的比例来分配。

Pow啊好像是多劳多得的社会。

而POS呢更像是资本主义社会,钱越多的人越有话语权。

那这其实也没有什么不对的。

从博弈论的角度上来说呢,钱越多的人啊越有动力去维护社会的稳定。

因为如果社会不稳定了,那他呢是损失最为惨重的人。

但这里呢有一个逻辑问题,那就是如果钱越多的人越有动力维护社会的稳定,那是不是越中心化的机构也越有动力去维护整个系统的健康呢?那如果是这样的话,我们为什么要去动硬化呢?那更多的逻辑问题呢会在这节课的最后来提出。

那在以太坊里面呢,成为validator的几率啊,是根据拥有以太币的总量来决定的那POS宣称它至少有这么几个好处。

那第一个好处很明显,就是不需要那么费劲的来挖矿了,那样浪费电力,不环保的挖矿的确是有点太糟糕了。

那POS呢很明显解决了这个问题。

那第二个好处呢就是在这种p to p无中心化的网络之下,如果你要控制整个网络,就需要超过半数以上的能力。

在POW之下呢,你需要百分之五十一的算力。

在今天啊这会是一个非常大的成本。

但是我们看一下文中这个全球比特币的算力图我们发现只要前四家公司联合起来作弊,就可以完成对比特币的攻击。

而在POS之下呢,你就需要有百分之五十一的财富,你才可以发起攻击。

那这相对于算力而言呢,需要更多的成本。

设想一下,你得拥有百分之五十一的比特币,你才能黑了比特币。

但是呢如果你有百分之五十一的财富,你为什么还要黑了这个系统自己把自己干死呢?那这个呢就是博弈论,世界上没有完美的午餐,也没有绝对完美的事儿。

所以说POS呢也有它潜在的问题。

那最明显的一个问题呢,就是当它不需要太多算力的时候呢,如果账本出现分叉的情况啊,也就是系统出现两个冲突,并且合法的区块的时候。

在比特币这种算力密集的POW机制之下,所有的矿工必须堵其中一个分支往下走。

因为算力的问题,所以基本上来说啊不太可能同时在两个分支上发展。

而其中一个分支如果长于另一个分支,那较短的那个分支呢就会被孤立出去。

那他上面的账本呢就都不做数了,而矿工的奖励啊也都没有了。

那这个呢就是POW机制的好处。

而在POS,这种不需要算力的机制之下,就可以让记账过程在两个分支上同时进行,以争取实现利益的最大化。

那这样一来呢,攻击者就可以利用这种情况来发起nothing at stake攻击。

也就是说,如果绝大多数人都在发展两个分支,假设有百分之九十九的人发展a分支,那这百分之九十九的人呢也在同时发展b分支。

而剩下百分之一股份的人呢,在分支a中写了一笔交易,然后呢在b分支没有这笔交易。

那么当它在a分支上达成合约之后,再加入b分支,然后b分支胜出了,那这就会导致他没有交易。

另外呢两个分支的发展还可以导致双重支付的问题。

也就是说bob把他的十块钱借给了alice,在另一个分支上呢又给了mary.那根据CAP理论呢,如果出现网络分区的情况,你要么选择数据的一致性,那么你就得让整个系统不可用。

要么呢就得选择系统的可用性啊,那你就得牺牲数据的一致性。

所以在无中心化的网络之下,我们通过分叉来牺牲术语的一致性。

于是呢在一个分叉之上,五把十块钱给了boalice.在另一个分叉之上呢,bog又把十块钱给了mary,甚至呢还可以发起贿赂攻击。

攻击者可以在一个分支之上声明购买了某个商品。

但是他在收到货之后呢,以提高手续费的方式是让另一个没有购买这个商品交易的分值。

然后啊把没有这个交易的链养的足够长长到系统,最终选择了没有交易的这条链。

在POW机制之下呢,这种分叉攻击的玩法基本上来说是不可能的。

但是在POS的玩法之下,这种攻击就很有可能在以太坊之下呢,如果发现有人玩,同时养分叉的玩法就可以予以惩罚。

但是如果这个攻击者有多个账户呢,那我可以用多个马甲来玩不同的分叉。

另外呢POS这种通过财富的占比来决定记账概率的玩法,可以让节点进行预计算,也就是可以计算下一个哈希值。

那这样一来呢,就相当于我可以偷偷的来养分叉,看来啊POS的问题啊也很多。

所以有人呢又提出来了一个进化版,叫做d一POS,意思是委托股权证明,那它是POS的进化方案。

以太坊的官方VT上有一份pro of stick的IAQ啊,你可以前往一读。

那最后呢我们就来谈一谈DPS机制。

那在常规的POW和POS当中呢,有一个非常影响效率的地方。

在与任何一个新加入的区块,都需要被整个网络的所有节点做确认。

Dpos是怎么优化的呢?它通过不同的策略,不定时的选中一小群节点。

那这一小群节点呢做新区块的创建、验证、签名,还有相互监督。

那这样呢就大幅度减少了区块创建和确认所需要消耗的时间和算力成本。

那这个呢就像选举人团代议制度啊,和美国选总统一样,DPS之下每个token都是选票。

大家票选二十个选举人团加上一个随机的选举人,也就是二十一个选举人代表网络。

然后每隔一段时间就在这二十一个人当中挑选一个出来维护账本并获得收益。

那最近呢推崇DPUS的EOS,开始了它二十一个超级节点的选取。

那作为超级节点啊,他们将获得US每年增发的百分之五的收益中的大部分。

那大约每一个节点每年可以获得二百三十八万个US的收益。

按照当年的价格,一个节点,每年可以分到一亿元人民币的奖励。

那这里注明一下,EOS是以准备颠覆以太坊和整个区块链生态的姿态,打着提高交易吞吐量到百万级TPS的技术口号进入到这个世界中的。

那在本文成稿的时候呢,EOS还没有正式发布。

那相关细节你可以看一看US白皮书中的中文版翻译比较有趣的。

是啊在这次超级绩点的竞选上,主要竞选几点来自中国、美国和韩国。

这三方的优势呢是韩国人拥有最大的US交易量,而中国人拥有更多的us之外的资本。

而美国人呢拥有规则制定权,那看起来就是美国有政治权利,韩国有经济权利。

那中国这边有外围经济权,那看上去是比较完美的制衡,就像三国演义一样。

那为了赢得选举呢,中国的竞选人就开始进行了我们熟悉的套路会选。

那所谓会选呢就是说当选超级金展之后啊,把前面说到的每年应得的巨额工资返还给每一位投资一票的人。

那通过这样的会选,就可以破坏看起来比较制衡的政治局面。

那这样搞下去啊,很有可能的,二十一个节点就会被一家公司所控制。

所以很快啊,创始人BM就现身,表示不支持节点对投票人实行分红的做法。

然后thomas cox也在社区之内发帖,为什么付费投票是坏的?来谴责贿选,并开始陆续发布EOS点IO的零点一版本宪法。

那第一个条款就是不说谎。

那相关的报道呢,你可以打开文中的链接来了解顺便的八卦一下EOS创建人BM在二零一四年的时候呢,创建比特股时啊,打出过超级比特币的概念。

然后因为bug太多,体验非常的差,后面他就和公司不和离开了比特步。

在二零一六年的时候呢,他创建了社交平台,stemit想颠覆传统媒体,结果呢也失败了。

后来在二零一七年创建了EOS,瞄准了以太坊。

想做区块链界的基础设施,包括并行计算数据库,还有账户系统等等。

老实说呢,我觉得这个对他来说更难。

在我看来啊有两点让区块链这个技术开始有点变味儿了。

那第一呢就是DPUS已经开始把区块链的去中心化的初衷呢开始向中心化的地方去演进了。

那另外一点啊,就是政治在未来区块链的世界里是一个必不可少的技能。

那这个就意味着不可控的复杂性,我感觉这些技术渣是一定hold不住的那对于我来说,到目前为止POW还是一个比较稳健的共识方式,而POS和DPOS呢还需要更多的实践和改进。

那当然呢也许混合了POWPOS,还有DPOS也不错呢。

去中心化和高吞吐这两个事儿,我觉得是很难协调的那这节课到这里呢就结束了。

最后我简单总结一下,那第一呢POW就是蛮荒社会,谁的拳头大谁说话是真正意义上的无政府的去中心化的社会。

那第二呢POS就是资本主义社会,谁的钱多谁说话,那还是无政府的社会,但是呢是由资本家来控制的那第三呢DPOS就是政治主义社会,谁的选票多,谁说话啊,我也不知道是怎么个选举,是竞选活动吗?有电视辩论吗?还是就是投票玩一玩呢?但是感觉啊又回到了中心化架构中的leader选举。

无论怎么样啊,人类社会进化的影子在去中心化的社会中呢又开始出现了。

那么另一个逻辑问题就来了,如果这种去中心化的社会本质上就是再重复一遍中心化演进的过程,那么还有什么意义呢?那这个逻辑问题我们留到最后,那这里呢还是看一下技术方面的事儿。

我们都知道分布式系统的CAP原则,在一致性可用性和分区容忍性上只能三选二。

在区块链的p to p网络之下也是很类似的。

在去中心化安全还有高性能当中啊,我们也只能选两个。

那如果我们想要一个既安全性能也很高的系统呢,那么就得放弃去中心化的架构啊,比如DPS这样的中心化系统,直接放弃区块链,走传统的中心化的架构。

那如果我们想要一个去中心化和安全的系统啊,主要去挖矿,那么就得放弃高性能,那这个呢就是目前比特币的架构。

而如果我们想要一个去中心化同时又性能高的系统,那么呢就得放弃安全。

那没有安全的系统啊,基本上来说是不会有人来用的。

文末呢我给出了区块链技术系列文章的目录,希望你能在这个列表里啊找到自己感兴趣的内容。