假设我的 Java 链代码(在 Fabric 1.4.4 上运行)想要抛出异常以表明要创建的新资产已经存在。我抛出一个带有问题或错误的 RunTimeException(在这种情况下,“合同 LL00001 已注册”),它记录在执行事务的对等节点中:
2019-11-29 20:15:37.807 UTC [peer.chaincode.nid1-blockchain-hapeer1-mrrc-0.1.4] func2 -> INFO 16a8ec Contract LL00001 already registered
2019-11-29 20:15:37.807 UTC [peer.chaincode.nid1-blockchain-hapeer1-mrrc-0.1.4] func2 -> INFO 16a8ed java.lang.RuntimeException: Contract LL00001 already registered
但是,在堆栈跟踪之后,我看到对等节点将其作为 500 错误返回,而没有包含我的错误描述或对 java 中的错误异常的任何引用(这是有道理的,因为该错误与语言无关):
2019-11-29 20:15:37.807 UTC [peer.chaincode.nid1-blockchain-hapeer1-mrrc-0.1.4] func2 -> INFO 16a8ff 20:15:37:804 SEVERE org.hyperledger.fabric.shim.impl.ChaincodeInnvocationTask call [1f56a053] Invoke failed with error code 500. Sending ERROR
记录在我的客户端 java 应用程序(使用 fabrik-java-sdk)中:
org.hyperledger.fabric.sdk.exception.InvalidArgumentException: Proposal response is invalid.
at org.hyperledger.fabric.sdk.ProposalResponse.getChaincodeActionResponsePayload(ProposalResponse.java:272)
at ...
所以我只知道链码有问题,但我不知道问题是什么。如何获取错误类型和描述,以便向用户显示问题?现在我需要去对等节点检查那里的日志以查看问题所在。
注意:我在我的链码类中扩展了新的 org.hyperledger.fabric.contract.ContractInterface。
更新:对等节点记录错误异常(org.hyperledger.fabric.shim.ChaincodeException),并且似乎在 500 响应中正确返回错误消息(“未找到文档”),如日志所示,但此消息没有获取 Java SDK
2019-12-23 22:11:09.178 UTC [peer.chaincode.nid1-blockchain-hapeer1-mrrc-0.9.7] func2 -> INFO 5aa7 22:11:09:176 SEVERE org.hyperledger.fabric.shim.impl.ChaincodeInnvocationTask call [12cc4ad0] Invoke failed with error code 500. Sending ERROR
2019-12-23 22:11:09.179 UTC [peer.chaincode.nid1-blockchain-hapeer1-mrrc-0.9.7] func2 -> INFO 5aa8 22:11:09:177 FINE org.hyperledger.fabric.shim.impl.ChaincodeSupportClient$2 accept > sendToPeer 12cc4ad09a1feb7fc1246ac04bf69509204ca74368be2c7e4bbf0a503e90417f
2019-12-23 22:11:09.181 UTC [endorser] callChaincode -> INFO 5aa9 [mrrc][12cc4ad0] Exit chaincode: name:"mrrc" (36ms)
2019-12-23 22:11:09.181 UTC [endorser] SimulateProposal -> ERRO 5aaa [mrrc][12cc4ad0] failed to invoke chaincode name:"mrrc" , error: transaction returned with failure: The document was not found
编辑:这似乎是 Java SDK 中的一个错误。我在 Fabric 的 JIRA 中创建了一个 JIRA 问题: https ://jira.hyperledger.org/browse/FABJ-508