ルーキーシリーズファブリック - ファブリックプライベートデータ(6)

ファブリックプライベートデータ

1.個人データの定義

チャネル上の組織のグループが、チャネル上で他の組織との機密データにする必要がある場合、彼らは唯一の組織がデータにアクセスする必要が含まれている新しいチャネルを作成することを選択することができます。しかしながら、それぞれの場合に別のチャネルを作成するには、追加の管理オーバーヘッド(メンテナンス鎖コードバージョン、戦略、MSP、等)をもたらすであろう。

ハッシュ法とチャンネル内のプライベートデータ構造により導入されたファブリックスーパーブックsideDBメカニズムは、よりきめの細かいプライバシー保護を実現しています。取引内容のハッシュた後、まだソートノードに送信され、公共のデータベースや書籍構造に提出。グループは、ローカルデータベースでピア・ノードを許可して、プライベート状態ブロック鎖構造を維持し、取引のプレーンテキストコンテンツを保存しています。これは、他のノードは、チャネルの取引認可グループの内容を見ることができないことを保証します。

プライベートデータは2つの部分に分かれています。

  • 一つは、民間のピアデータベース(プライベート状態)の存在である実際のキー、値、です。
  • 通常ピアデータベース(状態)で存在しているハッシュ値、ハッシュ(値)は、後に、発注者側が値を取得することができ、実際のデータのプライバシーキー、値ハッシュ(キー)である公開データの別の部分、。プライベートデータがピアするためのアクセス許可が割り当てられていない、ハッシュ後にキーと値を格納することのみ可能です。

2.ファブリック内のプライベートデータトランザクション処理

  1. SDKには、取引の承認ノードに送信され、ノードは、ポリシーによって承認を必要とする(ポリシーがここでインスタンス化を設定することです)の検証。
  2. 取引の承認ノードのシミュレーションの実行、およびに瞬時にデータベース(プライベート過渡DB)に保存されている本当のプライベートキーと値のデータ。本当のプライベートゴシップによって収集ポリシー、ピア・ノードの認証、同期データを基に、かつ一過性データベースに保存されています。シミュレーション結果は、SDKに実行戻った後ノードを推奨するもので、データは、公開データ(個人データの上にハッシュを)返されました。
  3. SDKは、ピアのすべてがプライベートデータを検証するために行くことができ、相手のすべてが公開データを持っているその時に、ピアに配布するため、ピアの結果が発注カットとして発注パッケージ、および共通ブロックに戻って送信されますピア・コレクション・ポリシーではなく、検証することができない、とのデータのプライバシーを確​​保するために、本当のプライベートデータを持っていません。
  4. 前に、コミットによる最初のチェック・コレクション・ポリシーかどうかを自分自身で判断するピア、渡された場合、瞬時にデータベース内の実際の自分のプライベートなデータかどうかを確認する必要があり、そうでない場合だろう、で他のピアからデータを取得しようとします。
  5. 彼らは公共のデータベースでは、書き込みHASHは、プライベートデータをコミットする準備ができたら、一貫している場合は、パブリックデータにプライベートデータと、第1のハッシュをとった後、試合を行います。トランザクションがこのブロックでブックに提出して、成功した後にコミットされ、個人データは、専用のデータベースに瞬時データベースからコピーされ、かつ瞬時データベースから削除されます。この時点で、全体のトランザクション処理が終了すると、データが正常にブックに書かれています。

3.プライベートデータのユースケース

  • 定義のセットを構築するためのJSONファイルは
    、それが個人データへのアクセスを定義するための定義のセットを構築することであるチャネル上のデータの民営化の最初のステップとなります。
name:集合的名称。
policy:定义允许持久保存集合数据的组织peer节点。
requiredPeerCount:传播私有数据所需的对等数量,作为认可链代码的条件
maxPeerCount:出于数据冗余目的,当前认可peer节点将尝试将数据分发到的其他peer的数量。
blockToLive:此值表示数据应以块为单位存储在私有数据库中的时间。数据将在专用数据库上为指定数量的块生效,之后将被清除,从而使这些数据从网络中过时。要无限期地保留私有数据,即永远不要清除私有数据,请将blockToLive属性设置为0。
memberOnlyRead:值true表示peer自动强制只允许属于其中一个集合成员组织的客户端对私有数据进行读取访问。

サンプル

[
  {
       "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
  }
]
  • プライベートデータを読み取り、書き込みAPIを使用してチェーン・コード
// 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"`
}

個人データへの特定のアクセスは、以下の制限の対象となります。

name, color, size, and owner 将对渠道的所有成员(Org1和Org2)可见
price 仅对Org1的成员可见
stub.PutPrivateData("collectionMarbles", colorNameIndexKey, value)
valAsbytes, err := stub.GetPrivateData("collectionMarbles", name) //get the marble from chaincode state
  • スタートネットワーク
./byfn.sh up -c mychannel -s couchdb
  • インストールのチェーンコード
peer chaincode install -n marblesp -v 1.0 -p github.com/chaincode/marbles02_private/go/
  • 内部のインスタンス化
export ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
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
  • チェーンコードを呼び出す
    プライベートデータを保存するには:異なるノードは、ポリシーセットに応じて、異なる組織からのデータを表示することができます
export MARBLE=$(echo -n "{\"name\":\"marble1\",\"color\":\"blue\",\"size\":35,\"owner\":\"tom\",\"price\":99}" | base64 | tr -d \\n)
peer chaincode invoke -o orderer.example.com:7050 --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n marblesp -c '{"Args":["initMarble"]}'  --transient "{\"marble\":\"$MARBLE\"}"
peer chaincode query -C mychannel -n marblesp -c '{"Args":["readMarble","marble1"]}'

おすすめ

転載: www.cnblogs.com/jiliguo/p/11487648.html