Hyperledger Fabric链码安装超时问题求助
Hyperledger Fabric链码安装超时问题解决方案
问题场景
在peer0.org1节点执行链码安装命令:
peer lifecycle chaincode install basic.tar.gz
遭遇以下错误:
Error: chaincode install failed with status: 500 - error in simulation: failed to execute transaction ee4a6ae0672861fa153e7fd5cd797e59b3eeebf1d2950ccd9e13e8231de484a9: error sending: timeout expired while executing transaction.
相关日志如下:
2022-08-28 16:10:46.246 UTC 004a INFO [chaincode.externalbuilder.ccaas_builder] waitForExit -> ::错误:不支持的链码类型:node 命令=detect 2022-08-28 16:14:33.640 UTC 004b WARN [peer.blocksprovider] func1 -> 读取交付流时遇到错误:rpc error: code = Unavailable desc = transport is closing channel=mychannel orderer-address=orderer.example.com:7050 2022-08-28 16:14:33.640 UTC 004c WARN [peer.blocksprovider] DeliverBlocks -> Orderer未发送状态即中断连接 channel=mychannel orderer-address=orderer.example.com:7050 2022-08-28 16:15:46.750 UTC 004d INFO [endorser] callChaincode -> 完成链码调用:_lifecycle 耗时:300000ms channel= txID=ee4a6ae0 2022-08-28 16:15:46.778 UTC 004e ERRO [endorser] simulateProposal -> 调用链码_lifecycle失败,错误:执行事务超时 github.com/hyperledger/fabric/core/chaincode.(*Handler).Execute runtime.goexit /usr/local/go/src/runtime/asm_amd64.s:1571 channel= txID=ee4a6ae0 2022-08-28 16:15:46.778 UTC 004f WARN [endorser] ProcessProposal -> 调用链码失败 channel= chaincode=_lifecycle error="error in simulation: failed to execute transaction ee4a6ae0672861fa153e7fd5cd797e59b3eeebf1d2950ccd9e13e8231de484a9: error sending: timeout expired while executing transaction" 2022-08-28 16:15:46.778 UTC 0050 INFO [comm.grpc.server] 1 -> 一元调用完成 grpc.service=protos.Endorser grpc.method=ProcessProposal grpc.peer_address=172.21.0.1:51150 grpc.code=OK grpc.call_duration=5m0.029919322s 2022-08-28 16:16:03.168 UTC 0051 INFO [lifecycle] InstallChaincode -> 成功安装链码,包ID为 'basic_1.0:9821071a953f452bda87fe89637d1e377dac825da4649ba998464a3c85d60c50' 2022-08-28 16:20:33.471 UTC 0052 WARN [peer.blocksprovider] func1 -> 读取交付流时遇到错误:rpc error: code = Unavailable desc = transport is closing channel=mychannel orderer-address=orderer.example.com:7050 2022-08-28 16:20:33.471 UTC 0053 WARN [peer.blocksprovider] DeliverBlocks -> Orderer未发送状态即中断连接 channel=mychannel orderer-address=orderer.example.com:7050
关键问题分析
- 链码类型不支持:日志开头明确指出
不支持的链码类型:node,说明当前配置的外部构建器(ccaas_builder)无法处理Node.js类型的链码,导致链码检测环节受阻,延长了整体操作时间。 - Orderer连接不稳定:多次出现peer与orderer之间的gRPC连接中断警告,虽不直接导致安装失败,但会增加系统负载和操作延迟,加剧超时风险。
- 超时误报:日志末尾显示链码实际已安装成功,报错是因为链码构建/检测耗时超过了peer默认的300秒超时阈值,属于超时误报。
解决方案
1. 修复链码类型支持问题
- 若使用Node.js链码,检查peer节点
core.yaml中的chaincode.externalBuilders配置,移除不支持node类型的ccaas_builder,或添加支持Node.js的外部构建器配置。 - 确认链码包内的
metadata.json文件正确设置type: node,且链码代码符合Hyperledger Fabric Node.js链码开发规范。
2. 延长链码执行超时时间
- 永久修改:编辑peer节点的
core.yaml,找到chaincode.execution.timeout参数,将默认值300s调整为更大值(如600s),然后重启peer节点。 - 临时修改:执行安装命令前,通过环境变量临时调整超时:
再重新运行链码安装命令。export CORE_CHAINCODE_EXECUTION_TIMEOUT=600s
3. 稳定Orderer连接
- 检查orderer节点状态,通过
docker logs <orderer-container-name>查看日志,确认orderer正常运行无崩溃。 - 在peer容器内执行
ping orderer.example.com和nc -zv orderer.example.com 7050,验证网络连通性。 - 检查TLS证书配置,确保peer和orderer的证书链完整、有效且匹配,无过期或权限问题。
4. 验证链码安装状态
执行以下命令确认链码是否已成功安装:
peer lifecycle chaincode queryinstalled
若输出中包含日志里的包IDbasic_1.0:9821071a953f452bda87fe89637d1e377dac825da4649ba998464a3c85d60c50,则可跳过重复安装,直接进行后续的链码批准和提交操作。
内容的提问来源于stack exchange,提问作者Mondi Bruklin
相关产品推荐
相关产品推荐

