原创 Sean THU学生区块链
观看完整视频
【《区块链系列课程》1.6 联盟链简介-哔哩哔哩】https://b23.tv/4ScEZlh
本系列课程是清华大学学生区块链协会THUBA推出,由PlatON赞助的区块链课程,涵盖了从区块链基础学习到深度原理研究等方面。
区块链根据开放权限可以分为三类,公有链、联盟链和私有链。
对所有人开放的链就是公有链,比如比特币和以太坊,全球的所有人都可以去注册一个账户然后去交易。
对特定团体开放的链就是联盟链,是增加了准入机制的,只有一些特定身份的用户才能使用,这里面就包括我们今天要介绍的Fabric, BCOS和长安链。
对个人或者公司内部自己使用的链就是私有链,也是添加了准入机制的,只有特定的用户可以访问,通常可以用来对区块链产品进行测试等,包括以太坊、长安链等,只需要一个节点就可以运行起来,也就牺牲了共识,因为私有链的目的本身不包括去中心化。
联盟链和私有链都属于是许可链,许可链的诞生是因为公有链有一定的应用局限性。
#01 公有链的应用局限性
首先对于公有链,需要有矿工来把交易广播到整个网络中,每个区块链节点都要参与这个广播的过程,需要把一个区块同步到所有的节点上,这样就造成了大量的网络资源占用,容易导致网络拥堵。
公有链可以抽象成一台世界计算机,所有的智能合约都可以看成是在这个计算机上运行的,这样一来运行智能合约就占用了组成“世界计算机”的节点的大量算力。这也导致公有链上的智能合约需要受到限制,功能性和复杂性上都有局限。
出于安全性考虑,目前公有链上智能合约语言还不能完全支持现有多种编程语言。现在公有链生态中智能合约编程语言以Solidity为主,其他的各种智能合约语言Mutan、Serpent、Motoko等还处于比较小众的阶段。
公有链上部署的智能合约需要完全开源代码,并且部署之后无法修改。尽管现在有一些升级的机制,但是攻击者仍然可以通过攻击存在漏洞的智能合约获取大量财富。因此,公有链上智能合约的开发需要有专门的开发者,并且需要严格的审核来避免安全漏洞。
公有链最关键的问题是很多场景下并不需要一个完全公开的账本,不需要完全的去中心化,对于金融机构和实际落地的业务来说,纯粹的去中心化可能意味着风险和低效率,因此需要有一个联盟管理委员会来管理。
公有链的用户自由加入且权限对等,难以实现准入、分层管理。公有链上数据完全共享且公开,难以实现业务隔离和按需披露,这也就造成了追责难,数据下链难。
很多场景下需要的只是在几个身份已知的机构之间,进行数据的共享,通过区块链的方式来增强信任,本来就不想公开给其他人,这种场景下公有链无法满足需求。
公有链的局限性总结起来就是网络拥堵、计算资源抢占、编程语言小众、智能合约暴露风险、缺少访问控制、缺少隐私保护、难以监管。
#02 典型联盟链简介
首先介绍一下联盟链的基本模型。联盟链主要解决的是有一定信任基础的成员之间进行账本共享的问题。
在以前的业务网络中,成员彼此交易,但他们分别维护各自的交易记录。他们所交易的东西必须在每次出售时确定其来源,以确保出售物品的企业拥有的所有权。
因为没有管理网络参与者身份的统一系统,因而溯源非常费力,需要数天才能清理证券交易(其世界交易量以数万亿美元计算),合同必须手动签署和执行,而且系统中的每个数据库的信息都是孤立的,这也意味着单点故障。
对于联盟链网络,其中每个参与者都有自己的账本副本。除了共享账本信息之外,还共享更新账本的过程。与今天使用参与者的私人程序更新其私人账本的系统不同,联盟链系统具有共享程序来更新共享账本。这个共享的账本只有业务的参与方才可以加入,由一个类似委员会的组织来管理。
由于参与的多方存在一定的信任基础,共识机制也就不需要工作量证明。此外由于参与方能直接从联盟链支撑的业务中获取收益,也不必依靠某种代币激励才能运转。
接下来我们简单介绍一下几个典型的联盟链平台。
Fabric是最早加入到Hyperledger的顶级项目,由IBM、DAH等企业于2015年底联合贡献到社区,是首个面向联盟链场景的开源项目。
Fabric也是第一个支持通用编程语言编写智能合约(如 Java、Go 和 Node.js)的分布式账本平台。Fabric具有高度模块化和可配置的架构,应用场景覆盖银行、金融、保险、医疗保健、人力资源、供应链、数字音乐分发等领域。
FISCO BCOS是由国内企业主导研发、对外开源、安全可控的企业级金融联盟链底层平台,由金链盟开源工作组协作打造,并于2017年正式对外开源。
社区以开源链接多方,截止2020年5月,汇聚了超1000家企业及机构、逾万名社区成员参与共建共治,发展成为最大最活跃的国产开源联盟链生态圈,应用场景覆盖文化版权、司法服务、政务服务、物联网、金融、智慧社区等领域。
长安链(ChainMaker)是由北京微芯研究院、清华大学、北京航空航天大学、腾讯和百度等知名高校、企业共同研发的作为区块链开源底层软件平台,包含区块链核心框架、丰富的组件库和工具集。
长安链致力于为用户高效、精准地解决差异化区块链实现需求,构建高性能、高可信、高安全的新型数字基础设施,同时也是国内首个自主可控区块链软硬件技术体系。
长安链的应用场景已涵盖供应链金融、碳交易、食品追溯等一系列领域。
Quorum是由摩根大通开发的提供高速、高吞吐量交易的联盟链平台,以解决区块链在金融等领域遇到的挑战。是企业以太坊联盟EEA提出的标准区块链设计的代表。
EEA由芝加哥交易所、因特尔、ING、摩根大通和微软等三十几家成员组成,主要提出基于以太坊的标准区块链设计,根据具体的需要定制,而不提供实际的代码。
Quorum符合EEA的技术规范,主要提供金融领域的区块链解决方案。
Corda是由R3推出的分布式账本技术,希望提供一个具有唯一性、权威性、可以记录企业间所有协议的全局逻辑账本,核心是实现具有节点间最小信任机制的无中心数据库。
R3是一个由银行为主的组织,成员包括富国银行、美国银行、花旗银行、德意志银行、加拿大皇家银行以及我国的招行、平安银行等。
Corda本身并不是区块链,但是其设计思想源自区块链,并且参与了Hyperledger Fabric的建设。目前Corda项目已经停止维护。
#03 典型联盟链技术对比
//系统架构
Fabric的系统架构,在其中包括了Membership Services成员服务,以此来控制访问权限。这里面的区块链层和公链是比较相似的,区别主要在共识机制。相比以太坊,Fabric上的应用程序称为”链码”,运行在docker容器中。
BCOS的系统架构,划分成基础层、核心层、管理层和接口层:
• 基础层:提供区块链的基础数据结构和算法库
• 核心层: 实现了区块链的核心逻辑,核心层分为两大部分:
• 链核心层: 实现区块链的链式数据结构、交易执行引擎和存储驱动
• 互联核心层: 实现区块链的基础P2P网络通信、共识机制和区块同步机制
• 管理层: 实现区块链的管理功能,包括参数配置、账本管理和AMOP
• 接口层: 面向区块链用户,提供多种协议的RPC接口、SDK和交互式控制台
长安链高度模块化,权限控制在安全管理模块中实现,链的各个部分比如共识算法、数据存储、合约引擎等都可以定制。优化用户体验,还增加了运营管理。
自下而上,长安链由以下层级构成:
• 基础设施层:公有云、私有云,包括虚拟机、物理机等,为长安链提供基础运行环境。
• 存储资源层:为长安链节点提供数据存储服务。
• 基础组件层:为长安链节点提供密码学、配置、日志、常用数据结构等通用技术组件。
• 核心模块层:长安链共识算法、核心引擎、虚拟机等核心模块,核心模块均采用可插拔设计,为可装配区块链奠定基础。
• 接入层:多语言链SDK,方便应用开发者与链交互。
• 前端应用层:包括区块链管理平台、区块链浏览器、合约开发IDE等,方便用户直接访问区块链底层平台。
这三个联盟链都提供了模块化设计,而且实际上模块化程度是越来越深,越来越支持细粒度的定制化。都提供了通用合约语言,都支持图灵完备的合约。都提供了开发工具集,包括API,SDK和CLI,也是方便开发人员来定制。都包含了自己的消息机制,区块的同步、P2P网络等等。长安链额外还提供了运营管理模块,原生支持了对区块链状态的可视化。
//网络架构
Fabric的网络架构主要包括对等节点Peer,排序节点Orderer以及客户端,可以看到成员服务授权给客户端,然后客户端才可以与Peer建立连接,然后向Peer请求交易,由Peer执行交易并背书,再由Orderer来对交易排序,最终广播到整个网络中。
节点属于不同的组织,每个组织都维护若干Peer节点,参与到整个网络中。
BCOS分层的网络模型。每个机构内的节点都维护一份账本。通过群组机制可以形成多链。
每个机构有自己的Gateway也就是网关,与其他机构互联形成第一级分布式协作的网络
机构的节点部署在机构内网隔离区,与本机构的Gateway互联,通常这是走机构内部网络部署。
联盟链层面的准入分为两层,一个是机构的加入,这个需要通过颁发证书给到机构,机构之间会验证证书以及身份。从网络层面看,Gateway就是机构的代表,Gateway之间通过证书相互认证。
另一个准入是机构内的节点加入区块链网络(如上图的逻辑网络),这一层的加入通过链上治理的机制来完成。例如某个机构想要增加节点到这个区块链共识网络,则该机构只需在自己机构内网隔离区部署好节点,生成节点的ID,然后通过Gateway向区块链网络提交入网申请,链上已有机构参与方进行投票,投票通过则自动完成节点的入网。
一级网络面向机构间,是联盟链级别,二级网络面向机构内,是机构级别。逻辑网络负责区块链共识,通过一级和二级网络进行数据传递,是实际区块链运行的网络。逻辑网络采用BFT类共识机制,保证区块链记账的特性。二级网络采用CFT类共识,保证分布式一致性特性。
长安链的网络支持了多种机制
• 大规模节点组网;
• 动态节点和连接管理;
• 专有网络穿透连接;
• 多链网络隔离。
不同的节点也分属不同的组织,节点之间的逻辑网络借助的是白名单,由白名单来精确控制路由表,以此来形成网络。
这三种联盟链有各自的机制管理节点和形成逻辑网络,长安链在此基础上添加了NAT穿透和代理节点转发,支持更复杂的网络模型。
//节点工作方式
Fabric中的节点分工,背书节点同时也可以作为记账节点,都是Peer节点,智能合约部署是将合约接口部署在Peer节点上。
共包含两种节点:
• 对等节点:完成背书和记账工作,同时可以部署智能合约。
• 排序节点:将交易排序打包成区块,向网络中广播区块,不可以部署合约。
BCOS的节点分为群组节点和游离节点。
• 群组节点:完成网络准入并加入群组的节点。群组节点只能是共识节点和观察节点两者之一。其中共识节点参与共识出块和交易/区块同步,观察节点只参与区块同步。群组节点准入过程涉及动态增删节点的交易发送。
• 游离节点:完成网络准入但没有加入群组的节点。游离节点尚未通过群组准入,不参与共识和同步。
联盟链和私有链都属于是许可链,许可链的诞生是因为公有链有一定的应用局限性。
长安链的节点类型:
• 共识节点:参与区块链网络中共识投票、交易执行、区块验证和记账的节点。
• 同步节点(或称见证节点):参与区块和交易同步、区块验证,交易执行,并记录完整账本数据,但不参与共识投票。
• 轻节点:参与同步和校验区块头信息、验证交易存在性的节点。
轻节点可以快速验证交易是否存在,减小开销。
//交易的核心流程
Fabric的交易执行流程。先由客户端发起交易申请,会有Peer节点来模拟执行,然后把执行结果背书并返回客户端,客户端发送给排序节点打包,排序节点再把所有的交易打包并广播到网络中,背书节点也需要在这一阶段把区块上链。
BCOS的交易执行流程:
1. 用户通过操作SDK或直接编写curl命令向所连接的节点发起交易。
2. 节点收到交易后,若当前交易池未满则将交易附加至交易池中并向自己所连的节点广播该交易;否则丢弃交易并输出告警。
3. 打包器会不断从交易池中取出交易,并立即将收集到的交易打包为区块并发送至共识引擎。
4. 共识引擎调用区块验证器对区块进行验证并在网络中进行共识,区块验证器调用执行引擎执行区块中的每笔交易。当区块验证无误且网络中节点达成一致后,共识引擎将区块发送至区块链。
5. 区块链收到区块,对区块信息(如块高等)进行检查,并将区块数据与表数据写入底层存储中,完成区块上链。
长安链的交易核心流程:
1. 提议候选区块。区块提议节点从交易池选取一批交易,并行调度执行得到结果,生成DAG,并将区块和DAG广播。
2. 共识候选区块。基于链上的共识机制,对候选区块进行共识投票。
3. 验证候选区块。在共识过程中,网络中其他节点针对提议的候选区块进行正确性验证,把交易验证结果传递给共识候选区块
4. 执行候选区块。将完成共识投票的区块提交记录至账本,并从交易缓存中移除。
//其他机制对比
共识算法对比
业务隔离机制对比
智能合约引擎和开发语言对比
Fabric支持了Java Node.js和Go,BCOS支持Solidity和C++,长安链支持了Solidity, C++, Rust和Go。对高级语言的支持使得联盟链上的应用开发和定制更加高效。
智能合约引擎在Fabric中是docker, BCOS中是类EVM的执行器和支持预编译的合约,solidity合约在执行器中执行,预编译的合约直接在底层执行。
长安链的智能合约引擎更加多样化,支持EVM,和WASM字节码的执行,Docker的合约引擎正在开发中。
生态对比
在生态方面,Fabric目前的生态建设是最成熟的,有成熟的社区和相关活动。BCOS从金融领域入手,主要受众是国内用户。长安链诞生时间很短,目前发展势头迅猛,作为开源的联盟链平台在国内发展态势良好。
总结
Fabric依然是联盟链领域的代表,扩展性良好,是开源联盟链平台的标杆。
BCOS是国内推出的第一家联盟链,生态圈繁荣,在系统及网络架构的灵活性方面有欠缺,在智能合约引擎及合约语言的通用性方面也存在短板。
长安链因为推出最晚,因此也对其他联盟链平台的短板予以了弥补,在面向实际应用场景的灵活装配、复杂网络支持、通用合约语言支持等方面具有优势,在生态建设方面还需进一步追赶。
#04 课程总结
本节课是THUBA推出的区块链系列课程第一章的最后一节课,我们介绍了区块链的产生、区块链上的密码学、区块链1.0的比特币、区块链2.0的以太坊、公链PlatON2.0以及联盟链的基础知识。感谢各位大家对我们协会和课程的关注,接下来的课程将会从共识算法开始,逐步深入到区块链的基本机制中,探索区块链世界的奥秘!
参考文献
[1] https://hyperledger-fabric.readthedocs.io/zh_CN/release-2.2/blockchain.html
[2] https://github.com/hyperledger-archives/fabric/blob/master/docs/protocol-spec.md
[3] https://fisco-bcos-documentation.readthedocs.io/zh_CN/latest/docs/design
[4] https://docs.chainmaker.org.cn/tech
[5] https://medium.com/coinmonks/designing-a-hyperledger-fabric-network-7adcd78dabc3
[6] https://zhuanlan.zhihu.com/p/342026830
[7] http://www.lianmenhu.com/blockchain-4082-1
[8] https://entethalliance.org/
END
文稿&视频 | Sean
编辑 | 土BA
审核 | Zeo Celia
本文转载自https://mp.weixin.qq.com/s/3xbQvJ2RKmJrLF1V9TnleQ