-
由cli/App构建一个交易提案请求,根据背书策略发送到相应的背书节点:
- cli/App生成一个交易提案请求,并根据事先设定的背书策略选择要发送的背书节点。
- 交易提案请求包含要执行的操作和相关参数。
-
背书节点接收到交易提案请求,对接收到的交易提案请求进行验证:
- 背书节点首先对接收到的交易提案请求进行验证,包括检查交易的合法性、签名等。
- 如果验证通过,背书节点调用链码进行模拟交易,但不会将交易写入区块链,仅对交易进行模拟。
-
处理完成之后,背书节点返回响应结果(提案响应,包含读写集):
- 背书节点处理完交易请求后,生成一个提案响应。
- 提案响应包含了交易的读写集(即交易对应的数据修改)。
3.1 如果交易提案请求是查询数据的请求:
cli/App直接接收查询结果,并流程结束。
3.2如果交易提案请求是非查询数据的请求:
cli/App继续下一步流程。
4.cli/App将接收到的提案响应重新打包生成一个新的交易提案请求,并将请求提交至Orderer节点:
cli/App将背书节点返回的提案响应重新打包,生成一个新的交易提案请求。
新的交易提案请求包含了背书节点的响应结果。
5.Orderer节点接收到交易提案请求后,将交易根据时间进行排序,然后将排好序的交易进行打包生成新区块:
Orderer节点接收到交易提案请求后,对接收到的交易进行排序。
排序后的交易被打包成一个新的区块。
6.各组织中的领导节点从Orderer节点中拉取新区块至本地,对区块进行验证,验证通过后存储在本地:
各组织的领导节点从Orderer节点获取新生成的区块。
领导节点对区块进行验证,包括交易的合法性、签名等。
如果验证通过,领导节点将区块存储在本地。
7.上链成功后,通过Event Stream通知cli/App:
一旦领导节点成功将区块存储在本地,区块被认为已经上链。
通过Event Stream机制,cli/App可以收到上链成功的通知。
8.领导节点将区块广播给本组织中的其他Peer节点:
领导节点将新生成的区块广播给本组织中的其他Peer节点。
其他节点接收到区块后,进行验证,并将区块存储在本地,完成整个上链过程。
流程开始
+----------------+
| cli/App |
+----------------+
| |-------------| |
| | 构建交易提案请求 |
| |-------------| |
| +----------------+
| |
| 发送到背书节点 |
| |
+----------------+
| +----------------+
| | 背书节点 |
| +----------------+
| | |-------------| |
| | | 验证交易提案请求 |
| | |-------------| |
| | +----------------+
| | |
| | 调用链码模拟交易 |
| | |
| +----------------+
| |
| 返回提案响应 |
| |
+----------------+
+----------------+
| cli/App |
+----------------+
| |-------------| |
| | 检查提案响应 |
| |-------------| |
| +----------------+
| |
| 如果是查询数据请求 |
| |
+----------------+
+----------------+
| cli/App |
+----------------+
| 结束流程 |
+----------------+
如果不是查询数据请求,则继续下一步
+----------------+
| cli/App |
+----------------+
| |-------------| |
| | 重新打包提案响应 |
| |-------------| |
| +----------------+
| |
| 提交至Orderer节点 |
| |
+----------------+
+----------------+
| Orderer节点 |
+----------------+
| |-------------| |
| | 排序交易 |
| |-------------| |
| +----------------+
| |
| 打包生成新区块 |
| |
+----------------+
+----------------+
| +----------------+
| | 领导节点 |
+----------------+
| | |-------------| |
| | | 拉取新区块 |
| | |-------------| |
| | +----------------+
| | |
| | 验证新区块 |
| | |
| +----------------+
| |
| 存储新区块 |
| |
+----------------+
+----------------+
| cli/App |
+----------------+
| 通知EventStream |
+----------------+
+----------------+
| cli/App |
+----------------+
| |-------------| |
| | 通知领导节点 |
| |-------------| |
| +----------------+
| |
| 领导节点广播区块至其他Peer节点 |
| |
+----------------+
+----------------+
| +----------------+
| | Peer节点 |
+----------------+
| | |-------------| |
| | | 接收区块 |
| | |-------------| |
| | +----------------+
| | |
| | 验证区块 |
| | |
| +----------------+