在我们讨论区块链时,分类是不可避免的一件事情。想必大家都听说过「公有链、联盟链、私有链、许可链、无需许可链」这些词汇,虽然我们已经耳熟能详,然而这些名词并没有公认的定义。我们在讨论中只能各凭自己的理解,用这些名词指代大致上相同实际上有些区别的概念,由此造成了上面那样的沟通困难。本文将对这些名词,从最基本的纬度进行分析。
秘猿科技区块链小课堂第 5 期
维度 1:许可链 / 无需许可链
无需许可链(permissionless blockchain)
网络参与者可以自由的加入和退出,也即加入或退出网络的成本接近于零。在讨论中听到的“公链”、“公有链”或者“基础链”的时候,我一般会认为是在说无需许可链。
这一类型的区块链包括 Bitcoin/Litecoin/Peercoin/Monero/ZCash/Ethereum 等等。Bitcoin 是无需许可链的开山鼻祖,通过 PoW 巧妙的实现了世界上第一个无需许可的分布式系统,2015 年之前的区块链项目基本上属于这一类。Nervos CKB 是无需许可链,第一阶段使用 PoW 共识。
无需许可链的去中心化程度最高,其发展也高度依赖社区自治,是最有潜力成为全球基础设施的区块链类型。
许可链(permissioned blockchain)
网络参与者需要获得某种形式的许可才可以加入或退出,加入或退出网络的成本大于零。“许可链”在讨论中常常与“联盟链”混用,后面我们会看到这两者的区别。
许可链的思潮在 2014 年兴起,彼时金融机构已经发现了数字货币、智能合约和区块链这片新大陆,并开始思考如何将区块链技术引入自己的业务。对记名资产的登记和交易需求,以及金融业务中 KYC/AML 的需要,让人们开始认识到身份的必要性,以及由此带来的重构区块链的可能 1。身份的存在可以很自然的解决让无需许可链头疼的女巫攻击问题,因此也就可以避免 PoW 而使用传统 BFT 共识,可以获得更低的能耗和更好的性能。比较早期的公司如 Eris Industries(现改名 Monax)在 2014 年成立,是许可链的先驱。R3 也是在 2014 年成立,虽然 Corda 自称为分布式账本而不是许可链(也确实不仅仅是链,而是一个没有区块、由交易编织成的网络),但它很明显是许可链思潮下的产物。Hyperledger Fabric 和我们自己设计开发的 CITA 都是许可链。
许可链一般由行业联盟或是科技公司设计、实现和推动,具有接近中心化方案的性能,注重金融和企业场景。
细化
如果将网络参与者分为出块节点、全节点和用户(通过钱包访问全节点使用区块链提供的服务)[3],我们可以进一步细化无需许可链和许可链的分类。
我将看起来没有实用价值的组合标记为 Nonsense,不做讨论。
用户许可链
在用户许可链中,节点加入、退出、参与共识都不需要许可,但是用户需要获得许可才能使用区块链提供的服务。虽然目前还没有看到用户许可链的实例,但我认为用户许可链是一个非常有意思,值得探索的方向。如果把节点属于网络层,构成了区块链的基础;用户空间存在于节点共同维护的账本 / 共同知识库之中,是区块链架构中的上层。无需许可的基础层和需要许可的上层是一个很和谐的组合:基础层无需许可,无论什么样的节点都可以参与,网络性质中立,保持了无需许可链的全球基础设施属性;上层需要许可,用户具有某种形式的身份,更加适合需要身份的各类商业和金融场景
用户许可链需要解决的难题也不少:如何实现一个去中心化的身份认证服务?如何在基础层对这个身份协议提供支持?能够识别身份之后,基础层需要根据一定的规则,选择是否为用户提供服务。谁来制订这些规则?如何制订这样的规则?如何保持规则的中立性?
出块许可链
出块许可链只要求出块节点获得许可。由于全节点可以自由加入,区块链历史和当前状态都不会被出块节点垄断,全节点可以验证并决定是否接受新区块,整个系统依然是透明可验证的,其可靠性(原谅我使用一个模糊的“可靠性”来指代包含可用性、安全性等等在内各种性质,下同)比中心化系统高,比用户许可链 / 无需许可链低。如果获得许可的出块节点数量不大,系统性能也会非常不错。
值得指出的是,如果我们将“许可”的定义放宽,出块许可链将包含我们常称为“公有链”的一些项目 —— 基于代币抵押或是代币投票的 PoS,本质上是以代币作为一种许可,限制出块节点数量,达到降低共识过程的消息复杂度以提升系统性能的目标。这样一类 PoS 区块链所展现出来的性质,与出块许可链更接近,与无需许可链更遥远。出块许可链与完全许可链之间的主要区别在于全节点和用户是否需要许可,与无需许可链之间的主要区别在于出块节点集合大小是固定还是动态。
节点许可链
节点许可链的出块节点和全节点都需要许可,此时只有拥有许可的节点才能复制和验证区块链数据,用户无法获得账本 / 共同知识库的独立复本,也无法独立进行验证。这样的系统其可靠性弱于出块许可链,比中心化系统略高,性能与出块许可链接近。由于数据只会在小范围内复制,数据隐私性更好。
根据不同的部署,秘猿科技高性能区块链内核 CITA,既可以是出块许可链,也可以是节点许可链。
维度 2:公有链 / 联盟链 / 私有链
让我们换一个维度,按照区块链的服务对象来分:
公有链(public blockchain):为公众提供服务的区块链。
联盟链(consortium blockchain):存在一个区块链之外的实体联盟,只对联盟内成员提供服务的区块链。
私有链(private blockchain):存在一个区块链之外的实体,只对实体内成员提供服务的区块链。
「公有链」从 public blockchain 翻译而来,而 public 直译应为「公众、公共」。之所以会翻译成「公有链」,我想大概是由于早期的 public blockchain 都有内在的代币机制,使用者即代币持有者,因此也无不妥。但按照今天的眼光看,public blockchain 理解为「公共链」更为合适,「公共链」无差别的对所有公众提供服务,但公众不一定是「公共链」的所有者。我在讨论中还是沿用「公有链」这个词,但我用它指代的其实是「公众链」。
联盟链 / 私有链在具体实施上有不同的许可链选项:可以是节点许可链、出块许可链或者完全许可链,由此也会有相应的优缺点,在此不再重复。这些不同选项的共同之处是,出块节点都是需要许可的,共识范围有限,牺牲了可靠性换来了更好的性能和隐私。未来联盟链 / 私有链如果能够以无需许可链作为信任基础,其可靠性和信用也可以提高到与无需许可链接近的程度,实际上会成为无需许可链扩容的助力,这是 Nervos CKB 团队、Cryptape Research 在探索的方向。如果在跨链协议的帮助,联盟链 / 私有链之间可以低成本的进行互操作,联盟链 / 私有链上资产的流动性也将提高到与无需许可链上的资产流动性接近的程度,这是 Cryptape CITA 团队在探索的方向。
公有许可链(public permissioned blockchain)
考虑维度 1 和维度 2 之间的关系,很容易发现联盟链和私有链都隐含了对用户以及节点的身份限制,因此必然是许可链。有意思的问题是:公有链一定是无需许可链吗?
按照上文对公有链的定义,对公众提供服务并不隐含对用户身份的限制。公有链可以对匿名的公众提供服务,也可以不加选择的对有身份的公众提供服务。公有链中的节点是否需要许可,并不影响一条区块链是否对公众提供服务。因此在我的观念中,一条区块链可以同时是公有链和许可链,这两者之间没有矛盾。我把既是公有链又是许可链的区块链称为公有许可链 [4]。
我们日常谈到公有链时往往想的是无需许可链,但是实际上不少公有链更接近公有许可链的范畴,最典型的例子是 Ripple。公有许可链可能的实现形式很多,前面讨论过的许可链、出块许可链、节点许可链、用户许可链都可以是公有许可链。由于身份的存在,公有许可链既有许可链的优点,其适用的场景又与无需许可链互为补充,相信将在未来的加密经济生态中占有重要的位置。
Summary
联盟链、私有链、许可链常被批评的一点是缺乏内生的经济激励设计,因此“根本不是区块链”。这个观点我们并不赞同。一来经济激励设计和服务对象范围、是否需要许可之间并不存在什么矛盾,我们只是现在还没有看到有内在经济激励的样本;二来具有内生的经济激励是否是成为区块链的必要条件依然是一个值得探讨的问题。
最后回答文章开头的问题:未来将有许多种形态的区块链以及非区块链共存。它们将相互协作,相互促进,相互保障,共同编织一个高效可靠的数字经济网络。