【问题标题】:hyperledger fabric java chaincode error超级账本结构 java 链码错误
【发布时间】:2016-12-21 03:07:00
【问题描述】:

我使用 peer chaincode deploy 来运行 go src 示例,我得到了正确的结果, 然后我尝试了 java src 示例,enter image description here

我有一个链码,但是当我使用这个链码进行查询时,它显示给我:

Error: Error querying chaincode: rpc error: code = 2 desc = "Error:Failed to launch chaincode spec(Could not get deployment transaction
a3a350ff98660bcade4570acd507d0b380f374ea9399194b39e0301135849feb0732 - LedgerError - ResourceNotFound: ledger: resource not found)"

我使用 docker-tool box 为超级账本结构创建环境。

【问题讨论】:

  • 你能补充更多细节吗?你是在dev 模式还是正常模式下运行它?你是如何运行同行的?查询时提供的名称是什么?
  • 如果您使用 java 代码部署它,您还需要提供-l java
  • 是的,我在正常模式下使用了 -l java 和 -u jim。当 -l java 时,init func 返回一个链码,但是当我使用链码测试查询时,它显示我的错误,没有结果。当我用 go src 代码测试查询函数时,我可以得到结果。
  • 我也更改了测试请求,当我使用 init1(演示示例没有的功能)时,它还给了我一个链码,这很奇怪。
  • 能否请您添加整个代码和所有错误以及您尝试过的任何内容?

标签: java hyperledger hyperledger-fabric


【解决方案1】:

链码 ID 生成为多个参数的哈希码(链码路径 + 参数 + 源代码) 如果您在“部署”命令的响应中看到如下内容:

{“jsonrpc":"2.0","result":{"status":"OK","message":"8d803651564981858842409c6a5c3bf3f6ea69f90a6a7bfb672c2c8c3b6eb4c48105c5807e52f1a5ffdce0e86966688019a6c4013ffca524d5896e0b9ae201c6"}

表示您的部署事务请求被接受。从这一刻起,Fabric 将尝试为您的链代码创建一个容器并在 docker 中启动它。如果出现问题并且容器没有启动,您将收到以下响应:

“LedgerError - ResourceNotFound: ledger: resource not found“ for all your commands. 

在您的示例中,您尝试在 GO 容器中部署 Java 链代码,结果响应为:

(INFO 002 Deploy result: type GOLANG chaincodeID:...)

发生这种情况是因为 Fabric 不使用“语言”变量来检测平台类型(适用于 2016 年 9 月 9 日的可用版本)

我设法使用以下 REST 请求部署了 Java 链代码:

curl -XPOST -d ‘{"jsonrpc": "2.0", "method": "deploy", "params": {"type": 4,"chaincodeID": {"path": "/opt/gopath/src/github.com/hyperledger/fabric/examples/chaincode/java/SimpleSample","language": "java"}, "ctorMsg": { "args": ["init", "a", "100", "b", "1000"] }},"id": 0}' http://localhost:7050/chaincode

type:4 表示这个链码是 Java 并且应该使用适当的容器。 (对于 GO,我们应该使用 type:1

请记住,Java 目前仅适用于 security.enabled=false,而对于 security.enabled=true,您将看到以下错误消息:

[dockercontroller] deployImage -> ERRO 095 Error building images: API error (500): {"message":"The Dockerfile (Dockerfile) cannot be empty"}

【讨论】:

  • 谢谢。我尝试您所说的请求,它向我显示:ERRO 03e 错误构建图像:错误:图像 hyperledger/fabric-javaenv:x86_64-未找到 01:33:12.533 [dockercontroller] deployImage -> ERRO 03f 图像输出:步骤 1: FROM hyperledger/fabric-javaenv:x86_64- Pulling repository docker.io/hyperledger/fabric-javaenv 但 docker pull docker.io/hyperledger/fabric-javaenv 是有用的。
  • 您的环境可能已经过时。您可以尝试从 gerrit 签出最新版本并重建 peer 和 membersrvc 服务吗?