五千年(敝帚自珍)

主题:【原创】【整理】从央行官方解读看数字货币(已完结) -- 初心

共:💬93 🌺571 🌵11
全看分页树展 · 主题 跟帖
家园 【区块链与央行数字货币】后续一(完结)

非常感谢大家捧场!针对陈王的部分点评,我在这里对一些数字货币社区的最新概念做一下简要点评。

【1】关于公有链和私有链系统的分类:目前的公有链系统基本上都是以比特币的共识算法为基础,进行部分修改和扩展,代表作为比特币、比特币现金、莱特币、以太坊等等。这类公有链系统最最显著的特征是:它们都有一套挖矿”的手续。这个所谓的“挖矿”,其实是共识算法里面的一道必备的程序。由于公有链系统没有准入机制,因而为了限制某些“邪恶节点”的影响力,系统的共识算法故意将取得共识的难度加大,以至于很难出现一个节点或者组织能够“主导”系统。而Libra、Hyperledger等系统都是基于传统的(P)BFT共识算法,该类共识算法性能高但扩展性差,因而需要准入机制,所以它们都是私有链系统。

【2】目前公有链系统和私有链系统都有针对账本数据的压缩研究。但是目前两者系统最大的瓶颈其实还不在最终的存储策略上,而是运行共识算法的过程中的通信问题。公有链系统因为各个节点都需要拿到实时的新数据,因此网络传输的总数据量过大;而私有链系统的问题则是网络延迟过大:海底光缆一个来回就几百毫秒,整个共识算法需要数据传输好几个来回,这样总延迟就要超过1s,这就要求共识算法不能一次只处理一条交易,否则吞吐量实在过慢。然而这就又引出了下一个问题:

【3】交易是有先后逻辑顺序的。由于每笔交易都要把钱从一个账户转移到另一个账户,如果其中某个账户又进行了其他的交易,那么交易顺序必定会影响交易的成败。比如说,A账户有100元,B账户有0元,并且有以下两笔交易:A先给B转100元,B转50元给C。但是,如果第二笔交易发生在第一笔之前,而这时B账户并没有这么多钱,则这次交易必定失败。大家可能会奇怪:为啥会出现这种情况呢?因为网络延迟的问题,真实的交易信息到达分布式记账系统的时候往往是乱序的,可能B以为自己还有足够的钱,但是B可能有别的转账交易被系统提到了前面先执行了,结果造成余额不足。对于交易批处理问题,系统往往首先需要对这批交易的有效性做验证,剔除那些无法实现的交易,而这个过程本身就需要一个共识算法去解决,解决掉这个问题,系统才能对这个共识出来的结果再投一次票。你可以理解前者是人大某个委员会审查“草案”的过程;后者是人大全会针对这个“草案”再投票,把它变成“法律”的过程。两个共识算法一起折腾下来,系统的可扩展性就会变得更差了。这也是为啥Libra折腾了这么老半天还是没法提供10000笔每秒这一级别的交易吞吐量。

【4】上面的“草案”问题,其实可以通过一个中心化的序列化系统去解决。但是既然我们有了这么个系统,那再搞私有链系统的意义在哪里???这其实也是央行直接质疑Libra的一点,虽然穆长春并没有直接说,但是私有链系统的各种缺点在上亿用户这一级别的高并发的确是暴露无遗的。

【5】侧链是一种提高系统性能的“动议”。侧链的核心思想是:让大量侧链来收集用户的交易信息,当收集完毕后,再统一放到主链上。至于侧链的问题,我们就要开始讨论共识算法的一些基本理论了。(P)BFT(用于私有链系统)有一个经典理论,就是说一个存在恶意节点的系统中,如果假设我们有f个恶意或者错误节点,那么系统必须至少拥有3f+1个总节点才能得出正确的结果,或者说,一个系统的恶意节点的数量严格不能超过1/3。这个理论证明很复杂,我在这里就不在赘述了。这里大家要注意到:剩下的2f+1个节点是绝对不能出错的,即使过大的网络延迟也不行,否则就会被划入到错误节点里面去。这个理论说明了什么呢?如果在侧链里,节点数量过少,那么只需要有很少量的恶意或者错误节点就可以弄瘫这个侧链。进而,侧链提交的数据会变得不准确,而主链的没有义务查验侧链数据是否准确,主链关心的只是提交的数据会不会和主链上的数据产生逻辑矛盾,至于侧链干了啥坏事,主链一概不过问。对于公有链系统,那就更麻烦了:由于侧链的存在是为了降低延迟和提高交易吞吐,想做到这一点,根据目前的共识算法,唯一的可能性就是减少侧链的节点数量或降低侧链节点达成共识的难度,无论哪一点,都有机会对侧链的安全性造成毁灭性的打击,因为公有链系统没有准入机制,黑客想在侧链上搞事情要比在主链上容易多了。

这里我举一个干坏事的例子:假如某一个侧链被黑客绑架了,商家A卖了货给了商家B,B把钱给了A,在侧链上已经把交易写入了,A确认后把货发了,B收到货后马上联系黑客,把侧链上的交易抹去(实际操作是回滚交易)。要知道:如果该侧链被劫持,基于目前的共识算法,只要恶意节点的数量或者算力足够,此类操作是完全可行。这样,B又把钱拿回来了,而且还拿了货,B就可以把这笔钱花第二次去买别的东西。这个过程,就是著名的Double-spending。注意到:Double-spending在主链也可以发生,所谓比特币51%攻击指的就是这个,因为如果某一个组织掌握了51%的算力就可以抹去比特币区块链上任何的交易信息,这是由比特币的共识算法决定的。

然而,这个可怜的A陪了货,于是TA以后学聪明了,不在信任乱七八糟的侧链,只有数据写入主链并确认以后在发货。如果是这样,那交易的延迟就取决于主链的延迟了。试问:一个交易延迟长达一小时的公有链系统,如何去赢得市场???一个稍稍扩展就比1000笔每秒还慢的私有链系统,如何赢得市场???

【6】后来又有人提出“联盟拜占庭”的想法,是对PBFT算法的扩展,想法是大家先组成一堆小团体,小团体内部先投票,各个团体之间有一些节点是“脚踩两条船",联盟拜占庭通过一定的算法把那些乱投票的恶意节点从系统里面剔除掉,这样“理论上”剩下的节点都是正常节点,这样小团体自己内部投票就可以决定要不要把数据放到区块链里面去了,而不用大家一起投票。至于联盟拜占庭的问题,其论文假设每一个团体都能够reach一个agreement,其原始论文明确提出:对于这个团体,f=1,即团体内部最多只有一个恶意或者错误节点,根据我上面提到的3f+1计算,4个节点就构成一个小团体来保证共识算法的正确性。我想问一下论文作者:你哪来的自信能够确定每一个团体只有一个恶意或者错误节点?不说别的,Raft这种应用在不存在恶意节点环境中的共识算法,一般都要假设至少一个错误节点(比如说突然崩溃了或者网络大延迟或者断线)。如果联邦拜占庭要放在公有链上,请问:如何来保证每个团体中f=1?要知道当时比特币为了让公有链系统成为现实,不得不另寻出路,连正常的(P)BFT都不敢用,就是因为你无法保证一个公开的系统中恶意节点的数量,尤其是系统首发的时候。更糟糕的是,如果整个系统绝大部分团体都是恶意团体把持,【民主投票】之后,这系统到底是谁的天下啊???

(ps:联邦拜占庭的结构和CDO很像......)

【7】最根本一点,这种涉及国家信息安全的数据系统,是永远不可能上公有链系统的,除非国家全部都消亡了,世界大同。

【总结】目前区块链的绝大部分改进论文,都是在2015年之前就已经发布了,整个社区、学术界和工业界其实研究了很长时间,但是目前最靠谱的还是:公有链系统-比特币类;私有链系统-(P)BFT类。绝大部分改进都无法提供真正严格的证明,来确保系统的可靠性和稳定性。但是,这并不意味着目前的探索一无是处,更不意味着比特币毫无价值(其实比特币的意义很大)。我会在后面对这一点再进行详细阐述。

后续二

后续三

终章

通宝推:尚儒,独立寒秋HK,唐家山,桥上,
全看分页树展 · 主题 跟帖


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河