2019-06-22

HyperLedger Fabric 模块入门

这篇博客作为最近一段时间对 hyperledger 官方文档学习的一个总结,主要归纳一下 hyperledger 中一些重要组件的作用和重要功能的流程。

Fabric概览

一个 hyperldger 应用包含了这几个模块, 客户端应用(applications),节点(peers),组织(orgnizations),排序节点(orderer),成员关系服务提供者(MSP),渠道(channel),账本(ledger),智能合约(smart contract)等模块。
一个 Hyperledger 应用的大致流程主要是以下几个步骤 :

  • 应用(application )发起一个请求(proposal)到 hyperledger 网络中,这个请求将被网络中指定的节点(peer)所验证并执行对应的链代码(chaincode)
  • 网络中的节点(peers)需要提前安装(install)对应的链代码(chaincode),并在节点所属的渠道(channel)中进行初始化(instantiate)才能为客户端应用所调用。(应用是怎么确保请求数据为有权限的节点所接受并执行相应的 chaincode 逻辑???
  • 节点将根据请求数据作为输入的参数,调用 chaincode 执行相应的逻辑并封装成一个请求响应(proposal response)返回给客户端应用。 此时执行的逻辑并不会更改节点本地的账本(ledger)的状态
  • 客户端接收到多个节点(peers)返回的请求响应数据,并把这些数据封装成一个交易对象(transaction),发送给网络中的排序节点(orderer)
  • 网络中的排序节点(orderer)在接收到交易对象后,将通过 MSP 等对交易信息进行验证并排序,并将来自不同应用的交易对象进行排序,打包成块(block),并将打包的块分发(distribute)到渠道中的各个节点上进行验证。
  • 当节点验证块中的交易数据后,将会更新自己本地维护的账本(ledger)的副本数据,并通过响应的通知机制通知客户端应用请求已被加入到账本中

这是一个 hyperldger 应用中大致的交易流程。接下来回顾一下在这个过程中将涉及到的一些模块组件。

身份 (Identity)

身份信息决定了一个角色在 hyperledger 网络中对网络资源和信息的访问权限。hyperledger 定义的原则(principle),即是身份和其附带的属性信息所构成。
这涉及到的两个知识点,包括 PKI 和 MSP, 在官方文档的例子中,PKI 就像提供了一张可用身份信息的列表,而 MSP 则决定了在这个列表中,有哪些身份信息是可以参与到网络中指定的机构中的。
PKI,即 public key infrastructure, 包含了

  1. 向机构分发数字证书(digital certificate)的证书机构(Certificate Authority),机构通过数字证书,来向其他机构验证自己在网络中的身份信息。
  2. 一个 CRL ,certificate revocation list,废除证书列表,通过这个列表可以查询到已经不再使用的列表 (这个和证书过期是不太一样的)。
  3. 一个公钥(public key)和私钥(private key)的架构。
    这里注意的是,证书机构 (ca),是可以分成根机构(Root CA)和中间机构(Intermediate CA)的。根机构可以通过向中间机构签发证书的形式拓展下级中间机构,下级中间机构还可以继续拓展自己的中间机构从而形成一条证书机构连。因此,一个证书机构要么是一个根机构,要么就是可以通过机构链回溯到根机构的中间机构。

链代码(ChainCode)和账本(Ledger)

ChainCode 和 Ledger ,构成了 Hyperledger Fabric 网络中的核心。
ChainCode 和合约 (Contract)的关系,可以理解为一个 ChainCode 包含了多个 Contract, Contract 包含了控制交易的逻辑,而 ChainCode 则负责打包 Contract 并将其部署到网络节点上并为客户端应用所调用。

账本包含了两个独立的模块,一个是区块链(Blockchain),这个是存储了整个不可被改变的交易历史的数据结构,和一个全局状态(world state),保存了由历史交易产生的状态的当前的值,通过这个模块,可以直接查询到账本中的当前状态值而不同通过回溯整个账本去计算。

这里涉及到一个认证策略(endorsement policy), 认证策略是关联在每一个 chaincode 中,并应用到所有 chaincode 所包含的 contract 中的,其代表的是一个由该合约所产生的交易必须要经过网络中指定的机构( organization)的签名才能被网络标志位有效的交易。

注意,所有的由排序节点分发的块都会被拼接到网络中的账本(ledger)中,不管是有效的还是无效的,只是增加了一个有效和无效的标志

排序服务(Ordering Service)

排序节点的引入是为了解决分布式区块链中,例如以太坊或者比特币这种没有权限限制的网络中,由于各个节点同时参与交易的排序和块的打包,最终可能导致分叉(fork)的情况。多个排序节点共同构成一个排序服务。

  • 排序节点和通道配置

排序节点的另一个作用就是维护一个允许创建渠道(channel)的组织列表,这个列表即所说的联盟(consortium),这里列表是保存在排序系统渠道配置(orderer system channel 或
ordering system channel)中的。默认这个列表和列表依赖的配置,只能被系统管理员修改。

排序节点也限制了对各个通道的读,写和配置的权限。修改一个通道的配置元素需要对应于创建时所对应的政策和管理员设置。一个配置事务(Configuration Transaction)需要经过排序节点的验证后,才能被分发到渠道中的节点中,最终才能被渠道中的节点所验证并执行。

  • 排序节点和身份验证

与区块链网络交互的所有内容(包括peer,application,admin和排序节点)都会从其数字证书及其成员服务提供商(MSP)定义中获取对应的组织身份。

和 peer 节点一样, 排序节点也属于一个组织机构

  • 排序节点在交易流程中的作用
  1. 一个应用在需要对网络中的账本进行修改的时候,首先请求网络中部署了智能合约的节点,
    获取对应的请求响应(proposal response),在将这些返回的响应传递给排序节点进行验证,打包和分发

  2. 排序节点在接收到应用的请求数据时,对来自各个应用的交易进行验证,并对其排序并打包到一个块中,之后将打包的数据分发到通道中。

  3. 排序节点所连接的 peer 节点,在接收到排序节点分发的块之后,对其进行验证,并最终更新到当前节点保存的通道中的账本的副本中,并返回响应给请求的应用。

Fabric 提供了 solo, Raft 和 Kafka 模式的排序服务的实现。具体可查看官网解释

成员关系(Membership)

在 HyperLedger Fabric 中,PKI 提供了一个可验证的身份信息,这些身份信息可以用来验证节点是否网络中的被信任的成员。

而这就是MSP(Membership Service Provider)所做的事情。MSP验证了哪个根证书机构(Root CA)或者中间证书机构(Intermediate CA)可以用来定义一个组织的成员关系。此外,MSP还定义了一个成员在一个网络中所扮演的角色并设置在了网络或者渠道中的访问权限(例如:读,写)。

MSP的配置被广播到所有MSP所代表的组织的成员所参与的通道中,这个称为渠道MSP(Channel MSP)。与此同时,像节点和排序节点,也会维护一个MSP,用于验证当前通道之外的成员信息,来定义对特定资源的访问权限(例如:是否可以在节点上部署ChainCode)。

本地和渠道MSP之间的关键区别不在于它们如何运作 - 都是将身份转变为角色 - 而是他们的作用范围。

MSP 大致分为四种:

  • 网络MSP :定义了网络中的成员
  • 通道MSP :定义了通道中的成员
  • 节点MSP :只用于定义该MSP的节点中,最常见的使用场景是 chaincode 在节点中的安装
  • 排序节点MSP :只用于定义该MSP的节点中,用于列举信任的节点和角色

成员关系的验证,除了 CA 和 MSP 之外,还包括了其他的组件。


MSP架构

功能描述参考官网对 Membership 的详述

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容