天天看點

hyperledger fabric 1.2的一點特性一、private data二、Service Discovery三、Access Control Lists (ACL)四、CouchDB使用五、動态加入組織六、可插拔的背書和驗證七、PeerLedger檢查點八、Gossip上司人選舉

一、private data

1.1 概念

  • 隐私資料儲存在side DB中,Orderer service是看不見private data的
  • 背書、排序、審計、寫入peer中,都是用的hash值
  • 當需要把private data分享給第三方時,驗證hash值,證明資料是在某一個時間點的

1.2 資料流

  • 發送invoke給背書節點(authorized),private data放在transient field中
  • 背書節點模拟交易,并且存儲再transient data store中(臨時本地存儲),通過goosip協定,根據collection policy傳播
  • 背書節點傳回public data給用戶端,包括private key 的hash
  • Orderer排序,分割區塊
  • Peer驗證,各個peer用同一種方法驗證hash值。
  • Commit期間,檢查自己時候有權限拿到private data,如果有,再檢查transient data store,如果沒有的話就從其他peer那裡pull,對比hash值,然後移出transient store

1.3 使用

  • 在初始化鍊碼的時候定義私有資料集合,結合private相關的函數使用

1.3 使用場景

  • 當完整的交易需要信任的話,還是推薦用channel
  • 當需要屏蔽orderer或者某些組織内節點時(存疑),使用collection

二、Service Discovery

    Sdk不需要維護靜态資訊,這個服務可以提供peer的動态資訊,分為layouts和group to peer mapping,sdk可以根據政策選擇peer進行背書。

提供功能:配置查詢(MSPConfig)、peer成員資訊查詢、背書節點查詢、本地peer成員資訊查詢。

三、Access Control Lists (ACL)

進一步提供了細粒度的通路控制清單,分為Signature和ImplicitMeta兩種政策,具體見configtx.yaml。

四、CouchDB使用

4.1 流程

  1. 在Hyperledger Fabric中啟用CouchDB
  2. 建立索引,索引會在出塊的時候更新
  3. 将索引添加到您的chaincode檔案夾,通過node sdk可以指定位置,peer指令必須在特定位置
  4. 安裝并執行個體化Chaincode
  5. 查詢CouchDB狀态資料庫
  6. 更新索引
  7. 删除索引

注:深藍在1.0上嘗試直接用rest api通路couchdb,修改之後fabric未察覺到。

4.2 couchDB介紹

    couchDB的底層是一個B-tree的存儲結構,為提高效率,所有的資料的插入或更新都是直接在樹的葉子節點添加,不删除舊節點,通過版本号來 确定最新的資料--版本号還能用來解決并發寫的沖突。是以資料檔案會越來越大,可以在适當地時間運作compact過程或replication過程,會 删除舊檔案,使得資料檔案得到壓縮。

五、動态加入組織

  1. 生成相關證書
  2. 擷取配置、送出配置更新
  3. 将組織加入channel
  4. 更新相關鍊碼

六、可插拔的背書和驗證

  • 需要不同的交易背書,如UTXO等
  • 可以替換系統合約,如ESCC和VSCC
  • ESCC和VSCC獨立出來,提供了簽名(驗證政策)和state相關的依賴項,可以自己實作接口,編譯成so檔案引用
  • 插件一緻性需要節點管理者保證,日後會做插件一緻性的驗證
  • 如果傳回ExecutionFailureError ,則鍊暫停防止分歧,其他錯誤都會被标記為invalid
  • 導入插件的話推薦protobuf,其他的可能出問題

七、PeerLedger檢查點

新增檢查點,可以抛棄檢查點之前的peerLedger,隻留存vLedger(可指定政策)

八、Gossip上司人選舉

靜态:直接再core.yaml裡面指定

動态:上司者發送心跳給其他節點,作為存活的證據,如果peer一段時間内沒有收到這個資訊,則開始重新選舉,可以有多個上司者,但是網絡穩定之後有一個上司者會放棄。

#參考文獻

> http://hyperledger-fabric.readthedocs.io/en/release-1.2/

> https://github.com/hyperledger/fabric-samples

注:如有錯誤,還請大家指正。

繼續閱讀