无法组装交易,错误提案响应不成功,错误代码 500,msg 链码注册失败:容器以 0 退出

Posted

技术标签:

【中文标题】无法组装交易,错误提案响应不成功,错误代码 500,msg 链码注册失败:容器以 0 退出【英文标题】:Could not assemble transaction, err proposal response was not successful, error code 500, msg chaincode registration failed: container exited with 0 【发布时间】:2019-10-09 16:23:56 【问题描述】:

我正在尝试实例化链码,但发生错误,我找不到解决方案。

ubuntu 18.04 超级账本结构 1.4.1 我已经按照文档进行了操作,上周它成功了。相同的代码在另一台计算机上运行良好。 在实例化之前,一切都进行得很顺利,包括制作通道。 我的项目中没有应用节点。

代码:

root@c442cc2748e7:/opt/gopath/src/github.com/hyperledger/fabric/peer# peer chaincode instantiate -o orderer.example.com:7050 --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA -C $CHANNEL_NAME -n mycc -l golang -v 1.0 -c '"Args":[]' -P "AND ('Org1MSP.peer','Org2MSP.peer')"
2019-05-23 06:31:31.382 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 001 Using default escc
2019-05-23 06:31:31.382 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 002 Using default vscc
Error: could not assemble transaction, err proposal response was not successful, error code 500, msg chaincode registration failed: container exited with 0

【问题讨论】:

一些其他信息:容器日志:[mychannel][e10540fc] 未能调用链代码名称:“lscc”,错误:容器以 0 github.com/hyperledger/fabric/core/chaincode 退出。( *RuntimeLauncher).Launch.func1 请解释答案 【参考方案1】:

哦,我已经修好了! 它是由 docker compose .yaml 文件引起的。我更改了目录的名称,但没有更新此文件中的“网络”。与目录名保持一致后,现在没有错误了。

【讨论】:

您好,我遇到了同样的问题并得到了同样的错误。我更改了我的链代码的目录名称,但我不明白它与网络名称有何关系。你能再解释一下吗? @jsdtLin 应该更改哪个目录名称?请说清楚,我也遇到同样的错误。 这个我也被打动了...请解释清楚【参考方案2】:

我在安装java chaincode 以使用ubuntu 18.04 设置first-network 时遇到了同样的问题 和 hyperledger fabric 1.4.1。但我已经按照以下流程解决了。

build.gradle 我的依赖是

编译组:'org.hyperledger.fabric-chaincode-java',名称:'fabric-chaincode-shim',版本:'1.x'

我已经改成

编译组:'org.hyperledger.fabric-chaincode-java',名称:'fabric-chaincode-shim',版本:'1.4.1'

【讨论】:

【参考方案3】:

我遇到了同样的问题。该问题基本上表明对等进程无法从链码映像注册/创建容器。您可以通过简单的docker ps -a 看到图像是否正在创建。此外,在实例化时,对等方会下载 fabric-ccenv 图像,其中包含用于构建链码所需的库。就我而言,正在下载 fabric-ccenv 的旧图像。正是这种差异导致链码容器以0 状态码退出。我更新了 fabric-ccenv docker 镜像,使用了与 peer 相同的标签并解决了错误。此外,这可能发生在 CORE_PEER_CHAINCODELISTENADDRESS 设置错误的情况下。它应该设置为0.0.0.0:7052。见解释here

【讨论】:

【参考方案4】:

我已经通过简单地更改链代码的名称解决了这个问题。

root@c442cc2748e7:/opt/gopath/src/github.com/hyperledger/fabric/peer# peer 链码 实例化 -o orderer.example.com:7050 --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA -C $CHANNEL_NAME -n mycc -l golang -v 1.0 -c '"Args":[]' -P "AND ('Org1MSP.peer','Org2MSP.peer')"

只需将 -n mycc 更改为 -n 给你想要的任何名称

【讨论】:

这只是你做的一个锻炼。您刚刚安装了同一个链码但名称不同,现在它被视为新的链码。【参考方案5】:

解决方案

删除dev-* 容器并重试。

docker images
...
dev-peer0.org1.example.com-fabcar-1.0-93f09...
...

docker rmi $(docker images dev-* -q)

说明

lscc 为链码创建一个 docker 镜像。一旦这个图像存在,它将在未来重用它。如果图像不好,您必须在再次尝试实例化之前将其删除。我相信这就是为什么这么多“重命名”解决方案起作用的原因,它会导致创建一个新图像(使用不同的名称),因为 docker 图像名称的名称和版本。

疑难解答

为了确定链码启动失败的原因,您可以连接到 cli 容器并尝试手动运行链码。例如,一个 nodejs 链码可能看起来像这样:

docker exec -it cli /bin/bash
#$ cd chaincode
#$ npm start
# <some npm error here>

另一种选择是打开对等方的登录并重试。可以通过FABRIC_LOGGING_SPEC 环境变量打开对等日志记录。我会设置为debuginfo,然后再试一次。可以通过以下方式检查日志

docker logs peer0.org1.example.com

归根结底,错误意味着lscc 链码无法启动您的链码。

【讨论】:

以上是关于无法组装交易,错误提案响应不成功,错误代码 500,msg 链码注册失败:容器以 0 退出的主要内容,如果未能解决你的问题,请参考以下文章

HTTP请求响应常见状态码(100到500)等错误

React Native:开发服务器返回响应错误代码:500

Nginx 500错误总结

Nginx 500错误总结

React 本机开发服务器返回响应错误代码:500

收到错误消息;无法加载资源:服务器响应状态为500