Hyperledger FabricのPrivate Dataまとめ
概要
What's Private Data
https://gyazo.com/54576a7e7d19a992db0b0e7a6324a7a3
Hyperledger Fabricでは基本的にChannelを分割することによってデータの秘匿化を行う
Channelに所属していないOrganizationのPeerはそのChannelのデータを得られない
Channelに所属している組織全てではなく、一部の組織間だけでデータを共有したくなったとき、Channelをもう一つ作ることが選択肢として考えられる
しかし、チャネルを増やせばChannel作成、ポリシー作成、Chaincodeインストール及びアップグレードなど、管理コストも増える
OrdererにはTxの内容が見られてしまう
Private Dataは指定したPeer間でのみTxを共有し、TxのHashだけをChannel上に送信する
Channel上の他の許可されてないPeerはもちろん、OrdererですらTxの内容を見ることができない
HashはブロックにコミットされるのでPrivate Dataを用いたTxをなかったコトにすることはできない
ChannelとPrivate Dataの使い分け
Channelを使うべきケース
秘匿化すべき組織範囲が固定の場合
Private Dataを使うべきケース
トランザクションをいくつかの組織で共有しなければならないが、その中身はその一部の組織のみアクセス可能な状態にしたい場合
Ordererにトランザクションを見せたくないとき
Private DataはPeer間で直接やり取りされる
(Channelの数が増えすぎるケース)
Channelが増えすぎるとチャネルの権限管理やChaincodeの管理などの運用コストが増えてしまう
データの保存場所
https://gyazo.com/eaaf7f5091c6f7fec7642aeb1263409c
Private Dataを管理する単位をcollectionと呼ぶ
collectionごとにそのデータにアクセスできるPeerのリストを定義する
Private Dataの削除
Private DataはHFのネットワーク外に保存することを想定しているため、不要になったらPeerから削除する(残しておいてもいい)
ex) 何ブロック進んだら消す
消す動作をpurgeとよんでいるが、purgeしたデータはクエリすることができなくなる
仕様詳細
Private DataのcollectionはChannelのChaincodeごとに定義される
Chaincode初期化時にcollectionの定義を渡す
Collection 定義
Policy
CollectionはあくまでChannelのChaincodeに紐づくものなので、ChaincodeのPolicyより緩くないといけない
Endorsement Policy同様、Policyを満たすだけのPeerの署名を集めればOK
requiredPeerCount
Private DataのTransaction成功させるのに必要なPeer数
Endorsement前に確認する
maxPeerCount
冗長性を持たせるためにPrivate Dataを共有できる最大のPeer数を決める
blockToLive
何ブロック分、Peerの中でPrivate Dataを保持するか
ずっと消えない設定もできる
memberOnlyRead
Private Dataの読み込み権限を持つPeerを、collectionに所属する組織のクライアントのみに限定する
zabeth129.icon ちょっとよくわかんない
example
code:json
[
{
"name": "collectionMarbles",
"policy": "OR('Org1MSP.member', 'Org2MSP.member')",
"requiredPeerCount": 0,
"maxPeerCount": 3,
"blockToLive":1000000,
"memberOnlyRead": true
},
{
"name": "collectionMarblePrivateDetails",
"policy": "OR('Org1MSP.member')",
"requiredPeerCount": 0,
"maxPeerCount": 3,
"blockToLive":3,
"memberOnlyRead": true
}
]
collection定義の更新
Chaincodeのアップグレードコマンドで新しいcollection定義を指定すればOK
Private Dataのreconciliation
ver1.4から、あとから追加されたPeerもこれまでのPrivate Dataを取得できるようになった
ネットワーク要因等でデータ同期が遅れていたケースもこの機能で対応できる
Private Transactionのフロー
https://gyazo.com/01b15782913694072a997ae12c83f988
Transient
参考