newsence
僅利用交易本身實現確定性交易執行排序(無需外部隨機性或捆綁包)

僅利用交易本身實現確定性交易執行排序(無需外部隨機性或捆綁包)

Ethereum Magicians·8 天前

我提議一種簡單且完全自給自足的機制,透過以確定性方式固定每個區塊內的交易執行順序,來消除大多數基於排序的 MEV(如夾心攻擊、搶跑等)。

大家好,

我想提出一個簡單且完全自給自足的機制,透過以確定性的方式固定每個區塊內交易的執行順序,來消除大部分基於順序的 MEV(如夾心攻擊、搶先交易等)。

這項提案可以分兩個階段實施:首先作為建議性的自願加入(opt-in)預設行為,隨後再作為共識變更。

為什麼需要這個

EIP-7956 [草案](「透過區塊級隨機性的交易排序」)目前進度停滯,且依賴於另一個尚未完成、用於在每個時隙(slot)提供新鮮 RANDAO/VRF 風格隨機性的 EIP。即使該依賴項得到解決,贏得連續區塊的構建者(這在 MEV 密集的環境中很常見)仍可以預測隨機性並操縱(grind)精確的交易順序。

本提案完全避免了這些問題:它僅使用區塊中已存在的數據——具體來說就是新交易本身——且不需要新的交易格式、不需要捆綁包(bundles),也不需要外部隨機性。

核心概念

一旦構建者選擇了一個區塊的交易集合,執行順序就會立即固定。

規範(高階):

將交易排序 TX_SORTED = t.sort(_.txid)

從完整交易中獲取排序種子 seed = keccak256(concatenated TX_SORTED)

按發送者的 nonce 順序排列交易(若相同則以 txid 決勝) TX_NONCE_SENDER_ORDER = t.sort(.txid).sort(.nonce).sort(_.sender)

獲取最終發送者列表 FINAL_SENDERS = t.sort(seed).map(_.sender)

獲取最終交易列表 FINAL_TX = FINAL_SENDERS.forEach(sender -> TX_NONCE_SENDER_ORDER.popFirst(_.sender = sender))

僅當產生的狀態根(state root)與完全按照此規範順序執行的結果一致時,該區塊才有效。

這保證了:

  • 維持每個發送者的 nonce 順序。

  • 構建者仍然可以選擇包含哪些交易。

  • 一旦選定了集合,交錯順序就是固定的。

自願加入:

我們現在就可以接受這項提案作為推薦的交易排序方式。並且可以從現在開始在以太坊基金會發布的客戶端中實施。接著我們可以開始識別非規範順序的區塊。然後稍後,我們可以另外考慮透過硬分叉來禁止除此規範順序以外的任何區塊。

相較於 EIP-7956 的優勢

  • 不依賴尚未完成的隨機性 EIP。

  • 不依賴連續區塊提議者可以預測/操縱的時隙級隨機性。

  • 極其簡單——僅使用 keccak256(原生)和區塊體中已有的數據。

  • 不需要捆綁包或新的交易類型。

我們接受的權衡

  • 單一地址可以發送大量交易,以增加其擁有第一筆和最後一筆交易的可能性。這會受到與所有人相同的反垃圾郵件成本(即支付 Gas)的抑制。

  • 操縱(Grinding)仍然是可能的,要影響區塊中 n 位元的熵需要 2^n 次交易包含重選。這增加了區塊內每次 MEV 排序活動的成本。

給社群的問題

  • 有沒有我遺漏的關於重組(reorgs)、Blob 交易或系統交易(例如存款)的邊緣案例?

  • 這種分兩部分(先推薦後硬分叉)修改共識規則的新穎方法是個好主意還是壞主意?

我相信這是最有意義地減少有害重排 MEV,且不增加複雜性或外部依賴的最簡單可行方法之一。

期待您的想法!

        1 則貼文 - 1 位參與者

        [閱讀完整主題](https://ethereum-magicians.org/t/deterministic-transaction-execution-ordering-using-only-the-transactions-no-external-randomness-no-bundles/28098)
https://ethereum-magicians.org/t/deterministic-transaction-execution-ordering-using-only-the-transactions-no-external-randomness-no-bundles/28098