Rollup 是近年來在智能合約可擴展性方面最火爆的想法之一。這個想法已經提出有一段時間了,但是直到最近纔有幾個團隊,其中也包括我們 Offchain Labs 團隊,纔開始大力推進。接下來讓我們花個幾分鐘時間,來談談什麼是 rollup ,以及不同的方案之間有什麼相關性。

Rollup 是一種可以對開放式合約(即,所有人都能看見並與之交互的合約)進行擴容的通用方法。在 Rollup 上,對合約的調用及其 argument (實際參數)都是作爲調用數據(calldata)寫在鏈上的,但是合約的實際計算和存儲都是在鏈下完成的。有人會在鏈上發佈一個 assertion (斷言),斷言合約將要執行的一系列操作(例如要完成的支付)以及執行完成之後合約狀態的哈希值。可以認爲,這個發佈上鍊的斷言將所有的調用和結果都 “捲起來”(“rolling up”)成爲單筆發送上鍊的交易。

不同的 Rollup 系統有所區別的地方在於確保 assertion 正確性的方式。這裏有三種基本方法:非交互型 rollup (如,ZK-Rollup)、一輪交互型 rollup (如, “optimistic rollup” 提案)和多輪交互型 rollup (如,我們團隊的 Arbitrum Rollup )。

非交互型 Rollup (如,ZK-Rollup)

**
**

非交互型 rollup 依賴於簡潔的有效性證明。每個 assertion 都會附有一個易於驗證的證明(如,SNARK),以此表明 assertion 裏的計算和結果都是正確的。例如,ZK-Rollup 系統使用的是 ZK-SNARKs ,即,一種易於驗證的零知識證明系統 。這對於礦工和其他觀察者來說很友好,因爲驗證證明的成本較低,可以立即覈實 assertion 的正確性。但是,零知識證明系統也有一個很大的缺點:除非要斷言的交易非常簡單,否則創建證明的成本會高得離譜。因此,ZK-Rollup 非常適用於支付交易,但是對於複雜一點的智能合約執行來說,效果就沒那麼好了。

用於智能合約的 Rollup

**
**

對於複雜的智能合約來說,我們必須採用一種交互式方法。也就是說,如果要將 assertion 發佈到鏈上,asserter (斷言者)必須繳納保證金,並且會開放一個時間窗口,如果驗證者認爲該 assertion 不正確,可以在窗口期內挑戰它。有時這被稱爲 “錯誤性證明”。如果 asserter 發佈了錯誤的 assertion ,就會失去自己的保證金。

一輪交互型 rollup 又稱爲“optimistic rollup”,不過這麼說有點用詞不當,因爲所有交互型 rollup 都是樂觀主義的設計。在一輪交互型 rollup 中,assertion 包含每次調用的結果,挑戰者會指出 assertion 中對哪個調用給出的結果是錯的。鏈上合約會模擬執行被挑戰的調用,並驗證 asserter 關於這個調用的聲明是否有誤。如果真的有誤,則取消整個 assertion ,並罰沒 asserter 的保證金。如果一個 assertion 到挑戰期結束爲止還沒有被挑戰成功的話,就會被接受並得到最終確定。

在多輪交互型 rollup (例如,我們團隊的 Arbitrum Rollup 產品)中,也設有挑戰窗口期,挑戰者可以在此期間繳納保證金,並聲明該 assertion 是錯誤的。接下來就會觸發 asserter 和挑戰者之間的往復交互型協議,並由一個鏈上合約來充當該協議的仲裁方(referee)。最後由仲裁方來決定哪一方有誤,並罰沒其保證金。這種設計是爲了將解決爭議所需的鏈上工作量降至最低,即,在鏈上仲裁方據實評估合約行爲之前,先通過交互型協議儘可能縮小雙方之間的爭議範圍。

一輪交互型 Rollup vs. 多輪交互型 Rollup

**
**

歸根結底,一輪交互型 Rollup (例如,“optimistic rollup”)和多輪交互型 Rollup (例如,Arbitrum Rollup)之間的選擇就是在解決爭端所需的鏈上成本和時間之間作出權衡。一輪交互型 Rollup 需要在鏈上模擬一次完整的調用,成本可能會非常高——因此,合約所執行的調用會受到以太坊的全局 gas limit 的限制。多輪交互型 Rollup 則不受此限制,它會進一步縮小爭議範圍,直到可以以較低成本在鏈上解決該爭議爲止。通常情況下,多輪交互型 Rollup 還可以在鏈上編寫較少的數據。

寫到鏈上的內容

一輪交互型 Rollup 和多輪交互型 Rollup 都需要編寫所有對合約的調用及其數據到鏈上,這些就是調用數據。但是,二者之間的區別在於,需要放到鏈上作爲 assertion 的數據不同。通常來說,assertion 包含對多個對合約的調用。一輪交互型 Rollup 需要把每一步哈希值添加到 assertion 內。如此才能使得每一次調用都可以被單獨挑戰。相比之下,多輪交互型 Rollup 只需要在 assertion 的最後添加整個合約狀態的哈希值即可。(中間狀態哈希值將會按需生成,但僅在極少數存在爭議的情況下。)這樣一來,多輪交互型 Rollup 的鏈上數據成本會略低一些。

一輪交互型 Rollup 中的挑戰期和最終確定性

在任意類型的交互型 Rollup 中,系統都必須具備抵禦審查攻擊的能力。令人擔憂的是,攻擊者可能會提交一個錯誤的聲明,然後發起審查攻擊來阻止所有針對這個聲明的挑戰被公佈到鏈上,直到挑戰期結束,錯誤的聲明被接受爲止。對此的解決方案是,確保挑戰期比審查攻擊的持續時間更長。(也可以採用防禦措施,例如,對發佈錯誤聲明的一方予以更高額的罰款,並鼓勵潛在的挑戰者使用複製和其他系統方法來抵禦審查攻擊。)

鑑於上文對審查攻擊的設想(我會在之後的文章中闡述),挑戰期可能需要很長一段時間。例如,有些系統將挑戰期設爲一週時間。也就是說,交易被提交之後,需要等待整整一週時間才能得到 Rollup 協議的確定——直到那時,通過交易完成的付款纔算已經發生在鏈上。

這會造成很大的問題嗎?可能比你想象的要少。要想了解原因的話,我們先假設一個有效的 assertion 已經被髮布到了鏈上,並且正在等待確認。你或是其他任何人都可以覈實這個 assertion 的正確性。而且你知道 Rollup 協議最後會對有效的 assertion 進行確認。因此,即使 Rollup 協議還沒有確認某個 assertion ,但是每個關注它的人都知道這個 assertion 將會被確認,可以把它當作“已確認過”。他們都知道被確認是遲早的事,因此可以繼續推進下去。

舉例來說,如果你將會通過這類交易收到一筆付款,且每個人都能夠確定這筆付款肯定會發生,因此可以簽署這筆付款並將其轉讓給其他人,被轉讓人也能確定自己將來肯定會收到這筆付款。這幾乎就跟現金一樣,唯一的差別是,因爲是延遲確認,其價值會等於面值減去一小筆利息(譯者注:可以想象成票據貼現)。

關鍵在於,即使在被確認之前,一個有效的交易也可以獲得 “免信任確定性(trustlessly final)”。也就是說,任何人都能夠確定這個交易會得到確認。

多輪交互型 Rollup 中的挑戰期和最終確定性

在多輪交互型 Rollup 中也是如此:該協議在設計上可以讓有效的 assertion 具備免信任確定性,因此任何人都可以確定這個 assertion 一定會得到確認。區別在於,爲了確保交易得到確認,你必須準備好參與到該協議中來保護 assertion ——只要你願意這樣做,你一個人就可以讓有效的 assertion 得到最終確認。

(專門給我們的 Arbitrum Rollup 產品的一個邊注:儘管 Arbitrum 技術的早期版本並沒有提供這種免信任確定性,但是最新的版本是有的。在舊版本的協議中,爲了安全起見,每個被挑戰的 assertion 都會被取消,以防該挑戰的相關方串通起來將錯誤的挑戰結果上鍊。在新版本的協議中,凡是誠實的相關方都可以強制讓正確的結果通過挑戰期,因此有效的 assertion 一定會通過挑戰並得到確認。)

(這裏還需要糾正一個誤區,即,只要有爭議存在,多輪交互型 Rollup 協議就必須“暫停整個網路”,也就是說,如果有惡意參與方願意損失押金,就可以一直阻止網絡進程。在最新版本的協議中並非如此。各方可以繼續發佈新的 assertion ,無論爭議是否繼續,新的 assertion 可以獲得免信任確定性。只是協議的正式確認被拖慢了而已——這需要攻擊者付出巨大代價。)

在多輪交互型 Rollup 協議中,確認一個 assertion 需要多久?在通常情況下,如果一個有效的 assertion 發佈之後沒人挑戰的話,在確認之前就只會經歷一個挑戰期,就像一輪交互型 Rollup 那樣。

如果出現了特殊情況,即 assertion 有效但依然遭到了挑戰,最終確認會在多輪爭議協議的影響下被推遲。挑戰者註定會輸,並失去保證金,但是會將最終確認的時間推後。這不會影響 assertion 的免信任確定性,因爲所有人一開始就可以判斷出該 assertion 是有效的,還可以在必要之時強制確認有效的 assertion 。整個網絡會繼續像往常那樣安全運行下去,所有人都知道這種惡意挑戰最終會輸。

哪種 Rollup 更適合你?

**
**

那麼,你應該採用那種 Rollup 系統呢?如果僅僅用於支付,或是很簡單的智能合約,像 ZK-Rollup 這樣的非交互型系統比較合適。

如果你想運行比較複雜的智能合約,就需要從一輪交互型(例如, “optimistic rollup”)和多輪交互型(例如,Arbitrum Rollup) Rollup 系統中進行選擇。在通常情況下, 這兩種系統都需要等待較長一段時間才能對 assertion 進行最終確認,而且會爲有效的 assertion 提供即時的免信任確定性。一輪 Rollup 系統的優點是可以抵禦 “推遲確認” 攻擊,作惡者無法通過放棄保證金的方式推遲 assertion 的最終確認(在任何情況下,assertion 都具有免信任確定性)。多輪 Rollup 系統的優點是(1)通常情況下佔用的鏈上空間較小,並且(2)可以處理計算量和存儲量較大的合約,不受以太坊 gas limit 的限制。

我們 Offchain Labs 團隊認爲大多數人都會喜歡鏈上成本較低且適用性較廣的多輪 Rollup 系統,如 Arbitrum Rollup ,而且多輪 Rollup 系統的劣勢也可以通過增加挑戰所需的保證金來補足,以此抵禦推遲確認攻擊。

我們還認爲,多輪 Rollup 系統很容易正確實施。這就是爲什麼我們希望接下來的幾個月(甚至更早)在測試網上提供 Arbitrum Rollup 的功能版本。

(完)

(文內提供了許多超鏈接,請點擊閱讀原文到 EthFans 網站上獲取)


原文鏈接 :

https://medium.com/offchainlabs/whats-up-with-rollup-db8cd93b314e

作者 : Ed Felten

翻譯 & 校對 :閔敏 & 阿劍


你可能還喜歡:

乾貨 | Optimistic Rollup vs. ZK Rollup:一探究竟,Part-2 引介 | 以太坊難度炸彈的爆發和拆除科普 | Layer-2 中的有效性證明與錯誤性證明