参考:https://hyperledgercn.github.io/hyperledgerDocs/glossary/
Chaincode - 链码,即智能合约
链码是一个运行在账本上的软件,它可以对资产进行编码,其中的交易指令(或者叫业务逻辑)也可以用来修改资产,链码运行的交易可能会改变世界状态。
链码是一段可以访问账本的代码,一个链码可以访问一个甚至多个账本
大多数情况下,chaincode只会访问账本的数据库组件和世界状态(world state)(比如查询),但不会查询交易记录。
Ledger - 账本
总账由两个主要的部分组成,一个是区块链,一个是世界状态。区块链是在总账中的一系列连接好的用来记录交易的区块。世界状态是一个用来存储交易执行状态的键-值(key-value)数据库。区块包含的另外两个重要信息是它包含区块执行所有交易后的交易列表和世界状态的哈希
账本是通过chaincode链码来访问的,每个节点手里都有一个或多个账本。当然,其实也允许一个账本上面是没有链码的,但是这就意味着这个账本是不能被访问和更改的
一个账本可能被多个链码访问
带有权限的总账(Permissioned Ledger)
是一个由每个实体或节点都是网络成员(即在MSP中登记过)所组成的区块链网络。匿名节点是不允许连接的。
Block - 区块
在一个通道上,(区块是)一组有序交易的集合。区块往往通过密码学手段(Hash 值)连接到前导区块。
Zhu Jiang:区块是一组有序的交易集合,在通道中经过加密(哈希加密)后与前序区块连接。
Chain - 链
chain就是block之间以hash连接为结构的交易日志。peer从order service接收交易block,并根据背书策略和并发冲突标记block上的交易是否有效,然后将该block追加到peer文件系统中的hash chain上。
Zhu Jiang:账本的链是一个交易区块经过“哈希连接”结构化的交易日志。对等节点从排序服务收到交易区块,基于背书策略和并发冲突来标注区块的交易为有效或者无效状态,并且将区块追加到对等节点文件系统的哈希链中。
System Chain - 系统链
包含在系统级定义网络的配置块。系统链存在于ordering服务中,类似于通道,具有包含诸如以下信息的初始配置:MSP信息,策略和配置细节。对整个网络的任何改变(例如,添加新的组织加入或新的排序节点)将导致将新的配置块添加到系统链。
系统链可以被认为是信道或信道组的公共绑定。例如,一组金融机构可以形成一个联盟(通过系统链表示),然后进行创建相对于其结盟的和不同业务议程的渠道
(所以就是说想要添加新的组织channel和排序节点等,都是通过调用系统链生成的,然后生成的配置信息就会添加到系统链中记录下来
Current State - 当前状态,即World State
ledger的current state表示其chain交易log中所有key的最新值,即交易执行结果的变量集合。peer会将处理过的block中的每个交易对应的修改value提交到ledger的current state,由于current state表示channel所知的所有最新的k-v,所以current state也被称为World State。Chaincode执行交易proposal就是针对的current state。
Member - 成员
拥有网络唯一根证书的合法独立实体。像peer节点和app client这样的网络组件会链接到一个Member。
一个成员能够拥有多个节点
Dynamic Membership - 动态成员
Fabric支持动态添加-移除members、peers和ordering服务节点,而不会影响整个网络的操作性。当业务关系调整或因各种原因需添加-移除实体时,Dynamic Membership至关重要。
Membership Services - 成员服务
成员服务在许可的区块链网络上认证、授权和管理身份。在peer和order中运行的成员服务的代码都会认证和授权区块链操作。它是基于PKI的MSP实现。
成员服务为网络提供身份管理,隐私,保密和可审计性的服务。在一个不带权限的区块链中,参与者是不需要被授权的,且所有的节点都可以同样的提交交易并把它们汇集到可接受的块中,既:它们没有角色的区分。成员服务通过公钥基础设施(Public Key Infrastructure(PKI))和去中心化的/共识技术使得不带权限的区块链变成带权限的区块链。在后者中,通过实体注册来获得长时间的,可能根据实体类型生成的身份凭证(登记证书enrollment certificates)。在用户使用过程中,这样的证书允许交易证书颁发机构(Transaction Certificate Authority(TCA))颁发匿名证书。这样的证书,如交易证书,被用来对提交交易授权。交易证书存储在区块链中,并对审计集群授权,否则交易是不可链接的。
Membership Service Provider - MSP
MSP是指为client和peer提供证书的系统抽象组件,以及供他们参与Hyperledger Fabric网络的peer。Client用证书来认证他们的交易;peer用证书认证其交易背书。该接口与系统的交易处理组件密切相关,旨在使已定义的成员身份服务组件以这种方式顺利插入而不会修改系统的交易处理组件的核心。
与开放无需许可的网络系统允许未知身份的参与者加入网络不同(需要通过工作量证明协议来保证交易有效并维护网络的安全),Hyperledger Fabric通过Membership Service Provider(MSP)来登记所有的成员。
成员管理服务是由网络上管理用户身份和隐私的几个基础架构来组成的。这些服务验证用户的身份,在系统中注册用户,并为他/她提供所有作为可用、兼容的参数者来创建和或调用交易所需要的证书。
公共密钥体系(Public Key Infrastructure,PKI)是一个基于不仅对公共网络上交换的数据的加密而且能确认对方身份的公共密钥加密的。PKI管理密钥和数字证书的生成,发布和废止。数字证书是用来建立用户证书,并对消息签名的。使用证书签名的消息保证信息不被篡改。典型的PKI有一个证书颁发机构(CA),一个登记机构(RA),一个证书数据库,一个证书的存储。RA是对用户进行身份验证,校验数据的合法性,提交凭据或其他证据来支持用户请求一个或多个人反映用户身份或其他属性的可信任机构。CA根据RA的建议为特定的用户发放根CA能直接或分的认证的数字证书。另外,RA的面向用户的通信和尽职调查的责任可以看作CA的一部分。成员服务由下图展示的实体组成。整套PKI体系的引入加强了B2B系统的强度(超过,如:比特币)
*根证书颁发机构(根CA):*
它代表PKI体系中的信任锚。数字证书的验证遵循信任链。根CA是PKI层次结构中最上层的CA。
*登记机构(RA):*
它是一个可以确定想要加入到带权限区块链的用户的有效性和身份的可信实体。它是负责与用户外的带外通信来验证他/她的身份和作用。它是负责与用户进行频外通信来验证他/她的身份和角色。它创建登记时所需要的注册证书和根信任上的信息。
*注册证书颁发机构(ECA):*
负责给通过提供的注册凭证验证的用户颁发注册证书(ECerts)
*交易认证中心(TCA):* 负责给提供了有效注册证书的用户颁发交易证书(TCerts)
*TLS证书颁发机构(TLS-CA):*
负责签发允许用户访问其网络的TLS证书和凭证。它验证用户提供的包含该用户的特定信息的,用来签发TLS证书的,证书或证据。
*注册证书(ECerts)*
ECerts是长期证书。它们是颁发给所有角色的,如用户,非验证 peer,验证
peer。在给用户颁发的情况下,谁向区块链提交候选人申请谁就拥有TCerts(在下面讨论),ECerts有两种可能的结构和使用模式:
- Model A: ECerts
包含所有者的身份/注册ID,并可以在交易中为TCert请求提供只用来对名义实体身份做验证。它们包含两个密钥对的公共部分:签名密钥对和加密/密钥协商密钥对。
ECerts是每个人都可以访问。
- Model B: ECerts
包含所有者的身份/注册ID,并只为TCert请求提供名义实体的身份验证。它们包含一个签名密钥对的公共部分,即,签名验证公钥的公共部分。作为依赖方,ECerts最好只由TCA和审计人员访问。他们对交易是不可见的,因此(不像TCerts)签名密钥对不在这一层级发挥不可抵赖的作用。
*交易证书(TCerts)*
TCerts是每个交易的短期证书。它们是由TCA根据授权的用户请求颁发的。它们安全的给一个交易授权,并可以被配置为隐藏谁参与了交易或选择性地暴露这样身份注册ID这样的信息。他们包含签名密钥对的公共部分,并可以被配置为包含一个密钥协议的密钥对的公共部分。他们仅颁发给用户。它们唯一的关联到所有者,它们可以被配置为这个关联只有TCA知道知道(和授权审核员)。TCert可以配置成不携带用户的身份信息。它们使得用户不仅以匿名方式参与到系统中,而且阻止了交易之间的关联性。
注册证书是长期身份证书; 交易证书是短期身份凭证,其是匿名的和不可链接的
Fabric-ca
Fabric-ca是默认的证书管理组件,它向网络成员及其用户颁发基于PKI的证书。CA为每个成员颁发一个根证书(rootCert),为每个授权用户颁发一个注册证书(eCert),为每个注册证书颁发大量交易证书(tCerts
Channel - 通道
通道是构建在“Fabric”网络上的私有区块链,实现了数据的隔离和保密。通道特定的账本在通道中是与所有对等节点共享的,并且交易方必须通过该通道的正确验证才能与账本进行交互。通道是由一个“配置块”来定义的。
Hyperledger Fabric提供了建立channel的功能,这允许参与者为交易新建一个单独的账本。当网络中的一些参与者是竞争对手时,这个功能变得尤为重要。因为这些参与者并不希望所有的交易信息——比如提供给部分客户的特定价格信息——都对网络中所有参与者公开。只有在同一个channel中的参与者,才会拥有该channel中的账本,而其他不在此channel中的参与者则看不到这个账本。
Configuration Block - 配置区块
包含为系统链(排序服务)或通道定义成员和策略的配置数据。对某个通道或整个网络的配置修改(比如,成员离开或加入)都将导致生成一个新的配置区块并追加到适当的链上。这个配置区块会包含创始区块的内容加上增量。
Genesis Block - 初始区块
Genesis Block是初始化区块链网络或channel的配置区块,也是链上的第一个区块
Concurrency Control Version Check - 并发控制版本检查(CCVC)
CCVC是保持通道中各对等节点间状态同步的一种方法(这样就能够保证节点上的账本信息是相同的)。对等节点并行的执行交易,在交易提交至账本之前,对等节点会检查交易在执行期间读到的数据是否被修改。如果读取的数据在执行和提交之间被改变,就会引发CCVC冲突,该交易就会在账本中被标记为无效,而且值不会更新到状态数据库中。
Gossip Protocol - Gossip协议
Gossip数据传输协议有三项功能:1)管理peer发现和channel成员;2)channel上的所有peer间广播账本数据;3)channel上的所有peer间同步账本数据。
Commitment - 提交
一个通道中的每个对等节点都会验证交易的有序区块,然后将区块提交(写或追加)至该通道上账本的各个副本。对等节点也会标记每个区块中的每笔交易的状态是有效或者无效。
Consensus - 共识
共识是贯穿整个交易流程的广义术语,其用于产生一个对于排序的同意书和确认构成区块的交易集的正确性
Peer - 节点
一个网络实体,维护ledger并运行Chaincode容器来对ledger执行read-write操作。peer由Member拥有和维护。
一个区块链网络由peer节点组成,每一个peer节点持有一个或多个账本对应一个或多个智能合约,即链码。当然每一个peer上都会有一些系统链码,用来实现channel的建立以及leading peer节点的确定。
peer是区块链网络中最基本的模块,想要访问账本和链码必须要通过peer。peer被创建的时候是没有链码和账本的,需要后面进行添加。通过暴露的一系列接口SDK,可以允许管理员和运用程序Application来创建、开启、停止、重新配置甚至删除peer。
验证Peer(Validating Peer)
是网络中负责达成共识,验证交易(即对交易进行有效性检查,有效才将其添加到区块链上)并维护总账的一个计算节点。
非验证Peer(Non-validating Peer)
是网络上作为代理把交易员连接到附近验证节点的计算节点,即代表用户去接受用户交易,并通过一些基本的有效性验证,验证通过后才将其发送到附近的验证Peer。非验证Peer只验证交易但不执行它们。它还承载事件流服务和REST服务。
功能上讲,一个非验证 peer 是验证 peer 的子集;非验证 peer上的功能都可以在验证 peer上启用,所以在最简单的网络上只有一个验证peer组成。这个配置通常使用在开发环境:单个验证peer 在编辑-编译-调试周期中被启动。单个验证 peer不需要共识
生产或测试网络需要有多个验证和非验证 peers 组成。非验证 peer 可以为验证peer 分担像 API 请求处理或事件处理这样的压力。
Anchor Peer - 锚节点
锚节点是通道中能被所有对等节点探测、并能与之进行通信的一种对等节点。通道中的每个成员都有一个(或多个,以防单点故障)锚节点,允许属于不同成员身份的节点来发现通道中存在的其它节点。
其实它的作用就是那个连接到channel上的节点,它作为一个组织或成员为了加入某个channel拿出来作为一个锚来与channel连接,表示该成员或组织是加入了这个channel的,然后channel中的消息都从锚节点传入并传给该组织或成员的其他节点。
Leading Peer - 主导节点
每一个Member在其订阅的channel上可以拥有多个peer,其中一个peer会作为channel的leading peer代表该Member与ordering service通信。ordering service将block传递给leading peer,该peer再将此block分发给同一member下的其他peer。
⚠️member成员和peer之间的关系为:
peer是在channel中的,比如在一开始的整个网络中,是还没有channel,但是这个时候已经有成员了,当网络中生成了很多个channel,而成员又想要加入里面好几个channel时,它是通过创建peer节点加入到channel中,再将信息反馈给他的。成员是通过peer来参与网络的
链码的部署步骤就是先Install,然后再Instantiate,接着就能够对其进行Query和Invoke操作了
Install - 安装
将chaincode放到peer的文件系统的过程。
Initialize - 初始化
一个初始化chaincode程序的方法。
Instantiate - 实例化
启动chaincode容器的过程,即请求在peer上启动Chaincode容器,需要先实例化才能调用,实例化的过程中回去进行initial初始化过程。(译注:在lccc中将ChaincodeData保存到state中,然后deploy Chaincode并执行Init方法)
Invoke - 调用
用于调用chaincode内的函数。Chaincode invoke就是一个交易proposal,然后执行模块化的流程(背书、共识、 验证、 提交)。invoke的结构就是一个函数和一个参数数组。
Query - 查询
对于current state中某个key的value的查询请求
Policy - 策略
有背书策略,校验策略,区块提交策略,Chaincode管理策略和网络-通道管理策略
Proposal - 提案
一种针对channel中某peer的背书请求。每个proposal要么是Chaincode instantiate要么是Chaincode invoke
Endorsement - 背书
Endorsement 是指一个peer执行一个交易并返回YES-NO
给生成交易proposal的client app 的过程。chaincode具有相应的endorsement policies,其中指定了endorsing peer
Endorsement policy - 背书策略
Endorsement policy定义了依赖于特定chaincode执行交易的channel上的peer和响应结果(endorsements)的必要组合条件(即返回Yes或No的条件)。Endorsement policy可指定对于某一chaincode,可以对交易背书的最小背书节点数或者最小背书节点百分比。背书策略由背书节点基于应用程序和对抵御不良行为的期望水平来组织管理。在install和instantiate Chaincode(deploy tx)时需要指定背书策略。
Transaction - 交易
是区块链上执行功能的一个请求,是通过使用chaincode来实现的,是Chaincode的invoke或instantiate操作。Invoke是从ledger中请求read-write set;Instantiate是请求在peer上启动Chaincode容器。
有三种不同的交易类型:部署(Deploy),调用(Invoke)和查询(Query)。部署交易向链上安装指定的链码,调用和查询交易会调用部署号的链码。
Ordering Service - 排序服务或共识服务
将交易排序放入block的节点的集合。ordering service独立于peer流程之外,并以先到先得的方式为网络上所有的channel作交易排序。ordering service支持可插拔实现,目前默认实现了SOLO和Kafka。ordering service是整个网络的公用binding,包含与每个Member相关的加密材料。
这些概念之间的简单关系解释:
1. Application如何通过Peer去访问账本
hyperledger提供了SDK接口来允许Application连接Peer、调用链码去生成交易、最后提交交易到整个网络并接收处理过程中产生的事件
1)查询账本信息:
application可以连接到多个peer上,以确保得到的账本信息是最新的账本信息
- 首先application连接到peer上
- 然后提出proposal (= invoke chaincode),即调用链码
- 这样peer就会带着这个proposal去调用链码
- 然后链码就会根据这个proposal上的要求,即查询账本信息去调用账本ledger
- 然后peer就能够得到返回的信息,然后将其作为proposal的response返回给application
2)更新账本信息:
- application生成一个交易,即invoke chaincode或者instantiate chaincode,然后将该交易发送给Orderer排序服务模块
- orderer将该交易发送给网络内的所有节点peers
- 每个peer根据该交易的访问形式去调用链码去更新账本数据
- 账本更新完成后将生成事件,即ledger update event,传给application告知它账本更新已经完成
Software Development Kit - SDK
SDK为开发人员提供了一个结构化的库环境,用于编写和测试链码应用程序。SDK完全可以通过标准接口实现配置和扩展,像签名的加密算法、日志框架和state存储这样的组件都可以轻松地实现替换。SDK API使用gRPC进行交易处理,成员服务、节点遍历以及事件处理都是据此与fabric通信。目前SDK支持Node.js、Java和Python
State Database - stateDB
为了从Chaincode中高效的读写,Current state 数据存储在stateDB中,包括levelDB和couchDB