第四章 區塊鏈基礎理論
◇區塊鏈的體系結構
狹義上來說,區塊鏈技術就是具體產品應用中的數據存儲思想和方式,類似區塊鏈在比特幣中的作用。可是,隨著區塊鏈技術和不同場景的深入結合,單獨說到區塊鏈,更多指的是一種數據公開透明、可追溯、不可篡改的產品架構設計。
基于區塊鏈的各種應用,或許會采用不同的機制,但從根本上來說,框架結構大同小異。現在,還沒有形成統一的分層體系,類比OSI(Open System Interconnection,開放式系統互聯)七層協議的標準,可以將區塊鏈系統分為六層,分別是:數據層、網絡層、共識層、激勵層、合約層和應用層。
1.數據層
數據層封裝了區塊鏈的底層數據存儲和加密技術,各節點存儲的本地區塊鏈副本都可以被看成三個級別的分層數據結構,即交易、區塊和鏈。為了保證數據的完整性和真實性,每個級別都需要不同的加密功能。
(1)交易。交易是區塊鏈的原子數據結構,通常由一組用戶或類似智能合約的自主對象創建,完成代幣從發送者到指定接收者的轉移。為了保證交易記錄的完整性,數據層主要分為哈希函數和非對稱加密功能。
①哈希函數。又稱為加密散列函數,能夠將任意長度的二進制值輸入映射到唯一固定長度的二進制值。哈希函數的計算具有不可逆性,不能根據輸出恢復輸入;同時,兩個不同輸入生成相同輸出的概率可以忽略不計。
②非對稱加密。非對稱加密功能主要指的是在交易過程中使用的公鑰和私鑰,網絡中的每個節點都會生成一對公鑰和私鑰。私鑰與數字簽名的功能有著密切關系,數字簽名通過他人無法偽造的字符串來證明交易發送方的身份。公鑰要通過數字簽名的驗證關,只有通過對應私鑰生成的數字簽名驗證后才會返回。另外,網絡中的節點,還會通過公鑰生成的字符串,作為區塊鏈上的永久地址。
(2)區塊。區塊是交易記錄的任意子集的聚合,要想創建,必須參與建立網絡共識過程的節點。例如,在比特幣網絡中,只有具有礦工節點,才有資格進行新區塊的創建。為了保證交易記錄的完整性,同時在共識節點的本地存儲中按照指定順序進行區塊間的排序,就要將哈希指針的數據字段保存在區塊的數據結構中。為了減少單個交易的存儲占比,增大容量,同時防止交易記錄被篡改,采用了Meke樹的結構。
(3)鏈。將上一區塊的哈希碼存儲到當前區塊的哈希指針處,就能建立起鏈式結構。當然,區塊網絡的形式可以是線性鏈表,也可以是有向無環圖。所謂鏈性鏈表就是,用一組任意地址的存儲單元存放線性表中的數據元素,相鄰元素在物理上雖然不需要相鄰,但也不能隨機存取。而有向無環圖是一種無回路的有向圖,對于一個非有向無環圖,從A點出發向B經C,然后回到A,就會形成一個環;之后,將從C到A的方向改為從A到C,就會出現一個有向無環圖。
2.網絡層
在“拜占庭環境”中,在確認區塊鏈網絡中的節點組織模式上,身份管理機制發揮著重要作用。在無權限限制的公開區塊鏈網絡中,節點可以自由加入網絡并激活網絡中的任何可用功能。如果沒有任何身份鑒別方案,區塊鏈網絡被組織為覆蓋PP網絡,但是不同的應用場景會對區塊鏈的“去中心化”和開放程度提出不同的要求,區塊鏈也會被分為公有鏈、私有鏈和聯盟鏈三大類。
(1)公有鏈。公有鏈“去中心化”程度最高,各種數字貨幣如比特幣、以太坊均為公有區塊鏈的代表。這種區塊鏈沒有把控的中心化機構或組織,任何人都能讀取鏈上的數據,參與交易和算力競爭。
(2)私有鏈。私有鏈的門檻最高,權限完全由某個組織或機構控制,數據的讀取和寫入,要受到組織規則的嚴格限定,多適用于特定機構的內部使用。私有鏈的中心化程度較高,簡直就是一個弱中心化或多中心化的系統;私有鏈的節點數量被嚴格控制,節點數量較少,交易時間更短,交易效率更高,算力競爭成本更低。
(3)聯盟鏈。聯盟鏈介于公有鏈和私有鏈之間,是一種實現了“部分去中心化”的系統。從某種意義上來說,聯盟鏈是開放程度更高的私有鏈,節點的參與和維護對象是線下聯盟,這些對象共同加入一個網絡并維護其運行。
3.共識層
共識層主要指的是不同區塊鏈網絡中使用的共識算法,比如,工作量證明、權益證明、拜占庭容錯算法。換句話說,區塊鏈獨特的共識協議是由“拜占庭將軍條件”下的網絡共識節點實現的。
在區塊鏈網絡中,“拜占庭將軍問題”會讓故障節點可能出現任意行為,不僅會誤導其他副本節點,還會產生更大的危害。簡單地將區塊的序列表示成區塊鏈的狀態,交易得到確認的區塊狀態就會發生變化。
共識協議因不同的區塊鏈網絡而存在差異。首先,公有鏈是完全開放的區塊鏈網絡,需要對參與共識的節點進行更嚴格的信息同步控制,多采用傳統拜占庭容錯協議提供的所需要的共識屬性。其次,PBFT(Practical Byzantine Fault Tolerance,實用拜占庭容錯算法)將算法的復雜度由指數級降低到多項式級,保證了活性和安全性。
4.激勵層
當網絡中存在兩條鏈時,不同的區塊鏈可以從對等節點接收或本地自提,鏈間的比較和擴展過程讓誠實節點只能采用候選區塊鏈中最長鏈條的提議。POW解決方案是共識協議的最主力部分,通過計算密集的方式,對新區塊的挖掘方式進行了重新定義。
破解工作量證明的方式是,節點按照規范構造區塊,使用哈希計算,找到滿足預條件的隨機值。
節點如果想贏得算力競賽,就要盡可能地提高散列表的查詢效率,需要更高的投入。但是,節點自愿參與共識過程,不可能承擔經濟損耗。為了網絡的正常運行,比特幣的共識協議中加入了激勵機制:創建新區塊的獎勵和交易費一旦挖掘出新區塊,系統就會產生相應數額的比特幣,比特幣也就憑著該種方式實現了“去中心化”發行。
5.合約層和應用層
合約層是區塊鏈技術的可編程實現的基礎,通過各類腳本、算法和智能合約,完成對區塊鏈技術的個人獨特改造;應用層指的是建立在底層技術上的區塊鏈的不同應用場景和案例實現。
一般來說,對于區塊鏈相關應用的研究可以分為兩類:一類是在現有區塊鏈協議的框架下對共識協議的研究,另一類是在區塊鏈共識層之上提供服務。
智能合約的概念出現在比特幣之前,首次由尼克薩博在1996年提出,指的是將條款用計算機語言的形式記錄的智能合同,達到預先設定的條件時,就能自動執行相應的合同條款,以太坊將智能合約和區塊鏈結合在一起,就能為用戶提供新的“去中心化”平臺。
- 零基礎學Visual C++第3版
- 深入理解Bootstrap
- Java 開發從入門到精通(第2版)
- Windows Server 2012 Unified Remote Access Planning and Deployment
- 假如C語言是我發明的:講給孩子聽的大師編程課
- GeoServer Beginner's Guide(Second Edition)
- 程序員修煉之道:通向務實的最高境界(第2版)
- 領域驅動設計:軟件核心復雜性應對之道(修訂版)
- Learning Apache Karaf
- Spring Boot+Vue全棧開發實戰
- 搞定J2EE:Struts+Spring+Hibernate整合詳解與典型案例
- C語言程序設計習題與實驗指導
- Kotlin Programming By Example
- 算法圖解
- Android編程權威指南(第4版)