1

我正在处理,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)

感谢你们对我的帮助!

4

2 回答 2

0

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

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

然后我放下网络:

./network.sh down然后再打开它./network.sh up

之后我可以继续没有错误

于 2020-12-29T20:06:27.980 回答
0

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

  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网络的volume就关闭了网络。

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

2-4。出现同样的错误,确认剩余音量有效。

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

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

换句话说,与先前错误链码相关的文件仍保留在 dokcer 卷中,并且似乎已被解决,因为它已被./network.sh down一起蒸发卷的脚本删除。

docker rm -f $(docker ps -aq) # This is a dangerous command because all containers are erased.
docker volume prune
于 2020-12-29T01:05:38.873 回答