引言

随着区块链技术的日趋成熟,更多企业开始探索区块链的实际使用场景。HyperLedger Fabric(下称Fabric),由Apache社区开发的开源的,企业级的,带权限的分布式账本平台,被广泛应用于学术研究和企业应用领域。其查询技术是使用和开发Fabric不可或缺的一项功能模块,但由于区块链技术的去中心化特性,其查询机制的设计和常规分布式系统存在较大差异,并且存在一定的技术理解门槛。目前官方文档或相关资料对查询章节的描述通常与其它技术(如系统部署,更新等)一同描述,没有单独对查询进行描述,或缺乏原理层面的系统描述,难以理解和运用。本文较为详细的描述Fabric查询的设计原理,可作为生产和开发中系统设计的参考依据。

文章分为4个部分。首先介绍于查询相关的Fabric基础名词概念,接着介绍Fabric的经历的各查询过程以及查询对象的存储结构,最后通过描述区块链的系统结构以描述Fabric的一种特殊查询机制——跨链查询。

基本概念[1]

  • 节点(Peer):一个维护一个账本的网络实体。节点会运行链码容器以实现对账本的读写操作。节点由Fabric内的成员持有和维护。
  • 通道(Channel):在Fabric中,通道是私有区块链,可实现数据隔离和保证机密性。部署在一个通道内的账本由通道中的所有节点之间共享,并且交易方必须通过通道进行身份验证才能与通道内节点进行交互。
  • 链码(Chaincode):在Fabric中,链码即智能合约。一个链码就是由客户端应用程序调用的代码,它可以通过事务(Transaction)改变通道的状态。在Fabric中,用户不能直接访问通道,只能通过链码改变通道的状态。
  • 组织(Organization):节点以组织的身份加入通道,一个组织可以有一个或多个节点。

查询过程

在Fabric中,查询过程涉及区块链五层协议[2]中的应用层,合约层和存储层。其查询过程如图所示。当用户需要执行查询操作时,首先在合约层编写用户链码,一份完整的用户链码应包含对多个对事务的读写函数,每个读写函数由判断逻辑和系统链码组成。系统链码由Fabric封装了更改通道记录的函数,包括处理事务的验证链码(VSCC)和查询事务的查询系统链码(QSCC)。对于查询系统链码,截止2.2版本,Fabric已经实现了K-V查询,范围查询和溯源查询三种基本功能,以及区块链中特有的跨链码查询和跨通道查询功能。由用户编写的用户链码会被分别部署在Fabric的各个节点上,并向节点上的更下一层存储层查询用户请求数据。当链码部署完毕后,查询者可以通过调用RESTAPI以HTTP协议方式向节点请求调用链码,或者可以将RESTAPI封装为基于去中心化的存储的应用程序。

查询对象

如图所示,我们可以查询对象分解为文件系统的数据库两层架构。文件系统记录以区块的链式结构记录数据的存储信息,每个区块包含记录当前区块信息的区块头和元数据,以及若干事务组成的区块体。为了加速查询或实现特定查询功能,Fabric将区块信息分类提取存储在KV数据库中。目前,Fabric支持LevelDB [3]和CouchDB [4]两种数据库。

  • 状态数据库:维护最新的KV状态,这些状态会根据最新的区块事物进行修改。状态数据库支持基于键的查询,组合键值对查询和键范围查询。
  • 键历史索引:记录键的值历史变更状态,用于溯源查询。
  • 块索引:存储块对应的Hash值和块在文件系统中的位置;存储块编号与其在文件系统中的位置;存储事务ID与其在文件系统中的位置。通过以上三种方式实现对区块和事务的快速定位。

特殊查询机制

在实际运用中可能出现不同业务的交叉应用场景,对于传统分布式系统而言,这代表单次查询可能设计多个数据库的交互。由于Fabric采用账本的形式记录数据,并且应用与账本的交互通过链码实现,跨数据库查询在Fabric中转变为跨链码查询。为了更好的理解链码间的交互查询机制,我们需要先了解Fabric中链码,组织,信道和节点的关系。下图展示了查询角度下,Fabric中各模块的简化交互方式。

模块交互遵守以下规则:

  • 链码部署在节点上,且只有已部署链码节点才能请求读写通道数据。
  • 节点以组织的形式加入通道,一个节点只能加入一个组织,但一个组织可以同时加入多个通道。
  • 每个通道中相同的链码共同维护一份完整的的交易状态视图,不同链码之间信息不共享,不同通道之间的链码信息不共享。

基于上述规则,Fabric的跨链码和跨通道通信需要由节点完成。在节点部署的用户链码中通过调用系统链码实现跨链码调用。在同一节点上,若部署了同通道内的链码(如Peer3在Channel1的Chaincode1和Chaincode2),Fabric允许直接在用户链码中调用和修改目标链码维护的视图。若链码处于不同通道中(如Peer3在Channel1的Chaincode1和在Channel2的Chaincode2),若当前节点所在组织同时加入了链码所在通道,并且部署了需要跨通道交互的的链码,Fabric虽然也提供跨链码调用,但只能返回调用结果,不能对调用目标进行更改。

参考文献

[1] Hyperledger Fabric [G/OL] https://hyperledger-fabric.readthedocs.io/en/latest/glossary.html

[2] 袁勇, 王飞跃.  区块链技术发展现状与展望.[J] 自动化学报 42.4 (2016): 481-494

[3] LevelDB [G/OL] https://github.com/google/leveldb

[4] CouchDB [G/OL] https://couchdb.apache.org/

HyperLedger Fabric 查询机制相关推荐

  1. Hyperledger Fabric共识机制

    原文地址:https://zhuanlan.zhihu.com/p/25358777 共识 交易必须按照发生的顺序写入分类帐,尽管它们可能位于网络中不同的参与者组之间.为了实现这一点,必须建立交易的顺 ...

  2. HyperLedger Fabric Introduction——区块链超级账本介绍

    介绍 HyperLedger Fabric是一个基于模块化架构的分布式账本解决方案平台,它拥有深度加密.便捷扩展.部署灵活及可插拔等特性.它设计之初的目的是支持不同组件的可插拔实现,并适应整个经济生态 ...

  3. Hyperledger Fabric介绍

    转载地址 https://blog.csdn.net/xiaonu123/article/details/81006936 简介 Hyperledger介绍 超级账本(Hyperledger)项目是首 ...

  4. 超级账本(Hyperledger Fabric):基本架构及运作机制

    区块链大致可分为公有链(典型代表为比特币和以太坊)和联盟链(私有链).联盟链是现有中心化商业团体联盟之间(或团体内部)进行商业活动的手段和渠道. HyperledgerFabric是由IBM 牵头发起 ...

  5. Hyperledger Fabric CouchDB 查询

    Hyperledger Fabric(HLF) 使用一个KV数据库存储它的状态.这个对象存储包含可以使用它的键查询的二进制数据.fabric 默认使用LevelDB存储,它包含在 peer 进程中. ...

  6. Hyperledger Fabric PHP SDK

    Hyperledger Fabric PHP SDK是社区提供的用于Hyperledger Fabric区块链应用开发的软件包,其目的在于为PHP应用提供访问Hyperledger Farbic区块链 ...

  7. Hyperledger Fabric(术语表)

    术语表 术语很重要,以便所有Hyperledger Fabric用户和开发人员都同意每个特定术语的含义,例如,什么是智能合约.文档将根据需要引用术语表,但如果你愿意,可以随意阅读整个内容:这很有启发性 ...

  8. 手把手教你走进Hyperledger Fabric

    现在,Blockchain是业内新的热门话题.但是,寻找良好的资源来学习这项引人入胜的技术并不是一件容易的事.为了让其他人更容易学习,我开始在区块链和分布式分类帐技术(DLT)平台领域开展一系列工作. ...

  9. fabric sdk php,Hyperledger Fabric PHP SDK

    Hyperledger Fabric PHP SDK是社区提供的用于Hyperledger Fabric区块链应用开发的软件包,其目的在于为PHP应用提供访问Hyperledger Farbic区块链 ...

  10. Hyperledger Fabric on SAP Cloud Platform(SAP云平台上的超级账本简介)

    今天的文章来自Wen Aviva, 坐Jerry面对面的程序媛. Jerry在之前的公众号文章<在SAP UI中使用纯JavaScript显示产品主数据的3D模型视图>已经介绍过Aviva ...

最新文章

  1. soul一直显示正在登录聊天服务器,soul这个软件,为什么有些人在玩的时间很久以后(两百天以上),就不会再主动和其他人打招呼了?...
  2. api网关选型_如何轻松打造百亿流量API网关?看这一篇就够了(下)
  3. C语言函数集(十一)
  4. java怎么用柱形图_java绘制柱形图
  5. 【C语言项目】贪吃蛇游戏(上)
  6. 高效的Java集合框架GNU Trove的使用
  7. 网站主机 技术+类型
  8. dev 命令行参数调用_在Linux系统上使用简单命令行创建高强度的预共享密钥
  9. 关于动作捕捉动画一些记录
  10. python模拟别人说话的声音_现在你可以通过深度学习用别人的声音来说话了
  11. 【学习笔记—eat_pytorch_in_20_days】结构化数据建模流程范例
  12. 图片转Excel表格 文字识别 表格识别
  13. 嵌入式linux gps,嵌入式Linux平台的GPS数据采集
  14. IP 地址 与硬件地址
  15. Netty Websocket多人多房间聊天室Demo
  16. Beautiful Songs
  17. php6基因突变,基因突变中那些“披着狼皮的羊” 很多“致命性”基因突变正在被证实无害...
  18. 这是你幻想中的女友吗
  19. 巡线机器人 - PID控制 - 安卓设置
  20. SSH密钥登录远程主机

热门文章

  1. Spring Boot入门教程(四):配置文件
  2. 网贷平台倒闭了钱要还吗?网贷平台倒闭了怎么还钱
  3. 正态总体参数的假设检验
  4. Linux服务器搭建——VMware14安装
  5. IM学习-认识即时通讯IM(一)
  6. 蓝牙协议之配对和绑定学习笔记
  7. 【全网首发】电脑搜索不到部分WiFi怎么办?亲测有效!
  8. pytorch学习(二):mnist手写数字数据集训练和测试(一)mnist数据集分析
  9. python自动化测试登录_自动化测试(二)如何用python写一个用户登陆功能
  10. 为响应国家号召1+X证书Web前端开发最新考试模拟题