维基百科这样定义区块链:
区块链(英语:blockchain[1][2][3]或block chain[4][5])是借由密码学[1][6]串接并保护内容的串连文字记录(又称区块)。
每一个区块包含了前一个区块的加密散列、相应时间戳记以及交易资料(通常用默克尔树(Merkle tree)算法计算的散列值表示)[7],这样的设计使得区块内容具有难以篡改的特性。用区块链技术所串接的分布式账本能让两方有效记录交易,且可永久查验此交易。
这样的定义固然很正确,但是,一方面,这样的定义依然难以被普通人所理解;另一方面,我们也难以通过这个定义去理解「区块链技术为什么是赛博世界的重要基石」这个命题。
所以,我打算通过一个关于 「王国、国王与黑暗国王」 的寓言故事,来聊聊「到底什么是区块链」。
寓言故事中的对应关系说明:
王国——系统
外界——用户
国王——节点程序(国王和臣民共同构成节点服务器)
臣民——计算资源
黑暗国王——恶意节点程序
角色间关系简述:
在很久很久以前,有一个王国,这个王国的国民秩序井然地从事着工作与生活,并向外界提供服务,这个王国仅有一个国王,国王负责给所有臣民下达指令,统筹完成一个个目标。
一切看上去很Okay,直到有一天,国王吃了绿色的蘑菇,食物中毒了。国民失去了指挥,王国陷入瘫痪,提供给外界的服务中断。在上帝救活国王之前,整个国家是停止运作的。
在 1946 年,计算机最初诞生的时候,我们的计算机系统大部分为单体系统。单体系统的最大问题是只要因为各种原因出现单点故障,那么这个系统就会停止运行,直到程序员处理了问题为止。
为了解决这个问题,一个叫做 Lamport 的上帝发明了一种被称为 Paxos 的机制,让多个国王共同治理王国。
治理方式为:外界(用户)向身份为「提议人(Proposer)」的国王发出提案,例如提议调整税率。提议人国王将提案发送给其它的所有国王。其他的国王收到提案后,进行投票表决。多数一致的提案,则通过。因为所有国王都是可信的,所以臣民有疑问的时候,只要咨询任意状态正常的国王即可。
这样的话,即使有一个或几个国王食物中毒,其他的国王依然能按照机制维持王国的运转,王国解决了单体时代存在的问题,迈入了被称为「分布式系统时代」的新时代。
但是,一些新的问题浮现了——
黑暗国王问题:
国王之中出现了「黑暗国王」(可能是原有的国王被邪恶势力劫持)。黑暗国王会恶意伪造信息,例如,即使判断提案合理,依然投出否决票。
信使拦截问题:
国王之间通过信使传递信息。即使没有「黑暗国王」,也可能出现信使被截杀,从而伪造信息的情况。
因此,制度需要进一步升级,可以在存在「黑暗国王」与「信使拦截」问题的情况下,也确保整个国家正常运行。
专业术语版:
1990年,Lamport 发表了一篇论文,提出了 Paxos 共识协议(Paxos Protocols),可以确保在分布式系统在存在非拜占庭错误的情况下,只有有超半数的节点正常运作,那么这个系统就能正常运作。
**非拜占庭错误:**出现故障( Crash Failures,即不响应)但不会伪造信息的情况称为「非拜占庭错误」( non-byzantine fault)或「故障错误」( Crash Fault)。
拜占庭错误:伪造信息恶意响应的情况称为「拜占庭错误」( Byzantine Fault),对应节点为拜占庭节点。
王国在进一步发展,上帝 Castro 和 Liskov 在 Paxos 机制的基础上,提出了新的机制,这种机制被称为 PBFT。这种机制依然是基于投票表决,但是和上一个时代的机制有如下差异:
这种新的制度无疑是长足的进步,但是依然存在两方面的问题:
专业术语版:
1999年,Castro 和 Liskov 提出了 PBFT 实用拜占庭容错算法(Practical Byzantine Fault Tolerance Replication Algorithm),该算法可以容纳拜占庭错误和非拜占庭错误。在 PBFT 的假设中,恶意节点可能做出如下行为:
- 可能做出随机的或错误的答复或请求;
- 可能延迟或拒绝应答;
- 可能通过拒绝服务攻击正常节点,使之不能正常提供服务。
设总节点数为 N 个,在恶意节点 < (N-1)/3 的情况下,PBFT 系统可以确保正常运算,不出现节点无法达成一致的问题,
最终,王国到达了「区块链时代」。一个叫 Satoshi 的上帝引入了一种新的机制,这种机制叫做基于工作量的证明(PoW:Proof Of Work)。然后,Satoshi 给这个王国设立了一个具体的目标——记账。
任何外界人人都可以到这个王国来开设自己的账户,他们所拥有的钱,以及他们的每一笔转账记录,都会被记录到同一个大账本上。国王们只有一个使命:维护账本的唯一性且无前后矛盾。
需要注意的一点是,和传统的中心化的记账系统不同的是,国王无需关心用户的密码问题。通过被称为密码学的自然法则,国王可以在不知道用户密码的情况下,验证用户是不是花的自己的钱。
简单来说,他们是通过如下机制来达成他们的使命的:
所有收到交易的国王要做出一道算术题,才可以将交易打包进一个区块里。区块是这个大账本中的基本单元,多笔交易包含在一个区块里。
这个算术题有两个特点:
1)算术题的难度是动态调整的,调整根据是最近2016个区块的叠加速度,如果过去区块叠加速度快了,那么就把算术题难度调大;如果过去区块叠加速度慢了,就把算术题难度调小。任意国王根据自己本地的账本就能计算出来。正是这个动态调整机制,确保了记账速度平均是 10 分钟出一个区块。也就是你发一笔交易,平均来说10分钟左右,你的交易会被记录到大账本里。
2)交易的「身份证号」和上一个区块的「身份证号」是这个算术题中的变量之一,这样确保没有人能「抢跑」,提前把算术题算好。
**信息的「身份证号」:**通过一种被称为哈希的方法,任意信息都能生成一串固定长度的「身份证号」。一堆交易可以生成一个身份证号,一个区块也可以生成一个身份证号。每一块数据的身份证号都是独一无二的。如果别人同时给我们数据和身份证号,那么我们可以用数据算出身份证号,然后看下我们自己计算出的数据的身份证号和别人给的是否一样,从而判断数据是不是被篡改过。
做出算术题的国王,把新的区块放到上一个区块的上面,也即给大账本添加了一些包含在区块中的新的交易,同时把新的区块寄送给其它国王。
其它国王收到区块后,验证区块的正确性——验证区块里面的交易是不是正确、算术题的答案是不是正确等等。如果验证通过,那么其它国王也会把这个区块放在他们本地的上一个区块上面。这时,他们再做算术题,就要依据新的区块的「身份证号」了。
**区块链中的链式结构:**每一个区块中都包含了上一个区块的「身份证号」。
一方面,这种结构让我们可以从最后一个区块追溯到最开始的那个区块。
另一方面,这种结构也让过去的区块不能改动。因为一旦发生改动,这个区块的身份证号就变了,和已经保存在下一个区块里的这个块的身份证号就对不上了。
在整个过程里,所有国王坚持一个原则:**始终把区块数量最多的账本视为唯一账本。**这样,一方面确保了有一个被所有国王都认同的唯一账本;另一方面,即使偶然出现了出现了两个具有相同区块数量的账本,那么就让各个国王在自己收到的账本上,继续叠加区块,那么最终一定会有一个账本「脱颖而出」,成为包含区块数量最多的账本。
做出算术题的国王是有奖励的。这个奖励作为一笔特殊的交易写在这个国王打包的区块里。这个交易的内容用大白话就是:「系统奖励给打包这个区块的国王 α N元」。国王们在最开始的时候已经商量好了,这个 N 每四年减半,所以,这个系统里的钱的总量是固定的。
如果你是通过本文第一次接触区块链,那么上面的机制会有些复杂,可以先略过不看,仅领略这件事情达到的目标就行了,也就是——
「实现了一个所有国王共同维护的大账本,记录所有用户的交易记录,这个大账本可以确保全世界只有唯一的一份」。
在这个新的机制下,分布式系统 2.0 时代的问题被解决了。我们现在可以:
专业术语版:
中本聪(Satoshi Nakamoto)在 2008 年发布了题为《比特币:一种点对点式的电子现金系统》的论文,该论文中提出了一种和传统的 BFT 共识机制不同的思路,通过工作量证明(PoW),可以让系统在能容纳拜占庭错误与非拜占庭错误的前提下,将通信复杂度从 BFT系列共识算法 的
O(N^2)
降低到O(N)
,确保无论节点有多少,全网打包出块的速度是平均 10 分钟一个块。在该论文中,这种新的共识机制被用于一个被称之为「比特币」的分布式记账系统。记账系统中的货币被称之为比特币。同时,为了确保会有节点自愿加入系统,参与区块打包,该论文中还设计了货币发行机制兼出块奖励机制。
2009 年,比特币系统正式开始运行,这是历史上第一个区块链系统。
在上一个时代,区块链这个概念正式登上了历史舞台。
但是,第一个区块链系统——比特币的目的非常纯粹,就是记账。此外,它还存在一个问题:因为国王们都在争做计算题,所以对计算资源与电力都会造成大量消耗。
因此,上帝们又有了新的想法:
1)区块链这种链式结构很好,我们不仅能用它来记账嘛,我们还可以用来做些别的什么,例如在交易里带上指令,在让所有的国王同时运行一个程序?——这个想法被付诸实践,也就成为了现在被人们所熟知的智能合约技术。
2)我们能不能在PBFT(分布式系统 2.0 时代)这类机制的基础上做改进,或者用另一种方式来确认哪个国王能出块?——这个想法被付诸实践,也就成为了现在五花八门的共识机制,除了 PoW、BFT 以外,还有 PoS(基于权益的证明)、PoC(基于容量的证明)等等等等。
3)系统中一定要有代币作为奖励吗?如果没有代币,只是做一个相较于传统的「分布式系统」具有更高自由度、开放度的「超级分布式系统」(我们依然称之为区块链),可以吗?——这个想法被付诸实践,也就成为了现在我国新基建的重要组成部分——「联盟链」。
笔者认为,放到分布式系统发展的整个历程中去看,我们会发现区块链实际上是计算机技术发展的必然产物,从而真正地理解「区块链是什么」这个命题。
而「区块链是什么」这个命题,正是「为什么我们需要区块链」、「区块链究竟有哪些落地应用」、「为什么我国将区块链视为新基建的重要组成部分」等等关于区块链的命题的基础与原点,就像是直角坐标系中的(0, 0)。
理解了原点,便可以说,我们已经迈入了「区块链世界」的大门,这个世界里有许多新的机会、可能与想象空间。
欢迎来到区块链世界:)。
本文作者: 李大狗
简介: 李骜华(李大狗),上海对外经贸大学区块链技术与应用研究中心副主任,柏链教育CTO,首批FISCO BCOS(微众银行区块链框架)区块链认证讲师,Web3 dApp developer, 专注于区块链与函数式编程。
个人二维码: