我在多台服务器上建立了一个网络。在其中一台服务器上,编译后的链代码始终与其他服务器上的链代码不同,从而产生以下消息:
Error: Error endorsing query: rpc error: code = Unknown desc = Error executing chaincode: Could not get deployment transaction from LSCC for mycc:1.0 - Get ChaincodeDeploymentSpec for mycc/torchplatformchannel from LSCC error: chaincode fingerprint mismatch data mismatch - <nil>
我不知道如何精确编译链码,但是当我在自己的笔记本电脑上运行多个对等体时,使用相同的配置,散列总是匹配。我使用normal命令从cli(fabric-tools)容器(peer chaincode install -n mycc -v 1.0 -p chaincode_example02
)在对等端上安装链代码。主机类似:
root@fabric:~# uname -a
Linux fabric 4.4.0-81-generic #104-Ubuntu SMP Wed Jun 14 08:17:06 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
其他服务器:
Linux fabric2 4.4.0-75-generic #96-Ubuntu SMP Thu Apr 20 09:56:33 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
Docker版本是相同的:
root@fabric:~# docker version
Client:
Version: 17.06.0-ce
API version: 1.30
Go version: go1.8.3
Git commit: 02c1d87
Built: Fri Jun 23 21:23:31 2017
OS/Arch: linux/amd64
Server:
Version: 17.06.0-ce
API version: 1.30 (minimum version 1.12)
Go version: go1.8.3
Git commit: 02c1d87
Built: Fri Jun 23 21:19:04 2017
OS/Arch: linux/amd64
Experimental: false
图片是相同的:
root@fabric:~# docker images
hyperledger/fabric-tools x86_64-1.0.0-beta ae6b0f53cb70 3 weeks ago 1.32GB
hyperledger/fabric-peer x86_64-1.0.0-beta e01c2b645f11 3 weeks ago 182MB
hyperledger/fabric-ca x86_64-1.0.0-beta e549e8c53c2e 3 weeks ago 238MB
但链码实际上是不同的:
root@286f0cd4bc82:/var/hyperledger/production/chaincodes# md5sum mycc.1.0
a96076f0cadf7c0e5c8da50ee5195078 mycc.1.0
root@286f0cd4bc82:/var/hyperledger/production/chaincodes# ls -la mycc.1.0
-rw-r--r-- 1 root root 2441 Jul 4 12:55 mycc.1.0
另一方面:
root@6089fc35a6d9:/var/hyperledger/production/chaincodes# md5sum mycc.1.0
918307de80ef18de378c63e4138ccdf5 mycc.1.0
root@6089fc35a6d9:/var/hyperledger/production/chaincodes# ls -la mycc.1.0
-rw-r--r-- 1 root root 2448 Jul 4 12:53 mycc.1.0
链码在不同的对等端上没有相同哈希值的原因是什么?
答案 0 :(得分:0)
安装链码时,基本流程的工作方式如下:
/usr/bin/local/chaincode
现在,您的问题是您的计算机中最有可能$GOPATH
不同,因此在不同的计算机上安装相同的链代码会带来不同的依赖关系,最终会产生不同的手指结果。
您需要做的是将您的链码打包在一个地方并分发包装以便安装它。
peer chaincode package -n name -v 1.0 -p path_to_your_chaincode
这将生成您稍后可以使用的打包文件。您可以找到更多详细信息here。
答案 1 :(得分:0)
如果您选择要从中进行安装的计算机,但指向要安装链代码的不同对等方,例如
CORE_PEER_ADDRESS=<peer1>:7051 peer chaincode install ....
和
CORE_PEER_ADDRESS=<peer2>:7051 peer chaincode install ....
然后你应该在peer1和peer2上都安装相同的安装。
或者,正如Artem指出的那样,您可以将CC打包成“mycc.pak”
peer chaincode package -n mycc -p <path to mycc> -v 0 mycc.pak
并且可以使用稍微不同的安装命令将其安装在多个对等端上
peer chaincode install mycc.pak
答案 2 :(得分:0)
我遇到了同样的问题,原因是我在两个服务器之一中有一个额外的文件。 首先,让我们了解如何计算Chaincode指纹。它是srcPath(chaincode文件夹的整个内容),ID和版本的组合。 所有服务器都应具有相同的链码,即,即使有一个额外的文件也会更改链码的哈希值。
答案 3 :(得分:0)
您需要在所有同行中都拥有准确的链码副本。
尝试:
docker exec cli peer chaincode list --installed
(请注意,cli容器名称可能与您的容器名称不同)
并检查两个服务器中的ID。如果它们不匹配,则意味着您具有不同的链码文件。
只需尝试将整个chaincode文件夹复制到同一位置的另一台计算机上即可。