0

我正在使用 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,
        chaincodeId: ccName,
        chaincodeType: ccType,
        chaincodeVersion: ccVersion,
        fcn: ccFunc,
        args: ccArgs,
        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"
      },
      "tlsCACerts": {},
      "url": "grpcs://peer1.xxxxxxxxxx.eastus.aksapp.io:443"
    }
  },
  "version": "1.0.0",
  "wallet": "org1"
}

非常感谢

4

0 回答 0