區塊鏈技術面試常被問到的Hyberledger Fabric關鍵概念
###總覽Overview
介紹 Hyberledger Fabric 做為一個全面、可定製、企業級區塊鏈解決方案關鍵設計需求:
- Assets (資產) - 資產定義了可以交換的幾乎所有東西,其能通過網路用錢計價,從食物、到古董車、到未來的貨幣。
- Chaincode(鏈碼/智慧合約) - Chaincode分割槽執行,根據交易順序、所需信任級別的限制、驗證跨節點型別、優化網路規模和效能
- Ledger Features (賬本) - 不可更改、共享帳本記錄了每個channle的完整的交易歷史,包括類SQL的查詢能力以保證高效的審計和糾紛解決
- Privacy through Channels - (跨channles隱私) 通道能滿足競爭企業和受監管行業在普通網路在進行多邊交易能滿足高隱私和保密需求。
- Security & Membership Services (安全和成員服務) - 帶許可權的成員管理提供了可信的區塊鏈網路,參與者值得所有的交易可以被有授權的監管和審計人員探測和跟蹤。
- Consensus (共識) - Fabric 獨特的共識機制能滿足企業對靈活性和可擴充套件性的需求。
###Fabric 功能
Hyperledger Fabric 是分散式帳本(DLT)的一個獨特實現,採用模組化區塊鏈架構,其提供了企業所需的網路安全、可擴充套件性、保密性和效能。其主要的區塊鏈網路功能包括:
- Identity management 身份管理
Hyperledger Fabric 提供使用者識別服務來管理使用者的ID和參與者在網路內的授權。訪問控制列表可以作為額外的許可層提供特定網路操作授權。比如,一個特定的使用者ID可以執行chaincode應用,但是無法部署新的chaincode。 使用者之間相互知道身份,但是並不知道相互之間做了什麼。
- Privacy and confidentiality 隱私與保密
Hyperledger Fabric 使競爭商業組織、任何需要私有、保密交易的組織共存在同一個許可網路中。私有channel限制訊息路徑來給特定子網成員完成隱私和保密交易。沒有該channel許可權的使用者無法見到和訪問channel的任何資料,包括交易、成員和通道資料。
- Efficient processing 高效的處理
Hyperledger Fabric 根據節點型別分配網路角色。為給網路提供併發和並行,交易執行從交易共識和承諾中分開。執行交易先於共識是每個peer節點能同時處理多個交易。併發執行提高了每個peer節點的執行效率,加速了分發交易到 ordering 服務。 除了能夠進行並行處理之外,還使交易處理和帳本維護的節點得到了拆分,peer節點沒有了共識的工作負載。這樣分工同樣降低了授權和認證的處理需求;所有peer節點不需要信任全部 ordering 節點,反之亦然,因此處理能被獨立與對方認可外執行
- Chaincode functionality 鏈碼/智慧合約功能
Chaincode應用編碼了在channel上執行特定型別交易的邏輯。Chaincode定義資產所有權變更的引數,例如,確保轉讓所有權的所有交易都遵守相同的規則和要求。System chaincode 是定義了整個channel操作引數的chaincode。生命週期和配置system chaincode定義channle的規則;背書和驗證system chaincode定義了背書和驗證交易的需求。
- Modular design 模組化設計
Hyperledger Fabric實現了模組化設計,網路設計者能根據需求選擇功能。比如特定的識別、共識、加密演算法可以插入任何 fabric網路。因此,其是一個任何行業和公共領域都可以使用的通用區塊鏈架構,保證其網路可以跨市場、監管和地理邊境進行互操作。相比之下,其他競爭對手大多是受限於特定領域和行業的。
###Fabric 模型
- Assets 資產
資產可以是有形(實體和硬體)或無形(合同和智慧財產權)的。可以很方便在客戶端javascript定義資產,在你的Fabric應用中使用,通過Fabric Composer工具。 Fabric支援資產的交換,通過未使用交易輸出作為後續交易的輸入。資產(和資產註冊)在Fabric中作為鍵值對的集合存在,在channel帳本中帶狀態變更記錄作為交易。Fabric允許任何資產採用二進位制或JSON格式表示。
- Chaincode
Chaincode 是定義資產和修改資產的交易指令的軟體。也就是說,它就是業務邏輯。chaincode執行讀取和修改鍵值對和其它狀態資料庫資訊的規則。chaincode 函式基於帳本當前狀態資料庫執行,通過交易提案初始化。chaincode 執行結果是一系列鍵值對寫入,其被提交到網路並被所有peer節點的帳本記錄。
- Ledger Features 帳本特性
帳本是fabric中所有狀態轉換的記錄,其記錄為順序、防篡改。狀態轉換是參與方提交的chaincode的執行結果。每個交易結果是一系列鍵值對提交給帳本來建立、更新或刪除。 帳本由一個區塊鏈來保持不可變更、順序記錄在區塊中,同時一個狀態資料庫來維護fabric當前狀態。每個channel一個賬本。每個peer維護所屬每個channel的一個賬本拷貝。
-
檢索和更新賬本使用基於key查詢、範圍檢索和組合key檢索
-
只讀檢索使用富檢索語言(如果使用 CouchDB 作為狀態資料庫)
-
只讀歷史檢索 - 檢索一個key的賬本歷史,可以檢視資料來源(enabling data provenance scenarios)
-
交易由各版本的鍵值對組成,chaincode (讀集合)讀取的和chaincode寫入的(寫集合)
-
交易包括每個背書peer的簽名,提交到ordering服務
-
交易被ordered(排序?共識)進區塊,從ordering服務釋出到channel的peer節點中
-
peer節點根據背書策略驗證交易並執行策略
-
在新增新塊之前,將執行版本檢查來保證資產的狀態從chaincode執行時刻開始沒有被改變
-
一旦交易被驗證和提交就不可以被改變
-
一個channel的帳本包括了配置區塊,其定義了策略、訪問控制列表和其它相關資訊
-
channel 包括成員服務提供者例項允許從不同證書機構加密材料。閱讀帳本主題,深入瞭解資料庫、儲存結構和"檢索能力".
-
Privacy through Channels 跨通道隱私
Fabric 實現了基於每個channel的不可變帳本,同時chaincode可以操作和修改資產的當前狀態(比如,更新鍵值對)。一個賬本存在於一個channel範圍 - 它可以被整個網路共享(假設每個參與者都在一個共同的channel內操作) - 或者可以私有給有一組特定的參與者。 在後續,這些參與者將能建立一個分離的channel,因此隔離/分離他們的交易和賬本。Fabric甚至能解決這樣的場景:希望彌合全域性透明度和隱私之間的差距。Chaincode僅安裝在需要獲取資產狀態來執行讀寫操作的peers(換句話說,如果一個chaincode沒有安裝一個peer,它將不能與賬本互動)。為了更進一步的隔離資料,chaincode內的值可以在附到賬本前使用通用的加密演算法,如SHA-256,來加密(部分或全部)。
- Security & Membership Services 安全和成員服務
Hyperledger Fabric 加強了交易網路,所有參與者都有已知的身份。公鑰基礎設施用來生成與組織,網路元件以及終端使用者或客戶端應用程式相關聯的加密證書。因此,資料訪問控制可以在網路和channel層面進行操作和管理。Fabric的“許可”概念,加上channel的存在和功能,有助於解決隱私和機密性至關重要的場景。 參看 Fabric CA章節來更好的理解加密的實現,以及在Fabric中的簽名、證明、驗證實現。
- Consensus 共識
在分散式帳本技術中,共識最近變成一個實現獨立功能的特定演算法的同義詞。然後,共識不僅是簡單的同意交易的順序,它是貫穿了整個交易流程中的基本角色,從提案、背書、到確認順序、驗證和承諾,Hyperledger Fabric中強調這樣差異。簡單來說,共識是對一個塊內一組交易正確性的全生命週期驗證。 當一個塊內交易的順序和結果符合明確的政策標準檢查時,共識最終達成。這些檢查和平衡發生在一個交易的生命週期內,包括的背書策略使用,指定特定成員必須對特定交易等級背書;同時系統chaincode保證這些策略被執行和堅持。在承諾前,peers將執行系統chaincode來保證足夠的背書存在,而且它們是從恰當的實體釋出而來。更進一步,當帳本的當前狀態被同意時將進行版本檢查,在任何包括交易的區塊被附加的帳本前。這個最終的檢查時為了保證避免雙重支付和其它可能可能導致危機資料完整性的其它威脅,並允許對非靜態變數執行函式。 除了大量背書、有效性和版本檢查之外,同時還有在交易流程中所有方向上持續存在的身份識別。訪問控制列表在網路層上分級實現(從ordering服務下到channels),並且隨著交易穿過不同架構元件,payloads(負載在不同層次上是不同的)被重複簽名,驗證和認證。 總而言之,共識不僅僅侷限於一批交易的順序達成一致,而是作為在交易從提案到承諾的過程中進行持續驗證的副產品而實現的總體。