與 Kubi 合作完成。感謝 Drew、Justin、Ladislaus、Conor、Lin 的審閱和反饋。反饋並不一定意味著認可。
Custard (透過謹慎的狀態管理來限制使用者狀態,以避免下游的反悔)是一種技術,可以透過仔細管理狀態來實現基於 rollup 的原子可組合的超級交易。關鍵洞見是,透過限制超級交易所依賴的特定部分的 L1 狀態,我們可以使驗證者在不需要控制整個 L1 塊的情況下安全地提前發出 L1 執行預確認。這減少了引導預確認協議所需的驗證者協調,並允許基於 rollup 更早地提供超級交易,而無需更多參與的驗證者。本文探討了三種實現 Custard 的方式:透過 EIP-7702、智慧合約和排除預確認。
為什麼這很重要?
基於序列化的主要好處是它可以在 L1 和基於 rollup (BRU) 之間實現同步和原子性。這意味著在兩個層上的操作可以組合成我們所謂的"超級交易" - 一個跨兩個層工作的交易包。
一個現實世界的例子
讓我們考慮一個實際的例子:L1→L2→L1 套利。想象 Alice 想原子地:
- 將她的代幣從 L1 轉移到 BRU
- 在 BRU 上進行交易
- 將她的代幣和利潤轉回 L1
目前,這些都是獨立的步驟,中間會有延遲(例如,對於樂觀 rollup,步驟 2-3 通常需要 7 天)。應用 Custard,Alice 可以將所有這些操作打包成一個超級交易,在一個以太坊塊內完成。
為了使超級交易廣泛採用,我們需要解決三個關鍵挑戰:
- 實時證明:我們需要一種方法來快速結算 BRU 的狀態,以便在單個 L1 塊內提取
- 保證原子性:我們需要機制來確保超級交易的所有部分要麼全部成功完成,要麼全部不發生
- 驗證者可用性:我們需要足夠的驗證者參與,以確保使用者可靠地獲得超級交易
本文的其餘部分將檢查這些挑戰和現有的解決方法,然後介紹 Custard 作為將它們結合在一起的方法。
挑戰 #1: 實時證明
傳統方法及其侷限性
到目前為止,人們普遍認為(無需信任的)即時從 rollup 提取需要"實時證明" - 本質上,rollup 的狀態必須首先透過有效性證明進行結算。為了使 Alice 的超級交易在一個 L1 塊(12 秒)內完成,有效性證明的生成速度需要更快。然而,目前市場上還沒有部署能夠如此快速生成這些證明(實時 SNARKs)的技術,但有許多令人驚歎的努力正在進行中()。
當前的變通方法
一些專案(UniFi、Gwyneth、T1)轉向了可信執行環境(TEE)作為 SNARKs 的替代品,用於證明 rollup 的狀態轉換函式。雖然 TEE 可以比 SNARKs 生成證明更快,從而實現實時證明,但它們也帶來了一個重大缺點:需要信任硬體製造商和證明者。這種額外的信任假設為基於 rollup 引入了傳統 SNARK 系統所沒有的新風險。
一種新的解決方案:解算器方法
Nethermind 最近提出了一種解決方案,它在不需要實時證明的情況下實現了即時提取的使用者體驗。他們的方法:
- 使用解算器在 L1 上立即為使用者提供提取流動性,而無需先結算 BRU 狀態
- 維護原子性(解算器和 BRU 橋接受到重組的保護)
- 維護無需信任(無需信任解算器或 TEE)
- 在實時證明技術成熟之前提供一條實際的前進道路(以資本效率為代價)
挑戰 #2: 保證原子性
為了使 Alice 的超級交易順利進行,我們需要確保所有子交易要麼全部成功完成,要麼全部不發生。這就是 執行預確認(EPs)的作用所在。
執行預確認的作用
為了保證超級交易的成功,我們需要以太坊驗證者提供四個特定的保證:
- L1 存款保證:確認 Alice 的資金將成功從 L1 轉移到 BRU
- L2 交換保證:確保 Alice 在 rollup 上的交易將按預期執行
- L2 提取保證:確認 Alice 將資金從 BRU 轉回 L1 的請求將被處理
- L1 解算器保證:確保解算器在 L1 上轉移 Alice 的資金
為什麼以太坊驗證者很重要
一個關鍵的洞見是,這些保證必須來自以太坊驗證者自身。他們獨特地位於這個位置,因為他們可以成為兩個層的提議者:
- 在以太坊上,他們對 L1 擁有寫鎖定,因為他們有權提出下一個塊
- 在 BRU 上,他們可以被配置為在他們的時間段內唯一有權排序交易的人
這種雙重寫鎖定是基於序列化的特殊之處 - 只有以太坊驗證者才能可信地承諾一個超級交易將完全按計劃執行。基於預確認是驗證者做出這些承諾並使之具有約束力的機制 - 透過質押資本,驗證者成為預確認者,如果他們未能兌現承諾,將面臨經濟處罰。
挑戰 #3: 驗證者可用性
L1 EP 約束
L1 EPs 的一個關鍵限制是它們的"即時"性質。驗證者只能在他們是當前塊提議者時安全地發出這些 L1 EPs。為什麼?因為未來的驗證者沒有對 L1 的寫鎖定,而早期的驗證者可能會以破壞他們的 L1 EPs 的方式改變 L1 狀態。
這與 rollup 上的 L2 EPs 不同,在 rollup 上,驗證者可以安全地提前做出承諾,因為 rollup 的智慧合約確保只有指定的預確認者可以在他們的回合之前和期間寫入狀態。
引導挑戰
這種即時性約束造成了兩個重大問題:
- 可用性有限:超級交易只能在 L1 驗證者選擇作為預確認者的塊中發生
- 使用者體驗問題:除非每一個以太坊驗證者都參與到這個系統中,否則總會有一些時隙無法提供超級交易
讓 100% 的以太坊驗證者參與是一個巨大的商業挑戰。因此,我們需要一種替代方案:找到一種方式讓驗證者可以安全地提前發出 L1 EPs。
什麼是 Custard?
Custard 透過一個關鍵觀察提供瞭解決我們時間問題的方案:我們並不總是需要控制整個 L1 塊來做出安全的保證。相反,我們可以選擇性地鎖定超級交易需要處理的 L1 狀態的特定部分。
這一洞見很強大,因為它意味著我們可以提前發出某些型別的 L1 EPs,只要我們能夠保證我們關心的特定狀態不會改變。透過只鎖定我們需要的部分,而不是要求控制所有內容,我們可以大大減少需要作為預確認者的驗證者數量。
注意:我們接下來描述的實現都是有意簡化的,以清楚地說明機制。在實踐中,這些可以進行最佳化,以提高資本效率和通用性。
基於 EIP-7702 的 Custard
EIP-7702使使用者賬戶(EOA)能夠基於任何智慧合約設定自己的自定義程式碼,從而將其變成一個智慧賬戶。我們可以利用這一點來建立關於使用者賬戶狀態的時間鎖定保證。
它是如何工作的
讓我們來看看 Alice 如何使用 EIP-7702 執行她的超級交易:
- 初始鎖定(插槽
S
)- Alice鎖定她賬戶的nonce直到未來的插槽
S'
- 這可以防止在指定插槽之前對她的賬戶進行任何更改
- Alice鎖定她賬戶的nonce直到未來的插槽
- 設定(插槽
S + 1
)- Alice向將在未來插槽
S'
提議的預配置器請求她的超級交易 - 該交易包括:
- 向Rollup存入
B
ETH - 執行套利交易
- 提取
B + ε - f
ETH(原始金額加上利潤減去費用) - 讓解算器在L1上完成提款
- 向Rollup存入
- Alice向將在未來插槽
- 驗證(插槽
S + 1
)- 預配置器檢查Alice的賬戶是否正確鎖定
- 如果驗證透過,預配置器發出所有必要的預配置
- 執行(插槽
S'
)- 預配置器執行整個交易:
- 將Alice的
B
ETH存入BRU - 將BRU blob提交到L1,其中包含Alice的交易
- 完成解算器向Alice在L1上轉賬
B + ε - f
ETH
- 將Alice的
- 預配置器執行整個交易:
- 結算(插槽
S' + Δ
)- 經過
Δ
個區塊後,BRU狀態得到證明 - 解算器可以透過從BRU提款來收回
B + ε + f
ETH
- 經過
關鍵洞見
透過鎖定她的賬戶,Alice保證在超級交易執行時會有足夠的資金(B
ETH)。如果要求賬戶首先被鎖定,預配置器可以安全地提前發出L1 EP,從而解決我們的時間問題。
使用智慧合約的Custard
在等待EIP-7702釋出的同時,我們可以使用智慧合約實現類似的結果。關鍵區別在於,使用者必須先將資產存入一個託管合約,該合約強制執行相同的保證,而不是直接修改賬戶行為:
- 資產被鎖定直到目標插槽
- 資金只能存入Rollup
- 在此之前不允許資產餘額減少
執行流程與EIP-7702方法相似,但有一個明顯的優勢:託管合約自然會積累一池被鎖定的資產,從而在協議設計中實現潛在的資本效率最佳化。
使用排除預配置的Custard
排除預配置代表了一種不同型別的驗證器承諾:不是保證他們將做什麼,而是承諾他們不會做什麼。具體來說,他們承諾透過不允許發生特定的賬戶操作來防止某些狀態變更。雖然排除通常與以太坊的價值觀相悖,但在這種情況下謹慎使用,它可以發揮建設性作用:鎖定特定的賬戶狀態以保持提前的L1 EP有效性。重要的是,只有在賬戶所有者明確授權的情況下,才允許這種型別的預配置,以避免審查。
工作原理
讓我們來看看Alice如何使用排除預配置來執行她的超級交易:
- 釋出執行預配置
- Alice在目標超級交易插槽之前從驗證器那裡獲得排除預配置
- 每個排除預配置承諾不會:
- 包含會增加Alice的nonce的交易
- 包含會減少Alice的ETH餘額的交易
- 執行
- 當目標插槽到來時,Alice的EOA保證會有所需的ETH
- 超級交易可以安全地進行
這種方法的一個優點是,所有執行預配置都是在鏈下發布的,從而降低了gas成本。但它引入了一些複雜性。超級交易仍然需要所有早期插槽驗證器成為L1排除預配置器 - 雖然比之前的方法更容易,但這仍然是一個重大的BD挑戰。此外,支付排除預配置的費用變得很棘手,因為在最佳情況下什麼都不會上鍊,而且在評估違約風險時,需要仔細考慮抵押要求和懲罰條件。
這種方法的侷限性
Nethermind的解算器方法的一個關鍵區別是,提款請求有一個簡單的"L1輸出條件"- 它們只需要驗證代幣是否到達特定的L1地址。這種簡單性是支援無需實時證明的原子提款的關鍵。但是,更復雜的超級交易可能需要L1輸出條件依賴於複雜的L2狀態變更,在這種情況下,我們可能需要實時證明L2狀態。雖然Custard管理L1狀態依賴性的原則仍然適用,但實現要麼需要等待實時SNARK技術的成熟,要麼接受基於TEE的證明解決方案的額外風險。