跳转至

hyperledger–面向企业的区块链

了解区块链技术的架构、核心组件和流程后,探索满足业务需求的可能性非常重要。区块链负责在没有第三方监管机构的情况下运行分布式网络。它现在正成为一个需要考虑的重要组成部分,这将塑造下一代金融技术和治理模式。然而,用于加密货币的区块链高度集中于奖励和给予参与者激励,如比特币和以太坊。为了克服这一挑战,Linux 基金会和行业领导者合作建立了一个基于分布式分类帐的项目,名为 Hyperledger project。在本章中,您将了解 Hyperledger 项目与现有区块链技术的不同之处、其核心组件、交易流程以及使用 Hyperledger 技术打开应用程序。

您将在本章中学习以下主题:

  • 超级分类帐概览
  • 区块链即服务
  • 架构和核心组件
  • 超分类帐结构模型
  • 比特币对以太坊对超级账本
  • Hyperledger 结构功能
  • 使用 Tuna 应用程序的实验室

技术要求

本章包括一个实验,演示 Hyperledger 应用程序如何解决供应链管理中的实际挑战。您需要在https://github.com/hyperledger/education.git获得以下链接中的源代码。

超级分类帐概览

Hyperledger 是一个开源项目,致力于利用分布式分类帐技术满足核心行业需求。这是一个由 Linux 基金会与信息技术、银行、物流、运输、金融、制造和物联网领域的几个行业巨头合作主办的团体计划。

尽管加密货币仍在努力获得一些政府和企业机构的信任,但区块链正被视为确保商业运营和管理技术安全的关键。由于比特币的刚性和静态性质,它不能用于商业应用目的。尽管以太坊能够通过其智能合约打开业务应用程序,但由于其无许可的使用案例,金融机构和其他关键业务运营对尝试以太坊区块链犹豫不决。

Hyperledger 是唯一的分布式分类帐技术框架,旨在为需要获得许可的区块链的企业提供粒度控制,以更好地控制整个系统。Hyperledger 不支持任何加密货币平台或相关系统,因为它更多的是解决关键的业务问题。

Hyperledger 成立于 2015 年 12 月,已经得到了埃森哲、空中客车、美国运通、思科、富士通、日立、IBM、英特尔、SAP、NEC、BBVA、Bitmark、博世、CA Technologies、凯捷、EY、Factom、H3C、NSE、甲骨文、普华永道、Redhat、三星、Ripple、泰雷兹、Wipro、云安全联盟等多家行业领导者的赞赏和采用。

Hyperledger 项目还计划在每个区块链爱好者、区块链社区、企业和非营利组织之间进行合作,建立一个单一和全面的分布式分类帐应用程序标准。就像 WordPress 革命性地改变了网站的方法和运行时间一样,Hyperledger 正在降低分布式分类帐应用程序的成本和总时间。

区块链即服务(BaaS)

自云计算诞生以来,改变产品或服务交付或部署方式的最热门术语之一是 X(任何东西)即服务,其中 X 是任何形式的软件或应用程序。在世界认识到区块链的巨大影响力后,行业领导者开始探索将区块链与他们现有的云基础设施模型(如供应链管理、身份和访问控制、数据库管理等)结合使用的各种可能性。超级分类帐类似于分布式分类帐技术,但是区块链技术在生态系统中受到特别关注。

凭借 Azure 区块链服务,微软在 2015 年成为首家推出 BaaS 的软件厂商。微软与 ConsenSys 密切合作,宣布将在微软 Azure 平台上开发以太坊 BaaS。SAP 推出了自己的 BaaS 平台,并将其命名为 Leonardo ,这是一种基于 Hyperledger 的云服务。

最大的咨询公司德勤(Deloitte)提出了一个基于区块链的商业解决方案,并将其命名为 Rubix Core。这是一种为客户构建专用和定制网络而设计的架构。

计划目标

Hyperledger 项目因其为平台协作开发跨行业框架的前期努力而受到广泛赞赏。金融行业在与 Hyperledger 平台合作以实现无缝迁移方面最为活跃。让我们理解 Hyperledger 项目的目标,以了解其路线图的意义:

  • 社区驱动的基础设施:由于 Hyperledger 项目得到了一些私人和政府机构的支持,它提供了一个高效开放的社区驱动环境
  • 企业级框架:与加密货币区块链不同,Hyperledger 的开发旨在支持企业通过分布式分类帐网络进行安全可靠的交易
  • 建立技术社区:该项目还旨在建立一个更有效和更大的技术社区,以创新和开发区块链智能联系人和其他相关代码
  • 认知:这是向企业和其他机构传播区块链技术及其商业用例的好方法

架构和核心组件

Hyperledger 是一个开源框架,允许企业基于分布式分类帐技术构建企业级解决方案。该框架由以下构件组成:

  • 共享分类账:仅追加分类账,按时间顺序存储块
  • 一致算法:对分布式账本的变动达成一致意见的方法
  • 隐私:构建 Hyperledger 的主要目的是在关键业务环境中实现安全可靠的交易许可网络
  • 智能合同:这是一种计划和处理交易请求的粒度方法

让我们了解一下 Hyperledger 架构:

  • 共识层(Consensus layer):这主要负责生成每个订单的协议,并根据一组预定义的规则验证交易
  • 智能契约层(Smart contract layer):负责事务请求和应用业务逻辑
  • 通信层:这促进了允许节点通过对等传输进行通信的平台
  • 数据存储抽象:这允许其他模块使用各种数据源
  • 加密抽象:这允许使用不同的加密算法而不影响其他模块
  • 身份服务:这支持在区块链设置期间部署信任根,并提供额外的认证和授权
  • 策略服务:负责管理多个策略,如共识策略、背书策略、群组管理策略等
  • API:这使得客户端和应用程序能够与区块链模块对话
  • 互操作性:这提供了不同区块链实例之间的互操作性

我们先来了解一下各种 Hyperledger 框架,分别提到如下:

  • Iroha : Hyperledger Iroha 是一个区块链框架,由 Soramitsu、日立、NTT 数据和 Colu 提供。它旨在供 Android 和 iOS 软件包下的移动应用程序开发人员使用。它有一个简单的设计,带有 C++编程包和 YAC consensus 算法。
  • sawtook:它由英特尔提供,基于网络规模使用多种一致认可的算法。默认情况下,Hyperledger 锯齿使用的耗时证明 ( 诗人)来实现节点间的一致性。它被设计成多功能的,支持有权限和无权限的实现。
  • Indy : Hyperledger Indy 是一个分布式账本,实现分散身份的业务解决方案,并提供跨多个支持分布式账本技术 ( DLT )的互操作性。它旨在实现跨节点和整个事务的隐私。
  • Burrow:Hyperledger Burrow 是一个可允许的智能合约,它为模块化的区块链客户端提供了一个使用以太坊虚拟机 ( EVM )构建的可允许的智能合约解释器。

超分类帐结构模型

Hyperledger Fabric 项目由 IBM 区块链平台提供支持,由 Linux 基金会托管,其机密交易的关键亮点是许可网络、可编程商业登录以及不需要加密货币计算方法。

我们看到了巨大的成果,并积极准备向 1.1.0 过渡。我们的最新产品 IBM block chain Platform Starter Plan 将成为市场上首批推出这一新版本的产品之一,IBM 区块链技术副总裁 Jerry Cuomo 表示。

在深入了解 Hyperledger Fabric 和 Hyperledger 项目下的其他项目后,是时候实际了解这项技术以及部署过程中的一些挑战了。

hyperledger 结构核心组件

了解交易流程后,了解网络中几个节点之间的通信是如何建立和维护的非常重要:

  • 节点:Hyperledger 网络中有以下三种角色:
    • 客户:客户在网络上提出交易请求。它必须连接到对等机才能参与区块链。客户端有权将所需的对等体连接到网络。
    • 对等方:对等方监听总账更新,并保留一份副本。根据它们的性质,可以有两种进一步的类型:
      • 背书同行:背书人模拟并背书交易
      • 提交对等体:提交者在网络中提交事务之前验证事务
    • 排序服务:排序服务接受已背书的交易,将它们排列排序成块,最后交付给提交对等体。订购服务还为客户和对等方提供了一个共享的安全通信通道。它充当传播交易的媒介,帮助我们将交易传递给同行。
  • Ledger :就像比特币和以太坊一样,Hyperledger ledger 提供了整个系统运行过程中所有有效和无效交易的验证列表。它由订购服务创建,并由网络中的所有对等体保存。
  • 信道:Hyperledger Fabric 信道是节点进行机密交易的受限通信媒介。渠道特定于成员、共享分类帐、链码应用程序和订购服务节点。每个加入通道的对等点必须从会员服务提供商 ( MSP )处获得授权,该服务提供商向其各自的通道对等点和服务验证每个对等点。
  • 世界状态:这反映了网络中所有资产的当前数据状态。数据以下列格式安全存储:
    • LevelDB :这是 Hyperledger Fabric 的默认数据库,它只存储键/值对。
    • CouchDB :这最适合于 web 和本地应用程序,它以本地方式使用 JSON。它支持所有数据存储需求的二进制。
  • Chaincode: Chaincode 管理网络中成员约定并创建的业务逻辑。这是一个用 GO-node . js 编写的程序:
    • 这是一种默认的编程语言,运行在一个安全的 Docker 容器上,管理分类帐状态。
    • CouchDB :这是另一种存储 JSON 对象的数据库编程语言。它还支持键范围、复合和全数据丰富的查询。
  • 达成一致:达成一致是指就要添加到分类账中的一组交易达成一致的过程。在 Hyperledger Fabric 中,共识通过以下三个步骤实现:
    • 交易背书
    • 排序
    • 验证和承诺

现在,让我们了解这些共识组件以及它们如何与 Hyperledger 及其事务处理方法一起工作。

超级分类帐和交易处理的工作

Hyperledger 和事务处理的工作原理可以解释如下:

  1. 交易建议:在 Hyperledger Fabric 中,流程从客户端应用程序发送交易建议开始:

每个客户端应用程序都提出事务来为模拟和认可过程认可对等体。

  1. 背书者向客户端发送 RW 集合:每个背书对等体模拟提议的交易,并存储名为 RW 集合的读写数据集合。这些集合由签署对等体签名,并返回给客户端应用程序:

交易背书:这是模拟交易产生的签名响应。有几种方法可以通过策略链代码定义交易背书,这类似于智能合同。一个交易背书保单类似于一个定义的链码。

  1. 客户端应用程序服务:一旦客户端应用程序收到 RW 集合和认可的交易,它必须将这些提交给订购服务。无论其他客户端应用程序提交的交易背书和 RW 集如何,此方法都会继续工作:

  1. 订购者将事务以块的形式发送给提交对等体:订购服务接受 RW 集合和认可的事务,并将它们排列成块并转发给提交对等体;

订购服务负责组织所有交易,然后将它们提交到分类帐。默认情况下,Hyperledger Fabric 的订购服务是 Kafka,这是一个由 Apache 软件基金会 ( ASF )开发的开源流处理平台。

现在,让我们更详细地了解订购服务的工作原理。重要的是将它分成几个核心部分:

  • 订购服务的第 1 部分:一旦在指定的时间范围内准备好一定数量的交易,就创建一个块,并且这些交易按时间顺序提交。与比特币区块链不同,Hyperledger Fabric 提供了最适合的订购机制,这有助于组织设计一个精细、灵活、可扩展的分散网络。
  • 订购服务第二部分 : Hyperledger Fabric 支持三种订购服务机制——SOLO、Kafka、简化拜占庭容错 ( SBFT ):

    • SOLO :这种最适合软件开发者用于研究和测试目的,并且这种只有一个订购节点。
    • Kafka :这是另一个 Hyperledger 面料订购机制,可以生产。它由 ASF 开发,提供了一个统一、高效、低延迟的软件平台来处理实时提要。在 Hyperledger Fabric 中,Kafka 处理 RW 集合和背书交易。
    • SBFT :这类似于比特币区块链的 PoW 共识机制。这种解决方案旨在克服拜占庭故障,即使网络中有一个恶意节点或一组恶意节点,系统也能工作。
  • 提交对等点验证块中的每个事务:提交对等点验证事务以确保 RW 集与当前世界状态匹配。一旦提交对等方验证了事务,事务就被更新到分类帐,并且世界状态自动用来自 RW 集的写数据更新:

最后,提交方必须通知客户端应用程序事务的成功或失败。

  1. Ident i ty 验证:在交易流程的每一步,从背书到版本检查,身份验证仍然是一个连续的过程。

比特币对以太坊对超级账本

区块链是最令人兴奋的创新,它在加密货币领域仍然很受欢迎。在过去的几年里,业界也认识到了区块链对其商业模式的运营和管理的影响。尽管区块链技术在其原生形式下可以无缝工作,但其大多数业务需求都不适合一站式解决方案。因此,我们有几个版本的区块链网络。让我们先了解一下特点,这样我们就可以详细了解一些流行的区块链车型之间的比较:

  • 权限限制:定义交易处理人员创建或冻结现有分类账的资格。在这方面,存在以下两种模式:
    • 有权限的区块链:在这种模式下,交易处理只能由预先选定的用户执行。Hyperledger Fabric 就是一个例子。
    • 无权限区块链:该模型不限制事务处理器创建或添加新的块。以太坊和比特币就是最受欢迎的例子。
  • 对数据的受限访问:这指定了区块链网络上的读取权限。有以下两种型号:
    • 公开区块链:读取正在进行的交易时没有限制。任何人都可以用区块链节点客户端下载更新的区块链账本。
    • 私有区块链:在这种模式下,只有预先选定的用户才能访问区块链的账本。
  • 共识机制:在分布式网络中,实现无信任网络并为所有交易确定共识是至关重要的。这确保了只有有效和合法的交易被添加到区块链。PoW、PoS 和 PBFT 是一致性算法的一些例子。
  • 可伸缩性:可伸缩性取决于两个因素——节点性能。节点可伸缩性是指在不影响整体性能的情况下,可以在网络中添加的节点的范围,可伸缩性取决于每秒的事务数量。
  • 匿名:这是指区块链中用户的身份被公开或隐藏。
  • 治理:这是在区块链社区中分配的决策权级别。区块链平台必须由核心开发团队或其他利益相关者来维护。
  • 本币:这是指在区块链境内有效的货币,如比特币区块链的比特币。
  • 脚本:这是指分散应用 ( dApp )支持的编程级别:

| 特性 | 比特币 | 以太网〔t1〕 | 超分类帐 | | 权限限制 | 未经许可 | 未经许可 | 许可的 | | 限制公众对数据的访问 | 公共 | 公共或私人 | 私人的 | | 共识;一致 | 啪 | 啪 | 实用拜占庭容错算法 | | 可量测性 | 高节点可扩展性,低性能可扩展性 | 高节点可扩展性,低性能可扩展性 | 低节点可扩展性,高性能可扩展性 | | 集中监管(治理) | 社区/矿工的低分散决策 | 中等,核心开发组,但 EIP 进程 | ●基于 Linux 模型的开放治理模型 | | 匿名 | 假名,交易数据不加密 | 匿名,数据交易不加密 | 假名,交易数据的加密 | | 本国货币 | 是的比特币 | 是的,乙醚 | 不 | | 脚本 | 可能性有限的基于堆栈的脚本 | 高可能性,调优完整的虚拟机,高级语言支持—团结 | 高可能性,调优链码完整脚本,高级 Go 语言 |

Hyperledger 结构功能

Hyperledger 提供了一套完整的企业级业务解决方案,可提供安全、可扩展的价值,并增加了安全性、保密性和性能。Hyperledger Fabric 提供了以下功能和核心功能:

  • 身份管理:为了转变一个许可的网络,Hyperledger Fabric 提供了一个成员身份服务,该服务维护用户 id,然后对网络中的每个用户进行身份验证。一个用户 ID 可以被允许调用一个链码应用程序,但可以被阻止打开一个新的链码。
  • 高效处理 : Hyperledger 根据交易顺序和承诺为每个节点分配一个角色。整体性能随着并发执行的增加而提高,并缩短了交付每个订单的时间。
  • 隐私和保密性:私有通道限制消息传递路径,为特定网络成员提供交易隐私和保密性。包括会员信息、交易和渠道详情在内的所有数据对其他网络会员来说都是不可见和不可访问的。
  • 链码功能:这与链码应用有关,是 Hyperledger 结构的业务逻辑。Chaincode 确保所有转让所有权的交易都遵守其规则和要求。通道的操作参数通常由系统链码定义,而验证系统链码定义了认可和验证交易的要求。

工党

在理解了 Hyperledger Fabric 的体系结构、组件、交易流和链码之后,现在是时候安排这些部分来执行实验了。为了保持实验室的可访问性,我们将从 GitHub 运行一个实验室环境,托管在:https://fabric-sdk-node.github.io/下。

金枪鱼应用

金枪鱼应用程序是关于供应链中不同方之间的金枪鱼运输的转移。整个应用程序都是用 Node.js 编写的,gRPC 用于与链代码进行交互:

  • Aim :使用 Fabric Node SDK,与 Hyperledger 区块链建立连接。对等体将被配置为与其特定于应用程序的链码容器进行通信。在本练习结束时,我们将熟悉如何使用 Node.js SDK 与网络通信。我们还将了解应用链代码网络和分类帐是如何相互作用的。
  • 基本安装:如果您还没有下载本课程的education资源库,请在您的终端窗口中遵循以下指示:
$ git clone https://github.com/hyperledger/education.git 

$ cd education/LFS171x/fabric-material/tuna-app 

在运行下一个命令之前,确保您的机器上已经运行了 Docker。我们需要确保我们已经完成了本章中 Hyperledger Fabric 部分的安装,然后再继续本应用程序部分,因为我们可能会遇到错误。首先,删除任何预先存在的容器,因为它们可能与本教程中的命令冲突:

$ docker rm -f $(docker ps -aq) 

现在,让我们使用以下命令启动 Hyperledger 结构网络:

 $./startFabric.sh 
```   **故障排除**:如果在运行之前的命令后,您得到类似如下的错误:

ERROR: failed to register layer: rename /var/lib/docker/image/overlay2/layerdb/tmp/write-set-091347846 /var/lib/docker/image/overlay2/layerdb/sha256/9d3227c1793b7494e598caafd0a5013900e17dcdf1d7bdd31d39c82be04fcf28: file exists


然后尝试运行以下命令:

$ rm -rf ~/Library/Containers/com.docker.docker/Data/*


从`package.json`文件安装所需的库,注册我们网络的管理和用户组件,并使用以下命令启动客户端应用程序:

$ npm install $ node registerAdmin.js $ node registerUser.js $ node server.js


只需在您选择的任何浏览器窗口中打开`localhost:8000`即可加载客户端,您应该会在该 URL 看到我们简单应用程序的用户界面,如下面的屏幕截图所示:

![](img/00058.jpeg)

*   **故障排除**:如果客户端无法连接 Tuna 服务器,我们需要执行以下命令:

Error: [client-utils.js]: sendPeersProposal - Promise is rejected: Error: Connect Failed error from query =  { Error: Connect Failed at /Desktop/prj/education/LFS171x/fabric-material/tuna-app/node_modules/grpc/src/node/src/client.js:554:15 code: 14, metadata: Metadata { _internal_repr: {} } }


尝试运行以下命令:

$ cd ~ $ rm -rf .hfc-key-store/.


然后,运行前面的命令,从以下命令开始:

$ node registerAdmin.js // File Structure tuna-app/tuna-chaincode.go


这是包含样本 tuna 应用程序的所有业务逻辑的链码文件:

*   **验证**:现在,让我们查询我们的数据库,其中应该有一些样本条目,因为我们的链码智能合约用 10 个先前的捕获启动了分类帐,该函数没有参数。正如我们在第 6 行看到的,它接受一个空数组。

// queryAllTuna - requires no arguments
const request = {
chaincodeId:'tuna-app',
txId: tx_id,
fcn: 'queryAllTuna',
args: ['']
};
return channel.queryByChaincode(request);


代码来自`..src/queryAllTuna.js`。

现在,让我们查询我们的数据库,那里应该已经有一些样本条目了,因为我们的链码智能合同启动了包含前十次捕获的分类帐。这个函数没有参数,正如我们在前面代码的第 6 行看到的。相反,它接受一个空数组。在用户界面中可以看到的查询响应是十个预填充的条目,每个 catch 的属性如下:

![](img/00059.jpeg)

下面的代码用于查询已记录的特定金枪鱼:

// queryTuna - requires 1 argument
const request = {
chaincodeId:'tuna-app',
txId: tx_id,
fcn: 'queryTuna',
args: ['1']
};
return channel.queryByChaincode(request);


代码来自`..src/queryTuna.js`。

现在,让我们查询一个特定的金枪鱼捕获量。这个函数接受一个参数,正如您在代码的第 6 行中看到的。例如`['1']`。在这个例子中,我们使用这个键来查询 catches。您应该看到下面的查询响应,详细描述了为一个特定 catch 记录的属性:

![](img/00060.jpeg)

下面的代码是为了改变金枪鱼固定器:

// changeTunaHolder - requires 2 argument
var request = {
chaincodeId:'tuna-app',
fcn: 'changeTunaHolder',
args: ['1', 'Alex'],
chainId: 'mychannel',
txId: tx_id
};
return channel.sendTransactionProposal(request);


代码来自`..src/changeHolder.js`。

现在,让我们更改拥有给定金枪鱼的人的姓名。这个函数有两个参数——特定 catch 的键和新的 holder,正如我们在前面代码的第 5 行中看到的。比如`args: ['1', 'Alex']`。您可能会在终端窗口中看到类似的成功响应:

The transaction has been committed on peer localhost:7053 event promise all complete and testing complete Successfully sent transaction to the orderer. Successfully sent Proposal and received ProposalResponse: Status - 200, message - "OK", metadata - "", endorsement signature: 0D 9


这表明我们已经通过 SDK 从我们的应用程序发送了一个建议,并且对等方已经被认可和提交,并且分类帐已经被更新:

![](img/00061.jpeg)

通过再次查询键`1`,您应该看到持有者确实已经被更改。现在,持有者属性已从`Miriam`更改为`Alex`:

![](img/00062.jpeg)

*   **完成**:在`tuna-app`文件夹中使用以下命令删除我们在本教程中创建的所有 Docker 容器和图像:

$ docker rm -f
$(docker ps -aq)
$ docker rmi -f $(docker images -a -q)
```

摘要

我们探索了一种新的区块链超级账本项目,旨在专注于业务挑战和克服分布式账本技术。Hyperledger 是由 Linux 基金会领导和主持的唯一一个团体项目,它正处于一个持续的路线图上,以通过分布式分类帐即服务模型来彻底改变业务。这个项目帮助行业避免部署区块链的困难,就像 WordPress 解决了打开网站的困难,Apache 解决了打开数据库的问题。

在下一章中,我们将了解区块链技术如何影响现有的和传统的安全模型,这些模型被命名为机密性、完整性和可用性 ( 中情局)三元模型。

问题

通过 tuna 应用程序,我们已经足够成功地理解了 Hyperledger Fabric 的工作和测试。然而,为了解决网络安全挑战,我们必须探索现有的解决方案,以及如何通过分布式账本技术或通用区块链,甚至是超级账本项目,使这些解决方案变得更好。因此,涵盖以下几点非常重要:

  1. 公共区块链可以考虑使用 Hyperledger 结构吗?
  2. Hyperledger 可以和传统数据库连接吗?

我们一直在努力

apachecn/AiLearning

【布客】中文翻译组