Hyperledger Fabric 学习一:简介
https://www.jianshu.com/p/f971858b70f3?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation
1、Hyperledger简介
Hyperledger:超级账本,是首个面向企业应用场景的分布式账本平台,包括了:IBM、Intel、Cisco、DAH、摩根大通、R3等在内的众多科技和金融巨头的贡献参与,在银行、供应链等领域得到了广泛的关注和发展,目前已经拥有超过200家企业成员。
- Hyperledger项目:
2015年12月,由开源世界的旗舰组织Linux基金会牵头,30家初始企业成员共同宣布Hyperledger联合项目成立。
成立之初,IBM贡献了4万多行已有的OpenBlockchain代码,Digital Asset则贡献了企业和开发者相关资源,R3贡献了新的金融交易架构,Inter也贡献了分布式账本相关的代码。
作为一个联合项目,旗下由面向不同的场景的子项目构成:包括Fabric、Sawtooth、Iroha、BlockChain Explorer、Cello、indy、Composer、Burrow等8大顶级项目。
-
Fabric:是一个带有准入机制的企业级联盟链项目,它的前身是IBM贡献的OpenBlockchain;
-
Sawtooth: 是一个创建、部署和运行分布式账本的模块化平台。它包含一个新奇的共识算法,叫做经历时间证明(Proof of Elapsed Time,简写PoET),面向大型分布式验证器群,消耗最少的资源;
-
Iroha:是为了将分布式账本技术简单容易地与基础架构型项目集成而设计的一个区块链框架项目;
-
indy:是特备为去中心化的身份而建立的一种分布式账本,它提供了基于区块链或者其他分布式账本互操作来创建和使用独立数字身份的工具、代码库和可以重用的组件;
-
Burrow:是一个支持许可的只能合约机,burrow提供了一个模块化的区块链客户端,带一个经许可的智能合约解释器,它部分建立在以太坊虚拟机(EVM)规范的基础上;
2、Fabric介绍
Hyperledger Fabric是一个提供分布式账本解决方案的平台,目标是实现一个通用的权限区块链(Permissioned Chain)的底层基础框架,为了适用于不同的场合,采用模块化架构提供可切换和可扩展的组件,包括共识算法、加密安全、数字资产、智能合约和身份鉴权等服务。
Hyperledger Fabric被设计成支持不同的模块组件直接拔插启用,并能适应在经济生态系统中错综复杂的各种场景
Fabric 克服了比特币等公有链项目的缺陷,如吞吐量低、交易公开无隐私性、无最终确定性以及共识算法低效等问题,使得用户能够方便地开发商业应用。
另一方面,Fabric 也存在不足之处,如 v1.2 的共识算法尚不支持 BFT 类型,交易过程还有并发控制的局限性,整体性能还有待提高等。
3、Fabric应用场景
-
商业积分,利用区块链多方发行扩大参与者、使积分自由流通,吸引用户再次消费
-
跨境支付与结算,减少机构之间的信任成本,降低手续费
-
数据存证,版权保护,鉴别数据真伪
4、Fabric名词解释
-
成员服务(Membership Services):成员服务用来在许可的区块链网络上认证、授权和管理身份;
-
排序或者共识服务(Ordering Service):确认交易并将交易排序放入block
-
账本(Ledger),交易状态的持久化
-
节点(Node),一个网络实体,用来维护Ledger,执行合约的容器
-
SDK,用来和区块链网络进行交互
5、Fabric链码介绍
chaincode(链码)是部署在 Hyperledger fabric 网络节点上,可被调用与分布式账本进行交互的一段程序代码,也即狭义范畴上的“智能合约”。
链码分为系统链码和用户链码。
-
系统链码用来实现系统层面的功能,包括系统的配置、用户链码的部署、升级、用户交易的签名和验证策略等;
-
用户链码用于实现用户的应用功能,开发者编写链码应用程序,并将其部署在网络上,终端用户通过与网络节点交互的客户端应用程序调用链码;链码在 VP (记账节点,也称校验节点)上的隔离沙盒(目前为 Docker 容器)中执行,并通过 gRPC 协议来被相应的 VP 记账节点调用和查询;
6、fabric 通道
目前通道分为系统通道(System Channel)和应用通道(Application Channel)。排序节点通过系统通道来管理应用通道,用户的交易信息通过应用通道传递。对一般用户来说,通道是指应用通道。
-
通道概念
通道是Fabric中非常重要的概念,它实质是由排序节点划分和管理的私有原子广播通道,目的是对通道的信息进行隔离,使得通道外的实体无法访问通道内的信息,从而实现交易的隐私性。商业应用的一个重要的需求是私密性交易,为此 Fabric 设计了通道(Channel)来提供成员之间的隐私保护。通道是部分网络成员之间拥有独立的通信渠道,在通道中发送的交易只有属于通道的成员才可见,因此通道可以看作是Fabric的网络中部分成员的私有通信“子网”。
-
通道管理
通道由排序服务管理。在创建通道的时候,需要定义它的成员和组织、锚节点(anchor peer)和排序服务的节点,一条和通道对应的区块链结构也同时生成,用于记录账本的交易,通道的初始配置信息记录在区块链的创世块(第一个区块)中。通道的配置信息可以用增加一个新的配置区块来更改。每个组织可有多个节点加入同一个通道,这些节点中可以指定一个锚节点(或多个锚节点做备份)。锚节点代表本组织与其他组织的节点交互,从而发现通道中的所有节点。另外,同一组织的节点会选举或指定主导节点( leading peer ),主导节点负责接收从排序服务发来的区块,然后转发给本组织的其他节点。主导节点可以通过特定的算法选出,因此保证了在节点数量不断变动的情况下仍能维持整个网络的稳定性。
在 Fabric 的网络中,可能同时存在多个彼此隔离的通道,每个通道包含一条私有的区块链和一个私有账本,通道中可以实例化一个或多个链码,以操作区块链上的数据。由此可见,Fabric 是以通道为基础的多链多账本系统。
-
通道创建
通道由排序服务节点负责管理,同时该节点还负责排序通道中的交易。在通道中一般包含有若干成员(组织),若两个网络实体的身份证书能够追溯到同一个根CA,则认为这两个实体属于同一组织。此外,通道中的每个组织都会有一个或以上的“锚节点”,它负责与其他组织交换共享账本的数据。创建通道的时候定义了成员,只有通过成员MSP验证的实体,才能够加入到通道并访问通道数据。一个验证例子如下:
Org1 是通道 mychannel 的成员之一,与 Org1 绑定的 MSP 标识为 Org1MSP,其代表的 CA 称为 CA1;若实体的 MSP 满足以下条件则认为实体有权限访问 mychannel 的数据:
- 实体的MSP标识(ID)为 Org1MSP;
- 实体身份证书的信任链源头为 CA1。
实体只要满足通道中任意成员的 MSP 校验,则认为该实体有权限访问通道中的数据
-
通道的配置
通道的配置信息都被打包到一个区块中,并存放在通道的共享账本中。该区块除了配置信息外不包含其他交易信息,称之为通道的配置区块(Configuration Block)。通道可以使用配置区块来更新配置,因此在账本中每新添加一个配置区块,通道就按照最新配置区块的定义来修改配置。
通道账本的首个区块一定是配置区块,也称为初始区块(Genesis Block)。
7、分布式账本
Fabric 里的数据以分布式账本的形式存储。账本由一系列有顺序和防篡改的记录组成,记录包含着数据的全部状态改变。账本中的数据项以键值对的形式存放,账本中所有的键值对构成了账本的状态,也称为“世界状态”( World State )。
每个通道中有唯一的账本,由通道中所有成员共同维护着这个账本,每个确认节点上都保存了它所属通道的账本的一个副本,因而是分布式账本。对账本的访问需要通过链码实现对账本键值对的增加、删除、更新和查询等的操作。
账本由区块链(File System)和状态数据库(Level DB)两部分组成。如下图所示,
-
区块链,是一组不可更改的有序的区块(数据块),记录着全部交易的日志。每个区块中包含若干个交易的数据,不同区块所包含的交易数量可以不同。区块之间用哈希链( Hashed-link )关联:每个区块头包含该区块所有交易的哈希值,以及上一个区块头的哈希值。这样的链式架构可以确保每个区块的数据不可更改,以及每个区块之间的顺序关系不可更改。这个特点决定了区块链的区块只可以添加在链的尾部。
区块链的数据块以文件形式(File System)保存在各个节点中。
-
状态数据库,记录了账本中所有键值对的当前值,相当于对当前账本的交易日志做了索引。链码执行交易的时候需要读取账本的当前状态,从状态数据库可以迅速获取键值的最新状态。
如果没有状态数据库,要获得某个键值时,需要遍历整个区块链中和该键值相关的交易,效率非常低,因此,读取状态数据库可以认为是快速定位和访问某个键值的方法。另外,当状态数据库出现故障的时候,可以通过遍历账本重新生成。
当一个区块附加到区块链尾部的时候,如果区块中的有效交易修改了键值对,则会在状态数据库中作相应的更新,这样区块链和状态数据库始终保持一致。
状态数据库原理上可以是各种键值数据库,Fabric 缺省使用的是 LevelDB ,也支持 CouchDB 的选项。CouchDB 除了支持键值数据之外,也支持 JSON 格式的文档模型,能够做复杂的查询。
Frabric 账本逻辑结构
8、Fabric网络模块
Fabric P2P算法用的是Gossip算法。
-
Gossip是一个带冗余的容错算法,更进一步 ,Gossip是一个最终一致性算法。虽然无法保证在某个时刻所有节点状态一致,但可以保证在 “最终” 所有节点一致, 但是 “最终” 是一个现实中存在,但理论上无法证明的时间点;
-
Gossip不要求节点知道所有其他节点,因此又具有去中心话的特点,节点之间完全对等,不需要任何的中心节点;
-
Gossip的缺点很明显,冗余通信会对网络带宽、CPU资源造成很大的负载,而这些负载又受限于通信频率,该频率又影响着算法收敛的速度;