如何理解以太坊「側鏈」

買賣虛擬貨幣

引言

Layer-2 對以太坊的重要性與日俱增,而且已成共識。

但是,「Layer-2」 是個不精確的標籤。有些人說起 「Layer-2」 時,僅僅指的是 「不在以太坊 Layer-1(上的東西)」。

但實際上,方案到底怎麼跟以太坊 Layer-1 互動,是非常重要的。同屬 「Layer-2」 名目下的不同方案,特性可以有天壤之別。可以爭議 「Layer-2」 應該專指具備特定屬性的某些東西(例如,我們大概都同意,部署在 AWS 上的東西不是 Layer-2,但也有一些專案,安全性保證差不多,但也被認為是 Layer-2)。不過,這不是我這裡要講的主題。

我在這裡要討論的是側鏈(sidechains)的屬性。

側鏈的基本含義是:由一組驗證者,把一條鏈的最新狀態提交給一個(主鏈上的)智慧合約,如此推進的一類系統。這些(最新狀態的)檢查點可被一個橋接合約(bridge contract)使用,以支援使用者的存款和取款。

一般來說,在該組驗證者之間也會有一個領袖選舉流程,來決定某時某刻由誰來建立側鏈區塊;例如 PoA 權威證明演算法和 PoS 演算法。(譯者注:由該定義可見,作者所討論的,是在主鏈上沒有設計有效性保證機制的側鏈;按照現在大家對 「側鏈」 的寬泛定義,作者討論的是廣義側鏈的一個子集;但是,原始的 「側鏈」,也就是狹義的側鏈概念,正與作者這裡提出的一般無二。就看大家自己願意把 「側鏈」 當成一個專有名詞,還是願意取其衍生含義了。)

側鏈在以太坊生態中也扮演著重要的角色。在研究人員還未開發出更好的方案之前,它們是可擴充套件性和可用性的臨時解決方案。像 xDai 這樣的產品,也點出了大家對更好的使用者體驗的需求,並使之擴散了開來。

但是,側鏈並不具備廣大的以太坊社羣所期待的安全性。這不是說永遠不該使用側鏈這種方案。如果人們完全知情,但是願意用,那是他們自己的選擇,也可能是值得的。但如果人們是不知情的,那就危險了。本文是希望提供一些資訊。如果每個人都已經完全知曉了這些特性,那我這再寫一篇也無傷大雅。但如果這文章能幫助大家意識到自己的誤解,那就算做了好事了。

那麼側鏈到底缺少了哪些安全特性?幾乎所有的側鏈,都不能夠提供:

審查抗性

終局性

資金所有權保證

如果這些特性你全都要,那你可能得另找方案來代替側鏈了。當然,也有可能在維持側鏈核心架構的前提下改進具體方案在這些維度上的表現。我覺得開放性的討論對大家都有好處。

審查抗性

顯然,側鏈的審查抗性比(設計優良的)區塊鏈要弱。不然,那也根本不需要區塊鏈了。但這裡我們挖得再深一些。如果某條側鏈有 N 個驗證者,而只要有 M 個驗證者一致同意就可以審查任意一筆交易,那麼只需要 (N-M) 個驗證者聯合起來,就可以審查一個區塊。

這就導致了一個有趣的兩難:要讓審查交易變得更難,就會讓審查區塊變得更簡單。因為審查交易和審查區塊都是糟糕的事情,所以側鏈就在根本上不能獲得強健的審查抗性。(譯者注:這裡的邏輯如下,如果只要 M 個驗證者都不同意出某個塊,系統就不能出塊,那麼自然,只需要 M 個驗證者就可以透過拒絕出塊來審查某一筆交易;但是,這也意味著,只要 N-M 個驗證者同意,他們可以任意出塊,總是出包含了別的內容的區塊而不出某個區塊,甚至集體玩消失)。

這種擔憂在使用 PoS 時也依然存在,甚至按權益來計算出塊權重會讓它變得更糟糕,因為達成閾值的獨立實體數量可能會更低(即使在最理想的情況下,權益是充分均勻分佈的,那也只不過跟不使用 PoS 的情形一樣,不會變得更好)。

資料可得性保證

假設只要 (N-M) 個驗證者就可以建立一個區塊。再假設所有其他驗證者需要擁有整個狀態的資料才能夠驗證新狀態。那麼,只要 (N-M) 個驗證者是惡意的,他們可以:

1、建立一個新區塊

2、拒絕與誠實驗證者共享區塊資料

3、本質上就是將 N-(N-M) = M 名誠實驗證者移出了共識過程,因此完全掌控了整個系統

這種情況發生的可能性有多大呢?顯然需要更具體的細節才能下結論,但我們可以這樣開始思考:一個理性的驗證者,要跟其他人共享資料的激勵在哪裡呢?在傳統的權威證明機制中,不這樣做可能對聲譽有損。但是,其實聲譽機制也很難起作用,因為實際上並沒有辦法證明資料被扣起來了,除非其他人把所有資料都放到了鏈上。

覺得這個解決方案聽起來像是 optimistic rollup?沒錯,就是如此。這也意味著,帶有更好安全性的側鏈,本質上就 「退化」 成了 optimistic rollup。在大多數側鏈方案中,驗證者可以因為自己的工作而獲得某種形式的支付。

對於誠實的驗證者,獎勵會在 N 個驗證者之間共享。對於不誠實的驗證者,同樣多的獎勵只會在 N-(N-M)=M 個驗證者之間共享,所以驗證者完全有激勵不跟其他人分享更新後的狀態。(譯者注:此處的計算疑有誤)在這裡,有一個根本性的難題:很難辨別資料可得性(data availibility)攻擊。對於誠實驗證者來說,很難分辨出,到底是有人發動了攻擊,還是自己遇到的同步問題。

終局性

假設狀態轉換的流程如下:

state1 => state2 => state3

而每一次的轉換都需要一些交易在已有的狀態上生效從而改變狀態。而終局性就是說,交易一旦生效,就不能撤銷。側鏈的檢查點,經過側鏈驗證者的共識之後傳送到以太坊區塊鏈上,並根據以太坊的共識機制被固化下來。

有些人可能因此就認為,側鏈的終局性等同於以太坊的終局性;要回滾側鏈的區塊,你也需要回滾以太坊的區塊。但這完全搞錯了。

因為終局性是說不能回滾交易,不是說不能用新狀態來替代舊狀態。只要 (N-M) 個驗證者同意,他們可以執行如下的狀態轉換:

state1 => state2 => state1

(使用 state1 來替代 state3,就等於是回滾了大家預設已經終局的 state2,但這完全不需要以太坊主鏈也回滾。)

側鏈資金所有權保證

假設現在的

state1={Alice:1000,Bob:0}

即 Alice 有 1000 塊,而 Bob 啥也沒有。那如果 Bob 是惡意的,而且控制著(或者可以高效地腐化) POA 驗證者中的絕大多數,他可以怎麼做?

他可以執行一個狀態轉換:

state1 => state2

state2={Alice:0,Bob:1000}

也就是偷走 Alice 所有的錢並交給 Bob。因此,側鏈的防禦就減弱為,不會有 (N-M) 個驗證者同意去執行這樣的非法狀態轉換。

這已經是眾所周知的事(至少我是這麼相信的),但我認為還是有必要提醒大家。你對一條側鏈的信心,只能是相信驗證者中的大多數不會幹這樣的事情。對側鏈的大部分安全分析都應該關注這一點。

可能還是有某些人你可以在某種程度上信任他們。就像我們中的許多人都(出於許多理由而信任)中心化的服務提供商。有時候這種犧牲是值得的。重要的是,你得清楚這是一種權衡。

使用治理程式作為防禦手段的問題

有一種說法是:「我們可以使用治理程式來解決上面提到的所有問題」。

這種方法是有缺陷的,因為整個系統會退化為一個治理流程。這種說法格外使我擔心的一個理由是,它意味著側鏈的其他屬性是劇院(什麼時候,我們因為什麼理由需要這樣的屬性呢?)。

舉個例子,如果治理流程才是防範上述問題的最終手段,那也就意味著,什麼 PoS、PoA,統統都不重要。系統的治理流程才是真正的 PoA。而且,很明顯,對系統的治理流程,同樣可以發動一模一樣的攻擊。

側鏈的特性在哪裡可能特別有用

除了側鏈的一些附加屬性,比如更快的區塊時間(因此有更好的使用者體驗),確實有一些場合,是側鏈的特點可以大放異彩的。比如:

1、你就是想要 N-M 個驗證者就能執行任意狀態轉換。希望有一個高階控制許可權的企業應用就是一個例子。

2、M=0,且 N 個驗證者可以執行任意狀態轉換的情況。例如,一個四方參與的遊戲。不過問題是,1個驗證者就可以關停這條鏈。

結語

曾經,側鏈是在保持一定水平的以太坊可組合型和互操作性的前提下,唯一可用的方案。現在,隨著別的一些 Layer-2 擴充套件方案的成熟,是時候考慮側鏈如何與其他方案更好地結合了。有一些屬性,很適合讓側鏈加以整合:

1、實現不收費的大規模遷移,保證使用者不會因為費用而被卡住,無法退出。

2、將領袖選舉機制替換為其他具備更強審查抗性的方案(PoS 可能是個 錯誤 的方向。見此帖)

3、需要協調器來處理鏈上兩個狀態的差異。

4、加入錯誤性證明來防止非法的狀態轉換。

隨著 optimistic rollup 和 optimistic VM 技術的成熟,專案的權衡範圍也會改變,因此,現在是反思側鏈屬性及其相關取捨的好時機。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;