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)));
}
我需要为此更改一些内容吗?
提前致谢!
是的,私人数据非常适合这种情况。
有两种基本方法。
- 使用静态集合 - 创建一个以 Org1 和 Org2 作为成员的集合,并将 privateData 放入该集合。
- 使用隐式集合 - putPrivateData 到 Org1 隐式集合,putPrivateData 到 Org2 隐式集合。
使用后一种方法,您不需要提前创建静态集合。如果 Org3 将来获得数据授权,它还允许您稍后与 Org3 隐式集合共享私有数据。
有关详细信息,请参阅 private data documentation and private data tutorial and sample。
请注意,通过这种方法,Org3 将知道 Org1 和 Org2 正在共享一些数据,但不会看到私有数据本身。如果您不希望 Org3 知道交易发生了,那么您可以为 Org1 和 Org2 使用通道而不是使用私有数据。
我正在更多地探索 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)));
}
我需要为此更改一些内容吗?
提前致谢!
是的,私人数据非常适合这种情况。 有两种基本方法。
- 使用静态集合 - 创建一个以 Org1 和 Org2 作为成员的集合,并将 privateData 放入该集合。
- 使用隐式集合 - putPrivateData 到 Org1 隐式集合,putPrivateData 到 Org2 隐式集合。
使用后一种方法,您不需要提前创建静态集合。如果 Org3 将来获得数据授权,它还允许您稍后与 Org3 隐式集合共享私有数据。
有关详细信息,请参阅 private data documentation and private data tutorial and sample。
请注意,通过这种方法,Org3 将知道 Org1 和 Org2 正在共享一些数据,但不会看到私有数据本身。如果您不希望 Org3 知道交易发生了,那么您可以为 Org1 和 Org2 使用通道而不是使用私有数据。