Hyperledger Fabric执行peer chaincode invoke时背书失败求助
解决Hyperledger Fabric链码调用报错:Undefined contract called
问题根源
从你提供的查询结果来看,mychannel通道上并未完成链码的提交(Fabric 2.x及以后版本)/实例化(Fabric 1.x版本)操作——这是导致调用时报Undefined contract called错误的核心原因。链码仅完成节点安装是不够的,必须在目标通道上完成提交/实例化,才能被合法调用。
具体解决步骤(针对Fabric 2.x版本,你当前使用的是生命周期命令)
你已经完成了链码安装,接下来需要走链码定义的批准与提交流程:
批准链码定义(针对当前组织)
使用查询到的Package ID执行批准命令,替换命令中的orderer地址、CA文件路径等参数以匹配你的网络配置:peer lifecycle chaincode approveformyorg -o orderer.example.com:7050 --ordererTLSHostnameOverride orderer.example.com --channelID mychannel --name basic --version 1.0 --package-id basic_1.0:768b98e4408cc16f3ed5dcec186c25069801ec09441cba3b79bb316a0809632a --sequence 1 --tls true --cafile $ORDERER_CA检查链码定义的批准状态
确认是否满足通道背书策略要求的批准数量:peer lifecycle chaincode checkcommitreadiness --channelID mychannel --name basic --version 1.0 --sequence 1 --tls true --cafile $ORDERER_CA --output json输出中会显示各组织的批准状态,需确保达到策略要求(如多数组织已批准)。
在通道上提交链码定义
满足批准条件后,执行提交命令(需包含所有参与的节点地址及对应CA文件):peer lifecycle chaincode commit -o orderer.example.com:7050 --ordererTLSHostnameOverride orderer.example.com --channelID mychannel --name basic --version 1.0 --sequence 1 --tls true --cafile $ORDERER_CA --peerAddresses peer0.org1.example.com:7051 --tlsRootCertFiles $PEER0_ORG1_CA --peerAddresses peer0.org2.example.com:7051 --tlsRootCertFiles $PEER0_ORG2_CA验证链码提交状态
执行以下命令确认链码已在通道上生效:peer lifecycle chaincode querycommitted --channelID mychannel --name basic --cafile $ORDERER_CA或你之前使用的命令:
peer chaincode list --instantiated -C mychannel此时应能返回该链码的实例化/提交信息。
重新执行链码调用
完成以上步骤后,再次运行peer chaincode invoke命令,即可解决Undefined contract called错误。
额外注意事项
- 确保所有预先EXPORT的环境变量(如
CORE_PEER_LOCALMSPID、CORE_PEER_TLS_ROOTCERT_FILE、CORE_PEER_ADDRESS)正确对应当前操作的节点与组织。 - 链码名称、版本号、sequence参数需在所有步骤中保持一致,不能出现偏差。
内容的提问来源于stack exchange,提问作者Manisha
相关产品推荐
相关产品推荐

