Hyperledger Fabric 核心概念
Posted zlt2000
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hyperledger Fabric 核心概念相关的知识,希望对你有一定的参考价值。
一、说明
区块链是一个透明的,基于不可变模式的去中心化系统,核心就是一个分布式账本,记录网络上发生的所有交易。
区块链网络主要有三种类型:公共区块链、联盟区块链,以及私有区块链;我们熟知的比特币、以太坊这些数字货币其实就是属于公共区块链平台;
而今天要介绍的 Fabric
则是属于联盟链类型的;Fabric是一个企业级的分布式账本技术平台,也是目前应用最广泛的区块链项目。
本文将梳理区块链技术平台 Fabric
的核心概念与关键功能。
二、特点
Fabric与其他区块链平台对比有以下几个特点:
-
开源:它是Linux基金会旗下的一个重量级区块链平台。
-
身份管理:fabric和其他区块链系统的不同之处在于它是私有的,有准入资格授权的,并非一个公开的允许不明身份参与者进入网络的系统;它提供了一个成员身份服务,用于管理网络上的所有参与者和权限。
-
隐私和保密:有一个通道的概念提供了交易隐私和机密性,一个Fabric的网络可以创建多个通道,任何未正式授权的网络成员都没办法看到或者访问通道上的任何数据;可以理解为就是支持多租户,通道与通道之间的数据都是隔离的。
-
链码功能:智能合约在Fabric 中称之为链码,用于对账本的访问,例如写入交易信息,查询数据等等。
-
模块化设计:Fabric实现了模块化架构,例如身份、排序、链码等服务和功能,都是可选的可插拔的非常灵活。
三、系统功能
Fabric的一个功能架构图:
- 身份管理功能是通过PKI体系和CA模块来实现成员、权限还有证书的管理。
- 分布式账本就是区块链网络的核心功能,记录着所有的交易信息。
- 排序服务,类似一个裁判的角色,因为不同的交易顺序对最终的交易结果是有很大的影响的,所以这个排序服务主要是为了让所有的节点达成统一的共识,最终实现数据的一致性。
- 网络通信方面,节点与节点之间的点对点通信是基于grpc协议,然后再通过gossip算法来实现去中心化的广播,意思就是不需要中心节点,通过任意一个节点以一传十,十传百的方式来把消息散播到全网。
- 背书验证指的是背书策略,背书策略有很多种,例如我指定策略为大多数节点同意,意思就是一笔交易必需超过半数的节点都认证通过了,才能完成,这样就能有效的防御一些恶意的交易。
- 链码服务是一个独立的应用程序,运行在隔离的Docker容器中,在链码部署的时候会自动生成链码的Docker镜像。
四、组件逻辑关系
- 图中的浅蓝色方块
N
代表整个区块链网络; - 网络底部的
C
为通道
相当于是一个子链,一个区块链网络可以创建多个通道,通道与通道之间是数据隔离的,可以理解为是一个多租户系统; - 一个通道上面可以部署多个
Peer 节
点为图中蓝色方块P1
和P2
,区块链网络主要由Peer 节
点组成; - 每个
Peer 节
点上都有一份账本
的全量副本为红色的L1
,然后智能合约
是部署在每个节点上的为黄色S1
,一个节点可以部署多个智能合约
; - 最后区块链网络外面的白色方块A指的是访问区块链的
应用
,应用是通过通道来与节点上的账本进行交易的。
五、账本
账本是 Hyperledger Fabric 中的一个重要概念,它存储了有关业务对象的重要事实信息,其中既包括对象属性的当前值,也包括产生这些当前值的交易的历史。
账本由一个区块链(链)构成,并将不可变的、有序的记录存放在区块中;同时包含一个状态数据库来记录当前的Fabric状态。每个 通道
中各有 一个账本
。各个节点对于它所属的每个通道,都会保存一份该通道的 账本副本
。
如下图所示,Hyperledger Fabric 中的账本由“世界状态“和”区块链“这两部分组成:
世界状态:世界状态是以数据库的形式实现,默认使用的是LevelDB,这是一个KeyValue数据库;里面记录的是业务对象的最新值;智能合约主要与账本中的世界状态进行交互。
区块链:以文件形式实现的,记录交易日志明细,相当于是一个交易的台账表。
例如有一个银行账户,发生一次存款和三次取款操作,则最终区块链里面会记录四条记录的日志,而世界状态则只记录一条记录,就是当前账户最新的余额。
六、智能合约
智能合约
是一个运行在账本上的应用程序,它可以对资产进行编码,其中的交易指令(或者叫业务逻辑)也可以用来修改资产。
在 Fabric2.0
以后引入了新的生命周期来管理合约:
- 首先第一步开发合约:需要依赖原生的合约 sdk,支持包括 Java、js 和 Golang 三种开发语言。
- 开完合约后,管理员可以使用 package 子命令来打包合约,并生成打包文件。打包命令默认程序是 golang 语言,可以使用 -l 参数来指定其他语言。
- 一次打包可以多次安装,然后接着使用 install 命令在指定的 peer 节点上安装合约。
- 安装成功后,接着使用 approveformyorg 命令代表所在机构审批合约,并且指定背书策略。
- 最后使用 commit 命令向指定的通道提交合约定义,执行完这一步智能合约就部署成功,正式生效了。
- 接下来我们就可以编写应用程序来与区块链网络进行交易了,Fabric 封装了一套网关 SDK 给应用程序使用,通过一系列的简单 API 就实现和区块链网络进行交互。
关于 Java 智能合约的开发可以看我之前的文章《Hyperledger Fabric 2.x 自定义智能合约》
七、交易流程
- 首先区块链应用发起一笔交易;
- 然后
背书节点
对交易进行签名验证,返回验证结果; - 客户端将背书结果封装发给 Peer 节点,然后再提交给 Order 节点进行数据同步;
- Order 节点按顺序把交易信息同步给其他的 Peer 节点进行验证和提交;
- 最后账本更新,完成整个交易。
扫码关注有惊喜!
Hyperledger Fabric关键概念
介绍
Hyperledger Fabric 是分布式账本解决方案的平台,采用模块化架构,提供高安全性、弹性、灵活性和可扩展性。它被设计为支持以可插拔方式实现不同组件,并适应复杂的经济生态系统。
我们建议新用户先浏览本文后面的内容,以熟悉区块链的工作方式以及 Hyperledger Fabric 的特性和组件。
什么是区块链?
一个分布式账本
区块链网络的核心是一个分布式账本,记录网络上发生的所有交易。
区块链账本通常被描述为 去中心化的 ,因为它会被复制到许多网络参与者中,每个参与者都在 协作 维护账本。我们将看到去中心化和协作是强大的属性,反映了企业在现实世界中交换商品和服务的方式。
除了”去中心化”和”协作”之外,信息仅能以追加的方式记录到区块链上,并使用加密技术保证一旦将交易添加到账本就无法修改。这种“不可修改”的属性简化了信息的溯源,因为参与者可以确定信息在记录后没有改变过。这就是为什么区块链有时被描述为 证明系统 。
智能合约
为了支持以同样的方式更新信息,并实现一整套账本功能(交易,查询等),区块链使用 智能合约 来提供对账本的受控访问。
智能合约不仅是在网络中封装和简化信息的关键机制,它还可以被编写成自动执行参与者的特定交易的合约。
例如,可以编写智能合约以规定物品的运费,运费根据物品送达的速度变化而变化。交易双方同意并把条款写入账本后,当物品送达时,相应的资金就会自动转账。
共识
保持账本在整个网络中同步的过程称为 共识 。该过程确保所有账本仅在交易被相应参与者批准时更新,并且当账本更新时,所有账本都以相同的顺序更新相同的交易。
稍后您将学习更多关于账本,智能合约和共识的知识。目前,将区块链视为共享的并具有多份副本的交易系统就足够了,该系统通过智能合约进行更新,并通过称为共识的协作流程来保持一致。
为什么区块链有用?
现在的记录系统
从业务交易记录产生自今,当今的交易网络只不过是过往网络的小版本升级。 业务网络 中的成员彼此交易,但他们分别维护各自的交易记录。他们所交易的东西,无论是16世纪的佛兰芒挂毯还是今天的证券,必须在每次出售时确定其来源,以确保出售物品的企业拥有的所有权。
上述流程产生的是一个如下所示的商业网络:
现代技术已经从石碑和纸质文件夹演变为硬盘驱动器和云平台,但底层结构是相同的。因为没有管理网络参与者身份的统一系统,因而溯源非常费力,需要数天才能清理证券交易(其世界交易量以数万亿美元计算),合同必须手动签署和执行,而且系统中的每个数据库的信息都是孤立的,这也意味着单点故障。
即使可见性和信任的需求很明确,但在如今信息和流程共享的方法支离破碎,不可能构建一个跨业务网络的记录系统。
区块链的不同
如果业务网络不是由像老鼠窝一样的(译者注:老鼠窝,指乱七八糟的系统),低效的“现代”交易系统构建,而是由一套标准方法构建,包括在网络上建立身份,执行交易和存储数据,那会怎么样?如果资产来源可以通过查看交易列表来确定,此列表一旦写入,无法更改,因此可信任,那会怎么样?
该业务网络看起来更像是这样的:
这就是一个区块链网络,其中每个参与者都有自己的账本副本。除了共享账本信息之外,还共享更新账本的过程。与今天使用参与者的 私人 程序更新其 私人 账本的系统不同,区块链系统具有 共享 程序来更新 共享 账本。
利用共享账本协调其业务网络的能力,区块链网络可以减少与处理私人信息相关的时间、成本和风险,同时提高信任和可见性。
你现在已经知道区块链是什么,以及为什么它有用。还有许多其他重要的细节,但它们都与信息和流程共享的这些基本思想有关。
什么是Hyperledger Fabric?
Linux 基金会于2015年创建了 Hyperledger(超级账本)项目,以推进跨行业的区块链技术。它不是用来宣布一个区块链标准,而是鼓励通过社区流程开发区块链技术的协作方法,其中包括鼓励开放式开发、和随着时间的推移采用关键标准的知识产权。
Hyperledger Fabric 是 Hyperledger 中的区块链项目之一。与其他区块链技术一样,它有一个账本,使用智能合约,是一个参与者管理交易的系统。
Hyperledger Fabric 与其他区块链系统不同的地方是 私有 和 许可 。与允许未知身份参与网络的开放式非许可系统(需要诸如“工作量证明”之类的协议来验证交易并保护网络)不同,Hyperledger Fabric 网络的成员需要从可信赖的 成员服务提供者(MSP) 注册。
Hyperledger Fabric 还提供多种可插拔选项。账本数据可以以多种格式存储,共识机制可以交换替换,并且支持不同的MSP。
Hyperledger Fabric 还提供创建 通道 的功能,允许一组参与者创建各自的交易账本。对于某些网络而言,这是一个特别重要的选择。这些网络中,一些参与者可能是竞争对手,并且不希望他们做出的每笔交易都被每个参与者知晓,例如,他们只向某些参与者提供的特殊价格,而其他人不是。如果两个参与者组成一个通道,那么只有这两个参与者拥有该通道的账本副本,而其他参与者没有。
共享账本
Hyperledger Fabric 有一个账本子系统,包括两个组件: 世界状态 和 交易日志 。每个参与者都拥有他们所属的每个 Hyperledger Fabric 网络的账本副本。
世界状态组件描述了在给定时间点的账本的状态。它是账本的数据库。交易日志组件记录产生世界状态中当前值的所有交易;这是世界状态的更新历史。然后,账本包括世界状态数据库和交易日志历史记录。
账本中世界状态的数据存储是可替换的。默认情况下,这是 LevelDB 键值存储数据库。交易日志不需要是可插拔的。它只记录区块链网络使用账本数据库前后的值。
智能合约
Hyperledger Fabric 智能合约用 链码 编写,当该应用程序需要与账本交互时,由区块链外部的应用程序调用。在大多数情况下,链码只与账本的数据库、世界状态(例如,查询)交互,而不与交易日志交互。
链码可以用几种编程语言实现。目前支持 Go、Node.js 和 Java 链码。
隐私
根据网络的需求,企业对企业(B2B)网络中的参与者可能对他们共享的信息量非常敏感。对于其他网络,隐私不是最受关注的问题。
Hyperledger Fabric 支持私有网络(使用通道)是很重要的,因为网络是相对开放的。
共识
交易必须按照发生的顺序写入账本,即使它们可能位于网络中不同的参与者集合之中。为此,必须建立交易的顺序,且必须采用一种方法来拒绝错误(或恶意)插入到账本中的非法交易。
这是一个彻底的计算机科学研究领域,且有很多方法可以实现它,每个方法都有不同的权衡。例如,PBFT(实用拜占庭容错算法)可以为文件副本提供一种机制,使其能够保持各个副本的一致性,即使在发生损坏的情况下也是如此。或者,在BTC中,通过称为挖矿的过程进行排序,其中竞争计算机竞相解决加密难题,该难题定义所有过程随后构建的顺序。
Hyperledger Fabric 被设计为允许网络启动者选择最能代表参与者间存在的关系的共识机制。与隐私一样,有一系列需求;从他们的关系高度结构化的网络,到更加点对点的网络。
以上是关于Hyperledger Fabric 核心概念的主要内容,如果未能解决你的问题,请参考以下文章