' Chaincode指纹不匹配'从其他同行查询时

时间:2017-07-04 15:16:14

标签: hyperledger-fabric

我在多台服务器上建立了一个网络。在其中一台服务器上,编译后的链代码始终与其他服务器上的链代码不同,从而产生以下消息:

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

链码在不同的对等端上没有相同哈希值的原因是什么?

4 个答案:

答案 0 :(得分:0)

安装链码时,基本流程的工作方式如下:

  1. 考虑到所有依赖项,包括传递
  2. ,它被打包到存档文件中
  3. 使用golang环境在docker容器内复制并在那里编译
  4. 如果我没有误解为/usr/bin/local/chaincode
  5. ,则下一个对等体会构建新的链代码容器并移动已编译的二进制文件

    现在,您的问题是您的计算机中最有可能$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文件夹复制到同一位置的另一台计算机上即可。