You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修改FabCar链码后执行invoke报错:ReferenceError: from未定义

问题分析与解决办法

核心问题根源

你遇到的"No valid responses from any peers"是链码执行报错导致的连锁反应,节点日志里的ReferenceError: from is not defined已经明确指出:在fabcar.js的writeJsonData方法中,你使用了未声明的from变量,直接造成链码执行失败,peer无法返回有效响应。

具体解决步骤

1. 修复链码中的变量未定义问题

打开fabcar.js找到writeJsonData方法,检查代码中所有用到from的位置:

  • 错误示例(未声明from):
    async writeJsonData(ctx, data) {
        let jsonData = {
            sender: from, // 此处from未定义
            content: data
        };
        await ctx.stub.putState('jsonKey', Buffer.from(JSON.stringify(jsonData)));
    }
    
  • 修正方式(根据业务需求补充from的定义):
    如果from是指调用链码的用户身份,可以通过Fabric的身份API获取:
    async writeJsonData(ctx, data) {
        // 声明并赋值from变量,获取调用者的身份ID
        const from = ctx.clientIdentity.getID();
        let jsonData = {
            sender: from,
            content: data
        };
        await ctx.stub.putState('jsonKey', Buffer.from(JSON.stringify(jsonData)));
    }
    
    如果from是业务参数,需要在方法入参中添加并传递:
    async writeJsonData(ctx, from, data) {
        let jsonData = {
            sender: from,
            content: data
        };
        await ctx.stub.putState('jsonKey', Buffer.from(JSON.stringify(jsonData)));
    }
    

2. 重新部署链码

链码修改后必须重新打包、安装并升级,否则peer会继续运行旧版本的链码:

  • 打包链码:
    peer chaincode package fabcar.tar.gz --path ./chaincode/fabcar/javascript --lang node --label fabcar_1
    
  • 安装到peer节点:
    peer chaincode install fabcar.tar.gz
    
  • 升级链码(注意替换通道ID、版本号等参数为你的实际配置):
    peer chaincode upgrade -o orderer.example.com:7050 --channelID mychannel --name fabcar --version 1.1 --sequence 2 --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem --peerAddresses peer0.org1.example.com:7051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt -c '{"Args":["init"]}'
    

3. 验证调用结果

链码升级完成后,重新运行invoke.js:

node invoke.js

如果链码修复正确,应该能正常完成调用,不再返回No valid responses from any peers错误。

额外排查点

  • 检查容器状态:用docker ps确认peer、orderer、链码容器都处于Up状态,没有异常退出
  • 查看链码容器日志:如果问题依旧,用docker logs <链码容器ID>获取更详细的执行报错信息,进一步定位问题

内容的提问来源于stack exchange,提问作者Ricky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 19:30:50