Hyperledger Fabric - 如何更改链码的集合配置?

ces*_*mak 0 hyperledger hyperledger-fabric

我正在使用具有私有数据功能的 Hyperledger Fabric。的例子collection-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
 }
]
Run Code Online (Sandbox Code Playgroud)

使用此配置,下"collectionMarblePrivateDetails"的数据只能由Org1MSP.member.

现在我想将可访问性更改为Org2MSP.memberonly。是否可以执行类似的操作$ peer chaincode upgrade --collections-config $GOPATH/src/github.com/chaincode/marbles02_private/collections_config.json,以便更新收集策略?(尝试过,但还没有成功)

Dav*_*art 5

根据 Fabric私有数据文档

如果链码引用了集合,则链码将使用先前的集合定义,除非在升级时指定了新的集合定义。如果在升级期间指定了集合配置,则必须包括每个现有集合的定义,并且您可以添加新的集合定义。

当对等方提交包含链码升级事务的块时,集合更新生效。请注意,无法删除集合,因为通道区块链上可能存在无法删除的先前私有数据哈希。

所以是的,可以通过升级链码来更新私有数据集合成员资格。

这是我用来安装第二个链码版本然后使用新的集合配置在频道上升级它的语法:

peer chaincode install -n marblesp -p github.com/hyperledger/fabric/examples/chaincode/go/marbles02_private -v 2 
peer chaincode upgrade -C mychannel -n marblesp -c '{"Args":["init"]}' -v 2 -o 127.0.0.1:7050 --collections-config collection.json
Run Code Online (Sandbox Code Playgroud)

看起来您错过了一些升级标志。

任何新添加的成员都将收到用于未来交易的私人数据。任何被移除的成员将停止接收用于未来交易的私人数据。

请注意,从 Fabric v1.4 开始,私有数据集合的任何新添加成员也将通过协调过程自动接收先前提交给私有数据集合的私有数据。