原文標題:《 引介 | Rollup 不完全指南 》
撰文:Fulvia 翻譯 & 校對:Shengchao & 阿劍
Rollup 在當前的以太坊社區已經十分著名。在可預見的未來,Rollup 是以太坊實現擴容的關鍵解決方案 。但 Rollup 到底是什么?你能從這項技術身上得到什么,又該如何使用它?這篇文章將嘗試回答一些關鍵問題。
背景知識:什么是一層擴容,什么是二層擴容?
實現區塊鏈生態系統擴容有兩種方式。第一種擴容的方式是讓區塊鏈本身擁有更高的事務處理容量。比如讓區塊變得 “更大”,但 “大區塊” 會讓區塊鏈的驗證過程變得更為困難,而且可能會使節點更加中心化,為了避免這樣的風險,開發者可以提高客戶端軟體的效率。更加具有可持續性的擴容方式是,使用分片等技術,讓構建和驗證區塊鏈的工作分攤到許多不同的節點上—— “ eth2 ” 就在嘗試使用這種方式升級以太坊,
第二種擴容的方式是改變使用區塊鏈的方法。用戶不需要直接把所有的活動都直接放在區塊鏈主鏈上,而是在主鏈外的 “二層” 協議中執行大部分活動,并生成一個證明,證明鏈外發生的這一切活動都遵循規則,主鏈上部署一個智能合約,它只有兩個任務:處理存取款,以及對上述證明進行驗證,有多種方法實現證明和驗證,但它們都有一個共同的特性,那就是在鏈上驗證證明比在鏈下做原始計算的開銷要小得多,
狀態通道 vs plasma vs rollup
二層擴容主要有三種方案:狀態通道,Plasma 和 rollup,三種方案代表了三種不同的范式,每種方案有自己的優缺點,所有的二層擴容大致都屬于這三類(對于一些折衷的方案如何分類存在爭議,例如 “ validium ”)(編者注:中文譯本),
狀態通道如何工作?
另請參閱 https://www.jeffcoleman.ca/state-channels ,statechannels.org
想象一下,Alice 向 Bob 提供了網路連接服務,作為交換,Bob 為上網產生的流量支付 0.001 美元/MB 的費用給 Alice。Bob 不需要在一層主鏈支付每筆費用,雙方使用如下二層方案。
首先,Bob 將 1 美元(穩定幣,或是等值的 ETH)存入一個智能合約中。為了向 Alice 支付第一筆款項,Bob簽署了一張 “票據”(一條鏈外消息),“票據”上寫著 “0.001 美元”,并將其發送給Alice,為了支付第二筆款項,Bob 簽署另一張寫著 “$0.002” 的票據,并將其發送給 Alice。以此類推,每次付款都重復這個過程(譯者注:狀態通道參與方只需保留一個最新的狀態變更,因此新的票據簽署后,前一張票據作廢),當 Alice 和 Bob 完成交易后,Alice 可以將價值最高的票據包裹上自己的簽名后,發布到主鏈上(關閉通道)。智能合約會驗證 Alice 和 Bob 的簽名,驗證通過后,將 Bob 的票據上標注的金額支付給 Alice,剩下的金額(譯者注:1 美元減去前者)返還給 Bob,如果 Alice (出于惡意或技術故障)不愿意關閉通道,Bob可以發起一個提現挑戰期(例如7天)——如果 Alice 在這段時間內無法提供 Bob 支付的票據,那么 Bob 就可以拿回之前存在智能合約里的所有錢,
狀態通道技術很強大:廣義的狀態通道可以支持雙向支付、實現智能合約(例如 Alice 和 Bob 在通道中簽訂金融合約),并具有可組合性(如果 Alice 和 Bob 之間有一個開放的通道,Bob 和 Charlie 之間也有一個開放的通道,那么 Alice 就可以和 Charlie 進行免信任的交互)。但是通道的作用是有限制的:不能向還沒有加入通道的用戶在鏈下發送資金;不能用于沒有明確邏輯所有者的對象(比如 Uniswap 智能合約),此外,如果使用通道處理的事務比小額支付場景更復雜,需要鎖定大量的資金在通道中。
Plasma 如何工作
另請參閱 Plasma原始白皮書,Plasma Cash
要將資產從主鏈存入 Plasma 鏈,用戶需要在主鏈將資產發送至管理 Plasma 鏈的智能合約,Plasma 鏈會給該資產分配一個新的唯一 ID(例如 537),每條 Plasma 鏈都有一個操作者(這可能是一個中心化的角色,或者由多簽控制,也可以是更復雜的東西,例如一條 PoS 鏈或 DPoS 鏈)。每隔一段時間(可以是 15 秒,也可以是一小時,或者介于兩者之間的任何時長),操作者就會生成一個 “批處理”(batch),包含這段時間內所收到的所有 Plasma 鏈的交易。操作者生成一棵 Merkle 樹,在索引為 X 的葉子節點處,如果資產 ID 為 X 的資產在這一批次中發生了交易,則葉子節點上存有對應交易,否則該葉子節點為零。操作者將這棵樹的 Merkle 根發布到主鏈上,操作者還需要將每個索引 X 的 Merkle 分支發送給該資產的當前所有者,如果需要將資產從 Plasma 鏈提取至主鏈上,用戶需要給主鏈的智能合約發送該資產最近一次交易對應的 Merkle 分支,智能合約隨即開始了一個挑戰期(例如7天),在此期間,任何人都可以嘗試使用其他 Merkle 分支來證明:(i)用戶在提取資產時并不擁有該資產,或者(ii)用戶在某個時間點將資產發送給了其他人,從而使退出申請無效。如果在 7 天內沒有人證明退出是欺詐性的,用戶便可以成功取回資產。
Plasma 提供了比狀態通道更強的功能:你可以將資產發送給從未加入二層的用戶,鎖定的資金也低得多。但這是有代價的:狀態通道在 “正常運行” 時不需要將任何數據存入主鏈,但 Plasma 要求每條鏈每隔一段時間在主鏈發布一次哈希值。此外,Plasma 鏈中的交易沒有即時性,即必須等待一批交易(也可稱為 Plasma 區塊)的證據(即那個 Merkle 根值)發到主鏈上。
此外,Plasma 和狀態通道都有一個重要缺陷:其安全模型所對應的博弈論依賴于這樣的想法:兩個系統所控制的資產在邏輯層面都要有 “所有者”,只要資產所有者在乎自己的資產,那么當涉及該資產的狀態變更 “無效” 時,資產所有者就會想辦法出示變更 “無效” 的證明。這對一些應用來說無關緊要,但對不少其他應用來說這是個問題(例如 Uniswap)(譯者注:對于 Uniswap 這樣的 DEX 交易應用來說,其智能合約不屬于任何人,與上述安全假設依賴的想法矛盾)。即使系統中一個對象的狀態可以在未經系統所有者同意的情況下被改變(例如在基于賬戶的系統中,可以在未經所有者同意的情況下 增加 其余額),也不能很好地與 Plasma 兼容,這意味著,在現實中部署 plasma 或狀態通道時,都需要推演 “特定應用” 的潛在邏輯設計定制化方案,不太可能做出一個能完整模擬以太坊運行環境(即 “EVM”)的 plasma 或狀態通道系統,接下來讓我們看看 rollup 是如何解決這個問題的,
Rollup
另請參閱:EthHub 關于 optimistic rollup 的介紹,EthHub 關于 ZK rollup 的介紹
Plasma 和狀態通道方案都是 “完全的” layer 2 方案,因為它們將數據和計算都轉移到鏈下(即自己的二層系統中),然而,數據可得性的基本博弈論原理意味著這樣的系統不可能安全地實現所有應用。Plasma 和狀態通道通過明確資產對象和所有者之間的關系來解決這個問題,但這使它們無法完全通用,Rollup 則與前兩者不同,是一種具有 “混合性質” 的二層方案,Rollup 將計算(和完整的狀態存儲)轉移到鏈下,但在鏈上保存了每筆交易的部分數據資訊。為了提高效率,Rollup 使用了一系列花哨的壓縮技巧,并盡可能地用計算替代數據。其結果是,這個系統的可擴展性仍然受限于底層區塊鏈的數據帶寬,但在此基礎上實現的擴容倍數非常可觀:在以太坊主鏈執行一筆 ERC-20 代幣的轉賬大約消耗 45000 gas,但在 Rollup 中,每筆交易僅需要在主鏈上存儲 16 字節數據,消耗的 gas 小于 300。
數據存儲在主鏈是 Rollup 的關鍵因素(請注意:這同將數據存儲在 “IPFS” 上不同,因為 IPFS 不會對存儲的數據進行共識,Rollup 的數據則 必須 存儲在區塊鏈上),將數據存儲在主鏈并進行共識,使得任何人可以在本地處理 Rollup 中的所有操作,包括欺詐檢測,發起提款,生成批處理等。因為不存在數據可得性問題,所以運營者如果作惡或者離線所造成的損失相對更少(比如他們無法造成長達 1 周的退出延遲),也在誰有權發布批處理這個問題上提供了更多的可能性,同時也使 Rollup 更易于理解,更為重要的是,不存在數據可得性問題意味著,資產無需和所有者有明確的邏輯映射關系。相比其他二層擴容方案,這是以太坊社區對 Rollup 感到更加激動的重要因素:Rollup 是具有通用性的,比如可以在 Rollup 中運行 EVM,從而使現有的以太坊應用可以在不寫新代碼的情況下遷移至 Rollup,
Rollup 究竟如何工作?
在主鏈上有一個智能合約,存有一個狀態根 —— 表征 Rollup 狀態的 Merkle 根,(狀態內容包括 Rollup 中的賬戶余額,合約代碼等)
任何人都可以在主鏈上對該智能合約發起一個批處理事務(transaction),這個批處理是對一批 Rollup 內部事務的高度壓縮,還包括舊的狀態根和新的狀態根(在舊狀態根基礎上執行批處理交易之后生成的新狀態根)。主鏈合約會檢驗舊的狀態根與新的狀態根是否匹配(譯者注:即新的狀態根是否可以由這一批交易集觸發狀態轉換生成)。如果檢驗通過,主鏈上的舊狀態根會更新為新狀態根。
為了支持存款(譯者注:將資產從主鏈的其他地方存入 Rollup 合約)和取款(譯者注:解除 Rollup 合約對自己資產的控制,使之返回到鏈上其他地方),批處理中的事務的輸入或輸出可以是 Rollup “外部”(譯者注:即主鏈其他地方)的狀態。如果批處理中有交易的輸入來自 Rollup 之外,那么這個批處理操作會將主鏈其他地方的資產轉移至 Rollup 合約中。如果批處理中有交易的輸出來自 Rollup 之外,那么這個批處理會觸發智能合約中的取款操作,將資產從 Rollup 取回主鏈,
整個過程就這么簡單!不過還有一個細節。如何知道批處理執行完成之后的狀態根是正確的? 如果有人可以提交一個偽造的狀態根,而不產生任何后果,他們就可以把所有的資產轉移給自己。這個問題很關鍵,因為這個問題有兩種截然不同的解決辦法,從而形成了兩種類型的 Rollup,
Optimistic rollups vs ZK rollups
Rollup 的兩種類型包括:
- Optimistic Rollup,使用 欺詐證明解決上述問題:主鏈的 Rollup 合約記錄了該 Rollup 內部狀態根變更的完整記錄,以及每個(觸發狀態根變更的)批處理的哈希值,如果有人發現某個批處理對應的新狀態根是錯誤的,他們可以在主鏈上發布一個證明,證明該批處理生成的新狀態根是錯誤的,合約校驗該證明,如果校驗通過則對該批處理之后的所有批處理交易全部回滾。
- ZK Rollup, 使用有效性證明解決上述問題: 每個批處理中包含一個稱為 ZK-SNARK 的密碼學證明(例如使用PLONK協議, 證明新狀態可以由舊狀態經此批處理操作后轉換而來(譯者注:在 ZK Rollup 中,提交的密碼學證明只需要具有尺寸小,驗證快的特性即可,無需具有零知識性,所以只需要 SNARK 即可實現 ZK Rollup,不是一定需要 ZK-SNARK,事實上,在 ZK Rollup 中,因為批處理交易資訊存儲在主鏈上,而這些資訊恰是密碼學證明系統中所證明的內容,因此 ZK Rollup 本身并不具有零知識性,具有零知識性的 ZK Rollup 被稱為 ZK ZK Rollup),無論批處理的計算量多大,都可以在主鏈上高效對證明進行驗證,
這兩種 Rollup 之間的設計權衡比較復雜
性質Optimistic RollupZK Rollup每個批處理在主鏈上的固定 gas 開銷約 40,000 (開銷相對輕量,主要操作是改變狀態根的值)約 500,000(對于 ZK-SNARK 的驗證開銷相對較大)提現周期約 1 周 (需要留出時間,看是否有人提出欺詐證明,從而取消無效提現申請)非常快 (在提交提現申請后的下個批處理即可完成)技術復雜度低高 (ZK-SNARKs 技術較新,在數學層面相對更復雜)實現通用性的難度相對更容易 (很快就可以將實現通用性 EVM 的 Rollup 部署在主網中)相對更難(使用 ZK-SNARK 證明具有通用性的 EVM 執行操作比證明簡單的計算操作難得多,當然(例如 Cairo)等工作正在努力簡化該過程)Rollup 中每筆事務的成本相對更高相對更低 (如果事務數據中的某些部分只用來驗證該事務的有效性,而不涉及狀態變更,這部分數據就可以不存儲在主鏈上,而在 Optimisitc Rollup 中需要存儲所有數據,用于后續欺詐證明的生成和校驗)鏈下計算的開銷相對更低(雖然需要更多的全節點進行重計算)相對更高 (生成 ZK-SNARK 證明,特別是生成通用計算的證明開銷可能很大,比直接計算要大好幾千倍)
總的來說我自己的觀點是,短期內 Optimisitc Rollup 很可能在實現具有通用性的 EVM 中勝出,ZK Rollup 很可能在簡單的支付、轉賬和其他特定應用中勝出,但從中長期來看,隨著 ZK-SNARK 技術的改進,ZK Rollup 將在所有應用場景中勝出。
剖析欺詐證明
Optimistic Rollup 的安全性取決于這樣的想法:如果有人將一個無效的批處理發布到 Rollup 中,任何 同步了該鏈的人只要發現欺詐行為便可以向主鏈上的合約發布欺詐證明,證明該批處理是無效的,應該被回滾(譯者注:不清楚作者這里的 “該鏈(the chain)” 到底是指主鏈,還是指 Rollup,雖然都是對的)。
一個斷言某個批處理無效的欺詐證明需要包括上圖中以綠色標識的數據:該批處理本身(可與存儲在鏈上的哈希值進行核對)以及證明該批處理讀取或修改了特定賬戶的默克爾樹路徑。黃色的節點可以通過綠色的節點重建,所以無需包含在證明中。這些數據足以執行批處理并計算新的狀態根(請注意,這與無狀態客戶端驗證單個區塊的方式完全相同)。如果計算出的新狀態根和批處理中提供的新狀態根不一樣,那么就證明了該批處理是欺詐的。
可以確保的是,如果一個批處理中存在錯誤,而在此之前的所有批處理都是正確的,那么就可以創建一個欺詐證明,證明該批處理的構造是錯誤的。注意如果在 Rollup 中有多個無效的批處理,那么最好盡量證明最早的那個批處理無效,當然可以確保的是,如果一個批處理是正確的,那么永遠不可能創建一個欺詐證明,證明該批處理是無效的,
壓縮是如何實現的?
一筆最簡單的以太坊轉賬(發送 ETH)大約需要 110 字節,但是在 Rollup 中實現 ETH 轉賬只需要大約 12 字節:
參數(單位:字節數)以太坊主鏈Rollup 合約Nonce (流水號)~30Gasprice~80-0.5Gas30-0.5To (目標地址)214Value (轉移價值)~9~3Signature (簽名)~68(2 + 33 + 33)~0.5From (發起地址)0(從簽名中還原)4總計~112~12
這其中的部分原因是 Rollup 可以采用更簡單的高級編碼技巧,而目前以太坊的 RLP 在每個值的長度上浪費了1個字節,同時 Rollup 還運用了一些非常聰明的壓縮技巧。
- Nonce:這個參數的目的是為了防止重放。如果一個賬戶狀態當前的 nonce 是 5,那么該賬戶的下一筆交易的 nonce 參數必須是5,但是一旦交易被處理,賬戶狀態中的 nonce 就會被遞增為 6,這樣 nonce 為 5 的交易就不會再被打包。在 Rollup 中,我們可以完全省略 nonce,因為我們只需要從更新前狀態中恢復 nonce;如果有人試圖用較早的 nonce 重放交易,簽名將無法通過驗證,因為簽名校驗將使用 nonce 更大的數據。
- Gas Price:我們可以允許用戶使用固定范圍的 Gas 價格進行支付,例如范圍是 0 – 2 的 16 次冪,另外,我們也可以只為每個批處理收取固定的費用,甚至可以將 gas 支付完全移到 Rollup 之外,讓交易者通過特定渠道向批處理創建者支付費用。
- Gas:我們同樣可以只是將 Gas 總量范圍選擇為 2 的冪,另外,我們也可以只在批處理層面設置 Gas 限制。(譯者注:這里的 Gas Price 和 Gas,都是為了比較通過 rollup 合約和以太坊網路來轉賬所產生的數據量。并不代表一個 rollup 協議一定要包含這些概念。比如 Fuel 作為一種 Optimistic Rollup 協議,就是基于 UTXO 的,完全不包含這些概念。)
- To:我們可以用 索引 代替 20 字節的地址(例如,如果一個地址是添加到樹上的第 4527 個地址,我們就用索引 4527 來表示。我們會在狀態中添加一個子樹來存儲索引到地址的映射),
- Value:我們可以用科學計數法來存儲 Value,在大多數情況下,轉賬只需要 1-3 個有效位,
- Signature:我們可以使用 BLS 聚合簽名,使許多簽名聚合成一個約 32 – 96 字節(具體大小取決于所使用的協議)的簽名。然后,這個簽名可以一次性對整個消息集和發送者進行批處理的簽名校驗。表中的 ~0.5 表示在一個主鏈區塊中可以驗證的聚合簽名數量是有限的,因此如果批處理中的交易較多,需要約每 100 筆交易生成一次聚合簽名。(譯者注:大意是,驗證聚合簽名的計算量會隨被聚合的原始簽名的數量增加而增加,而以太坊主鏈區塊可以使用的 Gas 數量是有上限的,因此聚合簽名不能一次性聚合太多原始簽名,)
ZK Rollup 有一個特殊的重要壓縮技巧:如果交易的一部分只用于驗證,與計算狀態更新無關,那么這部分數據可以不存儲在主鏈上。這在 Optimisitc Rollup 中是做不到的,因為該數據仍然需要存儲在鏈上,以備后續欺詐證明校驗的不時之需,而在ZK Rollup 中,證明某批處理數據正確性的 SNARK 證明,已經證明了相關方提供了所有驗證所需的數據,一個重要的例子是實現具有隱私保護性質的 Rollup:在 Optimisitc Rollup 中實現隱私保護,每筆交易中用于保護隱私的約 500 字節的 ZK-SNARK 需要上鏈,而在 ZK Rollup 中實現隱私保護,覆蓋整個批處理的 ZK-SNARK 已經可以證明 “內部 “的 ZK-SNARK 是有效的,(譯者注:由于 SNARK 可以嵌套,故在 ZK Rollup 中實現隱私保護,只需將最終生成的最外層的 SNARK 提交上鏈即可,在驗證外層 SNARK 時,內層的 SNARK 的有效性同時可以得到驗證,)
這些壓縮技巧是 Rollup 實現擴容的關鍵,如果沒有這些技巧,Rollup 或許只能在主鏈的擴容基礎上實現大約 10 倍的擴容(盡管在一些特定的大計算量的應用中,簡單的 Rollup 實現的擴容已經很強大),但在使用了壓縮技巧之后,幾乎所有應用的擴容系數都可以超過 100 倍,
誰可以提交批處理?
對于哪些人可以在 Optimistic Rollup 或 ZK Rollup 中提交批處理這個問題,已經存在許多流派。一般來說,大家都認為提交批處理的用戶必須質押一大筆押金,如果某用戶曾經提交過一個具有欺詐性的批處理(例如提交一個無效的狀態根),那么這筆押金的一部分將被燃燒銷毀,另一部分獎勵給提交欺詐證明的用戶,但除此之外,還存在許多可能:
(譯者注,可以將批處理發布到主鏈上的用戶稱為 sequencer(排序者),該術語得名原因是該角色需要對批處理中的交易進行排序)
- 完全無許可的排序者:任何人都可以在任何時候提交批處理。這個方法最簡單,但有一些嚴重的缺點,比如存在這樣的問題:多個參與者同時生成并試圖提交批處理,而其中僅有一個批處理可以成功被收錄,這將導致在生成證明的計算開銷或提交證明時的 Gas 開銷有大量被浪費。
- 中心化的排序者:通過排序者這樣的角色提交批處理(提現操作除外:在提現操作中,首先由用戶自己提交提現請求,如果排序者在下一個批處理中沒有處理該筆提現交易,那么用戶可以親自提交一個僅包含一筆提現交易的批處理申請)。這種方法“效率”最高,但需要依賴一個中心化的角色。
- 排序者拍賣:通過拍賣(比如每天)來決定誰有權利成為第二天的排序者。這種方案的優點是可以籌集資金,而這些資金可以通過 Rollup 的 DAO 來分配(參考MEV 拍賣)。
- 從 PoS 集合中隨機選擇:任何人都可以將 ETH(或者 Rollup 協議設定的代幣)存入 Rollup 合約中,每一個批處理的排序者都會在這些存款人中隨機選取,被選中的概率與存款金額成正比,這種方案的主要缺點是需要鎖定大量資產,
- DPoS 投票:某些排序者通過拍賣選取后執行批處理,但如果他們表現不佳,那么代幣持有者可以投票將其踢出,并舉行新的拍賣來替代他們。
將批處理和狀態根提交分開
目前正在開發的一些 Rollup 采用的是 “分割-批處理”(”split batch”)模式,即提交一批二層交易批處理的行為和提交一個狀態根的行為是分開進行的,這其中有一些關鍵的優勢,
- 你可以允許許多排序者并行發布批次,以提高抗審查能力,減輕對于某些批處理會因為其他一些批處理提前打包而無效的擔心。
- 如果一個狀態根存在欺詐,無需回滾整個批處理,可以只回滾狀態根,并等待有人為同一批處理提供新的狀態根。這樣可以更好地確保交易發送者的交易不會被還回滾。
總的來說,這是一個相當復雜的技術組合,還在涉及效率,簡單性,抗審查性和其他目標的復雜權衡中找到平衡。現在說這哪種組合最有效還為時過早,時間會證明一切。
Rollup 會帶來多大的擴容?
在現有的以太坊主鏈上,每個區塊的 Gas 上線是 1250 萬,而交易的每個字節存儲在鏈上花費 16 Gas。這意味著,如果一個區塊中只包含一個批處理(這里假設使用 ZK Rollup,校驗證明花費 50 萬 Gas),那么這個批處理可以包含 1200 萬 / 16 = 75 萬字節的數據,而如上文所述,Rollup 中的每一筆 ETH 轉賬只需要 12 字節的存儲空間,這意味著每個批處理中可以包含 62500 筆交易,目前以太坊主鏈的區塊間隔是 13 秒,也就是說實現的 TPS 約為 4807(相比之下,以太坊主鏈上實現 ETH 轉賬的 TPS 約為 1250000 / 21000 / 13 = 45)。
下表中包含了其他一些應用場景的擴容效率,
應用場景Rollup 內單筆對應操作需上鏈的字節數以太坊主鏈對應操作的 Gas 消耗最大擴容倍數ETH 轉賬1221,000105xERC20 轉賬16 (多出的 4 個字節用于表示 token)~50,000187xUniswap 交易~14(發送者 4 個字節 + 接收者 4 個字節 + 交易金額 3 個字節 + 最大價格 1 個字節 + 1 個字節雜項)~100,000428x具有隱私保護性的提現操作(Optimisic Rollup)296(根索引 4 個字節 + nullifier 4 個字節 + 接收者 4 個字節 + ZK-SNARK 證明 256 個字節)~380,00077x具有隱私保護性的提現操作(ZK Rollup)40 (根索引 4 個字節+ nullifier 32 個字節 + 接收者 4 個字節)~380,000570x
最大擴容倍數計算方法:以太坊主鏈對應操作的 Gas 消耗 / (Rollup 中對應操作需上鏈的字節數 * 16) * 1200萬 / 1250 萬
需要說明的是,出于某些原因,這些數字其實是過于樂觀的,最重要的原因是,一個區塊中幾乎不可能只包含一個批處理,因為到時會有多個不同的 Rollup 系統,第二個原因是,存款和提現操作始終將會存在。第三個原因是,短期內 Rollup 的使用量可能較低,因此固定成本的收費模式會占據主導,不過即使考慮了這些因素,超過 100 倍的擴容應該不難實現,
那如果我們想要實現 1000-4000 TPS(取決于具體的應用場景)呢?這就需要 eth2 數據分片了,在這個提案中,每 12 秒開辟一個 16MB 的存儲空間,這個存儲空間可以被任何數據填滿,系統將確保對這些數據的可用性達成共識。這個數據空間可以被 Rollup 使用。這個約 1398kB/秒的數據吞吐量比當前以太坊主鏈的約 60 kB/秒提高了 23 倍,從長遠來看,數據容量有望進一步增長。因此,使用 eth2 數據分片實現的 Rollup 的 TPS 可以高達 10萬,在未來甚至會更大。
還有哪些尚未解決的挑戰?
雖然現在 Rollup 的基本概念已經被人們所熟知,我們也很確定 Rollup 從本質上說上是可行的、安全的,而且已經有多個 Rollup 在以太坊主網部署,但 Rollup 在設計層面仍有許多地方沒有被很好地探索,如果要將以太坊生態系統的大部分都完全引入 Rollup 從而利用其擴容性,這方面仍存在不少挑戰,一些關鍵的挑戰包括:
- 用戶和生態系統的入駐:目前使用 Rollup 的應用不多,用戶對 Rollup 不熟悉,很少有錢包開始整合 Rollup,商家和慈善機構還不接受它們用于支付。
- 跨 Rollup 交易:有效地將資產和數據(如預言機輸出)從一個 Rollup 轉移到另一個 Rollup 中,而不需要通過主鏈中轉并產生相應費用。
- 審計激勵:如何最大限度地提高至少有一個誠實節點會完全驗證 Optimistic Rollup 的概率,從而確保在出現問題時有人發布欺詐證明?對于小規模的 Rollup(TPS 幾百以下)來說,這不是一個重要的問題,可以簡單地依靠利他主義實現,但對于更大規模的 Rollup 來說,需要把激勵問題研究清楚。
- 探索在 Plasma 和 Rollup 兩者之間設計的可能性:是否有技術可以把 部分 與狀態更新相關的數據放在鏈上,但不把 全部 數據放在鏈上?通過這種技術是否會誕生出新的有用的工具?
- 最大限度地提高預確認的安全性:很多 Rollup 為了讓用戶體驗更好,提供了一個 “預確認” 的概念,即在交易完成后,排序者即刻提供一個承諾:某筆交易將被包含在下一批處理中,如果排序者食言,他們的押金將被銷毀,但是這種方案在經濟層面的安全性是有限的,因為排序者可能同時向非常多的用戶做出很多承諾。這個機制是否可以改進?
- 提高對缺席排序器的響應速度:如果一個 Rollup 的排序者突然離線,那么如何最大限度地快速以及低成本地從這種情況中恢復,要么快速和低成本地大規模退出到另一個 Rollup,要么更換排序者,快速響應這是非常有價值的,
- 高效的 ZK-VM:生成一個ZK-SNARK證明,證明具有通用性的 EVM 代碼(或現有合約可以編譯到的另一種 VM)已經正確執行,并有一個確定的結果。
總結
Rollup 是一種新的強大的二層擴容范式,預計將成為以太坊未來短期和中期(也可能是長期)實現擴容的基石,以太坊社區對于 Rollup 非常興奮,因為與之前的二層擴容嘗試不同,Rollup 可以支持通用的 EVM 代碼,允許現有的應用程式輕松遷移過來。Rollup 通過做出一個關鍵的妥協來實現這一目標:不試圖完全搬到鏈下,而是將每筆交易的少量數據保留在鏈上。(譯者注:即上文所說的沒有數據可得性問題)
Rollup 有很多種,設計上也有很多選擇:使用欺詐證明的 Optimisitc Rollup,使用有效性證明的ZK Rollup。排序者可以是一個中心化的角色,也可以是一個去中心化的自由角色,或者是介于兩者之間的許多其他選擇,Rollup 仍然是一項早期階段的技術,開發正在快速地繼續,但它們是有效的,一些(特別是 Loopring、ZKSync 和 DeversiFi)已經運行了幾個月,期待在未來的幾年里,Rollup 領域會有更多令人興奮的成果出現。