区块链本质论
区块链被大家关注事件好事情,但非常不希望看到各种区块链项目盲目上马,造成各种社会资源的浪费。区块链技术本身尚在发展阶段,还有很多核心技术问题有待突破,对区块链技术本质还充斥着各种不同的理解。我们将就区块链的计算本质,技术难点,业务调整,社会影响等方面和大家分享。
(1) 计算范式
区块链的本质是 使冯诺依曼计算体系不再依赖特定的计算物理设施,从而使得其计算过程和相关的存储和通讯,不再为单方控制,而由各个参与者多方分时控制。这是一种全新的计算范式,区块链计算范式,所谓的不可篡改数据库,仅仅是这个内涵的一部分外延。共识算法,分布式网络是当前实现这一计算范式的重要技术手段。这些是区块链的技术本质。
这是什么意思呢?之前所有信息系统,比如支付,搜索,推荐什么的,都是单一的一家企业掌握这个计算过程的全部,数据也好,计算代码也好,计算的输入/输出都被一个单一企业完全控制。如果这个计算是为了大规模的公众服务的,那么这个企业可以通过任意操纵这个计算过程,任意修改数据和状态,限定和歧视来自外部的输入,从而谋求高额利润甚至造成严重的社会问题 (这类问题在搜索领域已经凸显)。同时企业也需要承担巨大的责任保护好这个信息系统的数据和计算过程,否则就会导致严重的大规模数据泄露问题(例如时常听到的拖库事件,导致几百万用户的个人数据被盗取,甚至如开房记录等)。
区块链计算范式,由多方来分时控制计算过程,而不是单一方
在区块链计算范式中,将是多家企业和机构,共同控制这个计算过程,这一步计算在一家公司的计算机上完成,下一步计算在另一家机构的计算机上完成。各家接力计算过程,任何一家机构,如果篡改计算逻辑,或者恶意修改数据,立刻会被下一个计算接力的公司发现,并且回滚到上一步正确的计算步骤。这个一旦预设好计算逻辑和规则,没有任何一家公司可以篡改,也没有任何一家公司可以操纵这个计算过程。
这样做的一个核心优势是,在区块链计算范式中,当然像google那样所谓的不做恶,将不再是个口号,而是一个可以被证明被验证的。也就是说区块链计算范式的根本优势在于:
在业务全部信息可形式化的范畴内,让这个计算系统可以自证清白。
这件事情是之前互联网技术栈无法实现的,也是未来区块链计算范式给实际业务带来的根本上的全新技术支撑。正因为这个技术支撑,比特币得以实现,没有任何人可以操纵比特币系统既定的发行规则和转账规则,虽然这个网络允许任何人以匿名方式参与其接力计算过程,即出块。我们通常说的不可篡改数据库也源于这个技术支撑,我们一开始约定了数据不可篡改,只可追加,在区块链的计算范式下,这个约定就能被严格执行,不会被人为操纵。这里真正的挑战并不是设立不可篡改这个规则,而是如何让这个规则被严格执行,这一点是区块链的核心能力。
(2) 共识机制
提到区块链,Consensus 是其中最为大家关注的一个新概念,被翻译成共识机制,或共识算法,或共识协议。这个东西到底是干嘛的呢?共识机制本质是一个解决方案,当一个分布式系统里面出现不一致的情况时,我们如何最终裁定一个唯一的大家公认的结果,消解这个不一致性。注意了,这里共识仅仅指分布式系统里面的一个算法方案,和我们通常意义上的舆论呀,社会认同呀,组织关系呀什么的,毫无关系,就像是雷锋和雷锋塔一样。别被忽悠了 ...
为什么区块链会需要共识机制呢,究其根本,源自于区块链的计算本质。
因为在区块链系统中,计算是通过全网各方接力完成的,在去中心化的区块链网络中,并没有一个总指挥来分派这个接力过程,那么即使没有恶意攻击,也难免会发生己方争抢接力的情况,从而导致整个系统中出现多个不一致的接力结果。而共识机制所起得作用,就是在这个时候最终认定,哪个结果该留下来,后面按这个接着走;哪个结果会被抛弃。
对于这个问题,很早在分布式系统领域,为了解决容错问题,早有答案,并被归纳为一个叫做拜占庭将军问题 (The Byzantine Generals Problem),其对应的有效解决方案成为拜占庭容错(Byzantine Fault Tolerance),就是经常听到的BFT。早在2007年,这个问题就有了高效的算法 (PBFT),但是为什么2008年末,中本聪发表的比特币系统设计方案中却采用了完全不同的设计,而没有采用BFT类的算法呢?
我们先看看容错是什么?假设有100个传感器,在观测比如机器是否正常运转。那么如果有一部分的传感器坏了,给出了不正确的观测值,我们该如何最终推断正确的观测结果呢?这个就是容错。当然,逻辑上的解法正如你现在直接想到的,少数服从多数,事实上也确实如此简单。当然实际的算法中要互相传递和迭代最终认定的结果(基于数字签名),要限制结果认定的时间期限(所谓的epoch),要处理多数不够多的情况等。
从上面的例子可以看到,在BFT中,少数服从多数的这个数,来自于多少个共识的参与者。这个参与者的总是必须是预先设定好的。这意味着谁是参与者,得有个预先协商和设定的过程,在区块链系统中,有个叫法,叫做联盟链或者许可链(permissioning blockchain system)。这就是为什么叫做拜占庭将军问题,因为你得先是一个将军,那么问题来了,谁来批准你成为一个将军呢?
这就是比特币系统一开始不采用BFT算法的本质原因。在比特币系统中,并没有一个参与者的批准过程,任何人都可以直接参与这个共识过程,即所谓的公链或者叫无需许可链(permissionless blockchain system)。这是,我们如何利用少数服从多数呢?我们连总共有多少个参与者都不知道。这个部分就是比特币系统设计最耀眼的部分。很多人不明白这件事情,就觉得比特币系统好像就是一堆现有技术的堆砌,没什么技术含量。
在比特币系统中,少数服从多数的这个数,不再是多少个共识的参与者,而是一次次的哈希部分碰撞的计算结果。然后结合最长链规则来形成共识,即所谓的工作量证明(Proof-of-Work)。从这里大家可以看到,工作量证明方案解了一个比拜占庭将军问题更难更挑战的问题,就是在参与者集合未知的情况下,实现共识的一致性。 当然算法具体实现还有不少细节,工作量证明的难度调整呀,一致性后置的最长链原则,以及后面被改进的最重子树的原则等。
接着有了所谓的资产证明(Proof-of-Stake)共识系统,利用资产的数量来定义这个少数服从多数的这个数。利用资产的数量先行定义BFT共识算法中所需要的这个预设的参与者集合。这样,也可以实现无需许可链。也是一个不错的办法,只是,一开始初始的资产从何而来呢?
最后提一句性能,也就是吞吐量的事儿。很长一段时间大家以为吞吐量由共识算法决定,然后事实上并不是这样。上面提到的集中共识算法,都可以设定任意的块大小和出块间隔,来现实需要的吞吐量和块确认延迟。只要,整个底层网络有足够的带宽。