理解 “側鏈”

Ajian· 2020-11-18
本文來自 以太粉 ,作者 Ajian

引言

“Layer-2” 是個不精確的標簽。有些人說起 “Layer-2” 時,僅僅指的是 “不在以太坊 Layer-1(上的東西)”。但實際上,方案到底怎么跟以太坊 Layer-1 交互,是非常重要的。同屬 “Layer-2” 名目下的不同方案,特性可以有天壤之別??梢誀?/p>


議 “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) 個驗證者是惡意的,他們可以:

創建一個新區塊

拒絕與誠實驗證者共享區塊數據

本質上就是將 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。而且,很明顯,對系統的治理流程,同樣可以發動一模一樣的攻擊。

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

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

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

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


仙居天天乐棋牌下载 湖北30选5开奖奖结果 重庆欢乐生肖网站 特码料 体彩22选5机选 北京快3必中 全球最大亚洲彩票平台 (^ω^)MG圣诞奇迹_电子游艺 河北20选5五开奖时间 (*^▽^*)MG黑暗故事_正规平台 一肖中特免费公开资料中特 (*^▽^*)MG海豚礁新手攻略 湖北快三专家推荐 (^ω^)MG电音歌后免费下载 (★^O^★)MG热带动物园奖金赔率 单双中特规律公式 9号彩票平台开户最高