Danksharding 提出者為何 diss 乙太坊之外的 DA 層?

作者:Faust,極客 Web3

導語:近日,Danksharding 的提出者、乙太坊基金會的研究員Dankrad Feist在推特上發表了一番頗具爭議的言論。 他明確指出,不採用 ETH 作 DA 層(數據可用性層)的模組化區塊鏈不是 Rollup,同時也不是乙太坊 Layer2。  如果按照 Dankrad 的說法,Arbitrum Nova 和 Immutable X、Mantle 都要從 Layer2 名單里 “除名”,因為它們只在 ETH 之外(自己構建了名為 DAC 的鏈下 DA 網路)披露交易數據。

同時,Dankrad 還表示,像 Plasmas 和狀態通道這種不需要鏈上數據可用性(Data Availability)來確保安全的方案仍算是 Layer2,但 Validium(不用 ETH 作 DA 層的 ZKRollup)不算 Layer2

Dankrad 此言一出,便引來了諸多 Rollup 領域的 Founder 或 Researcher 質疑。 畢竟有許多「Layer2」項目為了節約成本,並沒有採用 ETH 作為 DA(數據可用性)層,如果把這些專案踢出 L2 名單,必然波及到相當多的擴容網路; 同時,如果 validium 不算 L2,Plasma 應該也沒資格算作 L2。 對此,Dankrad 表示,Plasma 使用者在 DA 不可用時(就是指鏈下的 DA 層網路搞數據扣留,不公開交易數據),仍然可以把自己的資產安全撤出至 L1;  但相同的情況下,Validium(大多數採用 StarkEx 方案的專案都是 validium)卻可以讓用戶無法撤資至 L1,把錢凍住。

显然,Dankrad 打算从 “是否安全” 来界定一个扩容项目是否为以太坊 Layer2。如果从 “安全性” 的角度来考量,Validium 在定序器故障 + DA 层发动数据扣留攻击 (隐瞒新数据) 的极端情况下,的确可以把用户资产冻结在 L2 无法提到 L1;Plasma 因在设计上与 Validium 不同,虽然多数时候安全保障不及 Validium,但在定序器故障 + DA 层发动数据扣留攻击 (隐瞒新数据) 时,却允许用户把资产安全撤离至 L1。所以 Dankrad 的说辞不无道理。

本文打算從 Dankrad 的視角出發,通過對 Layer2 的細節作進一步分析,來深入理解為何 Validium 不是嚴格意義上的 “Layer2”。 到底怎麼定義 Layer2?

按照 ethereum.org 網站和多數乙太坊社區成員的定義,Layer2 是 “給乙太坊擴容+繼承乙太坊安全性 的獨立區塊鏈”。  首先,“給乙太坊擴容” 就是指分流乙太坊無法承載的流量,分擔 TPS 方面的壓力。 而「繼承乙太坊安全性」,其實可以轉譯為 「借助乙太坊保障自身安全性」。

比如,Layer2 上所有的交易 Tx 都要在 ETH 上完成最終結算 Finalize,數據有錯誤的 Tx 不會被放行; 如果要回滾 Layer2 的區塊,要先回滾乙太坊區塊,只要乙太坊主網不發生類似 51% 攻擊的區塊回滾,L2 區塊就不會回滾。

如果我們更進一步探討 Layer2 的安全性,其實還要考慮許多極端情況。 比如,如果 L2 專案方跑路、定序器 Sequencer 故障、鏈下 DA 層掛掉,在這些極端事件發生時,使用者能否把自己在 L2 上的資金安全撤出到 L1 上?

Layer2 的「強制提款」機制

不考慮 L2 合約升級/多簽隱患等因素,其實如 Arbitrum 或 StarkEx 都有為使用者設置強制提款的出口。  假設 L2 的定序器發動審查攻擊,故意拒絕使用者的交易/提款請求,或乾脆永久宕機,Arbitrum 使用者可以調用 L1 上 Sequencer Inbox 合約的 force Inclusion 函數,將交易數據直接提交至 L1; 如果在 24 小時內,定序器沒有處理這筆需要「強制包含」的交易/提款,該交易會被直接包含進 Rollup 帳本的交易序列中,這就為 L2 用戶創造了一個可強制提款的「安全出口」。。

相比之下,有逃生艙 Escape Hetch 機制的 StarkEx  方案要有過之無不及。 如果 L2 使用者在 L1 提交的 Forced Withdrawal 請求在 7 天視窗期結束時,未得到定序器回應,則該使用者可以調用 freeze Request 功能讓 L2 進入凍結期。 此時,L2 定序器將無法在 L1 上更新 L2 的狀態,L2 狀態凍結後要過 1 年才能解凍。

L2 状态冻结后,用户可以构造与当前状态相关的 Merkle Proof,证明自己在 L2 上有 XX 数额的资金,通过 L1 上的逃生舱 Escape Hetch 相关合约来提款。这便是 StarkEx 方案所提供的 “全额提款” 服务。即便 L2 项目方没了,定序器永久故障了,用户还是有办法把资金撤出 L2。

但这里存在一个问题:用 StarkEx 方案的 L2 大多是 Validium(比如 Immutable X 和 ApeX),并不会把 DA 所需的数据发布到 ETH,构造当前 L2 状态树的信息都存在链下。如果用户无法在链下获取构造 Merkle Proof 的数据(比如链下 DA 层发动数据扣留攻击),是无法通过逃生舱来提款的。

至此,文章开头提到的 Dankrad 认为 Validium 不安全的原因,其实很明确了:因为 Validium 不像 Rollup 一样把 DA 的数据发到链上,所以用户可能无法构造出 “强制提款” 所需的 Merkle Proof。

Validium 和 Plasma 在发生数据扣留攻击时的区别

事实上,Validium 的定序器只在 L1 链上发布 L2 最新的 Stateroot(状态树的根),再提交一个 Validity Proof(ZK Proof),证明新的 Stateroot 生成过程涉及的状态转换(用户资金变化),都是正确的。

(图源:eckoDAO)

单凭 stateroot 无法还原出此刻的状态树 world state trie,也就无法知晓每个 L2 账户的具体状态(包含资金余额),L2 用户就无法构造对应当前合法 Stateroot 的 Merkle Proof。这便是 Validium 不利的地方。

(Merkle Proof 其实就是 root 生成过程中所需的数据,也就是图中暗色的部分。要构造对应 Stateroot 的 Merkle Proof,必须要知道状态树的构造,需要有 DA 数据

这里必须要强调下 DAC 这个东西。Validium 的 DA 所涉数据,比如定序器最新处理的一批交易,会同步给名为数据可用性委员会 DAC(Data Availability Committee)的 L2 专属 DA 网络,DAC 由多台节点服务器构成,一般由 L2 官方和社区成员或其他单位负责运行和监督(但这只是表面上的,实际上 DAC 成员都有谁,外界很难查证)。

有意思的地方在于,Validium 的 DAC 成员需要频繁在 L1 提交多签,证明 L2 定序器在 L1 提交的新 Stateroot 和 Validity Proof,与 DAC 同步到的 DA 数据能对上号。DAC 的多签提交后,新的 Stateroot 和 Validity Proof 才会被认为是合法的。

目前 Immutable X 的 DAC 采用 5/7 多签,dYdX 虽然是 ZKRollup,但也有 DAC,用的是 1/2 多签。(dYdX 只在 L1 发布 State diff 即状态变化,而非完整交易数据。但获取了历史记录里的 State diff,就可以还原全部 L2 地址的资产余额,此时就可以构造 Merkle Proof 来全额提款)。

Dankrad 的观点不无道理。Validium 的 DAC 成员如果合谋,发起数据扣留攻击,不让其他 L2 节点同步此刻的最新数据,并且更新此刻 L2 的合法 Stateroot,用户无法构造此刻合法 root 对应的 Merkle Proof 来提款(因为此刻往后的 DA 数据不可用了,可用的是以前的 DA 数据)。

但 Dankrad 考慮的只是理論上的極端情況,現實中大多數 Validium 定序器都會即時的把新處理的交易數據廣播給其他 L2 節點,其中不乏誠實節點。 只要有 1 個誠實節點能夠及時獲取 DA 數據,使用者就可以從 L2 全身而退。

可理論上存在於 Validium 身上的問題,為何不存在於 Plasma 身上?  這是因為 Plasma 判定合法 Stateroot 的方式,和 Validium 不同,有欺詐證明視窗期的緣故。 Plasma 是 OPRollup 之前的 L2 擴容方案,與 OPR 一樣靠欺詐證明保證 L2 的安全。

Plasma 與 OPR 一樣有視窗期的設定,定序器發佈的新 stateroot 不會立刻判定為合法,要等視窗期 close 且沒有 L2 節點發佈欺詐證明。 所以 Plasma 和 OPR 的當前合法 Stateroot,都是幾天以前提交的(這就好比我們看到的星光,其實都是很久以前發出的),而使用者往往可以獲取過去時刻的 DA 數據。

同時,欺詐證明機制能在此刻生效的前提,是此刻 L2 的 DA 可用,也即 Plasma 的 Verifier 節點可以獲取此刻的 DA 所涉數據,這樣才能生成此刻的欺詐證明(如果有必要的話)。

那麼一切都很簡單了:Plasma 正常工作的前提是此刻 L2 的 DA 數據可用。  如果從此刻開始,L2 的 DA 不可用了,使用者能安全撤資嗎?

這個問題不難分析,假設 Plasma 的視窗期是 7 天,如果從某個時間點 T0 開始,新的 DA 數據就不可用(DAC 發動數據扣留攻擊,不讓誠實的 L2 節點獲取 T0 往後的數據)。 因為 T0 及此後一段時間內的合法 Stateroot,是 T0 時刻前提交的,而 T0 時刻前的歷史數據可追溯,所以使用者可以構造 Merkle Proof 來強制提款。

即便很多人無法立刻察覺異常,但因為有視窗期存在(OP 是 7 天),只要 T0 時刻提交的 Stateroot 還未合法化,且 T0 之前的 DA 數據可追溯,使用者就可以把錢安全撤出 L2。

總結

至此我們大致可以理清楚 Validium 和 Plasma 在安全性上的區別:

Validium 的定序器發佈 Stateroot 後,只要立刻發佈 Validity Proof 和 DAC 多簽,就可以使其合法,成為最新的合法 Stateroot; 如果使用者和誠實 L2 節點遭遇數據扣留攻擊,無法構造當前合法 Stateroot 對應的 Merkle Proof,就無法提款到 L1。

而 Plasma 提交新的 Stateroot 後,要等視窗期結束才能合法,此時的合法 Stateroot 是過去提交的。 因為有視窗期(ARB 是 3 天,OP 是 7 天)存在,即便新提交的 Stateroot 的 DA 數據不可用,使用者也有當前合法 Stateroot 的 DA 數據(合法 root 是過去提交的),有足夠的時間強制提款到 L1。

所以,Dankrad 說的話有道理。 當發生數據扣留攻擊時,Validium 存在把用戶資產困在 L2 的可能,但 Plasma 並不存在這個問題。 (下圖中 Dankrad 說的有一點不對,Plasma 應該不允許構造過時的合法 Stateroot 對應的默克爾證明來提款,因為這會導致雙重支付)

所以,鏈下 DA 層的數據扣留攻擊會造成許多安全隱患,但 Celestia 嘗試解決的正是這個問題。 此外,因為大多數 Layer2 專案都會提供讓 L2 節點與定序器保持鏈下同步的服務埠,所以 Dankrad 的憂慮其實往往只是理論上的,而不是現實中的。

如果我們用雞蛋裡挑骨頭的態度,再提出更極端的假設:所有的 Plasma 鏈下節點都不可用了,那麼那些沒跑過 L2 節點的普通使用者都無法強制提款到 L1。 但這種事情發生的概率,等價於一條公鏈的所有節點集體永久性宕機的概率,可能永遠不會發生。

所以,很多時候,大家只是在談論一些根本就不會發生的事情。 正如美劇《切爾諾貝利》里克格勃副主席對主角說的那段金句:“為何要擔心根本就不會發生的事情呢?”

免責聲明:作為區塊鏈資訊平臺,本站所發佈文章僅代表作者及嘉賓個人觀點,與 Web3Caff 立場無關。 本文內容僅用於資訊分享,均不構成任何投資建議及要約,並請您遵守所在國家或地區的相關法律法規。