在區(qū)塊鏈的世界里,共識協(xié)議被廣泛討論。然而,通常很難區(qū)分競爭的協(xié)議并對它們進行評估,尤其是并不清楚某個特定協(xié)議如何解決共識問題,或者該特定問題如何與區(qū)塊鏈的實際關注點相關聯(lián)(例如,我的交易何時得到確認?)我用的是什么分叉?
大致說來,協(xié)商共識協(xié)議的目的是在相互不信任的各方之間達成的協(xié)議。在比特幣網(wǎng)絡中,節(jié)點正試圖就下一個區(qū)塊包含什么內容達成一致。在這個網(wǎng)絡中,塊告訴我們廣播了哪些事務,以及這些事務的順序。其他的共識協(xié)議通常是相似的——它們告訴客戶應該應用哪些操作,并且這些操作的順序是什么。
作為一個共識協(xié)議的用戶,你可能一開始會想“好吧,我不太關心操作的順序和時間,只要我能保證這些操作是正確的?!钡拇_,正確性是一個重要的屬性。但是,這個屬性完全與操作的順序和時間有關。為了了解原因,讓我們看一些事務示例。
T1:公鑰A將代幣“Z”轉移到公鑰B
T2:公鑰A將代幣“Z”轉移到公鑰C
T3:公鑰B將代幣“Z”轉移到公鑰D
現(xiàn)在,當單獨檢查時,確認這些事務的正確性是微不足道的。對于事務1和事務2,驗證者只需要確認事務是由與A對應的私鑰簽名的,這在相當枯燥的密碼學中是可以實現(xiàn)的,并且已經(jīng)存在了幾十年。但是單獨檢查這些事務并不有趣,并且不能提供有用的正確性度量。我想知道我是否“擁有”代幣Z,也就是說,沒有人可以在未經(jīng)我允許的情況下,令人信服地轉移那枚代幣。共識協(xié)議對此有什么要說的?
重要的是,在一個共識協(xié)議中,網(wǎng)絡中的客戶端和節(jié)點會達成一致的世界觀,而這種世界觀中進行交易。一旦我們可以訂購事務,我們就可以開始評估它們在特定時間點是否有效。例如,如果一個共識協(xié)議確定在時間0,代幣“Z”是由公鑰A擁有,并且交易排序為T1,T3,T2——顯然,T1和T3是有效的,但T2是無效的(因為在T1廣播之后,Z由公鑰B擁有,而不再是公鑰A)。但是,如果協(xié)議確定事務的順序是T2、T1、T3,那么只有T2是有效的。顯然,秩序和時機保證很重要。幸運的是,這正是共識協(xié)議試圖提供的。
共識議定在秩序和時間方面提供兩項保證:
· 安全性:只要協(xié)議的錯誤參與者不超過某個閾值,其他參與者就無法說服客戶機接受錯誤或無效的消息。
· 靈活性:只要協(xié)議的錯誤參與者不超過某個閾值,其他參與者就不能無限期地延遲接受正確消息。
在區(qū)塊鏈環(huán)境中,這些保證通常意味著什么?如前所述,在區(qū)塊鏈上驗證不正確的消息幾乎是微不足道的。這是否意味著安全性是一個微不足道的目標?當涉及到事務的時間安排和事務的順序時,為什么靈活性很重要?這些和分叉有什么關系?
為了將其映射到區(qū)塊鏈中,我們必須首先了解區(qū)塊鏈到底想要達成什么共識。事實證明,答案不是信息,甚至不是事務,而是歷史。區(qū)塊鏈客戶端不斷地嘗試找出哪些事務的歷史是“真實”的歷史。從前面的事務示例中,客戶端需要判斷這兩種可能的歷史記錄中哪一種是正確的:
歷史1:事務1,事務3。
歷史2:事務2。
Nakamoto consensus使用工作證明挖掘和“最長鏈勝出”度量來決定哪個歷史是正確的歷史。如果網(wǎng)絡中的所有節(jié)點都是誠實的,那么這個歷史記錄應該與預期的歷史記錄相匹配。
有了這樣的理解,我們現(xiàn)在可以就區(qū)塊鏈構建我們的兩個共識保證:
· 安全性: 只要協(xié)議的錯誤參與者的閾值不超過某個閾值,其他參與者就無法說服客戶機接受錯誤的歷史記錄,
· 靈活性: 只要協(xié)議的錯誤參與者不超過某個閾值,其他參與者就不能阻止客戶端接受某些歷史記錄作為正確的歷史記錄。
有趣的是,當涉及區(qū)塊鏈時(盡管大多數(shù)共識協(xié)議都是如此),我們通常對正確性、有效性、順序和時間等屬性的理解需要同時保證安全性和靈活性。這就是區(qū)塊鏈的本質。如果我希望確信自己不會受到“雙重支出”的攻擊,那么我需要知道,首先,事務將被及時接受,其次,一旦被接受,事務就不太可能處于孤立塊中。
這就是為什么安全性和靈活性是容錯協(xié)議不可分割的屬性。容錯協(xié)議使用技術來保證活性,而活性會影響安全性,反之亦然。例如,在實際拜占庭容錯中(一個最具影響力的容錯共識協(xié)議),兩階段提交副本所使用的機制是確保副本取得進展。如果這個機制有缺陷,就會影響安全性和靈活性。這些特性在沒有其他特性的情況下不能得到有效的處理或證明。一項消除安全顧慮的協(xié)議總是可以取得進展的。
如果區(qū)塊鏈將徹底改變人們在互聯(lián)網(wǎng)上的互動方式,那么這些區(qū)塊鏈的正常運作將是非常重要的。在評估各種平臺的技術和計劃時,必須記住區(qū)塊鏈試圖解決的基本問題。在基本層面上,這個問題是一個老問題:在達成共識的同時容忍一些錯誤或惡意行為者。無論在理論還是實踐中,這都意味著提供靈活性和安全性的保障。然而,這些保障是不可分割的,因為提供一種保障的機制總是相互影響的。
現(xiàn)在,當評估那些試圖在支持開放區(qū)塊鏈的新機制方面取得進展的項目時,充分處理這兩個問題的項目最有可能取得成果。像Stellar這樣的項目在聯(lián)邦模型(非開放)中使用協(xié)商共識協(xié)議,但是提供了良好的容錯保證。Algorand在構建容錯協(xié)議方面也取得了重大進展,盡管處理開放成員集的問題仍然懸而未決。我們自己的區(qū)塊鏈設計工作提供了容錯保證,同時通過工作證明挖掘支持開放成員之間關系。





