是否有调用跨渠道交易的最佳实践?

Is there a best practice to invoke cross channel transaction?

例如,有如下2个通道。

CHANNEL_A:
链码名称 -> chaincode_a
账本数据 -> 金额=150

CHANNEL_B:
链码名称 -> chaincode_b
账本数据 -> 金额=0

我想从CHANNEL_A的账本数据中取出100,存入100到CHANNEL_B的账本数据。
根据 Fabric 文档,如果被调用的链代码在不同的通道上,则只会将响应返回给调用链代码;来自被调用链代码的任何 PutState 调用都不会对分类帐产生任何影响。

因此,如果我调用 chaincode_b 并且它调用 chaincode_a,我可以在 chaincode_B 上更新金额,但我无法在 chaincode_A 上更新。
因此,我必须在应用程序端为两个通道调用 2 个事务。为了数据的一致性,我不得不考虑错误处理等等。

是否有在应用程序端处理此类事务的最佳实践?

要更新通道 A 和通道 B 中的某些内容 - 您需要执行 2 个事务并让它们以原子方式提交或不提交。

一种方法是在应用层中实现等同于 2-phase commit 的东西。

然而,这并非易事,因为您可能总是会遇到 MVCC 冲突,这会妨碍您。