当在for循环中提交事务时,超级账本事务将失败

时间:2018-11-07 12:17:12

标签: hyperledger-fabric hyperledger hyperledger-composer

我是超级账本技术的新手。我成功部署了我的网络文件(.bna)。然后,我使用命令composer-rest-server启动了rest api。我使用前端leravel应用程序提交单笔交易。当我尝试使用for循环提交多个事务时,有时会出现MVCC_READ_CONFLICT错误。我减少了网络的bachtimeout。但是错误仍在继续。如果您对此问题有任何想法,请回答。

面料版本:1.1.0 作曲者:.19.16 节点:8.12 操作系统:Ubuntu 16.04

2 个答案:

答案 0 :(得分:2)

好吧,MVCC_READ_CONFLICT意味着您正在对两个不同事务中的某个密钥进行并发修改,因此,在将事务排序为大块之后,任何事务都将首先提交,而第二个或随后的事务将对标记为相同的密钥起作用对MVCC_READ_CONFLICT无效。

要更好地了解这种状态背后的原因,可能需要注意结构中的事务流:

  1. 客户提交认可的交易建议,并将其发送给认可的同行
  2. 认可同伴执行链代码的仿真,其中将执行结果捕获到读写集中
  3. 客户收集背书并撰写交易,将其提交订购
  4. 订购服务使用交易的总订单将交易分为批次
  5. 在同级之间分配的块
  6. 对等方进行验证,以证明每笔交易均符合背书政策
  7. 此后,有一个多值并发控制(MVCC),它检查并发修改,实际上是验证RWSet的密钥版本,以及是否检测到并发修改的状态为MVCC_READ_CONFLICT的tx无效

您可以在文档“ Transaction Flow”中找到更多详细信息。

答案 1 :(得分:1)

降低块创建的等待时间,以便更频繁地创建块,从而可以更快地更新对等对象,例如max_message_count = 1,但这可能会导致一些性能问题