Hyperledger fabric 在私有数据的情况下,hyperledger结构中的背书\u策略\u失败

Hyperledger fabric 在私有数据的情况下,hyperledger结构中的背书\u策略\u失败,hyperledger-fabric,hyperledger,Hyperledger Fabric,Hyperledger,我们正在进行一个项目,使用最新的私人数据收集。 我们正在kubernetes设置中运行对等点。我们有一个集合配置,如下所述 { "name": "Org1_PDC2", "policy": "OR ('Org1.member')", "requiredPeerCount": 0, "maxPeerCount": 2, "mem

我们正在进行一个项目,使用最新的私人数据收集。 我们正在kubernetes设置中运行对等点。我们有一个集合配置,如下所述

 {
    "name": "Org1_PDC2",
    "policy": "OR ('Org1.member')",
    "requiredPeerCount": 0,
    "maxPeerCount": 2,
    "memberOnlyRead": true,
    "memberOnlyWrite": true,
    "blockToLive": 0,
    "endorsementPolicy": {
       "signaturePolicy": "OR('Org1.member')"
     }
  }
我们在渠道中有两个组织,每个组织有两个同行。因为我们已经提到“Org1_PDC2”的背书政策只需要Org1的签名。但是我们看到事务也被发送到Org2的对等方。但它在org2中失败,因为它无法访问“Org1_PDC2”。我们还从nodejs应用程序中观察到,当我们提交事务时,它会导致背书策略失败,我可以在Org1的peer1日志中看到链码已成功执行,但在Org1的peer2日志中,我看到错误为

2020-11-02 13:18:24.249 UTC [gossip.privdata] fetchPrivateData -> DEBU 566a286 Total members that fit some digest: []
2020-11-02 13:18:24.249 UTC [gossip.privdata] fetchPrivateData -> WARN 566a287 Do not know any peer in the channel( mychannel ) that matches the policies , aborting
2020-11-02 13:18:24.249 UTC [gossip.privdata] populateFromRemotePeers -> WARN 566a288 Failed fetching private data from remote peers for dig2src:



2020-11-02 13:18:25.249 UTC [gossip.privdata] RetrievePvtdata -> DEBU 566a28b Could not fetch all missing collection private write sets from remote peers for block [291588] channel=mychannel
2020-11-02 13:18:25.249 UTC [gossip.privdata] prepareBlockPvtdata -> WARN 566a28c Could not fetch all missing eligible collection private write sets for block [291588]. Will commit block with missing private write sets:[txID: 6d14a881ecc6b437f553fc5df7f8fd29d10d92f22f752a2488fc382d535b62e8, seq: 0, namespace: mycc, collection: Org1_PDC2, hash: b8317508d3b677563bb5119626eabfc866ad561358e2d1a7116749d86c952ebe
] channel=mychannel
我们正在nodejs应用程序中使用discovery选项,选项为

await gateway.connect(connectionProfile, {discovery: { enabled: true, asLocalhost: false}});
const network = await gateway.getNetwork('mychannel');
const contract = await network.getContract(contractName);
在org1客户端的连接配置文件中,我们只保留了来自org1和Order的对等方的信息。当我们从客户端调用任何事务时得到的错误消息是

[TransactionEventHandler]: strategyFail: commit failure for transaction "e7080f63ff9be02002d2723b7431b1e9f236c8119c7c37e7dd21bf924a8a5b7a": TransactionError: Commit of transaction e7080f63ff9be02002d2723b7431b1e9f236c8119c7c37e7dd21bf924a8a5b7a failed on peer peer1.org1.svc.cluster.local with status ENDORSEMENT_POLICY_FAILURE

您可能需要使用
contract.addDiscoveryInterest()
让客户端SDK知道链码访问的集合,然后再使用该契约调用事务,如本教程页面中所述:

如果未成功,则可以使用
transaction.setEndorsingOrganizations()
显式设置用于背书的组织:


您可能需要让客户端SDK知道链码使用
contract.addDiscoveryInterest()访问的集合,然后再使用该contract调用事务,如本教程页面中所述:

如果未成功,则可以使用
transaction.setEndorsingOrganizations()
显式设置用于背书的组织: