---
title: 联盟链与 Hyperledger、Corda、FISCO BCOS
date: 2018-12-06
draft: false
summary: 把联盟链和许可链放进企业协作和基础设施演进的脉络里比较。
slug: consortium-blockchain-hyperledger-corda-fisco
tags:
- blockchain
- enterprise
- hyperledger
- corda
topics:
- blockchain
type: post
---
最近流行一个说法是币圈凉了，无币区块链代表未来。一直以来对区块链技术有几种看法：

1. 只有比特币，没有区块链。区块链只是为了实现比特币而采用的一种不得已而为之的技术，没有什么先进性，也没有通用性。除了比特币，全是山寨币，全是骗子，更遑论无币区块链。
2. 比特币是区块链技术的一个特殊案例，区块链技术可以用到更广阔的场景，骗人的都是发币的，搞无币区块链的不是骗子。
3. 上面两种人都是骗子，区块链都是骗子。

鉴于第三种看法前一段时间因为一篇文章广泛流传，个人作为一个区块链技术人员，觉得应该写点什么。一直想写一个系列，但年初的时候区块链鼓吹者甚多，作为一个技术人，完全插不上嘴。最近熊市，冷清了许多，决定写一写。前一次从账本技术演进的角度写了区块链技术的演进《[区块链的技术世界观](/blockchain-technology-overview/)》，这次说说无币区块链 — 联盟链。

<!--more-->

## 公链，联盟链，私链的划分

业界对区块链的划分一般从两个角度，一个角度按需要达成的共识范围，分为公链（public），联盟链（consortium），私链（private），另外一个角度是从账本生产者加入的方式，分为无许可链（permissionless），许可链（permissioned），私链（private）。

这里要谈的联盟链对应的就是 consortium 和 permissioned。

但 permissionless 和 permissioned 之间的界线实际上并没有那样清晰。比如关于 EOS 的争论。有人认为这样的超级节点数有限的链，就是一种超级节点之间的联盟链。permissionless 就必须是出块节点无限，纯粹的 Peer to Peer 网络，理论上任何一个节点加入后可单凭自己的意愿和力量就可成为出块节点。反对者则认为，EOS 没有准入限制，任何人都可以竞选超级节点，是否能竞选上就取决于用户投票，permissionless 关注的是可能性，调动物力资源（算力）和调动社区力量，都是需要成本的，本质上一样。这就引出了一个关键问题，如何理解 permissionless 和 permissioned ？谁来许可？

所以为了避免争议，我自己提出一种划分方式，可通过链是否可以『自举』，来进行划分。自举包括经济和治理两个方面。

* **经济** 链本身的运行成本分摊以及激励分配是如何进行的？是否在链上进行？
* **治理** 如果准入机制或者分配机制上需要协商，协商结果是否在链上可执行？

如果上面两个问题回答为是，则可认为这个链是一个自举的链。然后我们从这个角度来看看现在的联盟链。

## 先有联盟还是先有链？

我们假设一个联盟链的启动场景，有几个市场主体，决定要成立个联盟，启动一个链来共享数据。于是协商好各联盟成员在联盟中角色，投票权重，准入机制，承担的责任，利益分配等等，这些机制，要么落实为合同，要么再成立个合资公司，落实为公司股权以及章程。然后找一个联盟链的技术供应商，购买联盟链系统，启动联盟链。

而另外一种启动方式是，把联盟本身的成立，组织，准入，责任利益分配等治理机制都通过链来进行，将线下的合同，转换为链上的共识代码逻辑，它本身就变成了一种可『自举』的链，联盟本身是由链组织起来的，这和前面说的公链实际上没有了本质的区别了。

这也是当前联盟链当前两条路径的主要差异，一派认为应该先有联盟，链只是一个工具，提供方把自己定义成一种区块链软件系统提供方，关注当前现实的可行性以及合规性。另一派认为先有链，联盟是链上的产物，更像是链服务提供方，更关注未来的可能性。

当然，后面这套机制如果试图通过程序表达出来，并且达到最后的可执行效果，复杂度超过可能当前所有公链的治理机制，并且也一定程度依赖法律的变革，所以当前的联盟链服务商都采取了一种简化策略。

1. 去除掉公链内部的经济系统。公链的经济系统本身是为了激励和惩罚参与者而设计的，没有了经济系统，本质上是把利益分配机制转移到链下的传统方式。
2. 暂不引入链上的治理机制，通过提供配置参数以及可拔插的组装能力，以适应不同联盟的需求，简化复杂度。

去除了上面两个难点，很大程度上降低了链的实现复杂度，联盟链现在焦距的方向主要是链的吞吐，开发者的支持，业务场景的适配。

## 联盟链的应用场景在哪里？

区块链造出了币，造出了融资平台，造出了交易所，也该到造应用，将区块链应用到更多行业和场景里去的时候了。当前新的公链和联盟链其实都是这个趋势下的产物，主要都在探索应用场景。

谈论区块链的时候，很多人的第一个问题就是它到底能用在哪呢。这个问题其实可以拆解成两个问题，它未来有什么用，和它当前有什么用。很多质疑区块链的人混淆了这两个问题，你谈论未来的时候，他拿现状质疑，你谈论现状的时候，他拿未来嘲讽。

第一个问题其实就是，假设区块链的网络已经建立起来，网络效应发挥出来之后的可能性。谈论可能性的时候，容易放飞自己，听着就像忽悠，所以这里先从背景和趋势进行演绎。

区块链要解决问题的大背景是信息互联网在各行各业的进一步深化，也就是常说的互联网+，或者互联网进入 B 端，从以前连接消费者（C 端）转变到连接企业（B 端）或者连接组织（包括 G 端，政府）。

但C 端直接面向的是人，以信息展示为主，商业模式主要依赖吸引终端用户的注意力。而要连接 B 端，依赖的是企业间系统互通，以信息和价值互换为主。给人的信息展示对数据格式化以及标准化要求并不高，但如果是系统间的交互，则对数据格式，流程，协议有严格要求，如何让不同企业的内部系统遵循同样的数据，流程，协议，然后连接成一个网络，形成网络效应？

一个方向是沿用互联网模式，让 B 端都接入到一个互联网平台上，然后再通过平台内部连接。但如何吸引 B 端呢？一种尝试是通过 C 端的流量来吸引 B 端，比如电商以及外卖平台等都是这个思路。但这种连接比较浅，依然沿用的是互联网流量入口的模式，并没有实现 B to B 的连接。另外一种尝试是 SaaS 服务，将企业内部应用互联网化，如果服务普及到一定程度，就可能实现企业与企业之间的连接。但你可以设想全中国的人都用微信来聊天，但能构想一个在线企业服务，比如财务系统，全中国的企业都用吗？

还有一种方向是行业标准或者行业联盟提供的平台。比如金融领域的 FIX(Financial Information eXchange，金融信息交换协议) ，或者银联这样的组织提供的结算平台。但标准以及协议只能定义通信格式，很难定义业务逻辑，更难实现统一的数据处理逻辑，而银联这种行业联盟平台构建的成本太高，不可能适用到所有行业。

而区块链展示出的一个蓝图是，数据的校验，处理流程，乃至组织的治理都可以通过代码定义，各参与方遵循同一套规则，这套规则是活的运行中的代码，而不是死的文档中的规范，是一种更高级的行业协议联盟，是 Software Defined X 趋势在行业内的延续，比如 SDF(软件定义金融，Software Defined Finance)。

比如拿比特币来举例，把比特币网络理解成一个清算网络，各交易所是接入这个清算网络的企业。以前企业间需要数据互通，只能互相谈判对接接口，系统接口还必须保持兼容。而有了比特币这套网络后，只要遵循比特币规则接入到网络中，即可和全球其他任意企业进行价值互通，用户的比特币即可在不同交易所之间流动。

把上面的交易所，替换成任何一个 B 端系统。比如企业财务系统，企业间的对账直接通过网络进行，内部账单保存在本地，再配合政府的电子发票，基本就实现了记账对账审计一整套体系，政府审计查账那就太容易了，跑一个程序就搞定。这也是为什么政府支持区块链的原因。

单从行业来说，金融领域是最关注区块链的。如果说互联网给金融带来的压力只是入口之争，而区块链带来的压力则是根本性的。所以金融机构对区块链有一种矛盾的心态，一方面想积极拥抱，联盟链基本上都有金融背景，另外一方面又有排斥，毕竟定义货币，债券，股票以及数字资产是金融机构的生存之本。但区块链带给金融的不仅是挑战，更多的是契机，比如全球化。

再比如溯源防伪，供应链方面的场景。看到过很多批评溯源的文章，核心在纠结一点：真实世界到信息世界的映射的过程如何防作弊。如果纠结这点，基本上区块链就只能用于像比特币这样纯信息世界的场景，数字资产从诞生到流通，一直在数字世界。但实际上，人类的大多数资产以及信息，都不是直接在信息世界产生的，也无法直接在信息世界验证。正如我在一篇《公链的关键竞争点在哪里？》的文章中所述，溯源最后正真的价值并不只是用来防伪，只是当前这个阶段防伪只是一个容易体现价值的点。溯源最后实际上是在定义数字资产。每个商品，如果把它从生产运输销售中的所有环节的追踪到了，实际上就是定义了这个商品的数字标志，把它 Token 化了。这个过程会涉及整个产业链的每个环节，以及其中的金融机制，重构商业体系，肯定不仅仅是一个信息采集和共享的事情。

关于未来这里不进一步畅想，这方面有很多书籍文章，我们再谈谈下一个问题，现状。

## 联盟链的困境

区块链当前遇到的困境其实和互联网应用初期遇到的困难类似。区块链和互联网应用都有网络效应，它所绘制的蓝图需要在网络构建完成后才能体现出来，初期个体的采用并不能享受到网络带来的好处，那初期用户有什么动力来采用区块链呢？如果说公链还可以依赖自己的经济体系做早期激励，互联网应用可以利用各种营销手段，对 to B 的无币联盟链来说，这个问题尤其困难。B 端用户的决策周期长，采用成本高，尤其区块链的应用架构和传统应用差异巨大。

所以当前的联盟链创业者初期肯定是需要在路径上摸索和寻求突破，比如我这里可以列举几个可能的途径：

1. 以开发的便利性作为突破。区块链的智能合约模型，提供了一种更优雅的应用开发模式，平台完全接管应用的输入输出以及运行环境，开发者可以更专心于业务逻辑。这个和 Docker，Kubernetes，ServiceMesh，Serverless 的演进是一个体系的。也和朋友聊过通过更轻量的沙箱 VM 替代 Docker 的想法，有空再仔细写一下这方面的思路。
2. 以安全和容灾作为突破。区块链的架构完全符合异地多活的架构要求，并且可以做的更可靠优雅（可参看我的 《[区块链的技术世界观](/blockchain-technology-overview/)》中的相关段落分析）。
3. 以内部监管作为突破。可适用于很多复杂体系的企业，比如总公司和分公司使用不同的系统。
4. 以构建公信力作为突破。利用区块链的几个特性：1. 用户对自己数据的控制能力。2. 联盟成员互相制约。3. 数据的公示与监督。可以帮助创业者以更快的速度构建公信力，而在之前，基本上公信力只能靠时间来构建（比如保险行业，用户选择保险的时候很关注的一点就是保险公司持续的时间）。
5. 以跨系统的信息互通和结算作为突破。在区块链之前，跨系统的信息互通和结算基本靠远程调用，很难保证一致性，所以必须有独立的对账清算机制，而通过区块链的共识算法，可实现交易即清算，提高效率。这种方式相当于实现一种基于区块链的异步消息机制的远程方法调用，而不用侵入已有业务。

前三种，偏向于前面说的第一派联盟链的思路，企业先内部独立用起来，突然有一天发现可以用同一套系统和外部对接。后两种偏向于第二派思路，先构建出网络优势，再说服企业加入。如果你有其他的想法，也可以留言探讨。

## 看看现在的联盟链

这里为了照顾到非技术读者，所以本文不详述这几种联盟链的技术细节区别。只是从它们解决问题的思路方面进行分析。

**Hyperledger Fabric** 

Hyperledger 实际上把自己定位成模块化区块链平台，包括共识机制等都是可替换的。

在联盟链场景下，它简化了计算证明的要求，允许用户以任意语言开发应用，并部署到 Docker 中运行，被称为 chaincode，相当于托管到链上的应用。开发者不需要懂太多区块链知识，只需要知道它接管了应用的输入，并通过提供 SDK 的方式，接管了应用输出即可。甚至可以理解成一个微服务框架，不过拥有区块链的共识能力，很容易实现多节点数据同步。

**R3 Corda** 

Corda 的思路比较特别，它内部甚至不是一个区块的链式结构，只维护了交易的链式结构。它认为只需要交易双方达成共识即可，不需要维护全局账本，所以设计了一种公证人（notary）的机制，由公证人见证交易，只有必要的时候才启动共识协议。

它提供了一套 Flow 机制，方便定义需要多方参与的流转式交易。它的合约就是 Java 或者 Kotlin 代码，不过都是无状态的，只负责校验，不保存状态，同时还内置了许多金融合约的实现，应用打包后就是一个 farJar 包，叫做 CorDapp，可直接托管给平台，相当于一种平台插件。 

**金链盟 FISCO BCOS** 

FISCO BCOS（以下简称“BCOS”）是基于以太坊改造的联盟链。将以太坊的共识机制改造为 PBFT 或者 RAFT，并提供系统合约来实现节点管理，系统配置等能力。它的合约以及交易，主要继承自以太坊，不过废弃了以太坊的 Ether，所有资产都通过合约实现。

BCOS 提供了一种链下网络上互通消息的能力，节点之间可以先通过消息来通信，实现一些协议，只有必要时再上链。它对以太坊的改进点主要关注在性能和安全层面。性能层面比如对 Global Trie 的改造，通过多链并行解决热点账号问题等。安全层面的改进主要是增强密码方面的支持以及脱敏隔离，因为以太坊是一个全局账本，不支持局部共识机制，必须通过其他手段来保护数据。

可以看出，当前的联盟链的关注点还主要在性能，开发支持，应用场景。业界也对联盟链如何和公链的融合以及实现『自举』有探讨，比如前一段时间讨论的公众联盟链（参看文末链接），不过技术层面的融合机制还在探索阶段。联盟链可以利用公链的安全来进行数据公正以及裁决，实现联盟链本身的自证清白，以达到更高的公信力，最终实现更好的融合，这个其实就是区块链 layer2 的方案了。我们留到下一篇文章中分析。

## 一些应用案例

一直也在琢磨区块链的案例。正好前一段时间金链盟举行了一个大赛，看到一些参赛案例。具体的代码和实现没看到，所以只是从脑洞和当前落地的可行性方向分析下。

**政务类** 相当于 to G 的场景。这个领域实际上可做的事情非常多，比如最简单的信息公开。当前大多数政府信息公开还是原始的网页或者办公文档，并没有格式化的信息，第三方很难再次加工利用。如果通过区块链方式开放格式化的标准信息，则更有价值。比如大赛中出现的不动产登记、智慧城市服务、信用共享等应用场景的案例。这个领域的实施难度不在技术，关键在如何驱动。就比如，最简单的，工商登记部门提供一套证书机制，企业注册时生成数字证书，证书效力和公章一样，这样所有的数字合同场景都可以用得上，这个甚至都不需要用区块链就能实现。

**司法类** 比如做存证固证平台的，如果做好了，完全可以简化从公安，到检察院，再到法院的整个办案的证据提交和转移流程。实际上是政府部门间协作的流程的标准化以及软件化。

**教育类** 比如学历链上登记等。本质上其实就是把学历证明数字化。当然这个没区块链也能实现，但如何让所有的学校都加入到这个系统形成网络呢？还是回归到了前面的问题。另外有一个项目挺有意思，图书漂流系统。相当于把图书 Token 化，把图书馆变成了流动的。以前是图书必须先还给图书馆，别人才能借，而现在读者间即可互相转借，Token 的转移代表图书的转移。如果配合押金以及惩罚机制，这个可以完全做成一种开放式的公益图书平台。

其他的金融以及供应链类的案例，就更多了。这方面社区里也谈论的比较多，这里就不细说了。

## 开放式问题

联盟链当前还有一些开放式问题，暂时没有答案，等待探索。

联盟链上应用和链的关系应该如何划分？是链直接托管应用，还是应用在链外？那具体哪一部分应该在链外呢？是否可提供整体方案？

联盟应该横向连接还是纵向连接？横向是行业内联盟，纵向是产业链联盟，关注点不一样，解决方案也不一样。异或有统一的方案？

联盟链如何连接最终用户？最终用户在联盟链处于什么角色？对自己的数据有控制权吗？当前的联盟链方案多关注联盟成员之间的数据互通，实际上只有将最终用户也纳入进来，才能形成完整的生态。

## 总结

本文试图通过联盟链来分析区块链的应用场景。我个人支持任何类型的区块链落地探索，无论是私链，联盟链还是公链。无币联盟链相当于改革派，期望在当前的金融框架内进行技术改革。而有币公链相当于革命派，试图重造一套金融体系。但实际上二者是互相依存的，如果没有公链的压力，改革也很难推动，而如果没有联盟链的改革，未来也很难实现区块链网络的融合以及价值的互通。

## 相关链接

1. [区块链的技术世界观](/blockchain-technology-overview/)
2. [马智涛：公众联盟链很可能是打开分布式商业模式大门的钥匙](https://baijiahao.baidu.com/s?id=1611323109728919834)
3. [Hyperledger 核心开发者陈昌谈联盟链和公有链混合架构如何实现？](https://mp.weixin.qq.com/s/ivawwP6pWYzTEXIDRgFQFg)
