为什么在超级账本中部署链码不起作用?

问题描述

我正在处理 hyperledger fabric v2.0,在我设置了网络后,我无法设置链码。

Linux 命令:./network.sh deployCC 不起作用。 所以它说我应该使用以下有效调用示例: ./network.sh deployCC -ccn basic -ccp ../asset-transfer-basic/chaincode-go -ccl go

如果我使用这个命令,我会收到以下错误

Error: Failed to normalize chaincode path: 'go list' Failed with: go: inconsistent vendoring in /home/akosua/fabric-samples/asset-transfer-basic/chaincode-go:
    github.com/golang/protobuf@v1.3.2: is explicitly required in go.mod,but not marked as explicit in vendor/modules.txt
    github.com/hyperledger/fabric-chaincode-go@v0.0.0-20200424173110-d7076418f212: is explicitly required in go.mod,but not marked as explicit in vendor/modules.txt
    github.com/hyperledger/fabric-contract-api-go@v1.1.0: is explicitly required in go.mod,but not marked as explicit in vendor/modules.txt
    github.com/hyperledger/fabric-protos-go@v0.0.0-20200424173316-dd554ba3746e: is explicitly required in go.mod,but not marked as explicit in vendor/modules.txt
    github.com/stretchr/testify@v1.5.1: is explicitly required in go.mod,but not marked as explicit in vendor/modules.txt

run 'go mod vendor' to sync,or use -mod=mod or -mod=readonly to ignore the vendor directory: exit status 1
Chaincode packaging has Failed
deploying chaincode Failed

我更新了当前的golang (v1.15)

谢谢你帮助我!

解决方法

我复现你的情况后,通过下面的方法解决了。

  1. 要安装智能合约依赖项,请运行以下命令
cd $GOPATH/src/github.com/hyperledger/fabric-samples
cd asset-transfer-basic/chaincode-go && \
GO111MODULE=on go mod vendor
  1. deployCC 中运行 test-network 命令
cd test-network && \
./network.sh deployCC -ccn basic -ccp ../asset-transfer-basic/chaincode-go -ccl go

[编辑]

在检查您的答案后,我再次重现了您的情况。我按原样写了订单。

第一假设

1-1。本来以为apt update一点作用都没有,通过从./network.sh down中删除之前错误创建/安装的文件解决了。

1-2。所以,我安装错了vendor后,人为的执行了命令,结果同样报错。

1-3。但是,在./network.sh down命令中,没有清除vendor,而在up命令中,脚本中执行了上面答案中建议的方法。

1-4。错误没有解决,只好另找问题。

另一个假设

  • 在分析 ./network.sh down 脚本时,确认 docker 卷已被清除。
  • 假设出现问题是因为包含错误供应商的包保留在 docker 卷上。

2-1。与最初的假设一样,deployCC 命令是根据错误的供应商执行的。

2-2。出现同样的错误后,没有清除docker网络的音量就关闭了网络。

2-3。使用正确的供应商替换链码后,重新加载网络并执行 deployCC 命令。

2-4。出现同样的错误,确认剩余体积有效果。

2-5。整个网络通过 -v 选项蒸发。此外,所有不必要的体积都通过 docker volume prune 蒸发。

2-6。之后重新加载网络并执行deployCC命令,确认工作正常。

换句话说,与之前错误链码相关的文件保留在 dokcer 卷中,似乎已经解决了,因为它被脚本删除了 {{1 }} 在一起。

./network.sh down
,

我现在找到了我的错误/解决方案。

首先我再次检查更新:sudo apt update

然后我将网络关闭和打开:

./network.sh down 然后通过 ./network.sh up

再次打开它

之后我可以继续没有错误