讀懂加密內存池:解決 MEV 和審查問題的全新設計空間

JonCharbonneau
2023-03-16 15:13:09
收藏
加密內存池是一個迷人的設計空間,了解一下這幾種實現方案。

原文標題:《Encrypted Mempools

原文作者:Jon Charbonneau

編譯:0x11,Foresight News

加密內存池是解決 MEV 和審查問題的強大工具,目前已有多種可以單獨使用的相關方案,它們之間也可以組合使用。

這篇文章概述了 Justin Drake 圍繞該主題的演講(ColumbiaAmsterdamFlashbots Roast)所構建的設計空間。你們中的大多數人可能在第一次觀看時感到難以理解,所以我試著簡單地進行分解和擴展。

基本思想:允許用戶提交加密交易,區塊生產者提交這些交易才能解密:

  • 用戶加密並廣播交易
  • 加密交易提交
  • 交易被解密
  • 事務執行(注意:提交、解密和執行可能在單個 slot)

兩個問題似乎可以迎刃而解:

  • MEV:如果我看不到它,我無法搶先交易
  • 審查:除非排除所有加密交易,否則我無法審查交易(如果許多交易是加密的,成本可能會非常昂貴)

這裡需要確保的一個關鍵點是保證解密不依賴於用戶。有幾種方法可以實現這一點:

1.In-flight

相信某個第三方,私下向他發送數據,他可以解密和查看數據,但承諾在數據提交到鏈上之前不會公開披露。這就是 Flashbots Protect 等產品的工作方式。

2. 可信硬件

你可以利用受信任的硬件。明文可以在受信任的硬件中運行,但在提交交易之前不會公開解密。最著名的例子是 Flashbots SUAVE 的 SGX

3. 門檻加密 / 解密(TED)

一個委員會可以聯合起來強制解密密文,但是需要簽名者達到一個門檻才能做到這一點。例如,你的「閾值」可能是需要 2/3 的驗證者同意解密。TED 已經在幾個不同的領域進行了研究,包括:

Shutterized Beacon Chain

仔細查看 Shutterized Beacon Chain 提案,驗證器的一個子集(「keypers」)使用分佈式密鑰生成器(DKG)生成公鑰 / 私鑰對。每個人都可以看到公鑰,但私鑰在委員會中被分成多份保管。重建私鑰和解密需要密鑰份額達到一定閾值(例如,2/3)。

用戶可以有選擇地加密交易,這些交易在其內容被解密和執行之前被包含在鏈上。區塊生產者使用明文交易(立即執行)和加密交易(計劃在未來的區塊高度)創建區塊。

在生成並證明區塊 n -1 之後,keypers 應該生成並發布區塊 n 的解密密鑰。該密鑰可以解密區塊 n 內的交易。區塊 n 必須包含解密密鑰才能被視為有效。區塊的後狀態是這樣計算的:即在執行區塊中的明文交易之前執行區塊中的加密交易(按照它們的設置順序)。

缺點

TED 有幾個缺點:

缺乏問責機制:與傳統的安全假設不同,這裡的惡意行為不可歸因或不可報告。Keypers 可以立即解密,你無法對其進行歸因。即使你假設驗證者的行為與激勵相容,驗證者集之外的三字母機構(譯者注:三字母機構是 CIA、FBI 等機構的總稱,它們保衛美國,但通常行事神秘)也可能會對他們施加影響。

誠實多數假設:不誠實的委員會可能會產生問題,例如選擇從不解密某些消息,或秘密解密他們不應該解密的消息(例如,在政府機構的要求下,或自私地進行 MEV 提取)。在大多數情況下,區塊鏈實際上依賴於經濟上理性的多數(即,罰沒的懲罰通常超過惡意雙花等行為的經濟激勵)。通過閾值加密,這個假設被轉移到真正誠實和無私的多數。

破壞協議的穩定性:本質上是上面兩點的結合,TED 增加了驗證者作惡的動機,並且不容易受到懲罰。

活躍度減弱:更高的解密閾值增強了協議安全性。然而,這直接削弱了活躍度。例如,大規模的網絡中斷會導致一半的驗證者中斷,現在可能造成協議停止。特別是對於非常強調「第三次世界大戰」活躍度的以太坊來說,這是一個不可接受的權衡。

糟糕的用戶體驗:TED 可能會根據實施細節增加不同程度的延遲和成本。

次優價值分配:讓我們看一個簡單的搶跑(frontrunning)示例:

  • 1 ETH 價格為 1000 美元
  • 如果我將交易發送到 vanilla 內存池 ------我得到 990 美元(搜索者 frontruns 和 backruns,淨賺 10 美元)
  • 如果我將交易發送到 TED 內存池------我得到 995 美元(搜索者無法搶跑,但我推動了本地現貨價格,為搜索者創造了 5 美元的套利機會)
  • 我將交易發送到最佳訂單流拍賣------我得到了 1000 美元(我沒有得到 frontruns 或 backruns。或者類似地,我確實獲得 frontruns 和 / 或 backruns,但搜索者必須在競爭性拍賣中出價 10 美元獲得這樣做的權利,最終結果是相同的。)

在這種情況下,你會將錢留在桌面上讓其他人拿走。一個經濟上理性的用戶應該公開足夠的訂單信息,這樣他們就可以得到接近訂單全部價值的補償。他們不應該天真地對他們的交易進行閾值加密,隱藏它提供的價值(允許其他人捕獲它)。

這是一個超理想化的例子,但你明白了,掩蓋問題並不總能解決問題。TED 可以是一個有用的工具,但它不是 MEV 的靈丹妙藥。在某些情況下, CR 來說可以說更好。

此外,以太坊帶來了額外的複雜性。例如,它缺乏即時終結性(儘管這可能有一天會隨著單時隙終結性而改變)引入了圍繞重組的問題。我相信至少在以太坊的 L1 中,這裡的權衡利大於弊。增加以太坊的信任假設,增加共謀的動機(不被發現),以及降低其活躍度所帶來的傷害可能比好處更多。

然而,與以太坊 L1 相比,這些權衡中的一些對於 L2 或其他 L1 可能更容易接受。

4.延遲加密 / 解密(DED)

使用延遲加密,你可以將加密信息設置為在一定時間後自動解密,這是與 VDF 相關的順序計算。

要實際實施 DED,你需要 VDF ASIC。幸運的是,以太坊基金會和協議實驗室一直致力於構建它們,最近獲得了 GlobalFoundries 構建的芯片的第一批測試樣本。這些 VDF 評估器應該能夠進行極快的順序計算。這些 VDF ASIC 也適用於時間鎖定謎題和 DED。

VDF 還需要生成 SNARKs。這可以使用 GPU 來完成,但理想情況下,以太坊基金會也希望為 SNARK 生產相關的 ASIC。

總的來說,你不再信任某個委員會,因此通常首選安全假設。但是,需要專門的硬件並不那麼理想,所需的延遲還可能會增加系統的延遲。有趣的是,你可以結合使用 TED + DED 的優勢……

5.見證加密 / 解密(WED)

WED 很強大,但別高興太早,它不會很快到來。這是非常奇特的東西,還需要很多年來實現。但它很酷並且有助於理解,所以我將簡要介紹一下。

WED 允許任意見證人強制解密密文。例如,你的規則可以是「只有在以太坊完成包含加密有效負載的區塊後才能解密」,並且只有在證明這一點的情況下才會解密。你可以想像基本上任何你想要實現的複雜語句都需要 SNARK。

WED 實際上是 TED 或 DED 的概括。你甚至可以構建兩者的混合體。例如,指定證人可以證明:

  • 快樂的結果:門檻委員會已經簽署了解密,或者
  • 預備方案:所需時間已過,返回以延遲解密

這提供了一個預備,以防閾值委員會沒有響應。這也允許你在參數化 m/n 閾值假設時更加保守(即,你可以要求每個委員會成員或幾乎所有成員都簽字)。

  • 快樂的結果:最佳用戶體驗,整個委員會即時確認
  • 預備方案:延遲和 UX 暫時受到影響,但活性得以保留

實際上,WED 可能會針對你想要的任何聲明驗證 SNARK。例如:

  • TED :你可以有一個 SNARK 來證明「我有 n 個簽名中的 m 個簽名」來強制解密。
  • DED :你可以使用 VDF 並進行順序計算(這非常昂貴)。然後在你的計算結束時,你有一個簡短的證明。然後你拿那個簡短的證明並將它包裝在一個 SNARK 中(讓它更短),然後輸入它來強制解密。

同態性

這裡的每個加密方案(閾值、延遲和見證),你都可以具有同態性。也就是說,可以創建閾值 FHE 、延遲 FHE 和見證 FHE 方案,以實現對密文的任意操作。

in-flight 和可信硬件(例如,SGX)解決方案也可以模擬相同的功能------對私有數據進行操作。這是因為在這兩種情況下,受信任的第三方或硬件都可以訪問明文本身進行操作。不過,在理想情況下,我們希望移除這些信任假設,僅依賴強化密碼學。

我們可以想像一個例子:

  • m1 = 事務 1
  • m2 = 事務 2
  • f(x) = 構建一個區塊

然後所有五個解決方案都可以複製以下功能:

當我們考慮如何隱藏交易元數據和使用加密輸入構建最佳區塊時,請記住這種能力。理論上,這裡的五個選項中的每一個都可以用於下面需要「同態」的解決方案。

元數據

元數據是提供有關其他數據的信息的數據,但不提供該數據的內容(例如消息的文本或圖像本身)。出於我們的目的,交易元數據可以包括發送方的 IP 地址、隨機數、Gas 支付等。

理想情況下,我們希望隱藏盡可能多的元數據。否則,它可能會洩露信息,讓外人可以推斷你的交易(可能會為他們提供足夠的信息以試圖搶跑或審查等)。但是,我們需要元數據來驗證交易是否有效、是否支付了必要的費用、是否是垃圾郵件等。

讓我們來看看屏蔽各種元數據的一些解決方案。

1. IP 地址 - Tor

非常簡單------人們可以使用像 Tor 這樣的服務來私下廣播並屏蔽他們的 IP 地址。

2.簽名 -SNARK

你需要在 p2p 級別知道加密交易是有效的,特別是它具有有效簽名。我們可以使用 SNARK 來證明簽名有效,這將伴隨每筆加密交易。SNARK 包含三個重要部分:

用戶想證明自己的交易密文是有效的,它對應交易明文,它的簽名是有效的。要證明任何簽名有效,你需要與帳戶關聯的公鑰來驗證它。

  • 查找以太坊狀態根(公共)。
  • 提供與此狀態根相對應的發送者公鑰 Merkle 證明(私有)
  • 驗證簽名,你需要根據狀態根驗證發件人公鑰 Merkle 證明。用 SNARK 證明你的發送者公鑰 Merkle 證明是有效的並且你的簽名是有效的。

3. Gas 支付------SNARK

你需要證明加密交易的發送方有足夠的 ETH 來支付這筆費用。我們可以再次使用 SNARK。

這是一個類似的過程,但現在你提供了一個 Merkle 路徑到狀態根,它證明了發送者的餘額(而不是發送者的公鑰)。你驗證 Merkle 路徑並驗證餘額是否足以支付所需的 Gas。

僅執行反序列化交易、檢查其餘額和檢查簽名等基本操作所需的最低 Gas。你可以規定發件人始終必須支付此最低金額。

但是在執行時間上,你還需要有實際交易本身的 Gas limit,這個 Gas limit 也可以加密。所以當你去實際執行交易本身時,你會檢查發送者是否有足夠的餘額來支付當時交易的全部 Gas:

  • 如果是:運行交易並在最後發出退款
  • 如果否:中止交易,發送方只需支付 21000 Gas

4. 發送者和隨機數 - SNARK

隨機數是一個值,等於從一個地址發送的交易數量(或一個賬戶創建的合約數量)。用戶的隨機數從他們的地址開始交易時每次交易都會增加 1。

我們今天擁有隨機數的一個原因是,用戶無法通過大量交易向 mempool(DoS 攻擊)發送垃圾信息,以增加他們交易被執行的可能性。節點將只查看具有該隨機數的一筆交易並丟棄其他交易。

對於加密交易,你將通過 SNARK 證明其隨機數是之前的隨機數 + 1。然而,如果節點將不再能夠分辨出許多加密交易具有相同的隨機數,那麼上述的 DoS 攻擊可能會帶來不利影響。

為了保留這種反 DoS 屬性,我們想添加一個「重播標籤」。它對交易進行了獨特標記,因此你不能再為一個地址發送大量交易垃圾。要創建此標籤,你可以簡單地散列(隨機數,私鑰)。因為隨機數和私鑰都是固定的,如果用戶嘗試使用相同的隨機數和私鑰發送兩者,不同的交易將具有相同的重播標籤。

最後,你可能希望保留一定程度的靈活性。假設 Gas 價格已經變動,你有理由希望以更高的價格重新廣播交易。為了緩解這種情況,你可以散列(隨機數、私鑰、slot)。現在,你可以在每個 slot 調整一次你的交易,每個 slot 每個地址只能發送一筆交易。

5.數據大小 - 同態

加密數據大小為 n 的明文將創建大小為 n 的密文。即使是這個大小也足以從概率上計算出某些交易。我們可以通過「填充」來緩解這個問題------在加密之前向明文添加 0,將位數擴展為 2 的下一次幂(例如,向 5 位的密文添加三個 0)。

在以下示例中:

  • 白色 = 填充的 0
  • 其他顏色=實際交易數據

當你構建區塊時,你可以連接這些密文,但這有兩個問題:

  • 不完美的打包------額外的 0 意味著你必須為額外的數據可用性付費
  • 不完美的隱私 - 也許 2 的幂就提供了足夠信息。交易規模分佈不明確,因此某些規模仍可能從概率上揭示足夠的信息。

一個更好的解決方案涉及「剪掉」填充:

  • 將每筆交易填充到最大大小(此處為 16)並同態加密
  • 在密文上應用一個函數以有效地打包明文,刪除不必要的填充

現在你得到了最佳打包。

通過填充到「最大」尺寸,這實際上可以將最大值設置為實際區塊大小限制轉換為的值(即,如果 30mm Gas 轉換為大約 x kB)。這意味著將每個事務填充到 x kB 的大小。或者,如果說 99.9% 的交易通常在 y kB 範圍內,你可以設置更小更實用的 y kB 大小。

同樣,可以使用可信硬件而不是前面討論的 FHE 來模擬這種「剪輯」。例如,你可以運行 SGX 並將加密交易接收到你的可信飛地。在飛地中,可以對數據進行明文操作,以剪掉不必要的填充以密集打包區塊。然後數據被加密並運回,隨後是一種強制解密方法(閾值、延遲、見證)。

請注意,在任何一種情況下,輸出都應該是某個固定大小,因此你可能會留下少量填充。

交易包選擇:同態和不相交的狀態訪問列表

假設我們解決了上面的所有問題,區塊生產者能夠根據大小將所有內容最佳地打包到一個塊中。但我們還有另一個問題------區塊生產者能否在經濟方面最優地打包所有東西?我們希望在不丟棄價值的情況下去中心化構建區塊。否則,它無法與中心化實體競爭。

解決方案 1 - FHE EVM

直接的答案:完全在 FHE 中運行 EVM。這將允許去中心化構建最佳區塊,為區塊生產者獲取最大價值。他們選擇並排序使價值最大化的交易。

不幸的是,這並不是件簡單的事。FHE 電路最大的成本是它的「深度」(即最長路徑中的門數)。特別是,它的乘法深度非常重要。例如,前面描述的刪除填充的事務「裁剪」是一個相當「淺」的電路(即,它非常簡單)。通過硬件加速,此類用例可能在 2-3 年內在計算上可行。

但是,使用 FHE 運行整個 EVM 需要非常深且複雜的電路。我們終於開始在 zkEVM 電路方面取得一些有意義的進展(這比運行標準 EVM 的計算密集度高幾個數量級),但 FHE EVM 甚至更遙遠。

再次注意,使用可信硬件模擬此功能也是可行的(例如,SUAVE 中的 SGX 這樣做)。

解決方案 2 - 狀態訪問列表

或者,我們可以更有限地使用 FHE 和訪問列表。這比運行完整的 FHE EVM 更容易實現------它是一個更淺的電路。在這個設置中,交易包可以包括一個加密的狀態訪問列表及其出價。這確切地指定了他們的包將訪問狀態的哪一部分。

現在,區塊生產者的同態電路只需為具有不相交狀態訪問列表的交易包挑選最高出價。

請注意,這並不是嚴格意義上的最優。例如,一個區塊中的第二高出價 (T 2 ) 可能達到與最高出價 (T 1 ) 完全相同的狀態。在這個訪問列表範例中,區塊生產者會丟棄第二筆交易。但是,有可能 T 1 和 T 2 都有效。在這種情況下,FHE EVM(或今天的中心化區塊生產)將獲得更多價值。

它並不完美,但從我們今天的情況來看,這條捷徑應該足夠接近最優了。絕大多數 MEV 仍然會使用不相交的訪問列表,因為像上面這樣的衝突示例非常罕見。

6. 時間戳 - 同態

你甚至可以通過允許驗證者進行「虛擬」交易來試圖隱藏交易存在的洩漏,因此內存池總是被填滿。驗證者還需要一個 SNARK 來證明他們是被允許創建這些虛擬交易的驗證者。當「真實」交易出現峰值時,驗證者將廣播較少的虛擬交易。當真實交易下降時,驗證器將發出更多虛擬交易。

假設一切都使用 FHE 加密,你將能夠檢測到添加到相應交易的「虛擬標誌」。你可以在打包實際區塊時忽略這些交易。

狀態差異 - FHE EVM

背景速覽:ZK Rollup 的一個優勢是他們不需要在鏈上發布完整的交易數據。他們發布狀態更新之間的「狀態差異」就足夠了。相反,Optimistic Rollups 必須在鏈上發布完整數據,以防對欺詐證明進行仲裁。這種較低的數據要求為 ZK Rollup 節省了成本,因為它們在數據可用性層消耗的資源較少。

將這一點帶入我們的對話中------理想情況下,你不希望在加密內存池的情況下失去這種好處。你想要獲得加密的內存池,並且仍然保留 ZK Rollup 僅發布狀態差異的能力。答案在這裡------FHE zkEVM。聽起來很酷,但你可能又要等待良久。

一個缺點是單獨發布狀態差異可能會降低 Rollup 完整節點的響應速度。例如,在純分叉選擇規則 Rollup 中,完整節點可以在數據可用性層完成並確保有效性時立即完成他們對 Rollup 的視圖。如果你只發布狀態差異(而不是完整的交易數據),即使是完整的節點也需要提交 ZK 證明才能確認他們對 Rollup 的視圖。就目前的情況而言------這些證明需要一段時間才能生成,但可擴展的數據可用性層有望很快變得非常便宜。

結論

加密內存池是一個迷人且有前途的設計空間,但仍然存在一些實際挑戰。例如,你可能只是將某些問題轉移到堆棧的其他地方。錢包可以在源頭上審查你以防止交易加密 / 路由,他們可以提交有效載荷以在你的交易前 / 後運行(或出售權利)等。一個可能的答案是用戶在本地創建交易而不依賴於服務提供商。

關鍵是這裡沒有靈丹妙藥,但如果設計得當,它們可能是解決方案的重要組成部分,可以通過不同的功能和信任假設來改善當前情況。

鏈捕手ChainCatcher提醒,請廣大讀者理性看待區塊鏈,切實提高風險意識,警惕各類虛擬代幣發行與炒作,站內所有內容僅係市場信息或相關方觀點,不構成任何形式投資建議。如發現站內內容含敏感信息,可點擊“舉報”,我們會及時處理。
ChainCatcher 與創新者共建Web3世界