本文原文作者為Vitalik ,翻譯校對: TinTinLand
Rollups 在以太坊社區中風靡一時,有望在未來成為以太坊的關鍵可擴展性解決方案。但是這項技術到底是什麼,從中值得期待什麼?又將如何使用它?本文在分析以太坊幾個重要擴展方案的基礎上,試圖回答Rollups 相關的一些關鍵問題。
背景:什麼是L1 和L2 ?
有兩種方法可以擴展區塊鏈生態系統。第一種,可以讓區塊鏈本身擁有更高的交易能力。這種技術面臨的主要挑戰是,具有“更大區塊”的區塊鏈本質上更難以驗證,並且可能變得更加集中。為了避免這種風險,開發人員可以提高客戶端軟件的效率,或者持續地使用諸如分片之類的技術,以允許在多個節點上拆分構建和驗證鏈的工作。也就是目前正在構建的以太坊的升級。
第二種,可以更改使用區塊鏈的方式。用戶不是將所有活動直接放在區塊鏈上,而是在“第2層”協議中,在鏈下執行大部分活動。鏈上有一個智能合約,它只有兩個任務:處理存款和取款,以及驗證鏈下發生的一切都遵循規則的證據。有多種方法可以進行這些證明,但它們都具有一個共同的特性,即在鏈上驗證證明比在鏈下進行原始計算要便宜得多。
狀態通道 vs Plasma vs Rollups
L2 層方案有狀態通道、Plasma 和Rollups 這三種主要類型。它們屬於不同範式,具有不同的優缺點,下面將分別敘述這三種不同方案的運作方式。
狀態通道如何運作
假設一個具體案例,Alice 為Bob 提供了一個網絡連接,Bob 以每兆0.001美元的價格支付費用。他們的交易不是每一次都要付款,而是使用以下L2方案。
首先,Bob 將1美元( ETH或穩定幣等價物)放入智能合約中。為了向Alice 支付第一筆款項,Bob 簽署了一張“票證”(一條鏈下消息),上面寫著“0.001美元”,並將其發送給Alice 。為了進行第二次付款,Bob 會簽署另一張寫著“$ 0.002”的票,並將其發送給Alice 。依此類推,根據需要支付盡可能多的款項。當Alice 和Bob 完成交易後,Alice 可以將最高價值的票據發佈到鏈上,並包裝在自己的另一個簽名中。智能合約驗證了Alice 和Bob 的簽名,向Alice 支付了Bob 票上的金額,並將其餘部分退還給Bob。如果Alice 不願意關閉通道(由於惡意或技術故障),Bob 可以啟動一個退出期(例如7天);如果Alice 在這段時間內沒有提供票據,那麼Bob 就會拿回他所有的錢。
這種技術強大之處在於:它可以調整處理雙向支付的智能合約關係。例如Alice 和Bob 在頻道內簽訂合約,以及如果Alice 和Bob 有一個開放的渠道,Bob 和Charlie 也是如此,Alice 可以與Charlie 進行無信任的互動。
但是,channels 可以做的事情是有限的。比如不能使用channels 將資金從鏈下發送給尚未參與的人。 channels 不能用於表示沒有明確邏輯所有者的對象(例如Uniswap )。相比簡單的經常性支付,如果有更複雜的需求,則需要大量的資金來鎖定。
另請參閱:https://www.jeffcoleman.ca/state-channels 和statechannels.org
Plasma 如何運作
為了存入資產,用戶將其發送到管理Plasma 鏈的智能合約。 Plasma 鍊為該資產分配一個新的唯一ID(例如537)。每個Plasma 鏈都有一個運算符(這可能是一個集中式的參與者,或者是一個多重簽名,或者更複雜的東西,如PoS或DPoS)。每個間隔(可能是15秒,或一小時,或介於兩者之間的任何時間),操作員都會生成一個“ batch ”,其中包含他們從鏈下收到的所有Plasma 交易。它們生成一個Merkle 樹,其中在樹中的每個索引處,如果存在這樣的交易,則有一個事務轉移資產ID,否則該葉子為零。
他們還將每個索引的Merkle 分支發送給該資產的當前所有者。要提取資產,用戶將發布最近事務的Merkle 分支,並將資產發送給他們。合約開始一個挑戰期,在此期間,任何人都可以嘗試使用其他Merkle分支來證明退出無效,方法是(i)發送方在發送資產時不擁有資產,(ii)他們在稍後的某個時間點將資產發送給其他人。如果7天內沒有人證明退出是欺詐性的,用戶可以撤回資產。
Plasma 提供比狀態通道(State channels)更強的屬性:可以將資產發送給從未參與系統的參與者,並且資金要求很低。代價則是:在“正常操作”期間,通道不需要任何數據就可以上鍊,但Plasma 要求每條鏈定期發布一個哈希值。此外,Plasma 體轉移不是即時的,必須等到間隔期結束以及區塊公開上鍊。
此外,Plasma 和通道有一個共同的弱點:它們之所以安全的背後依賴於這樣一種理論——兩個系統控制的每個對像都有一些邏輯上的“所有者”。如果該所有者不關心他們的資產,則可能導致涉及該資產的“無效”結果。這對於許多應用程序來說是可以的,但對於許多其他應用程序來說,是一個交易破壞者。即使是在未經所有者同意的情況下更改對象狀態的系統(例如基於帳戶的系統,您可以在未經他們同意的情況下增加某人的餘額)也無法很好地使用Plasma。這意味著在Plasma 或通道部署中,需要大量的“特定於應用程序的推理”,並且不可能製作一個僅模擬整個以太坊環境(或“EVM”)的Plasma 或通道系統。為了解決這個問題,讓我們開始了解第三種方案——Rollups。
另請參閱: http://plasma.io/plasma-deprecated.pdf
Rollups 如何運作
關於Rollups
Plasma 和通道是“完整的” L2 方案,因為它們試圖將數據和計算都移出鏈下。但是,圍繞數據可用性的基本博弈論問題意味著,不可能對所有應用程序都安全地執行此操作。 Plasma 和通道通過依賴所有者概念來解決這個問題,但這影響了他們的應用範圍。然而,Rollups 是一種“混合” L2 方案。 Rollups 將計算(和狀態存儲)移動到鏈下,但將每個任務的部分數據保留在鏈上。為了提高效率,他們使用了大量複雜的壓縮技巧,盡可能用計算來替換數據。結果是系統中可擴展性仍然受到底層區塊鏈的數據帶寬的限制,但受限的程度低:以太坊基礎層ERC20 令牌傳輸的成本約為45000 gas,而Rollups 中的ERC20 令牌傳輸佔用16字節的鏈上空間,成本低於300 gas。
值得注意的是,將數據“放在IPFS上”是行不通的,因為IPFS 沒有就任何給定的數據是否可用,達成共識,數據必須在區塊鏈上。有了將數據放在鏈上這一共識,Rollups 允許任何人根據需要在本地處理任何操作,允許他們檢測欺詐、發起提款或親自開始生成交易batch 。缺乏數據可用性問題意味著惡意或離線操作員可以造成的傷害更小(如他們不能造成1週的延遲),Rollups 更容易推理,為有權發布batch 的人開闢了更大的使用空間。最重要的是,缺乏數據可用性問題意味著不再需要將資產映射到所有者,這使得以太坊社區對Rollups 擴展方案十分感興趣,Rollups是完全通用的,甚至可以在Rollups 中運行EVM, 允許現有的以太坊應用程序遷移到Rollups,幾乎不需要編寫任何新代碼。
另請參閱:https://docs.ethhub.io/ethereum-roadmap/layer-2-scaling/optimistic_rollups/
Rollups 工作原理
鏈上有一個智能合約,它維護一個狀態根:Rollups 狀態的Merkle 根(意思是賬戶餘額、合約代碼等,在Rollups 的“內部”)。
任何人都可以發布batch ,即高度壓縮的事務集,以及以前的狀態根和新的狀態根(處理事務後的Merkle 根)。合約檢查batch 中的上一個狀態根,是否與其當前狀態根匹配;如果匹配,它會將狀態根切換到新的狀態根。
為了支持存款和取款,添加了輸入或輸出“超出”匯總狀態的事務的功能。如果batch 具有來自外部的輸入,則提交batch 的事務還需要將這些資產轉移到Rollups 合約。如果一個batch 有輸出到外部,那麼在處理該batch 時,智能合約會啟動這些提款。
如何知道batch 中的後狀態根源是正確的?如果有人可以提交一個具有任何post-state root 的batch 而不會產生任何後果,那麼他們可以將Rollups 中的所有硬幣轉移給自己。這個問題很關鍵,對此產生了兩個截然不同的解決方案系列,導致了兩種不同的Rollups。
Optimistic Rollups 與ZK Rollups
這兩種類型的Rollups 分別是:
Optimistic Rollups(樂觀Rollups),使用欺詐證明:Rollups 合約跟踪其狀態根的整個歷史記錄和每個batch 的哈希。如果有人發現一個batch 具有不正確的後狀態根,他們可以發布一個證明來鏈接,證明該batch 的計算不正確。合約將驗證證明,並還原該batch 及其之後的所有batch 。
ZKRollups(零知識Rollups),使用有效性證明:每個batch 都包含一個稱為ZK-SNARK 的加密證明(例如使用PLONK 協議),它證明post-state root 是執行batch 的正確結果。無論計算量有多大,證明都可以在鏈上非常快速地驗證。
在兩種類型的Rollups之間存在復雜的權衡:
總的來說,在短期內,Optimistic的Rollups 可能會在通用EVM 計算中勝出,而ZK Rollups 可能會在簡單的支付、交換和其他特定於應用程序的用例中勝出。
欺詐證明剖析
Optimistic Rollups 的安全性取決於這樣一種設想,即如果有人將無效batch 發佈到Rollups 中,則檢測到欺詐的任何其他人都可以發布欺詐證明,向合約證明該batch 無效,應該恢復。
據上圖可知,聲稱batch 無效的欺詐證明將包含綠色數據:batch 本身(可以根據存儲在鏈上的哈希進行檢查)以及Merkle 樹的部分,這些部分只需要證明由batch 讀取和/或修改的特定帳戶。黃色樹中的節點可以從綠色的節點重建,因此不需要提供。此數據足以執行batch 併計算後狀態根(請注意,這與無狀態客戶端驗證單個塊的方式完全相同)。如果計算出的狀態後根和batch 中提供的後狀態根不相同,則該batch 是欺詐性的。
可以確定的是,如果batch 構造不正確,並且所有以前的batch 都正確構造,則可能會創建欺詐證明,表明該batch 構造不正確。請注意有關以前batch 的聲明:如果有多個無效batch 發佈到Rollups 中,則最好嘗試證明最早的batch 無效。當然,如果batch 構建正確,則永遠不可能創建欺詐證明,證明該batch 無效。
數據壓縮原理
一個簡單的以太坊交易(發送ETH)需要大約110個字節。但是,Rollups 中的ETH 傳輸僅佔用約12個字節:
其中一部分只是高級編碼:以太坊的RLP 在每個值的長度上浪費了1個字節。但是也包含了一定的壓縮技巧:
Nonce:此參數的目的是防止重放攻擊。如果帳戶的當前Nonce 為5,則該帳戶的下一筆交易必須具有Nonce 5,一旦處理了交易,帳戶中的隨機數將增加到6,因此無法再次處理該交易。在Rollups 中,我們可以完全省略隨機數,因為我們只是從前狀態中恢復隨機數;如果有人嘗試使用較早的隨機數重放交易,則簽名將無法驗證,因為簽名將針對包含更高Nonce 的數據進行檢查。
Gasprice:我們允許用戶以固定範圍的Gasprice 付款,如2的16次冪。或者可以在每個batch 中都有一個固定的費用,甚至將gas 支付完全轉移到Rollups 協議之外,並讓交易參與者通過狀態通道向batch 創建者支付費用。
Gas:我們同樣可以將總Gas 限制為2的多次冪。或者在batch 級別設置Gas 限制。
To:我們可以用index 替換20字節的地址。如果一個地址是添加到樹中的第4527個地址,我們只使用index 4527來引用它,將向狀態添加一個子樹(subtree),以存儲index到地址。
Value:我們可以用科學記數法存儲值。在大多數情況下,轉賬只需要1-3位有效數字。
Signature:我們可以使用BLS 聚合簽名,它允許將大量簽名聚合成單個約32-96字節(取決於協議)的簽名。然後,可以針對一個batch 中的整組消息和發件人檢查此簽名。表中的“約0.5”表示在聚合中可以組合的簽名數量存在限制,可以在單個塊中驗證,因此大批量約每100 個事務需要一個簽名。
ZK Rollups 的一個重要壓縮技巧是,如果交易的一部分僅用於驗證,並且與計算狀態更新無關,則該部分可以留在鏈下。 Optimistic Rollups 則無法做到,因為如果以後需要在欺詐證明中檢查數據,則仍需要將數據包含在鏈上,而在ZKRollups 中,證明batch 正確性的SNARK 已經證明提供了驗證所需的任何數據。具備隱私保護功能的rollups 是一個重要例子:在Optimistic Rollups 中,每個交易中用於隱私的約500字節,ZK-SNARK 需要在鏈上;而在ZKRollups 中,覆蓋整個batch 的ZK-SNARK 已經毫無疑問地表明“內部” ZK-SNARK 是有效的。
這些壓縮技巧是Rollups 可延展性的關鍵。如果沒有它們,Rollups 可能只是基本鏈可擴展性的10倍左右(儘管有一些特定的計算密集型應用程序,即使是簡單的Rollups 也很強大),而進行數據壓縮後,幾乎所有應用的擴容性都可以實現100 倍以上的提升。
誰可以提交batch ?
對於誰可以在Optimistic或ZKRollups 中提交batch ,有許多說法。一般來說,每個人都同意,為了能夠提交batch ,用戶必須支付大筆存款;如果該用戶曾經提交欺詐性batch (例如具有無效的狀態根),則該存款將被部分銷毀,部分作為獎勵給予欺詐證明者。但除此之外,還有很多可能性:
完全無政府狀態:任何人都可以隨時提交batch 。這是最簡單的方法,但它有一些重要的缺點。一旦存在多個參與者,同時生成並嘗試並行提交batch,但最終只有一個batch 能被成功打包。這導致在生成證明方面浪費大量精力,以及將batch 發佈到鏈中浪費Gas。
中心化處理:存在一個排序者(sequencer)來提交batch (提款除外:通常的技術是用戶可以先提交提款請求,然後如果排序器在下一批中沒有處理該提款,那麼用戶可以自己提交單個操作batch )。這是最“高效”的,但它依賴於一個核心的actor 來操作。
排序者拍賣:舉行拍賣(例如每天)以確定誰有權成為第二天的排序者。這種技術的優勢在於它能籌集資金,通過Rollups 控制的DAO來進一步分配。 (參見:MEV 拍賣)
從PoS 集合中隨機選擇:任何人都可以將ETH(或者可能是Rollups 自己的協議令牌)存入Rollups 合約,並且每個batch 的排序者是從其中一個存款人中隨機選擇的,被選中的概率與存入的金額成正比。這種技術的主要缺點是它會導致大量不必要的資本鎖定。
DPoS 投票:序列者在拍賣中被選中,但如果他們表現不佳,代幣持有者可以投票將他們踢出並舉行新的拍賣。
拆分批處理和狀態根供應
目前正在開發的Rollups 使用“拆分批處理”的方式,即提交一批L2 操作和提交狀態根的操作是分開完成的。這有一些關鍵優勢:
可以允許許多排序者並行發布batch ,以提高抗審查性,而不必擔心某些batch 會因為某些其他batch 首先被包含而無效。
如果狀態根是欺詐性的,則無需還原整個batch ;您可以只還原狀態根,並等待某人為同一batch 提供新的狀態根。這為交易發送者提供了更好的保證,即他們的交易不會被還原。
總而言之,這是一個相當複雜的技術,試圖在效率,簡單性,抗審查性和其他目標的複雜權衡之間取得平衡。現在說這些想法的哪種組合效果最好還為時過早。時間會證明一切。
Rollups 能帶來多少擴展?
在現有的以太坊鏈上,gas 限制為1250萬,交易中每個字節的數據花費16 gas。這意味著,如果一個塊只包含單個batch (我們假設使用了ZKRollups,花費50萬gas 進行證明驗證),則該batch 可以有(1200萬/ 16)= 750,000字節的數據。如上所示,ETH 傳輸的Rollups 每個用戶操作只需要12個字節,這意味著該批最多可以包含62,500個事務。在13秒的平均區塊時間下,這相當於約4807 TPS(相比之下,以太坊本身的直接ETH 轉賬為1250萬/ 21000 / 13 ~= 45 TPS)。
以下是其他一些示例用例的圖表:
最大可擴展性增益的計算公式為(L1 gas 成本)/(Rollups中的字節數* 16)* 1200 萬/ 1250 萬。
值得注意的是,這些數字過於樂觀。一個塊幾乎永遠不會只包含一個batch ,至少因為存在並且將有多個Rollups。其次,存款和取款將繼續存在。第三,在短期內使用率會很低,因此固定成本將占主導地位。但即使考慮到這些因素,超過100倍的可擴展性增益也有望成為常態。
現在,如果我們想超過約1000-4000 TPS 該怎麼辦?這就是Eth2 數據分片的用武之地。分片提案每12秒提供16 MB 的空間,可以容納任何數據,且確保對該數據的可用性。此數據空間如果由Rollups 使用,每秒約1398kb空間比現有以太坊鏈提高了23倍,從長遠來看,數據容量預計將進一步增長。因此,使用Eth2 分片數據的Rollups 可以共同處理多達約10萬交易,未來甚至更多。
Rollups 有哪些尚未完全解決的挑戰?
雖然Rollups 的基本概念現在已經很好理解,它們是可行和安全的,並且已經有多個Rollups 部署到主網中,但仍有許多Rollups 設計領域尚未得到充分探索,將以太坊生態系統的大部分內容完全引入Rollups 以方面存在很多挑戰。一些關鍵問題包括:
用戶和生態入駐- 使用Rollups 項目不多、用戶不熟悉,很少有錢包集成Rollups。商家和慈善機構尚未支持這種支付方式。
跨Rollups 交易- 高效地將資產和數據從一個Rollups 移動到另一個Rollups,而無須產生經由L1的費用。
審計激勵- 如何最大程度提高至少有一個誠實節點完整驗證一個Optimistic Rollup 的機率,使問題出現時他們會廣播欺詐證明?對於小規模Rollup (高至每秒幾百筆交易),這個問題不大,因為對礦工來說只是舉手之勞,但對於大規模的Rollup 來說,還需要更充分的理由以說服礦工去做驗證。
探索Plasma 和Rollups 之間的設計空間- 是否有技術可以將一些與狀態更新相關的數據放在鏈上,但不是全部,且這些數據會產生有用的東西?
最大限度地提前確認安全性- 許多Rollups 提供了“pre-confirmation”的概念,以實現更快的用戶體驗,其中排序者立即提供承諾,即交易將包含在下一批中,並且如果排序者違背了諾言,則排序者的存款將被銷毀。但這一計劃的經濟安全是有限的,因為有可能同時向許多行為者做出許多承諾。這種機制能否得到改進?
提高對缺失的排序器的響應速度- 如果Rollups 的排序者突然脫機,那麼短時間從這種情況中恢復,要么是快速且低消耗地切換到另一個Rollup,要么是換一個排序者,都是有成本的。
高效的ZK-VM- 生成ZK-SNARK證明通用EVM代碼(或現有智能合約可以編譯到的一些不同VM)已正確執行並具有一個給定的結果。
結論
Rollups 是一種強大的、新穎的L2 擴展方案,預計將成為以太坊在短期和中期(也可能是長期)擴展的基石。與之前的L2 擴展方案不同,它們可以支持通用的EVM 代碼,允許現有應用程序輕鬆遷移。而Rollups 通過妥協——交易處理不是完全在鏈下進行,而是每筆交易留下一小部分數據在鏈上,在以太坊社區中獲得了高度關注。
從技術設計角度,Rollups 有多種類型,如使用欺詐證明的Optimistic Rollups,使用有效性證明的ZKRollups(ZK-SNARKs)。 Rollups 仍然是一種早期的、正迅速發展的技術,預計在未來幾年中,Rollups 空間中將出現更多令人興奮的項目。