为什么在 hyperledger 中部署链代码不起作用?

Why does deploying chaincode in hyperledger not work?

我正在 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一点作用都没有,把之前错误的created/installed文件从./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卷中,并且似乎已被解决,因为它已被蒸发的脚本删除一起 ./network.sh down 中的音量。

docker rm -f $(docker ps -aq) # This is a dangerous command because all containers are erased.
docker volume prune

我现在 mistake/solution 找到了。

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

然后我把网络上下调:

./network.sh down 然后按 ./network.sh up

再次打开它

之后我可以继续没有错误