两步搞定Hyperledger主打区块链解决方案Fabric
公有鏈 面向大眾,用戶可以匿名參與,非常方便,賬本數據也公開,加上強大的智能合約,因此公有鏈極大地促進了區塊鏈概念和技術的普及,比如比特幣、Ethereum平臺等。
聯盟鏈 考慮到商業應用對安全、隱私、監管、審計、性能的需求,提高準入門檻,增加了安全、隱私、可監管審計等商業特性,是區塊鏈技術在商業領域的應用探索。
本文將通過系統介紹,幫你兩步搞定符合Hyperledger協議規范的聯盟鏈實現技術:Fabric。
第一步:讀懂系統設計
Fabric系統主要由兩個應用構成:Orderer和Peer,其中Orderer負責交易共識并生成區塊,Peer節點負責模擬執行交易和記賬。這種劃分可以使整個平臺擁有更好的彈性和擴展性。
Peer和Orderer都是模塊化設計,重要模塊支持插拔,比如共識機制、合約執行環境、加密算法、證書服務模塊等。模塊化的設計讓企業可以利用現有IT設施來替換部分Fabric模塊。
Fabric架構如下圖:
? 證書服務——共建信任
上圖中最左邊是證書服務系統,主要提供會員注冊和證書頒發功能,Fabric系統的參與方都必須經過授權,比如Orderer、Peer、Client等都需要擁有受信任的證書。
證書一方面用于系統接入,另一方面用于交易簽名。所以統一的證書服務非常重要。
會員證書又分為注冊證書和交易證書,注冊證書與會員信息關聯在一起,用于標識會員的身份,在必要的時候,還可以支持監管和審計;交易證書用于交易簽名,之所以交易要用不同的證書,是為了避免會員的個人信息和交易信息被泄露,比如交易內容或者多筆交易之間的關聯關系等,另外交易證書可以申請多份,甚至可以為每一筆交易申請一份交易證書。
??共識網絡——獨特何在?
上圖中最右側為區塊鏈共識網絡,由Orderer集群組成,用于交易共識并生成區塊。區塊鏈是去中心化的,意味著需要多方一起參與交易排序,生成區塊。
Orderer目前支持SBFT和Kafka兩種共識機制,其中SBFT是拜占庭容錯算法PBFT的簡化版,能夠容忍部分節點故障,Kafka是一個中心化的排隊服務,能提供更高的性能,兩種共識算法分別適用于不同的場景,用戶還可以定制自己的共識模塊。
和其他區塊鏈系統不同的是,交易共識在Fabric中被獨立成為單獨的系統,這樣一來,參與共識的節點數變少,共識速度得到提高,Fabric的共識網絡支持多鏈,即多個區塊鏈賬本可以共用同一張共識網絡,降低系統部署和運維成本。
??區塊鏈節點——便捷調用
區塊鏈節點Peer主要功能是調用智能合約執行交易和記賬。
>>智能合約
智能合約是運行于區塊鏈上的應用程序,Fabric的智能合約稱為鏈碼,分為系統鏈碼和用戶鏈碼,系統鏈碼用來實現系統層面的功能,包括系統的配置,用戶鏈碼的部署、升級,用戶交易的簽名和驗證策略等。用戶鏈碼實現用戶的應用功能。
鏈碼被編譯成一個獨立的應用程序,運行于隔離的Docker容器中,在鏈碼部署的時候會自動生成合約的Docker鏡像。
鏈碼支持采用Go、Java、Nodejs編寫,并提供相應的中間層供鏈碼使用,鏈碼可以使用GetState和PutState接口和Peer節點通信,存取K-V數據 。
>>共享賬本
共享賬本包括區塊文件和K-V狀態數據,區塊文件存儲在本地文件系統,由Peer節點負責寫入,文件內容是排序后的區塊數據,每個文件有大小限制,存儲一定數量的區塊,區塊由交易共識系統產生,包含一條或多條交易。
K-V狀態數據提供給鏈碼存取使用,采用LevelDB存儲。
客戶端構造交易提案,發送給一個或多個Peer節點,交易提案中包含本次交易要調用的合約標識、合約方法和參數信息以及客戶端簽名等。
>>Peer節點模擬執行交易
Peer節點收到交易提案后,會模擬執行交易,然后將原始交易提案和執行結果打包到一起,進行簽名并發回給客戶端,其中在模擬執行交易期間產生的數據修改不會寫到賬本上。
>>客戶端打包
客戶端收到各個Peer的應答后,打包到一起組成一個交易并簽名,發送給Orderer。
>>共識排序,生成新區塊
Orderer對接收到的交易進行共識排序,然后按照區塊生成策略,將一批交易打包到一起,生成新的區塊,發送給Peer節點。
>>交易校驗
Peer節點收到區塊后,會對區塊中的每筆交易進行校驗,檢查交易依賴的輸入輸出是否符合當前區塊鏈的狀態,完成后將區塊寫入賬本,并修改K-V狀態數據。
通過上面的介紹,讀者能夠了解到區塊鏈平臺的基本框架、關鍵組件以及交易流程,后續筆者將進一步介紹Fabric系統的使用,敬請關注。
總結
以上是生活随笔為你收集整理的两步搞定Hyperledger主打区块链解决方案Fabric的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: BlockChain- 以太坊架构
- 下一篇: IBM HyperLedger fabr