Java 调用链接代码失败:事务ID存在
我有一个带有两个契约的链码,第二个契约调用第一个契约的事务,如下所示:Java 调用链接代码失败:事务ID存在,java,hyperledger-fabric,Java,Hyperledger Fabric,我有一个带有两个契约的链码,第二个契约调用第一个契约的事务,如下所示: class ContractA implements ContractInterface{ ..... @Transaction public boolean trans1(MyContext ctx, String data) { ... return result; } } class ContractB implements Contract
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\u CHAINCODE failed:事务ID存在”。根据,调用invokeChaincode不会创建其他事务,因此,使用相同的事务ID创建调用是正确的
这是一个bug还是我在设计中做了一些不正确的事情
多谢各位,
Roxana执行
ctx.getStub().invokeChaincode(chaincodeId,新字符串[]{ContractA:trans1,“data”})
要求对等方对自身执行链码到链码的调用。不支持递归调用链码
这里的错误消息可能会得到改进,但本质上,资源是分配给链式代码调用的,链式代码调用与txid关联,然后在事务完成时清除链式代码调用。因为您的事务已经与链码交互,所以这些资源已经存在,并且尝试创建它们会导致返回的错误
如果希望在自己的链码中调用另一个函数,只需将其作为普通函数调用,而不是尝试通过链码存根调用它