V神發文簡析各種二層擴容方案 Optimistic rollup vs. ZK rollup?

ETH中文站/2021-01-08/ 分類:技術/閱讀:
廣告
原文標題:Vitalik:Rollups 不完全指南Rollups解決方案在以太坊社區中正風靡一時,并有望在將來成為以太坊的關鍵擴容解決方案。但是這項技術究竟是 ...

原文標題:Vitalik:Rollups 不完全指南

Rollups解決方案在以太坊社區中正風靡一時,并有望在將來成為以太坊的關鍵擴容解決方案。但是這項技術究竟是怎樣的呢?它能給我們帶來什么?我們將如何使用這項技術呢?本文將盡量回答其中一些關鍵問題。

背景:何為一層、二層擴容?

區塊鏈擴容方式有兩種。第一種,可以提高區塊鏈本身的交易容量。這種技術的主要挑戰就是:當區塊容量越來越大時,區塊鏈將越來越難驗證,且中心化程度越來越高。為了避免此類風險,開發者可以提高客戶端軟件的效率。或者選擇另一種更為可持續的方式:利用諸如分片這類技術,使得區塊鏈上的構建區塊和驗證工作可以分散至許多節點 (Eth2 升級中就會將此技術引入以太坊)。

第二種,可以改變使用區塊鏈的方式。即用戶不是將所有交易都直接在區塊鏈上進行,而是通過二層協議在鏈下執行大部分交易。好比鏈上有一個智能合約,該合約只有兩個任務:處理存款和提款交易、以及驗證所有鏈下交易的有效性。對鏈下交易進行驗證的方法有多種,但他們都具有同一個特性:在鏈上驗證證明比在鏈下進行原始計算的成本要低得多。

狀態通道 vs Plasma vs Rollups

二層擴容方案的三種主要類型是:狀態通道、Plasma 和 rollups。他們是三種不同的范式,具有不同的優劣勢。我們可以把所有二層擴容解決方案大致地歸為這三類 (盡管有的方案因分類模糊而存在命名爭議,如 validium)。

狀態通道的原理

更多資料請參考:

https://www.jeffcoleman.ca/state-channels and statechannels.org

假設 Alice 正給 Bob 提供互聯網連接,作為交換,Bob 每兆字節向她支付 0.001 美元。他們不需要每一次支付都執行交易,而是使用下面的二層解決方案。

首先,Bob 向一個智能合約中存入 1 美元 (或等值的 ETH 或穩定幣)。Bob 在一張寫著 “0.001美元” 的票上進行簽名 (一條鏈下信息),然后發給 Alice,這樣就完成了對 Alice 的第一筆支付。而第二次支付時,Bob 在另一張寫著 “0.002美元” 的票上進行簽名,然后發給 Alice。以此類推,可以根據需要進行多次付款。當他們完成交易了,Alice 可以將數值最高的票單發布到鏈上,并對其進行簽名。鏈上的智能合約將驗證 Alice 和 Bob 的簽名,然后向 Alice 支付 Bob 票據上的金額,并將剩余的錢退還給 Bob。

如果 Alice 不愿意關閉他們之間的狀態通道 (出于惡意行為或由于技術故障),則 Bob 可以啟動提款期 (withdrawal period),如果 Alice 在這段期間內 (比如7天) 還是沒有向 Bob 提供票據,那么 Bob 就可以拿回他的所有錢。

該技術功能強大:可以對其進行調整,以進行雙向支付、處理智能合約關系 (如,Alice 和 Bob 在通道中簽訂金融合約)、以及對通道進行組合 (比如,當 Alice 和 Bob、Bob 和 Charlie 之間有一條開放通道時,Alice 和 Charlie 也可以進行去信任交易)。

但狀態通道的作用是有限的:無法將資金在鏈外發送給沒有參與進來的用戶;通道不能代表那些邏輯上沒有明確所有者的對象 (如 Uniswap);并且如果要進行更為復雜的交易,需要在通道內鎖定大量資金。

Plasma 的原理

更多資料請參考?

最早的 Plasma 論文 :

http://plasma.io/plasma-deprecated.pdf

Plasma Cash:

https://ethresear.ch/t/plasma-cash-plasma-with-much-less-per-user-data-checking/1298

用戶向某個 Plasma 鏈的智能合約中發送一筆資產以完成存款。Plasma 鏈給該資產分配一個唯一的 ID (如 537)。每條 Plasma 鏈都有一名運營者 “operator” (他可以是一個中心化的角色、一個多簽名者、或諸如 PoS/DPoS 此類更為復雜的東西)。每隔一段時間 (可以是15秒至1小時),運營者便會生成一個等待批量處理的匯總交易 (由他們在鏈下收集到的所有 Plasma 交易組成)。

這些運營者會生成一個默克爾樹,樹中每個索引 X 處,如有存在交易的話,會顯示某筆轉移交易資產 ID X,如果沒有交易,葉子值為零。隨后他們將該默克爾樹的默克爾根發送到鏈上,同時還會將每個索引 X 的默克爾分支發送給其資產的當前所有者。

如果用戶想要進行提款,那么就要公布其最近向其發送資產的交易的默克爾分支。然后智能合約就將啟動挑戰期,在此期間,任何人都可以嘗試使用其他默克爾分支來證明該提款無效。需要至少證明其中一項:(i) 發送方在發送資產時并不是該資產的所有者;(ii) 發送方在后來將資產發給了其他人。如果在某個時間段內 (如七天) 沒有人證明該提款是欺詐性的,用戶便可以取出他的資產。

Plasma 比狀態通道擁有更加強大的性能:使用 Plasma,用戶可以將資產發送給從未加入其系統的參與者;對資本的要求也低許多。但 Plasma 也是有缺點的:在“正常操作”期間,通道不需要任何數據就可以在鏈上進行傳輸,而 Plasma 要求每條鏈定期發布一個哈希。此外,在 Plasma 上轉賬不是即時的:用戶需要等一段時間并且等到區塊被發布之后。

再者,Plasma 和通道都有一個關鍵弱點:確保這兩種方案安全的前提是,這兩種系統所控制的對象都有邏輯上的“所有者”。如果該資產的所有者不關心其資產,那么可能會導致證明其資產無效的結果。這對許多應用程序來說是可以接受的,但是對于許多其他應用來說 (如 Uniswap) 來說是破壞交易原則的。甚至在一些系統中如果對象的狀態不經其所有者的同意就可以被改變 (如基于賬戶的系統,你可以不經某人的同意就可以提升其余額),這些系統也不適用 Plasma。

這意味著,當部署任何實際 Plasma 或通道時,都需要大量的“某個特定應用程序的推理”,并且不可能創建一個模擬完全的以太坊環境 (或“EVM”) 的 Plasma 或者狀態通道系統。為了解決此問題,各種 rollup 方案出現了。

Rollups

其他資源參見?

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 和通道類是“純粹”的二層方案,因為其將數據和計算都移至鏈下。然而,圍繞“數據可用性”的基本博弈論問題意味著這些方案不一定對于所有應用來說都是安全的。Plasma 和通道方案的解決方式是依靠所有者完全知曉狀態,但這使得此類方案無法完全通用化。Rollups,則是一種“混合型”二層方案。Rollups 將計算 (以及狀態存儲) 移至鏈下,但將每筆交易的一些數據放在鏈上。

為了提高效率,這類方案借助了許多復雜的壓縮技巧以盡可能使用計算替代數據。結果是系統的擴容性仍然受到底層區塊鏈的數據帶寬限制,但比較來看仍十分有利:以太坊基礎層 ERC20 通證的轉移成本約為 45000 gas,而 rollup 中的 ERC20 通證僅轉移占用 16 字節的鏈上空間,成本不到 300 gas。

數據在鏈上這一點很關鍵 (請注意:將數據“放在 IPFS 上”是行不通的,因為 IPFS 不能就任何給定的數據是否可用提供共識;數據必須被記錄在鏈上)。將數據放在鏈上并對此達成共識,使得任何人都可以根據需要在本地處理 rollup 中的所有操作,從而允許其對欺詐進行監測、發起提款或親自開始批量生成交易。缺乏數據可用性意味著一名惡意的或是離線的運營者能夠產生的影響甚至會更小 (例如他們無法造成一周的延遲),從而為有權發布批量交易的人打開更大的設計空間,并使 rollup 更容易有理可循。

更重要的是,缺乏數據可用性意味著不再需要映射資產到所有者,從而我們能得出以太坊社區相較之前的二層擴容方案對 rollups 更加期待的關鍵原因之一:rollups 是完全通用的,我們甚至還可以在 rollup 內部運行 EVM,使得既有的以太坊應用幾乎不需要編寫新代碼就能遷移到 rollups 上。

Rollup 的原理到底是什么?

在鏈上存在一份智能合約,其中包含一個狀態根,即 rollup 狀態的默克爾根 (也就是 rollup 內部的賬戶余額、合約代碼等等)。

任何人都可以發布一批匯總交易 (batch),這是一個經由高度壓縮的交易集合,其中包含之前的狀態根和新狀態根 (處理交易之后的新默克爾根)。該合約會檢查 batch 中的舊狀態根是否匹配其當前的狀態根,如果匹配的話,合約會對狀態根進行更新。

為了支持存款和提款,我們增加了輸入和輸出在 rollup 狀態“外部”的交易的功能。如果一個 batch 中包含來自外部的輸入,則提交到該 batch 的交易也需要將資產轉移到 rollup 合約。如果一個 batch 中包含來自外部的輸出,則智能合約在處理該 batch 時會發起提款。

這就是 rollup 的工作原理了。但還有一個重要細節:如何得知 batches 里的后狀態根 (post-state root) 是正確的呢?如果某人能夠提交一個具備任意后狀態根的 batch,而無需承擔任何后果,他們完全可以將 rollup 中的所有代幣都轉移給自己。這個問題很關鍵,因為由此誕生了兩種不同的解決方案,這兩種解決方案又衍生出了兩種不同的 rollups。

Optimistic rollups 與 ZK rollups

這兩種 rollups 為:

1. Optimistic rollups其解決方案為欺詐證明 (fraud proofs):這類 rollup 會追蹤所有歷史狀態根以及每個 batch 的哈希值。如果任何人發現某個 batch 的后狀態根不正確,他可以向區塊鏈發布一個證明,證明該 batch 計算錯誤。合約會對證明進行驗證,并且對該 batch 及其之后的 batches 進行回滾。

2. ZK rollups其解決方案為有效性證明 (validity proofs):每個 batch 都包含一個稱作 ZK-SNARK 的密碼學證明 (例如使用 PLONK 協議),以證明后狀態根是正確執行 batch 的結果。無論計算量有多大,該證明都能在鏈上得到極速驗證。

這兩種 rollup 之間存在復雜的權衡:

總的來說,我個人的觀點是,在短期內,optimistic rollup 的顯著優勢在于其通用的 EVM 計算,而 ZK rollup 更可能被用于支付、交易和其他特定用例。但中長期來看,隨著 ZK-SNARK 技術的成熟,ZK rollup 會在所有用例中發揮出優勢。

解構欺詐證明

Optimistic rollup 的安全性保障主要來自于:如果有人在 rollup 中發布了一個無效的 batch,其他任何跟進該鏈的用戶監測到欺詐行為都可以發布欺詐證明,向合約證明該 batch 的無效性,并進行回滾。

在上圖中,聲稱某 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 創建者支付相應費用。

  • Gas:同樣地,我們可以將總 gas 設定為 2 的多次冪形式。或者我們也將 gas 限制在 batch 的水平。

  • To:可以用 index 來替換 20 字節的地址 (例如,如果某地址是被添加到默克爾樹中的第4527個地址,我們只需使用 index 4527 來表示即可。然后向狀態添加一個“子樹” (subtree) 來存儲index和地址本身的映射關系)。

  • Value:我們可以用科學記數法儲存值。在大多數情況下,交易只需要 1-3 個有效位。

  • Signature:我們可以使用 BLS 聚合簽名將大量簽名聚合成一個約為 32-96 字節 (取決于協議) 的簽名。該聚合簽名可以依據消息集和 batch 的發送者集一次性進行檢檢查。表中的 “~0.5” 表示一個聚合簽名中可以包含的簽名數量是有限制的,因為需要能夠在一個欺詐證明中對聚合簽名進行驗證。

ZK rollups 特有的一個重要壓縮技巧是:如果交易的一部分信息僅用于驗證,并且不用于計算狀態更新,那么該部分可以移至鏈下。Optimistic rollup 無法做到這一點,因為該數據仍然需要存在鏈上,以備需要在欺詐證明中進行檢查的不時之需。而在 ZK rollup 中,SNARK 已經證明了 batch 的正確性,也就是說驗證所需的數據已經齊全。

具備隱私保護功能的 rollups 是一個重要例子:在 optimistic rollup 中,每筆交易中用于隱私保護的 ZK-SNARK 證明需要在鏈上,需要占據約 500 字節。而在 ZK rollup 中,包含整個 batch 的 ZK-SNARK 已經證明了“內部” ZK-SNARK 的有效性。

這些壓縮技巧是 rollups 擴容性的關鍵,否則 rollups 擴容性相較底層連只能提高約 10 倍 (雖然對于某些特定的計算密集型應用來說,簡單的 rollups 方案已經足夠),而對數據進行壓縮后,幾乎對所有應用來說,擴容性都可以實現 100 倍以上的提升。

誰能批量打包交易并提交?

對于 optimistic rollups 和 ZK rollups 中交易的打包權有許多說法。一般來說,任何想要打包交易并且提交的用戶,必須要鎖定大量存款。如果用戶提交了包含欺詐/無效交易的 batch (例如包含無效狀態根),那么該用戶的存款的一部分會被銷毀,另一部分則作為欺詐證明者的獎勵。除此之外,還存在其他可能性:

  • 完全“無政府狀態”:任何人都可以在任何時候批量打包交易并提交。這是最簡單的方式,當然也存在缺陷。尤其是多個參與者同時嘗試提交但最終只有一個 batch 能被成功打包。這會導致大量生成證明的工作和/或發布 batches 的 gas 被白白浪費。

  • 中心化處理:存在一個行為者即排序者 (sequencer) 提交 batches (但提款存在例外:通常來說一個用戶可以首先提交提款請求,如果排序這沒有在下個 batch 中處理該提款,那么該用戶能夠自己提交一個 batch)。這是最“高效”的方式,但是依賴于一個中心化的角色。

  • 排序者拍賣:通過定期舉行拍賣的形式來確定誰有權成為下一個周期的排序者。其優點在于它可以籌集資金,并通過例如由 rollup 控制的機制 (例如 DAO) 來進行分配。(參見 MEV 拍賣)

  • PoS 集隨機選擇:任何人都可以將 ETH (或是 rollup 協議的代幣) 存入 rollup 合約,然后在存款人中隨機選擇每個 batch 的排序者,被選中的可能性與鎖定資產成一定比例。這個方式的主要缺點在于會有大量資本被鎖定,而這是不必要的。

  • DPoS 投票:通過拍賣確定一個排序者,如果該行為人表現不佳,那么代幣持有者可以通過投票將其驅逐,并發起新的拍賣。

將批量打包和狀態根處理相獨立

目前正在開發的一些 rollup 項目采用了“獨立批量打包”的方式,也就是將提交二層交易的 batch 和提交狀態根的過程分離。這種做法的優勢在于:

1. 使得多個排序者能夠同時發布 batches,以提高扛審查性,而避免了因為一些 batches 被首先打包而導致其他 batches 無效的問題。

2.如果某個狀態根是無效的,我們不需要回滾整個 batch,可以只回滾狀態根,并等待他人提供該 batch 的新狀態根。這保障了交易發送方的交易不會被回滾。

總之,在效率、簡潔性和抗審查性等方面的權衡十分復雜,許多方案也在進行探索。目前要判斷哪些概念是最佳組合還為時尚早,時間會證明一切。

rollup能在多大程度上實現擴容?

在現有的以太坊鏈上,gas 上限是1250萬,一筆交易里,每個字節的數據花費 16 gas。這意味著如果一個區塊只包含一個batch (我們說相當于打包了一個 zk rollup,在證明驗證上花費 50 萬 gas),那一個 batch 可以包含 ?(1200 萬 / 16) 750,000 字節的數據。如上文所示,對于一個以太坊轉賬的rollup,每一次用戶操作只需 12 個字節,也就是說該批交易可以包含高達 6.25 萬筆交易。現在平均出塊時間為 13 秒,即相當于大約每秒 4807 筆交易 (相比之下,現在直接在以太坊上轉賬是每秒 1250萬/21000/13~=45筆交易 )

以下表格是其他用例的例子:

擴容的最高水平是這樣計算的:(一層的 gas消耗)/(rollup所占的字節 *16)*1200萬/1250千萬

現在,值得注意的是這些數據都過于樂觀了,原因有幾個。最重要的是,一個區塊幾乎不可能只包含一個 batch,因為最起碼會有多個 rollup。第二,存款和提款行為會一直存在。第三,在短期,使用率會比較低,所以固定成本會占主導。但即使這些因素都考慮到了,超過 100 倍的擴容水平也有望成為常態。

如果我們想每秒交易量達到 1000-4000 呢 (取決于特定的用例)?這就是eth2 數據分片發揮作用的時候了。分片協議為每 12 秒提供 16MB 的空間來容納任何數據,且系統確保數據可用性的共識。數據空間可以被 rollup 使用。這大約每秒 1398kb 的空間比現在以太坊鏈上每秒大約 60kb 提高了23倍,且在更長期來看,數據容量有望繼續增加。因此,使用 eth2 分片數據的rollup可以以每秒約 10 萬筆交易的吞吐量批量處理,在未來可能更多。

Rollup上還有哪些未解決的困難?

盡管 rollup 的基本概念現在已為人所了解,我們確信它們是完全可行且安全的,現在多種 rollup 已經部署到主網上,但 rollup 設計還有很多領域未被充分探索,以及在實現橋接以太坊生態上大部分的活動到 rollup 上,以利用它們的可擴容性這件事上,還存在不少困難。一些關鍵的困難包括:

  • 用戶和生態的入駐——使用 rollup 的應用不多,用戶也不熟悉 rollup,只有少數錢包開始集成 rollup。商家與慈善機構也還不支持這種支付方式。

  • 跨 rollup 交易——高效地從一個 rollup 移動資產與數據 (例如:預言機輸出) 到另一個,而無須產生經由基礎層的費用。

  • 審計激勵——如何最大程度提高至少有一個誠實節點完整驗證一個 optimistic rollup 的機會,使得出現問題時他們會發布欺詐證明?對于小規模 rollup (高至每秒幾百筆交易),這個問題不大,因為對礦工來說只是舉手之勞,但對于大規模的 rollup 來說,還需要更充分的理由以說服礦工去做驗證。

  • 探索 plasma 和 rollup 之間的設計空間——是否有技術可以放一些 狀態更新相關數據到鏈上而不是全部的數據,且這些數據會產生有用的東西?

  • 最大程度提高提前確認的安全性——很多 rollup 都會為了更快的用戶體驗 (UX) 提供“提前確認 (pre-confirmation)”,這里排序者 (sequencer) 會馬上承諾某筆交易會被打包到下一個batch里,而如果此承諾沒有被兌現,該排序者將損失其保證金。但這個方案的經濟安全性是有限的,因為排序者可以同時對非常多的人作出非常多的承諾。這個機制可以改善嗎?

  • 提高缺席排序者的回應速度——如果一個 rollup 的排序者突然離線了,在最短的時間內以最低的成本從這種情況恢復過來是很重要的,方法不是快速且低成本地大規模退出到另一個 rollup,就是換一個排序者。

  • 高效 ZK-VM——生成一個 ZK-SNARK 證明,證明通用的 EVM 代碼 (或一些現有的智能合約可以編譯成的不同 VM) 已被正確執行和有一個給定結果的。

結論

Rollup 是一個強大、新穎的二層擴容范式,并有望成為以太坊在中短期未來 (也可能是長期) 擴容的基石。以太坊社區已經表現出對 rollup 的強烈興趣,因為不像之前在二層擴容的嘗試,它們可以支持通用的EVM代碼,使得現有的應用可以輕易遷移。Rollup 有一個重要的妥協:交易處理不是完全在鏈下進行,而是每筆交易留下一小部分數據在鏈上。

Rollup 有很多種,在設計空間上有很多選擇:可以是使用欺詐證明的 optimistic rollup,也可以是使用有效性證明 (即 ZK-SNARKs) 的 ZK rollup。排序者 (可以發布打包好的 batch 到鏈上的用戶) 可以是中心化的行動者、自由放任者、或兩者間的很多可能性。Rollup 還是早期的技術,其開發在不斷快速地進行中,但它們是可行的,且其中有些 (比較有名的是路印、ZKSync、和DeversiFi) 已經運行數月了。期待今年 rollup 會有更多令人振奮的成果。

來源 |?vitalik.ca

作者 | Vitalik Buterin

原文鏈接:

https://vitalik.ca/general/2021/01/05/rollup.html

閱讀:
長按圖片轉發給朋友
世鏈財經_區塊鏈_比特幣BTC_IPFS礦機挖礦_交易所平臺
  • 商務合作微信:juu3644
  • 世鏈粉絲群微信:qia3867
  • 新聞爆料微信:zefmk896
  • 微信二維碼
    Copyright 2018-2021       版權所有       粵ICP備20059285號
    二維碼
    意見反饋 二維碼
    黄色片在线观看,免费观a在线观看视频网站,成年大片免费视频播放,免费大片黄在线观看-欧美日韩无线码免费