8

我遵循了 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 中运行,任何帮助将不胜感激。

4

6 回答 6

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组织2:

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,这是不正确的

于 2020-10-05T16:18:00.477 回答
0

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

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

于 2020-04-01T09:25:38.757 回答
0

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

I encountered the same problem as you,that is because I have set uncorrect --package-id 1ec5f659f7b95978829202e4201cd969ccb0952a9c87a1bb51c9588b518923a1 ,but correct --package-idvalue should be sacc_1.0:1ec5f659f7b95978829202e4201cd969ccb0952a9c87a1bb51c9588b518923a1

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

于 2021-05-25T08:40:39.763 回答
0

您必须先安装链代码,然后再调用它。您可以按照此链接 中提到的步骤来安装、实例化然后调用链代码。

于 2020-04-01T09:17:41.593 回答
0

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

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

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

跨多个组织有不同的包 ID 是可以的,但在一个组织内就不行。

于 2022-02-15T18:23:41.410 回答
0

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

于 2020-06-16T03:22:57.660 回答