fabric abstract

Hyperledger Fabric

Hyperledger Fabric 是一个开源的企业级需要许可的分布式账本技术平台。Fabric是一个高度模块化和可配置架构。同时,Fabric的智能合约是第一个支持所有通用编程语言,例如Java, Go and Node.js。

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

order-execute architecture

大部分区块链(也包括公链)所采用的流程是:将transactions排序打包然后同步到每个节点(通常采用广播的方式),每个节点再按顺序执行(或者称之为验证)这些交易。

背书节点:部分节点还会执行交易并对结果进行签名背书,充当背书节点(endorser)的角色。背书节点是动态的角色,是与具体链码绑定的。每个链码在实例化的时候都会设置背书策略,指定哪些节点对交易背书后交易才是有效的。并且只有应用程序向它发起交易背书请求的时候才是背书节点,其他时候都是普通的记账节点,只负责验证交易并记账。

校验(Validation)阶段是节点对排序后的交易进行一系列的检验。当交易通过了所有校验后,将被标注为合法并写入账本中。

排序完成后,将排序好的批量交易打包成区块广播给组织中的主节点,只有主节点能与排序服务节点进行通信。主节点从排序服务节点接收到最新的区块后在组织内部同步(分发给其它节点)。所有节点都将能接收到这个同步内容,因为所有节点同时也都是记账节点,将对接收到的包含排序好的交易的区块进行校验,校验通过之后,会把这个区块同步到区块链中。

背书节点是模拟执行交易的,当收到交易请求的时候它会去模拟执行这个交易请求,执行结果不管是同意还是拒绝,都会把这个执行结果加密,签名返给Client端;

在背书节点中,当模拟执行完结果以后,会通过ESCC (Endorsement System ChainCode)对执行结果进行签名;

在记账节点中,会通过VSCC (Validation System ChainCode) 根据背书策略验证交易是否正确。

通道与组织的关系?

节点是区块链的通信实体,节点是一个逻辑概念,不同类型的节点可以运行在同一台物理服务器上。这些节点可能部署在云上面或者本地。可能来自不同的公司或者组织。在区块链网络中有两种类型的节点:Peer节点和Orderer节点,如下图所示:

channel

如上图所示,peer 1,2和N订阅红色通道,并共同维护红色账本; peer 1和N订阅蓝色通道并维护蓝色账本;类似地,peer 2和peer N在黑色通道上并维护黑色账本。

在这个例子中,peer N在订阅了所有通道,我们看到每个通道都有一个相关的账本。一般来说,我们称不涉及所有peer的账本为子账本,另一种是系统账本,即全账本。

Fabric 1.0交易流程

第一步,客户端Client构造交易提案

client利用SDK(Node.js\java..)构造一个交易提案propose,该propose包含调用智能合约功能函数请求,用来确认哪些数据可以读取或者写入账本,client将交易提案propose发送给一个或多个peer节点,交易提案包含本次交易要调用的合约标识、合约方法和参数信息以及客户端签名等。

SDK将交易提案打包为可识别的格式(如gRPC上的protocolbuffer),并使用用户的加密凭证为该交易提案生成唯一的签名。

第二步,背书节点模拟执行交易

背书节点endorser收到交易提案后,验证签名并确定提交者是否有权执行操作。背书节点将交易提案的参数作为输入,在当前状态KV数据库上执行交易,生成包含执行返回值、读操作集合和写操作集合的交易结果(此时不会更新账本),这些值的集合、背书节点的签名和背书结果(YES / NO)作为提案的结果返回给客户端SDK,SDK解析这些信息判断是否应用于后续的交易。

第三步,客户端把交易发送到共识服务节点

应用程序(SDK)验证背书节点签名,并比较各节点返回的提案结果,判断提案结果是否一致以及是否参照指定的背书策略执行。客户端收到各个背书节点的应答后,打包到一起组成一个交易并签名,发送给Orderers。

第四步,orderer节点共识排序,生成新区块,提交交易

Orderers对接收到的交易进行共识排序,然后按照区块生成策略,将一批交易打包到一起,生成新的区块,调用deliver API投递消息,发送给提交节点。

提交节点收到区块后,会对区块中的每笔交易进行校验,检查交易依赖的输入输出是否符合当前区块链的状态,完成后将区块追加到本地的区块链,并修改K-V状态数据库。

Organization组织,Consortium联盟:

组织(Organization)表示多个成员的集合,通常拥有共同信任的根证书(根CA证书或中间CA证书)。组织下的所有成员被认为拥有同一个组织身份。目前,存在普通成员角色(Member)和管理员角色(Admin)两类组织成员,后者具有修改组织配置的权限。组织对象通常包括组织名称、组织所属MSP名称(MSP ID)、MSP对象、锚节点列表等信息。
联盟(Consortium)表示相互合作的多个组织集合,使用相同的Orderer服务,拥有相同的通道创建策略(ALL、MAJORITY或ANY),其中,MAJORITY策略要求联盟内必须要超过一半的成员都同意才能创建新通道。

Transaction交易,Block区块:

交易(Transaction,或称为事务)是Fabric的核心概念,通常是指通过调用链码(智能合约)改变账本状态数据的一次操作。对账本状态的变更是用交易结果读写集来描述的。将交易集合经过Orderer节点排序后按规则打包到区块中。

目前,Hyperledger Fabric包括普通交易消息、配置交易消息等,其中,普通交易消息封装了变更账本状态的执行交易结果,需要经过排序后打包成区块,配置交易消息则用于创建新的应用通道或更新通道配置,通常在排序后单独打包成区块,同时将最新配置区块号更新到最新的区块元数据中以便于索引查找。

区块(Block)是指一段时间内发生的交易集合,经排序后按规则打包后并添加签名、哈希值、时间戳与其他元数据所构成的数据结构,而区块链就是以区块为基础按照时间顺序连接构成的链状数据结构。

链码/chaincode:

分为分为系统链码和用户链码。

系统链码在节点启动或初始化新链结构(节点加入通道、节点启动恢复等)时完成部署,用于支持配置管理、背书签名、链码生命周期管理等系统功能,并运行在goroutine中。

用户链码是用户编写的智能合约代码,通常运行在Docker容器中,支持打包、安装、实例化(部署)、升级、调用等链码操作。

CA(Certificate Authority 证书颁发机构)节点:使成为成员

MSP:Membership Service Provider,成员管理服务

PKI提供身份列表,MSP说哪些是参与网络的给定组织的成员。

密码学上,公开密钥基础建设(PKI)借着数字证书认证机构(CA)将用户的个人身份跟公开密钥链接在一起。

官方参考:关键概念 — hyperledger-fabricdocs master 文档

交易流程 — hyperledger-fabricdocs master 文档

Hyperledger Fabric 支持私有网络(使用通道)是很重要的,因为网络是相对开放的。

在fabric中,组织是承担着数据信用责任的区块链系统参与方。每个组织都有自己的证书管理即CA, 及MSP, CA给每个peer颁发证书,MSP授权,赋予相应权限策略。组织都有一个证书颁发机构,该机构为其组织的节点、管理员、组织定义和应用程序生成了必要的证书。

交易日志是由排序服务peer节点分发给同一channel的其他peer节点。而状态数据是由验证和committer给装本然后更新状态。

排序服务从应用程序中收集经过背书的交易,并将它们排序到交易块中,这些交易块随后分发到通道中的每个peer节点。在每个提交节点上,记录交易,并适当更新账本的本地副本

安装、批准和提交链码的过程被称为链码的“生命周期”。

在生产场景中,排序服务应至少包含三个节点。不同的排序节点为每个通道服务。

Fabric 策略表示成员如何同意或者拒绝网络、通道或者智能合约的变更。

链码包中的每一个智能合约都有一个背书策略。

每个组织都有自己的应用通道。

SDK 的作用是将交易提案打包成合适的格式(gRPC 使用的 protocol buffer)以及根据用户的密钥对交易提案生成签名。

隐私:就是参与者单独创建一个通道,使得只有它指定的节点可以参与共享账本副本

  • 16
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值