介绍

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

HyperLedger Fabric与其它的区块链平台解决方案相比,提供了一种独特的扩展便捷和灵活部署的架构。它更多的适用于联盟链形式,即适合企业级之间的区块链联盟方向,建立在可信任的基础上。如果是企业级区块链部署的话,建议可以采用HyperLedger Fabric提供的方案。

首次接触HyperLedger Fabric的用户可以从下文的具体介绍开始,以了解区块链的工作原理和HyperLedger Fabric特定的特性及组件。

如果通过后续文章熟悉了区块链及HyperLedger Fabric的结构原理,那么就可以开始正式使用HyperLedger Fabric搭建属于你自己的平台,可以参考官网的Getting Started,并且从官网提供的示例中学习技术规范和api等。

什么是区块链?

一个分布式账本

区块链网络的核心是一个分布式账本,记录所有在网络上发生的交易。

区块链中账本会被所有网络中的参与者复制到本地,且每一个参与者都在对账本进行维护协作,因此它是完全去中心化的。

除了去中心化外,还使用了加密技术,每一个区块都有唯一的hash,即便是通过网络将账本复制到本地应用服务器中也无法篡改其中的内容。这种不可篡改的特性使得信息具备可追溯的能力,因为所有的参与者在提交信息后都无法改变,都会在区块中留存记录,这也是区块链有时被称作证明系统的原因。

智能合约

为了支持信息更新的一致性,并支持完整的账本功能(包括但不限于交易、查询等),区块链网络通过使用智能合约来约束和规范对账本的访问及变更。

在智能合约中封装了信息处理的完整方案,以此来尽量简化整个网络的信息交易。智能合约通过编写可以被升级,通过升级来丰富其功能并增强其对事务的处理能力。所有的参与者都可以按照智能合约中的约定自动执行相关事务处理操作。

例如,一份智能合约可以规定货物运输的成本,成本根据货物到达的时间而变化。在双方同意的条件下,当收到货物时,根据智能合约中约定的资金会自动地转手。

共识

保持账本中发生的交易在整个网络中同步的过程,并确保只有当交易得到拥有决策权力的参与者(背书方或符合背书条件)批准时才会更新,并且当所有网络账本进行更新时,它们以相同的顺序更新相同的事务,这称为共识。

通过对区块链的了解更加深入,以后会学到更多关于账本、智能合约和共识的知识。就目前而言,将区块链视为一个共享的、复制的交易系统就足够了,它通过智能合约进行更新,并通过一个叫做共识的协作过程保持一致。

区块链有什么用?

当前系统记录

当今的交易网络只是稍微更新的网络版本,即本地存储记录变更为由第三方中介的多账本记录方案(但各家账本内容仅与自身相关),该记录方式自从商业记录被保存以来就已经存在了。业务网络的成员彼此之间进行交易,但他们保持各自的交易记录。而他们所做的事情——无论是16世纪的佛兰德还是今天的证券——都必须在每次出售的时候确定他们的出处,以确保出售某件物品的企业拥有一串头衔(合法记录)来证明他们的所有权。

如下图所示,即当前系统记录方案:

现代科技已经将这一过程从石片、纸质文件升级到硬盘和云平台,但底层结构是一样的。并不存在统一的系统来管理网络参与者的身份,因此对参与者的交易信息建立可靠的来源是一件非常费力且痛苦的事情,就好比证券交易的清理就需要耗费数日的时间来操作(世界上的证券交易量高达数万亿美元)。合同必须手动签署和执行,系统中的每个数据库都包含唯一的信息,因此代表了会出现的一个单点故障。

在当今信息共享的过程中,构建一个跨越商业网络的记录系统是不可能的,尽管可见性和信任的需求是清晰的。

区块链的区别

如果由“现代”交易系统替代哪些的无效率的方式,那么商业网络就有了在网络上建立身份、执行事务和存储数据的标准方法吗?如果想要建立一个资产的来源,并且可以通过查看曾经写过的事务列表,还不允许更改,那么这个来源就是可以被信任的,那该怎么实现呢?

设想中的商业网络如下图所示:

这就是一个区块链网络。每一个参与者都有自己本地复制的账本。除了账本信息被共享之外,更新账本的过程也被共享。不同于今天的系统,一个参与者的私人程序被用来更新他们的私人账本,一个区块链系统已经共享程序来更新共享的账本。

由于能够通过共享的账本来协调业务网络,区块链网络可以减少与私人信息和处理相关的时间、成本和风险,同时还能提高信任度和可见度。

通过上文介绍,现在应该大致了解区块链是什么,以及它为什么有用。还有很多其它重要的细节,但是它们都与信息和过程共享的基本思想有关。

HyperLedger Fabric是什么?

Linux基金会在2015年创立了HyperLedger Fabric,以推进跨行业的区块链技术。它没有宣布单一的区块链标准,而是鼓励一种合作的方式,通过社区进程开发区块链技术,知识产权鼓励开放开发,并随着时间的推移采用关键标准。

HyperLedger Fabric是HyperLedger上的区块链项目之一,就如同其它区块链技术一样,它有一个账本,使用智能合约,并且是一个由参与者管理他们的交易的系统。

与其它区块链系统最大的不同点在于HyperLedger Fabric是私有的,而且是被许可的。不是一个允许未知身份参与网络的开放的无许可的系统(要求协议验证事务并确保网络的安全),HyperLedger Fabric组织的成员可以通过一个Membership Service Provider(成员服务提供者即MSP)来注册。

HyperLedger Fabric还提供了几个可插拔的组件。账本数据可以以多种格式存储,一致的机制可以被转换和输出,并且支持不同的MSPs。

HyperLedger Fabric也提供了创建通道(channel)的能力,允许一组参与者创建一个单独的共同维护的交易账本。对于有些参与者可能是竞争对手的网络来说,这是一个特别重要的选择,他们不希望自己的每笔交易都能获得——例如,他们向一些参与者提供了一个特别的价格,而不是其他参与者。如果两个参与者形成一个通道(channel),那么这些参与者——以及其他参与者——都有该渠道的分类账本。

共享账本

HyperLedger Fabric有一个分类子系统,包括两个组成部分:世界状态(world state)和事务日志(transaction log)。每个参与者都有一份账本的副本到他们所属的每一个HyperLedger Fabric的网络上。

在给定的时间点上,世界状态(world state)组件描述了总账的状态。它是账本的数据库。事务日志(transaction log)组件记录所有导致当前世界状态值的事务。这是世界状态(world state)的更新历史。那么,账本是世界状态(world state)数据库和事务日志(transaction log)历史的组合。

该账本为世界状态(world state)提供了可替换的数据存储方案。默认情况下,这是一个LevelDB键值存储数据库。事务日志(transaction log)不需要是可插拔的,它只是记录了区块链网络使用的账本数据库之前和之后的值。

智能合约

HyperLedger Fabric的智能契约是用Chaincode编写的,并且当应用程序需要与账本进行交互时,被应用程序外部的应用程序调用。在大多数情况下, Chaincode只与总账的数据库组件交互,例如世界状态(例如,查询它),而不是事务日志。

Chaincode可以用几种编程语言实现,目前支持的chaincode编写的是GO语言,在今后的发行版中将会逐步新增Java和其它语言的支持。

隐私

根据网络的需要,企业对企业(B2B)网络的参与者可能对他们所共享的信息非常敏感。对其他网络来说,隐私不会成为首要关注的问题。

HyperLedger Fabric支持需要将隐私(使用通道)作为关键操作需求的网络,同时也是相对开放的网络。

共识

事务必须按照它们发生的顺序写在账本上,即使它们可能是网络中不同的参与者生成的。要做到这一点,必须建立事务的顺序,并且必须在账本中建立一种拒绝错误事务(或恶意的)的方法。

这是一个经过彻底研究的计算机科学领域,有很多方法可以实现它,每一个都有不同的权衡。例如,PBFT(拜占庭式容错)可以为文件副本提供一种机制,使其能够相互通信,从而保持每个副本的一致性,即使是在出现腐化的情况下。或者,在比特币中,排序是通过一个名为“挖矿”的过程来实现的,在这个过程中,竞争的计算机竞相解决一个加密难题,该难题定义了所有流程随后构建的顺序。

HyperLedger Fabric的设计使得网络启动者可以选择一种最能代表参与者之间关系的共识机制。就像隐私一样,需要有一系列的需求;从人际关系高度结构化的网络到更加对等的网络。

关于HyperLedger Fabric共识机制,它目前包括SOLO和Kafka,并将很快扩展到SBFT(简化的拜占庭式容错)。

如何学习HyperLedger Fabric

可以参考Hyperledger Fabric 1.0 从零开始,英文阅读能力好的可以直接通过官网的教程Getting Started

官网中提供了大量的教程,可以帮助了解一个区块链网络中的大多数关键组件,了解它们如何相互作用,还能在官网中得到代码等干货,并针对运行的区块链网络运行一些简单的事务。官网还为提供了一些教程,帮助可以考虑使用HyperLedger Fabric来操作一个区块链网络。

最新文章

  1. asp.net中关于Microsoft 信息完整性、隐私性等集成信息安全服务服务 integrated security=SSPI
  2. mysql 一些基础的语法和命令
  3. DP:Dollar Dayz(POJ 3181)
  4. OpenStack collectd的从零安装服务端
  5. tcpkill清除异常tcp连接
  6. 类库从自带的配置文件中获取信息(DLL文件 获取 DLL文件自带的配置信息) z
  7. android学习日记0--开发需要掌握的技能
  8. select函数的简单使用
  9. 升级后 VTE 类虚拟终端不工作
  10. SCAU Individual Contest #1
  11. 彻底了解构建 JSON 字符串的三种方式
  12. POI导入excel时读取excel数据的真实行数
  13. AndroidStudio_TextView
  14. day3-PyCharm 断点 调试模式
  15. Spring 集成 redistemplate
  16. node学习笔记5——post数据传递
  17. 关于Unity中场景视图的使用
  18. MySQL存储引擎通常有哪3种?各自分别有什么特点?应用场景是哪些?
  19. GAN作用——在我做安全的看来,就是做数据拟合、数据增强
  20. wpf dataGrid 选中行 失去焦点时 的背景颜色的更改

热门文章

  1. java开发收藏
  2. 这么说吧,java线程池的实现原理其实很简单
  3. springboot整合mybatis使用阿里(阿里连接池)和xml方式
  4. nginx转发tomcat请求转成https后页面不能下载apk文件而是直接打开
  5. web.config中配置数据库(多数据)连接的两种方式
  6. CenOS 6.5下 mysql自动备份
  7. 《On Writing Well 30th Anniversa》【PDF】下载
  8. ed命令
  9. Anaconda多版本Python管理
  10. 前端MVC Vue2学习总结(四)——条件渲染、列表渲染、事件处理器