区块链和区块链应用的典型架构
有了上述对区块链的“盲人摸象”式解构理解,我们来看看区块链实际上是什么样的,以及区块链应用究竟是什么。
和任何其他计算机科学一样,区块链技术和应用的成长也是一个“螺旋曲折上升”的过程,这个过程中难免会出现认知偏差,甚至是普遍性的误区。针对信息科技有一种普遍的说法,“我们对其价值总是在短期内高估,却在长期里低估”,区块链同样如此。
专用功能的区块链
典型代表:比特币、各种比特币分叉币
世界上第一个区块链是在比特币中实现的,比特币设计的最初目标是在网上实现一个“点对点的电子现金”,因此不需要中间人是其基础。
在比特币出现之前,类似希望在网上个人之间收发现金的需求已经出现很久。例如,PayPal(贝宝)通过电子邮件的方式发送现金,但实际上它要基于PayPal本身作为中间人;银行内部及银行之间的转账等都依赖银行作为中间人。采用P2P和加密技术来发送现金一直是极客、黑客和计算机科学家多年来尝试的方式。但在比特币出现之前,还没有人能够解决其中最关键的“双重花费问题”,即同一笔钱被花费两遍——想一想同一份信息在互联网中复制传播是多么容易,且很难阻止。
比特币的设计可以被认为是一个单一系统精巧设计的典型。从结构角度而言,比特币是一个简单的区块链技术,也是一套基于区块链技术之上的、很简单的数字货币协议,同时也实现了一个名为比特币的应用,可以被认为是一个“多合一”的一体化系统。比特币的设计没有提供外部扩展和可编程能力,虽然比特币支持一种非常简单的脚本,但是并不具备完整的编程能力和扩展性,比特币本身也没有对外的编程API支持。总而言之,比特币系统的设计就是为了实现比特币本身,没有其他目的。在比特币发展过程中,一度有一些如“染色币”这样的技术,试图在比特币的数据结构里的“空闲”区域加载结构化的数据,从而使比特币具备表达其他数字资产的能力,但显然比特币社区排斥这种改造,并在后续比特币软件的升级中限制了这种做法。
区块链分叉
区块链分叉主要是指一条区块链分开成两条区块链。分叉可分为意外分叉和有意分叉。当两个或以上的矿工在几乎相同的时间成功挖到区块时,便会出现意外分叉。有意分叉则是对原区块链做出修改,可再分为硬分叉和软分叉。
硬分叉之中新分叉所产生之区块将被旧软件视为无效。因此,所有参与者,包括交易服务器以及矿工(节点)都必须更新软件,才能继续运行新分叉。如有节点继续使用旧软件,而其他节点使用新软件,便有可能分裂成两只货币。
与硬分叉相比,软分叉所产生之区块能够被旧软件识别为有效区块,即区块向下兼容。然而,旧软件所产生之区块未必在新规则下有效。
功能可扩展的区块链
典型代表:以太坊、R3 Corda,以及同期其他公链和联盟链
以以太坊为代表的公链最大的特点是可编程和可扩展。由于比特币是一个专用功能的区块链,在以太坊出现之前,扩展比特币功能的唯一办法就是复制其开源代码进行扩展,这就是所谓的“分叉币”。基于比特币出现过数百个知名或不知名的分叉币,大部分已经消失了,少数仍然存在,甚至一度和比特币竞争。分叉开源的代码虽然容易,但运行维护起来很困难,尤其比特币基于工作量证明的设计需要相当的算力支持才能维持区块链的安全运行,各个分叉币分散了本可集中的算力,使得这些分叉币都很难成气候。
算力
算力也称哈希率,是比特币网络处理能力的度量单位,即计算机计算哈希函数输出的速度。比特币网络必须为了安全目的而进行密集的数学和加密相关操作。例如,当网络达到10TH/s的哈希率时,意味着它可以每秒进行10万亿次计算。
在通过挖矿得到比特币的过程中,需要找到其相应的解m,而对于任何一个64位的哈希值,要找到其解m,都没有固定算法,只能靠计算机随机的哈希碰撞,而一个挖矿机每秒钟能做多少次哈希碰撞,就是其算力的代表,单位写成hash/s。
以太坊的出现很大程度上解决了这一难题,通过智能合约这种代码形式,相当于在以太坊上能够创建各种各样的新功能。这样一来,以太坊的功能在理论上可以无限扩展,开发者不需要分叉以太坊,就能直接部署自己的智能合约,来给以太坊扩展自己所需要的功能,而且开发者不需要建立新的区块链网络,甚至不需要建立自己的节点,这大大提高了区块链开发的效率。
即使在联盟链或私链的环境下,这种功能扩展能力也非常有价值。例如,用户打算运行一个私链版本的比特币系统来支持自己的区块链应用,鉴于比特币是功能特定的,如果应用业务和比特币是相类似的,那么可能还比较容易,如果应用业务与比特币差别较大,可能就会令用户一筹莫展。采用以太坊这样的可扩展区块链,即便是部署私链或联盟链的版本,也可以通过部署智能合约来扩展业务所需功能。以太坊最初是作为公链诞生的,但不久“企业以太坊联盟”(EEA)随之诞生,其成员包括以英国石油、摩根大通、微软为首的能源、金融和IT界的全球性企业,致力于将以太坊开发成企业级区块链平台。摩根大通更是在以太坊开源代码基础上开发了自己的区块链技术Quorum,成为其稳定币JPM Coin的技术基础。
以太坊的成功引来大量效仿者,目前市场上大部分公链和联盟链都属于这种功能可扩展型区块链架构。
模块化的区块链架构
典型代表:Hyperledger Fabric、ArcBlock、Libra等
以太坊等可扩展区块链虽然支持扩展,但其本身是一体化的设计和实现。这对公链类型的设计而言可能无可厚非,但对于企业联盟链和私链,或者想在原有基础上做更大功能扩展的新公链而言,一体化设计就会出现问题:无论你的应用实际需要多少功能,你都必须部署完整的区块链软件,哪怕实际上你只需要用其中一小部分。如果你想替换一部分功能,例如你想使用以太坊的软件,但并不想采用工作量证明的共识算法,那么没有简单的办法能做到。这也是为什么会出现多种以太坊的企业版本分叉,而一旦有了版本分叉,在维护上就会碰到新的问题。
Hyperledger Fabric可能是第一个在市场上宣传采用模块化设计的区块链。其官方介绍称,“Hyperledger Fabric由模块化架构支撑,被设计成支持不同的模块组件直接拔插启用,并能适应在经济生态系统中错综复杂的各种场景”。Hyperledger Fabric提供了多个可拔插选项,账本数据可被存储为多种格式,共识机制可被接入或者断开,同时支持多种不同的成员管理机制。
作为更进一步采用模块化设计和简化开发者使用的区块链,ArcBlock的区块链框架则设计实现“一键发链”的模式,通过提供一系列的工具,让开发者通过友好的界面就可以立刻定制符合其需要的区块链。最新的Cosmos SDK和Polkadot的Substrate框架都采用了类似的设计。脸书推出的Libra区块链项目也采用了模块化设计的思路,使得社区可以更容易加入扩展。这种把区块链模块化的架构,正成为区块链最先进一代的设计和实现趋势。