Hyperledger fabric Hyperledger-链码指纹不匹配

Hyperledger fabric Hyperledger-链码指纹不匹配,hyperledger-fabric,hyperledger,hyperledger-composer,Hyperledger Fabric,Hyperledger,Hyperledger Composer,我们已经在内部建立了一个Hyperledger网络来运行一些测试。所使用的Hyperledger结构版本为1.1 我们有一个由5台机器组成的网络,每台机器代表一个组织,所有这些机器都有两个对等机、一个CA以及一个命令行界面——在Docker上运行。我们还有一个在独立机器上运行的Orderer节点 我们可以安装Golang链码,让组织间的沟通正常。当我们试图通过BNAs安装业务网络逻辑时,问题就出现了。我们正在使用Hyperledger Composer 0.19.7。要做到这一点,会发生以下情况

我们已经在内部建立了一个Hyperledger网络来运行一些测试。所使用的Hyperledger结构版本为1.1

我们有一个由5台机器组成的网络,每台机器代表一个组织,所有这些机器都有两个对等机、一个CA以及一个命令行界面——在Docker上运行。我们还有一个在独立机器上运行的Orderer节点

我们可以安装Golang链码,让组织间的沟通正常。当我们试图通过BNAs安装业务网络逻辑时,问题就出现了。我们正在使用Hyperledger Composer 0.19.7。要做到这一点,会发生以下情况:

  • 我使用npm安装生成BNA

  • 我在本地对等计算机上成功安装了它,并通过composer install和composer start命令启动网络

  • 我将同一个BNA文件发送给网络的其他成员,他们也使用composer install命令成功地将其安装到对等节点上

  • 但是,当他们尝试使用适当的管理卡与网络通信(composer network ping)时,会显示以下消息:

  • 错误:尝试ping时出错。错误:2未知:执行时出错 chaincode:无法获取的ChaincodeDeploymentSpec todo-poc5-network:0.0.1:获取的ChaincodeDeploymentSpec todo-poc5-network/LSCC默认错误:链码指纹 不匹配数据不匹配命令失败

    真正奇怪的是,如果我(而不是BNA)分发安装在我的同龄人(在/var/hyperledger/peer0/chaincodes文件夹中)上的bin文件,ping命令可以完美地工作,组织可以通信。但分发bin文件而不是BNA本身似乎不是理想的解决方案

    有没有人经历过类似的事情

    提前谢谢

    编辑:

    好的,很抱歉久违了

    事实证明,我们运行了不同版本的CLI,但即使在规范化它们之后,仍然会出现错误。还有其他建议吗

    您提到,安装后会提供路径、ID和版本。有什么地方我能看到他们吗

    通过命令行执行composer安装,我看到的是:

    ✔ 安装业务网络。 这可能需要一分钟。。。 已成功安装业务网络predic poc,1.0.2版命令成功


    指纹不匹配数据不匹配是因为安装在对等机上的包以相同的方式不同,因此结构将此差异视为问题并报告此错误

    为了理解这是如何发生的,需要了解composer如何将bna放到对等机上的详细信息

    一个扩展的bna文件看起来像一个节点模块,它有一个package.json文件和一些组成业务网络的工件,因此composer解包bna文件并使用fabric node sdk将其打包,告诉它是一个节点模块,fabric node sdk将适当地打包并发送给对等方。fabric然后可以解包并执行
    npm安装--production
    ,以完成此业务网络的设置。 但是,需要确保bna的package.json中存在对某些composer npm模块的引用,以便业务网络能够实际运行,如果这些引用不存在,则在fabric node sdk创建最终包并将其发送给对等方之前,
    composer network install
    命令会将它们注入package.json中。 该命令有效地将这些行添加到package.json文件的dependencies部分

    “composer-runtime-hlfv1”: “0.19.9”,
    “composer-common”: “0.19.9”
    
    (请注意,此处提供的版本号是撰写本文时的最新版本,您可能需要使用其他/更新版本的composer运行时)

    插入的版本号取自您当前安装的composer cli版本,因此,如果您有不同版本的composer cli,您可以看到,当您将相同的bna部署到不同的对等机上时,如果安装了不同版本的composer cli,则在对等机上结束的包将不同。 (作为补充,fabric node sdk不使用文件的日期/时间,而是将其设置为确定性值,因此不同的日期/时间不是问题。)

    有两种方法可以确保此问题不会发生

  • 确保使用完全相同级别的composer cli安装到不同组织的对等计算机上
  • 您可以在业务网络实现的package.json内显式设置
    composer-runtime-hlfv1
    composer-common
    依赖项的版本。如果存在这些条目,则在将包发送给对等方之前,命令行不会覆盖package.json或将条目注入package.json

  • 安装链码时,请提供路径、ID和版本。这三个属性都成为调用链码时必须匹配的“指纹”的一部分。当安装相同的链码但使用不同的路径时,会出现此问题。当同一频道上的不同用户想要独立运行链码时,这种情况就会有机地发生。例如:

    人员A在Peer1上安装以下设备:

    path - /uhoh/chaincode/marbles/dir,
    id - marbles
    version - v1
    
    而人员B在Peer2上安装时:

    path - /marbles
    id - marbles
    version - v1
    
    然后让我们选择一个人来实例化两个对等方加入的通道上的链码。其目的是每个人都有自己的链码运行,但是b/c路径不同调用将无法在人b的对等机上运行


    此问题已在fabric v1.1.3、v1.2.2和v1.3+版本中解决,有关更多详细信息,请参阅。

    在fabric级别,当安装链码时(在composer network安装之后)-它提供路径、ID和版本。这三个属性都成为“指纹”的一部分,在[随后]调用chai时必须匹配