對網路許可權的需求日益增加
有許可權的網路是透過已知白名單組織來執行驗證與非驗證節點的,由網路發行機關來授予交易者一個識別身份。發行機關根據網路的目的來確定適當的訪問許可權,而這種許可權需要進行身份識別,然後才能在網路進行交易。這一網路能夠公開執行,並且很容易就能融入到移動應用。它也能完全私下執行,受邀參與者只有透過驗證,才能獲悉其情況。因為Hyperledger構架的設計符合各種目的,能夠允許各網路之間互相訪問,而且其協議也能夠滿足各類使用要求,並且還設有不同級別的許可權。
隱私及機密的重要性
我們相信任何區塊鏈構架都有一個基本要求,那就是網路上任何一方的身份及行為模式,都不能允許未經授權的人透過賬本來打探情況。我們也希望能夠保證區塊鏈使用者的業務邏輯及其他交易引數的機密性,做到除了合約涉及的利益相關方或交易中的資產,沒有人能夠訪問這些資料。
行業用例
我們編寫了一套區塊鏈初步要求,這些對接下來介紹的使用案例來說至關重要。
(注:下述用例能推動指導架構及測試驅動的開發。這些案例雖然還在發展中,但是所有參與者都應該認同其內容及技術層次的優先順序。如果您覺得哪裡不盡人意,就可以提出進行改變。請不要超過四個抽象用例,最好是三個。)
商務合同
商務合同能夠透過編碼,使雙方或更多參與者自動執行合約條款,並且保證誠信。雖然區塊鏈上的資訊本質上是公開的,但是商對商合約要求具備隱私保護的機制,來保護敏感的商業資訊,防止資訊洩露給同樣能夠訪問賬本的外部人員。
雖然說保密協議對商業案例來說很重要,但是也有很多場合需要也應該做到合約公開,從而保證賬本上所有人員都能輕鬆獲取訊息:比如,用來確定報價以供競標的賬本。這種合約就需要標準化,這樣競標人就可以很快獲取資訊。
資產存管
金融證券之類的資產必須在區塊鏈網路上實現去中心化,這樣所有同種資產的利益相關方就能直接訪問每一資產,從而發起交易,獲取相關資訊,而不再需要透過層層中間人來進行了。交易基本實現實時結算,而且也必須保證所有利益相關方能夠實時掌握資產情況。對任何資產種類,利益相關方都應有權增加商務規則,這樣也能透過自動化邏輯應用來減少運營成本。創造資產的人必須像用例保證的那樣,實現資產及相關交易規則保密或者公開。
供應鏈
區塊鏈框架必須保證每一位供應鏈網路中的參與者都能夠:輸入並追蹤原材料來源;記錄部件生產的遙測資料;追蹤航運商品的出處;保證包括成品生產、貯存、銷售及後續事宜在內的所有記錄都不可改變。除了之前描述過的商務合約及資產存管模式,供應鏈這一用例更多強調的是其深度搜尋性,保證可以在過去層層交易中追溯所需記錄。其核心是為每一個從其他元件品中製造出來的商品建立出處。
特色要求
下面提到的特色要求以健全產業的用例為基礎,推動了Hyperledger構架的開發。這些要求包括身份識別與可稽覈性、私下交易、保密合約、模組共識、效能績效、可擴充套件性、鏈上程式碼( chaincode)以及智慧合約。
身份識別與可稽覈性
交易的隱私性固然重要,但是區塊鏈商業用途也要遵守--定的規章制度,使監管方能夠訪問調查交易記錄。事後(有時得好幾年後)交易一方必須提供身份識別以及資產所有權,在沒有機制的情況下,透過身份識別來確定當事人身份以及其在賬本上的活動。
於是Hyperledger協議順勢而生,它在序號產生器關登記了一個加密證書,從而鎖定使用者的機密資料。序號產生器關能夠釋出並撤銷網路參與者的身份驗證。針對每一個身份,協議都會生成一個秘鑰,供成員在網路上進行交易,而且不會透露交易方的身份,保障網路隱私。
私下交易及保密合約
如果交易模式能夠進行公開觀察與分析,那麼共享賬本就會洩露商業關係的細節,而這些細節本不應透露給競爭者的。供應方或買方的圈子本來就小,支援雙方貿易的系統就更不應該洩露任何一方的交易情況。因此,運用於商業活動的區塊鏈就必須提供一個機制,來保證未授權的第三方不能獲悉有關身份、交易模式、以及保密合約等條款。
Hyperledger可以透過加密交易來保證其內容的機密性,只有利益相關方能夠對其進行解密並執行。此外,業務邏輯(透過智慧合約來實現)也做了加密處理來確保安全(如果利益相關方要求機密的話),並且只有在執行的時候才能載入、破解。關於這一點,會在之後架構部分詳細闡明。
模組共識
由於不同行業及領域有各自的網路要執行,所以不同的網路也要配置不同的共識演算法來滿足不同的使用要求。Hyperledger協議下的共識必須運用可插入式演算法,使使用者自行在配置中自行選擇共識演算法。Hyperledger協議的首次發行將提供拜占庭容錯演算法(BFT),這種演算法採用的是實用拜占庭容錯演算法(PBFT)協議。我們期待今後社羣中能有更多人分享其他共識演算法模型。
邏輯=鏈上程式碼=智慧合約
區塊鏈邏輯,或者我們常說的“智慧合約”,是各方之間自動執行的協議,其中所有相關條款都由程式碼編成,能夠進行自動結算,今後透過簽名或其他觸發事件來執行。在Hyperledger專案中,我們把它叫做“鏈上程式碼”(chaincode) , 透過鏈上程式碼來建立並區分割槽塊鏈邏輯及其書面合約。(這 個術語還在檢測中,可能會有所改變。)
鏈上程式碼(chaincode)概念比智慧合約還要再寬泛一些,智慧合約這一概念是由NickSzabo提出來的。鏈上程式碼能夠透過任何主流程式語言進行編寫,並且在Hyperledger的上下文背景層內執行。鏈上程式碼能夠定義智慧合約模組語言(類似Velocity或者Jade),限制環境函式的執行以及其運算靈活度,從而滿足法律合約的要求。
效能績效以及可擴充套件性
如果從經濟角度來認識區塊鏈框架的網路應用,那麼在設計過程中就必須把長期的業績考慮進去。一個賬本或一套賬本必須能夠持續運作100多年,並且在使用者可獲取的時效內,允許客戶使用其發掘、搜尋、身份識別及其他功能。不過隨著時間的推移,指定網路的節點數量及交易人員也會越來越多,因此,其框架還必須在保證效能表現的前提下,解決這些問題。
架構
下面圖2將為您展示Hyperledger所參考的架構,包括三大類:會員制、區塊鏈、鏈上程式碼。這些都是邏輯結構,而不是對獨立步驟、地址空間或者(虛擬)機器中分割槽元件的物理描述。
其中有些部分會從頭建起,有的會採用現有的開原始碼,還有一些則與現有服務結合從而實現所需功能。
會員制服務負責管理的是網路上的身份識別、隱私與機密。參與者透過註冊來獲取身份,然後屬性授權機構才能發放金鑰來進行交易。聲譽管理器能夠使審計人員瀏覽某參與者的交易情況,如果審計人員已經獲得參與者授予的適當訪問許可權的話。
區塊鏈服務負責管理分散式賬本,透過在超文字傳輸協議2.0建立的點對點協議進行。資料結構經過最佳化能夠有效維護眾參與者重複的整體狀態。不同的共識演算法或將嵌入每一個配置中,以保證高度一致性(透過拜占庭容錯演算法來處理錯誤,透過崩潰容忍來處理延誤與中斷,或藉助工作量證明方案來應對審查)。
鏈上程式碼(Chaincode)服務負責提供安全又輕便的沙盒裝載路徑,供鏈上程式碼執行驗證節點。整個環境是一個封鎖且安全的容器,內含一個 簽署過的圖片庫,包括安全的作業系統及鏈上程式碼語言,以及Golang (準備期)、Java (計劃期)、Node. js (計劃期)等軟體開發工具包組圖與執行環境。如果有需要的話,也能新增其他程式語言。
會員制
區塊鏈
分散式賬本運用RocksDB來長久儲存資料集,並且為了符合其三大屬性,它還建立了一個內部資料結構來反映狀態。大型檔案(文件等)儲存在區塊鏈賬本之外的貯存庫中,而其雜湊值則能夠作為交易的一部分存放在鏈內,這是為了保證檔案的完整性。
Hyperledger能夠支援兩種交易:程式碼部署交易以及程式碼呼叫交易。程式碼部署交易能夠執行一條鏈上程式碼的提交、更新或者終止等命令,其驗證節點必須保護程式碼及其執行環境的真實性與完整性。相比之下,程式碼呼叫交易則是一種用來執行鏈E程式碼函式的應用程式介面,其過程類似於運用統--資源識別符號來呼叫JEE的小型服務程式。值得注意的是,其中每一個鏈上程式碼都負責維護自己的狀態,而且函式呼叫是改變鏈上程式碼狀態的一個常見辦法。
共識管理器是一個抽象概念,它定義了共識演算法與其他Hyperledger元件之間的介面。共識管理器接收交易,根據演算法來決定如何組織以及何時執行這些交易。交易成功執行後就會在賬本上反映變化。
Hyperledger執行的是拜占庭協議,其在容錯與擴充套件性方面都有強大優勢。
Event Hub是一個去中心化網路,它的屬性很複雜,因為同一事件可能會多次出現,而且每次都會覆蓋到每個對等節點。回撥函式能夠終止接收同一事件的多次呼叫,這樣一來,對等節點(最好是非驗證的本機節點)就能夠管理應用程式相關的釋出或訂閱事件了。只要條件滿足,對等節點就發動事件,順序不分先後。這些事件不會永遠存在,所以應用程式如果有需要就得及時捕捉。
鏈上程式碼( chaincode )
鏈上程式碼交易是有時間限定的,並且在鏈上程式碼裝置過程中是按特定形式裝配的,這和資料庫呼叫或網站服務呼叫類似。如果超過交易時限,那麼就按出錯處理,不會給賬本狀態帶去任何改變。如果呼叫的函式有相同保密範圍限制的話,一個鏈上程式碼函式就能夠呼叫另一個鏈上程式碼函式一也就是 說,如果兩個機密鏈上程式碼之間,有相同的一組驗證器,那麼它們之間就能互相呼叫。
新區塊進行交易時,會維持區塊鏈上最後區塊的整體狀態差量。如果當前區塊達到共識,那麼變數就會提交到資料庫,之後整體狀態的區塊數量就會增加1個。如果節點沒有達到共識,那麼差量就會不會算入,資料庫也不會進行修改。
應用程式設計介面
Hyperledger包括了REST、JSON RPC應用程式介面、事件以及連線網路的應用程式軟體開發工具包。典型的一點是,應用程式與一個對等節點進行互動需要透過某種形式來驗證該個體的正當許可權,其中客戶的資訊是有其身份識別簽名的,而且要經過節點的核實。
Hyperledger有--套命令列介面(CLI)來管理執行網路。這套命令列介面也可以用於鏈上程式碼測試過程中。REST應用程式介面以及軟體開發工具包(SDK)是建立在JSON-RPC應用程式介面上的,這也是現在最完整的應用程式介面層。軟體開發工具包則能夠適用於Golang, JavaScript, Java 等語言中,如果有需要,也可以新增其他程式語言。
這一應用程式介面能夠分成以下幾類: :
· 身份識別——透過登記來獲得或撤銷認證
· 定址——定位並追蹤交易來源
· 交易一一賬本上的執行單元
· 鏈上程式碼——在區塊鏈上執行的程式
· 區塊鏈——賬本的內容
· 網路——區塊鏈網路的資訊
· 儲存庫一一檔案或文件的外部儲存
· 事件一一區塊鏈上的訂閱或發行事件
應用模型
網路技術
有三種潛在配置模型:雲伺服器託管的單一網路、雲伺服器託管的多個網路,以及參與者託管的內聯網。
雲伺服器託管的單一網路是最簡易、最高效的拓撲結構,其中每一位參與者都有一組對等節點,包括驗證節點。儘管網路在雲環境下執行並且託管給物理硬體廠商,參與者還是能夠根據合約來控制運算資源,從而在中心化環境中實現去中心化配置。
雲伺服器託管的多個網路能夠使參與者透過雲供應商管理對等節點,如果這些節點能夠在超文字傳輸協議(Hyper ledgerTTP)下互相連線的話。
參與者託管的內聯網透過超文字傳輸協議來使用參與者所有的網路。
結論
Hyperledger的任務是將區塊鏈技術引入大眾市場。回顧了可行的區塊鏈解決方案,也瞭解了業界領先者及技術推廣者給出的相關用例後,我們相信區塊鏈將會成為至關重要的技術模型,推動眾多工業與企業進行革新。
我們注意到,業內目前急需-套為企業打造的區塊鏈框架,做到既高效,又可擴充套件,並且能夠為隱私與機密相關的需求提供企業級的支援。我們也發現了各種不同的用例,而每一用例可能需要不同的區塊鏈底層實現。
為了全面發掘區塊鏈技術的潛能,並且開創一套能滿足各種使用需求的標準,我們設計了靈活且可延伸的Hyperledger構架。此外,我們還在引導Hyper ledger協議的預設實現,其中涉及了各種電腦科學學科的先進成果。
更多區塊鏈資訊:www.qukuaiwang.com.cn/news