例如,如果请求"调用"几乎同时存在相同键值对的链码,会发生什么?
如果Hyperledger Fabric是噩梦,我们该如何应对呢?在Hyperledger core.yaml设置的一边?或链码设计的一面?
答案 0 :(得分:3)
注意:第一个答案是与Fabric v0.6相关的。 Fabric v1 使用不同的机制。这些步骤(据我目前所知):
注意:这是v0.6中的主要更改,因为即使在调用的上下文中,只有读取才能看到完全提交的事务!如果存在任何密钥冲突,则交易在最后一分钟失败!不会发出链代码事件,但会在最后一个块中记录失败。世界状态变化丢失,交易必须由客户重新提交!
解决此问题的方法是将链代码设计为不为每个资产使用共享密钥,或者将客户端设计为流控制API调用(链代码事件,无论您想要调用哪个),资产水平,或两者都很可能。
因此,原始问题的答案是,事务在v0.6 Fabric上工作正常,第一个事务有效但第二个事务在Fabric v1上失败,如果两者发送得太紧(并且同时距离太近)。 / p>
显然,当没有关键冲突时,两者总是有效(假设交易通过共识并且是确定性的 - 就像在所有代言人身上创造相同的结果一样)。
答案 1 :(得分:2)
所有调用和查询事务都是按顺序执行的(不是并发执行)。在this question中,它解释了如何执行交易。观察通过共识,所有执行都被排序,然后每个节点按照该顺序执行它们。因此,没有并发性。