撰文:Daniel Goldman[1],Offchain Labs[2] 工程師、研究員&作家
編譯:Unitimes_Jhonny
去年出現了兩個新的以太坊流行語。在應用層面,我們獲得了“DeFi”專案,DeFi 利用智慧合約,以無需信任(或至少信任最小化,或至少希望有一天實現信任最小化)的特性來提供傳統金融服務的化身。而在可擴充套件性協議的設計方面,研究者們開始吵嚷著一種稱為Optimistic Rollup 的 Layer2 結構,這些 Layer2 愛好者認為,Optimistic Rollup 帶來的承諾絕非曇花一現的流行語。
今年,隨著一個活躍的 DeFi 生態系統的形成,rollups 也在通向主網的路上,一個問題自然地出現了:這兩者將如何相遇?
我們可以使用 rollups 來擴充套件 DeFi 生態系統嗎?
簡言之,可以!
儘管如人們所料,其中會出現一些新的挑戰。
概述
Optimistic Rollups[3]是一種 Layer2 側鏈結構,尋求減輕以太坊主鏈的負擔。其基本的理念就是,以太坊主鏈將不需要驗證 rollup 側鏈上的所有交易,而僅僅只需釋出這些交易即可,並“樂觀地”認為這些交易是有效的,除非交易明確地被挑戰。
使用 rollups 的核心好處是降低了使用者的 Gas 成本,這意味著整個網路每秒處理的交易量將會增加(至少達到數百 TPS)。
更便宜的交易成本還意味著,某些應用 (如採用複雜密碼技術的隱私解決方案) 將變得可行,因為這些應用在其他情況下消耗 Gas 太多,甚至是不可能實現的。因此,雖然 rollup 本身並沒有提供隱私保護的好處,但它為構建隱私保護技術提供了合適的基礎。
同樣,rollup 也不會增加交易延遲 (速度),但能夠提供一個構建通道 (channels) 的良好的環境,從而實現幾乎即時的交易。
Optimistic Rollups 處理資料的方式為這種結構提供了一些很好的簡單性,特別是相對於其他 Layer2 協議[4]而言。最重要的是,這種簡單性將傳遞給終端使用者的體驗,使用者可以 (而且應該) 幾乎像使用 Layer1 一樣使用 Optimistic Rollups。同樣,對於開發人員和協議設計人員來說,他們所熟悉的許多工具和想法模型仍然是可用的,雖然我們將看到處理一些關於可組合性的挑戰可能需要一些額外的工作。
從使用者的角度來看
從使用者的角度來說,使用者在 rollup 上與 dApp (包括 DeFi 等應用) 進行互動將與在 Layer1 上使用這些應用的體驗幾乎是一樣的。諸如Metamask[5]和Burner wallet[6]等受歡迎的錢包應用可以在 rolup 上支援,區塊瀏覽器也可以檢測 rollup 鏈的活動。
使用者使用基於 rollup 鏈的 dapp(去中心化應用)的基本流程如下圖所示:
首先,使用者在某條 rollup 鏈上儲存一些資金 (可以是 ETH、ERC20代幣或者 ERC721 代幣等等);此第一步仿照了許多 Layer1 dApp 的使用者體驗,即使用者首先必須將資金轉移至某個合約中才能使用該 dapp。此時,使用者可以像往常一樣在這個基於 rollup 鏈的 dApp 上發起交易;如果該 rollup 鏈的設計是優先考慮抗審查性 (censorship resistance)[7],那麼使用者的交易被打包並不會比在 Layer1 上釋出交易更依賴於信任、聲譽或者善意,也不會招致更多潛在的審查或搶先交易。
當使用者想要將自己的資產轉回至 Layer1 上時,可以發起一筆特殊的取款交易(withdrawl transaction)。在這方面,我們將會看到一個潛在的差異:Optimistic Rollup 的安全模型取決於各方發起挑戰的能力,因此我們需要給予各方監測這類活動一定的寬限期,從而證明該使用者的取款是否存在欺詐行為。
這意味著,如果使用者發起了取款請求,那使用者必須等待一定時間,之後資金才會再次在 Layer1 上可用。這種機制提供的經濟安全性來源於生產 rollup 區塊的運營者的資產抵押需求和使用者的這個取款等待時長(Ed Felten 認為3個小時足夠了[8])。
話雖如此,預計/希望的情況是,使用者將很少 (如果需要的話) 真的需要等待這個寬限期。第三方(即除使用者和 rollup 鏈運營者之外的流動性提供者)可以透過在 Layer1 上給使用者傳送等額的價值來購買使用者在 rollup 鏈上等待取款的資金的所有權,並減去一些手續費,這樣使用者就可以在無需等待的情況下獲取資金了。
因此,只要這些流動性提供者確實存在,並且有著一個將其中的複雜性抽離的使用者介面,那麼 rollup 鏈上的取款體驗也將與 Layer1 上的別無二致。
無需信任的 Optimistic Rollup
嗯,但 Optimistic Rollup 真的是無需信任的嗎?簡言之,是的!
任何使用者都可以一種無需信任的方式來使用 rollup (如果使用者想要的話);即便使用者不想要,他們的安全性保障依舊是很強大的。
為了消除任何信任需求,任何人 (使用者或者其他人) 都可以成為 rollup 驗證者,讓他們自己驗證是否有人在試圖欺騙,並且在有人試圖欺騙時加以阻止。這就相當於執行某個額外的軟體(即驗證者軟體),該軟體必須在每次發生爭議期間至少對爭議“檢視”1次。
對於不執行驗證者軟體的使用者來說,只有當 100% 的驗證者都參與了犯罪並相互勾結的情況下,欺詐性的交易 (比如盜竊資金) 才有可能發生。換句話說,只要有一個誠實的驗證者存在(不管是另一個使用者,某個交易所,某個應用開發者,某個區塊瀏覽器,某個錢包提供商,或者某個地下室的匿名少年),或者即便所有的參與方都懷有惡意,但只要他們不會都相互勾結並集體一致撒謊,那麼整條 rollup 鏈就能免於惡意行為的影響。
一旦欺詐的行為被證明,惡意者的存款將被罰沒(get slashed),其中一些會給與欺詐的證明者,這有助於激勵驗證者誠實地進行驗證,使蓄意進行不誠實的行為並給其他驗證者帶來不便的驗證者付出代價。
從開發者的角度來看
現在讓我們轉向應用開發者的角度來。我們很高興地發現,在 rollup 上搭建和部署 dApp 的開發者體驗在很大程度上也將與 Layer1 有著相當類似的體驗。諸如 truffle、web3 和 ethers.js 等開發者工具和庫也可以在 rollup 環境中重新用於開發。此外,在 rollup 鏈上部署的合約依舊可以使用 Solidity 編寫,僅有一些限制[9]。
因此,在 rollup 應用的設計和論證方面,最大的區別在於可組合性問題(composability),可組合性與 DeFi 應用尤為相關。
可組合性挑戰
DeFi 應用的一個更為知名 (有時也是令人擔憂) 的特徵就是它們之間的可組合性,即 DeFi 應用可以直接無需許可地整合其他金融服務。對於 Layer1 上的以太坊合約來說,這種機制的互聯性實際上是“免費的”。當我們將活動劃分到單獨的 Layer2 環境中時,不同的 Layer2 鏈之間的互操作性雖然依舊存在,但互操作性卻成為了一個更大的挑戰。
上圖:Rollup1 鏈與 Rollup2 鏈之間無法輕易地組合交易。
借用一個類比[10]:如果 Layer1 上的諸多 dApp 應用是舍友關係,那麼在不同的 rollup 鏈上的應用就像是同一個社羣中住在不同房子裡的朋友關係。也就是說,雖然住所不那麼擁擠了,但是交流和制定計劃就不再像在公共空間裡那樣那麼簡單。
我們不妨以無損彩票 DeFi 應用PoolTogether[11]為例。PoolTogether的合約管理著隨機選中彩票的獲獎者並分配資金;這些資金由一個單獨的借貸協議 Compound產生的利息組成,且資產本身是由另一個單獨的合約發行的DAI。這種互聯性是無縫的,所有這三個應用都存在於以太坊 Layer1 上。
那麼如果所有這三個合約都在不同的 rollup 鏈上呢?
將像 DAI 這樣的資產從一條 rollup 鏈轉移至另一條 rollup 鏈是沒有障礙的,並且看起來非常類似於在通常的 Layer1 合約之間進行轉移。然而,購買一張 PoolTogether 彩票需要使用 PoolTogether 將資產儲存在 Compound 平臺上,如果 PoolTogether 和 Compound 在兩條不同的 rollup 鏈上,那麼購買一張彩票將不可能僅透過一筆簡單的交易完成。
這是因為,PoolTogether 所在的 rollup 鏈將需要一種新的策略來獲取和“監聽” Compound 所在的 rollup 鏈上的更新資訊。在其他一些情況下,我們可以想象這兩個合約都想要雙向進行對話的權力;或者在某些情況下,我們可能只需要其中一方從另一方獲得偶爾的、週期性的“更新資訊”。
其中涉及的 rollup 鏈之間的通訊工具集類似於不同的 Layer1 區塊鏈之間的通訊方式,或者類似於 Eth2.0 中不同的分片鏈之間的通訊方式。
簡言之,針對不同的用例有許多不同的方式[12],每種方式都有其自身的技術複雜性程度和/或使用者體驗方面的權衡,這取決於特定的需求。技術細節不在本文討論範圍之內,但是使用者體驗的權衡往往包括要求使用者等待更長的時間來確認他們的交易,或者釋出多個交易來完成他們想要的操作。
如果再對這個類比進行延申一下:為了交流和制定計劃,朋友們應該從一個家遷移至另一個家嗎?或者他們隔著窗戶相互嚷嚷?或者透過某個中間的共同房子傳遞資訊?亦或者透過數字的方式聊天 (這種方式很迅速,但需要更先進的通訊技術)?
有很多可能性,但我只想說,在不同的 rollup 鏈上溝通永遠不會像面對面聊天那麼簡單。
但值得注意的是,跨 rollup 通訊仍然比較容易...
跨分片通訊和跨 rollup 通訊都要比跨任意兩條區塊鏈的通訊更加容易,至少在一個方面是這樣的:它們有著一個共同的參考框架-:跨分片通訊中的就是Eth2.0 信標鏈,跨 rollup 通訊中的就是底層的 Layer1 鏈。
而在另一種極端情況下,我們可以想象這樣一種情況:我們將一大堆的應用(比如 DeFi 應用)都放在同一條大型的 rollup 鏈上。在這種情況下,跨 rollup 通訊的複雜性就不存在了,Compound 和 PoolTogether 就能像在 Layer1 上一樣在 Layer2 上自由地相互通訊了。
但這一願景的唯一問題在於,這將削弱我們一開始所追求的可擴充套件性好處。Layer2 的可擴充套件性在很大程度上來自於對工作進行分割槽和本地化,而不是將這些工作都統一在 Layer1 上執行。一條繁忙的 rollup 鏈將難以進行驗證,使我們面臨本來想要避免的問題。換句話說,我們不想要從一個過度擁擠的房子搬進另一個過度擁擠的新房子。
因此,理想的場景可能是介於兩者之間:那些受益於 (或者需要) 可組合性的 DeFi 應用可以選擇遷移至同一條 rollup 鏈上,同時根據需要透過適當的方式來實現與其他 rollup 鏈的通訊。
上圖:dApp 應用可以根據需要聚集在相同的 rollup 鏈上,以保持緊密的通訊,就像人們聚集在地區和城市的方式一樣。
Layer2 的一個關鍵價值主張就是可以進行無需許可的試驗:dApp 和使用者可以根據預期需要的服務和互動來選擇本地環境,從而使自己能夠獲取新的功能並降低費用,同時緩解更大範圍的 Layer1 網路擁堵。
就 Layer2 的構建而言,Optimistic Rollups 在提供這些好處的同時保留了使用者期望的大多數關鍵 UX(使用者體驗)。當前,隨著可擴充套件性解決方案變得可用,以及我們朝著 DeFi 演化的下一階段邁進,圍繞促進 rollup 鏈之間的互操作性問題將是重要的考慮因素。
參考連結:
[1]https://twitter.com/DZack23
[2]https://offchainlabs.com/
[3]https://docs.ethhub.io/ethereum-roadmap/layer-2-scaling/optimistic_rollups/
[4]https://www.theblockcrypto.com/post/16705/understanding-plasma-part-2-make-plasma-fungible-again
[5]https://metamask.io/
[6]https://xdai.io/
[7]https://medium.com/offchainlabs/eleven-questions-to-ask-your-rollup-provider-b0831ee6b864
[8]https://medium.com/offchainlabs/fighting-censorship-attacks-on-smart-contracts-c026a7c0ff02
[9]https://github.com/OffchainLabs/arbitrum/blob/master/docs/Solidity_Support.md#user-content-restrictions
[10]https://twitter.com/licuende/status/1247950214327042048?s=20
[11]https://www.pooltogether.com/
[12]https://eprint.iacr.org/2019/1128.pdf