胡豆秆

个人博客

欢迎来到我的个人博客~


Fabric基本概念


Fabric基本概念

​ Fabric是IBM贡献的一个超级账本框架。它是一个利用现有的成熟技术来组合而成的一个区块链技术的实现。是一种允许可插实现各种功能的模块化架构。具有强大的容器技术,来承载各种主流语言来编写的智能合约。

Fabric架构

​ Fabric大致分为三个模块:底层的网络层、权限管理模块、区块链应用模块。通过SDK和CLiI为应用开发者提供服务。

区块链应用模块

账本

​ Hyperledger Fabric有一个账本子系统,包含两个组件:世界状态交易日志。每一个参与者都有一份他们参与的每个Hyperledger Fabric网络的账本的副本。

  • 世界状态

    世界状态描述了一个给定时间点的账本状态。他是账本的数据库,存储的是账本当前值,存储在数据库中(默认为LevelDB)。

    世界状态中有一个属性–版本号,版本号从0开始,每当状态更新时版本号就递增。状态更新时会首先检查版本号,以确保当前状态的版本与背书是的版本一致(避免并发更新)。

  • 交易日志

    交易日志记录所有导致世界状态当前值的交易。它是世界状态的更新历史,存储在区块中。

智能合约

​ 即:链码,用于操作区块链的账本数据。在区块链外部应用程序要和账本发生交易的时候被外部应用程序调用。大多数情况下,链码只和账本的数据库组件(世界状态)交互,而不和交易日志交互。

区块结构

区块用三个部分组成:区块头区块数据区块元数据

  • 区块头:包含三个属性:区块号(当前区块高度)、当前区块哈希(当前区块的区块数据哈希)、前一个区块的哈希(前一个区块的区块头哈希),当一个区块被创建时写入。
  • 区块数据:包含的是排序后的交易列表。当区块被排序服务(ordering service)创建时写入。
  • 区块元数据:包含的是区块的写入时间,以及区块写入者的证书、公钥、签名、区块最新高度以及交易过滤数组等。

交易

​ 在fabric中指的就是对链代码(即智能合约)的操作,交易分为两种:部署交易(deploy transaction)和调用交易(invoke transaction)。

  • 部署交易:指的是创建新的链代码,并且用一个程序作为参数,当一个部署交易成功执行时,链代码就被安装到区块链上了。
  • 调用交易:调用交易指的是运行链代码,链代码执行时可能会修改相应的状态,并返回输出。

一个交易包含交易头、交易签名、交易提案和交易响应。

  • 交易头:包含交易的元数据,如链码名称、版本等
  • 交易签名:包含由客户端应用程序创建的加密签名,作用是判断交易是否被篡改
  • 交易提案:作用是对应用程序提供给智能合约的输入参数进行编码。当智能合约运行时,提案负责将参数传递过去
  • 交易响应:是智能合约的输出,包含的是世界状态在交易后的值,以读写集的形式展示。

节点

​ 节点是区块链的通信实体,是一个逻辑概念,不同类型的多个节点可以运行在同一个物理服务器上。节点主要有以下四种:

  • 客户端节点:客户端必须连接到某一个普通节点(peer)或排序服务节点上,才能与区块链网络进行通信。客户端向背书节点(endorser)提交交易提案(transaction proposal),当收集到足够背书后,向排序服务节点广播交易提案,进行排序,生成区块。

  • 普通节点(peer):peer节点根据所承担的角色又可以分为记账节点(committer)、背书节点(endorser)、主节点(leader)和锚节点(anchor)。

    • 记账节点:所有的peer节点都是记账节点(committer),负责验证排序服务节点区块里的交易,维护状态和总账(Ledger)的副本。该节点会定期从orderer节点获取包含交易的区块,在对这些区块进行核发验证之后,会把这些区块加入到区块链中。committer节点无法通过配置文件配置,需要在当前客户端或者命令行发起交易请求的时候手动指定相关的committer节点。记账节点可以有多个。
    • 背书节点:部分节点还会执行交易并对结果进行签名背书,充当背书节点(endorser)的角色。背书节点是动态的角色,是与具体链码绑定的。每个链码在实例化的时候都会设置背书策略,指定哪些节点对交易背书后交易才是有效的。并且只有应用程序向它发起交易背书请求的时候才是背书节点,其他时候都是普通的记账节点,只负责验证交易并记账。背书节点也无法通过配置文件指定,而是由发起交易请求的客户端指定。背书节点可以有多个。
    • 锚节点:peer节点还可以是锚节点(anchor peer),锚节点主要负责代表组织和其他组织进行信息交换。每个组织都有一个锚节点,锚节点对于组织来说非常重要,如果锚节点出现问题,当前组织就会与其他组织失去联系。锚节点的配置信息是在configtxgen模块的配置文件configtx.yaml中配置的。锚节点只能有一个。
    • 主节点:peer节点还可以是主节点(leader peer),能与排序服务节点通信,负责从排序服务节点获取最新的区块并在组织内部同步。主节点在整个组织中只能有一个。
  • 排序服务节点orderer:接收包含背书签名的交易,对未打包的交易进行排序生成区块,广播给peer节点。排序服务提供的是原子广播,保证同一链上的节点接收到相同的信息,并且有相同的逻辑顺序。
  • CA节点:fabric1.0的证书颁发机构,由服务器和客户端组成。CA节点接收客户端的注册申请,返回注册密码用于用户登录,以便获取身份证书。区块链上的所有操作都需要验证用户身份。

组织

​ org。fabric系统是通过组织来划分的,每个组织都有承担不同功能的peer节点,同时每个组织都有自己对应的fabric-ca服务器,fabric系统中所有的组织共用一个orderer集群。fabric中的组织在现实世界中可以是一个公司、一个企业或者一个协会。在fabric中,组织是承担着数据信用责任的区块链系统参与方。

​ 在设计一个fabric系统时,第一步就是要确定系统的参与方,然后从这些参与者中选出组织(生成对应的组织编号、域名、证书等),然后再确认组织的管理方式。组织的管理方式是指组织在遇到问题时的协作方式(如新组织的加入)。

通道

​ channel。fabric的数据存储结构被设计成多账本体系,每个账本在fabric中被称为channel。每个channel中都有一个完全独立的账本。同一个channel中的所有peer节点都保存一份相同的数据。通道由成员(组织)、每个成员的锚节点、账本、链码应用程序和排序服务节点定义。网络上的每个交易必须经过身份验证和授权才能在该通道上进行交易。加入通道的每一个peer都有其自己的神风,由成员服务提供者(MSP)提供。

MSP

​ Membership Service Provider。负责联盟链成员的证书管理,它定义了拿些RCA以及ICA在链里是可信任的,包括定义了channel上的合作者。

​ 每个组织都有自己的证书管理即CA及MSP,CA给每个peer颁发证书,MSP授权,赋予相应权限策略。Peer,applications,end users,administrators orders 必须拥有CA和MSP才能访问链网。

​ 每个管理协作企业的ORG组织都可以拥有自己的MSP。

数据库

Hyperledger Fabric 项目中,目前可以支持的数据库有两种:

  • LevelDB:LevelDB是嵌入在Peer中的默认键值对(key-value)状态数据库。
  • CouchDB:CouchDB是一种可选的替代LevelDB的状态数据库。与LevelDB键值存储一样,CouchDB不仅可以根据key进行相应的查询,还可以根据不同的应用场景需求实现复杂查询。

PKI

​ Public Key Infrastructure,一种遵循标准的利用公钥加密技术为电子商务的开展提供一套安全基础平台的技术和规范。底层采用P2P网络和gRPC协议实现对分布式账本结构的连通。通过Gossip协议进行状态同步、数据分发和成员探测。

共识机制

​ Fabric区块链的网络节点本质上是互相复制的状态机,节点之间需要保持相同的账本状态。为了实现分布式节点的一致性,各个节点需要通过共识过程,对账本状态的变化达成一致性的认同。Fabric区块链的共识过程包括3个阶段:背书、排序和校验。

背书

​ 在背书(endorsement)阶段中,背书节点对客户端发来的交易提案进行合法性检验,然后模拟执行链码得到交易结果,最后根据设定的背书逻辑判断是否支持该交易提案。如果背书逻辑决定支持交易提案,会把交易提案签名后发回给客户端。

​ 客户端通常需要根据链码的背书策略,向一个或者多个成员的背书节点交易才有效,例如需要5个成员的背书节点中至少3个同意;或者某个特殊身份的成员支持等。客户端只有在收集足够多的背书节点的交易提案签名,交易才能被视为有效。

排序

​ 排序(ordering)阶段就是由排序服务节点对交易进行排序,确定交易之间的时序关系。排序服务把一段时间内收到的交易进行排序,然后把排序后的批量交易打包成数据块(区块),再把区块广播给通道的成员。采用排序共识方式,各个成员收到的是一组发生顺序相同的交易 ,从而保证了所有节点的数据一致性。

​ 排序服务是共识机制中重要的一环,所有交易都要通过排序服务的排序才可以达成全网共识,因此排序服务要避免成为网络上的性能瓶颈。

校验

​ 校验(Validation)阶段是节点对排序后的交易进行一系列的校验,包括交易数据的完整性检查、是否重复交易、背书签名是否符合背书策略的要求、交易的读写集是否符合多版本并发控制MVCC(Multiversion Concurrency Control)的校验等。当交易通过了所有的校验后,被标注为合法并写入账本中。因为所有的确认节点都按照相同的顺序校验交易,并且把合法的交易依次写入账本中,因此不同确认节点的状态能够始终保持一致。


​ Fabric联盟链的开发人员主要分为三类:底层是系统运维,负责系统的部署与维护;其次是组织管理人员,负责证书、MSP权限管理、共识机制等;最后是业务开发人员,他们负责编写chaincode、创建维护channel、执行transaction交易等。

打赏一个呗

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦