开发者创建客户端应用和智能合约(chaincode),Chaincode被部署到区块链网络的Peer节点上面。通过chaincode来操作账本,当你调用一个交易transaction时,你实际上是在调用Chaincode中的一个函数方法,它实现业务逻辑,并对账本进行get, put, delete操作。客户端应用提供用户交互界面,并提交交易到区块链网络上。

Fabric网络

  • 节点是区块链的通信实体,节点是一个逻辑概念,不同类型的节点可以运行在同一台物理服务器上。这些节点可能部署在云上面或者本地。可能来自不同的公司或者组织。在区块链网络中有两种类型的节点:Peer节点和Orderer节点,如下图所示。

  • Peer节点:chaincode部署在Peer节点上,它对账本进行读写操作。一个Peer节点可以充当多种角色,如背书者endorser,提交者committer。一个区块链网络中会有多个Peer节点。

  • Orderer节点:对交易进行排序,批量打包,生成区块,发给Peer节点。一个区块链网络中会有多个Orderer节点,它们共同提供排序服务。排序服务可以别实现为多种不同的方式,从一个中心化的服务(被用于开发和测试,如Solo),到分布式协议(如Kafka)。

  • 排序服务提供了通向客户端和Peer节点的共享通信通道。提供了包含交易的消息广播服务(broadcast和deliver)。客户端可以通过这个通道向所有的节点广播(broadcast)消息。通道可以向连接到该通道的节点投递(deliver)消息。

  • 排序服务支持多通道,类似于发布/订阅消息系统中的主题topic。客户端和Peer节点可以连接到一个给点的通道,并通过给定的通道发送和接收消息。多通道使得Peer节点可以基于应用访问控制策略来订阅任意数量的通道;也就是说,应用程序在指定Peer节点的子集中架设通道。这些peer组成提交到该通道交易的相关者集合,而且只有这些peer可以接收包含相关交易的区块,与其他交易完全隔离,实现数据隔离和保密。

  • 此外,peers的子集将这些私有块提交到不同的账本上,允许它们保护这些私有交易,与其他peers子集的账本隔离开来。应用程序根据业务逻辑决定将交易发送到1个或多个通道。

Fabric 1.0交易流程

第一步,客户端Client构造交易提案

client利用SDK(Node.js\java..)构造一个交易提案propose,该propose包含调用智能合约功能函数请求,用来确认哪些数据可以读取或者写入账本,client将交易提案propose发送给一个或多个peer节点,交易提案包含本次交易要调用的合约标识、合约方法和参数信息以及客户端签名等。

SDK将交易提案打包为可识别的格式(如gRPC上的protocolbuffer),并使用用户的加密凭证为该交易提案生成唯一的签名。

第二步,背书节点模拟执行交易

背书节点endorser收到交易提案后,验证签名并确定提交者是否有权执行操作。背书节点将交易提案的参数作为输入,在当前状态KV数据库上执行交易,生成包含执行返回值、读操作集合和写操作集合的交易结果(此时不会更新账本),这些值的集合、背书节点的签名和背书结果(YES / NO)作为提案的结果返回给客户端SDK,SDK解析这些信息判断是否应用于后续的交易。

第三步,客户端把交易发送到共识服务节点

应用程序(SDK)验证背书节点签名,并比较各节点返回的提案结果,判断提案结果是否一致以及是否参照指定的背书策略执行。客户端收到各个背书节点的应答后,打包到一起组成一个交易并签名,发送给Orderers。

第四步,orderer节点共识排序,生成新区块,提交交易

Orderers对接收到的交易进行共识排序,然后按照区块生成策略,将一批交易打包到一起,生成新的区块,调用deliver API投递消息,发送给提交节点。

提交节点收到区块后,会对区块中的每笔交易进行校验,检查交易依赖的输入输出是否符合当前区块链的状态,完成后将区块追加到本地的区块链,并修改K-V状态数据库。

Fabric 1.0优势总结

完备的权限控制和安全保障
成员必须被许可才能加入网络,通过证书,加密,签名等手段保证安全。通过多通道功能,保证只有参与交易的节点能访问到数据,其他的节点看不到。满足数据保护方面的法律法规要求。如有些行业,需要知道谁访问了特定的数据。

模块化设计,可插拔架构

如状态数据库可采用Level DB或者Couch DB,或其他的key-value数据库。

身份管理(identity management)可以采用自己的。共识机制和加密算法也是可插拔的,可以根据实际情况选择替换。

高性能,可扩展,较低的信任要求
Fabric采用模块化架构把交易处理划分为3个阶段:通过Chaincode进行分布式业务逻辑处理和协商(endorsers);交易排序(orderders);交易的验证和提交(committers)。这样划分带来的好处:不同的阶段由不同的节点(角色endorsers, orderders, committers)参与,不需要全网的节点都参与。网络的性能和扩展性得到优化。Peer节点和Orderder节点可以独立扩展,并可以动态增加。

因为只有endorsers和committers能真正交易的内容。只需要较低的信任要求就可以保证安全。

在不可更改的分布式账本上提供丰富的查询功能
可以在Level DB上进行按key查询,按复合KEY查询,按KEY的范围查询。如果采用Couch DB,Couch DB是文档数据库,数据是JSON格式的。除了支持按key查询,按复合KEY查询,按KEY的范围查询外,还支持全文搜索。

posted on 2021-06-03 20:45  20175316  阅读(127)  评论(0编辑  收藏  举报