第四章 區塊鏈的共識機制:從拜占庭共識談起
· 本文由【區塊鏈研習社】優質內容計劃支持,更多關于區塊鏈的深度好文,請點擊【區塊鏈研習社】簡書專欄: ? ? [http://www.lxweimin.com/c/b17f09dc2831] ? ? 歡迎打賞: QR84f2aPKn3kupbroQPeF8hnhgjW9f1VeH ? ? 寫在前面: ? ? “區塊鏈研習社”是一很有意思的自組織,加入后以輸出文章倒逼閱讀學習輸入的方式學習,效果不錯。 ? ? 作為長期從事律師工作的文科生,對于理工科知識的認知是短板。感謝《量子學派》的課程,從另一個角度來開啟了我的理性思維的大門。近期,又開始在《量子學派》學習《人人都懂區塊鏈》課程,特記下讀書筆記,以資記錄。
· 如果說區塊鏈是比特幣運行的軀干
那共識機制就是靈魂
· 區塊鏈哲學三問
· 區塊鏈被確認有以下三個基本特征:
· 1.區塊鏈是一個分布式數據庫(系統);
· 2.區塊鏈采用密碼學,保證已有數據不被篡改;
· 3.區塊鏈采用共識算法來對于新增的數據達成共識。
· 這三點可以簡單的從哲學上理解為:我是誰?我來自哪里?我要去哪里?
· 我是誰?我是一個分布式的數據庫;
· 我來自哪里?密碼學告訴我過往的記憶;
· 我要去哪里?共識算法告訴我應該怎么往前走。
· 區塊鏈技術的偉大之處,就在于它的共識機制在去中心化的思想上解決了節點間互相信任的問題。區塊鏈擁有眾多節點并達到一種平衡狀態,是因為共識機制。盡管密碼學占據了區塊鏈的半壁江山,但是共識機制才是讓區塊鏈系統不斷運行下去的關鍵。
· 要深入談及區塊鏈的共識機制,就避不開一個問題——拜占庭問題。
·
· 拜占庭問題及其分析(前方燒腦)
·
· 拜占庭問題是容錯計算中的一個老問題,由萊斯特.蘭伯特等人在1982年提出。
· 問題是:拜占廷帝國為5-15世紀的東羅馬帝國,拜占庭城邦擁有巨大的財富,令他的十個鄰邦垂涎已久,但是拜占庭高墻聳立,固若金湯,沒有任何一個單獨的鄰邦能夠成功入侵。任何單個城邦的入侵行動都會失敗,而入侵者的軍隊也會被殲滅,使得其自身反而容易遭到其它九個城邦的入侵。這十個城邦之間也互相覬覦對方的財富并經常爆發戰爭。
· 拜占庭的防御能力如此之強,非大多數人一起不能攻破。而且只要其中一個城邦背叛盟軍,那么該鄰邦的所有進攻軍隊都會被殲滅,隨后還會被其他鄰邦劫掠。因此這是一個由互不信任的各個鄰邦構成的分布式網絡。每一方都小心行事,因為稍有不慎,就會給自己帶來災難。
· 為了獲取拜占庭的巨額財富,這些鄰邦分散在拜占庭的周圍,依靠士兵傳遞消息來協商進攻目的及進攻時間,這些鄰邦將軍想要攻克拜占庭,但面臨的一個困擾:鄰邦將軍不確定他們之中是否有叛徒,叛徒是否會擅自變更進攻意向或者進攻時間?在這種狀態下,將軍們能否找到一種分布式協議來進行遠程協商達成他們的共識,進而贏取拜占庭城邦的財富呢?
· 拜占庭將軍問題模型中,對于將軍們(節點)有兩個公認的假設:
· 假設一、所有忠誠的將軍受到相同的命令后,執行這條命令,得到的結果一定是相同的;(含義是所有節點對命令的理解和執行是一樣的)
· 假設二、如果命令是正確的,那么所有忠誠的將軍必須執行這條命令。(忠誠的將軍需要判斷接收到的命令是否正確。這個判斷命令道方法是整個拜占庭問題容錯技術的核心。)
· 對于將軍們的通訊過程,在“拜占庭將軍問題”中也是有默認假設的:點對點通信是沒有問題的。也就是說,假設A將軍要給B將軍一條命令X,那么派出去的傳令兵一定會準確的把命令X傳給B將軍。
· 問題在于,如果每個城邦向其他9個城邦派出一名信使,那么就是這10個城邦,每一個都派出了9名信使,也就是在任何一個時間有總計90次的信息傳輸,并且每個城市分別收到9條信息,可能每一條都寫著不同的進攻時間。
· 除此以外,信息傳輸過程中,如果叛徒想要破壞原有的約定時間,就會自己修改相關信息,然后發給其他城邦以混淆試聽,這樣的結果是,部分城邦收到錯誤信息后,會遵循一個或者多個城邦已經修改過的攻擊時間相關信息,從而背叛發起人的本意。這樣一來,遵循錯誤信息的城邦(包含叛徒),將重新廣播超過一條信息的信息鏈,整個信息鏈會隨著他們所發送的錯誤信息,迅速變成不可信的信息和攻擊時間,變成一個相互矛盾的糾結體。
· 針對這個問題,有兩種解決方法。一個是口頭協議算法;另一個是書面協議算法。
· 口頭協議算法的核心思想:要求每一個被發送的消息都能被正確投遞,信息接收者明確知道消息發送者的身份,并且信息接收者知道信息中是否缺少信息。采用口頭協議算法,若叛徒數少于1/3時,則拜占庭將軍問題可以很容易解決。但是口頭協議算法存在著明顯的缺點,那就是消息不能溯源。
· 為解決該問題,提出了書面協議算法。該算法要求簽名不可偽造,一旦被篡改即可發現,同時任何人都可以驗證簽名的可靠性。
· 書面協議算法也不能完全解決拜占庭將軍問題,因為該算法沒有考慮信息傳輸延時、簽名體系難以實現的問題。且簽名消息記錄的保存難以擺脫中心化機構。
·
· 以比特幣為例的區塊鏈共識機制解決方案
·
· 中本聰所創建的比特幣,通過對這個系統,做出一個簡單的變化解決了這個問題。它為發送信息加入成本,這降低了信息傳遞的速率,并加入了一個隨機元素,以保證在一個時間只有一個“城邦”可以進行廣播。
· 中本聰加入的成本是“工作量證明”(挖礦),并且工作量證明是基于計算一個隨機哈希算法。哈希算法唯一做的事情就是獲得一些輸入,然后進行計算,并得到一串64位的隨機數字和字母的字符串。
· 在比特幣的世界中,輸入數據包括到當前時間點的整個總帳(區塊鏈)。
· 盡管單個哈希值用現在的計算機幾乎可以及時的計算出來,但是比特幣系統接受的工作量證明,是無數個64位哈希值中唯一的哈希值,而且這個哈希值前13個字符均為0,這樣一個哈希值是極其罕見、不可能被破解的,并且在當前卻要花費整個比特幣網絡總算力約十分鐘的時間才能找到一個。
· 在一臺網絡機器隨機的找到一個有效哈希值之前,上十億個的無效值會被計算出來,計算哈希值就需要花費大量時間,增加了發送信息的時間間隔,造成信息傳遞速率減慢,這就是使得整個系統可用的“工作量證明”。
· 而那臺發現下一個有效哈希值的機器,能將所有之前的信息放到一起,附上它自己的辨識信息,以及它的簽名/印章等,向網絡中的其他機器廣播出去。只要其他網絡中的機器接收到并驗證通過了這個有效的哈希值和附著在上面的簽名信息,他們才會停止他們當下的計算,使用新的信息更新他們的總賬復制,然后把新更新的總賬作為哈希算法的輸入,再次開始計算哈希值。哈希計算競賽,從一個新的開始點重新開始。
· 如此這般,網絡持續同步著,所有網絡上的節點都使用著同一版本的總賬。
· 與此同時,每一次成功找到有效哈希值以及區塊鏈更新的間隔,大概是10分鐘(這是故意的,算法難度每兩周調整一次,以保證網絡一直需要花費10分鐘來找到一個有效的哈希值)。在這10分鐘以內,參與者可以發送信息并完成交易,所有的交易信息會隨著分布式賬本擴展到其他每一個節點,直到每個節點都完成總賬復制。當區塊鏈更新并在全網復制同步之后,在之前10分鐘內進入區塊鏈的所有交易也被更新并同步。因此分散的交易記錄,是在所有的參與者之間進行對賬和同步的。
· 最后,在用戶向網絡輸入一筆交易的時候,他們使用內嵌在比特幣客戶端的標準公鑰加密工具來加密,同時用他們的私鑰以及接收者的公鑰為這筆交易簽名。這對應于拜占庭將軍問題中他們用來簽名和驗證消息時使用的“印章”。因此,哈希計算速率的限制,加上公鑰加密,使得一個不可信網絡變成一個可信的網絡,所有參與者可以在某些事情上達成一致(比如說攻擊時間、或者一系列的交易域名記錄,政治投票系統,或者任何其他的需要分布式協議的地方)。
· 將比特幣的共識機制引入拜占庭問題,就形成了這樣一種情況:城邦A向其他九個城邦發送進攻相關信息,是直接將相關信息及其當時發送的時間,附加在通過哈希算法加密的信息中,并且加上獨屬于自己的數字簽名傳遞給其他城邦。當城邦B收到城邦A發送的消息后,用相應的網絡機器驗證通過有效哈希值和附加的簽名和時間戳信息,通過解密獲得其中信息,并將這條信息的相關記錄同步在城邦B機器內(節點)。這條信息從城邦B發向城邦C時,會在原來的的消息上加入城邦B查閱了該信息的記錄,加蓋時間戳后,利用哈希算法對城邦B所有信息加密,再發給其他城邦。
· 在其他城邦接受消息后,重復此流程直至所有城邦都收到消息。
· 如果叛徒想要修改進攻信息來誤導其他城邦時,其他城邦的機器會立刻識別到異常信息,同步的虛假信息將不被認可,機器依舊會同步其他大部分共同的信息,這樣叛徒就失敗了。他無法破壞10個城邦當中的大多數節點,也就是至少6個節點,這樣信息的一致性就得到了保證,完美地解決了拜占庭問題。
· 這就是區塊鏈共識機制為何如此特別的關鍵,它為一個算法上的難題提供了解決方案。區塊鏈的共識機制,通過不斷同步各個節點的信息,使得各分布式節點之間達到一種平衡,保證了絕大多數節點的一致性,即達成了共識。
·
· 區塊鏈共識機制的發展變遷
·
· 區塊鏈的共識機制發展到現在,也出現了很多種,這里列舉一些比較典型的共識機制:
· 1.POW(Proof -of -Work) 工作量證明
· 依賴機器進行數學運算來獲取記賬權,資源消耗多、可監管性弱。同時每一次達成共識,需要全網共同參與,運算性能效率比較低,容錯性方面允許全網50%節點出錯,優點是完全去中心化,節點自由進出。
· 當然現在由于POW算力的中心化,使得很多人對POW機制中的中心化問題出了懷疑,其中被質疑最多的就是算力中心化問題。
· 2.POS(Proof- of -Stake) 權益證明
·
· 總體來說,就是存在一個持幣人的集合,他們把手中的代幣放入POS機制中,這樣他們就變成驗證者。假設很多驗證者,在區塊鏈最前面發現了一個新區塊(區塊鏈中最新的塊),這時POS算法在這些驗證者中隨機選取一個人(選擇驗證著的權重依據他們投入的代幣多少而定,比如一個投入押金問10000代幣的驗證著,被選擇的概率是一個投入1000代幣驗證著的10倍),給他們權利產生下一個區塊。與POW一樣,以最長的鏈為準。如果在一定時間內,這個驗證者沒有產生出一個新區塊,POS會繼續選出第二個驗證者,代替原來被選中的驗證者來產生新的區塊。
· 和POW算法相比,選擇POS算法有什么好處呢?
· 簡而言之:不再需要為了安全產生區塊,而大量消耗電能。
· 由于不再需要大量能耗,通過發行新幣以激勵參與者繼續參與網絡的壓力會下降,理論上負總發行量甚至成為可能,由于一部分交易費被燒掉,因此貨幣供應會隨著時間減少。
· 從“合作博弈論”觀點來看,POS算法可以減少因自私挖礦而造成系統被攻擊的弱點。隨著規模經濟的消失(指擴大生產規模引起經濟效益增加的現象),中心化所帶來的風險就會減小,價值1000萬美元的代幣帶來的回報是10萬美元,即作惡所付出的成本需要價值1000萬美元的代幣,而收益只能得到價值10萬美元的代幣,這樣一來,因為作惡獲得與付出不成正比,人們不會去攻擊整個區塊鏈。
· 同樣,POS也存在很多問題,比如POS相當于是大股東說了算,但如果大股東作惡怎么辦?這也一直存在爭議。
· 3.DPOS(Delegate- Proof- of- Stake)股份授權證明
· BitShares社區首先提出了DPOS機制。DPOS與POS的主要區別在于,其節點選取若干代理人。由代理人驗證和記賬,其合規監管、性能、資源消耗和容錯性與POS相似。這種方式類似于董事會投票,持幣者投出一定數量的節點,由代理他們進行驗證和記賬。
· DPOS的工作原理如下。
· 去中心化表示每個股東按其持股比例擁有影響力,51%的股東投票的結果,將是不可逆且有約束力的,其運作方式是通過及時而高效的方式,采用51%以上份額的股東投票來決定方案。為達到這個目標,每個股東可以將其投票權授予一名代表。
· 網絡延遲有可能使某些代表沒能力及時廣播他們的區塊,而這將導致區塊鏈分叉。然而,這不太可能發生,因為制造區塊的代表可以與制造前后區塊的代表建立直接連接,而建立這種與你之后的代表(也許也包括其后的那名代表)的直接連接,是為了確保你能得到報酬。
· 該模式可以每30秒產生一個新區塊,并且在正常的網絡條件下,區塊鏈分叉的可能性極小,即使發生也可以在幾分鐘內得到解決,這樣就可以大幅縮小參與驗證和計算節點的數量,達到秒級的共識驗證。
· 4.Ripple Consensus:瑞波共識機制
· 它的算法是:使一組節點,能夠基于特殊節點列表達成共識。初始特殊節點列表,就像一個俱樂部要接納一個新成員,必須由當前該俱樂部中51%以上的會員投票通過。共識遵循這個核心成員的51%權利,外部人員則沒有影響力。與比特幣和點點幣一樣,瑞波系統將股東們與其投票權隔開,并因此比其他系統更中心化。
· 5.Pool驗證池
· 這是一種基于傳統的分布式一致性技術,加上數據驗證的機制,是目前行業鏈大范圍在使用的共識機制。
· 優點是不需要代幣也可以工作,在成熟的分布式一致性算法基礎上,實現秒級共識驗證。缺點是去中心化程度不如比特幣,更適合多方參與的多中心商業模式。
· 除此之外,還有很多的共識機制,現在主流的共識機制是POW共識機制,POS共識機制和DPOS共識機制。
· 但是目前這些主流共識機制都還存在著一定不足,比特幣已經吸引全球大部分的算力,其它在用POW共識機制的區塊鏈應用,很難獲得相同的算力來保障自身的安全,同時挖礦也會造成資源大量浪費,共識達成的周期較長等問題。POW之外出現最早的也是最重要的算法是POS,它的原則是一個節點,持有的幣越多,越有機會產生下一個區塊,也就是如果想要造假,需要持有大量的幣,而既然造假者持有了那么多幣,破壞網絡的可信度,就會造成資產的大量損失,這個損失極有可能是超過造假的收益。
· POS相比POW節約了大量的電力資源,但是它的缺點也顯而易見:會造成富者越富,窮者越窮,然后用戶會流失,新用戶不愿意加入。而且還是需要挖礦,本質上并沒有解決商業應用的痛點,所有的確認都只是一個概率上的表達,而不是一個確定性的事件,理論上很有可能存在其它攻擊影響。而DPOS共識機制還是依賴于代幣,很多商業應用是不需要代幣存在的。
·
· 結語 沒有一種****共識****機制是完美的
·
· 由此看來,沒有一種共識機制是完美無缺的,同時也意味著沒有一種共識機制,是適合所有應用場景的,所以區塊鏈的共識機制也都還在不斷的進步與發展。
· 雖然目前主流的區塊鏈共識機制中絕大多數都是去中心化的公有鏈,但本身仍存在一些缺點。并且還有少部分機構采用了半中性化或者中心化的共識機制,而半中性化甚至中心化的共識機制,是明顯有違區塊鏈的一致性的,會使權力掌握在少數人手里,出現很多問題,信用機器也將因此崩潰。
· 如今世界還在等待一種新的共識機制,一種能讓所有人都信服的共識機制。
· 但這可能是一個哲學問題,世界上永遠沒有完美的共識機制。
我的感受:
1、解決價值傳遞的問題,依賴于共識;
2、共識的達成,必定是有成本的;
3、共識機制也在不斷地發展之中。