5.4 orderer节点与多通道
在这里插入图片描述可知:Consensus Service是orderer节点,图中有三条通道,每条通道中有不同的peer节点。
总结:
- 一个peer节点可以同时加入多个不同的通道,并且一个peer节点处于n个通道中,那么该节点就将有n个不同的账本。
- 无论网络中有多少条通道,排序服务器有一个就够了。排序服务器会将不同通道中的数据分开排序,并不会在排序过程中造成数据混乱。
- 通过通道来连接peer节点和orderer节点。
6 组织
Fabric中的组织是通过职能划分的,只能相同的节点构成一个组织。
上图中,P1-P8是peer节点,A1-A4为客户端,Org1-Org4为组织,C为通道。
- P1和P2节点由于职能相同所以属于同一个组织Org1。
- 当我们想修改P1或P2的账本时,需要一个客户端来与P1或P2进行连接。客户端A1是用来访问P1和P2的,所以A1也属于组织Org1。
- 但是不同的节点处于同一个组织,并不意味着这些节点也部署在同一个地方。
- 由于不同组织中的节点职能不同,所以不同组织内节点安装的智能合约也是不同的。
- 同一个组织内的节点安装的智能合约是相同的。
- 每个组织内都有一个专门的客户端用来访问当前组织内的所有节点。
- 同一个通道内的不同组织中的节点账本数据都是相同的。
7 Fabric网络中的交易流程
在了解交易流程之前,我先给大家普及一个概念——背书策略。
背书策略:交易被执行的操作步骤。
假如说当前网络中有两个组织:org1和org2,每个组织中各有两个peer节点peer0和peer1。如果在这个网络里发生交易,我们就要实现定下一个交易策略。
比如:任何一笔交易只有在org1和org2的peer0都同意的情况下才能生效。
上面这个策略就是交易策略。当然背书策略可以有很多中组合,上面只是其中的一种情况。
背书策略与交易策略不同。背书策略执行的结果并不会被计入账本,它只是个模拟的交易。
当用户通过客户端发起一笔交易时,整个交易流程如下图所示:
在这里插入图片描述
- 客户端向peer节点发起交易请求。
- peer节点收到客户端发来的交易请求,并模拟交易,得到一个结果。这个模拟的过程类似于:假如客户端发来的交易请求要花1000元,peer节点模拟这个交易要检查发起交易的账户中的余额是否大于1000,如果不大于模拟交易失败。
- peer节点将模拟交易的结果返回给客户端。
- 客户端收到模拟交易的结果后,连接orderer节点并将交易结果转发送给orderer节点。
- orderer节点收到结果,先排序后打包。
- orderer节点根据环境变量的设置(打包数据的具体规则)将打包好的区块发送给peer节点。
- peer节点接收数据,首先校验模拟交易的结果。如果没问题,写入账本。如果有问题,不写入账本。
- 最后将操作是否成功返回给客户端。
一定会有聪明的小朋友问:为什么要这么费劲地设置这个背书策略?
其实,这个模拟交易的过程就是怕伪造数据。如果客户端伪造了一笔交易数据直接骗过了接收数据的peer节点而写入账本。那么事后其他节点对此交易产生质疑也无济于事。因为一旦数据写入账本就是无法更改的,所以必须保证在写入账本之前获得网络内的许可。通过交易策略的模拟决策就可以写入账本,这样也不会有人在事后对这笔交易产生异议。
即背书策略就给了其他peer节点一个投票的过程。
8 深入了解账本
前面已经介绍过,peer节点中的账本分为两部分:区块链和世界状态。
世界状态是以键值对的形式保存在levelDB数据库中。世界状态保存着最近的一笔交易的信息,所以在每次账本更新后都需要被修改。
区块链中保存着所有的交易数据,只能添加数据,但却无法修改数据。
世界状态的值是由区块链数据决定的。
区块链的内部结构如下图所示:
在这里插入图片描述
一个区块中保存n条数据,以链状结构相互连接。但是创世区块(区块链中第一个区块)中不存储交易数据。它存储的是该私有网络中的通道、组织等相关网络信息。
所以区块链是从第二个区块才开始存储交易数据。每个区块由区块头、区块数据和元数据三部分构成。
区块头中存有当前区块的哈希值和前一个区块的哈希值,这也是区块链中数据无法被篡改的原因。
区块数据中存储的是用户的交易记录,这个要记住。这个交易记录还能再往下细分,比如背书策略相关的数据和签名等,感兴趣的朋友可以去官方网站看文档。
ps:
本人热爱图灵,热爱中本聪,热爱V神,热爱一切被梨花照过的姑娘。
以下是我个人的公众号,如果有技术问题可以关注我的公众号来跟我交流。
同时我也会在这个公众号上每周更新我的原创文章,喜欢的小伙伴或者老伙计可以支持一下!
如果需要转发,麻烦注明作者。十分感谢!
公众号名称:后现代泼痞浪漫主义奠基人
网友评论