Vitalik:Rollups不完全指南
來源| vitalik.ca
作者| Vitalik Buterin
作者| Vitalik Buterin
作者| Vitalik Buterin
一級標題
作者| Vitalik Buterin
一級標題
一級標題
區塊鏈擴容方式有兩種。第一種,可以提高區塊鏈本身的交易容量。這種技術的主要挑戰就是:當區塊容量越來越大時,區塊鏈將越來越難驗證,且中心化程度越來越高。為了避免此類風險,開發者可以提高客戶端軟件的效率。或者選擇另一種更為可持續的方式:利用諸如分片這類技術,使得區塊鏈上的構建區塊和驗證工作可以分散至許多節點(Eth2 升級中就會將此技術引入以太坊) 。
一級標題
狀態通道vs Plasma vs Rollups
一級標題
二層擴容方案的三種主要類型是:狀態通道、Plasma 和rollups。他們是三種不同的範式,具有不同的優劣勢。我們可以把所有二層擴容解決方案大致地歸為這三類(儘管有的方案因分類模糊而存在命名爭議,如validium)。
一級標題
更多資料請參考:https://www.jeffcoleman.ca/state-channels and statechannels.org
該技術功能強大:可以對其進行調整,以進行雙向支付、處理智能合約關係(如,Alice 和Bob 在通道中籤訂金融合約)、以及對通道進行組合(比如,當Alice 和Bob、Bob 和Charlie之間有一條開放通道時,Alice 和Charlie 也可以進行去信任交易)。
一級標題
Plasma 的原理
http://plasma.io/plasma-deprecated.pdf
Plasma Cash:
https://ethresear.ch/t/plasma-cash-plasma-with-much-less-per-user-data-checking/1298
一級標題
但狀態通道的作用是有限的:無法將資金在鏈外發送給沒有參與進來的用戶;通道不能代表那些邏輯上沒有明確所有者的對象(如Uniswap);並且如果要進行更為複雜的交易,需要在通道內鎖定大量資金。
一級標題
Plasma 的原理
更多資料請參考👇
用戶向某個Plasma 鏈的智能合約中發送一筆資產以完成存款。 Plasma 鏈給該資產分配一個唯一的ID (如537)。每條Plasma 鏈都有一名運營者“operator” (他可以是一個中心化的角色、一個多簽名者、或諸如PoS/DPoS 此類更為複雜的東西)。每隔一段時間(可以是15秒至1小時),運營者便會生成一個等待批量處理的匯總交易(由他們在鏈下收集到的所有Plasma 交易組成)。
Rollups
如果用戶想要進行提款,那麼就要公佈其最近向其發送資產的交易的默克爾分支。然後智能合約就將啟動挑戰期,在此期間,任何人都可以嘗試使用其他默克爾分支來證明該提款無效。需要至少證明其中一項:(i) 發送方在發送資產時並不是該資產的所有者;(ii) 發送方在後來將資產發給了其他人。如果在某個時間段內(如七天) 沒有人證明該提款是欺詐性的,用戶便可以取出他的資產。
EthHub on optimistic rollups:
https://docs.ethhub.io/ethereum-roadmap/layer-2-scaling/optimistic_rollups/
ZK rollups:
https://docs.ethhub.io/ethereum-roadmap/layer-2-scaling/zk-rollups/
一級標題
再者,Plasma 和通道都有一個關鍵弱點:確保這兩種方案安全的前提是,這兩種系統所控制的對像都有邏輯上的“所有者”。如果該資產的所有者不關心其資產,那麼可能會導致證明其資產無效的結果。這對許多應用程序來說是可以接受的,但是對於許多其他應用來說(如Uniswap) 來說是破壞交易原則的。甚至在一些系統中如果對象的狀態不經其所有者的同意就可以被改變(如基於賬戶的系統,你可以不經某人的同意就可以提升其餘額),這些系統也不適用Plasma。
一級標題
一級標題
Plasma 和通道類是“純粹”的二層方案,因為其將數據和計算都移至鏈下。然而,圍繞“數據可用性”的基本博弈論問題意味著這些方案不一定對於所有應用來說都是安全的。 Plasma 和通道方案的解決方式是依靠所有者完全知曉狀態,但這使得此類方案無法完全通用化。 Rollups,則是一種“混合型”二層方案。 Rollups 將計算(以及狀態存儲) 移至鏈下,但將每筆交易的一些數據放在鏈上。
一級標題
數據在鏈上這一點很關鍵(請注意:將數據“放在IPFS 上”是行不通的,因為IPFS 不能就任何給定的數據是否可用提供共識;數據必須被記錄在鏈上)。將數據放在鏈上並對此達成共識,使得任何人都可以根據需要在本地處理rollup 中的所有操作,從而允許其對欺詐進行監測、發起提款或親自開始批量生成交易。缺乏數據可用性意味著一名惡意的或是離線的運營者能夠產生的影響甚至會更小(例如他們無法造成一周的延遲),從而為有權發布批量交易的人打開更大的設計空間,並使rollup 更容易有理可循。
一級標題
更重要的是,缺乏數據可用性意味著不再需要映射資產到所有者,從而我們能得出以太坊社區相較之前的二層擴容方案對rollups 更加期待的關鍵原因之一:rollups 是完全通用的,我們甚至還可以在rollup 內部運行EVM,使得既有的以太坊應用幾乎不需要編寫新代碼就能遷移到rollups 上。
一級標題
Rollup 的原理到底是什麼?
在鏈上存在一份智能合約,其中包含一個狀態根,即rollup 狀態的默克爾根(也就是rollup 內部的賬戶餘額、合約代碼等等)。
任何人都可以發布一批匯總交易(batch),這是一個經由高度壓縮的交易集合,其中包含之前的狀態根和新狀態根(處理交易之後的新默克爾根)。該合約會檢查batch 中的舊狀態根是否匹配其當前的狀態根,如果匹配的話,合約會對狀態根進行更新。
為了支持存款和提款,我們增加了輸入和輸出在rollup 狀態“外部”的交易的功能。如果一個batch 中包含來自外部的輸入,則提交到該batch 的交易也需要將資產轉移到rollup 合約。如果一個batch 中包含來自外部的輸出,則智能合約在處理該batch 時會發起提款。
Optimistic rollups 與ZK rollups
1. Optimistic rollups,其解決方案為欺詐證明(fraud proofs):這類rollup 會追踪所有歷史狀態根以及每個batch 的哈希值。如果任何人發現某個batch 的後狀態根不正確,他可以向區塊鏈發布一個證明,證明該batch 計算錯誤。合約會對證明進行驗證,並且對該batch 及其之後的batches 進行回滾。
一級標題
這兩種rollup 之間存在復雜的權衡:
總的來說,我個人的觀點是,在短期內,optimistic rollup 的顯著優勢在於其通用的EVM 計算,而ZK rollup 更可能被用於支付、交易和其他特定用例。但中長期來看,隨著ZK-SNARK 技術的成熟,ZK rollup 會在所有用例中發揮出優勢。
解構欺詐證明
一級標題
在上圖中,聲稱某batch 無效的欺詐證明會包含綠色的數據:如果要證明特定賬戶被該batch 讀取和/或被修改,則需要該batch 本身(可以對照存儲在鏈上的哈希值進行檢查) 以及Merkle 樹的各個部分。不需要提供圖中黃色的節點,因為他們能夠被綠色的節點重構。該數據已經足夠執行batch 併計算後狀態根了(這與無狀態客戶端驗證單個區塊的方式幾乎相同)。如果經計算的後狀態根以及獲得的batch 中的後狀態根不一致,那麼該batch 就是無效的。
一級標題
可以保證如果某個batch 不正確,但之前所有的batches 都是正確的,那麼就能夠創建一個欺詐證明以表示該batch 是不正確的。請注意對之前batch 的聲明:如果有超過一個無效的batch 被發佈到rollup 中,那麼最好嘗試證明最早的無效batch。也可以說,如果某個batch 是正確的,那麼永遠都無法創建一個欺詐證明表示其無效。
一級標題
如何進行壓縮?
一筆簡單的以太坊交易(發送ETH) 大小約為110 字節。而在rollup 上進行ETH 轉賬,大小僅為約12 字節:
其中一部分只是簡單的高級編碼:以太坊的RLP 編碼方式在每個值上會浪費1 字節。但是其中還包括一些機智的壓縮技巧:
➤ Nonce:這個參數的主要目的是預防重放攻擊。如果帳戶的當前隨機數為5,則該帳戶的下一個交易記錄必須包含隨機數5,但是交易一經處理,該帳戶中的隨機數將增加為6,因此無法再次處理該交易。在rollup 中,我們可以完全省去隨機數,因為我們可以直接從前狀態中恢復隨機數;如果有人嘗試使用先前的隨機數重放交易,簽名將無法驗證,因為會依據包含較高隨機數的數據來對簽名進行檢查。
➤ Gasprice:我們可以允許用戶按固定gas 價格範圍進行支付,例如2 的16 次冪。或者我們可以在每個batch 中收取固定的gas 費用,甚至可以將gas 費的支付完全移出rollup 協議,讓交易者使用通道向batch 創建者支付相應費用。
➤ To:可以用index 來替換20 字節的地址(例如,如果某地址是被添加到默克爾樹中的第4527個地址,我們只需使用index 4527 來表示即可。然後向狀態添加一個“子樹” (subtree) 來存儲index和地址本身的映射關係)。
➤ Signature:我們可以使用BLS 聚合簽名將大量簽名聚合成一個約為32-96 字節(取決於協議) 的簽名。該聚合簽名可以依據消息集和batch 的發送者集一次性進行檢檢查。表中的“~0.5” 表示一個聚合簽名中可以包含的簽名數量是有限制的,因為需要能夠在一個欺詐證明中對聚合簽名進行驗證。
一級標題
具備隱私保護功能的rollups 是一個重要例子:在optimistic rollup 中,每筆交易中用於隱私保護的ZK-SNARK 證明需要在鏈上,需要佔據約500 字節。而在ZK rollup 中,包含整個batch 的ZK-SNARK 已經證明了“內部” ZK-SNARK 的有效性。
一級標題
這些壓縮技巧是rollups 擴容性的關鍵,否則rollups 擴容性相較底層連只能提高約10 倍(雖然對於某些特定的計算密集型應用來說,簡單的rollups 方案已經足夠),而對數據進行壓縮後,幾乎對所有應用來說,擴容性都可以實現100 倍以上的提升。
一級標題
對於optimistic rollups 和ZK rollups 中交易的打包權有許多說法。一般來說,任何想要打包交易並且提交的用戶,必須要鎖定大量存款。如果用戶提交了包含欺詐/無效交易的batch (例如包含無效狀態根),那麼該用戶的存款的一部分會被銷毀,另一部分則作為欺詐證明者的獎勵。除此之外,還存在其他可能性:
➤ 中心化處理:存在一個行為者即排序者(sequencer) 提交batches (但提款存在例外:通常來說一個用戶可以首先提交提款請求,如果排序這沒有在下個batch 中處理該提款,那麼該用戶能夠自己提交一個batch)。這是最“高效”的方式,但是依賴於一個中心化的角色。
一級標題
➤ PoS 集隨機選擇:任何人都可以將ETH (或是rollup 協議的代幣) 存入rollup 合約,然後在存款人中隨機選擇每個batch 的排序者,被選中的可能性與鎖定資產成一定比例。這個方式的主要缺點在於會有大量資本被鎖定,而這是不必要的。
一級標題
一級標題
目前正在開發的一些rollup 項目採用了“獨立批量打包”的方式,也就是將提交二層交易的batch 和提交狀態根的過程分離。這種做法的優勢在於:
一級標題
2.如果某個狀態根是無效的,我們不需要回滾整個batch,可以只回滾狀態根,並等待他人提供該batch 的新狀態根。這保障了交易發送方的交易不會被回滾。
總之,在效率、簡潔性和抗審查性等方面的權衡十分複雜,許多方案也在進行探索。目前要判斷哪些概念是最佳組合還為時尚早,時間會證明一切。
以下表格是其他用例的例子:
rollup能在多大程度上實現擴容?
以下表格是其他用例的例子:
一級標題
現在,值得注意的是這些數據都過於樂觀了,原因有幾個。最重要的是,一個區塊幾乎不可能只包含一個batch,因為最起碼會有多個rollup。第二,存款和提款行為會一直存在。第三,在短期,使用率會比較低,所以固定成本會占主導。但即使這些因素都考慮到了,超過100 倍的擴容水平也有望成為常態。
一級標題
如果我們想每秒交易量達到1000-4000 呢(取決於特定的用例)?這就是eth2 數據分片發揮作用的時候了。分片協議為每12 秒提供16MB 的空間來容納任何數據,且系統確保數據可用性的共識。數據空間可以被rollup 使用。這大約每秒1398kb 的空間比現在以太坊鏈上每秒大約60kb 提高了23倍,且在更長期來看,數據容量有望繼續增加。因此,使用eth2 分片數據的rollup可以以每秒約10 萬筆交易的吞吐量批量處理,在未來可能更多。
一級標題
Rollup上還有哪些未解決的困難?
儘管rollup 的基本概念現在已為人所了解,我們確信它們是完全可行且安全的,現在多種rollup 已經部署到主網上,但rollup 設計還有很多領域未被充分探索,以及在實現橋接以太坊生態上大部分的活動到rollup 上,以利用它們的可擴容性這件事上,還存在不少困難。一些關鍵的困難包括:
原文鏈接:
結論
一級標題
原文鏈接:
原文鏈接:https://vitalik.ca/general/2021/01/05/rollup.html
ECN的翻譯工作旨在為中國以太坊社區傳遞優質資訊和學習資源,文章版權歸原作者所有,轉載須註明原文出處以及ETH中文站。若需長期轉載,請聯繫eth@ecn.co進行授權。
公眾號: ETH 中文站
ECN的翻譯工作旨在為中國以太坊社區傳遞優質資訊和學習資源,文章版權歸原作者所有,轉載須註明原文出處以及ETH中文站。若需長期轉載,請聯繫eth@ecn.co進行授權。


