Hyperledger Fabric私有數據


官方文檔:點這里


1簡介

同一個通道中,允許某一組織在對同一通道內其他組織保持部分的數據私有。也就是說有一部分被標識為私有的數據只能具有權限的組織查看和操作,而其余組織不具備查看和操作私有數據的權限。
通常如果需要保持數據私有可以另外創建一個通道只為私有數據服務,但是如果涉及到多個業務方時,為每一個組織另外創建通道會增加額外的管理類開銷。並且也不能在進行私有數據操作的時候,讓其余沒有權限的組織節點都知道有這么一筆交易發生。
從Fabric 1.2開始,引入了一個私有數據集合的概念,它允許通道內的指定的某一個組織中的部分成員可以對私有數據進行操作,而其他沒有權限的節點只能知道有這么一筆交易發生而不能了解交易的細節。

1.1私有數據集合


私有數據集合包括兩個部分:

  1. 私有數據實體:通過Gossip協議在具有權限的節點之間傳輸,並且只有具有權限的節點可以看到。這部分私有數據存儲在具有權限的節點的私有的狀態數據庫中。可以通過鏈碼API在具有權限的節點上進行訪問。並且私有數據不涉及排序服務,因為是通過Peer節點間的Gossip協議進行傳輸的。所以要求每一個節點都需要設置參數CORE_PEER_GOSSIP_EXTERNALENDPOINT,並在通道內設置錨節點用於跨組織通信。

  2. 私有數據的哈希值:這一部分數據用於背書,排序以及寫賬本到通道內的每一個Peer節點。哈希值作為交易的證明用於狀態驗證還可以用於審計。

1.2什么時候使用私有數據


  • 當所有的數據都需要在通道內的成員之間保密的時候,使用通道比較合適。
  • 當交易要在所有組織之間傳播,並且要求只有通道內的部分組織成員可以查看或操作交易內的某一部分數據時,需要使用私有數據集合。並且部分數據需要對排序節點進行保密時,使用私有數據集合。

1.3私有數據的交易流程

1. 當客戶端提交一個調用鏈碼的功能(讀或寫私有數據)提案請求到具有該私有數據集合操作權限的背書節點時,私有數據或者是用於通過鏈碼生成私有數據的數據時,通過提案中的`transient`字段進行發送。
2. 背書節點模擬交易並將私有數據存儲到`peer`節點上的`transient data store`一個臨時的數據存儲區,並基於私有數據定義的策略,通過`Gossip`協議發送到其他具有權限的節點。
3. 背書節點將提案響應發送給客戶端。提案響應包括已經背書的讀寫集。讀寫集包括公共數據和私有數據的哈希值。發送給客戶端的不包括任何的私有數據。
4. 客戶端應用提交交易(包括帶有私有數據哈希值的提案響應)到排序節點。帶有私有數據哈希值得交易將和正常交易一樣包括在區塊中。帶有私有數據哈希值得區塊分發到所有節點上。用這種方式,通道中所有的`peer`節點可以通過私有數據的哈希值對交易進行驗證而不需要知道任何的私有數據信息。
5. 在區塊提交時,具有權限的節點通過集合策略確定是否具有訪問私有數據的權限。如果具有權限,他們將會檢查本地的`transient data store`確定他們是否已經在進行鏈碼背書的時候接收到私有數據。如果沒有,將試圖從其他具有權限的節點處拉取私有數據。他們將驗證公共區塊中私有數據的哈希值並提交交易。當驗證與提交結束后,私有數據將移動到他們的私有數據庫和私有讀寫副本中。最后從`transient data store`中刪除私有數據。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM