王錫亮,劉學楓,趙淦森,王欣明*,周子衡 ,莫澤楓
(1.華南師范大學 計算機學院,廣東 廣州 510631;2.唯鏈基金會,新加坡 018936;3.華南師范大學 數學學院,廣東 廣州 510631)
自2008年被首次提出后[1],區塊鏈的概念從加密數字貨幣逐漸延伸到各行各業的創新應用里。隨著2016年比特幣在資本市場市值趨于100億美元的規模[2],大眾對區塊鏈的認識亦從比特幣的底層技術——一個由對等網絡中的節點共同維護和擴展的共享賬本轉變成為“區塊鏈+領域”的應用發展模式。認知的轉變過程說明了區塊鏈技術成為全球技術創新的競爭高地。
區塊鏈是一種集成式創新,其涉及的技術包括對等網絡、拜占庭容錯、智能合約以及分布式共識算法等。基于這種集成式的技術堆疊,區塊鏈實現了一個可以在數字空間里達成一致信任的去中心化系統。其核心思想是在對等網絡的去中心化特性下,通過節點之間達成一致性共識,并共同維護一個按時間順序將數據區塊以鏈條的方式首尾相連成鏈的數據鏈條。數據鏈條上的每一個區塊以數字簽名[3]等數據校驗方式防止數據篡改和偽造。由此,區塊鏈實現了一個去中心化共享賬本。這種新的思路可以解決傳統中心化系統所普遍依賴中央權威、信任和共識的成本高、可靠性差、安全性低等問題,對于傳統社會組織和運作方式是一種顛覆性的變革和挑戰。
區塊鏈這種具有普適性的技術架構,可以很容易擴展延伸到其他應用場景里。事實上,根據目前區塊鏈的發展進展,區塊鏈技術可以分為三個階段[4],即以可編程數字加密貨幣體系為主要特征的區塊鏈1.0模式,這個階段的區塊鏈可擴展性稍微欠缺且功能相對單一,主要的能力體現在價值交換上,比如比特幣、數字資產、在線支付等[5-6]。隨著智能合約的興起,通過在區塊鏈上運行和存儲計算機程序代碼,實現了數字化合約的可信存儲和執行,使得區塊鏈技術進入2.0模式。金融領域的區塊鏈應用層出不窮,標志著區塊鏈技術從加密數字貨幣這單一的功能逐漸擴展到其他金融領域,進而實現了現實世界中業務系統數字化的協同工作,讓區塊鏈技術得以在包括股票、清算、私募股權等眾多金融領域嶄露頭角[7];區塊鏈3.0模式則強調區塊鏈向行業的滲透,區塊鏈技術陸續被嘗試應用到物聯網[8]、隱私保護[9]、商品防偽等其他領域中來,應用范圍涵蓋了整個社會的方方面面。區塊鏈技術的去中心化、去信任特點,能夠從根本上減少組織形態的摩擦并且提高協作效率,從而在大規模協作領域里更好地提升個人或組織的工作效率。
區塊鏈技術亦有其面臨的局限與問題。首先是區塊鏈擴展性,由于區塊大小具有容量限制,且共識過程需要一定的時間進行,因此交易的吞吐量和區塊鏈的容量是影響區塊鏈大規模應用的障礙。其次在安全方面,目前的工作量證明共識算法則需要至少六個區塊的確認,才能在概率上確保交易的安全性[1],因此區塊鏈的實時性較差。另外,如果參與共識的算力聯合起來超過總算力51%時,可以很容易發起惡意分叉或者雙重支付的攻擊[10]。在隱私保護方面,目前可以通過一定的技術手段獲得網絡中節點IP的相關信息,可以通過追溯交易對其進行聚類得到很多有價值的信息,而且由于用戶的使用不當也會造成DAPP的隱私泄露,以上種種都反映了區塊鏈的隱私保護問題仍亟待加強[11]。
分層系統架構的最好例子莫過于互聯網OSI模型[12],而區塊鏈系統本身即是一個類似OSI模型的龐大且復雜的體系結構。從軟件架構的角度而言,區塊鏈系統可以分為數據層、網絡層、共識層、激勵層、合約層以及應用層(如圖1所示)。數據層是區塊鏈的數據表示及數據操作規則;網絡層則管理著區塊鏈網絡中節點間的通信聯系;共識層則是描述節點間達成一致性的一組協議;激勵層掌握著整個系統正常運作的經濟刺激;合約層則通過虛擬機及可編程語言為區塊鏈提供開發環境;應用層則是基于整個區塊鏈底層體系結構所能實現的功能系統集合。

圖1 區塊鏈參考架構
數據層主要負責區塊鏈底層數據的結構和存儲模式。區塊鏈通過鏈式結構按時間戳的先后順序將區塊關聯起來,區塊之間再通過一個哈希校驗碼來保證鏈上數據的完整性和不可篡改性。區塊結構主要分為區塊頭和區塊體,主要用于存儲交易數據相關的哈希值和區塊鏈網絡重要參數。交易數據可以通過Merkle樹結構進行組織,利用其提供的Merkle證明可以保證交易數據的不可篡改性,比特幣中利用Merkle樹結構還提供了簡單支付驗證(SPV)功能[1]。
網絡層則包括分布式對等網絡的組網機制、區塊廣播機制和數據驗證機制等部分。網絡層是區塊鏈系統節點發現、共識及數據同步的關鍵。區塊鏈通過對等網絡實現去中心化的分布式自治網絡,網絡中的每個節點都需要承擔網絡路由、節點發現和區塊數據傳輸、驗證的功能。當網絡中有新的區塊產生時,節點間會廣播這個新區塊,除產生該區塊的節點外,所有的節點都需要對該區塊及其內的交易進行驗證。
共識層是指區塊鏈對等網絡中達成一致性所運行的算法的集合,主要負責實現全網所有節點對交易和數據達成一致。共識層所使用的算法主要是為了應對拜占庭容錯[13]及女巫攻擊[14]。共識算法主要分為概率性算法和確定性算法。確定性算法是指一旦達成對某個結果的共識時,該結果就不可逆轉,共識即結果,如PBFT[15];而概率性算法則是指當前的共識結果暫不可靠,需要一定的時間或達成某種條件后,共識結果被推翻的概率越來越小,最終在數學上成為最終結果,如PoW。
激勵層主要負責區塊鏈代幣的發行和分配機制。區塊鏈通過將社會生活的經濟因素引入到計算機技術體系中,使得區塊鏈的共識過程和去中心化特性得以實現。因為達成共識的過程越分散,其效率越低,但安全性和可靠性高,整個系統也越穩定;相反,達成共識的過程越集中,其效率越高,但也越容易出現中心權威。而通過在區塊產生時賦予節點利益,可確保節點有利可圖,因而能吸引越多的節點參與到共識的過程里。同樣的,節點過多時需要考慮激勵的負反饋調節,使得節點的數量維持在一定的界限里。比如,以太坊里創新地設計了Gas花費,使得在以太坊上的大部分操作都需要消耗Gas來獲得,這一過程符合現實世界的考慮,會驅使更多的節點參與到系統的共識過程中,以獲得利益來支撐在以太坊上的Gas操作[16]。
合約層賦予了區塊鏈可編程的特性,能夠在數字空間里實現一定限度內的各種應用。合約層通過在區塊鏈系統上搭載的虛擬機等部件,能夠在其上自動和強制執行各類腳本、算法和智能合約[17-18]。合約的執行,無需經由除區塊鏈和本身外第三方來激活、管理和干預,是區塊鏈應用去信任的基礎。
應用層是基于區塊鏈整體架構發展而來的區塊鏈去中心化應用的集合,主要涵蓋了區塊鏈的各種應用場景和案例。區塊鏈的去中心化特性、數據的不可篡改性及可追溯性,給予了區塊鏈作為金融領域、物流領域等需要數據安全場景下的生命活力。而智能合約自動執行的特性使得區塊鏈能在更廣泛的商業邏輯甚至是組織模式下大展拳腳。
區塊鏈的數據架構決定了其數據的表示方式和組織形式。在數據架構上,區塊鏈使用區塊結構作為數據的載體,功能上類似于傳統數據庫的數據表,利用哈希算法給予每個區塊一個哈希標示,并將多個區塊組合形成前后銜接的鏈式結構,保證區塊不可篡改。區塊鏈的鏈式結構和區塊結構如圖2所示。

圖2 區塊鏈參考數據架構
對于大部分采用工作量證明共識算法的區塊鏈而言,區塊頭結構里包含區塊鏈版本號、父區塊哈希值(地址)、時間戳、難度系數、交易哈希根以及當前區塊共識過程中計算難題的解(隨機數)等信息。區塊鏈版本號用以跟蹤和識別區塊鏈所運行的網絡協議版本,在對等網絡里用于節點的發現和通信。時間戳則用于記錄區塊的產生時間,使區塊能根據時間戳的先后時間按順序連接在一起。交易哈希根一般是采用Merkle樹結構組織交易后所得的根節點哈希值,即交易樹里按層逐級兩兩哈希后最終產生的結果,該值可用于快速檢驗數據完整性。交易的數據結構因應用場景的差異而不同,但交易信息一般是以Merkle樹的組織形式,通過哈希過程生成唯一的Merkle根,Merkle樹能提供數據完整性證明,可用于區塊鏈的零知識證明[19]。
從本質上來說,區塊鏈是一個不可篡改的、透明的、可以被信任的分布式數據庫。該數據庫存儲的是所有節點共同認可的交易數據,并且依賴這些交易數據自動執行預先約定的動作。
區塊鏈對應的系統中有多個核心的參與主體,其中包括有交易方和記賬方。交易方是實際依托區塊鏈進行交易信息記錄、存證和結算的主體。系統中的交易被廣播到區塊鏈上。區塊鏈上的各個記賬節點需要完成多個交易信息的打包,構建一個完整的區塊,并添加到區塊鏈上。各個記賬節點通過共識算法來競爭當次記賬的權利。競爭勝利的節點打包的區塊可以被順利通過各節點的驗證并被添加到區塊鏈上。通常,記賬節點還會獲得相應的激勵。
對應相應的交易,區塊鏈能夠自動執行智能合約。智能合約是交易雙方提前約定的可執行的代碼,由雙方共同提交到區塊鏈中。智能合約不可修改,其執行自動觸發,不受干擾。每個智能合約都約定對應的觸發信息,明確智能合約觸發啟動的條件。
區塊鏈中的每一個區塊包含有眾多的交易信息。交易信息一般以一個特定的結構進行組織,比如Merkle樹,并借助該數據結構對交易信息進行校驗,如Merkle證明。
由于區塊鏈自身架構的約束,當前大部分的區塊鏈在交易的吞吐率等方面有一定的約束,并且區塊鏈之間的整合和互動的需求也逐漸涌現,因此多條區塊鏈的跨鏈互動和協作的能力也逐步成為區塊鏈的一個主要能力。
2.2.1 工作量證明(PoW)
工作量證明(Proof of Work,PoW)[20]是用來證明完成某項任務而付出了一定計算量的證明。這里的任務指的是要計算出一個與密碼學安全相關的nonce值,使得加上區塊中的其他數據內容的hash值小于給定的上限(與挖礦難度有關)。如果一個節點成功計算出這一個nonce值,則立即向全網廣播這個新產生的塊,網絡中的其他節點收到這個塊后,會立即對這個塊驗證,驗證通過后,會將這個區塊加入到自己本地節點維護的區塊鏈中,并停止競爭當前的區塊打包,轉而進行下一個區塊的競爭。在整個區塊鏈網絡中,只有最快計算出nonce的節點所打包的區塊才能添加到區塊鏈上。
2.2.2 權益證明(PoS)
權益證明(Proof of Stake,PoS)[20]是根據用戶所擁有的權益來決定區塊鏈中下一個區塊由誰來構造,用戶所擁有的權益越高,產生下一個區塊的可能性越大。
如果權益僅僅是指用戶在網絡中所擁有幣的數量,那么這意味著,擁有幣的數量越多,則其權益越高,也就越有可能打包下一個區塊。但是,這會導致網絡中越富的用戶,擁有更多的記賬權,而擁有很少幣的用戶則幾乎不可能獲得記賬權,從而導致了整個網絡的中心化。
所以針對這個問題,關于下一個區塊的記賬權的選擇算法衍生出了2個變種,分別是隨機選擇與基于幣齡的選擇。其中隨機選擇算法應用在BlackCoin項目中,它是采用一個公式來預測下一個區塊的產生者,這個公式是通過結合權益的大小來尋找最小的hash值,因為權益是公開的,所以每一個節點都可以使用這個公式準確地預測產生下一個區塊的節點;而基于幣齡的選擇則在PeerCoin中得到了應用,在這個項目中,持有幣量越多,幣齡越久的用戶就越有可能獲得下一個區塊的記賬權。
2.2.3 拜占庭容錯算法(PBFT)
拜占庭容錯算法[21](Practical Byzantine Fault Tolerance,PBFT),本質上而言是一種基于狀態機的副本復制算法。它將服務建模為狀態機,在分布式網絡中的不同節點上進行副本復制,其中,網絡中的服務都在這些副本上保存相應的狀態信息并實現相應的操作。
PBFT算法是一個循環,在每一輪中,首先會根據設定的規則選出一個主節點,由其來組織網絡中的交易,這整個處理過程分為三個階段:分別是預準備階段、準備階段和確認階段。在每一個階段中,都會進行投票,在本階段中只有超過2/3的投票同意才會進入下一個階段,每輪結束后都會產生一個新區塊。
智能合約[16]的概念最早是在1995年由Nick Szabo所提出來的,其定義為:“一個智能合約是一套以數字形式定義的承諾,包括合約參與方可以在上面執行這些承諾的協議”[22]。從本質上而言,智能合約實際上是計算機上的可執行程序,只要滿足條件,即可被準確執行。但是,其又不僅僅只是一段程序,它本身也是區塊鏈網絡的參與者,它對其他用戶發出的信息進行響應,可以儲存網絡中的價值單元,也可以自己發送信息與價值給其他用戶。
從技術上來說,區塊鏈上的智能合約包括:用于運行的環境——完備的狀態機[23](例如,以太坊的EVM[16])和事務的處理與保存機制。在區塊鏈中,事務主要指的是待發送的數據,事件則是對事務動作的記錄與描述。當事務、事件信息傳到智能合約當中時,會觸發智能合約進行狀態機判斷,如果某個或某幾個方法的觸發條件滿足,狀態機就會依據合約自動執行相應的動作。
智能合約存在的根本目的是為了保證在區塊鏈網絡中,使一些數字化的承諾能夠按照約定的條件正確執行,它本身并不會生成智能合約,也不會對智能合約的信息進行修改。
在比特幣系統中,數據是通過Merkle樹[24]來組織的,Merkle樹結構如圖3所示。

圖3 Merkle樹結構
Merkle樹是二叉樹的結構,其葉子節點存儲數據塊的hash值,然后其父母節點為兩兩的哈希,這樣一層層上去,根節點是其孩子節點的hash值。Merkle樹可以支持零知識證明。向別人證明自己擁有的某一組數據(L1,L2,L3,L4)中包含給定的內容L3,同時又不暴露其他數據內容的證明就叫零知識證明[25]。要實現這個證明,只要構造如圖3所示的Merkle樹結構,并公布Hash5、Hash0和Root就可以了。
雙花問題[10]是指一筆數字資產被重復使用,簡而言之就是一筆錢可以被花兩次甚至多次。雙花攻擊分為0確認雙花與已確認雙花。目前解決0確認雙花的方法,在比特幣系統中使用的是UTXO模型和時間戳來解決,其中,UTXO(Unspent Transaction Output)[1]是比特幣中獨特的價值轉移基本單元,當一筆交易被雙花時,挖礦節點在接收到后會選擇先接收到的交易,拋棄另外一個交易;而在以太坊系統中則不建議用戶開啟0確認雙花,而對于已確認雙花,目前還沒辦法很好地解決。
作為區塊鏈思想誕生的源頭,比特幣網絡是首個得到大規模部署的區塊鏈技術應用,并且是歷史上首個經過大規模長時間檢驗的數字貨幣系統。比特幣項目糅合并借鑒了來自數字貨幣、密碼學、博弈論、分布式系統等多個領域的技術成果,這些技術組合形成的在技術應用和業務應用均具備強大創新意義的比特幣網絡。
比特幣網絡提供的是一個公共可見的記賬本,比特幣網絡中的用戶沒有單獨的賬戶,每個用戶擁有一個或者多個秘鑰對。秘鑰對中的公鑰作為用戶地址,用于作為交易的發起方和接收方的身份標識。由此,比特幣網絡的用戶地址并非記錄每個賬戶的余額,而是用戶使用該公鑰作為用戶地址參與交易的交易余額。用戶的真正余額應該是用戶擁有的所有的公鑰對應的交易的交易余額的總和。比特幣網絡在每次發生交易后,將交易記錄通過比特幣點對點網絡廣播到比特幣網絡上,并利用網絡中礦工的挖礦過程來選取當前交易記賬的節點和構建當前的區塊,來完成對交易記錄的記賬過程。最后等比特幣網絡所有節點完成確認后即可認為交易完成。
本質上來說,以太坊是一個基于交易的狀態機,支持圖靈完備的應用[16]。以太坊延伸了比特幣網絡的思想,除了具備比特幣網絡的功能外,還能使得在全球范圍的多個計算機上運行代碼成為現實。智能合約是以太坊中非常重要的一個概念,即以程序代碼的方式來數字化和運行各種合約。智能合約運行在太坊虛擬機里,能按照智能合約的約定邏輯自動執行,可以在沒有中心協調者的情況下被以太坊網絡中的計算機復制和處理。
以太坊同樣使用工作量證明作為共識算法,但以太坊產生區塊的時間更短,而且區塊的容量相對于比特幣網絡而言更小,這在一定程度上改善了區塊鏈擴展性的問題,但是仍未能達到傳統中心化應用的交易吞吐量。另外,智能合約相比于比特幣原始的腳本語言而言,在以太坊中用來部署代碼以及運行智能合約的語言更高級,而且由于智能合約圖靈完備的特點,在任何其他程序語言中能夠完成的計算都可以利用智能合約實現。
比特幣提供了區塊鏈技術的原型,開創了區塊鏈技術的浪潮。以太坊則通過智能合約擴展并延伸了區塊鏈技術的功能,發展了區塊鏈應用的組織模式。而超級賬本[21](Hyperledger)卻是另辟蹊徑,引入了權限控制和安全保障,強調區塊鏈技術不需局限在完全開放的模式下。超級賬本是Linux基金會管理下的合作項目,目標是建立面向企業應用場景的分布式賬簿平臺的底層構架,吸引了許多科技和金融公司參與,包括IBM、Intel、Cisco、摩根大通等。在這個項目下,許多參與的公司都提供各自的區塊鏈解決方案,比如IBM和Interl公司提供了各自已有的區塊鏈代碼。目前,在項目中的區塊鏈解決方案中,以Fabric最為知名。
Hyperledger Fabric是一個提供分布式賬本解決方案的平臺,與其他區塊鏈系統的差異體現在私有性和許可制上,即維護著一個需要認證接入的網絡系統,嚴格來說,其是一種部分去中心化的區塊鏈系統[24]。Hyperledger Fabric優點在于支持不同的模塊組件直接拔插啟用,使其能根據特定的商業應用場景進行靈活的組裝。
區塊鏈當前還面臨很多技術挑戰,其中最為受關注的是跨鏈技術、隱私保護以及擴展性的技術。
當前的區塊鏈應用越來越豐富,不同的應用可能依賴不同的區塊鏈。長期發展下去,區塊鏈的應用很有可能變得碎片化,區塊鏈上的交易、業務數據和鏈上的共識將被割裂形成區塊鏈孤島。由此,其中的一個技術挑戰是為區塊鏈提供區塊鏈之間的交互和整合能力,使得區塊鏈上的交易、價值等能夠跨區塊鏈進行流動和互動。跨鏈技術[26]就是讓區塊鏈實現價值互聯網的關鍵,它是把區塊鏈從分散的孤島中拯救出來的良藥,是區塊鏈向外拓展和連接的橋梁。早在比特幣誕生初期,人們就意識到比特幣在轉賬速度、容量以及智能合約等方面的不足,如果說能建立比特幣賬本的一個副本,就像以前許多法定貨幣由黃金擔保一樣,在需要的時候資產可以在2個區塊鏈之間相互轉換,就可以加速比特幣或者其他數字資產的流動性。而目前跨鏈技術主要包括有:① 公證人機制;② 中繼模式;③ 哈希鎖定;④ 分布式密鑰控制。
在比特幣網絡或以太坊網絡中可以通過一些技術手段獲取網絡中節點的IP信息以及一些節點的拓撲關系[11],從而泄露了區塊鏈網絡中的節點ip、端口等隱私,甚至泄露了整個網絡的拓撲隱私。
對網絡中的節點信息以及拓撲信息等隱私進行保護,對于目前來說仍然是一個挑戰。其中,文獻[9,27]等主要研究區塊鏈網絡交易隱私。在比特幣網絡中,交易是可被追溯的,因為采用UTXO模型,通過查找所有的輸入與輸出信息,對相關地址進行聚類,會得到很多有價值信息,從而造成了隱私泄露問題。目前比特幣的這個隱私泄露問題還沒有得到很好的解決。
目前區塊鏈技術的可擴展性[28-29]在某些方面受限,特別是,區塊存儲和交易吞吐量方面。隨著網絡中交易的不斷產生,區塊數量也會不斷增加,隨著時間的增長,其所占用的存儲空間越來越大,直至非常龐大。因此需要提高區塊存儲的可擴展性。交易吞吐量的可擴展性指的是針對交易性能而言的,目前區塊鏈網絡的交易性能還是不能很好地支持大規模的交易數量,目前提出了很多方案來解決這些問題,如閃電網絡、側鏈等技術,但是這個問題并沒有真正得到解決。
區塊鏈技術綜合了密碼學、博弈學、社會學以及經濟學等多個學科的技術,具有去中心、去信任、透明、開放、不可篡改以及可追溯等特性,重塑了社會的信任體系,具有重大的意義。本文介紹了區塊鏈的相關背景,闡述了區塊鏈的參考架構、核心技術與算法;討論了典型的區塊鏈系統如比特幣、以太坊以及超級賬本,分析了目前區塊鏈所面臨的重大挑戰,希望能夠為相關研究提供有價值的指導和借鑒。