Paradigm 研究合夥人 Georgios Konstantopoulos 解析 Optimistic Rollup 發揮作用的激勵結構,並對常見的批評提出了迴應。

撰文: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 中,成本增加。這就消除了它們作爲可伸縮性選項的可能性。

從第一原則出發,重新發現 Optimistic Rollup

在下一節中,我們假設讀者對哈希和默克爾樹已經有所瞭解。

根據我們到目前爲止學到的知識,讓我們模擬一個蘇格拉底對話,目標是發現一種既能增加以太坊有效吞吐量,同時又不增加用戶和節點操作者負擔的協議。

問:我們想在不顯著改變信任和成本假設的情況下擴展以太坊。該怎麼做呢?

答:我們想要降低現有操作對系統成本的要求(見上面的三種資源類型)。爲了理解爲什麼要做到這一點並不容易,我們需要先看看以太坊的架構:

以太坊的每個節點目前都存儲並執行用戶提交給它的每筆事務。在執行過程中,事務通過 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 操作碼,該操作碼可用於估計鏈上的擁塞,並因此以編程方式調整爭議期的持續時間。

如何正確實施這一懲罰機制至關重要,否則它將在實踐中被人濫用。我來舉個例子,說明什麼是幼稚而沒有實操性的實現:

  1. Alice 貼出了一個 1 ETH 債券,她因此得以在系統中擔任排序者
  2. Alice 發佈了一個欺詐狀態更新
  3. Bob 注意到了這一點,並發表了一項爭議。如果成功,這將能把 Alice 債券中的 1 個 ETH 授予 Bob,並取消欺詐狀態更新
  4. Alice 注意到了這個爭議 ,也發表了一個爭議 (挑戰她自己!)
  5. ALice 得到了她的 1 ETH,即使她試圖欺詐,實際上也沒有受到任何懲罰。

Alice 可以通過「搶跑」的方式來發動這種攻擊,即廣播與 Bob 相同的交易,但 gas 價格更高,從而導致 Alice 的交易在 Bob 之前執行。這意味着 Alice 可以持續嘗試以最小的成本(僅含以太坊交易費用)作弊。

解決這個問題很簡單:不是將全部債券授予爭論者,而是將 X% 的債券燒燬。在上面的例子中,如果我們燒掉 50%,那麼 Alice 將只會得到 0.5 個 ETH,這就足以阻止其在步驟 2 中嘗試作弊。當然,銷燬債券減少了運行驗證器的動機(因爲支付變得更少了),因此需要確保債券在燒掉部分後依然足以激勵用戶成爲驗證者。

對 Optimistic Rollup 常見的批評和我們的迴應

現在我們已經完成了 Optimistic Rollup 的構建模塊,讓我們探討並解決對該機制的最流行的批評。

長時間的提款 / 爭議期對於採用和可組合性是致命的

我們在上面提到過,長期的爭議期對安全有好處。這裏似乎存在一種固有的取捨:爭議期過長對用戶來說不好,因爲用戶如果想要提取資金的話需要等待很長時間。爭議期較短,當然能帶來流暢的用戶體驗,但這樣你就會冒欺詐發生的風險。

我們認爲這不成其不問題。由於存在漫長的提現延遲可能性,我們預計做市商將迅速介入並提供更快的提現服務。這是可能的,因爲驗證第 2 層狀態的人可以正確判斷一個提現是否存在欺詐的可能,從而會以較小的折扣來「購買」 他們的服務。舉個例子:

參與者:

  • Alice:在第 2 層有 5 個 ETH。
  • Bob:在「做市商」智能合約中,第 1 層上有 4.95 ETH,並且在第 2 層上運行一個驗證器

步驟:

  1. Alice 讓 Bob 知道她想要「快速」取款,並向他支付 0.05 ETH 的費用
  2. Alice 向 Bob 的「做市商」智能合約發出取現要求
  3. 此時可能會發生兩種情況:
    1. Bob 在他的第 2 層驗證器上檢查提款是否有效,並批准快速取款。這將立即將 4.95 ETH 轉移到 Alice 的第 1 層地址。在提款期結束後,鮑勃可以領取這 5 個 ETH,淨賺一筆。
    2. Bob 的驗證者提醒他該交易無效。Bob 對該交易引起的狀態轉換提出異議,取消交易,並因排序者允許惡意交易發生而賺取其債券。

愛麗絲要麼是誠實的,立即把錢拿出來,要麼是不誠實的,會受到懲罰。我們希望支付給做市商的費用會隨着時間的推移而壓縮,如果有對這項服務的需求的話,最終讓用戶完全看不到這個過程。

該特性最重要的含義是,它可以實現與第 1 層合約的可組合性,而不必等待完整的爭議期。

注意,這種技術最早在「Simple Fast Withdrawals」(簡單快速提現)一文中描述過。

礦工可以通過賄賂來審查提現,破壞 Optimistic Rollup 的安全

在「Optimistic Rollup 的近零成本攻擊場景」的帖子中,有人認爲,礦工的激勵過大,這會導致排序者與以太坊礦工勾結,不願去審查任何有爭議的交易。當然,考慮到系統安全對於解決爭議的依賴,這對任何 Optimistic 體系都是致命的。

我們不同意這篇文章的論點。我們假設,誠實的一方總是願意賄賂礦工,而且能提供比惡意方更多的資金。此外,每當礦工們因爲幫助惡意方獲勝而偏離「誠實」行爲時,都會產生額外的成本。這種行爲會破壞以太坊的價值,而這反過來會增加礦工從事這種行爲的額外成本。

事實上,這種情況已經在學術文獻中得到了研究,證明了「這種反擊的威脅會誘導出一種不發生攻擊的子博弈完美均衡」。

我們要感謝 Hasu 讓我們注意到這篇論文的論證。

驗證者的困境對操作驗證器、破壞 Optimistic Rollup 產生了抑制

針對驗證者的困境,Ed Felten 撰寫了一個出色的 分析解決方案,我們總結如下:

  1. 如果該體系的激勵機制如預期那樣發揮作用,就沒有人會作弊
  2. 如果沒有人作弊,那麼運行一個驗證程序就沒有意義了,因爲你從操作它中賺不到錢
  3. 因爲沒有人運行驗證器,所以最終有機會讓排序者作弊
  4. 排序者作弊,系統不再按預期運行

這聽起來很重要,而且近乎自相矛盾的。在假設獎勵規模固定的情況下,更多的驗證者會減少單個驗證者的預期報酬。此外,驗證者多了,能分到的蛋糕似乎就會隨之減少,發生的欺詐行爲更少,這進一步加劇了這個問題。在後續分析中,Felten 還提供了一種解決驗證者困境的方法。

我想在這裏採取相反的立場,我認爲驗證者的困境並不像批評者說的那麼重要。在實踐中,作爲一個驗證者是存在非金錢激勵的。比方說,你可能在一個彙總平臺上構建大型應用程序,也可能持有代幣,如果系統失敗,那麼你的應用程序將無法運行,或者你持有的代幣將會貶值。除此之外,對快速提款的需求爲做市商驗證者創造了存在的動力(正如我們在上一節所看到的那樣),這並不受欺詐行爲的影響。說得更具體一點,比特幣沒有提供任何激勵措施來存儲整個區塊鏈歷史或向同行提供你的本地數據,但人們還是無私地這樣做。

即使在真空環境中運行驗證器並不符合激勵機制,它也能保證系統的安全,這對於那些投資於系統成功的實體來說是最重要的事情。因此,我們認爲在 Optimistic 系統的第 2 層中,不需要設計機制來繞過驗證者的困境。

結論

我們分析了 2021 年對以太坊至關重要的技術之一: Optimistic Rollup。

總結其好處:Optimistic Rollup 是以太坊的擴展,它承載了以太坊的安全性、可組合性和開發人員護城河,同時提高了性能,不會對以太坊用戶的成本或信任需求造成實質性的影響。我們探索了使 Optimistic Rollup 發揮作用的激勵結構,並對常見的批評提出了迴應。

我們想要強調的是,Optimistic Rollup 的性能上限是由第 1 層上發佈的數據所決定的。因此,它的優點在於:1) 儘可能地壓縮你發佈的數據(例如通過 BLS 簽名聚合),2) 擁有一個大而廉價的數據層(例如 ETH2)。

作爲補充閱讀,我們推薦 Buterin 的關於 Rollup 和 信任模型不完整指南。我們還建議去研究 Optimistic Rollup 的近親 ZK Rollup。最後,還有其他方法可以獲得去中心化的可伸縮性,即分片和狀態通道,它們各有優缺點。

來源鏈接:research.paradigm.xyz