Hyperledger Fabric 模型

本节概述了 Hyperledger Fabric 的关键设计特性,实现了对全面又可定制的企业区块链解决方案的承诺:

  • 资产 —— 资产的定义使得几乎任何具有货币价值的东西都可以通过网络进行交换,从所有食品、到古董车、到货币期货。
  • 链码 —— 链码的执行与交易排序是分开的,这限制了跨节点类型所需的信任和验证级别,并优化了网络可扩展性和性能。
  • 账本特征 —— 不可篡改的共享账本为每个通道编码整个交易历史,并包含类似 SQL 的查询功能,用于有效的审计和解决争议。
  • 隐私 —— 通道和私有数据收集支持私有和机密的多边交易,这通常是在公共网络上交换资产的竞争企业和受监管的行业所需要的。
  • 安全和成员服务 —— 被许可的成员资格提供了一个可信的区块链网络,参与者知道所有的交易都可以被授权的监管机构和审计人员检测和跟踪。
  • 共识 —— 达成共识的独特方法支持企业所需的灵活性和可扩展性。

资产

资产的范围可以从有形的(房地产和硬件)到无形的(合同和知识产权)资产。Hyperledger Fabric 提供了使用链码交易修改资产的能力。

资产在 Hyperledger Fabric 中表示为键值对的集合,状态更改记录为在 Channel 账本上的交易。资产可以用二进制或 JSON 格式表示。

在 Hyperledger Fabric 应用程序中,您可以使用 Hyperledger Composer 工具轻松定义和使用资产。

链码

链码是定义一项或多项资产的软件,以及修改资产的交易指令;换句话说,它就是业务逻辑。链码强制执行读取或更改键值对或其他状态数据库信息的规则。链码函数针对账本的当前状态数据库执行,并通过交易提案发起。链码执行产生一组键值写集,可以提交给网络并应用于所有节点上的账本。

账本特征

账本是 Fabric 中所有状态转变的有序的、防篡改的记录。状态转换是参与方提交的链码调用(“交易”)的结果。每笔交易都会产生一组资产键值对,这些键值对在创建、更新或删除时提交到账本。

账本由一个区块链(“链”)组成,它以区块的形式存储不可变的、有序的记录,以及一个状态数据库来维护当前的 Fabric 状态。每个通道有一个账本。每个节点为其所属的每个通道维护一份账本副本。

Fabric 账本的一些特点:

  • 查询和使用基于键的查找更新账本、范围查询和组合键查询
  • 使用富查询语言的只读查询(如果使用 CouchDB 作为状态数据库)
  • 只读历史查询——查询某一个键的账本历史记录,支持数据溯源场景
  • 交易由链码中读取的键/值(读集)版本和链码中写入的键/值(写集)的版本组成
  • 交易包含每个背书节点的签名,并提交给排序服务
  • 交易排序后进入区块,并从排序服务“交付”到通道上的节点
  • 节点根据背书策略验证交易并执行这些策略
  • 在添加到区块之前,执行版本控制检查,以确保所读取的资产的状态自链码执行时间以来没有更改
  • 一旦交易被验证和提交,就不可改变
  • 通道的账本包含一个定义了策略、访问控制列表和其他相关信息的配置区块
  • 通道包含 成员服务提供者 实例,允许从不同的证书颁发机构派生加密材料

有关数据库、存储结构和“查询能力”的更深入研究,请参阅 Ledger

隐私

Hyperledger Fabric 在每个通道的基础上使用一个不可篡改的账本,以及可以操作和修改资产当前状态(即更新键值对)的链码。账本存在于通道的范围内——它可以在整个网络中共享(假设每个参与者都在一个公共通道上操作)——或者它可以私有化,只包含一组特定的参与者。

在后一种情况下,这些参与者将创建一个单独的通道,从而隔离他们的交易和账本。为了解决跨越透明度和隐私之间的差距,链码只可以安装于 Peer 节点上,需要访问执行读取和写入的资产状态(换句话说,如果一个链码不是安装在 Peer 节点上,它将无法正确地与账本链接)。

当该通道上的一个组织子集需要对其交易数据保密时,将使用一个私有数据集将该数据隔离在一个私有数据库中,从逻辑上与通道账本分离,只有经过授权的组织子集才能访问该数据。

因此,通道使交易对更广泛的网络保持私有,而集合使通道上组织的子集之间的数据保持私有。

为了进一步模糊数据,可以使用常见的加密算法(如 AES)对链码中的值进行加密(部分或全部),然后再将交易发送给排序服务并将区块添加到账本中。一旦加密数据被写入账本,就只能由拥有用于生成密码文本的相应密钥的用户解密。有关链码加密的详细信息,请参阅 链码开发者教程

有关如何在区块链网络上实现隐私的更多细节,请参阅 私有数据

安全和成员服务

Hyperledger Fabric 支撑着一个所有参与者都知道身份的交易网络。公钥基础设施用于生成与组织、网络组件、最终用户或客户端应用程序绑定的加密证书。因此,可以在更广泛的网络和通道级别上操纵和控制数据访问控制。这种“许可”概念的 Hyperledger Fabirc,加上通道的存在和功能,有助于解决隐私和机密性是最重要的问题。

请参阅 成员服务提供者 (MSP) 主题,以更好地理解加密实现,以及在 Hyperledger Fabric 中使用的签名、验证和身份验证方法。

共识

在分布式账本技术中,共识已成为单个函数内特定算法的同义词。然而,共识不仅包括简单地就交易顺序达成一致,而且 Hyperledger Fabric 通过其在整个交易流程中的基本角色,从提案和背书,到排序,验证和提交,突出了这种区别。简而言之,共识被定义为包含在一个区块中的一组交易的正确性的全循环验证。

当区块的交易的顺序和结果满足显式策略标准检查时,最终就会达成共识。这些检查和平衡发生在交易的生命周期中,包括使用背书策略来规定哪些特定成员必须背书某个交易类,以及系统链码来确保这些策略得到执行和维护。在提交之前,节点将使用这些系统链码来确保存在足够的背书,并且背书来自适当的实体。此外,在将任何包含交易的区块添加到账本之前,还将进行版本检查,在此期间对账本的当前状态达成共识。最后的检查提供了对双花操作和其他可能损害数据完整性的威胁的保护,并允许对非静态变量执行功能。

除了进行大量的背书、有效性和版本检查之外,还在交易流的各个方向进行身份验证。访问控制列表是在网络的层次结构层上实现的(从排序服务到通道),当交易提案通过不同的架构组件时,有效负载被重复签名,确认和验证。总而言之,共识并不仅仅局限于一批交易的商定顺序;相反,它是一种总体特征,是在交易从提议到担保的过程中进行的验证的附属产物。

查看 交易流程 以获得共识的直观表示。