首页 > 解决方案 > 是否有调用跨渠道事务的最佳实践?

问题描述

例如,有 2 个通道,如下所示。

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

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

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

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

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

标签: hyperledger-fabrichyperledger

解决方案


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

一种方法是在应用层实现与两阶段提交等效的东西。

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


推荐阅读