(译)超级账本官方文档 基本概念(四) - 私有数据(Private Data)

超级账本是Linux基金会发起的项目,意在提供一套企业级区块链应用框架,便于大家开发基于区块链技术的应用。
Fabric的基本概念

私有数据
什么是私有数据
当一个Channel中的一些组织需要保证数据的私有,不让Channel中的其它组织访问,这些组织可以单独创建一个Channel,只包含有权限读取这些私有数据的组织。然而,如果出现这种需求就创建新Channel的话,会增加管理员的管理负担,并且不支持让所有在Channel中的人员都能看到所有交易的同时,保持一些私有数据。

这就是为什么Fabric在v1.2之后加入了私有数据集(private data collections),它允许在Channel中创建子组织,这些子组织可以背书,提交,查询这些私有数据,而不需要重新创建一个Channel。
什么是私有数据集
这个集合包含两个元素

真实的私有数据在有权限查看私有数据的组织间通过gossip协议点对点传输。这些私有数据被存放在peer的私有数据库中(有时候被称为“side”数据库,或者“SideDB”)。排序服务在这里就不需要了,也看不到私有数据。注意,设置gossip协议需要先初始化锚节点,因为需要用到跨组织间的通信。

私有数据哈希,这个哈希拥有背书,被排序了,同时写入了Channel中每个peer的账本。这个哈希服务可以作为交易的证据,状态验证的证据或者审计需要。
下面的图示展示了一个账本中被授权能访问私有数据的peer和一个没有权限访问私有数据的peer。

在这里插入图片描述

集合中的成员可以分享私有数据给其它成员,如果他们发生争执,或者他们想把资产转让给第三方。第三方可以计算私有数据的哈希,看他满不满足Channel中账本的状态。证明这个状态是在两个交易集间的某个确定时刻是存在的。
什么时候用Channel中的交易集,什么时候新建一个Channel

当整个交易需要对Channel中的某些组织保密的时候可以用新建Channel的方法
当交易需要对一些组织公开,但这些组织中又只有一部分可以存取交易中的某些信息时可以使用私有数据。另外,因为私有数据通过peer和peer之间传递,而不是通过区块传递,所以交易数据必须对orderer节点不可见。

使用私有数据的交易流程
当链码中使用了私有数据时,为了保证数据的私有,交易的提议,背书和提交到账本的过程会有些许不同。

客户端应用程序提交一个调用链码函数(读或者写私有数据)提议请求到集合中属于授权组织的背书节点。在链码中的私有数据或用于生成私有数据的数据被放置在交易提议的transient字段中。
背书节点模拟执行交易,把私有数据存储到transient data store中(peer节点中的本地临时存储区域),并根据数据集策略(collection policy),通过gossip协议把私有数据发送给授权的peer。
背书节点将交易提议的处理结果响应放在公共数据中返回给应用程序,这些处理结果包含私有数据的键值及内容的哈希。私有数据本身不会返回给应用程序。更多关于私有数据的细节可以阅读这篇文章

应用程序客户端(应该值的就是SDK)提交交易(包含私有数据的哈希)到orderer节点,orderer节点按照正常流程打包区块。包含私有数据哈希的区块被分发到各个peer节点。这样一来,在Channel中的所有peer都可以独立的验证包含私有数据哈希的交易,而不需要知道真正的私有数据内容。
在区块验证期间,被授权的peer根据数据集策略(collection policy)来判定自己是否有权限读取私有数据。如果有权限,他们会先验证本地的私有数据来判定他们是否在链码背书阶段就收到了私有数据,如果本地没有这些私有数据,他们会从其他peer中拉取。随后他们会验证私有数据与区块中的私有数据哈希值,然后提交交易和区块。在验证和提交过后,私有数据的拷贝被移动到了私有状态数据库及私有数据写集存储中。最后在peer的transient data store中的本地私有数据将会被删除。

举个栗子解释集合(collections)
比如现在我们在一个Channel中有5个组织来处理交易过程:

一个买产品的农民
一个运输产品的分销商
一个提供两地运输的物流商
一个从分销商批发产品的批发商
一个销售从批发商或物流商得到的产品的零售商

分销商可能想让他和农民及物流商的交易私有化,不让分销商和零售商看到他们之间的交易,以免暴露自己的价格加成。
分销商也很有可能想让他与批发商的私有数据独立,因为批发商向他们要的价格要比他们给零售商的低。
批发商也可能需要它与物流商和零售商的数据保持私有。
相比于为这些数据关系建立单独的Channel,私有数据集合(Pirvate Data Collection)可以用来共享私有数据在:

PDC1:分销商,农民和物流公司间
PDC2:分销商和批发商之间
PDC3:批发商,零售商和物流公司间

在这里插入图片描述

image.png

在这个例子中,分销商拥有的peer的账本中包含多条私有数据,比如分销商,农民和物流公司之间的私有数据及分销商和批发商之间的私有数据。因为私有数据的数据库和通道中的账本是分开存储的,所以私有数据库也被称为“SideDB”。

在这里插入图片描述
image.png

私有数据是如何定义的
更多关于私有数据底层信息可以查看私有数据详情页面
清除数据
对于非常敏感的数据,有权力存取私有数据的节点可能需要,或者被政府要求在一定时间后清除这些数据,只保留这些数据的哈希作为证据。
在有些情况,私有数据只允许保留在peer的本地数据库中,直到它可以被拷贝出区块链网络以外的数据库。也有可能这些数据只能留在peer中,直到在链码执行完成后才能进行后续处理。为了支持后面的情况,一旦将一定数量的后续区块添加到私有数据库中,就可以清除私有数据。( To support the later use case, it is possible to purge private data if it has not been modified once a set number of subsequent blocks have been added to the private database)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值