例如,两个应用程序正在连接一个链码,如果几乎同时请求“调用”同一“键值对”链码对的动作,会发生什么?
如果这是Hyperledger Fabric的噩梦,我们该如何应对?在Hyperledger core.yaml设置的一边?还是链码设计的一面?
注意:第一个答案是与Fabric v0.6相关的。Fabric v1使用不同的机制。这些步骤是(据我所知):
注意:与v0.6相比,这是一个重大更改,即使在调用的情况下,也只能通过读取看到完全提交的事务!如果存在任何键冲突,则交易将在最后一刻失败!没有发出链码事件,但失败记录在最后一个块中。世界状态更改丢失,客户必须重新提交交易!
解决此问题的方法是设计链码,使其不对每个资产使用共享密钥,或者设计客户端,以在资产级别(或很可能同时在资产级)对流控制API调用(链码事件,无论您要调用的是什么)进行流控。
因此,原始问题的答案是,事务都可以在v0.6 Fabric上正常工作,并且第一个事务可以工作,但是如果Fabric v1上的事务发送得太近(并且同时发送得太近),则第二个事务在Fabric v1上将失败。
显然,当没有关键冲突时,两者始终有效(假设交易通过了共识并且具有确定性,就像在所有背书人上产生相同的结果一样)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句