如何使用Node.js中的发现来实施认可策略?

问题描述

我正在使用hyperleger fabric V1.4.4,我试图在升级时强制执行包括2个组织的认可策略,但是当我这样做时,发现服务开始失败,并且策略丢失了。

我验证了加入频道时已定义了锚点对等点,所以这似乎不是问题。

这就是我在做什么:

最初,这是我实例化/升级链码的方式:

    const gateway = new Gateway();
    await gateway.connect(ccp,{ wallet,identity: userId,discovery: { enabled: true,asLocalhost: false } });

    const client = gateway.getClient();
    const network = await gateway.getNetwork(channelName);
    const channel = network.getChannel();
    const peers = client.getPeersForOrg(orgName);

    const txId = client.newTransactionID(true);
    const deployId = txId.getTransactionID();

    var request = {
        targets : peers,chaincodeId: ccName,chaincodeType: ccType,chaincodeVersion: ccVersion,fcn: ccFunc,args: ccArgs,txId: txId
    };
    let upgradeResponse = await channel.sendUpgradeProposal(request,300000);

通过这种方式,合同也可以使用发现服务,但是我没有所需的认可政策,因此我以这种方式更改了代码:

    var policy = {
        identities: [
          { role: { name: "member",mspId: "org1" }},{ role: { name: "member",mspId: "org2" }},],policy: {
          "2-of": [{ "signed-by": 0 },{ "signed-by": 1 }]
        }
    }

    var request = {
        targets : peers,txId: tx_id,'endorsement-policy': policy
    };

但是发现服务开始失败,并显示以下错误:

error: [Channel.js]: Channel:mychannel received discovery error:failed constructing descriptor for chaincodes:<name:"mycontract" >

我开始使用await channel.getDiscoveryResults()查看发现结果,发现添加了认可策略后,认可会丢失。

我还从发现结果中看到,我只能看到从组织ccp传递过来的对等体,看不到网络中的所有对等体,但是可以看到所有订购者。

我认为问题在于进行升级时发现并没有看到所有组织的同伴,但是我不明白为什么。

我尝试从请求中删除对等对象,但这似乎并没有改变结果。我也尝试在请求中设置两个对等体,但出现下一个错误:

Error: Peer with name "peer.xxxxxx.eastus.aksapp.io" not assigned to this channel

我已经迷失了一段时间,是否有办法让我确认锚点对等正常工作? ccp阻塞发现过程的方式是什么?如何诊断我的问题?

这是我的ccp的样子:

{
  "certificateAuthorities": {
    "org1CA": {
      "caName": "ca.org1","tlsCACerts": {},"url": "https://ca.xxxxxxxx.eastus.aksapp.io:443"
    }
  },"client": {
    "connection": {
      "timeout": {
        "orderer": "300","peer": {
          "endorser": "300"
        }
      }
    },"organization": "org1"
  },"name": "org1","organizations": {
    "org1": {
      "certificateAuthorities": [
        "org1CA"
      ],"mspid": "org1","peers": [
        "peer1.org1"
      ]
    }
  },"peers": {
    "peer1.org1": {
      "grpcOptions": {
        "hostnameOverride": "peer1.xxxxxxxxxx.eastus.aksapp.io","ssl-target-name-override": "peer1.xxxxxxxxxx.eastus.aksapp.io"
      },"url": "grpcs://peer1.xxxxxxxxxx.eastus.aksapp.io:443"
    }
  },"version": "1.0.0","wallet": "org1"
}

非常感谢您

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...