【问题标题】:Hyperledger Fabric, stop parallel chaincode executionHyperledger Fabric,停止并行链码执行
【发布时间】:2017-08-17 10:07:17
【问题描述】:

所以我对超级账本结构有疑问,为什么允许链代码像这样在超级账本中并行执行:

running push()
2
ending push()
running push()
1
ending push()
running push()
3
ending push()
running push()
5
ending push()
running push()
4
ending push()

所以我在这里做的是: - 创建新交易并发送 2 个对象 - 立即发送另一笔交易

所以在更新分类帐之前,密钥应该是例如:3 + 2 = 5,然后是 5 + 1 = 6

但在这种情况下这是错误的,因为它以:3 + 2 = 5 开头,并且在更新分类帐之前,另一个推送是从当前密钥 3 + 1 = 4 而不是从 5 + 1 = 6 完成的。

我该如何解决这个问题?

【问题讨论】:

    标签: hyperledger hyperledger-fabric


    【解决方案1】:

    (一) 请记住,链码执行只是对智能合约逻辑计算的模拟。 换句话说 - 链码的执行告诉你如果交易被提交,通道的更新是什么

    当客户端从对等方(包含模拟)取回背书时 - 它将其发送给排序者,以安排出现在下一个可用批次中的某个区块中,该批次将切割一个区块。

    只有当区块被持久化到账本中时(并且只有当交易是有效的——也就是说,它没有被之前区块中的任何其他交易或它来自的区块中的之前交易中的任何其他交易无效)——下一个链码执行可能会看到交易的变化。

    (二)

    为什么允许链码在超级账本中并行执行 像这样:

    因此,从 (I) 可以得出结论,没有意义并行执行链代码,因为在任何情况下,链代码执行的结束并不意味着下一次执行将读取该数据。

    【讨论】:

    • 是的,但是第二个事务没有被提交
    • 可能是因为遇到了MVCC冲突
    • MVCC = 多版本并发控制 可能第二个事务读取了在前一个事务期间写入的某个键。
    • 是的,这是我的问题,我该如何处理这个 MVCC?
    • 没有办法,它是 Fabric 模型,它专注于共识(排序)和智能合约执行(链码)之间的分离。它允许独立的操作同时完成,但不能独立的操作(解决双重支出)