INVOKE_CHAINCODE失败:交易ID存在



我有一个包含两个合约的链代码,这样第二个合约调用第一个合约的事务,如下所示:

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"});
...
}
}

在trans2的执行过程中,invokeChaincode失败,并返回错误:";INVOKE_CHAINCODE失败:事务ID存在"。根据文档,调用invokeChaincode不会创建其他事务,因此,使用相同的事务ID创建调用是正确的。

这是一个错误还是我在设计中做了一些不正确的事情?

非常感谢,Roxana

执行ctx.getStub().invokeChaincode(chaincodeId, new String[]{ContractA:trans1, "data"});是要求对等方对自身执行链代码到链代码的调用。不支持递归调用链代码。

这里的错误消息可能会得到改进,但本质上,资源是为链代码调用分配的,与txid相关,然后在事务完成时清理这些资源。因为您的事务已经在与链代码交互,所以这些资源已经存在,尝试创建它们会导致返回错误。

如果您希望在自己的链代码中调用另一个函数,只需将其作为普通函数调用,而不是试图通过链代码存根调用它。

最新更新