我有一个包含两个合同的链码,以便第二个合同调用第一个合同的一个事务,如下所示:
class ContractA implements ContractInterface{
.....
@Transaction
public boolean trans1(MyContext ctx, String data) {
...
return result;
}
}
class ContractB implements ContractInterface{
.....
@Transaction
public boolean trans2(MyContext ctx, String data) {
...
Chaincode.Response response = ctx.getStub().invokeChaincode(chaincodeId,
new String[]{ContractA:trans1, "data"});
...
}
}在执行invokeChaincode期间,trans2失败,错误是:"INVOKE_CHAINCODE失败:事务ID存在“。根据文档,不会通过调用invokeChaincode来创建其他事务,因此,使用相同的事务ID创建调用是正确的。
是错误还是我在设计中做错了什么?
事先非常感谢,罗克萨纳
发布于 2020-07-10 02:57:43
执行ctx.getStub().invokeChaincode(chaincodeId, new String[]{ContractA:trans1, "data"});是要求对等方执行链码以对调用本身进行链码编码。不支持递归调用链码。
这里的错误消息可能会得到改进,但本质上,资源被分配给与txid相关联的链码调用,然后在事务完成时清除。因为您的事务已经与您的链码交互,这些资源已经存在,并且试图创建它们将导致您看到返回的错误。
如果希望在自己的链码中调用另一个函数,只需将其作为正常函数调用,而不是试图通过链码存根调用它。
https://stackoverflow.com/questions/62804430
复制相似问题