Hyperledger Fabric: A Distributed Operating System for                                    Permissioned Blockchains

出处:arvix 17 Apr 2018

下载链接:https://arxiv.org/pdf/1801.10228.pdf

目录

Abstract

Introduction

Background

Architecture

不足

优势

Fabric Components

Evaluation

思考


Abstract

Fabric是一个可以部署和操作许可区块链的模块化、可扩展的开源系统。

Fabric是第一个运行去中心化程序的可扩展区块链系统,它支持模块化的共识机制,允许系统针对特定的场景和信任模型进行定制,Fabric使用标准通用编程语言编写去中心化程序,不需要系统依赖本机的加密货币。不像一些区块链平台,智能合约的编写只能使用特定的编程语言、依赖加密货币。

Fabric使用灵活的成员身份概念来实现许可模型,该成员身份与行业标准身份管理集成在一起。基于此,Fabric介绍了一种新的区块链设计理念,并改进了区块链处理不确定性、资源浪费和性能攻击的方法。

在这篇论文中,介绍了Fabric的结构、设计决策的基本原理、它最突出的实现和去中心化程序编程模型。通过Bitcoin电子货币的基准测试和实现来评估Fabric,证明了在一些流行的部署配置中,fabric实现了超过每秒3500个交易的端对端吞吐量,在亚秒级的延迟可以扩展到超过100多个peers。

Introduction

区块链在设计弹性应用方面和状态机复制(SMR),当在一些方面存在拜占庭问题:(1)区块链不仅一个,它是多个去中心化应用并行运行;(2)区块链应用是动态部署的(3)程序代码是不受信任的,甚至是恶意的,针对这些问题需要一种新的设计。

order-execute框架:已有的智能合约区块链实现了主动复制,它就是一个共识协议或原子传播,一、对交易排序并传播给所有节点;二、每个结点按序执行交易。每个结点都执行每笔交易,并且交易是确定的。order-execute框架存在于现有的所有区块链系统,如公有链Ethereum(基于POW共识),私有链Tendermint、Chain、Quorum.

在此之前的许可链(私有链)存在许多缺陷,它来源于它未许可的关系或order-execute框架。(1)共识机制被硬编码到平台中;(2)交易验证的信任模型需要共识机制确认,并且不能适应智能合约的要求;(3)智能合约被不标准或特定场景的语言编写,阻碍了它的广泛适用性;(4)所有对等方按序执行交易限制了性能,采取复杂的操作阻止平台的DOS攻击;(5)每个智能合约运行在所有对等点,这与机密性不符。

本篇论文提出的Hyperledger Fabric是第一个去中心化的操作系统,Fabric的结构是一个新型的execute-order-validate范式,可以在不信任环境中去中心化的执行不信任代码。它将交易流分为三步,运行在系统的不同实体(1)执行一个交易并检查它的正确性,从而确定他(对应于其他区块链中的交易验证);(2)通过一个共识机制排序,而不管交易本身;(3)根据每一个特定应用的信任假设来进行交易验证,并且可以阻止由于并发导致的竞争。

这个设计与order-execute范式不同,Fabric在达成最终订单协议之前执行交易,他有两种复制方式:被动和主动。一、Fabric使用被动或主备复制的方式,这在分布式数据库中很常见,但是具有基于中间件的非对称更新处理,并移植到具有拜占庭错误的不受信任的环境。二、Fabric结合主动复制,即交易对账本状态的影响只有在他们总的顺序达成共识后才被写入,每一个对等方单独执行确定的验证步骤。总的来说,这个hybrid复制设计在拜占庭模式中混合了被动和主动复制,execute-order-validate范式,代表了Fabric框架中的主要创新,这些解决了前面提出的问题。

为了实现这个框架,Fabric包含以下组件的模块化构建块:(1)排序服务(Ordering Service),原子化的广播状态更新到对等点,建立交易顺序的共识;(2)成员关系服务提供者(MSP),负责使用加密的身份认证关联对等点,保持Fabric的许可特性;(3)点对点聊天服务(Gossip)(可选),通过排序服务传播块输出给所有对等点。(4)智能合约,在容器环境内运行以进行隔离,用标准的编程语言编写但不能直接访问账本状态;(5)每个对等点以仅附加区块链的形式本地维持一个账本,并作为最新状态的快照以键值存储。

Background

所有的区块链系统,不管是私有还是共有,都使用order-execute框架。区块链网络先使用共识机制排序交易,然后在所有节点顺序执行交易。比如基于Pow的区块链Ethereum,order-execute框架如图所示:

已有的私有链如Tendermint、Chain、Quorum,不管他们使用BFT共识还是其他的原子广播协议,它实际上还是使用的order-execute方法,和典型的主动SMR。

order-execute结构存在许多缺陷:(1)顺序执行,在所有节点上顺序执行交易限制了有效的吞吐量,DOS攻击损害了区块链的性能。为了解决这种问题,公有链对执行消费使用加密货币账户,比如Ethereum使用gas的概念,但这个对私有模型是不适用的,因为它没有本地加密货币账本。去中心化系统文献又提出了一个提高性能的方法,就是并行执行不相关的操作,但不幸的是,所有的方法仍然只能适用于有智能合约的区块链环境。(2)不确定性代码,另一个问题就是order-execute结构是一个不确定的交易。仅一个恶意目的创建的非确定性合约足够是整个区块链瘫痪。一个解决办法就是在区块链上过滤分散的操作,但他仍在被研究,实际用不太可能。(3)执行的机密性,根据公有链的构图,许多私有系统在所有节点运行所有智能合约,然而对私有链有特定使用场景要求私密性,虽然有加密技术实现了机密性,比如从数据加密到高级零知识证明和计算验证,但他带来了相当大的开销。已有的系统仍存在许多缺陷,如固定的信任模块、硬编码的共识机制等。我们认为区块链的关键属性是一致性、安全性和性能。

Architecture

Fabric是一个私有链的去中心化操作系统,他执行使用通用编程语言(如Go,Java,Node.js)编写的去中心化程序。他在仅追加复制的账本数据结构中安全的追踪执行历史,并且没有内置的加密货币。它的execute-order-validate区块链结构如图:

总而言之,Fabric的去中心化应用包含两个部分:(1)smart contract(智能合约),也叫作chaincode,他是去中心化应用的核心部分,并且可能是被不受信任的开发者写的。(2)endorsement policy(背书策略),他不能被不信任的应用开发者选择或修改,只有设计管理员才有权利修改。

Fabric区块链由一组形成网络的节点组成,如图所示,所有的节点都有一个MSP提供的身份。其中,(1)Clients提交交易文案去执行,然后广播交易排序;(2)Peers执行交易并验证,所有的peers都维持一个区块链账本,以hash链的形式记录交易和状态。不是所有的peers执行所有的交易,只有endorsing peers才可以;(3)OSN是所有构成ordering service的节点,ordering service在Fabric中建立了所有交易的排序,每个交易都包含了在执行阶段的状态更新和扩展计算,和endorsing peers的加密签名。Fabric支持多个区块链连接相同的排序服务(ordering service),这样每个区块链叫做频道(channel),并且它的成员可以有不同的对等点。

Fabric的交易流如图所示:

执行阶段(Execution Phase):在执行阶段,客户端签名并发送交易方案给一个或多个背书者(endorsers)。每个chaincode都通过背书策略隐型指定了一系列的背书者。背书者通过执行特定chaincode的操作来仿真交易方案。区块链的状态被PTM(peers transaction manager)以键值存储版本的形式维持,这个状态不能被另外一个chaincode直接访问,如果给定许可,可以在相同频道中调用。仿真的结果是:每个背书者产生一个writeset和readset,仿真之后,背书者加密签名一个消息,叫做背书(endorsement),然后把它发送给client。Client收集背书直到满足chaincode的背书策略,然后client产生一个交易把它发送给ordering service。

排序阶段(Ordering Phase),在排序阶段,每个频道给所有提交的交易建立整体排序,即原子广播式的对背书进行排序,并在交易中建立了共识。排序服务给节点提供了两个功能调用:(1)broadcast(tx),客户端调用该功能去广播一个任意的交易tx;(2)B<—deliver(s):客户端调用该方法使用非负序列数s去获得区块B。区块中包含一系列的交易[tx1,……,txk]和哈希链值h(h=s-1),即B=([tx1,……,txk],h)

验证阶段(Validation Phase),区块通过排序服务或者gossip传递给对等点。新区块验证阶段包含以下三步:(1)背书政策评估,并行出现在区块中所有交易。通过VSCC进行评估,如果不满足,则交易无效;(2)读写冲突检测,区块中的所有交易顺序执行,每个交易它比较readset中的键值版本,如果不匹配,则交易无效;(3)账本更新阶段,区块被附加到本地存储账本并且区块链状态改变。Frabric的账本包括所有的交易(也包括那些无效的)

Fabric是固定的信任错误模型,通常认为客户端是潜在的恶意者,节点都被放在一个组织内,同一组织内的所以节点互相信任,不同组织内节点不信任。

不足

在Fabric中,标准的背书策略是要求多个背书者产生相同的结果。如果在访问系统键时竞争激烈,客户端可能无法满足背书策略。

优势

在排序阶段(ordering phase)之前先执行交易是非常重要的,在Fabric中,一个不确定交易的chaincode只会影响他自己的操作,因为client没有获得足够多的背书(endorsement)。这是他区别于order-execute结构的一个优势,因为不确定操作会导致节点状态的不一致。并且容忍不确定执行也可以解决DOS攻击,因为背书者可以根据本地策略中止执行,如果他怀疑他是一个DOS攻击。

Fabric是第一个完全将共识从执行和验证中分离的区块链系统。

Fabric Components

Fabric使用Go语言编写,使用gRPC框架在clients、peers、orderers之间通信,一个对等点的组件如图所示:

成员关系服务提供者(MSP)维护系统中所有节点(clients、peers、OSNs)的身份标识,并发行证书用于认证和授权。构建区块链网络时,有两种模式:离线模式,CA生成身份标识并分配给所有节点,peers和orderers只能在离线模式中进行注册,client注册Fabric-CA提供在线模式,给他们提供加密证书。

排序服务(ordering service)管理多个channels(也就是区块链)。对每个频道,它提供以下服务:(1)原子广播在交易中建立排序;(2)频道重配置,当他的成员通过广播配置更新交易来修改频道;(3)访问控制(可选),配置使排序服务作为一个信任实体,限制交易广播和只能接收特定客户和对等点的区块。OSNs是对等点和原子广播中的一个代理。

节点通信(peer gossip),gossip组件的目标是:将状态转移到一个新加入的节点,以及长期断开的对等点。它利用组播方式来实现。gossip的通信层基于gRPC并且使用手动认证利用TLS。Gossip在系统中维护在线节点的最新成员关系视图,所有节点单独建立一个本地的关系视图。

账本(Ledger),ledger组件在每个节点长久维护一个账本和状态,存在于仿真、验证和账本更新阶段,同时它还包含一个区块存储和节点交易管理。Ledger的区块存储以仅附加文本的方式永久的存储交易区块。节点交易管理(PTM)以键-值版本的形式维护最新的状态信息。

链码执行(chaincode execution),链码在其他节点中被执行,并提供插件可以添加其他编程语言。链码和节点之间通过gRPC信息进行通信,节点不知道链码是用什么语言写的。但是系统链码可以直接运行在节点进程中。

配置和系统链码(configuration and system chaincode),Fabric通过频道配置和系统链码进行定制。配置区块维护频道的配置,它里面不存在交易。每个区块链开始于一个配置区块,这就是创世块,它用于启动频道。更新频道配置使用频道配置更新交易。应用链码使用ESCC和VSCC进行部署,选择则两个链码,可以验证ESCC的输出(背书)是VSCC输入的一部分。ESCC将交易提案和提案模拟结果作为输入,如果结果满足,ESCC做出响应(包括结果和背书)。VSCC将交易作为输入,并验证其是否有效。

Evaluation

由于没有标准的区块链测试标准,在该论文中,使用Fabric coin评估Fabric性能。

Fabric coin使用UTXO加密货币模式,并介绍了Fabcoin实现包含以下三个部分:(1)客户端钱包,每个Fabric客户端维护一个本地存储的钱包,对SPEND交易和MINT交易有不同的处理方式。(2)Fabcoin链码,每个对等点都运行Fabcoin的链码,对仿真进行交易并创建readset和writeset,这里只是对SPEND交易进行操作。(3)定制VSCC,使用该工具每个对等点可以验证Fabcoin交易,它在各自公钥下验证signs中的加密签名,并对SPEND和MINT交易分别进行验证,验证方法不同。但是VSCC验证不能解决双花问题,需要使用PTM验证解决双花问题,PTM验证进行read-write冲突检测。PTM验证中,当前版本信息存储在账本中,并匹配readset中的一个,因此,在第一个交易的货币状态版本已经改变后,第二个排序后的交易将会被认为无效。

思考

(1)Fabric是一个运行私有链的模块化、可扩展的去中心化操作系统,提出了一个新的区块链结构execute-order-validate,该结构与常用区块链结构相比,是将执行放在了交易排序之前,将共识机制模块化。

《Hyperledger Fabric: A Distributed Operating System for Permissioned Blockchains》笔记相关推荐

  1. 《信贷的逻辑与常识》笔记

    序 银行信贷风险管理的反思 现状与趋势 银行贷款的质量变化与经济周期.宏观调控政策等存在很高的相关性 现在银行不良贷款的增加主要是前几年经济快速增长时企业过度投资.银行过度放贷所带来的结果. 从历史情 ...

  2. AI公开课:19.02.27周逵(投资人)《AI时代的投资逻辑》课堂笔记以及个人感悟

    AI公开课:19.02.27周逵(投资人)<AI时代的投资逻辑>课堂笔记以及个人感悟 目录 课堂PPT图片 精彩语录 个人感悟 课堂PPT图片 精彩语录 更新中-- 文件图片已经丢失-- ...

  3. 人工智能入门算法逻辑回归学习笔记

    逻辑回归是一个非常经典的算法,其中也包含了非常多的细节,曾看到一句话:如果面试官问你熟悉哪个机器学习模型,可以说 SVM,但千万别说 LR,因为细节真的太多了. 秉持着精益求精的工匠精神不断对笔记进行 ...

  4. 【逻辑回归学习笔记】

    算法描述 1.逻辑回归要做的事就是寻找分界面实现二分类. 2.问题假设:对一堆三角形和正方形分类. 3.数据输入:已知正方形和三角形的坐标和标签. 4.算法过程: 知识储备 1.分类和回归 ①分类的目 ...

  5. 逻辑回归函数学习笔记

    继续逻辑回归学习,今日笔记记录. 1.逻辑回归和线性回归的关系:对逻辑回归的概率比取自然对数,则得到的是一个线性函数,推导过程如下. 首先,看逻辑回归的定义 其次,计算两个极端y/(1-y),其值为( ...

  6. 2.2 逻辑回归-机器学习笔记-斯坦福吴恩达教授

    逻辑回归 上一节我们知道,使用线性回归来处理 0/1 分类问题总是困难重重的,因此,人们定义了逻辑回归来完成 0/1 分类问题,逻辑一词也代表了是(1) 和 非(0). Sigmoid预测函数 在逻辑 ...

  7. LVM逻辑卷分区笔记

    磁盘的静态分区有其缺点:分区大小难评估,估计不准确,当分区空间不够用的时候,系统管理员可能需要先备份整个系统,清除磁盘空间,然后重新对磁盘进行分区,然后恢复磁盘数据到新分区,且需要停机一段时间进行恢复 ...

  8. 适合理工直男的钟平老师逻辑英语学习笔记

    一切的一切都只是套路!             --鲁迅 核心公式: En: (状语1) 主(定语1) 谓(状语2) (宾)(定语2) (状语1) Ch: (状语1) (定语1)主 (状语2)谓 (定 ...

  9. 【数字逻辑】学习笔记 第四章 Part2 常用组合逻辑电路与竞争、险象

    文章目录 一.常用组合逻辑电路 1. 译码器 (1) 二进制译码器 74LS138(3/8译码器) a. 一般符号和图形符号 b. 74LS138功能表 c. 两片 `74LS138` 构成 `4-1 ...

  10. 线性回归、逻辑回归学习笔记

    学习源代码 import numpy as np import matplotlib.pyplot as plt def true_fun(X): # 这是我们设定的真实函数,即ground trut ...

最新文章

  1. Spring AOP Capability and Goal
  2. python字符串转归类_pandas剪切:如何将分类标签转换为字符串(否则无法导出到Excel)?
  3. golang中的对称加密
  4. 从理念到实践跳跃式演进! 云的原生“免疫系统”如何有机作战?
  5. java redis hash_我爱java系列---【redis中如何存取hash类型的值(key field value)】
  6. Java 简单五子棋程序的实现
  7. 真正支配整个世界的十种算法
  8. 全文搜索引擎 Elasticsearch 安装
  9. XSRF(XSS+CSRF)
  10. setInterval()与clearInterval()的用法
  11. Python开发之用户密码存储
  12. 【机器学习系列】MCMC第三讲:理解MCMC前必先弄懂这两点
  13. 八种点云聚类方法(一)— DBSCAN
  14. 十二进制加计数器-20151112
  15. 使用VS Code插件Code Runner一键运行OpenSees
  16. leetcode【中等】781、森林中的兔子
  17. linkinfo.dll病毒 盗取 用户登陆 网页帐号,和密码
  18. 为了强调低电平有效,有时也将反相器图形符号中表示反相的小圆圈画在输入端,例如上图的左边一列反相器的画法
  19. 小马激活报错:已停止工作
  20. on后面使用and和where的区别

热门文章

  1. camera模组拆解记录
  2. 硬件设计:电源设计--DC/DC工作原理及芯片详解
  3. sub html编辑器,目前前端开发必备编辑器有哪几款呢?
  4. 全球与中国楼梯升降机租赁市场现状及未来发展趋势
  5. 不用中间变量交换两个数的值
  6. Create React App proxy配置
  7. 2020年低压电工报名考试及低压电工复审模拟考试
  8. vue的tap插件_Vue.js的RTF编辑器– Tiptap
  9. cloudera manager的简单使用
  10. 【DP基础】核电站问题