如果orderer中的交易被拒绝,世界状态(KVS或CouchDB)值如何回滚?

时间:2018-04-20 06:33:10

标签: hyperledger-fabric

我正在学习Hyperledger Fabric。

我在交易流程中有两个问题。

(我很抱歉我的英语不好)

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

  • A:100,B:50
  • A发送10点B。
  • 订购服务已达成共识(PBFT,kafka,SBFT等......)

1)客户请求交易。

2)Peer检查事务并执行链代码功能。

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

3)将结果返回给客户。客户将结果发送给订购服务。

4)订购服务收集交易并按时间对其进行排序。

(也有共识。)

4-1)创建一个块。

5)订购服务将块广播到对等体,并且对等体将块提交到分类帐。

[问题]

  1. 在flow2中,事务的结果存储在KVS或CouchDB中。

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

    回复{A:90}?或{A:100}

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

  2. 在flow4和flow4-1中,订购服务会检查交易(以协商一致方式?)并对其进行排序。

    如果一项交易被拒绝,(以协商一致或某些错误或其他方式......)

    并创建了块。

    那么世界状态(KVS或CouchDB)值如何回滚?

    (按事务日志回滚??)

  3. 感谢您阅读我的帖子。

1 个答案:

答案 0 :(得分:1)

在您的步骤2中,对等方存储该状态。相反,它模拟了提议并记录了事务的读写集(读取集是模拟之前的状态,写集是提交/写入分类帐后的内容订购和随后对认可政策的验证(在步骤5中)。

流程是:

  1. 客户提交交易提案给1-n支持同行 频道

  2. 支持对等体模拟事务,返回签名读/写 设置为客户端

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

  4. 订购服务执行共识并将事务添加到块 订购服务广播以验证渠道

  5. 中的同行
  6. 验证对等体验证块中的事务以确保这一点 a)读取集不变,b)满足认可政策 c)所有签名均有效。

  7. 最后是验证对等方 应用写集来更新世界状态并添加块 即使是无效(未提交)的交易,也要到分类账。

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

    中找到更多信息