一、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 流程
- 在Hyperledger Fabric中啟用CouchDB
- 建立索引,索引會在出塊的時候更新
- 将索引添加到您的chaincode檔案夾,通過node sdk可以指定位置,peer指令必須在特定位置
- 安裝并執行個體化Chaincode
- 查詢CouchDB狀态資料庫
- 更新索引
- 删除索引
注:深藍在1.0上嘗試直接用rest api通路couchdb,修改之後fabric未察覺到。
4.2 couchDB介紹
couchDB的底層是一個B-tree的存儲結構,為提高效率,所有的資料的插入或更新都是直接在樹的葉子節點添加,不删除舊節點,通過版本号來 确定最新的資料--版本号還能用來解決并發寫的沖突。是以資料檔案會越來越大,可以在适當地時間運作compact過程或replication過程,會 删除舊檔案,使得資料檔案得到壓縮。
五、動态加入組織
- 生成相關證書
- 擷取配置、送出配置更新
- 将組織加入channel
- 更新相關鍊碼
六、可插拔的背書和驗證
- 需要不同的交易背書,如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
注:如有錯誤,還請大家指正。