來源 |
作者 | Vitalik Buterin
特別感謝 Francesco 提出解決方案 2 里的核心想法,並感謝 Francesco、Justin Drake、Alex Obadia 和 Phil Daian 的反饋和評論。
區塊提議者/構建者分離方案是如何運作的?
在現行的交易市場里,區塊提議者 (當前是礦工,合併後是驗證者) 直接通過看交易池裡哪些交易支付最高的小費來選擇哪些交易被打包到下一個區塊。這使得區塊交易者可以使用複雜的策略來選擇打包哪些交易,或甚至打包他們自己的交易,以利用像 DEX 套利和清算的機會 (為了簡潔,下文只稱為 MEV) 來最大化他們的收益。這些策略的複雜性給運行一個有效礦工或驗證者節點造成很高的固定成本,並使得代表其參與者使用這些策略的中心化池佔據優勢。
區塊提議者/構建者分離 (PBS) 方案通過把區塊構建的角色從區塊提議者上分離開來解決這問題。分離出來的一類行動者叫構建者 (buiders),他們構建執行區塊主體 (exec block bodies) (基本上是一個有序的交易列表,這些交易會成為區塊里的主要負載) 和提交出價。提議者的工作就只是接收出價最高的執行區塊。值得注意的是,提議者 (和其他所有人) 直到他們選擇了在競價中勝出的區塊頭 (即也選擇了區塊主體) 後都不知道任何執行區塊主體里的內容。這種確認前的隱私 (pre-confirmation privacy) 對以防止「MEV 竊取」是有需要的,因為懂行的提議者會發現構建者的 MEV 提取策略並複製它們而不分給構建者。
PBS 與現狀相比,有哪些抗審查挑戰?
首先是現狀,假設有一筆 150k gas 的交易,且當前的 gas 上限是 30m (目標是 15m)。經濟實力強的行動者試圖審查該交易。在當前的交易市場里,如果該筆交易願意支付基本費和多於 1~2 gas 的小費,區塊提議者就會願意對其打包;平均每個區塊有大約 15m 的 gas 鬆弛空間讓他們這樣做。要審查一筆發送者為打包願意支付x的交易,攻擊者需要把基本費提到高於每 gas X / 150k,並將其保持在那裡。如果他們這樣做了,其他用戶將因費用太高而退出競價 —— 畢竟,如果基本費高到足以讓一筆重要到足以吸引有人試圖進行針對性審查的交易退出,攻擊者將可能必須自己支付區塊中交易費最貴的交易。保守地說,攻擊者很可能必須自己支付高達每 slot (X / 150k ) * 10m = X * 66.7 (因此大約是每小時 x*20000 )
現在,讓我們來探討一下 PBS 的情況。假設有一個區塊構建者一直比其他構建者表現更好,要麼因為他們說服不老練的用戶運行只給他們發送交易的錢包 (“專有訂單流”),要麼因為他們有更好的演算法和數據訪問來發現 MEV 機會。假設有一些特定受害交易是構建者 (「審查構建者」) 試圖審查的。設:
- M 為在沒有受害交易的情況下非審查構建者的出價
- P = X – basefee * 150k 為受害交易總交易費的小費部分
- M + P 為受害者交易能夠被打包的情況下非審查構建者的出價
- A 為審查構建者獲得的優勢 (advantage) (等於他們所賺的費用+MEV 與非審查構建者可以賺最多的費用+ MEV 的差值)
- M + A 是審查構建者的出價,無論是否有受害交易 (因為審查構建者不想打包受害交易)
如果 P>A,非審查構建者將能夠給出比審查構建者的 0 收益出價 (M + A) 高出 P – A 的出價。為了保持審查,審查構建者將必須把他們的出價提高到 M + P,並每 slot 損失 P – A 以保持出價高於非審查構建者 (還要額外犧牲每個 slot 獲利 A 的機會,因此總損失是每 slot P )。這樣成本仍然很高。但請注意這比每 slot X * 66.7 要便宜得多。
如果 P < A,儘管不打包受害交易,審查構建者也能贏得競拍,雖然他們的確不得不把他們的出價提高到稍稍高於 M + P ,從而犧牲了每個 slot 的 P 收益 (審查構建者的收益變成 A – P 而不是 A)。
請注意,在兩種情況里,攻擊者都會因為審查而損失每 slot 的 P 收益 —— 對於僅是把一筆交易排除在鏈外來說,這仍然是一個巨大且持續的成本,但遠不像每筆交易在費用市場中的成本那麼高。
➤ PBS 的審查經濟學和出塊時間
上述分析的一個重要結果是,在 PBS 里,審查的成本是按每 slot 算的 (嚴格來說是每個區塊,但為了簡單,我們忽略兩者的區別,因為實際上以太坊上幾乎所有 slot 都有一個區塊)。如果出塊頻率減低 10 倍,審查成本會減少 10 倍。如果出塊頻率增加 10 倍,審查成本就會增加 10 倍。這是反直覺的,但與上一部分的邏輯是一致的。請特別注意,現在的收費市場有點像 PBS,有 100 多個競價同時搶一筆交易的打包位置;但是,這是一個有問題的 PBS 市場,因為它缺乏確認前的隱私保護。
因此,很自然要問這樣一個問題:我們能否嘗試擴展 PBS,以實現快速出塊,但使得那些區塊是並行出現而不是按順序的?
抗審查方案有哪些設計目標?
- DOS 保護和沒有免費的數據可用性:提議者 (或構建者) 不應該能夠打包沒人支付的數據,因為這可能會被攻擊者利用,使鏈數據膨脹,或給 rollup 欺騙交易費用的機會。例如,這意味著如果一個區塊包含了一筆交易因為餘額不足或同一個區塊里其他交易而被證明是無效的,協議必須仍然向提議者收取該交易的基本費。
- 最小額外帶寬消耗:這個機制不應該只對鏈上數據有效,對 p2p 網路上的數據也要有效。舉個例子,在網路上漂浮著數百個來自不同構建者的冗餘完整區塊主體是不現實的。
- 不再重新引入提議者中心化:PBS 的全部意義就在於它不需要提議者是老練的。我們不希望創建一個機制會為老練的提議者重新引入好處,從而激勵提議者進入進一步的協議外競拍關係或加入池。
- 理想情況下,允許提議者是無狀態的:驗證者能夠變成完全無狀態 (一旦 Verkle trees 被部署到了主網) 將會是進一步去中心化和提高可擴展性的一個重大福音。
- 如果我們依賴利他主義,不要讓利他主義變得昂貴:我們一般可以依賴這樣一個假設——至少有百分之幾的提議者是利他的,且將忽略賄賂出價和接受被審查的交易。但是,如果這樣做在協議內是成本高的,這個假設就會變得很不現實。提議者不應該必須犧牲大額收益來幫助確保被審查的交易能被打包。
解決方案 1:我們可以同時運行很多確認前隱私 PBS 競價嗎?
假設在每個 slot 里有一個競拍是用於主要執行區塊 (primary exec block) 和有 N-1 個競拍是用於輔助執行區塊 (auxilary exec block) (因此總共有 N 個競拍),且它們是並行運行的。這些區塊是按順序被執行的 (順序為先主後輔),但它們共識的達成是平行進行的。
假設一個交易發送人願意支付 P 小費。要把該交易排除在鏈外,審查者將需要願意給每個輔助執行區塊競拍的控制員每 slot P+1,因此他們將必須支付每 slot(P+1) * N。
攻擊者必須每個 slot 都出價,且不僅當有人試圖進行輔助打包時才需要出價,因為如果攻擊者只自動出價高於輔助打包,提議者會開始提交虛假的自我出價來迫使攻擊者出價高於他們。
但有一個問題:輔助執行區塊會如何被構建?構建主要執行區塊的構建者 (“主要構建者”) 會相對比較簡單,因為他們看到他們正在構建的區塊所建基的前狀態:這是前一個區塊的後狀態。另一方面,構建輔助執行區塊的構建者 (輔助構建者) 則沒那麼幸運:他們在同一個 slot 里構建的任何區塊都需要基於主要執行區塊 (和較底部索引的輔助執行區塊)。因此,當輔助構建者在選擇打包哪些交易是並不知道他們要基於什麼狀態來構建的。
如果一個輔助構建者打包一筆已經被打包到前一個區塊的交易,他們必須支付直到簽名和隨機數驗證前的數據和執行的 gas,但他們不會得到來自該筆交易的手續費。因此,他們會損失錢 (在這種情況下設計一個免除數據+驗證 gas 費的協議是不安全的,因為這可能會被 rollup 和其他存儲數據到區塊鏈的用例濫用)。
這就提出了一個問題:輔助構建者是否有一個安全策略來打包交易到輔助執行區塊?這個策略在正常情況下應該是可獲利的 (預期里),且如果一個會進行審查的主要構建者明顯正在試圖攻擊他們時能提供保護。一個攻擊的可能例子是,一個會進行審查的主要構建者可以在直到他們預見有輔助構建者開始打包交易時突然打包那些交易,從而實現審查。如果他們一直這樣做,他們可以導致輔助構建者虧錢;一旦輔助構建者虧損太多,他們就會退出市場,讓會進行審查的構建者可以自由審查交易。
➤ 最低限度可行的輔助構建者策略
請記住,在「好的情況」下,輔助區塊會是空的,因為任何想被打包的交易都會被打包到主要區塊。因此,這個策略只需要在審查真的發生的時候才激活。
設:
- N = 每個 slot 上發生的競拍總數 (包括主要的和輔助的)
- P = 交易小費
- B = 當前的基本費
首先,為了簡單起見,假設 N = 2 (因此,每個 slot 只有一個輔助執行區塊)。也假設 P = B (審查的受害者總是支付兩倍的費用,以吸引輔助構建者和避免審查)。下面是一個建議的輔助構建者策略:
如果一個輔助構建者看見一筆交易在 k 個 slot 前第一次被接收,但還未被打包,並且從那時起就一直有效,那麼構建者應該在他們的提議區塊里打包這筆交易的概率是。
假設會進行審查的主要構建者在k個 slot 後接受了受害者交易。要麼 k = 0,在這種情況里他們只有 0.00000001 的機會能「陷害」輔助構建者 (意思是,審查構建者和輔助構建者在同一個 slot 里發布,導致他們會虧損錢),要麼 k > 0,在這種情況下攻擊者陷害輔助構建者的概率與輔助構建者先於攻擊者打包受害交易的概率相等 (即 ,因為 k≥1 )。
在後一種情況下,輔助構建者平均來說是不賺不賠。這是因為在攻擊者陷害他們時,他們虧損 B,而在他們打包了一筆交易時,他們獲利 P,而我們在上文假設 P = B。將指數基數降低到 2 以下,使數學運算更簡單,並確保輔助構建者是可獲利的。我們可以通過把基數設為 延展到任意小費。
而 N > 2 的情況比較棘手,因為有可能出現干擾:如果一筆交易同時被打包到兩個輔助執行區塊呢?但是,如果我們假設輔助構建者使用獨立的隨機策略,發生衝突的機會是可控的 (一個模擬腳本表明,如果基數是 2,無論有多少名構建者, P 都接近於 1/4)。
在實踐中,上述的數字幾乎肯定是太悲觀的。被審查的交易可能在幾個 slot 後就被輔助構建者打包了,而輔助構建者將對攻擊作出動態反應。此外,交易失敗時的成本比成功時低,所以在實踐中, P 僅需要大量交易的幾個百分點的 B。相反,上述內容更多的是作為一個存在證明,即輔助構建者可以使用固定的特定策略,甚至在攻擊下也能獲利。
在主要執行區塊內容已知後,為什麼不讓輔助構建者通過一個位欄位選擇要排除哪些交易到鏈外
一個位欄位仍然攜帶足夠多的信息,攻擊者可將指令編碼到智能合約,以了解如何利用 MEV 機會。此外,如果有多個輔助構建者,他們將必須按順序提供他們的位欄位。因此,這將簡單地將輔助競拍轉換為一系列主要競拍。
解決方案 2:我們是否仍然可以使用提議者 (「混合式 PBS”),但僅用作」打包的最後手段」
防止審查的另一個自然想到的方法是把當前的交易費用市場和 PBS 融合起來。這種方法將依靠提議者來抗審查。只有少數提議者需要實際上使用這個方案;即使 95% 的提議者不知怎麼地就成功被賄賂了,都假裝沒有看到交易並只接受 PBS 機制下產生的區塊,剩下的 5% 意味著,平均來說,任何受害交易仍會在 20 個 slot 後被打包。
這個方案的工作原理如下。在每個 slot :
1. 提議者廣播 crList,這是提議者看到的應該被打包的交易列表 (即它們的狀態里有正確的隨機數和被打包的充足餘額、小費和最高基本費)。這個 crList 只能包含一名 sender (發送人) 的一筆交易。提議者也要對一個 crListSummary 簽名和廣播,它包含在 crList 上每筆 tx 的 tx.sender 和 tx.gaslimit。
2. 構建者創建一個提議主體,它必須包含在 crListSummary 里
3. 提議者接受勝出的區塊頭
4. 構建者發布主體。主體的驗證需要檢查在 crListSummary 上的每個 (sender, gaslimit),要麼是否 block.gasused + gaslimit > block.gaslimit,要麼 sender 是否區塊里某筆交易里的發送人。
為了進一步節省空間,還有一個更複雜的替代方法,就是要求 crList 按照 tx.gaslimit 的降序排序,然後要求主體只包括 (i) 在 crList 上不能被打包的第一筆交易的 Merkle 證明,和 (ii) 區塊中那些在 crList 上的交易的位欄位。任何人都可以通過重建 Merkle 證明之前樹的那部分並檢查它是否與 Merkle 證明相符來驗證。
請注意,無論哪種解決方案,如果提議者錯誤地構建了 crList,構建者可能無法安全地提議一個執行區塊主體。在這種情況下,構建者應該就直接不提議任何東西,就像提議者根本沒有廣播過 crList 一樣。
➤ 融合 PBS 和無狀態
PBS 的一個重要的次要目標是允許驗證者是完全無狀態的 (一旦 Verkle trees 被部署了)。PBS 會實現這點是因為只有構建者需要真正地構建主體;構建者還負責附上見證數據 (witness) 到他們的區塊,使得驗證者可以在無狀態下驗證區塊。
而要把這個屬性擴展到這個方案,每筆交易都需要伴有一個簡單的見證數據,證明交易發送人的餘額和隨機數。如果用戶是無狀態的,這個見證數據可以由中間節點 (例如,構建者可以自願做這件事) 來添加。
➤ 混合式 PBS 會如何與二層賬戶抽象交互 (例如 ERC 4337)
ERC 4337 從根本上改變了抗審查的博弈情況,因為它將以太坊層面上交易的概念與用戶意圖對象的經濟概念解耦了。歸根結底,我們試圖確保用戶意圖對象是抗審查的。當兩者相同時 (就像今天一樣),這可以被說成是交易的抗審查。但是,在 ERC 4337,交易變成了一個包含許多用戶意圖對象 (在 ERC 4337 里這被稱為 user operations) 的封裝器。
在”常規的” PBS 中,這個區分並不重要,因為協議只直接與執行區塊交互。構建者可以創建一個包含很多筆 (“常規”) 交易的執行區塊,或他們可以創建一個包含一筆封裝了多項 user operations 的交易的執行區塊,或是兩者的混合。兩種情況的機制是完全相同的;封裝器與封裝器的封裝器之間區別不大。
如果輔助執行區塊被用作抗審查,那麼機制仍然是一樣的。如果使用混合式 PBS,那麼對現狀交易和 ERC 4337 user operations 的處理就會出現差異:對現狀交易的抗審查性是直接得到保證的,但對 ERC 4337 user operations 的抗審查性只是間接提供的。
無論是 ERC 4337 還是混合式 PBS 都需要稍作修改,以確保其在混合式 PBS 的世界中集成抗審查性。要了解原因,首先看看一個為什麼 ERC 4337 將保有抗審查性的第一個有問題的論點:
攜帶 ERC 4337 user operations 的」交易「直接映射到上述」輔助區塊「的概念。如果一個給定的 ERC 4337 user operations 不被會進行審查的主要構建者打包,那麼任何人 (我們把他們稱為」中繼者」) 都可以創建一筆打包了 user operations 的交易 (一個假的輔助執行區塊),並期望從中獲利。當然,審查者可以在那個確切的時間打包 user operations ,並奪走中繼者的收入,但並不總是如此,因此平均而言,中繼者將是可獲利的,原因與上述輔助構建者策略部分的解釋一樣。
這個論點的關鍵缺陷是,「不總是」是錯的。這是因為在輔助執行區塊的情況和 ERC 4337 交易情況之間存在根本的區別。在輔助執行區塊的情況里,主要和輔助執行區塊的主體是同時被提交的。因此,兩邊都不能看到另外一邊在做什麼,也做不了搶跑。但在 ERC 4337 交易的情況里,勝出的構建者能看到交易,因此他們能做搶跑。
解決方案 1:修改 ERC 4337
我們可以對 ERC 4337 做如下修改:user operations 將需要有能力指定允許打包它們的一個單一中繼者。這可以保護 user operations不被「竊取」 (不過要注意的是,與用戶合謀的審查構建者可能仍然可以汲極輔助構建者的收益,因為會進行審查的構建者可以對有相同隨機數但不同用戶操作的中繼者進行搶跑)。
解決方案 2:修改混合式 PBS
需要在 crList 上的交易在所有其他交易前被執行。這就防止構建者搶跑。但是,實際上使用這個功能對提議者來說可能成本更大,因為它可能會減少他們從 MEV 競拍中獲得的收益,因為在 crList 上的交易本身可能就在提取 MEV。因此,用這個方法可能會激勵提議者在 crList 的構建上用更複雜的方法,這又把中心化激勵帶回來了。
總結
PBS 是一個活躍發展的研究領域。減輕 MEV 帶來的驗證者中心化風險對任何尋求保持其去中心化性質的區塊鏈來說都非常重要。但是,防止構建者中心化變成另一種類型的審查漏洞也同樣重要。
在這個時間點上,我在短期更傾向於混合式的 PBS。混合式 PBS 在當前和「純」 PBS 模型之間得到兩全其美的效果:
- 即使是一個利他主義的提議者也可以打包任何其他提議者和交易捆打包者正在審查的交易,因此我們保有了現有的抗審查性。
- MEV 提取所需的優先位置被競拍給另一群專門的行為者,因此驗證者不需要碰 MEV,這樣我們就減輕了 MEV 驅動驗證者中心化的風險。
- 提議者不需要親自執行區塊,因此驗證者可以是完全無狀態的。這意味著大幅提高一層的區塊容量會變得更安全。
在更長期的未來,混合式 PBS 的問題以及希望有更多的抽象性這兩點都會是探索輔助執行區塊這樣概念的原因,它們會與主要執行區塊被並行構建。
此外,這篇文章中的論點提出了一些有趣的理由,可能最終會考慮在協議層承認 ERC 4337 的user operations。在短期內,ERC 4337 應該保持作為一個額外協議 ERC,因為在那裡它的創新速度會快得多。但是,長期來看,很明顯把它寫入協議層,並在協議層明確承認用戶意圖對象能為確保它們免受審查提供更多的選擇。
冷萃財經原創,作者:awing,轉載請註明出處:https://www.lccjd.top/2021/12/18/vitalik-%e5%a6%82%e4%bd%95%e6%8f%90%e9%ab%98%e5%8c%ba%e5%9d%97%e6%8f%90%e8%ae%ae%e8%80%85%e6%96%b9%e6%a1%88%e7%9a%84%e4%ba%a4%e6%98%93%e6%8a%97%e5%ae%a1%e6%9f%a5%e6%80%a7/?variant=zh-tw
文章評論