Hyperledger fabric介绍(四)—— fabric交易流程的实现

  1. 由cli/App构建一个交易提案请求,根据背书策略发送到相应的背书节点:

    • cli/App生成一个交易提案请求,并根据事先设定的背书策略选择要发送的背书节点。
    • 交易提案请求包含要执行的操作和相关参数。
  2. 背书节点接收到交易提案请求,对接收到的交易提案请求进行验证:

    • 背书节点首先对接收到的交易提案请求进行验证,包括检查交易的合法性、签名等。
    • 如果验证通过,背书节点调用链码进行模拟交易,但不会将交易写入区块链,仅对交易进行模拟。
  3. 处理完成之后,背书节点返回响应结果(提案响应,包含读写集):

    • 背书节点处理完交易请求后,生成一个提案响应。
    • 提案响应包含了交易的读写集(即交易对应的数据修改)。

        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节点        |  
+----------------+  
| | |-------------| |  
| | | 接收区块       |  
| | |-------------| |  
| | +----------------+  
| |                  |  
| | 验证区块          |  
| |                  |  
| +----------------+

 

你可能感兴趣的:(fabric,区块链,智能合约)