大多區塊鏈應用最有價值的屬性之一就是“免信任” (trustlessness),即應用能夠以預期的方式保持執行而無需依賴特定參與者以特定形式行事,即使他們將來的相關利益可能產生變化並使其做出意料之外的舉動。區塊鏈應用從來都不是完全的免信任化,但是某些應用確實比其他應用的免信任程度更高。如果我們想要朝著信任最小化的目標前進,就需要首先具備辨別信任程度的高低。
首先,我個人對“信任”的簡單定義是:信任就是對他人行為進行假設。在疫情爆發前,你走在街上不會因為防止有人突然捅你一刀而刻意跟他人保持兩米的距離,這就是一種信任:一是信任人們很少會失心瘋,二是法制系統的維護者有很強的動機約束這種行為。當你執行其他人寫的一段程式碼時,你信任他們在編寫程式碼時是誠實的 (無論是出於他們自己的良知或是維持聲譽的經濟利益),或者至少存在足夠多的人對程式碼進行檢查以找到漏洞。不親自種糧食也是另一種信任,相信會有足夠多的人為了獲取收益耕種糧食並出售給你。你可以信任不同規模的群體,信任的型別也不盡相同。
為了對區塊鏈進行分析,我嘗試將信任分解為以下幾個維度:
你需要多少人按照你的預期行事?
人數總量多大?
人們需要什麼動機?他們需要是利他主義者,還是唯利是圖者?他們需要避免協作嗎?
如果違反了這些假設,系統會受到多嚴重的影響?
現在,我們先關注前兩點,下面有一個圖表:
綠色越深,表示該模型越健康。讓我們對這幾個種類進行詳細分析:
1 of 1:整個系統只有一個參與者。如果這名參與者按照你預期的那樣行事,系統就會 (才會) 正常執行。這就是傳統的 “中心化” 模型,也是我們要超越的模型。
n of n:“反烏托邦” 世界。系統中的所有參與者都要按照預期行事,系統才能正常執行,如果其中任何人失敗,我們沒有補救措施。
n/2 of n:這是區塊鏈的運作方式,如果大部分礦工 (或 pos 驗證者) 是誠實的,區塊鏈就能正常運作。要注意的是,n 值越大,n/2 就越有價值。相比只由少量礦工/驗證者控制的區塊鏈,礦工/驗證者廣泛分佈的網路更有意義。儘管如此,由於 51% 攻擊的可能性,我們還是想在這種程度的安全性上更進一步。
1 of n:有很多參與者,只要其中至少有一個按照預期行事,系統就能正常運作。任何基於欺詐證明的系統都屬於這一類,信任設定也是如此,儘管在這種情況下 n 值通常較小。請注意,我們確實希望 n 值儘可能大!
極少數 of n:在眾多參與者中,只要有固定數量的小部分參與者按照預期行事,系統就能正常執行。資料可用性檢查就當屬其中。
0 of n:系統無需依賴外部參與者即可正常執行。親自驗證區塊就歸為這一類。
儘管除 “0 of n” 之外的模型都有一定“信任”程度 ,但是這些模型之間存在巨大差異!相信特定的某個人 (或組織) 會按照預期行事,與相信隨便一個人都會按照預期形式,是完全不同的情況。相比 “n/2 of n” 和 “1 of 1”,“1 of n” 與 “0 of n” 更相似。可能有人會覺得 “1 of n” 模型與 “1 of 1” 模型很像,因為這兩種模型都依賴一名參與者,但實際上這兩者十分迥異:在 “1 of n” 系統中,如果該名參與者突然消失或者黑化,大可以重新換一個參與者,但在 “1 of 1” 系統中我們別無他選。
尤其要注意即使是你所執行的軟體,其正確性通常取決於 “極少數 of n” 信任模型,以確保程式碼出現漏洞時有人會進行糾查。明白這一點後,努力使應用中其他部分從 “1 of n” 模型切換到 “0 of n” 模型就像是為你家裝上防盜門,但窗戶是開啟的。
另一個重要的區別在於,如果你的信任假設被打破,對系統的破壞有多大?在區塊鏈上,最常見的兩種故障型別是活性故障(liveness failure)和安全性故障(safety failure)。活性故障就是你暫時無法進行操作(例如,提幣、將交易打包進區塊、讀取鏈上資料)。安全性故障就是出現了系統想要預防的情況(例如,無效塊被新增到區塊鏈上)。
以下列舉了一些區塊鏈 layer 2 協議所採用的信任模型。我用“small n”來指代 layer 2 系統本身的參與者集合,“big n”來指代區塊鏈底層的參與者。我的假設是 layer 2 的社羣總是小於底層區塊鏈。另外,我使用的 “活性故障” 一詞特指代幣長時間無法提出的情況。無法使用系統但是能夠幾乎即時提款的情況不算作活性故障。
“通道”方案(channels,包括狀態通道、閃電網路等):使用 “1 of 1” 信任模型來確保活性 (你的對手方可以暫時凍結你的資金,不過你可以透過將資金分散在多個通道中減少風險),使用 “n/2 of big n” 模型來確保安全性 (有可能在 51% 攻擊中失去資金)。
plasma(中心化運營者):使用 “1 of 1” 信任模型來確保活性 (運營者可以暫時凍結你的資金),“n/2 of big n” 模型來確保安全性 (有可能在 51% 攻擊中失去資金)。
plasma(半去中心化運營方,如 dpos):使用 “n/2 of small n” 信任模型來確保活性,“n/2 of big n” 模型來確保安全性。
optimistic rollup:使用 “1 of 1” 或 “n/2 of small n” 信任模型來確保活性 (取決於運營者的型別),“n/2 of big n” 模型來確保安全性。
zk rollup:使用 “1 of small n” 信任模型來確保活性 (如果運營者未能打包你的交易,你可以提款,如果運營者沒有立即打包你的取款交易,就無法打包更多交易包,你可以在 rollup 系統中任何一個全節點的幫助下自行提款);不存在安全故障風險。
zk rollup(輕取款增強型):不存在活性故障風險和安全故障風險。
最後就是“激勵”的問題。要促使參與者遵循預期,你所信任的參與者需要非常利他主義、輕微利他主義,還是說足夠理性?預設情況下,“欺詐證明” (fraud proofs) 需要參與者具有輕微利他主義傾向,但其程度取決於計算的複雜性 (詳見 “驗證者困境” ),並且存在很多方式改進過程,使其更加理性。
如果我們增加一種為服務支付費用的機制,那麼幫助他人從 zk rollup 中提款的行為就是理性的,因此幾乎沒必要擔心無法退出 rollup 的問題。與此同時,如果社羣都同意不接受 51% 攻擊下的區塊鏈 (回滾很長的交易歷史或是審查區塊過久),那麼其他系統所面臨的風險可以被減輕。
結論:如果有人說某個系統 “依賴於信任機制”,那我們可以刨根問底!他們的意思是 “1 of 1” 模型、“1 of n” 模型還是 “n/2 of n” 模型?該系統需要參與者是利他主義還是理性主義?如果是利他主義,參與者的代價有多大?如果違反了假設,需要等待多久才能取回自己的資金?幾個小時?幾天?還是永遠被凍結?明白這些問題後,我們可能對於是否採用該系統會有截然不同的答案。