【发布时间】:2021-02-24 12:12:40
【问题描述】:
我正在运行 HL Fabric 专用网络,并使用 Fabric-Java-Sdk 从 Java 应用程序向分类帐提交交易。
有时,如 1/10000 次,当我将交易提交到分类帐时,Java 应用程序会抛出异常,如下面的消息:
错误 196664 --- [线程 4] org.hyperledger.fabric.sdk.Channel : 未来异常完成:sendTransaction
java.lang.IllegalArgumentException:提案响应有 2 具有 0 的不一致组是无效的。预计一切都会 一致且无无效。在 org.hyperledger.fabric.sdk.Channel.doSendTransaction(Channel.java:5574) ~[fabric-sdk-java-2.1.1.jar:na] 在 org.hyperledger.fabric.sdk.Channel.sendTransaction(Channel.java:5533) ~[fabric-sdk-java-2.1.1.jar:na] 在 org.hyperledger.fabric.gateway.impl.TransactionImpl.commitTransaction(TransactionImpl.java:138) ~[fabric-gateway-java-2.1.1.jar:na] 在 org.hyperledger.fabric.gateway.impl.TransactionImpl.submit(TransactionImpl.java:96) ~[fabric-gateway-java-2.1.1.jar:na] 在 org.hyperledger.fabric.gateway.impl.ContractImpl.submitTransaction(ContractImpl.java:50) ~[fabric-gateway-java-2.1.1.jar:na] 在 com.apidemoblockchain.RepositoryDao.BaseFunctions.Implementations.PairTrustBaseFunction.sendTrustTransactionMessage(PairTrustBaseFunction.java:165) 〜[类/:na]在 com.apidemoblockchain.RepositoryDao.Implementations.PairTrustDataAccessRepository.run(PairTrustDataAccessRepository.java:79) ~[classes/:na] 在 java.base/java.lang.Thread.run(Thread.java:834) ~[na:na]
虽然我的提交方法是这样的:
public void sendTrustTransactionMessage(Gateway gateway, Contract trustContract, String payload) throws TimeoutException, InterruptedException, InvalidArgumentException, TransactionException, ContractException {
// Prepare
checkIfChannelIsReady(gateway);
// Execute
trustContract.submitTransaction(getCreateTrustMethod(), payload);
}
我正在使用一个 4 组织网络,每个网络有 2 个对等点,我正在使用 3 个通道,每个链码 DataType 一个,以保持事情干净。
我认为来自 Channel 的错误没有意义,因为我正在使用 Contract 提交它......
就像我打开网关然后我保持打开状态以持续提交 txs。
try (Gateway gateway = getBuilder(getTrustPeer()).connect()) {
Contract trustContract = gateway.getNetwork(getTrustChaincodeChannelName()).getContract(getTrustChaincodeId(), getTrustChaincodeName());
while (!terminateLoop) {
if (message) {
String payload = preparePayload();
sendTrustTransactionMessage(gateway, trustContract, payload);
}
...
wait();
}
...
}
编辑:
在阅读了@bestbeforetoday 的建议后,我设法捕获了 ContractException 并分析了日志。不过,我不完全了解错误可能出在哪里,因此也不知道如何修复它。
我将在异常中收到的 ProposalResponses 中添加 3 个打印件,并在其后添加评论。
所以,在第一张图片中,我可以看到异常时收到了 3 个提案响应,异常原因消息显示: “提案响应有 2 个不一致的组,其中 0 是无效的。预计所有组都是一致的,没有一个是无效的。”
在图片中,2/3代表那些响应的内容,我注意到有2个字段保存空值,即“ProposalRespondePayload”和“timestamp_”,但是我不知道这是否是“两个组”在异常的消息原因中引用。
提前谢谢...
【问题讨论】:
标签: java exception hyperledger-fabric chaincode