【问题标题】:Hyperledger transaction become failed when submit transaction in for loop在 for 循环中提交交易时,Hyperledger 交易失败
【发布时间】:2018-11-07 12:17:12
【问题描述】:

我成功部署了我的网络文件 (.bna)。然后我使用命令 composer-rest-server 启动了一个 REST API。我使用我的前端 Laravel 应用程序提交了一个事务。当我尝试使用 for 循环提交多个事务时,我在某个时间收到一个错误,即 MVCC_READ_CONFLICT.我减少了网络的 bachtimeout。但错误仍在继续。如果您对此问题有任何想法,请回答任何人。

结构版本:1.1.0 作曲家:.19.16 节点:8.12 操作系统:Ubuntu 16.04

【问题讨论】:

    标签: hyperledger-fabric hyperledger hyperledger-composer


    【解决方案1】:

    好吧,MVCC_READ_CONFLICT 意味着您正在对两个不同事务中的某个键进行并发修改,因此在将事务排序到块中之后,无论第一次提交的事务是什么事务,而第二个或后续事务在同一键上工作,标记为无效MVCC_READ_CONFLICT.

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

    1. 客户端提交交易提案进行背书,并将其发送给背书节点
    2. 背书节点执行链代码模拟,其中执行结果被捕获到读写集中
    3. 客户端收集背书并组成交易,提交订单
    4. Ordering 服务使用总交易顺序将交易分批成块
    5. 区块分布在对等方之间
    6. 对等方进行验证以证明每笔交易符合背书政策
    7. 之后是多值并发控制 (MVCC),它检查并发修改,实际上验证 RWSet 的密钥版本,如果检测到并发修改,则 tx 无效,状态为 MVCC_READ_CONFLICT

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

    【讨论】:

    • 感谢您的回答。有任何方法或任何想法可以防止 MVCC_READ_CONFLICT。请给个建议。
    • 如果事务只写相同的key,它们不会冲突。如果他们读取相同的密钥,第二次和以后的事务就会发生冲突。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-21
      • 2021-05-11
      • 2014-04-09
      • 2015-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多