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