如果交易在订购者中被拒绝,世界状态(KVS 或 CouchDB)值如何回滚?

if transaction was refused in orderer, how world state (KVS or CouchDB) value rollback?

我正在研究 Hyperledger Fabric。

我有两个关于交易流程的问题。

(对不起,我的英语不好)


[简单示例] -> 交易流程

1) 客户请求交易。

2) 节点检查交易并执行链代码功能。

Peer 将结果保存在世界状态中(KVS 或 CouchDB -> A : 90, B : 60)。

3) Return 结果给客户。客户端将结果发送到排序服务。

4) 排序服务收集交易并按时间排序。

(也做共识。)

4-1) 创建区块

5) 排序服务将区块广播给节点,节点将区块提交到账本。


[问题]

  1. 在flow2中,交易结果存储在KVS或CouchDB中。

    如果我在块创建完成之前查询 A 的剩余点,

    响应是{A : 90}吗?或 {A : 100}

    (请求flow3和flow4之间查询。在flow4,5之前)

  2. 在flow4和flow4-1中,排序服务检查交易(通过共识?)并对它们进行排序。

    如果一笔交易被拒绝,(由于共识或某些错误等...)

    并且块已创建。

    那么world state(KVS或CouchDB)的值如何回滚?

    (通过事务日志回滚??)


感谢您阅读我的post。

在您的第 2 步中,对等方 存储状态。相反,它模拟了提案并记录了交易的读写集(读取集是模拟之前的状态,写入集是 committed/written 在订购和随后根据背书政策进行验证后(在步骤 5 中)到分类帐。

流量为:

  1. 客户端向1-n个背书节点提交交易提案 频道

  2. 背书节点模拟交易,返回签名read/write 设置为客户端

  3. 客户比对结果,打包模拟交易, 发送到订购服务

  4. 排序服务执行共识并将交易添加到区块 订购服务广播到通道

  5. 中的验证节点
  6. 验证节点验证区块中的交易以确保 a) 读取集不变,b) 背书策略得到满足 c) 所有签名均有效。

  7. 最后是验证节点 应用写入集来更新世界状态并添加块 即使有无效(未提交)的交易也到账本。

希望这对您有所帮助。您可以在 documentation.

中找到更多信息