1)在实例化具有多个链码(例如myccA和myccB)的通道中,当我们通过myccB查询时,是否还检索通过myccA发布的数据/交易?
2)我们可以在myccB内添加一个函数,该函数将调用myccA的函数之一然后查询数据吗?
3)如果从两个不同的链码查询给出不同的数据/交易,创建一个Channel的原理是什么?
4)如果某个频道上有3个组织-例如A,B和C。组织A和B已安装并实例化chaincode_1。组织B和组织C已安装并实例化chaincode_2。组织A是否可以查询通过chaincode_2发布的数据/交易?我之所以问这个问题,是因为我相信所有渠道单位的分类帐都是相同的。
答案 0 :(得分:2)
我与@gustavo的不同之处仅在于第二个问题,如果对等方通过调用mycca chaincode函数安装了两个链码,则可以在同一通道中调用和查询其他链码数据:https://hyperledger-fabric.readthedocs.io/en/release-1.4/developapps/chaincodenamespace.html#cross-chaincode-access
答案 1 :(得分:0)
1)不,每个链码都有自己的分类帐,因此另一个链结不会访问其中的数据。
2)我不这么认为。考虑到渠道存在的原因,这没有任何意义。
3)当某些组织之间的交易不应该被其他组织访问时,使用通道。您应该阅读有关文档的更多信息:https://hyperledger-fabric.readthedocs.io/en/release-1.3/channels.html。
4)与第一点相同,每个链码都有自己的分类帐。
此文档介绍了有关渠道和多个链码的信息:https://hyperledger-fabric.readthedocs.io/en/release-1.3/network/network.html
答案 2 :(得分:0)
我认为您正在要求另一个调用链代码的功能。 以下将解决问题
let chainCodeArgs = ["foo", data];
let response = await stub.invokeChaincode("chaincodeName", chainCodeArgs, "channelName");
您可以调用函数foo(这是链码中要调用的函数),您可以在其中访问该特定链码的数据。 显然,如果您正在执行属于myccA的功能,它将获取与该CC相关的所有数据(或者您编写代码以获取数据),所以现在如果您从myccB调用myccA的功能(如i上面提到),您将看到由myccA编写的数据。
注意::如果被调用链码在同一通道上,它只是将被调用链码的读集和写集添加到调用事务中。
如果被叫链码在另一个频道上,则只有响应返回到主叫链码;来自被调用链码的任何PutState调用都不会对分类帐产生任何影响;也就是说,在不同通道上的被调用链码不会将其读取集和写入集应用于事务。仅调用链代码的读取集和写入集将应用于事务。实际上,在另一个通道上被调用的链码是Query
,它不参与后续提交阶段的状态验证检查。