原文連接:http://tabalt.net/blog/consor...git
聯盟鏈與Hyperledger Fabric介紹github
tabalt
2019.11 算法

聯盟鏈

什麼是聯盟鏈?
根據去中心化程度的不一樣,分化出3種不一樣應用場景下的區塊鏈:數據庫
- 公有鏈:全網公開,廣大用戶可參與
- 聯盟鏈:用於多個機構之間,容許受權的節點加入網絡,可根據權限查詢或修改信息
- 私有鏈:全部網絡中的節點都掌握在一家機構手中

聯盟鏈的優缺點
-
相比於公有鏈,聯盟鏈在效率和靈活性上更有優點編程
- 交易成本更低,交易只需被幾個受信的高算力節點驗證就能夠,無需全網確認。
- 節點規模小,能夠很好地鏈接,故障能夠迅速經過人工干預來修復。
- 可使用肯定型的共識算法並縮短區塊生成時間,從而更快完成交易。
- 讀寫權限能夠控制,從而提供更好的隱私保護。
- 聯盟鏈的參與者能夠更容易地達成一致來更新區塊鏈的規則、還原交易、修改餘額等。
- 相比於公有鏈,聯盟鏈去中心化程度不夠

聯盟鏈的發展前景
-
聯盟鏈受政策支持安全
- 不依賴發幣來激勵用戶參與,無監管問題
- 不須要耗費大量電力資源挖礦
-
聯盟鏈是「區塊鏈+」的技術載體網絡
- 支持已有業務系統中部分數據的上鍊需求
- 因聯盟而產生的信任創造新的業務方向

聯盟鏈的發展示狀
-
缺乏殺手級應用編程語言
-
聯盟創建困難分佈式
- 將本來不相干甚至互相競爭的機構聯合起來須要足夠大的影響力
-
前期投入大而盈利能力弱模塊化
- 不發幣,資金來源於傳統融資渠道
- 業務造成規模以前較難盈利
-
技術瓶頸有待突破
- 節點數量增加使得網絡結構逐漸複雜,性能和穩定性下降
- 區塊鏈的特性致使難以支持大容量和大規模數據存儲

聯盟鏈的應用探索

聯盟鏈技術平臺

Hyperledger Fabric

Hyperledger Fabric 簡介
- Hyperledger是Linux基金會發起旨在推進區塊鏈跨行業應用的開源項目,Fabric是其中最成功的子項目。
- 具備高度模塊化和可配置的體系結構,可支持銀行、金融、保險、醫療等普遍的行業用例。
- 支持以通用編程語言(如Go/Java/Node.js)而非受約束的領域特定語言(DSL)編寫智能合約 。
- 支持可插拔的共識協議以適應特定的信任模型,節點的受權加入方便網絡治理,且無需發行加密貨幣來激勵記帳。
- Fabric是一個開源的企業級許可型分佈式帳本技術平臺,他的差別化設計能夠提供給企業直接可用的安全性、可伸縮性、機密性和高性能。

身份與成員資格 Identity and Membership
- Fabric使用X.509格式的證書做爲身份,來標識區塊鏈網絡中的全部參與者,並提供用於肯定許可權的一些屬性,證書經過證書頒發機構(CA)來頒發。
- Fabric還提供了一個成員資格服務提供商 (MSP),用於肯定哪些CA是受信任的、列出組織成員身份、識別參與者在組織內扮演的特定角色、定義網絡和通道訪問權限等。

帳本 Ledger
- Fabric的帳本由兩個不一樣但相關的部分組成:世界狀態和區塊鏈。
- 世界狀態(Word-Stat) 保存了帳本數據的當前值,能夠頻繁更改,便於應用程序直接訪問,本質是一個KV數據庫,當前支持LevelDB和CouchDB。
- 區塊鏈(Blockchain) 記錄了致使當前世界狀態的全部更改日誌,寫入後沒法修改,便於歷史追蹤。

智能合約與鏈碼 Smart Contracts and Chaincode
- 智能合約定義了特定業務流程的交易邏輯,主要在世界狀態下放置、獲取、刪除狀態,或查詢區塊鏈交易記錄,是應用程序開發的重點。
- 鏈碼是一組用於安裝和實例化智能合約的技術容器,一個鏈碼能夠包含多個智能合約。

對等節點 Peer Node
- 對等節點(簡稱Peer)組件是Fabric區塊鏈網絡的基本元素,它託管着帳本和智能合約,且能夠同時託管多個帳本和多個智能合約。
- 區塊鏈網絡擁有多個組織下的多個對等節點,對等方節點具備經過特定CA頒發的數字證書分配的身份。

通道 Channel
- 通道容許一組特定的對等節點和應用程序在區塊鏈網絡內相互通訊,通道並不實際存在,而是由物理對等節點集合造成的邏輯結構。
- 每一個通道都有一個徹底獨立的帳本,這意味着徹底獨立的區塊鏈,以及徹底獨立的世界狀態。
- 一個組織能夠加入多個通道,從而參與多個獨立的區塊鏈網絡。

排序服務 Ordering Service

區塊鏈網絡的構建過程
- 組織R4 建立網絡配置NC4,相關身份證書頒發自證書頒發機構CA4
- 啓動排序服務O4,此時即造成了網絡

- 組織R4 更新網絡配置NC4,容許R1也成爲管理員, R1和R4在網絡配置上享有同等的權利
- 網絡管理員定義了一個聯盟X1,該聯盟包含兩個成員,組織R1和R2
- R1和R2的相關身份證書分別有CA1何CA2頒發

- 使用聯盟定義X1爲R1和R2建立了通道C1,排序服務O4和通道C1創建鏈接
- 通道由徹底獨立於網絡配置的通道配置CC1控制,CC1由對C1擁有同等權利的R1和R2管理

- 對等節點P1加入通道C1,P1託管着帳本L一、安裝了智能合約S5, P1和O4可經過C1互相通訊
- 應用程序A1也加入通道C1, A1經過C1同時鏈接到P1和O4,A1可經過P1節點上的S5訪問L1
- P一、A1均屬於組織R1,相關身份證書由CA1頒發

- 組織R2的對等節點P2和應用程序A2加入通道C1,相關身份證書由CA2頒發
- 節點P2 也託管了帳本L1的副本、安裝了智能合約S5
- 組織R1和R2能夠在經過通道C1在一個區塊鏈網絡上進行交易

- 定義了一個新聯盟X2,包含組織R3和R2,R3相關身份證書由CA3頒發
- 建立了由R2和R3管理的通道配置CC2,啓動了通道C2,造成了一個獨立的區塊鏈網絡
- 組織R3的P3和A3加入了C2,組織R2的P2和A2也加入了C2
- 對等節點P2同時託管了帳本L2,安裝了智能合約S6,應用程序A2可同時訪問兩個區塊鏈網絡

交易的完整流程(造成共識)
階段1:交易建議(Proposal
- 應用程序A1生成一個交易建議,發送給每一個必須的對等節點以進行簽名( endorse )
- 每一個簽名節點都使用交易建議獨立執行智能合約以生成並返回建議響應,此時不會更新帳本
- 應用程序A1收到足夠數量的已簽名建議響應,即完成階段1

階段2:排序和打包
- A1將包含簽名的交易建議響應提交到排序服務節點O1
- O1同時接收批量提交的交易,安排到定義明確序列中,並打包成塊
- O1不判斷交易內容而只是機械打包,同時到達的交易順序和塊中的順序可能也不一致

階段3:驗證和提交
- O1將打包好的塊分發給對等節點,不在線的節點可後續經過gossip協議從其餘節點同步
- 每一個對等節點將獨立地但以肯定性的方式驗證塊(簽名匹配、未被其餘交易形成無效)
- 無效的交易仍保留在不可變塊中,但對等節點會將其標記無效且不更新世界狀態
- 帳本更新後,對等節點能夠通知鏈接的應用程序已經處理了交易

更多資料

原文連接:http://tabalt.net/blog/consor...