术语表

专业术语很重要,所以每一个 Hyperledger Fabric 项目的用户和开发人员,都要理解我们所说的每一个术语的含义,比如什么是链码。本文档将会按需引用这些术语,如果你愿意的话可以一次性读完整本文,这会非常有启发!

锚节点

被 gossip 用来确保在不同组织中的 Peer 节点能够知道彼此。

当一个包含锚节点更新的配置区块被提交的时候,Peer 节点会连接到锚节点并获得它所知道的所有 Peer 节点信息。一旦每个组织中至少有一个 Peer 节点已经连接到了一个或多个锚节点的话,锚节点就会知道在这个通道中的每个 Peer 节点。因为 gossip 通信是不变的,并且因为 Peer 节点总是会被告知他们所不知道的其他的存在的 Peer 节点,所以可以建立一个通道的成员视图。

比如,我们假设通道中有三个组织 ABC,和组织 C 定义的一个的锚节点 peer0.orgC。当组织 A 中的 peer1.orgA 连接到 peer0.orgC 的时候,它会告诉 peer0.orgC 关于 peer0.orgA 的信息。然后,当 peer1.orgB 连接到 peer0.orgC 的时候,peer0.orgC 会告诉 peer1.orgB 关于 peer0.orgA 的信息。从此之后组织 AB 就可以开始直接地交换成员信息而不需要 peer0.orgC 的帮助了。

由于组织间的通信是基于 gossip 的,所以在通道配置中至少要定义一个锚节点。为了高可用和冗余,非常建议每个组织应该提供他们自己的一组锚节点。

ACL

ACL(Access Control List),或称访问控制列表,将特定节点资源(例如系统链码的 API 或事件服务)的访问与策略(指定需要多少和哪些类型的组织或角色)相关联。ACL 是通道配置的一部分。 因此,它会保留在通道的配置区块中,并可使用标准配置更新机制进行更新。

ACL 被格式化为键值对列表,其中键标识了我们希望控制其访问权限的资源,值标识了允许访问它的通道策略(组)。 例如, lscc/GetDeploymentSpec: /Channel/Application/Readers 定义了只有满足 /Channel/Application/Readers 策略的标识才可以访问生命周期链码 GetDeploymentSpec API(资源)。

configtx.yaml 文件中提供了一组默认 ACL,configtxgen 使用该文件来构建通道配置。可以在 configtx.yaml 的“Application”部分中设置默认值,也可以在“Profiles”部分中按每个配置文件来覆盖默认值。

区块

A Block

区块 B1 是连接到区块 B0 的。区块 B2 是连接到区块 B1 的。

一个区块包含了一组有序的交易。他们通过加密与前一个区块相连,同时也和后续的区块相连。这条链的第一个区块被称为 创世区块。区块由排序系统创建,并由 Peer 节点进行验证。

Blockchain

区块链 B 包含了区块 0, 1, 2

账本的链是交易区块通过“哈希连接”的结构化的交易日志。Peer 节点从排序服务接受交易区块,基于背书策略和并发冲突来标注区块中的交易为有效或者无效状态,并且将区块追加到 Peer 节点文件系统的哈希链中。

链码

查看 智能合约

通道

A Channel

通道 C 连接了应用程序 A1,节点 P2 和排序服务 O1。

通道是用于数据隔离和保密的一个私有区块链。通道中的节点共享该通道的账本,交易方必须通过该通道的授权才能与账本进行交互。通道是由一个“配置区块 ”来定义的。

提交

通道中每个 Peer节点 都会验证交易的有序区块,然后将区块提交(写或追加)至该通道的每一个 账本 副本上。Peer 节点也会标记每个区块中的每笔交易的状态是有效或者无效的。

并发控制版本检查(Concurrency Control Version Check,CCVC)

CCVC 是保持通道中各节点间状态同步的一种方法。节点并行的执行交易,在交易提交至账本之前,节点会检查交易在执行期间读到的数据是否被修改。如果读取的数据在执行和提交之间被改变,就会引发 CCVC 冲突,该交易就会在账本中被标记为无效,并且值不会更新到状态数据库中。

配置区块

包含为系统链(排序服务)或通道定义成员和策略的配置数据。对某个通道或整个网络的配置修改(比如,成员离开或加入)都将导致生成一个新的配置区块并追加到适当的链上。这个配置区块会包含创始区块和新增的内容。

共识

一个涵盖整个交易流程的术语,用来为区块中的交易生成一个大家认可的顺序并确认交易的正确性。

共识者集合

在 Raft 排序服务中,它们是积极参与到通道的共识机制的排序节点。如果其他排序节点在系统通道中,但是不在(应用)通道中,它们就不属于该通道的共识者集合。

联盟

联盟是区块链网络上非定序的组织集合。这些是创建和加入通道及拥有节点的组织。虽然区块链网络可以有多个联盟,但大多数区块链网络都只有一个联盟。在通道创建时,添加到通道的所有组织都必须是联盟的一部分。但是,未在联盟中定义的组织也可以添加到现有通道。

当前状态

查看 世界状态

动态成员

Hyperledger Fabric 支持成员、节点、排序服务节点的添加或移除,而不影响整个网络的操作性。当业务关系调整或因各种原因需添加或移除实体时,动态成员至关重要。

背书

背书是指特定节点执行一个链码交易并返回一个提案响应给客户端应用的过程。提案响应包含链码执行后返回的消息,结果(读写集)和事件,同时也包含证明该节点执行链码的签名。链码应用具有相应的背书策略,其中指定了背书节点。

背书策略

定义了在一个通道上对于某个链码应用,必须执行交易的 Peer 节点和必要的响应(背书)。一个策略要包含背书一笔交易所需节点的最少数量、最小比例、或者全部节点都需要背书。背书策略可以基于应用程序和节点对抵御不良行为(有意无意)的期望水平来组织管理。提交的交易必须符合背书策略才会被交易为有效交易。安装和实例化交易时,也需要一个明确的背书策略。

跟随者

在一个基于领导者的共识协议中,比如 Raft,其他节点要从领导节点哪里复制日志项。在 Raft 中,跟随者还接收领导节点的“心跳”信息。当领导者在设定的时间内没有发送心跳信息的时候,跟随者节点会从新选举出一个领导节点。

创世区块

创世区块是初始化区块链网络或通道的配置区块,也是链上的第一个区块。

Gossip 协议

Gossip 数据传输协议有三项功能: 1)管理节点发现和通道成员; 2)在通道上的所有节点间广播账本数据; 3)在通道上的所有节点间同步账本数据。 更多内容请参考 Gossip 话题。

Hyperledger Fabric CA

Hyperledger Fabric CA(证书授权中心)是默认的认证授权管理组件,它向网络成员的组织及其用户颁发基于 PKI 的证书。CA 为每个成员颁发一个根证书(rootCert),为每个授权用户颁发一个注册证书(ECert)。

初始化

初始化链码程序的方法。

安装

将链码放到节点文件系统的过程。

实例化

在特定通道上启动和初始化链码应用的过程。实例化完成后,装有链码的节点可以接受链码调用。

调用

用于调用链码内的函数。客户端应用通过向节点发送交易提案来调用链码。节点会执行链码并向客户端应用返回一个背书提案。客户端应用会收集充足的提案响应来判断是否符合背书策略,该结构会被用于交易的排序、验证和提交阶段。客户端应用也可以不提交交易结果。比如,查询账本的调用,一般来说客户端应用是不会提交这种只读性交易的,除非基于审计目的,需要记录访问账本的日志。调用中包含了通道标识符,调用的链码函数,以及一个包含参数的数组。

领导者

在一个基于领导者的共识协议中,比如 Raft,领导者用于生成新的日志项,将它们复制到排序节点,并在需要提交的时候进行管理。它不是一个特殊 类型 的排序节点。它是排序节点在特定时期的一种角色,并且在一个周期内只有一个领导者点。

主节点

每一个 组织 在其订阅的通道上可以拥有多个节点。其中一个或多个节点会作为通道的主节点,代表该组织与排序节点通信。排序服务将区块传递给通道上的主节点,主节点再将此区块分发给组织中的其他节点。

账本

A Ledger

账本 'L'

账本由两个不同但相关的部分组成——“区块链”和“状态数据库”,也称为“世界状态”。与其他账本不同,区块链是 不可变 的,也就是说,一旦将一个区块添加到链中,它就无法更改。相反,“世界状态”是一个数据库,其中包含的是经过区块链验证和提交的用于添加、修改或删除的键值对当前值的交易。

我们可以认为网络中每个通道都有一个 逻辑 账本。实际上,通道中的每个节点都维护着自己的账本副本,该副本通过共识与所有其他节点的副本保持一致。术语 分布式账本技术(DLT) 通常与这种账本相关,这种账本在逻辑上是单一的,但在一组网络节点(节点和排序服务)上分布有许多相同的副本。

日志项

Raft 排序服务中主要的工作单元,日志项从领导节点分发到跟随节点。这样的事项的完账序列称为“日志”。日志保证了成员对于事项和其顺序的一致性要求。

成员

参见 组织

成员服务提供者

An MSP

MSP 'ORG.MSP'

成员服务提供者(Membership Service Provider,MSP)是指为客户端和节点加入 Hyperledger Fabric 网络提供证书的抽象组件。客户端用证书来认证他们的交易;节点用证书背书交易处理结果。该接口与系统的交易处理组件密切相关,旨在定义成员服务组件,以这种方式可选实现平滑接入而不用修改系统的交易处理组件核心。

成员服务

成员服务在许可区块链网络上用于认证、授权和身份管理。运行于节点和排序服务的成员服务代码均会参与认证和授权区块链操作。它是 MSP 基于 PKI 的实现。

排序服务

预先定义好的一组将交易排序放入区块的节点。排序服务独立于节点流程之外,并以先到先处理的方式为网络上所有通道做交易排序。排序服务是可插拔的,目前默认实现了 SOLO 、Kafka 和 Raft。排序服务与整个网络相绑定,包含与每个 成员 相关的加密材料。

组织


An Organization

组织 'ORG'

也称为“成员”,区块链服务提供者邀请组织加入区块链网络。组织通过将成员服务提供者( MSP )添加到网络的方式来加入网络。MSP 定义了网络中的其他成员如何验证一个有效的签名(例如交易上的签名)。MSP 中身份的特定访问权限由策略控制,并且加入网络的组织都同意该策略。组织可以像跨国公司一样大,也可以像个人一样小。 组织的交易终点是 Peer节点 。多个组织组成了一个 联盟 。虽然网络上的所有组织都是成员,但并非每个组织都会成为联盟的一部分。

Peer 节点

A Peer

Peer 节点 'P'

网络实体维护账本并运行链码容器来对账本做读写操作。成员拥有节点并负责维护。

策略

策略是包含数字身份属性的描述,例如:Org1.Peer OR Org2.Peer。它们用来限制对区块链网络资源的访问权限。例如,它们会指定谁可以读取或写入通道数据,或者谁可以根据 ACL 使用特定的链码 API。策略可以在启动排序服务或者创建通道之前定义在 configtx.yaml 文件中。示例 configtx.yaml 文件中的默认策略适用于大多数网络。

私有数据

存储在每个授权节点的私有数据库中的机密数据,在逻辑上与通道账本数据分开。通过私有数据集合定义,对数据的访问仅限于通道上的一个或多个组织。未经授权的组织将在通道账本上使用私有数据的哈希作为交易的证据。此外,为了进一步保护隐私,通过 排序服务 的是私有数据的哈希值而不是私有数据本身,因此这使得私有数据对排序者保密。

私有数据集合

用于管理通道上的两个或多个组织希望与该通道上的其他组织保持私密的机密数据。集合的定义描述了通道上一组有权存储私有数据的组织的子集,意味着只有这些组织才能与私有数据进行交易。

提案

通道中针对特定节点的背书请求。每个提案要么是链码的实例化,要么是链码的调用(读写)请求。

查询

查询是一个只读账本当前状态不写入账本的链码调用。链码函数可以查询账本上特定的键名,也可以查询账本上的一组键名。由于查询不改变账本状态,因此客户端应用通常不会提交这类只读交易做排序、验证和提交。不过,特殊情况下,客户端应用还是会选择提交只读交易做排序、验证和提交。比如,客户需要账本链上保留可审计证据,就需要链上保留某一特定时间点的特定账本的状态。

法定人数

规定了确认一个提案中交易的顺序所需要的最小成员数量。对于每一个共识者集合来说,法定人数为 大多数 节点。在有五个节点的集群中,必须有三个才能达到法定人数。无论任何原因不能达到法定人数,该集群都不能进行读写操作并且不难提交新日志。

Raft

v1.4.1 更新,Raft 是一个基于 etcd library 实现了 Raft 协议 的崩溃容错排序服务(Crash Fault Tolerant,CFT)。Raft 使用 “领导者跟随者”模型,每个通道选举一个领导者并且向跟随者分发它的决定。Raft 排序服务比基于 Kafka 的排序服务更容易设置和管理,并且它的设计可以让组织向分布式排序服务共享节点。

软件开发包 (SDK)

Hyperledger Fabric 客户端软件开发包(SDK)为开发人员提供了一个结构化的库环境,用于编写和测试链码应用程序。SDK 完全可以通过标准接口实现配置和扩展。它的各种组件:签名加密算法、日志框架和状态存储,都可以轻松地被替换。SDK 提供 API 进行交易处理、成员服务、节点遍历以及事件处理。

目前,两个官方支持的 SDK 为 Node.js 和 Java,而另外三个:Python、Go 和 REST 尚非正式,但仍可以下载和测试。

智能合约

智能合约是由区块链网络外部的客户端应用程序调用的代码,用于管理世界状态中的键值对的访问和修改。在 Hyperledger Fabric 中,智能合约被称为链码。智能合约链码安装在节点上在一个或多个通道上实例化。

状态数据库

为了高效的读取和查询链码,当前的状态存储在状态数据库中。支持的数据库包括 levelDB 和 couchDB。

系统链

一个在系统层面定义网络的配置区块。系统链存在于排序服务中,与通道类似,具有包含以下信息的初始配置:MSP 信息、策略和配置详情。网络中的任何变化(例如新的组织加入或者新的排序节点加入)将导致新的配置区块被添加到系统链中。

系统链可以看作是和一个或一组通道的绑定。例如,金融机构的集合可以形成一个财团(表现为系统链),然后根据其相同或不同的业务计划创建通道。

交易

A Transaction

交易 'T'

将调用或者实例化结果提交到排序、验证和提交程序。调用是从账本中读取或写入数据的请求。实例化是在通道中启动并初始化链码的请求。客户端应用从背书节点收集调用或实例化响应,并将结果和背书打包到交易中,即把结构提交到做排序,验证和提交程序。

世界状态

Current State

世界状态 'W'

世界状态也称为“当前状态”,是 Hyperledger Fabric 账本的一个组件。世界状态表示交易日志中所包含的所有键的最新值。链码针对世界状态数据执行交易提案,因为通过世界状态可以直接访问对这些密钥的最新值,而不是通过遍历整个交易日志来计算它们。每当键的值发生变化时(例如,当汽车的所有权(“键”)从一个所有者转移到另一个所有者(“值”)或添加新键(创造汽车)时,世界状态就会改变。因此,世界状态对交易流程至关重要,因为必须先知道键值对的当前状态才能更改。处理过的区块中包含的每个有效事务,节点都会将最新值提交到世界状态中。