二维码

8.2 Fabric项目 - 数据结构 - 机器学习

1201 人阅读 | 时间:2021年01月15日 01:19
8.2 Fabric项目 - 数据结构 - 机器学习 #daohang ul li t,.reed .riqi,a.shangg,a.xiatt,a.shangg:hover,a.xiatt:hover,a.shang,a.xiat,a.shang:hover,a.xiat:hover,.reed-pinglun-anniu,span.now-page,#daohangs-around,#caidan-tubiao,#daohangs,#daohangs li,#btnPost{background-color:#D10B04;} .dinglanyou1 h3{border-bottom:3px solid #D10B04;} #dibuer{border-top:2px solid #D10B04;}.cebianlan .rongqi h3{border-bottom:1px solid #D10B04;} #edtSearch{border:1px solid #D10B04;} #daohang .zuo ul li{border-right:1px solid #;} #daohang ul li t a{border-top:1px solid #;border-right:1px solid #D10B04;} #daohang ul li t a:hover{border-right:1px solid #;} #daohang .you ul li a:hover,#daohang .zuo ul li a:hover,.reed-pinglun-anniu:hover{background-color:#;} a:hover,.reed h6 a:hover,#dibuer a:hover,.reed .riqiding,.cebianlan .rongqi li a:hover,#pinglun-liebiao ul.fubens li.depth-1 dl dd span.shu a,#pinglun-liebiao ul.fubens li.depth-1 dl dd span.huifuliuyan a:hover,.reed-biaoti h6 span{color:#D10B04;} .reed .kan a{color:#0A0AF5;}.reed .kan a:hover{color:#D10101;} @media screen and (max-width:1492px){a.shang,a.xiat{background:none;} a.xiat:hover,a.shang:hover{background-color:#f9f9f9;background-image:none;text-decoration:none;}} var _hmt = _hmt || [];(function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?b19db5ba3b437a9e8698d2bc8fc64334"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s);})(); var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?b19db5ba3b437a9e8698d2bc8fc64334"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?2d748c9763cfc72fb7d1ccab29f0770d"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?f6d451f3f1be23f3abf240c64c469c1b"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })();

当前位置:首页 » 区块链精品文章 » 正文

(function() { var s = "_" + Math.random().toString(36).slice(2); document.write('
'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646201", container: s }); })();
(function() { var s = "_" + Math.random().toString(36).slice(2); document.write('
'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646162", container: s }); })();

8.2 Fabric项目

1356 人参与  2018年09月30日 14:17  分类 : 区块链精品文章  评论

8.2.1 项目概述

Fabric(编织品)项目的目标是实现一个通用的权限区块链(Permissioned Chain)的底层基础框架。为了适用于不同的场合,采用模块化架构,提供可切换和可扩展的组件,包括共识算法、加密安全、数字资产、记录仓库、智能合约 和身份鉴权等服务。Fabric克服了比特币等公有链项目的缺陷,如吞吐量低、无隐私性、无最终确定性以及共识算法低效等,使得用户能够方便地开发商业应 用。

在超级账本联盟成立之前,IBM公司就已经开源了一个叫作“开放区块链”(Open Blockchain,OBC)项目。在联盟成立之后,IBM把OBC项目约44000行代码贡献给了Linux基金会,这部分代码成为了Fabric的 代码的主要组成部分。在2016年3月的一次黑客松编程活动中,Blockstream和数字资产两个成员公司把各自的区块链功能代码融合到OBC中,最 终建立了Fabric的雏形,也就是Fabric项目进入孵化阶段的基础代码。

8.2.2 应用场景

超级账本有个重要的设计原则是按照“用例驱动”(use case driven)的方式来实现的,所有功能都应该有对应的用例需求。鉴于超级账本是个通用型框架,无法预先确定将来所有的应用场景,因此,定义出部分典型的 用例,可使超级账本先满足这部分代表性的区块链应用需求,然后再用可替换模块来满足其他需求。目前,Fabric项目主要针对下面几种用例:金融资产管 存、公司行为、供应链、主数据管理以及分享经济。需要指出的是,这些用例并非一成不变,随着项目的推进,可能会有所调整和增减。

(1)金融资产管存

金融行业最关心的区块链应用估计是资产的分布式管存,因为把资产(如证券)数据存放在区块链网络后,资产的利益相关人 可以直接访问资产数据,而无需经过传统的中间人,可大幅度提高效率和节约成本。资产的交易可准实时地完成,交易的人员也能近乎实时地查询到相关资产信息。 资产利益人可赋予资产自动执行的业务规则,从而进一步降低运营成本。与公有区块链应用的较大区别是,金融资产及其相关的交易、业务规则通常是保密的,例 如,资产的余额只有持有人才能知道,其他人无法查看。

(2)公司行为

公司行为通常是上市公司发起的有关公司证券的事件,一般和股东有关,有时需要股东做适时的回应,例如要约收购、分红扩 股、收购合并等。不管有多少中间机构在处理的流程当中,公司需要及时地把事件的完整信息递交给所有股东。当股东作出某项决定后,该结果会实时处理或清算 (如发行新股等)。在整个事件处理过程中,应该保护股东的隐私,以确保投资者所作决定不受外界因素的左右。

(3)供应链

在供应链中,所有的参与者都通过区块链记录、追踪和共享各种数据,例如原材料来源、零部件检测结果以及货物的出处等。这些数据记录在区块链里,并贯穿于货物的生产、运输和销售等环节,从而提供深度回溯查询等核心功能。

(4)主数据管理

在很多的行业里,不同的组织之间往往共享一些主数据(Master Data)。例如,不同的移动运营商之间,需要共同维护一份发射机站地理位置的数据。虽然主数据不是交易类型的商业信息,但是作为各组织间唯一的全局性数 据,采用分布式的区块链来保证数据的质量和完整性具有非常重要的意义。

(5)分享经济

分享经济是指将闲置或没有被充分利用的实物资源分享出来,有偿地供陌生人暂时使用的一种商业模式。这种崭新的模式已经 延伸到日常生活的多个领域,包括交通、住宿、保健、零售、教育等行业。在分享经济的模式下,最需要解决的就是陌生人之间的信任问题,即资源的提供方和资源 的租用者,如何在缺乏信任的基础上安全地完成交易。目前主要的手段是通过分享经济平台来确保信任度。分布式区块链将是全新的一种去信任的方式,它不使用任 何中间平台,便可达到各方参与者可靠交易的目的。

8.2.3 项目架构

Fabric的逻辑架构如图8-1所示,底层由4种服务构成:身份服务、策略服务、区块链服务和智能合约服务。在这些服务的基础上为上层应用提供编程接口(API)、软件开发工具(SDK)以及命令行工具(CLI)。

8.2 Fabric项目 - 数据结构 - 机器学习

图8-1 Fabric项目的架构

1.身份服务

Fabric是权限区块链(Permissioned Chain),与比特币、以太坊这类匿名的无权限区块链网络最大区别就是具有身份识别能力。在Fabric账本各类事件和交易中,参与者和对象都具有明确 的身份信息。身份服务(Identity Service)管理着系统中各种实体、参与者和对象的身份信息,包括参与的组织、验证者和交易者,账本中的资产和智能合约,系统组件(网络、服务器)以 及运行环境等。验证者在Fabric网络建立的时候可以确定参加交易的权限级别。

2.策略服务

Fabric里面许多功能需要用策略(policy)方式驱动,因此有独立的策略服务来提供系统的策略配置和管理功 能。策略服务最重要的是访问控制和授权功能,Fabric的交易通常要求参与方具有相关权限才能进行。其他的策略还包括加入和退出网络的策略,身份的注 册、验证、隐私和保密的策略,共识策略等。

3.区块链服务

Fabric的区块链服务提供构建分布式账本最基础的能力,实现数据传输、共识达成等底层功能,并且提供发布/订阅的 事件管理框架,分布式账本内部的各种事件可通知到外部监听的应用。Fabric的区块链服务主要包含4个组件:P2P协议组件、分布式账本组件、共识管理 器组件和账本存储组件。

1)P2P协议组件主要提供区块链节点之间直接双向通信的能力,包括流式数据传输、流控制、多路复用等方面。P2P的通信机制利用了现有互联网的基础设施(防火墙、代理、路由器等),把数据封装成消息,采用点对点或组播等方式在节点间传送。

2)分布式账本组件管理着Fabric的区块链数据。区块链网络每个节点可以看作一个状态机,分布式账本组件维护着区 块链数据(即状态机的状态),维持各个状态机之间相同的状态。分布式账本组件的性能直接影响整个网络的吞吐量,因此在许多方面需要较高的处理效率,如计算 区块数据的哈希值,减少每个节点需要存储的最小数据量,补足节点之间差异的数据集等。

3)共识管理器组件在各种共识算法之上定义了抽象的接口,提供给其他Fabric组件使用。由于不同的应用场景会使用 不同的共识算法,Fabric的模块化架构能够支持可切换的共识模块,通过统一的抽象接口,共识管理器接收各种交易数据,然后根据共识算法来决定如何组织 和执行交易,在交易执行成功后,再更改区块链账本的数据。Fabric提供了PBFT共识算法的参考实现。

4)在区块链上保存大文件等数据是非常低效的操作,因此,通常大文档要存放在链外存储中。账本存储组件提供了链外数据的持久化能力,每个链外文档的哈希值可保存在链上,从而保证链外数据的完整性。

4.智能合约服务

Fabric的智能合约(smart contract)曾经称为链上代码(chaincode),其实质是在验证节点(validating node)上运行的分布式交易程序,用以自动执行特定的业务规则,最终会更新账本的状态。智能合约分为公开、保密和访问控制几种类型。公开合约可供任何一 个成员调用,保密合约只能由验证成员(validating member)发起,访问控制型合约允许某些批准过的成员调用。智能合约服务为合约代码提供安全的运行环境以及合约的生命周期管理。在具体实现中,可以采 用虚拟机或容器等技术,构造安全隔离的运行时。

5.应用编程接口

Fabric项目的目标是提供构建分布式账本的基本能力,如账本数据结构、智能合约执行环境、模块化框架,网络通信 等。用户可以在Fabric基础之上调用应用编程接口(API),实现丰富的应用逻辑,灵活易用的API将大大促进围绕Fabric的生态系统的发展。 Fabric的主接口采用REST API,基本与Fabric服务相对应,API分为身份、策略、区块链、交易(对应区块链服务)和智能合约等几类。为了方便应用开发,Fabric还提供 命令行接口(CLI),可覆盖部分API的功能,方便测试智能合约代码以及查询交易状态。

8.2.4 部署方式

Fabric的网络由几类节点组成:身份服务节点、验证节点(validating node)、非验证节点(Non-validating node)和若干个应用节点,如图8-2所示。

·身份服务节点:负责发放和管理用户及组织的身份,具体来说就是在注册、交易、传输过程中使用的各类数字证书,以及区块链相关的密钥。

·验证节点:创建和校验交易,并且维护智能合约的状态。在执行交易时,一般需要和其他多数的验证节点达成共识(取决于共识算法),然后才能更新本地的账本数据。每个验证节点在本地都保存一份账本的副本。

·非验证节点:主要是接收客户端的请求,组装交易,并发往验证节点处理,从这个角度看,非验证节点像交易预处理器,并不负责交易的实际执行。为了加速客户端的查询响应速度,非验证节点在本地也保留一份账本数据的拷贝。

·应用节点:主要提供用户端(例如浏览器或移动设备)的后台服务,在收到请求后,把交易请求直接发往(或经由非验证节点转发)验证节点处理。

8.2 Fabric项目 - 数据结构 - 机器学习

图8-2 Fabric的网络节点及拓扑

Fabric的部署方式按照实际需要可有多种形式。由于Fabric是联盟链,组成网络的节点分别属于不同的联盟成 员,只要这些节点可通过网络互相连接,每个成员能够选择自己节点的部署方式:既可把节点部署在自有的数据中心,也可把节点部署到公有云中。如果在云端部署 节点,需要更强的加密手段来防止公网潜在的恶意攻击。由于Fabric节点部署的多样性,规划的时候应该把通信延迟、网络故障、节点失效、网络恢复等因素 综合考虑在内,以符合应用的要求。

8.2.5 交易的执行

Fabric上的交易(transaction)分成两种:部署智能合约和执行智能合约,智能合约可以看作部署在账本 上的应用代码。Fabric客户端可以通过API提交应用代码给任意一个验证节点,如图8-3(a)所示。该验证节点在确认是有效的应用代码后,将该应用 同步到其他验证节点中。通过这种分发机制,应用的代码最终会在各个验证节点保存一份,如图8-3(b)所示。

应用的代码执行示意图如图8-4所示。步骤如下:

1)客户端发送执行请求给任意一个验证节点;

2)验证节点收到请求后,向本地账本(ledger)发送启动交易的指令;

3)验证节点创建隔离的运行环境,启动应用(智能合约)的代码;

4)应用执行过程中,更新本地账本的状态;

5)应用完成后,验证节点向本地账本确认交易;

6)验证节点向其他验证节点广播交易。

8.2 Fabric项目 - 数据结构 - 机器学习

图8-3 应用代码的发布过程

8.2 Fabric项目 - 数据结构 - 机器学习

图8-4 应用代码执行步骤

来源:我是码农,转载请保留出处和链接!

本文链接:http://www.54manong.com/?id=1008

(function() { var s = "_" + Math.random().toString(36).slice(2); document.write('
'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646208", container: s }); })();
(function() { var s = "_" + Math.random().toString(36).slice(2); document.write('
'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646147", container: s }); })();
window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdPic":"","bdStyle":"0","bdSize":"16"},"share":{},"image":{"viewList":["qzone","tsina","tqq","renren","weixin"],"viewText":"分享到:","viewSize":"16"},"selectShare":{"bdContainerClass":null,"bdSelectMiniList":["qzone","tsina","tqq","renren","weixin"]}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];
区块链是什么  

微信号:qq444848023    QQ号:444848023

加入【我是码农】QQ群:864689844(加群验证:我是码农)

<< 上一篇 下一篇 >>
(function() { var s = "_" + Math.random().toString(36).slice(2); document.write('
'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646186", container: s }); })();
(function() { var s = "_" + Math.random().toString(36).slice(2); document.write('
'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646175", container: s }); })();
搜索

网站分类

标签列表

最近发表

    (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https'){ bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else{ bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();

全站首页 | 数据结构 | 区块链| 大数据 | 机器学习 | 物联网和云计算 | 面试笔试

var cnzz_protocol = (("https:" == document.location.protocol) ? "https://" : "http://");document.write(unescape("%3Cspan id='cnzz_stat_icon_1276413723'%3E%3C/span%3E%3Cscript src='" + cnzz_protocol + "s23.cnzz.com/z_stat.php%3Fid%3D1276413723%26show%3Dpic1' type='text/javascript'%3E%3C/script%3E"));本站资源大部分来自互联网,版权归原作者所有!

jQuery(document).ready(function($){ /* prepend menu icon */ $('#daohangs-around').prepend('
'); /* toggle nav */ $("#caidan-tubiao").on("click", function(){ $("#daohangs").slideToggle(); $(this).toggleClass("active"); }); });

©著作权归作者所有:来自ZhiKuGroup博客作者没文化的原创作品,如需转载,请注明出处,否则将追究法律责任 来源:ZhiKuGroup博客,欢迎分享。

评论专区
  • 昵 称必填
  • 邮 箱选填
  • 网 址选填
◎已有 0 人评论
搜索
作者介绍
30天热门
×
×
本站会员尊享VIP特权,现在就加入我们吧!登录注册×
»
会员登录
新用户注册
×
会员注册
已有账号登录
×