Hyperledger Fabric,如何与另一个对等节点共享私有数据?

Hyperledger Fabric, how to share private data with another peer node?

我正在更多地探索 Hyperledger Fabric,并且对私有数据产生了兴趣。据我了解,当对等节点创建私有数据时,它与该私有数据的哈希一起存储在该节点上。未经授权的节点将仅存储私有数据的哈希值,以便他们可以验证其存在。

我正在使用 4 个节点(三个对等节点,一个有序节点),其中 Org1(对等节点)具有独特的权限来创建必须对 Org2(对等节点)可见但不能使其可见的值到 Org3(对等节点)。有没有办法做到这一点。这是从 IBM Blockchain Platform vscode 扩展教程中获取的 Typescript 链代码示例,用于创建私有数据。

    @Transaction()
    public async createMyPrivateAsset(ctx: Context, myPrivateAssetId: string): Promise<void> {
        const exists: boolean = await this.myPrivateAssetExists(ctx, myPrivateAssetId);
        if (exists) {
            throw new Error(`The asset my private asset ${myPrivateAssetId} already exists`);
        }

        const privateAsset: MyPrivateAsset = new MyPrivateAsset();

        const transientData: Map<string, Uint8Array> = ctx.stub.getTransient();
        if (transientData.size === 0 || !transientData.has('privateValue')) {
            throw new Error('The privateValue key was not specified in transient data. Please try again.');
        }
        privateAsset.privateValue = transientData.get('privateValue').toString();

        const collectionName: string = await getCollectionName(ctx);
        await ctx.stub.putPrivateData(collectionName, myPrivateAssetId, Buffer.from(JSON.stringify(privateAsset)));
    }

我需要为此更改一些内容吗?

提前致谢!

是的,私人数据非常适合这种情况。 有两种基本方法。

  1. 使用静态集合 - 创建一个以 Org1 和 Org2 作为成员的集合,并将 privateData 放入该集合。
  2. 使用隐式集合 - putPrivateData 到 Org1 隐式集合,putPrivateData 到 Org2 隐式集合。

使用后一种方法,您不需要提前创建静态集合。如果 Org3 将来获得数据授权,它还允许您稍后与 Org3 隐式集合共享私有数据。

有关详细信息,请参阅 private data documentation and private data tutorial and sample

请注意,通过这种方法,Org3 将知道 Org1 和 Org2 正在共享一些数据,但不会看到私有数据本身。如果您不希望 Org3 知道交易发生了,那么您可以为 Org1 和 Org2 使用通道而不是使用私有数据。