尝试初始化 Channel 对象以使用服务发现时未能获得背书计划
Failed to get endorsement plan when trying to initialize Channel object to use service discovery
我正在尝试使用 Fabric 1.4 中的服务发现功能。我的网络是默认的,2 个组织和每个组织 2 个同行。我尝试通过服务发现功能调用链代码,而不是设置特定的目标节点。 (在使用服务发现之前,我在交易提议请求对象的目标属性中设置了具体的背书者。)
为了使用服务发现,我在我的连接配置文件中将 discover: true
设置为对等点。然后,我只是将下面的代码添加到我的 invoke
函数中。
await channel.initialize({ discover: true, asLocalhost: true })
按照 fabric-node-sdk 文档中的教程,我更改了每个节点的端口以在 docker-compose
网络中使用服务发现。
一切正常,包括创建通道、安装链代码和实例化链代码。此外,如果我不使用服务发现功能,调用链码也能正常工作。
但是,如果我在我的 invoke
函数中添加 await channel.initialize({ discover: true, asLocalhost: true })
,这个 initialize
函数会抛出如下错误:
Error: No endorsement plan available for {"chaincodes":[{"name":"etri-bcdms-token-chaincode"}]}
(我在实例化时设置了背书策略)
在peer中,打印如下日志:
Failed constructing descriptor for chaincode chaincodes:<name:"etri-bcdms-token-chaincode" > ,: cannot satisfy any principal combination
我调用函数的完整代码如下:
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)
对于这种错误有什么建议吗?我可以在哪里投资来修复此错误并使用服务发现?任何建议将不胜感激。
您必须在频道中添加每个组织的锚节点,这解决了我的问题。服务发现需要锚节点,因为服务发现使用八卦协议
我正在尝试使用 Fabric 1.4 中的服务发现功能。我的网络是默认的,2 个组织和每个组织 2 个同行。我尝试通过服务发现功能调用链代码,而不是设置特定的目标节点。 (在使用服务发现之前,我在交易提议请求对象的目标属性中设置了具体的背书者。)
为了使用服务发现,我在我的连接配置文件中将 discover: true
设置为对等点。然后,我只是将下面的代码添加到我的 invoke
函数中。
await channel.initialize({ discover: true, asLocalhost: true })
按照 fabric-node-sdk 文档中的教程,我更改了每个节点的端口以在 docker-compose
网络中使用服务发现。
一切正常,包括创建通道、安装链代码和实例化链代码。此外,如果我不使用服务发现功能,调用链码也能正常工作。
但是,如果我在我的 invoke
函数中添加 await channel.initialize({ discover: true, asLocalhost: true })
,这个 initialize
函数会抛出如下错误:
Error: No endorsement plan available for {"chaincodes":[{"name":"etri-bcdms-token-chaincode"}]}
(我在实例化时设置了背书策略)
在peer中,打印如下日志:
Failed constructing descriptor for chaincode chaincodes:<name:"etri-bcdms-token-chaincode" > ,: cannot satisfy any principal combination
我调用函数的完整代码如下:
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)
对于这种错误有什么建议吗?我可以在哪里投资来修复此错误并使用服务发现?任何建议将不胜感激。
您必须在频道中添加每个组织的锚节点,这解决了我的问题。服务发现需要锚节点,因为服务发现使用八卦协议