超级账本Fabric模型

本节概述了超级账本Fabric结构中的关键设计特性,实现了其全面、可定制的企业区块链解决方案的承诺:

  • 资产 — 资产定义使得几乎任何具有货币价值的东西都可以通过网络进行交换,从全食超市(whole foods)到古董车,再到货币期货。

  • 链码 — 链码的执行与交易排序是分开的,这限制了跨节点类型的信任和验证所需的级别,并优化了网络的可伸缩性和性能。

  • 账本特点 — 不可改的、共享的账本为每个通道编码整个交易历史,并包含类似sql的查询功能,用于有效的审计和争议解决。

  • 隐私 — 通道和私有数据收集支持私有和机密的多边交易,这通常是在公共网络上交换资产的竞争企业和受监管的行业所需要的。

  • 安全会员服务 — 被许可的成员资格提供了一个可信的区块链网络,参与者知道所有的交易都可以被授权的监管机构和审计人员检测和跟踪。

  • 共识 — 达成共识的独特方法支持企业所需的灵活性和可伸缩性。

资产

资产可以是有形的(房地产和硬件),也可以是无形的(合同和知识产权)。超级账本Fabric提供了使用链码交易修改资产的能力。

资产在超级账本Fabric中表示为键值对的集合,状态更改记录为在:ref:`通道`账本上的交易。资产可以用二进制和/或JSON格式表示。

在超级账本Fabric应用程序中,您可以使用`Hyperledger Composer <https://github.com/hyperledger/composer>`__ 工具轻松定义和使用的资产。

链码

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

账本特性

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

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

Fabric账本的一些特点:

  • 查询和使用基于键的查找更新账本、范围查询和组合键查询

  • 使用富查询语言的只读查询(如果使用CouchDB作为状态数据库)

  • 只读历史查询——查询某键的账本历史记录,支持数据溯源场景

  • 交易由链码中读取的键/值(读集)版本和链码中写入的键/值(写集)的版本组成

  • 交易包含每个背书peer的签名,并提交给排序服务

  • 交易排序后进入区块,并从排序服务“交付”到通道上的peer

  • peer根据背书策略验证交易并执行这些策略

  • 在添加区块之前,执行版本控制检查,以确保所读取的资产的状态自链码执行时间以来没有更改

  • 一旦交易被验证和提交,就会有不变性

  • 通道的账本包含一个定义了策略、访问控制列表和其他相关信息的配置区块

  • 通道包含 Membership Service Provider 实例,允许从不同的证书颁发机构派生加密材料

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

隐私

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

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

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

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

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

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

安全和成员服务

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

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

共识

在分布式账本技术中,共识最近已经成为特定算法的同义词,在单个函数中。然而,共识不只是简单地同意交易的顺序,这种差异在超级账本Fabric中通过其在整个交易流程(从提议和背书,到排序、验证和担保)中的基本作用得到了强调。简而言之,共识被定义为包含在一个区块中的一组交易的正确性的全循环验证。

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

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

查看 Transaction Flow 图表,以获得共识的可视化表示。