用簡單的推理解釋 Plasma 為何對智慧合約不友好,以及 Redstone 為何不是 Plasma
作者:Faust,極客 Web3
封面:Photo by Google DeepMind on Unsplash
近期,一個叫 Redstone 的專案成為了熱點。 這個由 Lattice 團隊推出的鏈游專項 Layer2 設施,於 11 月 15 日正式發布,目前已上線測試網。 有趣的是,Lattice 團隊稱 “Redstone 是受到 Plasma 啟發的 Alt-DA 鏈”。
就在 Redstone 發佈的前一天,Vitalik 剛剛發表了文章 “Exit games for EVM validiums: the return of Plasma”,文中簡單回顧了本已消失在乙太坊生態的技術方案 “Plasma”,並指出可以引入有效性證明(與 ZK Proof 混淆),來解決 Plasma 的問題。
對此,有不少朋友認為,Vitalik 發表這篇文章,是為了給 Redstone 月臺,甚至在極客 Web3 社群內也有人說,Vitalik 搞不好投資了 Redstone。 再加上此前傳的沸沸揚揚的「乙太坊 Layer2 定義之爭」,一時間人們普遍認為,接下來會引發「Plasma」的復興」。,而 Celestia 等乙太坊生態外的 DA 方案可能因此被抑制,因為 Plasma 沒有對 DA 的嚴格要求。
但據本文作者考證,Redstone 並不符合 Plasma 方案的大致框架,其自稱 “受到 Plasma 啟發” 反而有蹭 Vitalik 文章熱點的可能性,而不是 Vitalik 真要為 Redstone 月臺。 此外,Redstone 的 DA 挑戰方案與 Layer2 專案 Metis 在 2022 年 4 月推出的方案頗有相似之處,只不過兩者在更新 Stateroot——發佈 DA 數據這兩個步驟上的先後次序不同。
所以,真實的情況是,大家可能對 Redstone 產生了 “過度解讀”。 下文中將通過一些簡單的推理來為讀者解釋 Plasma 的原理及其為何對智能合約及 Defi 不友好,以及 Redstone 到底是什麼東西。
Plasma:遇到了數據扣留攻擊就要緊急提款
Plasma 的歷史可以追溯到 2017 年乙太坊 IC0 熱潮時期,彼時乙太坊使用者的交易需求呈爆炸式增長,而 TPS 低下的 ETH 不堪重負。 在這樣的關頭,Plasma 最早的理論版本發佈了,文中提出了一種二層擴容方案,可以處理「世界上幾乎所有的金融場景」。。
簡單來說,Plasma 是一種只把 Layer2 的區塊頭/Merkle Root 發佈到 Layer1 上的擴容方案,區塊頭/Merkle Root 之外的那部分數據(DA 數據)只在鏈下發佈。 如果 Plasma 的排序器/Operator 在 L1 上發佈的 Merkle Root 關聯了一筆無效交易(數位簽名錯誤等場景),相關使用者可以提交欺詐證明,證明排序器提交的 Root 關聯著一筆無效交易。
但問題在於,要發佈欺詐證明必須保證 DA 數據不被扣留,但 Plasma 對 DA 層沒有嚴格要求,不能保證使用者或 L2 節點可以接收到數據。 如果排序器在某個時間點發動數據扣留攻擊(也被稱作數據可用性問題),只發佈新的區塊頭/Merkle root,卻不發佈對應的區塊體,讓人無法驗證區塊頭/root 是否有效,使用者就只能預設排序器 “無葯可救”,通過名為 “Exit Game” 的緊急退出機制,把資產從 Layer2 撤到 Layer1 上。
這一步操作需要使用者提交 Merkle Proof,證明自己在 L2 上的確有相應數額的資產,我們可以將此稱為 「資產證明」。。 有意思的地方在於,Plasma 的 Exit Game 和 ZK Rollup 的逃生艙模式並不一樣,ZK Rollup 使用者必須提交對應最近一個有效 Stateroot 的 Merkle Proof,而 Plasma 使用者卻可以提交很久前的 Merkle Root 對應的 Proof。
為什麼設計成這樣? 只是因為,ZK Rollup 提交的 Stateroot,會被 Layer1 上的合約立刻投入判斷(判斷有效性證明是否有效)。 如果這個剛提交不久的 Stateroot 是有效並合法的,那麼使用者就應當提交對應合法 Stateroot 的 Merkle Proof 來充當資產證明。
但 Plasma 的排序器提交的 Merkle Root,Layer1 合約無法判斷是否有效,只能讓 L2 節點主動發起挑戰來排除無效 Root,所以會有挑戰機制,這使得 Plasma 和 Zk Rollup 的運作原理迥然不同。
假設排序器剛發佈了一個無效的 Merkle Root 101,同時發動數據扣留攻擊,讓 L2 節點無法證明 101 號 root 是無效的,此時使用者可以提交對應 100 號 root 或更早以前 root 的 merkle Proof,把自己的資產提走。
當然這裡有個問題需要解決,就是某個使用者可能提交對應 30 號 root 或更早期 root 的資產證明,請求把資產撤到 Layer1,但這個人在 30 號 root 發佈後,資產狀況可能有變化。 換句話說,他提交的是過時的資產證明,這就是典型的雙花攻擊/雙重支付。
對此,Plasma 允許任何人針對上述情況提交欺詐證明,指出某個發起提款聲明的使用者提交的「資產證明」是過時的。 通過引入這種「任何人都可以挑戰別人的提款聲明」,Plasma 不需要像 ZK Rollup 那樣處理緊急提款請求。
但還是有一種可能,就是排序器先把其他人的資產划轉到自己的 L2 帳戶下,然後再發動數據扣留攻擊,讓外人無法對自己的作弊行為發起挑戰。 之後,排序器自己的帳戶發起緊急提款,提交「資產證明」宣稱自己的確在 L2 上擁有這些資產。
顯然,這種時候因為缺失了一段歷史記錄,人們無法直接證明排序器的資產來源有問題。 那麼這種情況下該怎麼辦? Plasma 的早期版本比如 Plasma MVP 考慮到了這點,他們提出了 「提款優先順序」。。 如果一個人提交的資產證明對應的 root 更早,它的提款請求就會被優先處理。
假如排序器是在提交第 101 號 root 時進行上面說的作弊行為併發起提款,那麼使用者可以提交對應 99 號或更早 root 的資產證明來緊急提款。 顯然,排序器只要無法篡改已經發佈到 Layer1 上的歷史記錄,使用者就有辦法逃出生天。
但 Plasma 還是有一個致命 bug:只要排序器發動數據扣留,人們就要靠緊急提款(又稱 Exit Game)來保證資產安全,如果短時間內大量用戶集體提款,Layer1 很容易處理不過來;
更嚴重的是,像 Defi 合約上記錄的資產,該由誰來提取到 Layer1? 假設有人往 DEX 的 LP 池子充了 100 個 ETH,之後 Plasma 的排序器故障或作惡了,人們需要緊急提款,這時候使用者的 100 個 ETH 都還為 DEX 合約所控制,請問這個時候這些資產該由誰提到 Layer1 上?
最好的辦法其實是先讓使用者從 DEX 池子里贖回自己的資產,再由使用者自己去把錢提到 L1 上,但問題是 Plasma 排序器已經故障/作惡了,使用者沒法執行贖回資產的操作。 可如果我們允許 DEX 合約的 owner 去把合約控制的資產提到 L1,顯然會賦予合約 owner 以資產擁有權,他可以隨時把這些資產提到 L1 上並跑路,這豈不是太可怕了?
所以到最後,該怎麼處置這些由 Defi 合約所支配的「公共財產」,是一個巨大的雷。 如果走社會共識,在 Layer1 上重建一個映射了 Layer2 上 defi 合約的鏡像合約,似乎也可以,但這會引入相當巨大的麻煩,增加機會成本,由哪些人來投票決定鏡像合約的處置方式,也會是個大問題。 這其實涉及到公權力分配的難題,此前響馬曾在訪談《高性能公鏈難出新事,智慧合約涉及權力分配》中談到過這點。
當然,Vitalik 在最近的文章「Exit games for EVM validiums: the return of Plasma」中也指出了這一點,並強調這是 Plasma 對智慧合約不友好的因素之一。 過往的知名 Plasma 變體如 Plasma MVP 和 Plasma Cash 等,採用了 UTXO 或類似的模型來替代乙太坊的帳戶位址模型,並且不支援智慧合約,這樣可以避免上面談及的「資產擁有權分配」問題,每個 UTXO 的擁有權固然歸屬於使用者自己,但 UTXO 本身也有諸多缺陷,且對智慧合約不友好。 所以 Plasma 方案最適合簡單的支付或訂單簿式交易所。
到後來,隨著 ZK Rollup 的走紅,Plasma 本身也退出了歷史舞臺,因為 Rollup 不存在 Plasma 的數據扣留問題。 假如 ZK Rollup 的排序器發動數據扣留攻擊,只往 ETH 鏈上提交 Stateroot 但沒有 DA 數據,這樣的 root 會判定為無效,直接被 L1 上的 Verifier 合約拒絕。 所以,ZK Rollup 的合法 Stateroot 對應的 DA 數據,在 ETH 鏈上必定可查。 這樣就不存在「只發佈區塊頭或 merkle root,卻不發佈對應的區塊體」,也就是可以解決數據可用性問題/數據扣留攻擊。
同時,Rollup 的過往 DA 數據在乙太坊上可查,任何人都可以通過 ETH 鏈上的歷史記錄來啟動 Layer2 節點,這將去中心化乃至無需許可的排序器方案難度大幅降低。 相比之下,Plasma 對 DA 沒有嚴格要求,實現去中心化排序器的難度也更大(要實現可替換的去中心化排序器,首先要保證所有的 L2 節點都認可相同的 block,這就對 DA 實現方式提出了要求)。
此外,如果 ZK Rollup 的排序器嘗試把無效交易包含進 Layer2 區塊,也無法成功,這是由有效性證明的原理來保障的。
歸根結底,ZK Rollup 排序器的作惡空間與 Plasma 相比要狹小許多——它最多能讓 Stateroot 的更新停滯,在 UX 層面相當於停機,或者拒絕某些使用者的請求,俗稱交易審查。 同時,Rollup 方案中如果排序器故障了,其他節點要替代它也會更容易。 理想狀態下的 Rollup,可以將 Plasma 中 Exit game 模式的觸發概率降至 0(ZK Rollup 中叫逃生艙)。
時至今日,乙太坊生態內幾乎沒有團隊還在堅持 Plasma 路線了,幾乎所有的 Plasma 專案都胎死腹中。
Redstone 是個啥:它不是 Plasma,而是 Optimium 的變體
上文我們簡單闡述了 Plasma 以及其被 Rollup 替代的簡要因素,而至於 Redstone,想必大家也看到了它和 Plasma 的不同:Redstone 可以解決數據扣留攻擊問題,比如它不會立刻發佈新的 stateroot,而是先在 ETH 鏈下發佈原始的 DA 數據,然後把 DA 數據的 datahash 作為一個關聯的憑證 commitment,發佈到 ETH 鏈上,稱自己在鏈下已發佈這段 datahash 所對應的完整數據。
任何人都可以發起挑戰,稱 Redstone 的排序器沒有在鏈下發佈這段 datahash 對應的原始數據。 此時,排序器需要在鏈上發佈 datahash 對應的數據,以應對質疑者的挑戰。
如果排序器被挑戰后,沒有及時在 ETH 鏈上發佈數據,則它之前發佈的 datahash/commitment 會被視為無效。 如果排序器及時回應了挑戰者的請求,那麼挑戰者就可以及時獲取到 datahash 對應的原始 DA 數據。 最終,所有 L2 節點基本都可以獲取到所需的 DA 數據,以解決數據扣留攻擊問題。 當然,挑戰者本身需要先支付一筆費用,這筆費用約等於排序器在 ETH 鏈上發佈原始 DA 數據的成本,這個舉措是為了防止惡意挑戰者無成本的挑戰排序器,致使後者蒙受損失。
最後,當針對 datahash 的挑戰期結束後,排序器將發佈對應的 stateroot,也就是執行 datahash 對應的 DA 數據中 包含的交易序列後,得到的 root。 此時 L2 節點可以使用欺詐證明系統來挑戰那些無效的 root。 如果此前某個 datahash 在被挑戰后,排序器沒有及時發佈對應的原始 DA 數據,則排序器即便後面發佈了這個 datahash 對應的 stateroot,也會被預設為無效。
由於 Redstone 是先發布 DA 數據,之後才發佈對應的有效 Stateroot,直接解決了數據扣留攻擊問題(排序器只發佈 root 而不發佈 DA 數據)。
顯然這種模式和普通的 Optimium(不用乙太坊實現 DA 的 OP Rollup,比如 Arbitrum Nova)不同,Optimium 一般依賴於鏈下 DAC 委員會確保數據可用性,DAC 每隔一段時間向鏈上提交一個多簽 txn,Layer1 上的 Rollup 合約收到多簽 txn 後,會預設排序器已在鏈下發佈最新一批的 DA 數據。
而像 Metis 和 Arbitrum Nova 等是同時提交 Stateroot 和 datahash,如果有人認為排序器扣留了 DA 數據,便會嘗試發起挑戰,排序器會把 datahash 對應的 DA 數據發到鏈上。
所以,Redstone 和 Metis 的關鍵區別在這一步:前者是先發佈 datahash,等 DA 挑戰期結束,才發佈 stateroot; Metis 卻是同時發佈 stateroot 和 datahash,如果有人發起挑戰,則把 DA 數據上鏈。 顯然 Redstone 的方案更安全些,因為 Metis 的方案下,如果排序器一直不回應挑戰者對 DA 數據的請求,則數據扣留攻擊問題無法快速解決,只能依靠緊急提款和社會共識,或是讓其他節點接替當前的排序器;
但換做 Redstone,如果排序器搞數據扣留,則其發佈的 stateroot 直接被認作無效,所以 stateroot 和 DA 數據是綁定關係,這使得 Redstone 可以獲得和 Rollup 較接近的 DA 保證,本質上是比 Arbitrum Nova 和 Metis 更優越的 Optimium 變體。
免責聲明:作為區塊鏈資訊平臺,本站所發佈文章僅代表作者及嘉賓個人觀點,與 Web3Caff 立場無關。 文章內的資訊僅供參考,均不構成任何投資建議及要約,並請您遵守所在國家或地區的相關法律法規。