Home Fabric_tutorials_private_data
Post
Cancel

Fabric_tutorials_private_data

这篇文章,学习操作下 private data,教程的示例很清晰,没什么需要多说的,所以这篇会很短。

private data 用 collection 表示的,collection definition 文件描述了有权限使用、保存和传播私有数据的节点,以及私有数据应该被保存多久。

collection definition 只有 5 个参数:

  • name,名字
  • policy,定义了哪些节点有权限保存私有数据
  • requiredPeerCount,背书节点传播私有数据到其他节点,这个参数定义的是传播的最小数量
  • maxPeerCount,这个参数定义的是传播的最大数量
  • blockToLive,定义了私有数据应该被保存的时间,以区块数量为单位,超期之后会被删除,如果想永久保存,那么就设为 0

collection definition 被保存为 json 文件,在合约实例化的时候,通过 –collections-config 参数传入,官网的例子如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// collections_config.json
[
  {
       "name": "collectionMarbles",
       "policy": "OR('Org1MSP.member', 'Org2MSP.member')",
       "requiredPeerCount": 0,
       "maxPeerCount": 3,
       "blockToLive":1000000
  },

  {
       "name": "collectionMarblePrivateDetails",
       "policy": "OR('Org1MSP.member')",
       "requiredPeerCount": 0,
       "maxPeerCount": 3,
       "blockToLive":3
  }
]

需要注意的是,在合约内,也需要配套的私有数据结构体定义:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// Peers in Org1 and Org2 will have this private data in a side database
type marble struct {
  ObjectType string `json:"docType"`
  Name       string `json:"name"`
  Color      string `json:"color"`
  Size       int    `json:"size"`
  Owner      string `json:"owner"`
}

// Only peers in Org1 will have this private data in a side database
type marblePrivateDetails struct {
  ObjectType string `json:"docType"`
  Name       string `json:"name"`
  Price      int    `json:"price"`
}

在这个例子里,org1 和 org2 可以操作名字为 collectionMarbles 的数据,org1 可以操作 collectionMarblePrivateDetails 的数据。

合约实例化的命令如下,可以看到使用了上面的 json 文件:

1
peer chaincode instantiate -o orderer.example.com:7050 --tls --cafile $ORDERER_CA -C mychannel -n marblesp -v 1.0 -c '{"Args":["init"]}' -P "OR('Org1MSP.member','Org2MSP.member')" --collections-config  $GOPATH/src/github.com/chaincode/marbles02_private/collections_config.json
This post is licensed under CC BY 4.0 by the author.