尝试初始化Channel对象以使用服务发现时无法获得认可计划

时间:2019-01-23 10:15:46

标签: hyperledger-fabric hyperledger hyperledger-fabric-sdk-js

我正在尝试使用Fabric 1.4中的服务发现功能。我的网络是默认网络,每个组织2个组织和2个对等方。我尝试通过服务发现功能而不是设置特定的目标对等方来调用链码。 (在使用服务发现之前,我在交易提议请求对象的目标属性中设置了特定的背书人。)

要使用服务发现,我在连接配置文件中将discover: true设置为对等体。然后,只需将以下代码添加到invoke函数中即可。

await channel.initialize({ discover: true, asLocalhost: true })

按照fabric-node-sdk文档中的教程,我更改了每个对等方的端口,以在docker-compose网络中使用服务发现。

一切正常,包括创建频道,安装链码和实例化链码。另外,如果我不使用服务发现功能,则调用链码也可以正常工作。

但是,如果我在await channel.initialize({ discover: true, asLocalhost: true })函数中添加了invoke,则此initialize函数会引发如下错误:

Error: No endorsement plan available for {"chaincodes":[{"name":"etri-bcdms-token-chaincode"}]}

(我在实例化期间设置了背书政策)

在对等方,将打印以下日志:

Failed constructing descriptor for chaincode chaincodes:<name:"etri-bcdms-token-chaincode" > ,: cannot satisfy any principal combination

我的invoke函数的完整代码如下:

const client = this._useFabricCA
      ? await getUserClient(orgID, userID)
      : await getOrgAdminClient(orgID)
    if (!client) {
      throw Error(`failed to get the client for ${orgID}`)
    }

    const channel = client.getChannel(channelID)
    if (!channel) {
      throw Error(`failed to get the channel for ${channelID}`)
    }

    // Service discovery
    await channel.initialize({ discover: true, asLocalhost: true })

    const chaincodeSetting = getChaincodeSetting(channelID)
    if (!chaincodeSetting) {
      throw Error(`no chaincode set on the channel ${channelID}`)
    }

    const txID = client.newTransactionID()
    const request: ChaincodeInvokeRequest = {
      // targets: targetList,
      chaincodeId: chaincodeSetting.id,
      fcn,
      args,
      txId: txID
    }

    // Process the endorsement
    const results = await channel.sendTransactionProposal(request)

对于这种错误有什么建议吗?我在哪里可以投资解决此错误并使用服务发现?任何建议都会非常感激。

1 个答案:

答案 0 :(得分:0)

您必须在渠道中的每个组织中添加一个锚点对等方,这为我解决了这个问题。服务发现使用八卦协议,因此服务发现需要锚点对等