Hyperledger fabric Hyperledger Fabric,如何与另一个对等节点共享私有数据?
我正在进一步探索Hyperledger结构,并对私有数据产生了兴趣。据我所知,当对等节点创建私有数据时,它与该私有数据的哈希一起存储在该节点上。未经授权的节点将只存储私有数据的散列,以便验证其存在 我使用的是4个节点(三个对等节点,一个有序节点),其中Org1(对等节点)具有创建值的唯一权限,该值必须对Org2(对等节点)可见,但不能对Org3(对等节点)可见。有没有办法做到这一点。这是从IBM区块链平台vscode扩展教程中获取的Typescript链代码示例,用于创建私有数据Hyperledger fabric Hyperledger Fabric,如何与另一个对等节点共享私有数据?,hyperledger-fabric,hyperledger-chaincode,Hyperledger Fabric,Hyperledger Chaincode,我正在进一步探索Hyperledger结构,并对私有数据产生了兴趣。据我所知,当对等节点创建私有数据时,它与该私有数据的哈希一起存储在该节点上。未经授权的节点将只存储私有数据的散列,以便验证其存在 我使用的是4个节点(三个对等节点,一个有序节点),其中Org1(对等节点)具有创建值的唯一权限,该值必须对Org2(对等节点)可见,但不能对Org3(对等节点)可见。有没有办法做到这一点。这是从IBM区块链平台vscode扩展教程中获取的Typescript链代码示例,用于创建私有数据 @Tr
@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)));
}
@Transaction()
公共异步createMyPrivateAsset(ctx:Context,myPrivateAssetId:string):承诺{
const exists:boolean=wait this.myPrivateAssetExists(ctx,myPrivateAssetId);
如果(存在){
抛出新错误(`资产my private asset${myPrivateAssetId}已存在`);
}
const privateAsset:MyPrivateAsset=new MyPrivateAsset();
const transientData:Map=ctx.stub.getTransient();
if(transientData.size==0 | |!transientData.has('privateValue')){
抛出新错误('未在瞬态数据中指定privateValue键。请重试');
}
privateAsset.privateValue=transientData.get('privateValue').toString();
const collectionName:string=await getCollectionName(ctx);
等待ctx.stub.putPrivateData(collectionName,myPrivateAssetId,Buffer.from(JSON.stringify(privateAsset));
}
我需要在这里换些东西吗
提前谢谢 是的,私有数据非常适合这种情况。 有两种基本方法
注意,使用这种方法,Org3将知道Org1和Org2正在共享一些数据,但不会看到私有数据本身。如果您不想让Org3知道发生了交易,那么您可以使用Org1和Org2的通道,而不是使用私人数据。嘿,谢谢你,
@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)));
}