一、私有数据机制介绍
对于一些组织来说,总会有一些机密数据,比如产品价格、用户电话、用户地址等信息,这些数据可能希望只被某几个组织知道,或者仅仅自己知道。可以将这些机密数据存储到私有数据库中,然后通过私有数据收集策略来定义有哪些peer有权获得这些私有数据,这些授权peer同样是将这些数据存储到私有数据库里,对于ordering来说,也只能看到私有数据的哈希。
另外私有数据同样是通过Gossip协议在peer间传输的。
二、私有数据的交易流程
在之前一篇文章中的交易流程章节分析了普通交易的详细流程。私有数据的交易流程与之相比有些许不同,具体流程如下:
- 首先由client请求关于私有数据的交易提案;
- 然后背书节点仿真执行交易,并把私有数据存储到一个临时数据库里;
- 背书节点同时将这些私有数据通过gossip协议传播给其他有权限的记账节点,这些记账节点同样将私有数据存储到临时数据库里;
- 传播到指定的数量后背书节点将结果进行签名,返回给client端的数据不包含私有数据,只会返回签名和私有数据key和value的哈希值;
- client将提案的响应发送给ordering后,ordering无法看到私有数据的内容,只能看到一串哈希值;
- 然后ordering将交易区块传输给记账节点,记账节点会进行一些验证,除了验证背书策略,还要验证ordering发送的哈希值与本地临时数据库里保存的私有数据是否匹配,如果验证成功,记账节点就会将临时数据库中的数据正式存储到私有数据库里;
- 记账节点存储完成后会通知客户端记账的情况。
根据上述的步骤整理出交易流程图:
三、私有数据集合配置
在chaincode实例化的时候需要指定私有数据收集策略配置文件路径,需要在配置文件中指定名称、收集策略、传播的节点数量、私有数据保存时间等选项,具体实例如下所示:
[
{
"name": "collectionMarbles",