# Hyperledger Fabric 101

翻译自[Hyperledger Fabric 简介](https://hyperledger-fabric.readthedocs.io/en/release-1.3/blockchain.html)。

## 简介

Hyperledger Fabric是一个提供分布式账本解决方案的平台。Hyperledger Fabric由模块化架构支撑，并具备极佳的保密性、可伸缩性、灵活性和可扩展性。Hyperledger Fabric被设计成支持不同的模块组件直接插拔启用，并能适应在经济生态系统中错综复杂的各种场景。

Hyperledger Fabric提供了一个独特的可伸缩、可扩展的架构，这也是Hyperledger Fabric与其他区块链解决方案的显著区别。假如你正在计划部署具备完整审查机制以及开源架构的企业级区块链，Hyperledger Fabric是一个不错的起点。

对于初学者，推荐首先阅读下文中的简介，以便于理解区块链的工作原理、主要特点以及Hyperledger Fabric中包含的组件。

## 区块链是什么？

### 分布式账本

一个区块链网络的核心是一个分布式账本，在这个账本中记录了网络中发生的所有交易信息。

区块链账本通常被定义为**去中心化**，这是因为在整个网络中，每个参与者都保存着一个区块链账本的副本，所有参与者通过**协作**共同维护着账本。接下来我们会看到，去中心化与协作这两个特点在现实世界的商业货物交易和商务服务中展现出的显著优点。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190129161647401.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2Rlc3RpbnlfYXF1YQ==,size_16,color_FFFFFF,t_70#pic_center) 除了去中心化与协作，区块链的另一个显著特点是信息在只能以“附加”的方式记录在区块链中，同时使用加密技术保障了交易一旦被添加进账本中，就无法被篡改。区块链的这种不可篡改性使得信息来源的确认变得异常容易，这是由于参与者可以肯定信息一旦被写入区块链中就几乎不可被篡改。这也是为什么区块链常常也被称为**证明的系统**的原因。

### 智能合约

为了持续的进行信息的更新，以及对账本进行管理（例如写入交易，查询账本等），区块链网络引入了**智能合约**来实现对账本的访问和控制。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190129161857652.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2Rlc3RpbnlfYXF1YQ==,size_16,color_FFFFFF,t_70#pic_center) 智能合约不仅仅可用于在区块链网络中封装信息以及简单的方式接入区块链网络，它们也可以被用于自动的执行由参与者定义的特定交易操作。

例如，买卖双方可以定义一个智能合约，以保证当卖方发货的商品运送到达时，买方支付的货款会自动转账给卖方。

### 共识

保持网络中所有账本交易的同步流程，就是**共识**。共识保证了账本只会在交易双方都确认后才进行更新。同时在账本更新时，交易双方能够在账本中的相同位置，更新一个相同的交易信息。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190129163230193.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2Rlc3RpbnlfYXF1YQ==,size_16,color_FFFFFF,t_70#pic_center)

后面我们会详细介绍账本、智能合约和共识的相关内容。但目前为止，我们只需把区块链理解为一个共享的，通过智能合约更新的多副本交易系统，同时这个系统通过协作共识机制保证了网络中所有账本副本的同步。

## 区块链为什么有用？

### 当前的记录系统

自从商业数据记录网络系统诞生以来，直到今天的交易网络并没有发生太大的变化。在**商业网络**中的成员进行相互交易时，他们各自维护着自己独立的交易记录。同时，人们交易的物品——无论是16世纪佛兰德的挂毯，还是现代的有价证券——仍然需要在每次卖出交易过程中提供来源信息，以确保卖方拥有所出售商品的所有权。

当前的商业网络就像下图描述的一样： ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190129163423523.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2Rlc3RpbnlfYXF1YQ==,size_16,color_FFFFFF,t_70#pic_center)

随着科技的进步，上图中的交易流程不断演化发展，经历了从使用石碑、使用纸质账本、使用硬盘存储器直到使用云计算平台的不同阶段，但流程的底层架构并没有发生任何变化。并不存在一个可以统一管理网络参与者身份的系统，确认商品来源十分费劲，常常会耗费数天的时间明确证券的交易（包含数以万计美元的数量）。合同必须手动签署和执行，每个系统的数据库都包含独立的信息，因此会产生数据不一致的问题。

在今天的信息和流程（处理信息的业务流程）共享不一致的情况下，建立一个跨商业网络的记录系统是不可能的，尽管该系统对于信任方面的需求是明确的。（译者注：跨网络的信息共享是诉求点）

### 区块链的不同点

那我们为什么不用“现代”的交易系统来替代这种效率低下的网络？新的商业网络可以具有标准的方法建立身份信息，执行交易，并且存储数据。为什么不建立一个可信的交易链？通过查询这个链上的所有交易记录，来确定交易商品来源，并且这个链上的信息一旦写入，就无法被篡改。

以上描述的商业网络就如下图所示： ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190129170529307.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2Rlc3RpbnlfYXF1YQ==,size_16,color_FFFFFF,t_70#pic_center)

这就是区块链网络。在区块链网络中，每一个参与者都保有一份账本的副本。在区块链网络中，不仅仅是账本信息会被共享，更新账本的流程也是共享的。不同于目前的系统——参与者使用**私有**的程序对**私有**的账本进行更新，而区块链系统使用**共享**的程序对**共享**的账本进行更新。

通过使用共享账本协调整个商业网络，区块链网络能够节省时间、减少成本以及降低隐私信息泄露的风险，并且能使流程更加可信和透明。

现在你已经明白了什么是区块链以及它的用途。同时还有许多其他的内容也非常重要，他们是信息与流程共享的基础知识。

## Hyperledger Fabric是什么？

2015年，Linux基金会启动了Hyperledger项目，目标是发展跨行业的区块链技术。Hyperledger项目并不仅仅是定义一个单一的区块链标准，它更鼓励通过开源社区的力量协作开发区块链技术。

Hyperledger Fabric是Hyperledger中的一个区块链项目。与其他区块链技术类似，Hyperledger Fabric包含一个账本，使用智能合约并且是一个通过所有参与者管理交易的系统。[hyperledger项目集合](https://www.hyperledger.org/projects) hyperledger 框架类项目有：

* SAWTOOTH 由Intel发起的区块链平台，支持基于硬件芯片的共识机制；
* IROHA 由Soramitu发起，基于C++实现的账本平台，提供面向web和Mobile特性；
* FABRIC 由Digital Asset和IBM发起，本文已经介绍特点；
* BURROW 由Monax发起，提供以太坊虚拟机支持，实现支持高效交易的带权限的区块链平台；
* INDY 由Sovrin发起，提供基于分布式账本技术的数字身份管理机制。

  hyperledger 工具类项目有：

  * CALIPER  由华为、Hyperchain、Oracle等发起，测量区块链性能的基准工具；
  * CELLO 由IBM团队发起，提供区块链平台的BAAS级管理；
  * COMPOSER 由IBM团队发起，提供面向链码开发的高级语言支持；
  * EXPLORER 由IBM/Intel团队发起，提供web操作界面，能够查看区块链信息；
  * QUILT 由NTT Data和NTT Data发起，提供支持跨分布式账本之间交易的商业工具；
  * URSA 是一个共享的密码库，让使用者在保证项目安全性的同时，能够避免重复的密码方面的工作。

Hyperledger Fabric与其他区块链系统最大的不同体现在**私有**和**许可**。与开放无需许可的网络系统允许未知身份的参与者加入网络不同（需要通过工作量证明协议来保证交易有效并维护网络的安全），Hyperledger Fabric通过**Membership Service Provider(MSP)**&#x6765;登记所有的成员。

Hyperledger Fabric也提供了多个可插拔选项。账本数据可被存储为多种格式，共识机制可被接入或者断开，同时支持多种不同的MSP。

Hyperledger Fabric提供了建立**channel**的功能，这允许参与者为交易新建一个单独的账本。当网络中的一些参与者是竞争对手时，这个功能变得尤为重要。因为这些参与者并不希望所有的交易信息——比如提供给部分客户的特定价格信息——都对网络中所有参与者公开。只有在同一个channel中的参与者，才会拥有该channel中的账本，而其他不在此channel中的参与者则看不到这个账本。

### 共享账本

Hyperledger Fabric包含一个账本子系统，这个子系统包含两个组件：**世界状态(world state)**&#x548C;**交易记录**。在Hyperledger Fabric网络中的每一个参与者都拥有一个账本的副本。

世界状态组件描述了账本在特定时间点的状态，它是账本的数据库。交易记录组件记录了产生世界状态当前值的所有交易，它是世界状态的更新历史。因此，账本是世界状态数据库和交易历史记录的集合。

账本的世界状态存储数据库是可更换的。默认配置下，这是一个LevelDB的key-value存储数据库。交易记录模块默认内置，不需要以插件形式接入。只需要记录在区块链网络中账本数据库被使用前和使用后的值就可以。

### 智能合约

Hyperledger Fabric智能合约被称为**chaincode**，当一个区块链外部的某个应用程序需要访问账本时，就会调用chaincode。大多数情况下，chaincode只会访问账本的数据库组件和世界状态(world state)（比如查询），但不会查询交易记录。

chaincode可通过多种不同编程语言实现。目前支持chaincode的语言是Go、Node、Java。

### 隐私

根据网络的需求，在一个Business-to-Business（B2B）网络中的参与者会对信息共享的程度极为敏感。然而，对于其他的网络，隐私并不是首要考虑的因素。

Hyperledger Fabric支持构建隐私保护严格的网络，也支持构建相对开放的网络。

### 共识

在网络中，不同的参与者写入的交易必须按照产生顺序依次被写入账本中。要实现这一目标，交易顺序必须被正确的建立并且必须包含拒绝错误（或者恶意）插入账本中的无效交易的方法。

这完全是计算机科学的研究领域，可以有多种方法实现上面提到的目标，这些方法各有优缺点。例如，PBFT (Practical Byzantine Fault Tolerance)可以为文件副本提供一种机制来相互通信，即使是在发生腐败的情况下，也可以保证每个副本保持一致。另外，在比特币中，通过一种称为挖矿的行为进行排序。在挖矿过程中，竞争的计算机竞相解决一个密码难题，这个谜题定义了所有后续的构建顺序。

Hyperledger Fabric被设计为允许网络构建者依据业务需求来选择采用的共识机制。好比考虑隐私性，就会有一连串的需求，从高度结构化的网络或是更加点对点的网络。

更多的Hyperledger Fabric共识机制会在另一份文档中详细描述，这些共识机制目前包含SOLO，Kafka。
