Fabric Samples 2.2中TypeScript版FabCar链码调用失败求助
Hyperledger Fabric 2.2 TypeScript链码调用容器退出问题
问题概况
在Fabric Samples 2.2的test-network环境部署FabCar TypeScript链码,执行以下命令完成网络初始化与链码部署:
./network.sh up ./network.sh createChannel ./network.sh deployCC -ccn basic -ccl typescript -ccp /home/ubuntu/fabric/hlf/fabric-samples/chaincode/fabcar/typescript -cci initLedger
链码打包、安装、提交流程均无异常,但执行initLedger初始化调用时触发错误,对应链码Docker容器直接退出。
关键错误信息
命令执行输出
最终报错:
Error: endorsement failure during invoke. response: status:500 message:"error in simulation: failed to execute transaction c9a...: could not launch chaincode basic_1.0:8d...: chaincode registration failed: container exited with 1
Docker容器退出日志
日志核心内容:
npm ERR! code ENOENT npm ERR! syscall open npm ERR! path /usr/local/src/package.json npm ERR! errno -2 npm ERR! enoent Could not find a package.json file in /usr/local/src
解决方案
问题根源是链码容器启动时无法找到package.json,TypeScript链码需编译后部署,且需确保容器能正确读取依赖配置与编译产物。
1. 预编译TypeScript链码
进入链码目录,完成依赖安装与编译:
cd /home/ubuntu/fabric/hlf/fabric-samples/chaincode/fabcar/typescript npm install npm run build
编译完成后会生成dist目录,包含可执行的JavaScript文件。
2. 调整链码部署命令
部署时指定ccp为编译后的dist目录,同时将链码语言指定为node(Fabric容器运行时实际执行的是编译后的JS文件):
./network.sh deployCC -ccn basic -ccl node -ccp /home/ubuntu/fabric/hlf/fabric-samples/chaincode/fabcar/typescript/dist -cci initLedger
3. 验证部署结果
重新部署后,检查链码容器状态:
docker ps | grep basic
若容器处于运行状态,执行以下命令验证链码调用:
peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n basic -c '{"function":"initLedger","Args":[]}'
内容的提问来源于stack exchange,提问作者Muhammed Rasheed
相关产品推荐
相关产品推荐

