硬核解读 | 区块链项目99%都是骗术?带你走近真正的区块链技术

前言

2019年下半年,随着“加快推进区块链建设”的指示,区块链技术再一次进入到人们的视野。比特币,作为区块链技术的首个成熟应用,也再一次受到人们的关注。在此之后,越来越多的互联网公司开始与区块链技术相关联,与此同时,各种虚拟货币也开始有所行动。

进入到2020年,北京开始尝试使用区块链架构的政务应用,有的学校就区块链工程申请了本科专业,与此同时,各大互联网公司也在尝试布局区块链业务,各种虚拟货币业务似乎依然旺盛。

部分自媒体也开始尝试以区块链为话题进行讲解,对这项技术的态度褒贬不一。

但是,还是想问一下各位观众,大家真的理解所谓的“区块链技术”了吗?真的对这项技术本身有自己的认识吗?

本文不会涉及到太深算法与开发问题,我将主要带领大家从感性认知区块链技术,希望能带给大家对于这项技术更为全面的理解。


比特币设计的源头

比特币算是区块链技术的首个应用了,很多人都对比特币做了讲解,不过,我还是想给大家做一个简单解释,在解释的过程中,也请大家摒弃偏见,主动思考一下区块链技术背后的一些构想,思考比特币中这一系列设计之间的关联:

场景1:如果你去菜场买菜,你的资金就是你钱包里的纸币,通过纸币直接结算。此时,可以用10元纸币从菜场大妈手里买来价值10元的蔬菜。付钱这个过程可以表现为:在某个时刻,你的钱包里少了10元,大妈的钱包里多了10元,10元的蔬菜到了你手里。大妈很放心,因为这张纸币是由国家认可的,具备交换能力,这可以看成一种现实中的点对点交易。

场景2:如果大妈把菜放到了网上出售,你的资金通过资金表上的数字来表示。此时,你再去找大妈买菜的时候就没那么容易了,因为你没法保证资金表的真实性。而且,即使大妈能够认可你的资金表,这也只是你们之间的协定,其他人或许并不认可。也就是说,电子资产无法在整个社会获得认可,交易也就无法产生效力。

中心化:这个时候呢,就需要有中介进行担保。中介证实某个账户的资产,并且控制交易流程,这样就形成了中心化的管理机制。但是,总有人不太喜欢自己的资产受到中心管理(追求民主自由的平民就不开心了,“凭什么我的资金要受中心管制,我不相信你的管理,我要人权”)。并且,中心化架构确实也会引起监管问题。多级中介转接的运行方式,也会使得流程过于繁琐,从而造成较多的中间环节上的成本浪费。中心机构也降低了容错率,一旦单一的中心产生问题,数据就会受到不可逆的损失。

这时候,就有一个人想到去中心化系统,这就是比特币:想办法架空中心,不采用中心化场景,不就可以避免中心化引起的问题了吗?


去中心化问题

大家都知道,比特币系统的重要特征之一就是,去中心化,这是怎么做的呢?

比特币系统做了这样一件很简单的事情:让大家都保存全量的交易账本。

账本由众多交易记录组成,这些交易记录,存储在一个又一个区块(block)中,这些区块会被同步到每一个参与者手里,这样以来,大家都拥有了全量的交易账本,自然也知道了每一笔的资金流向。参与者都可以够通过账本来验证资金流动,从而判断对方的这次交易是否有效,从而排除掉非法交易。借此,所有人都能及时获取到最新的账本信息,然后通过账本上的记录来组成比特币社区的互信,从而能够支持比特币社区内的点对点支付。这,就是去中心化的框架。

这时候你应该也发现了问题,区块是保存交易的关键结构体,那么它应该由谁来生成?

区块生成需要加以控制,不然就会让不法分子通过分发假区块来伪造交易。于是,系统定制者想到了一种游戏规则:每一次打包生成区块时,打包者都需要完成一个非常复杂的数学运算,完成这个运算需要平均CPU全力运行10min。谁先算出来答案,谁就有权力打包区块,并向全体节点广播,则同时将获得一定的手续费奖励。一旦某笔交易进入到区块中,其他正在打包这笔交易的节点就不能再继续打包。这就是工作量证明(Proof of Work)共识机制,解决数学问题并打包区块的过程,由于可以获得手续费奖励,就被形象地称为“挖矿”。

为了让这个去中心化系统更加安全,这些区块是用链式存储的方式进行保存的。每一组交易构成一个区块,每个区块信息都要包含上一个区块的哈希值,用这种方式串成一个数据链,也就是区块链(blockchain)。整个系统以最长的链为标准链,只要某个块内数据有一点改动,哈希值就会不同,进而引起后续区块的哈希一同改变。在比特币系统中,当一笔交易上链,还需要再生成5个区块才能保证交易的有效性,也就是说,一次交易的时延大约为1小时。如果有人想要伪造某一次交易,就必须要重新生成整条链,并让链长度超过标准链以获得全网的认可。所以,如果想要伪造交易,就必须拥有超过全网50%的算力,但是拥有这么多算力,通过挖矿的方式来赚取手续费或许会更加合算。

这就是比特币的架构,说白了,就是构成了点对点网络,通过每个用户存储冗余账本的方式完成双方的互信,通过链式存储保证上链数据的真实性,通过工作量证明的共识机制防止有人伪造身份对网络发起攻击。


什么是区块链技术?

但是回过头来思考这样一件事,比特币做了这么多事情,最终是为了什么呢?是去中心化吗?实际上,比特币做了这么多事情,根本目的只是为了解决点对点交易中的互信问题。

现在再来考虑这样问题,大家都说,区块链是比特币的底层架构,那么,区块链到底是什么?是一种去中心化架构吗?其实这个时候并不需要把问题思考地太复杂,区块链,就是一种链式存储结构,仅仅是一种存储结构而已:数据存储在区块中,块与块之间用哈希值相连。

进而就可以引申到“区块链技术”,究竟什么是区块链技术呢?我的理解,区块链技术,就是利用共识机制保证分布式共识,利用密码学技术保障数据安全,是一种点对点可信网络的构架技术。


去中心化的必要性?

接下来,再请大家思考这样的问题:虽然中心化的结构模式中,对于中心总有人抱有不信任感,但是,互信网络真的需要完全的去中心化吗?

我认为明显是不需要的。其实,只需要让用户信任中心,使得中心真正受到监管,让中心的服务更加可靠,以中心的方式提供服务会显得更为明智。比特币去中心化带来的显著问题,就表现在资源的极大浪费以及非常低的吞吐量上。如果一个可信中心来提供服务,就能够尝试去避免资源浪费以及吞吐量低的问题。


联盟链

类似比特币构架的完全去中心项目,常用的共识机制,除了工作量证明PoW,还有股权证明机制(Proof of Stake,PoS)、共识机制委托股权证明(Delegates Proof of Stake,DPoS)、Algorand等一系列算法,它们被认为是“公链”项目,关于上面提到的算法不必太过于深究,如果有兴趣,我也可以尝试在后期做相关的科普。

而从传统公链衍生出的“联盟链”体系其实更为常用,目前,包括蚂蚁金服区块链、FISCO BCOS、IBM Hyperledger Fabric、百度区块链、京东区块链等常见的企业级区块链解决方案,使用的就是联盟链体系。


拜占庭将军问题

谈到联盟链体系,就要涉及一个问题,“拜占庭将军”问题。

问题描述起来也很简单:在拜占庭帝国,国王将自己的大将军派往邦外各地驻守,当将军们想要叛变攻城,需要几个将军联合在一起行动,就需要一个统一的信号,遵循收到外界信号中的多数意见进行行动。现在,拜占庭帝国的国王为了维持稳定,在将军内安插了非常信得过的忠臣,忠臣会想方设法打乱将军的行动,让他们无法造反成功。

那么,现在需要思考,将军内部满足什么条件,造反才能顺利进行呢?

这里,我们首先假设,在外的将军中存在1名忠臣。

如果将军总数是3,就会呈现如下的情形:2位反贼广播,发出开始攻城信号,而忠臣在知道有人要攻城时,广播按兵不动信号。此时,反贼收到来自外界的信号是1条攻城1条不动,因此无法做出行动判断。

如果将军总数是4,就会呈现如下的情形:3位反贼广播,发出开始攻城信号,而忠臣在知道有人要攻城时,广播按兵不动信号。此时,反贼收到来自外界的信号是2条攻城1条不动,可以做出统一判断,一同攻城。

进而,将反贼作为正常节点,忠臣作为作恶节点,即拜占庭节点,就可以推出拜占庭容错公式:假设系统里共有N个节点,现在有f个拜占庭节点,当系统收到N-f条信息时,最极端的情况下,剩余的f个节点是有网络延迟的正常节点,那么N-f条信息中就包含有f个拜占庭节点。此时,就需要保证收到的这N-f条消息中,大多数为正确节点发来的信息,才能做出正常判断。据此可以得到判断式(N-f)-f>f,即N>3f。也就是说,当N>3f时,才能够让系统整体忽略拜占庭节点的影响而达成一致。如上面的例子,当有1个忠臣时,将军总数至少为4才能够完成一致的军事行动。


BFT类共识机制与联盟链

根据拜占庭将军问题,推演产生了实用性拜占庭容错算法(Practical Byzantine Fault Tolerance,PBFT),通过它衍生出的一系列算法,成为了现在诸多联盟链所采用的核心共识机制,称为BFT类共识。通过这类共识机制,联盟链系统可以容纳一定的作恶行为,维持整体的正确运行。节点在执行后以块链存储的方式保存数据,用于以后的证伪查询。通过这种共识机制架构的联盟链系统,由于没有工作量证明中的复杂计算要求,更快速更节能,吞吐量更高,可以满足目前绝大多数系统的处理需求,也就成为了企业级区块链的首选共识机制。

如果大家有兴趣,后面我可以抽时间再做一期关于BFT拜占庭容错类共识机制的讲解,包括实用性拜占庭容错本身,以及衍生出的BFT共识机制。

这种共识机制要怎么构建区块链系统呢?其实也很简单,我们依然采用链式存储来确保数据的真实性,依然用每个参与者保留全量账本的方式来进行验证。唯一改变的,就是生成区块以及让参与者获得这个节点的方式:我们采用BFT类共识算法,用这种方式帮助参与者节点形成分布式共识,并帮助异常执行的节点进行共识恢复,从而保证系统整体的稳定性。

相比较比特币所谓的工作量证明,我个人认为,BFT类共识机制或许更有资格被称为一种“共识”算法,工作量证明只能说是一种身份证明的游戏。

但是呢,BFT类共识本身也有其不足。比特币的工作量证明机制,由于将算法与CPU算力绑定,因此天然杜绝了身份造假问题。而拜占庭容错算法只能对节点行为进行筛选,不能检测虚假身份的问题。因此,BFT类共识常需要认证颁发机构来进行证书颁发,用证书体系来认证节点身份,这也造成了BFT类共识只能应用在联盟链这种半去中心化的区块链系统中。即使在现在,联盟链证书体系已经可以做到半去中心化管理,但是这依然与比特币提出的完全去中心化有一些相悖。

接下来,探讨这样的问题——


真正的区块链技术

科技进步的目的还是要让社会运转更为高效,如果有这样一种方式,让中心化内部的数据变得透明可见,时刻接受社会监督,并且通过多地多节点冗余的方式来确保快速的容灾恢复,通过技术手段让公证数据无法作假,通过多机构之间的直接数据同步来减少中间周转的成本,免除复杂的纸质材料办理手续,减少纸质材料的传递成本。这样一项技术,难道不足以完成高效、可信互联网的目标吗?

前面提到的两类“区块链应用”,在我看来,一种是类似比特币的币本位区块链系统,一种是联盟链为主的纯粹的区块链技术。我认为,关注“链”本身的系统设计,不进行个体发行虚拟货币,这才是真正纯粹的区块链技术。

又转回到前面的问题,什么是区块链技术?目前,没有任何一个人有能力完全定义区块链,每一个研发团队都在以自己的方式探索这项技术的空间,为达成相似的技术目标进行多元化的开发模式。

联盟链,或许是一种优秀的区块链技术应用模式。当然,技术是在不断进步的,或许有更好的方案能够出现来解决虚拟空间的互信问题,区块链技术或许能够再次进化,或许会退出历史舞台。不过这都不是关键,如果真的想要了解这项技术,还是希望大家能够探索技术的本质,并尝试用对待技术的方式来对待这件事。跟风或捧或黑,都是不可取的。

从2016年至今,一直在了解区块链相关的知识,但是从来没碰过虚拟货币交易。区块链只是区块链,无论这项技术的前景如何,这只是一种技术,任何非国家性质的发币项目,在我看来都是一种赌博,投资这类虚拟货币,已经偏离了区块链的技术性,资金运转才是这类虚拟货币项目的最终目的。

但是,并不是说,因为存在割韭菜资金盘,就全盘否认这项技术。有分辨能力的人,没有赌徒心理的人,不会去涉足资金盘。更何况,区块链技术项目的部署,依然存在一定的探索空间,也有纯链构建的项目已经落地接受社会的检验。


充分理解一项事物之前,很难对于它本身做出判断。因为这种判断往往会限制自身对问题更深的思考,从而无法真正掌握事物的核心,长期以来会让自己的思维深度走向匮乏,让自己产生偏见。

其实文章内容并不重要,我更想传达一种思维方式,不要过于刻板地看待问题。关于区块链,如有不认同的地方,也欢迎大家讨论,合理表达自己的见解。

你可能感兴趣的:(硬核解读 | 区块链项目99%都是骗术?带你走近真正的区块链技术)