比特幣做爲區塊鏈的起源,創造性的解決了開放網絡上的分佈式共識問題,爲世界呈現了一種基於分佈式系統及密碼學的全新技術架構。後繼者以太坊很好的將通用計算融合進這個架構,讓人們看到了智能合約的非凡潛力。而許可鏈提出了一個有趣的問題:若是咱們從新在節點有身份的許可網絡中評估這個新架構會獲得什麼呢?html
許可鏈能夠很好的知足企業級應用的性能需求。身份管理以及權限控制機制是許可鏈的核心組件。在開放網絡中節點能夠自由的加入和退出,相反在許可網絡中,只有得到特定許可的節點才能接入網絡,與網絡中的其它節點經過可驗證來源的消息交互。准入機制的存在杜絕了女巫攻擊,使得傳統共識算法有了用武之地,使交易處理的延遲和吞吐量得到質的飛躍。git
在開放網絡上,節點配置及網絡條件的差別極大。爲了最大程度的下降使用門檻以及去中心化,公有鏈設計不得不參照最低標準的節點配置及部署環境進行設計,設計空間受到極大的限制。在許可網絡中節點性能更好,配置更加一致,一個適當的架構應該利用這一點進一步提高系統處理能力。github
對於分佈式系統,可用性與一致性不可兼得。公有鏈因爲技術與治理的高度去中心化,在緊急情況出現時缺少高效的協調及干預手段。爲繞過這個缺點,公有鏈在設計時以可用性爲先,犧牲了在網絡分區狀況下的一致性保證。企業級應用中用戶具備更好的協調機制,在系統不可用時的干預方法相對高效,同時對一致性又有較強要求,與公有鏈的設計偏好有較大的區別。算法
隨着使用區塊鏈應用的用戶數量增長,區塊鏈必須水平擴展以支撐愈來愈大的交易處理和存儲須要。保持系統安全性不變的水平擴展能力是區塊鏈的必備屬性,雖然咱們目前尚未看到作到這一點的公有鏈,可是許可鏈已經能夠給出不一樣的答案。安全
區塊鏈上數據對全部共識節點公開,基於假名的隱私方案並不能徹底知足企業級應用的需求。另外一方面,各類密碼學隱私方案的安全性還沒有獲得徹底驗證,性能離實用也還有距離。咱們須要一個不完美但如今就能用的隱私方案,以及一個模塊化的能夠輕鬆融合將來隱私技術的區塊鏈架構。服務器
企業級應用場景業務邏輯繁雜,單一的通用設計只可以知足最低需求,很難將應用潛力所有挖掘。爲了最大化應用區塊鏈技術帶來的效率提高,區塊鏈軟件必須可定製,以適應各類不一樣的部署和集成環境。網絡
隨着區塊鏈技術的不斷普及,獨立的區塊鏈網絡必然不斷出現,區塊鏈網絡之間進行交互,造成區塊鏈網絡的網絡。合理的區塊鏈設計須要提供跨鏈的基礎,才能讓其上運行的應用在將來產生更大的價值。數據結構
基於這些理念,咱們設計了 CITA,一個面向企業級應用的支持智能合約的區塊鏈框架。CITA 能夠爲企業級區塊鏈應用提供一個穩固、高效、靈活、可適應將來的運行平臺。架構
水平擴展能力是企業級應用成功的關鍵,也偏偏是現有區塊鏈技術最突出的問題。不管區塊鏈網絡中節點數量多少,整個網絡的處理能力都只至關於單個節點的處理能力。要提高整個網絡的處理能力只有兩個選擇:框架
而 CITA 則是利用微服務架構來提升單(邏輯)節點處理能力。經過微服務架構(見圖1),將單個節點按照不一樣的功能解構爲一組鬆耦合微服務,微服務之間經過消息總線進行通信。在 CITA 中,「節點」是一個邏輯概念,有多是一臺服務器(上面運行一組微服務),也有多是一組服務器組成的集羣。
基於微服務架構,CITA 很是容易水平擴展,在系統負載上升時,能夠經過增長服務器的方式增長節點的處理能力。對於系統中的熱點帳戶,甚至可使用專門的服務器提供服務。咱們把這種水平擴展方式稱爲內部分片(Internal Sharding)。
CITA 節點對服務器硬件要求低,交易處理能夠被分散到多臺普通 PC 服務器上,無需專門硬件支持便可應對企業級場景。在節點角色多樣化的場景中,不一樣節點亦可運行不一樣的微服務組合,實現不一樣的角色功能。
業務優化與系統深度集成在 CITA 中都能輕鬆實現。微服務之間經過消息進行通信,耦合程度低。只要可以解析和返回相關的消息,用戶可以用任意語言實現所需的服務實現對節點某個組件的替換。外部系統也能夠直接鏈接到消息總線上,實時獲取節點運行時消息,輕鬆實現深度集成。
區塊鏈節點經過共識算法造成一致的交易歷史記錄。經過共識服務,有效的交易被選擇出來,並造成全局的全序或者半序關係,爲交易處理提供基礎。交易經過可證數據結構凝結成不可篡改的歷史,在被執行器處理以後造成的數據咱們稱之爲視圖(View),記錄用戶帳戶餘額的帳本便是視圖的一種。
不一樣的區塊鏈設計對於視圖是否須要共識有不一樣的態度。UTXO 集合在 Bitcoin 區塊中並沒有體現,相反由帳戶集合造成的「世界狀態」的特徵值會被記錄在 Ethereum/Fabric 區塊中。對視圖數據進行共識,有利於發現交易處理中的問題;將視圖的特徵值固化在區塊中,有利於節點間視圖數據的交換,是輕節點驗證和跨鏈協議的重要基礎。CITA 的區塊數據結構設計兼顧了視圖共識的須要。
做爲一種多參與方的共享服務,保證使用者發出的交易可以在必定的時間內被處理是一個重要的設計目標,咱們稱之爲反屏蔽。在企業級應用場景中,用戶的交易不能及時被處理可能會給用戶形成巨大損失,例如在規定時間內沒法向智能合約補充保證金致使強行平倉。因爲出塊節點擁有交易的選擇和排序權,出塊節點必須以必定的規則輪換,以保證單一節點沒法長時間將某些特定的交易排除在外。CITA 使用出塊節點主動輪換策略以知足反屏蔽的要求。默認的順序輪換可以知足通常應用的須要,同時也提供隨機輪換做爲擴展模塊。
在產生新區塊後,CITA 默認使用 CITA-BFT 算法進行共識。CITA-BFT 是一種專爲區塊鏈設計的高性能共識算法。CITA-BFT 在普遍綜合分佈式系統研究領域的最新成果 PBFT,Tendermint 的基礎上,針對企業級區塊鏈的網絡結構和數據結構進行了深度的改造和優化,在保證安全性的基礎上(可容忍不超過節點總數 1/3 的拜占庭節點),實現了極高的吞吐量。
CITA-BFT 能夠方便的被替換成任何更合適的共識算法,只要實現共識服務標準接口,替換算法能夠用任意語言實現。須要注意的是,共識算法替換每每涉及網絡、存儲等多個方面,很難被完美抽象,所以共識算法的替換可能不只僅須要共識服務的替換,還須要同步對其餘微服務進行定製。
區塊鏈節點的最主要職責包括點對點網絡交互、共識、交易處理以及數據存儲四個方面。節點經過共識算法,在系統中造成對交易排序的全局共識,再按照共識後的順序對交易進行逐個處理。只要處理過程能保證肯定性,全部節點最後都能達到一致的狀態,產生相同的本地數據。
在當前的區塊鏈設計中,共識與交易處理耦合程度較高,共識的性能受到交易處理能力的影響。CITA 將共識與交易處理解耦爲獨立的微服務,共識服務只負責交易排序,並不關心交易內容,交易處理服務只負責對排好順序的交易進行處理。此時共識過程能夠先於交易處理完成,交易處理服務能夠異步執行。異步交易處理技術不只使 CITA 具備更好的共識性能,還帶來了更有彈性的交易處理能力,交易負荷能夠被更均勻的分攤到一段時間內(見圖2)。
因爲交易異步處理,在共識前只能對交易進行有限的檢查,例如簽名驗證。無效的交易有可能經過共識進入交易處理服務,產生必定程度的垃圾數據。在有必要的狀況下,能夠經過 CITA 的交易配額機制及垃圾清理技術解決該問題。
相對於交易列表,應用更關心的數據是視圖。執行器以排好序的交易爲輸入,在處理過程當中相應的更新對應的視圖。即便處理的是相同的交易列表,不一樣的執行器能夠產生不一樣的視圖。CITA 默認支持以下執行器:
視圖狀態則是執行器執行過程當中讀寫的對象,不一樣的視圖狀態模型使用不一樣的基本數據單元,常見的有 UTXO 及帳戶兩種。在 UTXO 模型中,由 UTXO 構成帳本視圖,每一個交易在銷燬舊有 UTXO 的同時創造新的 UTXO;在帳戶模型中,由帳戶構成世界狀態視圖,交易在處理過程當中能夠讀寫多個帳戶。
UTXO 模型包含交易先後記帳單位數量不變約束,引入了業務邏輯,放棄了必定的通用性;將帳戶狀態離散保存在多個 UTXO 中,得到了有限的並行能力提高,也帶來了分割/合併 UTXO 的複雜度。帳戶模型相對更加簡單,實現通用任務更有效率。在企業級應用中每每存在身份驗證與受權的須要,這些服務所依賴的數據能夠天然的與帳戶關聯。CITA 默認支持帳戶模型。用戶能夠自定義包括 UTXO 在內的其餘狀態模型。
交易會被複制到多個節點進行執行和存儲。節點的計算資源(包括 CPU、磁盤空間、帶寬等)有限,爲全部用戶共享,若是某個用戶無心或是有意提交了太重的執行任務會致使節點負荷太重失去響應。所以支持智能合約的區塊鏈須要恰當的機制來限制資源使用。在 CITA 中咱們將資源的度量稱爲計算配額,相應的發行和消耗機制稱爲配額管理。配額消耗和發行策略均可以由具備權限的用戶制定。
不一樣的執行器具備不一樣的配額消耗機制。例如,NOOP 執行器按照交易數據大小計算配額消耗,Native 執行器隨着真實世界的時鐘跳動計算消耗,而 EVM 自帶細粒度的 GAS 計算機制,按照指令複雜度計算配額消耗。在 CITA 中咱們能夠爲區塊(中的視圖)或是用戶設置配額消耗上限,以此將控制單個區塊的資源消耗。
與公有鏈不一樣,許可鏈中每每無需發行代幣以提供鏈上的共識激勵,所以咱們須要一種替代機制發放計算配額以補充用戶的配額消耗。CITA 中的配額發行策略很是靈活,不只默認支持包括週期性恢復在內的簡單策略,也能夠根據須要自定義複雜策略。
區塊鏈是一種聯機交易處理系統(OLTP),用戶廣播交易,節點收到交易以此做爲輸入進行處理。區塊鏈交易處理有多種各有利弊的方案,但目前的區塊鏈系統大多使用單一固定方案,難以知足不一樣場景的不一樣需求。經過交易通道技術,CITA 實現了多執行策略支持與基本的並行處理。
用戶在配置 CITA 區塊鏈網絡時能夠設定多個視圖,視圖相互獨立。每一個視圖均可以設定對應的交易執行器和狀態存儲模型,並將交易執行器註冊到交易路由。交易在通過共識服務排序後,由交易路由分配到不一樣的執行器處理(見圖3)。不一樣視圖處理的交易子集能夠有交集,也能夠沒有交集。
經過靈活的視圖配置,CITA 能夠全面的支持各類應用場景。例如配置 NOOP 執行器的視圖可以很好的支持數據存證的場景,避免沒必要要的執行開銷;Native 執行器與帳戶模型的組合適合業務邏輯比較固定的場景,同時可以得到很好的性能;EVM執行器與帳戶模型組合適用於業務邏輯靈活多變的場景。
因爲使用獨立的狀態存儲,CITA 支持對不一樣的視圖使用獨立的交易處理服務並行處理。在配置了多個視圖的 CITA 區塊鏈網絡中,系統處理能力幾乎與能夠與視圖數量成正比。
智能合約執行與隱私保護有本質的矛盾。執行和驗證智能合約要求全部共識節點可以讀取交易中的數據,而隱私保護要求無關共識節點不能看到交易中的數據。
基於假名(psedonymous)的隱私保護,只能在必定程度上隱藏交易的發起方和接收方, 經過數據分析手段仍是能得到交易方信息。在使用臨時私鑰對交易加密的方案中,共識節點依然須要對交易進行解密才能執行交易,交易對共識節點沒有隱私。在許多應用場景中,共識節點相互之間可能存在競爭關係,沒法採用這樣的方案。
最新的密碼學技術,例如零知識證實以及同態加密,能夠幫助咱們作到在不知道交易數據的狀況下執行交易。可是這些技術並不成熟,性能難以實用,安全性有待時間檢驗。
CITA 1.0 經過交易局部執行技術,實現了一種實用的隱私方案。隱私交易提交後,先在本地進行加密,加密後的交易經過點對點隱私交易傳輸協議被傳送給擁有解密私鑰的節點,同時交易哈希被打包進入區塊鏈。隱私交易數據只在擁有解密私鑰的相關節點上保存,相關節點先解密再執行交易,交易數據不會發送給無關節點,徹底杜絕了任何信息泄漏的可能。
區塊鏈中的參與方可分爲節點和用戶兩類。節點是區塊鏈服務的提供者,用戶是區塊鏈服務的消費者。
CITA 爲節點身份驗證提供了標準接口,同時對節點接入進行更嚴格的控制。對於身份驗證失敗的節點,即便該節點可以在網絡層與其餘 CITA 節點聯通,CITA 節點也會拒絕與其創建通信會話,避免信息泄漏。
在企業應用環境中,可能已經存在中心化用戶身份驗證服務,例如 LDAP 或是 PKI 證書體系。CITA 爲用戶身份驗證提供了標準接口,可以方便的與企業內已有的身份驗證服務集成。
在基於非對稱加密的身份驗證方案中,用戶私鑰丟失是一個難以處理的問題。CITA 的身份驗證服務支持更復雜的身份管理策略,在用戶私鑰丟失或是按期更新時,具備私鑰更新權限的操做者能夠根據用戶申請使用新的私鑰替換舊的私鑰。
CITA 實現了基於角色的權限控制(Role-based access control)以知足企業級應用的須要。CITA 爲可供用戶操做的資源進行了細粒度的劃分和權限定義,並容許用戶自定義角色,用戶能夠經過角色方便的組織用戶、管理資源權限,使權限分配準確匹配企業的組織架構。同時權限與角色數據和變動歷史都會被保存在區塊鏈上,知足往後審計須要。
區塊鏈是反映人類共識的工具。在正常狀況下,區塊鏈能夠促成自動化協做,在非正常狀況下可能產生錯誤的視圖數據,此時能夠根據沒法篡改的交易歷史做出修正決策。做爲一種由對等節點構成的分佈式系統,區塊鏈在技術架構上不存在中心點,在治理層面則存在無中心,多中心甚至單中心多種可能。CITA 以交易歷史不可修改爲設計原則,支持各類治理機構以及視圖訂正。
在 CITA 中用戶能夠設定超級管理員角色,得益於靈活的身份驗證服務設計,超級管理員角色能夠有任意的身份驗證邏輯。在單中心的治理結構下該角色能夠由單一核心用戶控制,在多中心的治理結構下,核心用戶能夠造成相似委員會的治理機構聯合控制(例如經過多重簽名)超級管理員角色。
中心化治理角色可以經過鏈外通道協商造成一致行動決議,加強系統在緊急狀況下的應對能力。在操做錯誤、軟件錯誤或是硬件錯誤等問題發生時,系統可能進入緊急狀態。咱們能夠將緊急狀態分爲交易可恢復(Transaction Recoverable)和消息可修復(Message Recoverable)兩類。
因爲錯誤的交易或者是有 bug 的智能合約生成了錯誤的視圖數據,可是節點依然可以處理交易,此時系統處於交易可恢復緊急狀態。在這種狀況下,超級管理員能夠構造修訂交易快速應對。節點在處理修訂交易時一樣會先將該交易打包入塊,再執行交易,所以全部修訂交易都將被記錄在歷史中,爲操做審計提供支持。
消息可修復緊急狀態發生時,節點沒法再正常處理交易並打包,共識服務停滯,可是點對點網絡依然可以正常工做。此時超級管理員能夠經過 CITA 提供的管理員工具構造特殊消息並廣播,節點收到消息並驗證發送者身份後將直接處理,無需共識。
爲了知足企業級應用的須要,咱們提出了一個支持智能合約的區塊鏈框架 CITA。CITA 將區塊鏈節點的必要功能解耦爲微服務,共識、交易處理、點對點網絡協議、身份驗證與受權等組件之間經過消息總線交換信息相互協做,爲應用提供服務。CITA 的設計充分考慮了通用性與將來擴展的可能,經過配置和定製相應的服務,CITA 可以知足企業級用戶的所有須要。