關於Optimistic Rollup,你需要知道的一切
編者按:本文來自鏈聞ChainNews(ID:chainnewscom),經授權發布。
編者按:本文來自
鏈聞ChainNews(ID:chainnewscom)
鏈聞ChainNews(ID:chainnewscom)
,經授權發布。
編者按:本文來自
鏈聞ChainNews(ID:chainnewscom)
鏈聞ChainNews(ID:chainnewscom)
,經授權發布。
編者按:本文來自
鏈聞ChainNews(ID:chainnewscom)
鏈聞ChainNews(ID:chainnewscom)
,經授權發布。
撰文:Georgios Konstantopoulos,加密風投公司Paradigm 研究合夥人。
編譯:詹娟
Paradigm 授權鏈聞翻譯並發表該文章中文版本。
在以太坊生態系統中,最大的挑戰之一是在資源嚴重製約(如CPU、帶寬、內存、磁盤空間)的情況下,如何實現低延遲和高吞吐量。
系統的去中心化是由網絡中最弱的節點驗證系統規則的能力所決定的。可以在低資源硬件上運行的高性能協議,可以被稱為「可伸縮」。
在這篇文章中,我們將深入探討當前「2 層解決方案」的原理、它們對應的安全模型,以及它們如何解決以太坊的可伸縮性問題。
如果你有興趣了解更多關於前沿的以太坊的可伸縮技術,想要知道如何構建和架構此類系統,那麼這篇文章或許對你有幫助。
在整個文章中,重要的關鍵詞或概念會用粗體突出顯示,這些都是你在學習加密貨幣知識的過程中會遇到的單詞/ 術語。這個話題很複雜。也許讀的過程中會感覺有點困惑,但只要堅持看完,相信將有所收穫。
區塊鏈資源需求
有三個因素會影響去中心化網絡(如比特幣和以太坊)中運行節點的資源需求:
帶寬:下載和廣播任何與區塊鏈相關的數據的成本。
計算:在腳本或智能合約中運行計算的成本。
存儲:為編制索引而存儲事務數據的成本,以及為繼續處理新的事務塊而存儲「狀態」的成本。值得注意的是,存儲「狀態」(帳戶餘額、合約字節碼、nonce 值)比存儲原始事務數據成本更高。
衡量性能的方法有2 種:
吞吐量:系統每秒可以處理的事務數量。
延遲:事務處理所需的時間。
比特幣和以太坊這類新興加密網絡的理想屬性是去中心化,但是使網絡去中心化的構成要素是什麼呢?
低信任度:這個屬性可以讓任何個人驗證比特幣的數量不會超過2,100 萬,或者說他們的比特幣不會被偽造。獨立運行節點軟件的人員會計算最新的狀態,並驗證在此過程中是否遵循了所有規則。
低成本:如果節點軟件的操作成本很高,個人將依賴可信的第三方來驗證狀態。高成本意味著高信任需求,這是我們首先想要避免的。
另一個需要的屬性是可伸縮性:將吞吐量和延遲以超線性的方式擴展到運行系統的成本的能力。這個定義很好,但沒有包含「信任」。因此,我們明確了「去中心化的可伸縮性」:在不顯著增加系統信任假設的情況下實現可伸縮性。
放大來看,以太坊的運行時環境是以太坊虛擬機(EVM)。通過EVM 運行的事務以不同的成本執行各種操作,例如,存儲操作的成本高於添加操作的成本。事務中的計算單元稱為「gas」,系統的參數設置為每個區塊最多處理12.5m gas,平均每12.5 秒產生一個事務區塊。因此,以太坊的延遲為12.5 秒,吞吐量為每秒100 萬gas。
你可能會問:每秒100 萬gas 能帶來何種效益?
每秒~47 筆「簡單轉賬」事務。這些事務消耗21,000 gas, 負責將ETH 從A 轉移到B,是最簡單的事務類型。
每秒~16 筆ERC20 代幣轉賬。與ETH 轉賬相比,這些方法涉及更多的存儲操作,因此每次的成本為~60k gas。
每秒~10 筆Uniswap 資產交易。代幣對代幣交易的平均成本約為102k gas。
…隨便挑一個你喜歡的事務的gas 成本,並將其除以1m (12.5m / 12.5 /gas)
注意,隨著事務的執行複雜度增加,系統的吞吐量會降低到很低的數值。還有改進的空間!
解決方案1:使用一種中介
我們可以使用一個可信的第三方來促成所有的事務。這樣一來,我們就能獲得非常高的吞吐量,而且延遲可能只會是亞秒級的。太好了! 這不會改變任何系統範圍內的參數,但我們將會選擇加入第三方單方面設定的信任模式。他們可能會選擇對我們進行審查,甚至沒收我們的資產。這是不可取的。
解決方案2:讓區塊更大,更頻繁
我們可以通過減少兩個區塊之間的時間來減少延遲,也可以通過增加區塊gas 限制來增加吞吐量。這一改變將使運營節點的成本更高,使得個人難以運行節點(這一點已經在EOS、Solana、Ripple 等平台出現了)。
在解決方案1 中,對信任的需求增加了。在方案2 中,成本增加。這就消除了它們作為可伸縮性選項的可能性。
在下一節中,我們假設讀者對哈希和默克爾樹已經有所了解。
答:是的。
根據我們到目前為止學到的知識,讓我們模擬一個蘇格拉底對話,目標是發現一種既能增加以太坊有效吞吐量,同時又不增加用戶和節點操作者負擔的協議。
問:我們想在不顯著改變信任和成本假設的情況下擴展以太坊。該怎麼做呢?
答:我們想要降低現有操作對系統成本的要求(見上面的三種資源類型)。為了理解為什麼要做到這一點並不容易,我們需要先看看以太坊的架構:
以太坊的每個節點目前都存儲並執行用戶提交給它的每筆事務。在執行過程中,事務通過EVM 運行,並與EVM 的狀態(例如存儲、餘額等)交互——這種操作非常昂貴。常見的智能合約優化技術以最小化與狀態的交互次數為核心,但它們只能提供較小的常量改進。
問:你是說有一種方法可以在不涉及狀態的情況下進行交易,從而保持較低的資源成本?
答:在極限情況下,我們是否可以把所有的執行都移出鏈外,同時保留一些數據在鏈上?我們可以通過引入一個被稱為「排序者」 (sequencer) 的第三方來實現這一點。他們負責本地存儲和執行用戶提交的事務。為了保持系統的活躍度,排序器需要定期提交他們接收到的事務的默克爾根以及以太坊上產生的狀態根。這是朝著正確方向邁出的一步,因為我們只在以太坊的狀態中存儲O (1) 數據,用於O (N) 鏈下交易。
問:所以我們通過讓排序者計算鏈下的一切,只發布默克爾根來實現伸縮?
答:是的。
問:好的,所以一旦你加入,排序器能保證你的轉賬費用很便宜。那麼存款和提現會如何操作?
答:用戶將通過在以太坊上存錢的方式進入系統,然後排序者將相應的金額記入用戶的賬戶。用戶可以在以太坊上提出這樣的交易內容,比方說,「我想提現3 個ETH,我的賬戶目前有>3 ETH,這是證明」。即使第1 層沒有實際的用戶狀態,用戶也能拿出排序器發布的狀態根顯示相關的默克爾證明,表明他們在當前狀態下有足夠的資金。
問:現在我們知道了,用戶需要默克爾證明來提取他們的資金。用戶如何獲得構建默克爾證明的數據?
答:他們可以要求排序者給他們提供數據!
問:萬一排序者暫時或永久不可用,那該怎麼辦?
答:排序者可能是惡意的,也可能只是因為技術問題而離線,這將導致性能下降(或者更糟,偷走你的資產!)。因此,我們還必須要求排序者在鏈上提交完整的事務數據來進行存儲,但不能執行。在這個問題上,目標是獲得數據可用性。假設所有數據都永久存儲在以太坊上,即使排序者消失了,新的排序者也可以從以太坊中檢索所有第2 層相關的數據,重建最新的第2 層狀態,並從他們的前任離開的地方繼續。
問:如果排序者在線,但拒絕向我提供默克爾證明數據,我可以從以太坊下載嗎?
答:沒錯,你可以自己同步一個以太坊節點,或者連接到眾多託管節點服務中的一個。
問:有一點我還是不明白,你怎麼能在以太坊存儲東西而不執行它呢?不是每個事務都要通過EVM 嗎?
答:假設你提交了10 個事務,將ETH 從A 轉移到B。執行每筆事務都將執行以下操作:增加A 的nonce,減少A 的餘額,增加B 的餘額。這得從以太坊的世界狀態裡進行相當多的寫入和讀取。相反,你可以將所有事務的編碼發送到智能合約的publish (bytes _transactions) public { } 函數中。注意,該函數的主體是空的!這意味著發布的交易數據不會被解釋、執行,也不會在任何地方進行狀態訪問,它只是存儲在區塊鏈的歷史日誌中(寫入的成本很低)。
問:我們能信任排序者嗎?萬一他們發布了一個無效的狀態轉換怎麼辦?
答:任何時候排序者在發布一批狀態轉換時,都會有一個「爭議期」,在這期間任何一方可以發布「欺詐證明」以表明其中某個狀態轉換無效。這可以通過在鏈上重放導致狀態轉換的事務,並將產生的狀態根與排序者發布的狀態根進行比較來證明。如果狀態根不匹配,則欺詐證明成功,並取消狀態轉換。如果在無效的狀態轉換之後還有更多的狀態轉換,它們也會被取消。但如果事務已經過了爭議期,就沒法再對其質疑了,它們會被視為最終交易。
問:等一下!你之前說過,如果a)增加成本,或b)引入新的信任假設,那麼它就不屬於可伸縮性。在你描述的方案中,我們不是又另外假設總是會有人舉報欺詐嗎?
答:是的。我們假設存在一個被稱為「驗證器」的實體,他們負責監視欺詐行為,如果第1 層和第2 層狀態不匹配,他們就會發布欺詐證據。我們還假設驗證器能夠在爭議期限內可靠地獲得以太坊中包含的欺詐證據。我們認為驗證器的存在是一個「弱」假設。想像一下,如果有一個應用程序有成千上萬的用戶,你只需要一個人來運行一個驗證器。這聽起來不算太離譜!另一方面,改變以太坊的信任模式,或增加以太坊節點的運營成本是我們不想做的「強」假設改變。這就是我們在定義去中心化的可伸縮性時所說的「顯著改變底層系統的假設」。
問:我同意有人會運行一個驗證器,因為各方都能從這個新解決方案的成功中獲益。但當然這也取決於實際操作的成本。那麼運行一個驗證器和一個排序器的資源需求是什麼?
答:排序者和驗證者必須運行一個以太坊完整節點(不是存檔節點),一個完整的第2 層節點,才能生成第2 層狀態。驗證者運行的軟件負責創建欺詐證明,排序者運行的軟件負責捆綁用戶事務並予以發布。
問:就是這樣嗎?
答:是的!恭喜你!您已經重新發現了Optimistic Rollup (Optimistic Rollup 是「Optimistic 合約」和「鏈上數據可用性」(又名「數據匯總」)的組合),這是2019-2021 年最令人期待的伸縮解決方案。原因很好理解,因為它是以太坊社區多年研究過程的最終產物,你應該已經在上面這個簡短的對話中體會到了這一點。
Optimistic 的激勵
第2 層的擴展基於這樣一個事實:我們試圖最小化執行的鏈上事務的數量。我們使用欺詐證明來取消任何可能發生的無效狀態轉換。由於欺詐證明是鏈上交易,我們還希望將以太坊上發布的欺詐證明的數量最小化。在理想的情況下,欺詐從未發生過,因此,欺詐的證明也從未被發出。
我們通過引入忠誠債券(fidelity bond)來抑制欺詐行為。為了讓用戶成為排序者,他們必須首先在以太坊上發布一個債券,如果被證明存在欺詐,他們將喪失該債券。為了激勵個人發現欺詐行為,排序者的債券在被削減後會分發給驗證者。
忠誠債券和爭議期
在設計欺詐證據的激勵機制時,有兩個參數需要調整:
忠誠債券規模:排序者必須公佈分發給驗證者的數量。規模越大,成為驗證者的動機就越大,而作為排序者進行欺詐的動機就越小。
爭議期期限:可以發布欺詐證明的時間窗口,在此時間窗口之後,第2 層交易在第1 層上被認為是安全的。爭議期較長,可以為防止審查攻擊提供更好的安全保障。爭議期較短,則能為從第2 層撤回到第1 層的用戶創造良好的用戶體驗,因為他們不需要等待很長時間就可以在第1 層上重新使用他們的資金。
在我們看來,對於這兩個參數都無法找到一個確切的靜態值。也許10 個ETH 債券和1 天的爭議期足矣。但也許1 個ETH 和7 天也夠。真正的答案是,這取決於成為驗證者的動機(這取決於運行成本),以及發布欺詐證明的難易程度(而這取決於第1 層的擁塞程度)。這兩者都應該是可調的,可以手動調,也可以自動調。
值得一提的是,EIP1559 向以太坊引入了一個新的BASEFEE 操作碼,該操作碼可用於估計鏈上的擁塞,並因此以編程方式調整爭議期的持續時間。
如何正確實施這一懲罰機制至關重要,否則它將在實踐中被人濫用。我來舉個例子,說明什麼是幼稚而沒有實操性的實現:
Alice 貼出了一個1 ETH 債券,她因此得以在系統中擔任排序者
Alice 發布了一個欺詐狀態更新
Bob 注意到了這一點,並發表了一項爭議。如果成功,這將能把Alice 債券中的1 個ETH 授予Bob,並取消欺詐狀態更新
Alice 注意到了這個爭議,也發表了一個爭議(挑戰她自己!)
ALice 得到了她的1 ETH,即使她試圖欺詐,實際上也沒有受到任何懲罰。
Alice 可以通過「搶跑」的方式來發動這種攻擊,即廣播與Bob 相同的交易,但gas 價格更高,從而導致Alice 的交易在Bob 之前執行。這意味著Alice 可以持續嘗試以最小的成本(僅含以太坊交易費用)作弊。
解決這個問題很簡單:不是將全部債券授予爭論者,而是將X% 的債券燒毀。在上面的例子中,如果我們燒掉50%,那麼Alice 將只會得到0.5 個ETH,這就足以阻止其在步驟2 中嘗試作弊。當然,銷毀債券減少了運行驗證器的動機(因為支付變得更少了),因此需要確保債券在燒掉部分後依然足以激勵用戶成為驗證者。
對Optimistic Rollup 常見的批評和我們的回應
現在我們已經完成了Optimistic Rollup 的構建模塊,讓我們探討並解決對該機制的最流行的批評。
長時間的提款/ 爭議期對於採用和可組合性是致命的
我們在上面提到過,長期的爭議期對安全有好處。這裡似乎存在一種固有的取捨:爭議期過長對用戶來說不好,因為用戶如果想要提取資金的話需要等待很長時間。爭議期較短,當然能帶來流暢的用戶體驗,但這樣你就會冒欺詐發生的風險。
我們認為這不成其不問題。由於存在漫長的提現延遲可能性,我們預計做市商將迅速介入並提供更快的提現服務。這是可能的,因為驗證第2 層狀態的人可以正確判斷一個提現是否存在欺詐的可能,從而會以較小的折扣來「購買」 他們的服務。舉個例子:Simple Fast Withdrawals參與者:
Alice:在第2 層有5 個ETH。
Bob:在「做市商」智能合約中,第1 層上有4.95 ETH,並且在第2 層上運行一個驗證器
步驟:
Alice 讓Bob 知道她想要「快速」取款,並向他支付0.05 ETH 的費用
Alice 向Bob 的「做市商」智能合約發出取現要求
此時可能會發生兩種情況:
該特性最重要的含義是,它可以實現與第1 層合約的可組合性,而不必等待完整的爭議期。分析和解決方案在「Optimistic Rollup 的近零成本攻擊場景」的帖子中,有人認為,礦工的激勵過大,這會導致排序者與以太坊礦工勾結,不願去審查任何有爭議的交易。當然,考慮到系統安全對於解決爭議的依賴,這對任何Optimistic 體係都是致命的。
分析
和
解決方案
驗證者的困境對操作驗證器、破壞Optimistic Rollup 產生了抑制
分析
和
針對驗證者的困境,Ed Felten 撰寫了一個出色的
結論
分析
和
,我們總結如下:結論如果該體系的激勵機制如預期那樣發揮作用,就沒有人會作弊
如果沒有人作弊,那麼運行一個驗證程序就沒有意義了,因為你從操作它中賺不到錢排序者作弊,系統不再按預期運行結論這聽起來很重要,而且近乎自相矛盾的。在假設獎勵規模固定的情況下,更多的驗證者會減少單個驗證者的預期報酬。此外,驗證者多了,能分到的蛋糕似乎就會隨之減少,發生的欺詐行為更少,這進一步加劇了這個問題。在後續分析中,Felten 還提供了一種解決驗證者困境的方法。我想在這裡採取相反的立場,我認為驗證者的困境並不像批評者說的那麼重要。在實踐中,作為一個驗證者是存在非金錢激勵的。比方說,你可能在一個匯總平台上構建大型應用程序,也可能持有代幣,如果系統失敗,那麼你的應用程序將無法運行,或者你持有的代幣將會貶值。除此之外,對快速提款的需求為做市商驗證者創造了存在的動力(正如我們在上一節所看到的那樣),這並不受欺詐行為的影響。說得更具體一點,比特幣沒有提供任何激勵措施來存儲整個區塊鏈歷史或向同行提供你的本地數據,但人們還是無私地這樣做。


