参考书籍:《深度探索区块链:Hyperledger技术与应用》 @著 张增骏 董宁 朱轩彤 陈剑雄
1. 概述Hyperledger Fabric 是一种通用的区块链技术,设计目标是利用成熟的技术实现 分布式账本(Distributed Ledger Technology,DLT)。HyperLedger Fabric有以下的特点
模块化插件:很多的功能模块是可插拔的(CA、共识算法、状态数据库存储、ESCC、VSCC、BCCSP),提供提供了通用的接口,和默认的实现。通过接口也方便了拓展。 充分利用容器技术:不仅是节点使用容器作为运行环境,链码也是在容器中运行的。应用程序和外部系统不能直接操作链码,必须通过背书节点提供的接口转发给链码执行操作。因为容器之间是隔离的 所以链码也不会影响背书节点。 可拓展性:在1.0的版本中 peer节点角色有 背书节点、排序服务节点、记账节点、leader节点等。不同的角色有不同的功能,节点可以加入到不同的channel中,链码可以运行在不同的节点上,这样可以更好的提升执行的效率和吞吐量。 安全性:Fabric提供的是带有授权的区块链网络,节点间共同维护成员信息,MSP(Member Service Provider)验证模块 授权过的用户才能使用区块链网络的功能。多链和多通道的设计可以实现数据的隔离,也提供了应用程序与链码之间的安全通道,实现了隐私保护。 2. 系统逻辑架构
上图是fabric1.0的系统逻辑架构图。
fabric提供了标准的gRPC接口,在API的基础上封装了不同语言的SDK,区块链强一致性的要求导致各个节点之间达成共识需要花费时间,所以应用程序采用异步通信的方式来开发,事件模块可以在触发区块链事件或者链码事件的时候执行预先定义好的回调函数。
用户登记并注册后,获取到用户的注册证书(ECert),其他的所有操作都要与用户证书关联的私钥进行签名,消息接收方回先验签,再进一步处理消息。网络节点同样会用到证书,比如系统启动和网络节点的管理都会对用户进行认证和授权。
2.1.2 账本管理授权的用户是可以查询账本数据的,可以通过多种方式查询。博客根据区块号查询、根据区块哈希值查询、根据交易号查询 还可以根据通道名称获取查询区块信息
2.1.3 交易管理账本数据只有通过交易才能执行更新,应用程序通过交易管理提交交易提案(proposal)并获取到交易背书(Endorsement),再给排序服务节点提交交易,然后排序服务节点将交易打包成区块。SDK提供接口,利用用户证书生产交易号,背书节点和记账节点都会检查是否有重复交易。
2.1.4 智能合约实现“可编程的账本”,通过Chaincode(链码)执行提交交易。实现基于区块链的智能合约业务逻辑,只有只能合约才能更新账本数据,其他模块不能直接修改数据。
2.2 从底层角度应该关注的要素 2.2.1 成员管理MSP(Membership Service Provider)对成员管理进行了抽象,每个MSP都会建立一套根信任证书(Root of Trust Cerificate)体系,利用PKI(Public Key Infrastructure)对成员身份进行认证,验证成员用户提交请求的前面。结合Fabric-CA或者第三方CA系统,提供成员注册功能,并对成员身份证书进行管理,例如,证书新增 、撤销。注册的证书分为注册证书(ECert)、交易证书(TCert)、和TLS证书,他们分别用于用户身份、交易签名 和 TLS传输。
2.2.2 共识服务在分布式环境下,要实现同一个链上的不同节点之间区块的一致性,同事要保证区块里的交易有效和有序,共识机制分为三个阶段,客户端向背书节点提交交易预案进行签名背书,客户端将背书后的交易提交给排序服务节点进行交易排序,排序服务节点生成区块后广播给记账节点验证交易,写入本地账本。网络节点的P2P协议采用的是基于Gossip的数据分发,以同一组织为传播范围来同步数据。提高传输效率。
2.2.3 链码服务只能合约的实现依赖于安全的执行环境,确保安全的执行过程和用户数据的隔离。Fabric通过Docker来管理普通的链码,确保了沙箱环境。支持多种语言编写链码。
2.2.4 安全和密码服务安全问题是企业级的区块链所关心的问题,尤其是在关注国家安全的项目中,其底层的密码学支持尤为重要,Fabric定义了 BCCSP(Blockchain Cryptographic Service Provider),,使其实现 秘钥生产、哈希运算、签名验签、加密解密等功能。BCCSP是一个接口,其默认实现为国标算法。
3 网络节点架构节点有多种类型,cli 、 peer 、order、ca
3.1 客户端-cli (应用程序、SDK、命令行工具)客户端或者应用程序 是用户操作的实体,它必须连接到一个peer节点或者一个orderer及诶单上与区块链通讯。客户端向背书节点提交交易预案当收集到足够的背书后,向orderer节点提交交易。orderer节点进行交易排序,并打包成区块广播到网络中供其他记账节点验证 记账。
3.2 节点-peer (Anchor、Endorser、Committer)所有的peer节点都是Committer(记账)节点。负责验证从排序服务节点获取到的交易。
维护状态数据和账本副本。部分拥有背书角色的peer节点会对交易提案进行验证、背书签名。背书节点是动态的角色,与具体的链码绑定。每个链码示例化的时候会设定背书策略。指定哪些节点背书后 交易才会有效。也只有在应用程序向它发起交易背书请求时它才是背书节点,其他情况下 都是记账节点。只负责交易验证和记账。
还有一种主节点(leader peer)。代表是和orderer节点通讯的节点。赋值从排序服务节点获取最新的区块数据并在组织内部同步。可以强制设置主节点 也可以动态选举。
一个peer可以有多个角色共存
排序服务节点(Ordering Service Provider或者Orderer) 接收包含背书签名的交易。对未打包的交易进行排序生成区块 广播给peer节点验证记账。排序服务节点提供的是原子广播。保证同一个连上的节点获取到的信息是相同的。并且有相同的逻辑顺序。
排序服务的多通道(MultiChannel)保证了数据的隔离,同一个链上的peer节点才能访问连上的数据。
orderer节点早fabric1.0版本可以选择solo和kafka两种实现方式。
CA节点是Fabric的证书颁发机构。有服务器和客户端组成。CA节点接收客户端发起的注册申请,返回注册密码用于用户登录以便于获取身份证书。在区块链网络上所有的操作都需要身份认证。CA是可选的,可以使用其他成熟的第三方CA颁发证书。
3.5 网络拓扑