【问题标题】:In Hyperledger Fabric when I try to invoke, I'm getting the following error: chaincode definition for 'fabcar' exists, but chaincode is not installed在我尝试调用的 Hyperledger Fabric 中,出现以下错误:'fabcar' 的链代码定义存在,但链代码未安装
【发布时间】:2020-03-30 21:15:17
【问题描述】:

我学习了 2 个不同的教程

https://github.com/swetharepakula/Fabric101Workshop

https://hyperledger-fabric.readthedocs.io/en/release-2.0/deploy_chaincode.html.

当我查询安装时,它显示 fabcar 已安装并成功提交, 但在这两种情况下,当我尝试调用时,我都会收到以下信息:

错误:调用期间背书失败。响应:状态:500 消息:“确保已成功定义链码 fabcar 在频道 mychannel 上并重试:'fabcar' 的链码定义 存在,但没有安装链码”。

我尝试更改 CORE_PEER_GOSSIP_USELEADERELECTION=true,但这阻止了我的一个对等节点启动。

我在 Mac 上工作,节点在 docker 中运行,任何帮助将不胜感激。

【问题讨论】:

    标签: hyperledger-fabric chaincode


    【解决方案1】:

    我在批准某个组织时使用了错误的 packageID 时遇到了这个错误

    使用approveformyorg 时,请检查您使用了各自的$PACKAGE_ID_ORG1$PACKAGE_ID_ORG2

    在 org1 上:

    peer lifecycle chaincode approveformyorg \
         --channelID $CHANNEL_NAME \
         --name $CHAINCODE_NAME --version $CC_VERSION \
         --package-id $PACKAGE_ID_ORG1 \
         --sequence $CC_SEQ -o orderer:7050 --tls --cafile $ORDERER_TLS_CA
    

    在 org2 上:

    peer lifecycle chaincode approveformyorg \
         --channelID $CHANNEL_NAME \
         --name $CHAINCODE_NAME --version $CC_VERSION \
         --package-id $PACKAGE_ID_ORG2 \
         --sequence $CC_SEQ -o orderer:7050 --tls --cafile 
    

    否则它会给我以下信息:

    在 org1 上:

    bash-5.0# peer lifecycle chaincode queryapproved -C bankscochannel -n fabcar
    Approved chaincode definition for chaincode 'fabcar' on channel 'bankscochannel':
    sequence: 1, version: 1.0, init-required: false, package-id: fabcar-v1:002d3fc291572c3e8bc52fea3b228cbd1877ab87669978759fc75f51f893a0dd, endorsement plugin: escc, validation plugin: vscc
    
    bash-5.0# peer lifecycle chaincode querycommitted -C bankscochannel
    Committed chaincode definitions on channel 'bankscochannel':
    Name: fabcar, Version: 1.0, Sequence: 1, Endorsement Plugin: escc, Validation Plugin: vscc
    
    bash-5.0# peer lifecycle chaincode queryinstalled
    Installed chaincodes on peer:
    Package ID: fabcar-v1:002d3fc291572c3e8bc52fea3b228cbd1877ab87669978759fc75f51f893a0dd, Label: fabcar-v1
    

    0n org2:

    bash-5.0# peer lifecycle chaincode queryapproved -C bankscochannel -n fabcar
    Approved chaincode definition for chaincode 'fabcar' on channel 'bankscochannel':
    sequence: 1, version: 1.0, init-required: false, package-id: fabcar-v1:002d3fc291572c3e8bc52fea3b228cbd1877ab87669978759fc75f51f893a0dd, endorsement plugin: escc, validation plugin: vscc
    
    bash-5.0#  peer lifecycle chaincode querycommitted -C bankscochannel
    Committed chaincode definitions on channel 'bankscochannel':
    Name: fabcar, Version: 1.0, Sequence: 1, Endorsement Plugin: escc, Validation Plugin: vscc
    
    bash-5.0# peer lifecycle chaincode queryinstalled 
    Installed chaincodes on peer:
    Package ID: fabcar-v1:c4430b8d45ee5bca03233272da19aafab73d41c973861adfab8d349c70d950e3, Label: fabcar-v1
    

    请注意,在控制台输出中,peer lifecycle chaincode queryapproved 的结果都返回了相同的 package_id,这是不正确的

    【讨论】:

      【解决方案2】:

      您必须先安装链代码,然后再调用它。您可以按照link 中提到的步骤进行操作 为了安装、实例化然后调用链代码。

      【讨论】:

        【解决方案3】:

        您的链码似乎未安装在所有组织的对等节点上。您将其安装在组织的对等节点上,并尝试从另一个不存在的对等节点进行查询。 并遵循文档中的链码生命周期(6 个步骤)。

        https://hyperledger-fabric.readthedocs.io/en/release-2.0/commands/peerlifecycle.html

        【讨论】:

          【解决方案4】:

          我在使用 Go 打包链代码时遇到了同样的问题。然后我重启了测试网络,尝试用Java打包chaincode,问题解决了。

          【讨论】:

            【解决方案5】:

            当您批准您的链码定义时,您可能没有设置正确的--package-id

            我遇到了同样的问题,因为你,那是因为我已经把uncorrect --package-id 1ec5f659f7b95978829202e4201cd969ccb0952a9c87a1bb51c9588b518923a1 ,但正确的--package-id值应 sacc_1.0:1ec5f659f7b95978829202e4201cd969ccb0952a9c87a1bb51c9588b518923a1 STRONG>

            参考https://hyperledger-fabric.readthedocs.io/en/release-2.2/deploy_chaincode.html#invoke-failure

            【讨论】:

              【解决方案6】:

              对于可能遇到此问题的任何人。首先,这取决于您的拓扑,如果您为每个组织配置了多个对等点,请继续阅读...

              打包您的链代码时,您需要确保在所有组织的对等点上共享和安装同一个包。任何关闭都将导致不同的包 ID,对于组织而言,该包 ID 将无法被识别。

              例如,如果您安装并批准一个带有包 id x 的 peer 1 并在带有包 id y 的 peer 2 上安装和批准,然后执行 queryapproved cmd,您将看到包 id y 已安装并批准。当您在对等点 1 上调用链代码时,您将收到上述错误消息。

              可以在多个组织中使用不同的包 ID,但在一个组织中则不行。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2020-10-12
                • 1970-01-01
                • 2020-04-05
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多