一、區塊鏈的基本概念
區塊鏈(Blockchain)技術的產生和發展離不開比特幣。首先,因為隨著比特幣的誕生,區塊鏈技術才得以公佈於眾;其次,比特幣是截至目前區塊鏈技術最成功、最成熟的應用案例。比特幣的概念由中本聰在2008年發表的論文《比特幣:一種點對點的電子現金系統》中首次提出。文中,中本聰將區塊鏈技術作為構建比特幣數據結構及交易體系的基礎技術,將比特幣打造為一種數字貨幣和在線支付系統,利用加密技術實現資金轉移,而不再依賴於中央銀行。比特幣使用公鑰地址發送和接收比特幣,並進行交易記錄,從而實現個人身份信息的匿名。交易確認的過程則需要用戶貢獻算力,共同對交易進行共識確認,從而將交易記錄到全網公開賬本中。用戶可以利用電腦、手機等發送或接收比特幣,並選擇交易費用。現有逾百種加密數字貨幣(未來幣、點點幣、萊特幣、狗狗幣等),比特幣約占所有加密數字貨幣市值的90%。
比特幣的區塊鏈畢竟是為比特幣體系的設計而定制,因此比特幣的區塊鏈技術並不等於區塊鏈技術。區塊鏈技術應該是可以有更多種形態、更多種體系、更多種用途、更多種規格的技術,其概念為:區塊鏈是一個去中心化的分佈式數據庫,該數據庫由一串使用密碼學方法產生的數據區塊有序鏈接而成,區塊中包含有一定時間內產生的無法被篡改的數據記錄信息。
區塊中包含數據記錄、當前區塊根哈希(Hash)、前一區塊根哈希、時間戳以及其他信息(圖2-1)。數據記錄的類型可以根據場景決定,比如資產交易記錄、資產發行記錄、清算記錄、智能合約記錄甚至物聯網數據記錄等。數據記錄在存儲過程中,通常組織為樹形式,比如默克爾樹,而區塊根哈希實際就是數據記錄樹的根節點哈希,為根據數據記錄樹自下而上逐步通過SHA-256等哈希算法計算得出。時間戳為區塊的生成時間。其他信息包括區塊簽名信息、隨機值等信息,也可根據具體應用場景靈活定義。
圖2-1 區塊鏈結構示意圖
區塊鏈技術不是一種單一的技術,而是多種技術整合的結果,包括密碼學、數學、經濟學、網絡科學等。這些技術以特定方式組合在一起,形成了一種新的去中心化數據記錄與存儲體系,並給存儲數據的區塊打上時間戳使其形成一個連續的、前後關聯的誠實數據記錄存儲結構,最終目的是建立一個保證誠實的數據系統,可將其稱為能夠保證系統誠實的分佈式數據庫。在這個系統中,只有系統本身是值得信任的,所以數據記錄、存儲與更新規則是為建立人們對區塊鏈系統的信任而設計。誠實意味著系統可以被信任,正是商業活動和應用推廣的前提,所以區塊鏈技術已經被很多領域主流機構看中並非是沒有理由的。因為有了區塊鏈技術,在一個誠信的系統裡,可以省去許多煩瑣的審查手續,許多因數據缺乏透明度而無法開展的業務可以開展,甚至社會的自動化程度也將大幅提升。
近年來,包括高盛、摩根大通和納斯達克等金融機構開始展開對區塊鏈技術的重點研究。這些機構的金融業務大都具有標準化程度高、連續性強、自動化需求大、業務對信用度要求高等特點,跟區塊鏈的優勢高度契合。同時,在供應鏈金融中,由於物流、資金流和信息流的複雜安排會涉及眾多單據,因此使用電子商務平台記賬會大大節省紙質單據所需要的時間和成本,然而使用誰的電子商務平台就成為一個大問題。如果使用利益相關各方自建的電子商務平台,數據的真實性就很容易受到質疑,而自建電子商務平台往往耗資不菲;如果使用第三方的電子商務平台,第三方的經營穩定性和信息安全性又難以保證,比如因財務、政策、網絡攻擊等各種情況引起不穩定問題等,溝通協調成本和風險也會大幅增加。區塊鏈技術的安全性、不可逆、不可篡改性和透明性都已經得到了證明,如果能把供應鏈金融業務直接建立在這樣已被證明其可靠性的區塊鏈上,將極大地降低安全和信用成本。所以,儘管目前電子商務平台的使用已經大大節約了成本,但如果能有一個具有公信力的類似區塊鏈公共信用系統,成本仍有進一步節約的空間。從政府層面來說,這一點也很重要,因為提供值得大眾信任的系統本身就是政府職能的一部分。中國的資本運用效率遠低於美國的一個非常重要的原因就是社會的信用體系不健全、信息不透明、部門協調成本過高,且利益保護現象嚴重。如果能從技術上應用區塊鏈,就可以用較低的成本打破這些阻礙,建立一個公開的社會公共信用系統,整個社會成本都將大幅降低,效率也將大幅提升,還便於監管。透明的數據不僅將大大降低監管部門的工作量(很大一部分工作量轉移給了社會監督,任何異動都很難逃過眾人的眼睛),而且使得監管部門的主要工作轉向治理,提升治理人性化和效率。
儘管使用區塊鏈技術所建立的系統本身是誠實可信的,但這並不意味著來自系統以外的輸入信息就是誠實的,更多的時候只是意味著區塊鏈誠實記錄並儲存了這些外部數據。比如認證,認證工作往往是在線下完成,即使區塊鏈能夠存儲文字、圖片甚至多媒體信息,也並不意味著那些信息都是真實的。這只意味著區塊鏈真實記錄並存儲了這些信息,防止被篡改,如果發生業務糾紛時可以作為憑證。可能許多人沒有注意到這一點,自動化是區塊鏈技術的一個非常重要的特性,區塊鏈網絡實際上就是一個接近於自動化或存在完全自動化可能性的網絡。這一點之所以重要,一方面,是因為自動化是金融機構青睞區塊鏈技術的重要原因,金融交易需要網絡能夠自動記錄和存儲交易數據,也能夠允許參與者通過設置條件在網絡上自動進行和完成交易;另一方面,區塊鏈技術在這方面提供的可能性為社會生產效率的大幅提升留下了廣闊的空間,也為智能合約等一系列高級應用留下了充足的餘地。在理想情況下,區塊鏈技術最終能夠同物聯網結合起來。
總體而言,區塊鏈的發展體系可以劃分為四個象限(圖2-2)。第一象限是比特幣區塊鏈;
第二象限是使用比特幣區塊鏈協議,但不使用比特幣貨幣的系統,比如萬事達幣、彩色幣、合約幣,以及採用合併挖礦的域名幣等;第三象限是同時使用獨立貨幣和獨立區塊鏈的系統,比如以太坊、瑞波、萊特幣和未來幣等;第四象限是側鏈,採用獨立的網絡但以比特幣作為底層貨幣的系統,如BTC Relay等。
圖2-2 區塊鏈發展體系四象限
(一)區塊鏈的分類
目前已知的區塊鏈技術應用大致分為三類。
1.公共區塊鏈(Public Blockchain):是指全世界任何人都可讀取、可發送交易進行有效性確認,任何人都能參與其共識過程的區塊鏈(共識過程是維持區塊鏈這種分佈式數據庫一致性、準確性的關鍵技術,將在後續章節詳細介紹),如圖2-3所示。區塊鏈上的數據記錄公開,所有人都可以訪問,都可以發出交易請求,並通過驗證被寫入區塊鏈。共識過程的參與者通過密碼學技術共同維護公共區塊鏈數據的安全、透明、不可篡改。公共區塊鏈的典型應用包括比特幣、以太坊等。
圖2-3 公共區塊鏈示意圖
公共區塊鏈是完全分佈式的區塊鏈,區塊鏈數據公開,用戶參與程度高,同時易於產生網絡效應,便於應用推廣。然而,系統的運行需要依賴於內建的激勵機制。公共區塊鏈上試圖保存的數據越有價值,越要審視其安全性以及安全性帶來的交易成本、系統可擴展性問題。
2.共同體區塊鏈(Consortium Blockchains):又稱聯盟鏈,是指參與區塊鏈的節點是事先選擇好的,節點間通常有良好的網絡連接等合作關係,區塊鏈上的數據可以是公開的也可以是內部的,為部分意義上的分佈式,可視為「部分去中心化」。如圖2-4所示為共同體區塊鏈示意圖。比如有若干家金融機構之間建立了某個共同體區塊鏈,每個機構都運行著一個節點,而且為了使每個區塊生效需要獲得至少其中10個機構的確認。區塊鏈可以允許每個機構可讀取,或者只受限於共識驗證參與者,或走混合型路線,例如區塊的根哈希及應用程序接口對外公開,允許外界用來進行區塊鏈數據和區塊鏈狀態信息查詢等。其典型應用包括超級賬本(Hyperledger)、區塊鏈聯盟R3CEV等。
圖2-4 共同體區塊鏈示意圖
共同體區塊鏈的參與節點間的連接狀態較好、驗證效率較高,只需較低的成本即可維持運行,提供高速交易處理的同時降低交易費用,有很好的擴展性,數據可以保持一定的隱私性。但是這也意味著在共識達成的前提下,參與節點可以一起篡改數據。
3.私有區塊鏈(Private Blockchain):參與的節點只有有限的範圍,比如特定機構的自身用戶等,數據的訪問及使用有嚴格的權限管理,如圖2-5所示為私有區塊鏈示意圖。完全私有的區塊鏈中寫入權限僅在參與者手裡,讀取權限可以對外開放,也可以進行任意程度的限制。相關的應用囊括數據庫管理、數據庫審計甚至公司管理,儘管在有些情況下希望私有區塊鏈可以具有公共的可審計性,但在更多的情況下,沒有公共的可讀性。由於是私有用戶說了算,裡面的數據沒有無法篡改的特性,對於第三方的保障力度大大降低。因此,目前很多私有區塊鏈會通過依附在比特幣等已有區塊鏈的方式存在,定期將系統快照數據記錄到比特幣等系統中。其典型應用如Eris Industries。
圖2-5 私有區塊鏈示意圖
私有區塊鏈可以帶來規則的改變。如果需要的話,運行著私有區塊鏈的機構可以很容易地修改區塊鏈的規則、回滾交易。這一點似乎略有違背區塊鏈的本質,但是卻適用於一些特殊場景需求。由於私有區塊鏈驗證者是內部公開的,所以並不存在部分驗證節點共謀進行51%攻擊的風險。私有區塊鏈交易成本更低。交易只需被幾個受信的高算力節點驗證即可,而不是需要數萬個節點的確認,因此交易成本會低。但從長遠來看,隨著區塊鏈技術的進步,公共區塊鏈的成本將可能降低1~2個數量級,大致與高效的私有區塊鏈系統類似。私有區塊鏈節點間連接情況好、故障可以迅速通過人工干預來修復,從而提升交易速度並可以更好地保護隱私。
公共區塊鏈、共同體區塊鏈和私有區塊鏈各有優勢。公共區塊鏈很難實現得很完美,共同體區塊鏈、私有區塊鏈需要找到實際迫切需求的應用需求和場景。至於具體選擇哪套方案取決於具體需求,有時使用公共區塊鏈會更好,但有時又需要一定的私有控制,適用於使用共同體區塊鏈或私有區塊鏈。
(二)區塊鏈的特徵
1.去中心化
去中心化是區塊鏈最基本的特徵,意味著區塊鏈不再依賴於中央處理節點,實現了數據的分佈式記錄、存儲和更新。由於使用分佈式存儲和算力,不存在中心化的硬件或管理機構,全網節點的權利和義務均等,系統中的數據本質是由全網節點共同維護的。由於每個區塊鏈節點都必須遵循同一規則,而該規則基於密碼算法而非信用,同時每次數據更新需要網絡內其他用戶的批准,所以不需要一套第三方中介結構或信任機構背書。在傳統的中心化網絡中,對一個中心節點實行攻擊即可破壞整個系統,而在一個去中心化的區塊鏈網絡中,攻擊單個節點無法控制或破壞整個網絡,掌握網內超過51%的節點只是獲得控制權的開始而已。
2.透明性
區塊鏈系統的數據記錄對全網節點是透明的,數據記錄的更新操作對全網節點也是透明的,這是區塊鏈系統值得信任的基礎。由於區塊鏈系統使用開源的程序、開放的規則和高參與度,區塊鏈數據記錄和運行規則可以被全網節點審查、追溯,具有很高的透明度。
3.開放性
區塊鏈系統是開放的,除了數據直接相關各方的私有信息被加密外,區塊鏈的數據對所有人公開(具有特殊權限要求的區塊鏈系統除外)。任何人或參與節點都可以通過公開的接口查詢區塊鏈數據記錄或者開發相關應用,因此整個系統信息高度透明。
4.自治性
區塊鏈採用基於協商一致的規範和協議,使整個系統中的所有節點能夠在去信任的環境自由安全地交換數據、記錄數據、更新數據,把對個人或機構的信任改成對體系的信任,任何人為的干預都將不起作用。
5.信息不可篡改
區塊鏈系統的信息一旦經過驗證並添加至區塊鏈後,就會得到永久存儲,無法更改(具備特殊更改需求的私有區塊鏈等系統除外)。除非能夠同時控制系統中超過51%的節點,否則單個節點上對數據庫的修改是無效的,因此區塊鏈的數據穩定性和可靠性極高。
6.匿名性
區塊鏈技術解決了節點間信任的問題,因此數據交換甚至交易均可在匿名的情況下進行。由於節點之間的數據交換遵循固定且預知的算法,因而其數據交互是無須信任的,可以基於地址而非個人身份進行,因此交易雙方無須通過公開身份的方式讓對方產生信任。
二、區塊鏈的工作原理
(一)拜占庭將軍問題
拜占庭將軍問題是容錯計算中的一個老問題,由萊斯利·蘭伯特(Leslie Lamport)等人在1982年提出。拜占庭帝國是5~15世紀的東羅馬帝國,即現在的土耳其。拜占庭城邦擁有巨大的財富,使它的十個鄰邦垂涎已久。但是拜占庭高牆聳立,固若金湯,沒有一個單獨的鄰邦能夠成功入侵。任何單個城邦的入侵行動都會失敗,而入侵者的軍隊也會被殲滅,使其自身反而容易遭到其他九個城邦的入侵。這十個鄰邦之間也互相覬覦對方的財富並經常爆發戰爭。拜占庭的防禦能力如此之強,十個鄰邦中的至少一半同時進攻,才能攻破。也就是說,如果六個或者更多的鄰邦一起進攻,就會成功並獲得拜占庭的財富。然而,如果其中有一個或者更多鄰邦發生背叛,答應一起入侵但在其他人進攻的時候又不幹了,會導致只有五支或者更少的軍隊在同時進攻,那麼所有的進攻軍隊都會被殲滅,並隨後被其他鄰邦所劫掠。因此,這是一個由不互相信任的各個鄰邦構成的分佈式網絡,每一方都小心行事,因為稍有不慎,就會給自己帶來災難。為了獲取拜占庭的巨額財富,這些鄰邦分散在拜占庭的周圍,依靠士兵相互通信來協商進攻目標及進攻時間。這些鄰邦將軍想要攻克拜占庭,都面臨著一個困擾,也就是拜占庭將軍問題。
鄰邦將軍不確定他們中是否有叛徒,叛徒可能擅自變更進攻意向或者進攻時間。在這種狀態下,將軍們能否找到一種分佈式協議進行遠程協商,進而贏取拜占庭城堡攻克戰役的勝利呢?這就是拜占庭將軍問題。
針對拜占庭將軍問題的解決方法包括:口頭協議算法、書面協議算法等[16]。口頭協議算法的核心思想如下:要求每個被發送的消息都能被正確投遞,信息接收者知道消息的發送者身份,知道缺少的消息信息。採用口頭協議算法,若叛徒數少於1/3,則拜占庭將軍問題可解。也就是說,若叛徒數為m,當將軍總數n至少為3m+1時,問題可解。然而,口頭協議算法存在明顯的缺點,那就是消息不能追根溯源。為解決該問題,提出了書面協議算法。該算法要求簽名不可偽造,一旦被篡改即可發現,同時任何人都可以驗證簽名的可靠性。書面協議算法也不能完全解決拜占庭將軍問題。因為該算法沒有考慮信息傳輸時延、其簽名體系難以實現且簽名消息記錄的保存難以擺脫中心化機構。
與已有方法相比,區塊鏈技術將是更完美的解決方案。區塊鏈是怎樣來解決這個問題的呢?它為發送信息加入了成本,降低了信息傳遞的速率,並加入了一個隨機數以保證在一段時間內只有一個礦工可以進行傳播。它加入的成本就是「工作量」,區塊鏈礦工必須完成一個隨機哈希算法的計算工作量才能向各城邦傳播消息。
當用戶向網絡輸入一筆交易的時候,他們使用內嵌在客戶端的標準公鑰加密工具為這筆交易簽名,這好比拜占庭將軍問題中他們用來簽名和驗證消息時使用的「印章」。因此,哈希計算速率的限制,加上公鑰加密,使一個不可信網絡變成了一個可信的網絡,使所有參與者可以在某些事情上達成一致。拜占庭將軍問題的區塊鏈解決方案可以推廣到任何在分佈式網絡上缺乏信任的領域,比如說域名、投票選舉或其他需要分佈式協議的地方[17]。
(二)區塊鏈工作流程
區塊鏈的工作流程主要包括如下步驟(圖2-6)。
1發送節點將新的數據記錄向全網進行廣播。
2接收節點對收到的數據記錄信息進行檢驗,比如記錄信息是否合法,通過檢驗後,數據記錄將被納入一個區塊中。
3 全網所有接收節點對區塊執行共識算法(工作量證明、權益證明等。
4區塊通過共識算法過程後被正式納入區塊鏈中存儲,全網節點均表示接受該區塊,而表示接受的方法,就是將該區塊的隨機散列值視為最新的區塊散列值,新區塊的製造將以該區塊鏈為基礎進行延長。
圖2-6 區塊鏈的工作流程
節點始終都將最長的區塊鏈視為正確的鏈,並持續以此為基礎驗證和延長它。如果有兩個節點同時廣播不同版本的新區塊,那麼其他節點在接收到該區塊的時間上將存在先後差別,它們將在先收到的區塊基礎上進行工作,但也會保留另外一個鏈條,以防後者變成長的鏈條。該僵局的打破需要共識算法的進一步運行,當其中的一條鏈條被證實為是較長的一條,那麼在另一條分支鏈條上工作的節點將轉換陣營,開始在較長的鏈條上工作。以上就是防止區塊鏈分叉的整個過程。
所謂「新的數據記錄廣播」,實際上不需要抵達全部的節點。只要數據記錄信息能夠抵達足夠多的節點,那麼將很快地被整合進一個區塊中。而區塊的廣播對被丟棄的信息是具有容錯能力的。如果一個節點沒有收到某特定區塊,那麼該節點將會發現自己缺失了某個區塊,也就可以提出自己下載該區塊的請求。
現在我們都知道了區塊鏈網絡裡的記賬者是節點,節點負責把數據記錄記到數據區塊裡,為了鼓勵節點記賬,系統會按照規則隨機地對記賬的節點進行獎勵。那麼如何保證不會有人製造假數據記錄或者說如何保證造假數據記錄不被通過驗證?這就涉及時間戳。這也正是區塊鏈與眾不同的地方。區塊鏈不僅關注數據區塊裡的內容,也關注數據區塊本身,把數據區塊的內容與數據區塊本身通過時間戳聯繫起來。時間戳為什麼會出現?這是由區塊鏈的性質規定的。節點把數據記入了區塊,因此一個區塊就相當於一頁賬簿,每筆數據在賬簿中的記錄可以自動按時間先後排列,那麼賬簿的頁與頁怎麼銜接起來?也就是說,這一個區塊與下一個區塊的繼承關係如何斷定就成為問題。於是時間戳就出現了。
時間戳的重要意義在於其使數據區塊形成了新的結構。這個新的結構使各個區塊通過時間線有序連接起來,形成了一個區塊的鏈條,因此才稱為區塊鏈。區塊按時間的先後順序排列使賬簿的頁與頁的記錄也具有了連續性。通過給數據記錄印上時間標籤,使每一條數據記錄都具有唯一性,從而使數據記錄本身在區塊和區塊上的哪個位置上發生可以被精確定位且可回溯,也給其他的校驗機制協同發揮作用提供了極大的便利和確定性,使整個區塊鏈網絡能夠確定性地驗證某條數據記錄是否真實。由於區塊鏈網絡是公開的,意味著系統知道過去發生的所有數據記錄,而任何新的數據記錄都繼承於過去的數據記錄,因為過去的數據記錄是真實的,而且鏈條的各個區塊記錄由時間戳連接起來使之環環相扣,所以如果想要製造一個假的數據記錄,就必須在區塊鏈上修改過去的所有數據記錄。儘管在挖礦的過程中,形成了多個鏈條,但因為最長的那個被誠實的節點所控制,所以想要修改過去的數據記錄,首先就要從頭構造出一個長度比之前最長的那個還要長的鏈條,在這個新的鏈條超過原來的那個鏈條後,才能製造雙重支付的虛假數據。然而隨著時間推移,製造新鏈條的難度和成本都是呈指數級上升的,而且隨著鏈條越來越長,其難度也變得越來越大,成本也就越來越高。同時,因為去中心化的設置,區塊鏈的各個核心客戶端同時又是服務器,保存了區塊鏈網絡的完整數據,因此使對區塊鏈網絡的攻擊很難像對傳統的中央處理節點那樣有效,一般情況下很難對區塊鏈網絡構成重大衝擊。最終,區塊鏈網絡成為一個難以攻破的、公開的、不可篡改數據記錄和製造虛假數據的誠實可信系統。
區塊鏈保證數據安全、不可篡改以及透明性的關鍵技術包括兩個方面:一是數據加密簽名機制;二是共識算法。在數據加密簽名機制中,首先,要有一個私鑰,私鑰是證明個人所有權的關鍵,比如證明某人有權從一個特定的錢包消費數字貨幣,是通過數字簽名來實現的。其次,要使用哈希(Hash)算法。哈希散列是密碼學裡的經典技術,把任意長度的輸入通過哈希算法計算,變換成固定長度的由字母和數字組成的輸出,具有不可逆性。共識算法是區塊鏈中節點保持區塊數據一致、準確的基礎,現有的主流共識算法包括工作量證明(PoW)、權益證明(PoS)、瑞波共識協議(RCP)等。以PoW為例,是指通過消耗節點算力形成新的區塊,是節點利用自身的計算機硬件為網絡做數學計算進行交易確認和提高安全性的過程。交易支持者(礦工)在電腦上運行比特幣軟件不斷計算軟件提供的複雜的密碼學問題來保證交易的進行。作為對他們服務的獎勵,礦工可以得到他們所確認的交易中包含的手續費,以及新產生的比特幣。
三、區塊鏈共識機制
區塊鏈要成為一個難以攻破的、公開的、不可篡改數據記錄的去中心化誠實可信系統,需要在盡可能短的時間內做到分佈式數據記錄的安全、明確及不可逆,提供一個最堅實且去中心化的系統。在實踐中,該流程分為兩個方面:一是選擇一個獨特的節點來產生一個區塊;二是使分佈式數據記錄不可逆。實現上述流程的技術核心就是:共識機制。共識機制是區塊鏈節點就區塊信息達成全網一致共識的機制,可以保證最新區塊被準確添加至區塊鏈、節點存儲的區塊鏈信息一致不分叉甚至可以抵禦惡意攻擊。
當前主流的共識機制包括:工作量證明、權益證明、工作量證明與權益證明混合(PoS+PoW)、股份授權證明、瑞波共識協議等。
(一)工作量證明
工作量證明(Proof of Work),顧名思義,即指工作量的證明。PoW機制的基本步驟如下:1節點監聽全網數據記錄,通過基本合法性驗證的數據記錄將進行暫存;2節點消耗自身算力嘗試不同的隨機數,進行指定哈希計算,並不斷重複該過程直至找到合理的隨機數;3找到合理的隨機數後,生成區塊信息,首先輸入區塊頭信息,然後是數據記錄信息;4接單對外部廣播出新產生的區塊,其他節點驗證通過後,連接至區塊鏈中,主鏈高度加一,然後所有節點切換至新區塊後面繼續進行工作量證明和區塊生產。
PoW叫工作量證明體現在步驟2中,節點需要不斷消耗算力工作,進行哈希計算,以找到期望的隨機數。以比特幣區塊鏈為例,通過PoW機制維護區塊鏈的整體運行及其安全性。驗證節點通過隨機的散列運算,爭奪比特幣區塊鏈的記賬權,防止欺詐交易,避免「雙重支付」,這一過程需要消耗電力、算力來完成。因此,驗證節點也成為「礦工」,隨機數計算查找過程稱為「挖礦」。每一個比特幣區塊鏈中的區塊都包含著一個由無意義數據構成的短字符串(稱為隨機數),找到一個合適的隨機數唯一已知的方法是不停地隨機試探直到搜索到一個有效的數。比特幣的PoW中,平均每10分鐘有一個節點找到一個區塊。如果兩個節點在同一個時間找到區塊,那麼網絡將根據後續節點和區塊生成情況來確定哪個區塊構建最終區塊鏈。一般情況下,需要6個區塊的生成時間進行確認,因為一般交易在6個區塊(約1個小時)後被認為是安全確認且不可逆的。其工作量主要體現在:一個符合要求的區塊隨機數由N個前導零構成,零的個數取決於網絡的難度值。要得到合理的隨機數需要經過大量嘗試計算,計算時間取決於機器的哈希運算速度。當某個節點提供出一個合理的隨機數值,說明該節點確實經過了大量的嘗試計算。當然,這並不能得出計算次數的絕對值,因為尋找合理隨機數值是一個概率事件。工作量證明機制看似很神秘,其實在社會中的應用非常廣泛。例如,畢業證、學位證、律師證等證書就是工作證明,擁有證書即表明在過去付出了努力。挖礦為整個系統的運轉提供原動力,挖礦有三個重要功能:一是發行新的貨幣;二是維繫系統的支付功能;三是通過算力保障系統安全。首先,挖礦消耗資源將黃金注入流通經濟,比特幣通過「挖礦」完成相同的事情,只不過消耗的是CPU時間與電力。其次,挖礦用於產量調節,區塊的產量為大約每兩周2016個,即每10分鐘一塊。第三,通過算力保障系統安全。算力攻擊的概率難度呈指數上升(泊松分佈),每個區塊都必須指向前一個區塊,否則無法驗證通過。追根溯源便是高度為零的創世區塊。PoW機制存在兩方面明顯的缺陷。一是算力的消耗與浪費。在PoW中,儘管區塊鏈節點是用來幫區塊鏈進行分佈式數據記錄的,但是它們實際所做的大部分工作是尋找正確的隨機數而與數據記錄無關。用來尋找隨機數的能量和資源將永遠地消失,這顯然是一種浪費。二是算力集中化凸顯。PoW機制自然地導致了算力集中問題。由於作為一個普通的個體或者幾十、幾百台規模的礦機目前都很難挖到區塊了,因此大家必須聯合起來挖礦,就誕生了算力集中的地方——礦池。其中最著名的是比特幣Ghash礦池,它因為數次接近甚至達到了50%比特幣的算力,從而引起了比特幣社區的廣泛擔憂。
(二)權益證明+工作量證明
2012年8月,一個化名Sunny King的極客推出了Peercoin(PPC),採用工作量證明機制PoW發行新幣,採用權益證明機制PoS維護網絡安全,即PoW+PoS機制。該機制中,區塊被分成兩種形式——PoW區塊及PoS區塊。在這種新型區塊鏈體系裡,區塊持有人可以消耗他的幣天獲得利息,同時獲得為網絡產生一個區塊和用PoS造幣的優先權。PoS的第一次輸入被稱為權益核心,需要符合某一哈希目標協議。因此,PoS區塊的產生具有隨機性,其過程與PoW相似。但有一個重要的區別在於,PoS隨機散列運算是在一個有限制的空間裡完成的,而不是PoW那樣在無限制的空間裡尋找,因此無須大量的能源消耗。權益核心所要符合的隨機散列目標是以在核心中消耗的幣天的目標值(幣×天),這與PoW是不同的,PoW的每個節點都具有相同的目標值。因此,核心消耗的幣天越多,就越容易符合目標協議。PoS中還有一種新型的造幣過程。PoS區塊將根據所消耗的幣天產生利息幣,設計時設定了每幣一年將產生1分利息,以避免將來的通脹。在造幣初期時保留了PoW,使最初的造幣更加方便。
在區塊鏈中誰是主鏈的問題是解決分叉的關鍵。PoS判斷主鏈的標準已經轉化為對消耗幣天的判斷。每個區塊的交易都會將其消耗的幣天提交給該區塊,以提高該區塊的得分。獲得最高消耗幣天的區塊將被選中為主鏈。此設計減少了部分對於51%攻擊的憂慮,因為在PoS區塊中,要進行51%攻擊,首先,要控制數量眾多的幣天,成本可能要高於獲得51%的算力,這樣就提高了攻擊的成本;其次,攻擊者在攻擊網絡時,其幣天也會消耗,這將使攻擊者阻止交易進入主鏈的行為變得更加困難。
為抵禦分佈式拒絕服務攻擊,在PoW+PoS機制中,每個區塊都必須由其擁有者簽名,以避免受到複製並被攻擊者使用。為了抵禦攻擊者複製產生多個區塊進行分佈式拒絕服務攻擊,每個節點都會收集其接觸到的(核心,時間戳)配對信息。假如一個已接收到的區塊包含與其他之前收到的區塊中的配對信息(核心,時間戳)是重複的,會忽略此區塊直到後者被孤立出去。
在PoW+POS機制下,只要持有幣的人,不論持有的數量多少,都可以挖到數據塊,而不用採用任何的礦池導致算力集中。同時,由於多採用幣天生成區塊,而不是算力,降低了資源消耗,解決了單純PoW機制在維護網絡安全方面先天不足的問題。
(三)權益證明
除了結合PoW使用外,能否單獨利用PoS機制進行區塊鏈系統設計運行呢?答案是肯定的。簡單來說,PoS就是一個根據持有貨幣的量和時間,進行利息發放和區塊產生的機制。在權益證明PoS模式下,有一個名詞叫幣天。例如,每個幣每天產生1幣天,比如持有100個幣,總共持有了30天,那麼此時幣天就為3000。這個時候,如果發現了一個新PoS區塊,幣天就會被清空為0。每被清空365幣天,將會從區塊中獲得0.05個幣的利息(可理解為年利率5%)。
PoS的典型應用就是未來幣。同其他加密貨幣一樣,未來幣體系的總賬是建立和儲存在一系列區塊裡的,也就是區塊鏈中。每個區塊鏈的備份都存放在未來幣網絡的每個節點裡,而且在每個節點上沒有加密的每個賬戶都能夠生成區塊,只要至少一個新入賬戶的交易已經確認了1440次。任何賬戶只要達到了這個標準就會被視為「激活賬戶」。在未來幣裡,每個區塊都包含著255個交易,每個交易都是由包含識別參數的192字節的數據頭開始的。一個區塊裡的每個交易量都是由128個字節所代表著。總共加在一起就意味著最大的區塊大小有32K字節。每個區塊都有一個「生成簽名」的參數。激活賬戶用自己的私鑰在原先的區塊上簽署「生成簽名」。這就產生了一個64字節的簽名,之後通過SHA256散列該簽名。哈希產生的前八個字節給出了一個數字,作為一個「hit」。「hit」與目前的目標值相比較,如果計算出的「hit」值要比「目標值」低,那麼就可以生成下一個區塊了。對於每個活動賬戶來講,「目標值」都是與它自身所確認的餘額成比例的。一個持有1000個幣的賬戶得到的目標值是持有20個幣賬戶所得到目標值的50倍。因此,擁有1000個幣的持有者產生的區塊數是持有20個幣的人產生的50倍。同時,「目標值」並不是固定的,隨著先前區塊的時間戳的流逝時刻都在增長。如果在最初的一秒鐘內沒有哪個賬戶的「hit」值是低於「目標值」的,則下一秒鐘「目標值」就會翻倍。「目標值」會連續地翻倍,直到一個活動賬戶的「hit」值有一個較低的數值。還有一個「基本目標」值,它以60秒的間隔設定為目標值。正是這個原因,一個區塊平均產生的時間會在60秒。即使在網絡上只有很少的激活賬戶,它們其中的一個最終會產生一個區塊因為「目標」值會變得相當大。通過將你賬戶的「hit」值與目前的「目標」值相比,你就可以估算出你的「hit」值還有多久能成功。
當一個激活賬戶贏得產生區塊的權利時,就能將任何可獲得的且未確認的交易放入區塊中,並用所有需要的參數來填充該區塊。然後,這個區塊就會被傳播到網絡中作為一個區塊鏈的備選。每一個區塊中的負載值、「hit」、產生的賬戶以及簽名都能被網絡上接收到它的節點所確認。每個區塊參考之前的區塊,區塊形成的區塊鏈可以用來追溯和查詢網絡中素有的交易歷史,所有這些都會追溯到創世源區。上述完整地展示了利用幣天進行區塊產生和驗證共識的過程,體現了PoS的核心思想。
(四)股份授權證明
PoS機制使用一個確定性算法以隨機選擇一個股東來產生下一個區塊,該算法中,賬戶餘額決定了節點被選中的可能性。然而,該系統並未使區塊鏈變得越來越安全而不可逆,因為最終區塊鏈的區塊產生權掌握在賬戶餘額最多的少數節點手中。同時,PoS面臨的挑戰是如何通過及時而高效的方法達成共識。為達到這個目標,每個持幣節點可以將其投票權授予一名代表。獲票數最多的前100位代表按既定時間表輪流產生區塊。每名代表被分配到一個時間段生產區塊。所有的代表將收到等同於一個平均水平的區塊所含交易費的1%作為報酬。如果一個平均水平的區塊含有100股作為交易費,一名代表將獲得1股作為報酬,即可大大提高共識效率。這就是DPoS的核心思想。
網絡延遲有可能使某些代表沒能及時廣播他們的區塊,而這將導致區塊鏈分叉。然而,這發生的概率較小,因為製造區塊的代表可以與製造前後區塊的代表建立直接連接。在DPoS中,第一個步驟是成為一名代表,必須在網絡上註冊公鑰,然後分配到一個32位的特有標識符。然後該標識符會被每筆交易數據的「頭部」引用。第二個步驟是授權選票。每個錢包有一個參數設置窗口,在該窗口裡用戶可以選擇一個或更多的代表,並將其分級。一經設定,用戶所做的每筆交易將把選票從「輸入代表」轉移至「輸出代表」。一般情況下,用戶不會創建特別以投票為目的的交易,因為那將耗費他們一筆交易費。但在緊急情況下,某些用戶可能覺得通過支付費用這一更積極的方式來改變他們的投票是值得的。每個錢包將顯示一個狀態指示器,讓用戶知道代表的表現如何。如果某代表錯過了太多的區塊,那麼系統將會推薦用戶去換一個新的代表。如果任何代表被發現簽發了一個無效的區塊,那麼所有標準錢包將在每個錢包進行更多交易前要求選出一個新代表。與PoW系統及其他PoS系統一樣,最佳區塊鏈是最長的有效區塊鏈。在任何時候,一名代表錯過簽發一個區塊的機會,該區塊鏈將比潛在競爭對手短。只要交易被寫入區塊後的100個區塊中的51%被生產出來了,那麼你就可以安全地認為在主區塊鏈上。也許,在防止區塊鏈分叉所導致的損失方面,最重要的事是在事發後第一時間得知消息。如果10區塊中有超過5個錯過生產,那麼這意味著你很可能在一條支鏈上,因此應該停止所有交易,直到分叉得到解決。以一種及時的方式(少於5分鐘)簡單地發現並警示用戶網絡分叉,是可以最小化潛在損失的非常重要的能力。
(五)瑞波共識協議
瑞波共識協議(Ripple Consensus Protocol,RCP),使一組節點能夠基於特殊節點列表達成共識。初始特殊節點列表就像一個俱樂部,要接納一個新成員,必須由一定比例的該俱樂部會員投票通過。RCP機制的工作原理如下。
1驗證節點接收存儲待驗證交易。首先,驗證節點接收待驗證交易,將其存儲在本地;其次,本輪共識過程中新到的交易需要等待,在下次共識時再確認。
2活躍信任節點發送提議:首先,信任節點列表是驗證池的一個子集,其信任節點來源於驗證池;其次,參與共識過程的信任節點須處於活躍狀態,驗證節點與信任節點間存在保活機制,長期不活躍節點將被從信任節點列表刪除;最後,信任節點根據自身掌握的交易雙方額度、交易歷史等信息對交易做出判斷,並加入到提議中進行發送。
3本驗證節點檢查收到的提議是否來自信任節點列表中的合法信任節點,如果是,則存儲;如果不是,則丟棄。
4驗證節點根據提議確定認可交易列表的步驟如下:首先,令信任節點列表中活躍的信任節點個數為M(比如5個),本輪中交易認可閾值為N(百分比,比如50%),則每一個超過M×N個信任節點認可的交易將被本驗證節點認可;其次,本驗證節點生成認可交易列表。系統為驗證節點設置一個計數器,如果計數器時間已到,本信任節點需要發送自己的認可交易列表。
5賬本共識達成的步驟如下:首先,本驗證節點仍然在接收來自信任節點列表中信任節點的提議,並持續更新認可交易列表;其次,驗證節點認可列表的生成並不代表最終賬本的形成以及共識的達成,賬本共識只有在每筆交易都獲得至少超過一定閾值(比如80%)的信任節點列表認可才能達成。如果賬本中每筆交易都獲得至少超過一定閾值(比如80%)的信任節點列表認可,則共識達成,交易驗證結束,否則繼續上述過程。
6共識過程結束後,已經形成最新的賬本,現將上輪剩餘的待確認交易以及新交易納入待確認交易列表,開始新一輪共識過程。
除上述機制外,還有恆星共識協議(Stellar Consensus Protocol,SCP)、改進型實用拜占庭容錯機制(Practical Byzantine Fault Tolerance,PBFT)和Pool驗證池機制等共識機制被提出,甚至已經應用在區塊鏈系統中,不同共識機制各有其應用場景和優勢。
四、區塊鏈面臨的問題
目前,區塊鏈技術已經受到眾多領域的廣泛關注並得到應用,包括托管交易、金融交易、公共交易、證件、私人記錄、留存證明、實物資產、無形資產等。然而,區塊鏈技術在面臨機遇的同時,也面臨著不少問題與挑戰。
(一)區塊鏈體積過大問題
隨著區塊鏈的發展,節點存儲的區塊鏈數據體積會越來越大,存儲和計算負擔將越來越重。以比特幣區塊鏈為例,其完整數據的大小當前已達63.61GB(千兆)(圖2-7),用戶如果使用比特幣核心客戶端進行數據同步的話,可能三天三夜都無法同步完成,並且,區塊鏈的數據量還在不斷地增加。這給比特幣核心客戶端的運行帶來了很大的困難。
圖2-7 比特幣區塊鏈體積增長趨勢
數據來源:區塊元blockmeta.com
(二)區塊鏈數據確認時間的問題
目前的區塊鏈系統,尤其是金融區塊鏈系統中,存在數據確認時間較長的問題。以比特幣區塊鏈為例,當前比特幣交易的一次確認時間大約需要10分鐘(圖2-8),6次確認的情況下,需要等待約1小時。當然,對於信用卡動則2~3天的確認時間來說,比特幣已經有了很大的進步,但距離理想狀態仍有較大距離。
圖2-8 比特幣區塊生產間隔
數據來源:區塊元blockmeta.com。
(三)處理交易頻率問題
區塊鏈系統面臨交易頻率過低的問題。還是以比特幣區塊鏈為例,每條交易的平均大小約為250個字節(Byte),如果區塊大小限制在1MB(兆),那麼可以容納的交易數量為4000條。按照每10分鐘產生一個區塊的速度計算,每天可以產生144個區塊,也就是能容納576000條交易,再除以每天的秒數86400,比特幣區塊鏈最高每秒處理6.67筆交易。目前,比特幣區塊鏈上每天的實際交易量已經接近系統「瓶頸」(圖2-9),如果擴容問題得不到解決,可能造成大量交易的堵塞延遲。
圖2-9 比特幣區塊平均交易數
數據來源:區塊元blockmeta.com。
相比之下,Paypal在2013年第三季度的總體交易筆數為7.29億筆,平均每秒為93.75筆交易。全球最大的支付卡VISA的官網信息顯示,VisaNet(維薩網)在2013年的測試中,實現了每秒處理47000筆交易。比特幣區塊鏈比起支付寶等幾大支付網絡,從交易處理頻率來看,更像是一個剛出生的嬰兒。當然,這也是中本聰早期故意為之的設計。比特幣區塊大小被限制在1MB,以此避免「流氓」礦工的惡意行為,對人們造成不良的影響。比特幣區塊鏈支付網絡之所以能夠成長到如今價值數十億美元,就在於它的去中心化。
(四)區塊鏈發展受到現行制度的制約
一方面,區塊鏈去中心、自治化的特性淡化了國家監管的概念,對現行體制帶來了衝擊。比如,以比特幣為代表的數字貨幣不但對國家貨幣發行權構成挑戰,還影響到貨幣政策的傳導效果,削弱央行調控經濟的能力,導致貨幣當局對數字貨幣的發展保持謹慎態度。另一方面,監管部門對這項新技術也缺乏充分的認識和預期,法律和制度建立可能會滯後,導致與運用區塊鏈相關的經濟活動缺乏必要的制度規範和法律保護,無形中加大了市場主體的風險。
(五)區塊鏈技術與現有制度的整合成本較大
對於任何創新,現有機構都要保證既能創造經濟效益,又要符合監管要求,還要與傳統基礎設施相銜接。特別是當部署一個新型基礎系統時,耗費的時間、人力、物力成本都非常大,現有傳統機構內部遇到的阻力也不小。
當然,問題的存在並不能阻礙區塊鏈的發展步伐,諸如簡單支付驗證、側鏈、閃電網絡協議等技術的提出和深入研究,已經為上述問題的解決提出了思路。
參考資料
[1]http://www.jianshu.com/p/5e06fee80460
[2]http://www.zhihu.com/question/27687960/answer/70057319
[3]http://www.8btc.com/on-public-and-private-blockchains
[4]http://www.zhuihun.com/domainnews-20983-1-1.html
[5]http://www.wanhuajing.com/d342166
[6]http://www.zhihu.com/question/22369364/answer/21169413
[7]http://8btc.com/thread-540-1-1.html
[8]http://8btc.com/article-1882-1.html
[9]http://www.8btc.com/what-proof-of-stake-is-and-why-it-matters/
[10]http://www.8btc.com/fu0powpos http://www.8btc.com/nxt-whitepaper
[11]http://coinfeed.net/cn/information/bitshares/dpos授權股權證明機制白皮書.html
[12]http://www.8btc.com/blockchain-scalability
[13]http://toutiao.com/i6243674242018181634/
[15] 本章由海濱完成。海濱,布比公司技術專家、博士,在區塊鏈技術、網絡安全、數字貨幣等領域有非常深厚的技術積累。布比公司專注於區塊鏈技術和產品的創新,已經擁有多項核心技術,開發了高可擴展高性能的區塊鏈基礎服務平台,具備快速構建上層應用業務的能力,滿足數千萬級用戶規模的場景。
[16] 范捷,易樂天,舒繼武.拜占庭系統技術研究綜述〔J〕.軟件學報, 2013(6):12.
[17] 巴比特.比特幣與拜占庭將軍問題,http://www.8btc.com/baizhantingjiangjun.