本文系我在Nethermind 公司博士實習期間的成果。在此特別感謝Nethermind 研究團隊,尤其是Conor McMenamin和Lin Oshitani ,感謝他們對多稿提供的寶貴意見。
I. 狀態鎖:簡介。
當提議者發出狀態鎖時,他們承諾用戶的交易將能夠訪問一個或多個存儲槽,並獲取用戶指定的精確值。通常,這些值是前一個區塊末尾存儲槽的值。提議者隨後會安排交易順序,以確保用戶的交易能夠看到承諾的存儲槽值。直觀地說,狀態鎖可以類比於區塊頂部交易(Top-of-Block,簡稱 ToB)。第一個交易可以看到區塊中其他任何交易都未觸及的狀態。狀態鎖賦予用戶類似的權限,允許用戶請求其交易查看前一個區塊末尾某些存儲槽的值,從而有效地確保對未觸及狀態的優先訪問權。然而,與 ToB 交易不同的是,狀態鎖允許多個交易對同一區塊中不相交的狀態部分擁有優先訪問權。
二、狀態鎖的預期邏輯演進。
步驟 1)用戶向提議者發送狀態鎖定請求,指定狀態快照 S。
- S 被指定為一組存儲位置 L1…LN 及其對應的值 V1…VN。
- 請求中將同時指定預付小費和後付小費。
步驟 2)提議者對請求進行簽名並將其返回給用戶,從而承諾用戶未來的交易將針對 S 執行。
- 提議者現在至少會收到預付小費。
步驟 3)用戶收到 S 已鎖定的確認信息。
步驟 4)用戶在截止日期(到期日)之前的某個時間點發送後續交易 T。
步驟 5)提案人收到 T,並對交易列表進行排序,使 T 成為第一個接觸 S 的交易。
- 在發佈區塊之前,提議者會模擬用戶的交易,以確保它只觸及 S。如果交易通過寫入 S 之外的存儲位置而“越界”,提議者會向用戶提交證明和無效化合約(參見附錄 A),並且不再因未包含 T 而受到懲罰。
步驟 6)提案人收到執行 T 對 S 的後付款。
- 即使 T 撤銷,T 仍然會收到 postPayment。成功執行並非承諾的一部分。
三、可視化。

四、澄清說明。
1. 該提案啟發式地假設當前 L1 區塊提議者是狀態鎖定請求/授權的唯一處理者,但允許提議者將其權限委託給複雜的第三方,例如網關或中繼。
2. 由於提議者可以為同一個區塊授予多個狀態鎖,因此存在後續交易可能意外“越界”併發生重疊的風險。附錄 A 討論了意外重疊的問題以及一些緩解策略。
3. 預計對狀態鎖定的執行將包括對不當行為進行懲罰(例如,提議者收到後續交易但未能將其包含在內)。
4. 狀態鎖不包含執行後保證。
5. 提議者僅收取預付款(如果未收到後續付款)或後付款,而非兩者兼收。例如,可以通過使用相同的隨機數對預付款和後付款進行簽名來實現互斥。
6. 用戶無需發送後續交易。
五、應用案例。
1. 核心用例:普及區塊頂部訪問。
狀態鎖的核心應用場景是允許多個用戶保證訪問同一區塊內未被修改的狀態。目前,獲取未修改狀態的途徑是競標區塊頂部(ToB)的包含權。由於排在第一位,ToB 交易實際上擁有對整個狀態樹的鎖定。這種贏家通吃的機制存在諸多不足,其中一點我們已經提到:每個區塊中只有一筆交易能夠保證訪問未修改的狀態。
另一個問題是,無論誰贏得 ToB 收錄權,都可能支付了超出實際需求的費用。一筆交易可能只需要訪問特定的資金池,但用戶卻要付費才能有效地鎖定狀態根。而且,即便支付了如此高昂的費用,他們仍然無法獲得 ToB 收錄的保證。中標者和其他人一樣,付費後只能等待,看看他們的交易最終會被收錄到哪裡。
狀態鎖定從根本上改變了這些動態:用戶除了 ToB 包含之外還有更多選擇,任意數量的用戶都可以擁有優先訪問權限,每個用戶都可以只競標他們感興趣的狀態部分,並且用戶會收到一個可削減的承諾,表明相關的狀態部分已被鎖定。
2. 從核心用例中得出的兩個具體例子。
由於狀態鎖的作用是確保對未修改狀態的訪問安全,因此其應用場景與用戶希望將交易置於區塊頂部的理由在很大程度上重合。雖然此類理由或應用場景有很多,但其中有兩個尤其值得關注。
2.1 新的套利策略。
想要在區塊頂部進行交易的主要原因之一是確保套利機會。雖然狀態鎖定的核心用途是讓更多人有機會進行套利,但它也催生了新的交易策略。原因之一是後續交易賦予用戶最大的選擇權。在標準的中心交易所 (CEX) 和去中心化交易所 (DEX) 套利中,用戶可以鎖定 DEX 價格,並在到期前發送後續交易,根據需要調整交易以從價格偏差中獲取最大收益。或者,如果價格意外收斂,用戶可以選擇不發送後續交易(但仍需支付預付款),從而避免潛在損失。
2.2 為低頻用戶保障重要交易。
雖然狀態鎖定主要面向專業交易員等高級用戶,例如設計交易機器人的專業人士,但對於發送他們認為特別重要的交易的普通低頻用戶來說,它也有獨特的用途。對於在去中心化交易所 (DEX) 上進行大額交易(對他們而言)或尋求優先獲得 NFT 鑄造權的用戶來說,狀態鎖定可以提供至關重要的保障,確保他們的交易不會失敗或被搶先交易搶先。
3. 預確認用例。
狀態鎖授權可以被視為對後續交易的一種預確認。一般來說,預確認的主要用途是提升用戶體驗,尤其是在 基於彙總的場景下。狀態鎖作為一種預確認方式,符合這一用途:狀態鎖能夠確保用戶的交易在快照中指定的條件下執行。此外,狀態鎖相較於其他類型的預確認方式也具有一些優勢,使其擁有其他應用場景。
3.1. 比納入預確認具有更嚴格保證的預確認。
通過預確認機制,用戶只知道自己的交易最終會被打包進區塊。而通過狀態鎖定機制,用戶不僅知道交易會被打包,還能確切地知道交易將進入哪些狀態。
3.2. 對於提議者/預協商者而言,狀態鎖定的風險比執行預確認的風險要小。
嚴格意義上的執行預確認涉及對特定執行後狀態根的承諾。較為寬鬆的變體則涉及對狀態差異或用戶意圖的較弱承諾。由於預確認方需要對執行後的結果負責,因此必然會承擔因建模/仿真預測不完善而產生的事前風險(例如,錯誤的冷熱假設、遺漏的預言機更新、遺漏的代碼路徑),尤其是在預確認方不擁有獨佔的塊構建權限的情況下。相比之下,狀態鎖通過僅承諾執行前的條件來避免此類風險,從而有效地將所有事前風險轉化為越界風險。
乍看之下,降低提議者風險似乎會增加用戶風險。但實際情況更為微妙:提議者承諾預先狀態條件,並通過越界篩選來強制執行這些條件,而用戶則根據快照中指定的值模擬後續操作。藉助足夠強大的工具,用戶可以像提議者/預協商程序一樣精確地模擬針對快照的執行結果。然而,與預協商程序不同的是,用戶無需為未模擬的結果支付懲罰,只需承擔風險和 gas 費用。因此,通過將責任從狀態後的結果轉移到狀態前的條件,狀態鎖可以在不顯著增加用戶風險的情況下降低提議者風險。
3.3. 為用戶提供強有力的搶先交易保護的預先確認。
通過將狀態鎖定在上一個區塊結束時的值,用戶可以確保他們的交易是當前區塊中第一個觸及鎖定狀態的交易。這使得搶先交易幾乎不可能,因為任何其他交易都無法在不違反狀態鎖定的情況下搶佔後續交易。
4. 提高交易的燃氣效率。
直觀地說,鎖定執行前的確切狀態可以使事務行為更可預測。因此,事務更容易進行優化。一項關於 EIP-2930 訪問列表事務的研究提供了一個具體的例子,說明了這種機制是如何運作的。
EIP-2930事務包含一個地址和存儲密鑰的訪問列表,該列表在執行開始時會被“預熱”,以便按照EIP-2929中規定的預熱訪問成本收取訪問費用。根據該研究的作者所述,事務訪問列表 (TAL) 的 gas 節省潛力主要受到區塊內狀態不確定性的制約:
“我們的分析表明,約有 71% 的交易可以通過包含理想的 TAL 而獲益,但基於最後一個區塊的狀態,無法正確計算理想的 TAL。相反,它需要了解交易執行時所在的區塊內狀態,而這事先是未知的——這使得在這些情況下正確計算 TAL 幾乎不可能。”(第 2 頁)
通過鎖定精確的執行前狀態,狀態鎖使得計算理想的交易鎖定列表 (TAL) 成為可能,該列表僅包含交易將要訪問的所有存儲鍵。儘管由於其他類型的錯誤(例如不必要地包含默認熱地址(例如,收款人地址)),TAL 仍然可能存在缺陷,但要獲得能夠最大限度優化 gas 使用的完美 TAL,就需要知道精確的執行前狀態。
5. 其他好處:減少內存池爭用,降低返還率。
雖然 MEV-Boost 已經大幅減少了與優先 gas 拍賣相關的許多負面外部性,例如競價戰、垃圾信息充斥內存池以及被失敗交易堵塞的區塊,但狀態鎖定仍然可以通過減少內存池爭用和降低迴滾率來幫助使區塊生產更加有序和高效。
5.1 減少內存池爭用。
Flashbots 目前允許區塊構建者公開諸如 mev_simBundle 之類的 API 端點,從而允許搜索者根據其最新的區塊模板模擬區塊包。通過公開一個新的 proposalr_getLockedStates 端點,提議者可以共享一個實時鎖定狀態列表,使理性用戶有機會進行自我審查,從而減少公共內存池中的爭用。然而,這種設計選擇可能會帶來隱私問題,因為它需要公開與未發佈交易相關的信息(例如,潛在的套利目標)。
5.2 降低逆轉率。
通過了解確切的執行前狀態,錢包、dApp 和高級用戶將能夠以更高的準確度模擬交易,從而有助於防止因 gas 限制不足、儲備值過期和外部調用失敗等原因導致的交易回滾。
六、關鍵術語。
意外重疊:當事務未經授權訪問狀態鎖定授權保留的某些狀態時,就會發生意外重疊。
- 詳見附錄A。
域:EVM 持久狀態中的可尋址存儲位置,指定為集合 {A, K},其中 A 是合約地址,K 是 32 字節存儲槽(密鑰)。
域-值對:域 {A, K} 和值 V 的對,表示為 {{A, K}, V}}。
- 以 Uniswap V2 上的 WETH/USDC 資金池為例進行說明:
- 方塊高度:22385280
- 域:{0xB4e16d0168e52d35CaCD2c6185b44281Ec28C9Dc, 0x…03}
- 值:{0x66304740000000000000000008d9350c2aac000000000124394c1432cced5400}
- 域值對:{{0xB4e16d0168e52d35CaCD2c6185b44281Ec28C9Dc,0x…03}, 0x66304740000000000000000008d9350c2aac000000000124394c1432cced5400}
到期日:強制納入後續交易的最後期限。
- 過期時間設定了一個截止日期,在此之前,後續交易必須被接收,否則提議者將因未包含後續交易而被扣分。如果後續交易在過期時間之後到達,則提議者不會因未包含後續交易而被扣分。
後續交易:根據狀態鎖定授權發送的交易。
- 如果用戶發送多個交易以包含在同一個區塊中,並且其中一個是狀態鎖的後續交易,則後續交易將通過交易的 nonce 與狀態鎖請求中指定的 nonce 之間的匹配來確定。
越界訪問:當後續事務寫入狀態鎖定請求中未指定的域時。
權限集:後續交易需要訪問的域的集合,取自快照。
例如,A 為合約地址,K 為存儲槽位,V 為 K 的預留值:
- 快照:{{{A1,K1},V1}},{{A2,K2},V2}}}
- 權限集:{{A1, K1}, {A2, K2}}
直觀地說,權限中的元素數量可以用來計算或衡量“多少”狀態被鎖定。
postPayment :用於完成狀態鎖定的優先費用。
postPayment 的金額計算中包含了 preTip。postPayment 實際上就是“全額”優先服務費:
postPayment = preTip + 包含後續交易的補償
後續交易授權提案人收取後續付款。
preTip :向提案人支付的備用款項,包含在狀態鎖定請求中。
如果出現以下情況,preTip 將補償提議者:(a)用戶未能發送後續交易,或(b)後續交易因寫入快照之外的域而越界(參見附錄 A)。
狀態鎖定請求授權提案人收取預付款。
必須使 preTip 和 postPayment 互斥,例如,通過對兩者使用相同的 nonce 進行簽名。
快照:狀態鎖定請求指定的所有域值對的集合。
- 示意圖示例:
- 單地址,單存儲槽:{{A, K}, V}
- 單地址多存儲槽:{{{A1, K1}, V1}, {{A1, K2}, V2}}}
- 多個地址,每個地址一個存儲槽:{{{A1, K1}, V1}, {{A2, K2}, V2}}}
狀態鎖:一種可刪除的承諾,用於確保事務針對快照指定的一組狀態執行。
- 注意:鎖定狀態的概念本身並不包含對鎖定狀態執行交易的概念。用戶可能出於惡意目的請求狀態鎖定,例如阻止他人進行交易。儘管如此,我們的用法是限定性的:根據我們的含義,“狀態鎖定”意味著承諾對鎖定狀態執行交易。
狀態鎖請求:請求狀態鎖的簽名消息。
- 狀態鎖定請求將指定以下內容:(i) 快照,(ii) preTip,(iii) postPayment,(iv) 後續交易的 nonce,(v) 後續交易所在的區塊,以及 (vi) 到期時間。用戶將使用 EIP-712 等標準進行簽名。
{
blockNumber:…,
snapShot:[(A1, K), (V1)…],
preTip:…,
postPayment:…,
expiry:…,
nonce:…,
}
狀態鎖定授權:一條簽名消息,用於頒發狀態鎖定。
第七條 公平交換。
後續問題。
後續問題的核心在於,提議者可能批准了用戶的狀態鎖定請求,卻忽略了用戶的後續交易,從而未能履行其承諾。需要澄清的是,後續問題與預確認及時公平交換的問題並不相同。預確認通過讓預確認方向用戶發送具有約束力的及時預確認來改善用戶體驗。因此,如果預確認未能及時發出,則違反了公平交換原則。其核心邏輯問題在於,考慮到延遲發送預確認的經濟動機,如何確保預確認的及時發出。相比之下,後續問題並非在於確保及時性。相反,其核心邏輯挑戰在於,如何確保提議者履行其承諾,將用戶的後續交易包含在內(假設提議者及時收到了該交易)。
問:為什麼提案人會忽略後續交易並放棄後續付款?
(A1)他們可能收到了更高的碰撞交易報價。
(A2)他們可能會不加區分地批准狀態鎖定請求,以便儘可能多地收集預提示。
該策略自然而然地只包含那些能帶來最大後續收益的後續行動。
(A3)提案者可能只是在審查用戶。
緩解策略。
(S-1)將小費分成預付和後付兩部分已經為用戶提供了一定的保障。(這種兩部分小費的思路借鑑了盧班在其提議者承諾體系中解決公平交換問題的方法。)
預付金額越小,用戶的風險就越低。但與此同時,提議者的風險也會相應增加。用戶可能承諾支付大額的後續款項,但卻未能履行承諾,這可能會導致提議者的機會成本損失。公平交易始終是雙向的。
(S-2) 提議者每個域(即每個{A, S}對)僅允許授予一個狀態鎖。提議者仍然可以自由地包含針對已鎖定域執行的非狀態鎖交易(包括預確認),只要這些交易是在該域不再被鎖定之後(即在後續交易之後)執行的。
強制執行可以採取智能合約的形式,對向同一域發出多個狀態鎖的提議者處以罰款。
優點:由於提議者不能授予域上額外的鎖,因此沒有動機隨意發出出價或接受小費更高的競爭狀態鎖請求。
缺點:提議者仍有可能忽略用戶的後續交易,以便(a)審查用戶或(b)接受更高的非狀態鎖定交易出價。
(S-3)將狀態鎖視為獨佔訪問權限:只有用戶的後續事務才有權修改其權限集 P 中的域。區塊中的任何其他事務都不能寫入 P 中的任何域(作為地址和存儲鍵 {A, K} 的對)。
優點:保護用戶免受 (i) 出價過高和 (ii) 為最大化預付小費而隨意發放的影響。
缺點 1:這種保護的代價是限制了提議者添加針對 P 執行的其他交易的能力。
缺點 2:獨家訪問權限可能會使請求成本大幅增加。
缺點 3:提案人仍然可以通過忽略後續交易來進行審查。
這是一個始終如一的主題:防止純粹的審查制度非常困難。
(S-4)交易證明委員會。
另一種方法是將後續交易發送給提案人和認證委員會。委員會的每位成員記錄收到後續交易的時間,並將其告知其他成員。如果足夠比例的委員會成員在到期前確認收到了後續交易,則提案人可能因未包含該交易而被扣分。
(S-5)通過可信中介進行路由。
使用可信中介機構而非委員會的主要優勢在於無需在網絡中傳播認證信息。這能讓用戶有更多時間延遲發送後續交易。主要缺點是中心化以及引入了額外的信任機制。
(S-6)鏈上註冊表中記錄的提議者的信譽評分(信譽“懲罰”)。
最簡單的情況下,註冊表可用於記錄提議方性能的原始數據,例如未完成後續交易的數量/百分比,但這並不一定意味著惡意行為。儘管存在這種侷限性,註冊表至少可以為風險評估提供一些依據。用戶可能希望避免選擇那些後續交易未完成率較高的提議方(或網關),無論其是否存在過錯。註冊表還可以用於設定最低可靠性要求。
及時性。
狀態鎖定機制通過將優先費用拆分為預付款(preTip)和後付款(postPayment),並以後續交易包含在內為條件,來激勵及時公平的交易。在其他條件不變的情況下,用戶越早收到已簽署的狀態鎖定授權,後續交易的潛在價值就越大。因此,延遲發放狀態鎖定授權可能會導致用戶價值損失。如果後續交易的價值損失過大,用戶可能決定不發送該交易,而提議者則可能損失後付款。相反,用戶越早收到狀態鎖定授權,就越有可能發送後續交易,因為其潛在價值更大。因此,及時發放狀態鎖定授權可以最大化用戶和提議者的價值。
幽靈贈款。
如果出現以下兩種情況之一:(a) 用戶未能發送後續交易,或 (b) 後續交易超出範圍(參見附錄 A),則狀態鎖定請求會授權提議者收取預付金(儘管預期設計是預付金應由後付金替代/支付)。雖然這降低了提議者的風險,但也引入了一種新的途徑,可能導致用戶無法獲得公平的交易。由於狀態鎖定請求授權支付預付金,惡意提議者無需發出承諾包含用戶後續交易的狀態鎖定授權即可收取預付金。如果用戶為從未發送的“幽靈”授權支付費用,則公平交易原則遭到破壞,因此,核心的邏輯挑戰在於確保提議者不會為“幽靈”授權收取預付金。
用戶可以選擇冒險在未獲得授權的情況下發送後續交易,但這既冒險又不公平,因為即使在最好的情況下,他們也需要為從未授予的狀態鎖定支付後續費用。更合理的選擇是拒絕發送後續交易或提交常規交易。因此,儘管在技術上可以不獲得狀態鎖定授權就發送後續交易,但這並不能確保交易的公平性。
更好的方案是利用第三方認證,讓提案人將狀態鎖定授權同時發送給用戶和認證委員會或可信中介機構。用戶隨後可以通過提交由第三方簽署的“缺失授權見證”(missingGrantWitness)來證明公平交易遭到破壞,從而向退款合同(fundingContract)追回預付款並向提案人收取費用。另一種方案是要求提案人證明已及時發送狀態鎖定授權才能收取預付款。收取預付款需要同時包含授權書和第三方簽署的“已發送授權見證”(sentGrantWitness),以證明授權書已及時發出。由於狀態鎖定請求不再授權收取預付款,因此必須以其他方式支付。一種方法是讓用戶向預付款支付合同(preTipPayment contract)存入資金。提案人隨後可以通過向預付款支付合同提交授權書和“已發送授權見證”來收取預付款。
附錄。
以下附錄繼續假設:(i) 當前 L1 提議者(或其代理人,例如網關)是狀態鎖請求/授權的唯一處理者;(ii) 狀態鎖授權涉及當前塊 L1 狀態樹中基於地址/存儲槽對定義的一組域。此範圍假設旨在優先考慮簡潔性和清晰度,但不可否認地犧牲了廣度。因此,儘管狀態鎖可以被視為一種預確認機制,但許多細節可能無法直接應用於 L2 變體(例如,我們對“意外重疊”的定義依賴於 EVM 操作碼語義)。
附錄A:意外重疊問題
狀態鎖允許多個交易優先訪問互不重疊的狀態部分。但這項新功能也給提議者帶來了額外的風險。由於用戶在狀態鎖請求中不包含後續交易,提議者無法篩選掉漫遊交易。他們必須“盲目”授予狀態鎖。如果某個後續交易意外觸及了為其他交易保留的狀態部分(即意外重疊),提議者可能會面臨嚴厲的懲罰。
澄清“出界”和“意外重疊”的定義。
越界訪問的最佳定義是:對事務權限集之外的域進行的任何寫入操作(SSTORE)。重疊讀取(SLOAD、BALANCE、外部調用視圖函數)不會改變狀態,因此可以視為無害重疊。通過這種方式定義“越界”訪問,諸如重疊的 Oracle 查詢之類的操作將不被視為越界訪問。
越界訪問:當狀態鎖事務 T 寫入其權限集 P 中不存在的域 {A, K} 時,就會發生越界訪問。
意外重疊:事務 T1 與事務 T2 意外重疊,當 T1 在 T2 之前執行,並且 T1 寫入 T2 的權限集中的某個域 {A, K} 時,事務 T1 就會發生意外重疊。
防止意外重疊。
常規事務可能會與狀態鎖事務意外重疊。防止這種情況發生的最直接方法是優先處理狀態鎖事務。但狀態鎖之間的意外重疊問題卻難以解決。本附錄的其餘部分將討論一些緩解策略。
最小化策略 1:基於 EVM 的權限保護。
一種緩解意外重疊的方法是使用 EVM 內部的權限保護機制,通過回滾越界寫入嘗試來“強制”後續操作保持在各自的權限範圍內。雖然可以使用類似原生預編譯的機制直接在 EVM 中強制執行權限集,但這在目前的主網上並不實際。引入新的預編譯地址需要正式的 EIP(以太坊集成提案)、協議級硬分叉、協調的以太坊客戶端實現、審計以及生態系統工具。總的來說,開發、測試和社交協調方面的開銷使得基於 EVM 的方法在短期內不可行。
最小化策略 2:鏈下模擬。
另一種方案是讓提議者在鏈下模擬後續交易。如果提議者檢測到意外重疊,他們可以生成一個越界證明併發送給用戶,理想情況下,應留出足夠的時間供用戶修改後續交易。提議者也需要時間重新模擬。為了適應這種來回操作,應提前設置槽位的過期時間,並且需要設置第二個過期時間。如果用戶在第二個過期時間之前未能返回“已修復”的後續交易,則可以將越界證明發送到無效合約。
鏈下模擬存在的問題。
雖然這種方法比原生預編譯更可行,但也並非沒有挑戰。首先,提議者必須能夠在不向用戶公開交易列表的情況下,提供令人滿意的越界證明。雖然在某些情況下可以做到這一點,例如包含不必要交易環節的交換,但這更像是例外而非普遍情況。其次,由於時間有限,很難確保後續修改交易的公平交換。第三,無效化合約需要處理提議者和用戶之間關於越界證明的爭議。
一些潛在/部分解決方案。
鏈下模擬策略面臨的挑戰不容小覷,但通過採取以下措施可以減輕這些挑戰的難度:
1. 確認後續交易的最終結果。
考慮到後續交易是最終且不可修改的,消除了與修改和重新模擬相關的時序問題。由於無需修改/重新模擬,可以在區塊發佈後提交越界證明,這既無需設置第二個過期時間,也避免了因暴露未發佈交易而產生的隱私問題。主要的缺點是降低了用戶的選擇餘地。
2. 定義最佳實踐。
一套針對用戶和提案者的“最佳實踐”指南有助於減少意外重疊。一種方法是為常見交易類型提供權限集中推薦的域數量。舉個簡單的例子,假設絕大多數簡單的交換操作需要包含 2-4 個域的權限集。用戶由此可以推斷,簡單的交換操作如果使用超過四個域,就會增加意外重疊的風險(或者更可能的是,工具會根據最佳實踐建議進行設計)。
附錄 B:前期模型。
後續交易最大限度地提高了用戶的選擇權,但代價是引入了與後續問題和防止意外重疊相關的設計挑戰。然而,通過讓用戶將交易包含在狀態鎖定請求中,並將交易視為最終且不可修改,這些挑戰可以很大程度上得到規避。這種設計的主要缺點包括選擇權降低和更容易受到最大有效值(MEV)提取的影響。總的來說,這是一個對提案者更友好的模型。但其在設計簡潔性方面的優勢使其值得簡要探討。
前期模型中預期的邏輯發展。
步驟 1)用戶發送狀態鎖定請求,其中包括(i)快照,(ii)交易,以及(iii)優先費用。
步驟 2)提案人收到請求,如果優先費定價合適,則模擬交易。
步驟 3)提案者返回確認消息,對用戶的請求進行簽名。
步驟 4)提案人將交易鎖定到其區塊模板中/將更新後的狀態廣播到網絡。
步驟 5)用戶收到確認消息,如果例如用戶的交易針對錯誤的快照執行,則可以使用該消息來懲罰提議者。
將事務添加到狀態鎖定請求中。
狀態鎖定授權現在只使用單個Tip字段,沒有過期時間,並且必須包含一個額外的txPayload字段:
{
blockNumber:…,
snapShot:[(address, storage slot), (value)…],
Tip:…,
nonce:…,
txPayload:…,
}
預付費模式的總體優勢。
1. 設計更簡單,活動部件更少。
與後續交易相關的公平交換問題以及解決這些問題所需的機制(例如認證委員會和到期日)均被消除。
2. 提案者可以在授予狀態鎖之前檢查是否存在越界訪問。
提案方的優勢。
1. 通過明確用戶的意圖,提案者可以更好地繪製 MEV 機會空間。
2. 提議者可以更容易地在同一塊內對同一域提供順序狀態鎖。
3. 一次小費意味著用戶不能通過不進行後續操作來避免支付後續付款/全額優先費用。
4. 只有一個小費可能意味著更簡單的定價模式。
對提案人不利。
1. 減少選擇權可能會降低狀態鎖定對用戶的價值,並導致提案者的優先費用降低。
用戶優勢。
1. 更合理的定價:假設選擇權減少和對 MEV 的敞口增加會降低狀態鎖定的價值,那麼預期的結果就是優先級費用降低。
2. 消除了與後續交易相關的複雜情況:時間安排、糾紛等。
3. 如果順序狀態鎖能夠正常工作,用戶將有更多選擇。
對用戶的不利影響。
1. 沒有後續交易意味著選擇較少。
2. 用戶更容易受到 MEV 漏洞攻擊。
3. 第 4 步涉及披露未公開的交易信息,這可能會引起隱私問題。
附錄C:州鎖欺詐和L1 ZK研究
狀態鎖與其他類型的提議者承諾的主要區別之一在於,狀態鎖關注的是執行前的條件,而非執行後的結果。這意味著,儘管有些反直覺,狀態鎖欺詐完全取決於後續交易執行之前發生的事情。因此,本附錄的前半部分嘗試通過介紹一些初步定義來闡明狀態鎖欺詐的本質。後半部分則進一步探討了如何通過對狀態鎖欺詐證明的深入研究來服務於當前的 L1 zkEVM 研究。
國家封鎖欺詐的兩種定義。
基本上,看待狀態鎖定欺詐有兩種不同的方式。第一種是“快照式欺詐”,第二種是“首次訪問欺詐”。這兩種欺詐方式反映了對狀態鎖定授權的兩種不同理解。
根據第二種更嚴格的解釋,狀態鎖定授權承諾用戶的後續事務 T 將優先寫入 T 的權限集 P 中指定的任何域。為清晰起見,我們稱 T 為“優先”或擁有“優先訪問權”。如果 T 回滾,並且後續事務優先寫入 P 中的某個域,只要沒有更早的事務寫入 T 的任何域,“優先”承諾仍然有效。簡而言之,我們的初步定義是:
首次訪問欺詐。如果任何交易搶先寫入由狀態鎖定交易保留的域,則會發生首次訪問欺詐。
根據狀態鎖授權的第一種解釋(這種解釋略微寬鬆一些),不存在首次訪問承諾。承諾是 T 將針對 T 的快照 S 中指定的一組域-值對執行操作。如果 T 針對 T 之前的狀態根 Rpre 執行操作,而 Rpre 不包含 S(即,未能包含 S 指定的某些域-值對),則會發生快照欺詐。
首次訪問欺詐和快照欺詐之間的區別不僅僅是概念上的,它在欺詐行為的舉證方面具有實際意義。初步定義如下:
快照欺詐。如果對於某個狀態鎖定事務 T、域 D 和 32 字節值 V,T 的快照指定 D 在 T 之前的狀態根 Rpre 中映射到 V,而 Rpre 使得 D 映射到某個值 V*,其中 V* ≠ V,則會發生快照欺詐。
為了證明快照欺詐,我們首先必須推導出 T 執行操作所針對的預 T 根 Rpre。然後可以使用 Merkle 包含證明來證明 D 在 Rpre 下映射到 V*(例如,通過使用賬戶級 MPT 路徑到 storageRoot,然後再使用 MPT 路徑到 storageRoot 下的 D(V*))。證明 D 在 Rpre 下映射到 V* 即可確定 T 實際上看到了 D(V*)。最後一步是證明 V* ≠ V,其中 V 取自簽名狀態鎖授權。
為了證明首訪問欺詐,必須證明存在另一筆交易 T*,它在交易 T 之前執行,並寫入了 T 的某個域。這可以通過證明 T* 和 T 在區塊的交易根 trie 樹中的相對位置,並重新執行到執行軌跡中 T* 寫入 T 的某個域的步驟來實現。與快照欺詐不同,無需推導出 T 執行所針對的 Rpre。如果 T 是第 10 筆交易,T* 是第 2 筆交易,那麼證明首訪問欺詐所需的步驟將比證明快照欺詐所需的步驟更少——後者必須推導出 T 之前每筆交易的結果。
我們對狀態鎖定欺詐的簡要討論必然會省略許多細節。例如,如果 T* 向 T 的某個域寫入相同的值(空操作 SSTORE),則會發生首次訪問欺詐,但不會發生快照欺詐。這或許可以解釋為什麼在評估處罰之前,需要同時發生這兩種欺詐形式(或者將首次訪問欺詐定義為“修改”而非“寫入”保留域)。無論如何,我們的目的僅僅是闡明狀態鎖定欺詐的基本概念模型。
州級鎖定欺詐證據如何為 L1 ZK 研究提供服務。
以太坊基金會認為,以太坊的最佳發展路徑最終是在“技術棧的各個層面”實現零知識證明(ZK)。在此背景下,值得注意的是狀態鎖研究如何能夠支持這些目標的實現。接下來,我們將探討如何通過基於零知識證明的設計來解決狀態鎖糾紛:在鏈下重新執行執行軌跡,並在鏈上驗證簡潔的證明,從而避免協議內重新執行帶來的高昂成本(儘管BAL機制有可能顯著降低鏈上糾紛處理的成本效益)。
狀態鎖定欺詐證明具有創造獨特研究機會的潛力。假設狀態鎖定欺詐證明永遠不需要重新執行最後一個狀態鎖定交易之後的任何內容。基於提議者優先考慮狀態鎖定交易的順序(即,提議者將其放在區塊頂部)這一合理假設,欺詐證明只需處理完整區塊的一小部分。相比之下,像Succinct Labs 的 SP1 Hypercube這樣的系統則針對完整的 L1 區塊,通常通過生成子區塊證明然後聚合這些證明來實現。如果提議者將狀態鎖定交易放在區塊頂部,爭議只需證明一個早期切片或“前綴”,而不是整個區塊,這使得欺詐證明電路比完整的 L1 zkEVM 證明電路小得多。
為了說明這一點,考慮前面提到的首次訪問欺詐示例。如果越界交易 T* 是區塊中的第二個交易,那麼電路只會重新執行兩個交易,並在見證中重建 T* 之前的中間根。更一般地,如果 T* 是第 i-* 個交易,那麼首次訪問欺詐證明電路會重新執行i 個交易,並重建i-1 個中間根。用完整區塊 zkEVM 的術語來說,首次訪問欺詐證明相當於證明一個較小的單個前綴,而不是整個區塊,因為不需要對多個前綴進行遞歸聚合/組合。類似地,雖然快照欺詐證明通常比首次訪問欺詐證明需要更多約束,但電路的大小仍然與單前綴證明相當。
由於狀態鎖欺詐證明電路規模小且目標明確,因此它可能為研究新型設備級優化方案提供實際機會。一種思路是構建一個原型電路,該電路將同一輪 Keccak 運算分批應用於多個獨立的哈希運算(例如,RLP 編碼的 MPT 節點、存儲密鑰派生),從而使證明者只需執行一個“更寬”的步驟即可代替多個“更窄”的步驟。狀態鎖天然適合這種輪次“融合”或輪次分批處理:由於越界篩選消除了依賴關係,狀態鎖本身就強制執行了並行運行多個哈希運算所需的獨立性,而不會違反 EVM 順序。這樣做的好處是減少了電路的行數/步驟數,從而可以縮短證明時間,並可能減小證明文件的大小。雖然目前仍處於推測階段,但哈希輪次“融合”是狀態鎖電路可以測試/驗證的一個具體優化示例,其結果可以推廣到 L1 哈希熱點區域。
狀態鎖欺詐證明還可以作為一種“測試實驗室”,用於衡量證明效率並生成有用的經驗數據。由於“前綴”較短且涉及的槽位數量相對較少,該電路足夠簡單,可以暴露組件成本,例如每個打開槽位的時間、每個 MPT 路徑的見證字節數等。在全塊證明中,這些信號往往會與其他數據(例如,EC/KZG 數學運算、見證 I/O 和聚合)混合在一起,使得難以恢復每個組件的清晰數值。此外,狀態鎖欺詐證明可能足夠小,可以在“自帶”證明器硬件上運行,並允許收集有價值的經驗數據,例如“自帶”證明器的能耗/內存/GPU 配置。這樣,狀態鎖欺詐證明研究可以通過提供細粒度的組件級測量來補充全塊基準測試,這些測量可以使用小型證明進行估算,並外推到相關的全塊工作負載分佈(例如,SSTORE/SLOAD 打開)。
這裡需要注意的是,懲罰機制應該會使狀態鎖欺詐極其罕見。即便如此,這並不意味著欺詐證明的請求也會很少。從用戶的角度來看,意外的交易行為是觸發欺詐證明請求的主要因素。鑑於狀態鎖只承諾執行前的條件,而非結果,意外行為可能並不罕見。假設實際欺詐遠少於疑似欺詐,那麼大多數欺詐證明的作用將與其名義上的目的相反:它們將作為“誠信”證明,確認沒有發生欺詐行為。事實上,提案者有動力在收到請求時提供此類“誠信”證明,尤其是在第三方可以在鏈下進行非官方驗證的情況下。及時有效地提供“誠信”證明的需求自然會激勵相關研究和優化。
最後值得注意的是,本文提出的L1零知識證明研究的潛在益處並非狀態鎖所獨有。任何需要欺詐證明來驗證執行上下文/結果的執行預確認協議都將能夠從中受益,並有可能推動L1零知識證明研究的發展。




