gpt4 book ai didi

java - INVOKE_CHAINCODE 失败 : transaction ID exists

转载 作者:行者123 更新时间:2023-12-04 09:31:54 27 4
gpt4 key购买 nike

我有一个带有两个合约的链码,这样第二个合约调用第一个合约的交易如下:

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 存在”。根据 documentation ,调用 invokeChaincode 不会创建其他事务,因此,使用相同的事务 ID 创建调用是正确的。
这是一个错误还是我在设计中做错了什么?
提前谢谢了,
罗克萨娜

最佳答案

表演 ctx.getStub().invokeChaincode(chaincodeId, new String[]{ContractA:trans1, "data"});要求对等方对自身执行链码到链码调用。不支持递归调用链码。
这里的错误消息可能会得到改进,但本质上,资源是为链码调用分配的,与 txid 相关联,然后在事务完成时清理。因为您的交易已经与您的链码交互,这些资源已经存在,并且尝试创建它们会导致您看到返回的错误。
如果您希望在自己的链代码中调用另一个函数,只需将其作为普通函数调用,而不是尝试通过链代码 stub 调用它。

关于java - INVOKE_CHAINCODE 失败 : transaction ID exists,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62804430/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com