1、Hyperledger Fabric20222022年年6 6月月目目 录录p Hyperledger简介p 架构设计p 共享账本p 共识算法p CAp 通道p 智能合约p 成员管理p 交易过程p 主要特点HyperledgerHyperledgerpHyperledger 项目是 Linux Foundation 托管的一个开源、协作式项目,为企业构建开源、通用区块链结构。p作为一个联合项目,超级账本由面向不同目的和场景的子项目构成。p目前主要包括8大顶级项目,所有项目都遵守Apache v2许可FabricSawtoothIrohaBlockchain ExplorerCelloIndyC
2、omposerBurrowHyperledger FabricHyperledger Fabricp Fabric是Hyperledger的一个基于社区的项目 是一个区块链应用支持框架;旨在作为开发模块化体系结构的区块链应用程序的基础,以便诸如共识和会员服务等组件可以即插即用;账本数据可以以多种格式存储,一致的机制可以被转换和输出,并且支持不同的MSPs;它使用容器技术来托管构成系统应用逻辑的智能合约(也称为链代码)。使用容器技术来促成“智能合约”,智能合约在“链代码”中实现;如同其它区块链技术一样,它有一个账本,使用智能合约,并且是一个由参与者管理他们的交易的系统;Fabric是私有的,而且
3、是被许可的。组织的成员可以通过一个MSP来注册;Fabric提供创建通道(channel)的能力,允许一组参与者创建一个单独的共同维护的交易账本。HyperledgerHyperledgerp定义和术语Client: 代表由最终用户操作的实体,它必须连接到某一个peer节点或者orderer节点上与区块链网络通信;客户端向endorser提交交易提案,当收集到足够背书后,向排序服务广播交易,进行排序,生成区块;CA节点:证书颁发机构,负责对加入链内的所有节点进行授权认证,由服务器(fabric-ca-service)和客户端组件(fabric-ca-client)组成。CA节点接收客户端的注册
4、申请,返回注册密码用于用户登入,以便获取身份证书,在区块链网络上所有的操作都会验证用户的身份;Orderers:提供共识服务的网络节点,负责接收包含背书签名的交易,对未打包的交易进行排序生成区块,广播给peer节点。例如,使用Kafka或PBFT;通道: Order 服务提供Peer节点供订阅的主题(如发布-订阅消息队列),每个主题是一个通道。peer可以订阅多个通道,并且只能访问订阅通道上的交易;账本:账本保存Orders提交经节点确认的交易记录;成员:访问和使用账本的网络节点;链:基本上,一个链由1个通道+ 1个账本+ N个成员组成。非链的成员无法访问该链上的交易。链的成员可以由应用程序动
5、态指定。HyperledgerHyperledgerp定义和术语Peers:参与交易的主体,可以说是代表每个参与到链上的成员,维护账本的网络节点,所有的peer节点都是committer(记账节点)。通常在Hyperledger Fabric架构中存在各种角色,如endorser和committer(维护完整的账本数据);所有的peer节点都是committer(记账节点),而又有可能担任的角色有endorser(背书节点)、Leader(主节点)、Anchor(锚节点)Committer:记账节点使用基于Gossip的p2p数据分发,节点会定期跟其他节点交换信息。如果在这个过程中有节点发生故
6、障,则会从存活的节点中删除这个节点的信息。对于故障节点,还会定时检查是否已经恢复,恢复存活的节点会更新到存活节点列表中。如果有新加入的节点,也能通过节点信息的交换获取到,添加到存活列表中,广播给其他节点Leader:主节点连接到排序服务,负责把接受到的批量区块转发给其他节点。因此主节点与排序服务的稳定连接至关重要。可以强制设置为主节点,也可以动态选举产生Endorser:背书节点为动态的角色与具体的chaincode绑定,背书节点的故障对网络的影响取决于chaincode对应的背书策略,例如背书策略指定只要3个组织其中的2个组织的成员完成背书,该交易就是有效的,那么只有一个组织的成员节点出现故
7、障对交易完成没有影响Anchor:锚节点是在一个channel上可以被所有其他peer发现的peer,channel上的每个成员都有一个anchor Peer(或多个anchor peer 来防止单点故障),允许属于不同成员的peer发现channel上的所有现有peerFabric 0.6Fabric 0.6到到1.01.0的架构图的架构图p结构简单: 应用-成员管理-Peer的三角形关系,主要业务功能全部集中于Peer节点;p架构问题:由于peer节点承担了太多的功能,所以带来扩展性、可维护性、安全性、业务隔离等方面的诸多问题0.6版本在推出后,并没有大规模被行业使用,只是在一些零星的案例
8、中进行业务验证。p分拆Peer的功能,将Blockchain的数据维护和共识服务进行分离,共识服务从Peer节点中完全分离出来,独立为Orderer节点提供共识服务;p基于新的架构,实现多通道(channel)的结构,实现了更为灵活的业务适应性(业务隔离、安全性等方面)p特性:chaincode信任的灵活性:支持多个ordering服务节点,增强共识的容错能力和对抗orderer作恶的能力扩展性: 将endorsement和ordering进行分离,实现多通道(实际是分区)结构,增强系统的扩展性;同时也将chaincode执行、ledger、state维护等非常消耗系统性能的任务与共识任务分离
9、,保证了关键任务(ordering)的可靠执行保密性:新架构对于chaincode在数据更新、状态维护等方面提供了新的保密性要求,提高系统的业务、安全方面的能力共识服务的模块化:支持可插拔的共识结构,支持多种共识服务的接入和服务实现FabricFabric架构设计架构设计p超级账本包括三大组件:区块链(Blockchain)链码(Chaincode)成员权限管理(Membership)p区块链提供一个分布式账本平台。一般地,多个交易被打包进区块中,多个区块构成一条区块链。区块链代表的是账本状态机发生变更的历史过程。p链码包含所有的处理逻辑对外提供接口,外部通过调用链码接口来改变世界观。世界观是
10、一个键值数据库,用于存放链码执行过程中涉及到的状态变量。p成员权限管理基于PKI ,平台可以对接入的节点和客户端的能力进行限制。FabricFabric共享共享账本账本p区块链数据,这是用文件系统存储在Committer节点上的。区块链中存储了Transaction的读写集;p每个参与者都有一份账本的副本到他们所属的每一个Fabric的网络上;p包括两个组成部分:世界状态(world state)、事务日志(transaction log)在给定的时间点上,世界状态组件描述了总账的状态,它是账本的数据库事务日志组件记录所有导致当前世界状态值的事务,这是世界状态的更新历史,记录了区块链网络使用的
11、账本数据库之前和之后的值账本是世界状态数据库和事务日志历史的组合p该账本为世界状态提供了可替换的数据存储方案p默认情况下,是一个LevelDB键值存储数据库,也支持使用CouchDBp事务日志不需要是可插拔的p为了检索区块链的方便,用LevelDB对其中的Transaction进行了索引。FabricFabric智能合约智能合约p超级账本支持基于主流编程语言的智能合约(链码)设计,极大地方便了应用开发人员快速开发新型的分布式应用,或将已有应用迁移到区块链系统上。p区块链应用,一般由若干部署在区块链网络中的智能合约,以及调用这些智能合约的应用程序组成。用户专注于与业务本身相关的应用程序;智能合约
12、则封装了与区块账本直接交互的相关过程,被应用程序调用p智能合约直接与账本结构打交道,处于十分核心的位置。智能合约代码本质上是为了对上层业务逻辑进行支持;智能合约最终会部署在区块链网络中与账本进行交互。p应用程序通过调用智能合约提供的方法接口来实现业务逻辑。p由于离用户侧更贴近,应用程序的开发更为灵活,可以采用已有的主流开发语言进行开发,包括Javascript、Python、Go、Java等。p在运行位置上,应用程序可以运行在p区块链网络的节点上;p又可以运行在中心化的服务器上,但必须保证可以访问到智能合约暴露的服务接口。典型的区块链应用程序的工作过程FabricFabric成员管理成员管理p
13、Membership Service Providers(MSP)p在划分成员结构的时候Fabric用MSP来定义一个成员,在最佳实例推荐中,一个企业或者机构可以是一个单独的MSPp例如供应链案例中,核心企业便是一个MSP,银行和供应商各代表一个MSP,那么在一个MSP下可以有多个Peer节点,而不同的授权便有不同的功能pMSP具体应用场景在部署智能合约或者初始化时需要拥有对应CA赋权的证书才可执行(默认为PeerAdmin用户)。为新节点或用户注册证书时,需要CA对该操作证书赋予权限(一般为Admin用户)。在背书策略中可通过MSP来代表背书成员,可设定单个Peer节点代表其MSP达成协议(
14、也可以要求全部Peer节点通过才达成协议)。在跨MSP间的Peer节点通信,先通过各MSP内指定的Anchor Peer收集MSP内的Peer列表,然后通过各MSP下的Anchor Peer交互其Peer列表,将其他MSP下的Peer列表同步到内部Peer后,便通过Gossip协议Peer节点间随机通信。每个MSP都有自己独立的CA节点,为其提供所有的证书需求,各MSP共享其CA节点的ROOT证书达到互相认证。匿名交易。在一笔交易中,包含着每一个参与背书的用户证书,这可以认为是公开实名制的交易,所有链内成员都可以看见每一笔交易是由谁参与的,但是如果我们希望匿名交易该如何实现呢?在Fabric
15、0.6版本内有Ecert和Tcert的概念,Ecert即为用户的证书,而Tcert则是用于匿名交易,用户可以通过向CA申请一批Tcert用于交易,而该Tcert不包含用户的信息,当需要验证查验信息时可通过CA来认证该用户的身份。(此功能在1.0版本尚未实现)Revoke,废除证书。在PKI体系中,其最大的优势便是Offline的,即在证书颁发后,不需要CA节点的存在也可以在本地进行认证,而遇到很大的问题是类似于废除证书时如果希望能即时将废除证书的消息通知到各个节点,目前的做法是需要CA节点保持在线并与各节点保持通信。(获取Tcert也需要CA节点在线)FabricFabric通道通道p数据隔离
16、和保密在共识服务上支持多通道消息传递,使得Peer节点可以基于应用访问控制策略来订阅任意数量的通道; 也就是说,应用程序指定Peer节点的子集中架设通道。 这些peer组成提交到该通道交易的相关者集合,而且只有这些peer可以接收包含相关交易的区块,与其他交易完全隔离此外,peers的子集将这些私有块提交到不同的账本上,允许它们保护这些私有交易,与其他peers子集的账本隔离开来。应用程序根据业务逻辑决定将交易发送到1个或多个通道。 这不是内置的限制,区块链网络不知道并假设不同通道上的交易之间没有关系通道和账本的组合是一个虚拟链,因此一个区块链网络可以具有1个共识服务的多个链。 系统通道和全账
17、本构成系统链。每个区块链网络只有1个系统链。如果交易是公开的,区块链网络可能永远不需要多个链; 所有的交易对所有Peers成员都可见。然而,在成员间进行私密交易(例如双边合同),单独的链是隔离数据、提供保密的方式注意:共识服务接收所有链的所有交易,因此保密性仅与peer而不是Orderers相关。当共识服务由被许可网络中的可信方和监管机构组成时,这样是合理的,也就是说,这些交易作为业务需求仅对他们可见。另一方面,如果应用程序不希望Orderers知道交易的内容,它必须利用其他技术来隐藏敏感数据,例如哈希散列或加密。共识服务作为一个信任方存在,如果是由拜占庭容错(BFT)共识协议实现(例如PBF
18、T),可以防止不可信的Orderers破坏账本的一致性和阻碍系统可用性。然而,现在还没有一种协议可以在有不可信的Orderers存在的情况下,提供多通道设计的同时提供数据保密性。Fabric CAFabric CAp CA主要功能身份注册,或者将连接到LDAP作为用户注册;颁发登录证书(ECerts);颁发交易证书(TCerts),保证链上交易的匿名性与不可连接性;证书续期与撤销。FabricFabric共识机制共识机制p目前包括SOLO,Kafka,未来可能要使用的PBFT(实践拜占庭容错)、SBFT(简化拜占庭容错)psolo、kafka和bft,分别可以认为是中心化、半中心化和去中心化。
19、solo模式指整个fabric网络依赖于一个orderer节点kafka模式依赖于一个kafka集群bft模式则是去中心化的orderer集群,但目前bft模式并没有在fabric-1.0中实现FabricFabric共识机制共识机制pSOLO机制是一个非常容易部署的非生产环境的共识排序节点。它由一个为所有客户服务的单一节点组成,所以不需要“共识”,因为有一个中央权威机构。相应地没有高可用性或可扩展性。这使得独立开发和测试很理想,但不适合生产环境部署。order-solo模式作为单节点通信模式,所有从peer收到的消息都在本节点进行排序与生成数据块。FabricFabric共识机制共识机制p
20、Kafka是一种支持多通道分区的集群时序服务,可以有序地管理消息并在多个冗余副本间保证数据一致性kafka集群的状态由zookeeper管理,选举leader节点kafka集群至少要四个节点,可保证在一个节点宕机后还能继续提交交易和排序,并且创建新的通道zookeeper集群将会是3个、5个或7个,它的值需要是一个奇数避免split-brain情况,同时选择大于1的值为了避免单点故障。超过7个zookeeper servers会被认为overkill可以容忍部分节点失效(crash),但不能容忍恶意节点基于zookeeper进行Paxos算法选举,支持2f+1节点集群,f代表失效节点个数。即k
21、afka可以容忍少于半数的共识节点失效Kafka模式的Orderer服务包含Kafka集群及相关联的Zookeeper集群,以及许多OSN(ordering service node)ordering 服务使用一个单Partition(每channel)接收客户端的交易消息和TTC-X消息,在本地存储区块(每channel),这种解决方案能够在性能和复杂度之间取得较好的平衡不用担心排序服务里插入数据带来的安全问题,因为最终记账还需要经过多重检查,比如消息类型的检查和签名验证、记账节点对背书策略的验证和交易内容的验证。但是其他的恶意节点攻击的问题还是无法避免的,比如拒绝服务(丢掉交易)值得一提的
22、是,官方的example的在kafka集群和orderer之间都是没有安全传输的,切不可直接投入生产环境。可以通过使用openssl为kafka集群生成秘钥,增加orderer和kafka的配置以使用基于TLS的安全传输FabricFabric共识机制共识机制p PBFT算法拜占庭算法支持(3f+1)的节点集群,f代表恶意节点的数量。恶意节点可能会做一些恶意伪造时序或者返回相反的错误的结果等三个阶段:预准备(pre-prepare)、准备(prepare)、和确认(commit)从全网节点选举出一个主节点(Leader),新区块由主节点负责生成Pre-Prepare:每个节点把客户端发来的交易
23、向全网广播,主节点0将从网络收集到需放在新区块内的多个交易排序后存入列表,并将该列表向全网广播,扩散至123Prepare:每个节点接收到交易列表后,根据排序模拟执行这些交易。所有交易执行完后,基于交易结果计算新区块的哈希摘要,并向全网广播,1-023,2-013,3因为宕机无法广播Commit:如果一个节点收到的2f(f为可容忍的拜占庭节点数)个其它节点发来的摘要都和自己相等,就向全网广播一条commit消息Reply:如果一个节点收到2f+1条commit消息,即可提交新区块及其交易到本地的区块链和状态数据库FabricFabric交易过程交易过程FabricFabric交易过程交易过程H
24、yperledgerHyperledger主要特点主要特点-1-1p 获得许可的成员Hyperledger Fabric 因作为许可网络的平台而闻名,其中的所有参与者都有已知的身份。考虑许可网络时,应该考虑自己的区块链用例是否需要遵守数据保护法规。许多用例(具体来讲,是在金融领域和医疗行业中的许多用例)都需要遵守数据保护法律,要求知道网络成员和访问特定数据的人的身份。例如,假设有一家私募股权公司。根据定义,私募股权不在证券交易所公开交易,而且它的投资者通常是风险投资公司、私募股权公司或天使投资者。此网络的参与者需要是已知的,而且在资本投资方面具有可信度,然后才能参与区块链。Hyperledge
25、rHyperledger主要特点主要特点-2-2p 性能、可伸缩性和信任水平Hyperledger Fabric 构建于一种模块化架构之上,该架构将交易处理分为 3 个阶段:l分布式逻辑处理和协商(“链代码”)l交易订购l交易验证和提交这种分离提供了一些优势:不同节点类型之间需要的信任和验证水平更低,网络可伸缩性和性能得到了优化。HyperledgerHyperledger主要特点主要特点-2-2p 在新的 v1.0 架构中,仅在网络上发送签名和读/写集,所以可伸缩性和性能得到了优化。p 此外,因为仅背书者和提交者能够真正看到该交易,所以区块链系统的不同部分中需要的信任水平更低,提供了更高的安
26、全性。p 例如,在资本市场中,购买和销售基于股权的证券或债务,由于参与者数量增多,所以交易量也在增加。更多的交易要求更高的可伸缩性和性能,Hyperledger Fabric v1.0 提供了这一优势,该优势从某种程度上讲归功于链代码执行过程的拆分。p 拆分链代码执行还在网络中实现了动态增长在 Hyperledger Fabric v1.0 中,可以动态地或以编程方式添加对等节点,而不是像 v0.6 中一样静态添加。例如,假设一家管理外汇汇率的公司要向网络中添加一家新银行。在 Hyperledger Fabric v1.0 中,他们能够以编程方式完成此操作。HyperledgerHyperle
27、dger主要特点主要特点-3-3p 以“需要知道”为原则来公开数据由于竞争形势、保护法律和有关个人数据机密性的法规,企业规定需要确保某些数据元素的隐私,这可以通过区块链上的数据分区来实现。Hyperledger Fabric 中支持的通道允许仅将数据传递给需要知道的相关方。例如,许多金融实体表明担忧竞争对手看到所处理的交易数量。一些金融机构没有考虑通过“足够”的加密来保护其数据。考虑到这种情况,一些金融工具可能需要 10 年或更长时间才会发挥价值,随着时间的推移,密码被破解的风险可能使私有信息变成公开信息。通道有助于提供数据分区功能,只有需要知道数据的相关方才能看到交易数量和数据本身。Hype
28、rledgerHyperledger主要特点主要特点-4-4p 对不可变分布式账本的丰富查询账本是区块链应用程序的状态过渡的有序记录。每个交易都会产生一组资产键值对,这些信息以创建、更新或删除数据的形式提交给账本。v1.0 的不可变事实来源被附加到嵌入了 LevelDB 的对等节点的文件系统中。默认情况下,LevelDB 有一个键值数据库,支持键查询、组合键查询和键范围查询。如果还需要复杂的富格式查询,CouchDB 支持 LevelDB 的基本功能,并添加了全面的富数据查询。可以选择支持 CouchDB 等文档数据库,内容需是 JSON 格式,而且完全可查询,其数据模型应与现有的键/值编程模
29、型兼容。因此,在利用 CouchDB 时,如果将链代码数据建模为 JSON,则不需要更改应用程序。这种 JSON 格式有助于最大限度减少生成简单报告和执行审计功能所需的工作。例如,在供应链场景中,可以使用 JSON 文档样式来帮助列出商品和运输实体的特定数据。对于运送到资产最终目的地的过程中涉及的位置和运输实体,可以轻松地为它们生成资产报告。HyperledgerHyperledger主要特点主要特点-5-5p 支持插件组件的模块化架构Hyperledger Fabric 架构的模块化使网络设计师能够插入其首选实现的组件,这是一个优势。呼声最高的模块化区域之一是“自带身份”;一些多公司网络已拥有身份管理功能,并希望重用该功能,而不是重新构建它;该架构中可轻松插入的其他组件包括一致性或加密组件,其中一些国家/地区有自己的加密标准。HyperledgerHyperledger主要特点主要特点-6-6p 保护数字密钥和敏感数据HSM(硬件安全模块)支持对保护和管理数字密钥来实现强身份验证至关重要。Hyperledger Fabric 提供了经过修改和未经修改的 PKCS11 来生成密钥,这支持处理各种情况,比如需要更多保护的身份管理。对于处理身份管理的场景,HSM 增加了对密钥和敏感数据的保护。