基于Node.js与Hyperledger Fabric 2.1的区块链学历证书项目执行Issue操作时提示Schema v1不存在的问题求助
基于Node.js与Hyperledger Fabric 2.1的区块链学历证书项目执行Issue操作时提示Schema v1不存在的问题求助
你好,针对你遇到的这个Schema v1 does not exist报错问题,我从Hyperledger Fabric链码部署逻辑和项目初始化流程的角度,给你几个排查方向和可行的解决方案:
1. 优先检查链码初始化操作是否执行
从报错堆栈来看,问题出在调用链码获取Schema时找不到对应版本,大概率是链码部署后未执行初始化函数创建必要的数据结构。这个项目的链码里应该存在init或类似的初始化方法,你可以通过Fabric的peer命令手动触发初始化:
export PATH=${PWD}/../bin:$PATH export FABRIC_CFG_PATH=$PWD/../config/ export ORDERER_CA=${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem export CORE_PEER_LOCALMSPID="Org1MSP" export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp export CORE_PEER_ADDRESS=localhost:7051 # 调用链码初始化函数 peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --channelID mychannel --name fabcar --tls --cafile ${ORDERER_CA} -c '{"function":"init","Args":[]}'
执行后如果返回成功信息,再重新测试Issue功能。
2. 统一链码名称与部署标签,避免版本混淆
你在打包链码时用了--label fabcar_1,但前端.env里配置的FABRIC_CHAINCODE_NAME = fabcar,虽然登录功能不受影响,但链码标签与调用名称不一致可能导致后续逻辑识别异常。建议重新打包链码时统一命名:
# 重新打包,标签与链码名称一致 peer lifecycle chaincode package fabcar.tar.gz --path /root/go/src/github.com/hyperledger/fabric/scripts/fabric-samples/chaincode/blockchain-academic-certificates/chaincode/ --lang node --label fabcar
之后重新执行安装、approve、commit流程,确保链码名称全程统一为fabcar。
3. 查看链码容器日志定位具体错误
链码启动时的初始化细节会输出到容器日志里,你可以通过以下命令排查:
# 先找到链码容器ID docker ps | grep fabcar # 查看日志(替换为你的容器ID) docker logs -f dev-peer0.org1.example.com-fabcar-1.0-xxxxxxxxx
如果日志里有Schema创建失败、权限不足等信息,就能快速定位具体问题。
4. 验证链码部署状态是否正常
执行以下命令确认链码已成功提交到通道,且版本、序列与部署参数一致:
peer lifecycle chaincode querycommitted --channelID mychannel --name fabcar --cafile ${ORDERER_CA}
输出结果里要确保Version是1.0,Sequence是1,且两个组织都已确认提交。
5. 重新梳理完整部署流程(建议尝试)
如果以上步骤都无效,建议从头重新部署链码,步骤如下:
- 清理旧链码:
peer lifecycle chaincode remove --channelID mychannel --name fabcar - 重新打包链码(标签设为fabcar)
- 重新执行安装、approve(两个组织都要执行)、commit流程
- 手动调用链码初始化函数
- 重启前端服务测试Issue功能
备注:内容来源于stack exchange,提问作者try it
相关产品推荐
相关产品推荐

