1.1 问题背景:
如果某个渠道上的一组组织需要将数据与该渠道上的其他组织保密,则他们可以选择创建一个仅包含需要访问数据的组织的新渠道。 但是,在每种情况下创建单独的渠道都会产生额外的管理开销(维护链码版本,策略,MSP等),并且channel不允许参与者都看到交易同时又保留一部分交易的用例。
Private data 使渠道上已定义的组织子集能够认可,提交或查询私有数据,而无需创建单独的渠道。
1.2 私有数据收集什么
一是实际的私有数据,通过gossip协议发送peer-to-peer 给有权查看的组织。
此数据存储在授权组织对等方的私有状态数据库中,可以从这些授权对等方上的链码进行访问。排序服务看不到私有数据。
需要注意的是,由于gossip在授权组织之间分配所有数据peer-to-peer,需要引导锚节点,在每个peer上配置CORE_PEER_GOSSIP_EXTERNALENDPOINT,以引导跨组织通信。
二是该数据的哈希值,已经背书、排序、写到channel中每个peer结点的账本中。
hash用作事务的证据,并且用于状态验证以及审计目的。
下图展示了授权的peer结点有私有数据:
如果收集成员发生争议或想要将资产转让给第三方,则收集成员可以决定与其他方共享私人数据。 然后,第三方可以计算私有数据的哈希值,并查看其是否与通道分类帐上的状态匹配,从而证明该状态在某个时间点存在于集合成员之间。
问题:When to use a collection within a channel vs. a separate channel
当必须在属于该渠道成员的一组组织中对整个交易(和分类账)保密时,请使用渠道。
当必须在一组组织之间共享事务(和分类帐)时,但是当这些组织的子集应有权访问事务中的某些(或全部)数据时,请使用集合。 此外,由于私有数据是通过点对点而不是通过块进行分发的,因此当必须对交易数据保密时,请不要使用私有数据集合来订购服务节点。
1.3 A use case to explain collections
考虑一个在渠道上交易产品的五个组织:
- 一位农民在国外出售商品
- 一家将货物运往国外的分销商
- 托运人在各方之间移动货物
- 批发商从分销商处购买商品
- 零售商从托运人和批发商那里购买商品
分销商可能希望与农民和托运人进行私下交易,以使批发商和零售商对交易条款保密(以免暴露他们收取的加价幅度)。
分销商可能还希望与批发商建立单独的私人数据关系,因为它向零售商收取的价格要比零售商低。
批发商可能还希望与零售商和托运人建立私人数据关系。
可以为多个关系之间定义共享多个私有数据集合(PDC),而不是为这些关系中的每个定义许多小渠道。
PDC1:分销商,农民和托运人
PDC2:分销商和批发商
PDC3:批发商,零售商和托运人
使用此示例,分发者拥有的对等方将在其分类账中拥有多个私有数据库,其中包括来自分发者,农民和托运人关系以及分发者和批发商关系的私有数据。
1.4 Transaction flow with private data
当在链码中引用私有数据集合时,事务流程会略有不同,以便在提议,认可并提交给分类帐的事务时保护私有数据的机密性。
1.5 Sharing private data
在许多情况下,一个集合中的私有数据键/值可能需要与其他渠道成员或其他私有数据集合共享,作为交易的一部分,接收方通常会希望根据链上的散列来验证私有数据。
1.6 Purging private data
1.7 How a private data collection is defined