fabric核心概念
fabric核心概念
hyperledger fabric符合上面说过的区块链的所有特性。我们必须先了解它的一些概念,才能进一步理解其架构设计。由于英文资料居多,所以这些概念我都以英文描述为准:
chaincode:智能合约,每个chaincode可提供多个不同的调用命令。
智能合约是运行在区块链上的模块化、可重用的自动执行脚本,有了它我们就可以完成复杂的业务逻辑,例如同一个区块链上有多份合约,而每份合约可以约定不同的参与者(企业或者相关方)。也可以指定每份合约里每个子命令做一批特定的事,大家可以把它想象成关系数据库里的事务。
在fabric中,智能合约叫做chaincode,它有6个状态,如下所示
Install → Instantiate → invocable → Upgrade → Deinstantiate → Uninstall.
实际上智能合约就是一段代码,fabric官方认可的是GO语言。首先我们需要把合约代码上传到区块链上,这一步的状态就叫Install
需要做初始化操作。比如,现在的数据是存放在mysql中的,那么上线时需要用Instantiate把数据迁移至链上,这也算初始化。初始化后,chaincode就进入invocable可调用状态了。
通用我们可以通过CLI命令行或者程序里用SDK调用合约
联盟链由于跨多家企业、多个地区甚至国家,很难使得合约保持一致的版本,因此,每个合约都有版本号。而版本升级时,就是Upgrade状态。
最后两个状态对应着合约下链
transaction:交易,每条指令都是一次交易。
world state:对同一个key的多次交易形成的最终value,就是世界状态。
endorse:背书。金融上的意义为:指持票人为将票据权利转让给他人或者将一定的票据权利授予他人行使,而在票据背面或者粘单上记载有关事项并签章的行为。通常我们引申为对某个事情负责。在我们的共识机制的投票环节里,背书意味着参与投票。
endorsement policy:背书策略。由智能合约chaincode选择哪些peer节点参与到背书环节来。
peer:存放区块链数据的结点,同时还有endorse和commit功能。
channel:私有的子网络,事实上是为了隔离不同的应用,一个channel可含有一批chaincode。
PKI:Public Key Infrastructure,一种遵循标准的利用公钥加密技术为电子商务的开展提供一套安全基础平台的技术和规范。
MSP:Membership Service Provider,联盟链成员的证书管理,它定义了哪些RCA以及ICA在链里是可信任的,包括定义了channel上的合作者。
org:orginazation,管理一系列合作企业的组织。
HyperLedger:超级账本项目
一。Fabric中的节点
1。节点术语
【1】。Orderers:
提供共识服务的网络节点,例如,使用Kafka或PBFT
【2】。Peers:
维护账本的网络节点,通常在Hyperledger Fabric中担任背书或者记账角色。
【3】。Comitter:
检查交易的合法性,最终将交易提交到区块链中。
2。Orderers & Peers & Comitter节点关系
Orderers & Peers & Comitter 三者之间关系如下图所示:
Fabric中交易的处理过程
在整个交易过程中,各个组件的主要功能如下:
【1】。客户端(APP):
客户端应用使用SDK来跟Fabric网络打交道。
首先,客户端从CA获取合法的身份证书来加入网络内的应用通道。
然后,将交易的提案发送给配置文件里指定的背书节点(Endorser节点)
【2】。Endorser节点:
完成对交易提案的背书(目前主要是签名)处理。
检查是否合法,通过则模拟运行交易,对交易导致的状态变化进行背书并返回结果给客户端
【3】。Orderer节点:
仅负责排序。
为网络中所有合法交易进行全局排序,并将一批排序后的交易组合生成区块结构。
Orderer一般不需要跟账本和交易内容直接打交道。
【4】。Committer节点
负责维护区块链和账本结构。
该节点会定期地从Orderer获取排序后的批量交易区块结构,对这些交易进行落盘前的最终检查。
检查通过后执行合法的交易,将结果写入账本,同时构造新的区块。
注意!同一个物理节点可以仅作为Committer角色运行,也可以同时担任Endorser和Committer这两种角色。
【5】。CA:
负责网络中所有证书的管理(分发、撤销等),实现标准的PKI(公共密钥基础)架构。
二。Fabric中的通道
上面只是在一个交易中,从节点的角度,来看交易的处理过程。然而,究竟有多少节点参与背书?多少节点来进行共识排序呢?在Fabric中,引入了通道的概念。
一般情况下,一条区块链网路的子链是按照“1个通道+ 1个账本+ N个成员 ”的基本组成。
通道是两个或多个特定网络成员之间的通信的私有“子网”,用于进行需要数据保密的交易。在Fabric中,建立一个通道相当于建立了一个个子链。
创建通道是为了限制信息传播的范围,是和某一个账本关联的。每个交易都是和唯一的通道关联的。这会明确地定义哪些实体(组织及其成员)会关注这个交易。
1。通道术语
【1】。通道:
Order 服务提供Peer节点供订阅的主题,每个主题是一个通道。
peer可以在订阅多个通道,并且只能访问订阅通道上的交易。关于“订阅-发布主题”,在后面会详细介绍。
【2】。账本:
账本保存Orders提交经节点确认的交易记录。
【3】。成员:
访问和使用账本的网络节点。
【4】。链:
基本上,一个链由1个通道+ 1个账本+ N个成员组成。非链的成员无法访问该链上的交易。链的成员可以由应用程序动态指定。
从关键词“1个通道+ 1个账本+ N个成员”可以知道,要在Fabric区块链网络中,搭建一个子链,需要创建通道,利用通道将成员加入进来,由N个成员维护一个账本,从而实现一个区块链。
注意:
共识服务接收所有链的所有交易,因此保密性仅与peer而不是Orderers相关。
当共识服务由被许可网络中的可信方和监管机构组成时,这样是合理的,也就是说,这些交易作为业务需求仅对他们可见。
另一方面,如果应用程序不希望Orderers知道交易的内容,它必须利用其他技术来隐藏敏感数据,例如哈希散列或加密。
共识服务作为一个信任方存在,如果是由拜占庭容错(BFT)共识协议实现(例如PBFT),可以防止不可信的Orderers破坏账本的一致性和阻碍系统可用性。
然而,现在还没有一种协议可以在有不可信的Orderers存在的情况下,提供多通道设计的同时提供数据保密性。
三。Fabric的拓扑结构
Fabric网络-子链的拓扑关系图
上图解释如下所示:
【1】。三条线,蓝色实线,红色实线,和橙色虚线,分别代表三个通道。
【2】。所有的通道,都连接了Ordering Service说明,共识服务接收所有链的所有交易。这一点,也说明了HyperLedger Fabric不是完全的去中心化,而是多中心化。
【3】。peer1.1等节点,接入了多个通道,说明一个peer节点也可以参与到多个channel中。每个Channel之间是相互隔离,且是并行运行的。这一特性大大提高了系统的吞吐量。
从上图可以知道:
【1】。一个链由1个通道+ 1个账本+ N个成员组成。
【2】。共识是由Ordering Service提供的。
【3】。应用程序指定Peer节点的子集中架设通道。这些peer组成提交到该通道交易的相关者集合,而且只有这些peer可以接收包含相关交易的区块,与其他交易完全隔离。
四。Fabric子链示意图
下图展示了多通道消息订阅与共识服务,账本之间的关系:
如上图所示:
peer 1,2和N订阅红色通道,并共同维护红色账本;
peer 1和N订阅蓝色通道并维护蓝色账本;
类似地,peer 2和peer N在黑色通道上并维护黑色账本。
在这个例子中,peer N在订阅了所有通道,我们看到每个通道都有一个相关的账本。
一般来说,我们称不涉及所有peer的账本为子账本,而涉及所有peer的账本另一种是系统账本,即全账本。
总结
在这里,我们理解了Fabric中的一个重要的概念,通道。以及一种重要的关系,通道和Peer节点的关系。
Hyperledger Fabric架构使用具有保证的发布-订阅模式消息传递通道(如Kafka中的主题分区),这种发布-订阅模式将共识服务与交易日志(账本)进行了有效的分离。
共识服务由称为Orderers的网络节点提供,并且账本由Peer节点管理。
从节点的角度来看,每个Peer节点连接到共识服务的一个或多个通道,就像发布-订阅通信系统中的客户端一样。
在通道上广播的交易按共识的顺序排列(例如PBFT、kafka),订阅通道的Peer节点接收到加密的区块。
每个peer节点验证区块并将其提交到账本,然后向应用程序提供其他使用账本的服务。
从通道的节点来看,通道在众多的节点中,选择N个节点,加入到通道中,共同维护账本。
以实现“1个通道+ 1个账本+ N个成员”为基本要素的子链!
参考网址:https://zhuanlan.zhihu.com/p/35349072
原文链接:https://blog.csdn.net/russell_tao/java/article/details/80459698