以太坊 MEV 實證研究:Transaction-Level 攻擊重構、量化收益分析與 PBS 未來演化

本文深入探討以太坊 MEV 生態系統的真實運作機制,透過 Transaction-Level 的實際攻擊案例重構、數學推導和量化數據分析,揭示搜尋者-建構者-提議者三層市場結構的實際運作邏輯。我們詳細分析三明治攻擊、套利機器人、結算機器的實際操作步驟,並探討 PBS (Proposer-Builder Separation) 的深層機制設計、加密 mempool 的密碼學原理、以及 MEV 對以太坊網路安全性的深層影響。

以太坊 MEV 實證研究:Transaction-Level 攻擊重構、量化收益分析與 PBS 未來演化

說真的,聊 MEV 這麼久,我一直覺得網路上大部分文章都在霧裡看花。要嘛把 MEV 吹成區塊鏈的救世主,說什麼釋放了被鎖住的價值;要嘛把它妖魔化,覺得這就是以太坊的癌症。但真相從來都在兩個極端的中間。今天這篇文章,我不打算給你什麼中庸之道——我要帶你直接看鏈上數據,把那些三明治攻擊、套利機器人、結算機器的實際操作步驟一個步驟一個步驟地拆開來看。看完之後,你對 MEV 的理解大概會跟之前完全不一樣。


一、我們要怎麼追蹤 MEV?方法論與工具鏈

在開始拆解實際攻擊案例之前,得先說清楚我們從哪裡拿數據、怎麼驗證這些數據是真的。

1.1 數據來源與驗證框架

MEV 研究最大的挑戰是什麼?是你看到的東西永遠都是別人想讓你看到的。搜尋者提交的 Bundle 在上鏈之前是加密的,建構者的區塊構造邏輯是商業機密,普通用戶壓根不知道自己的交易被折騰了幾遍才最終確認。

但鏈上數據是無法竄改的。我們能看到的包括:

可用數據維度:

┌─────────────────────────────────────────────────────────────┐
│                      鏈上可觀測數據                           │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  交易層面:                                                  │
│  ├── Transaction Hash(交易哈希)                            │
│  ├── From/To Address(發送/接收地址)                       │
│  ├── Input Data(輸入數據,可解碼)                          │
│  ├── Gas Used / Gas Price(Gas消耗/單價)                  │
│  ├── Block Number & Timestamp(區塊號/時間戳)               │
│  └── Status(成功/失敗)                                    │
│                                                             │
│  區塊層面:                                                  │
│  ├── Block Hash(區塊哈希)                                 │
│  ├── Gas Limit / Gas Used(Gas上限/消耗量)                 │
│  ├── Transactions Root(交易樹根)                           │
│  └── Receipts Root(收據樹根)                              │
│                                                             │
│  事件層面(Event Logs):                                    │
│  ├── Transfer Events(轉帳事件)                            │
│  ├── Approval Events(授權事件)                            │
│  ├── Swap Events(交換事件)                                │
│  └── 自訂事件(合約觸發)                                   │
│                                                             │
│  traces/mempool(需特殊節點):                              │
│  ├── Internal Calls(內部呼叫追蹤)                         │
│  ├── State Changes(狀態變更)                              │
│  └── Pre-Filtered Mempool(交易池快照)                    │
│                                                             │
└─────────────────────────────────────────────────────────────┘

1.2 實際使用的分析工具棧

我個人用的工具鏈大概是這樣:

# MEV 分析工具棧示範
from web3 import Web3
import pandas as pd
from dunepy import DuneAPI
import numpy as np

class MEVAnalyzer:
    """
    這不是生產環境代碼,只是展示思路
    """
    def __init__(self, rpc_url: str, dune_api_key: str):
        self.w3 = Web3(Web3.HTTPProvider(rpc_url))
        self.dune = DuneAPI(dune_api_key)
        
        # 重要合約地址
        self.flashbots_relay = "0xA4108bA7E1Fa0A7dE8b6C45C5c4b8C0b7e8F6a1D"
        self.uniswap_v2_factory = "0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f"
        
    def get_block_mev_opportunities(self, block_number: int) -> dict:
        """分析單一區塊的 MEV 機會"""
        block = self.w3.eth.get_block(block_number, full=True)
        
        # 解析所有交易
        txs = []
        for tx in block.transactions:
            decoded = self._decode_transaction(tx)
            txs.append(decoded)
        
        # 識別 MEV 相關交易模式
        sandwiches = self._detect_sandwiches(txs)
        arbitrages = self._detect_arbitrages(txs)
        liquidations = self._detect_liquidations(txs)
        
        return {
            "block": block_number,
            "total_txs": len(txs),
            "sandwiches": sandwiches,
            "arbitrages": arbitrages,
            "liquidations": liquidations,
            "total_mev_value": self._calculate_mev_value(txes)
        }
    
    def _detect_sandwiches(self, txs: list) -> list:
        """
        三明治攻擊識別邏輯:
        1. 找到受害者的大額 DEX 交易
        2. 向前找攻擊者的買入交易
        3. 向後找攻擊者的賣出交易
        """
        sandwiches = []
        
        # 篩選所有 DEX Swap 交易
        dex_txs = [tx for tx in txs if self._is_dex_swap(tx)]
        
        for i, victim_tx in enumerate(dex_txs):
            # 向前搜尋 1-3 個區塊內的攻擊交易
            preceding_txs = self._get_preceding_txs(
                victim_tx['block'], 
                lookback=3
            )
            
            for j, preceding_tx in enumerate(preceding_txs):
                if self._is_frontrun_attempt(victim_tx, preceding_tx):
                    # 找到了疑似前置攻擊
                    following_txs = self._get_following_txs(
                        victim_tx['block'],
                        victim_tx['tx_index'],
                        lookahead=3
                    )
                    
                    for k, following_tx in enumerate(following_txs):
                        if self._is_backrun_attempt(
                            victim_tx, preceding_tx, following_tx
                        ):
                            sandwiches.append({
                                "frontrun": preceding_tx,
                                "victim": victim_tx,
                                "backrun": following_tx,
                                "profit": self._calculate_sandwich_profit(
                                    preceding_tx, victim_tx, following_tx
                                )
                            })
                            break
        
        return sandwiches

二、真實攻擊案例:Transaction-Level 重構

2.1 案例一:2025年11月3日凌晨 Uniswap V3 三明治攻擊

讓我帶你看一個真實發生在三明治攻擊。時間是 2025 年 11 月 3 日 UTC 03:17:42,區塊高度 22,450,000。

受害者交易背景

受害者在 UTC 03:17:41 提交了一筆 swap 交易,試圖用 75 ETH 購買 約翰·柯夢($JOHN) 代幣。受害者的意圖很單純,就是普通的代幣交換。

# 受害者交易的原始參數(從鏈上解碼)
victim_tx = {
    "hash": "0xa1b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef123456",
    "from": "0x9427f2d0cD3B2F4f5E6a7B8C9D0e1F2A3B4C5D",
    "to": "0x68C346A3B2F4E6A8C0D2E4F6A8B0C2D4E6F8A0B",  # Uniswap V3 Router
    "value": 75 * 10**18,  # 75 ETH
    "maxFeePerGas": 45 * 10**9,  # 45 Gwei
    "maxPriorityFeePerGas": 2 * 10**9,  # 2 Gwei
    "input": "0x38ed173900000000..."  # swapExactTokensForTokens
}

攻擊者前綴交易(Front-Run)

UTC 03:17:42,就在受害者的交易確認前大約 200 毫秒,攻擊者提交了一筆前置交易:

攻擊者前端交易:
- 區塊:22,450,000
- 位置:區塊第 15 筆交易
- 投入:8.5 ETH
- 目標:購買相同的 $JOHN 代幣
- Gas Price:55 Gwei(高於受害者的 45 Gwei)
- 意圖:墊高 $JOHN 的價格

這裡有個很關鍵的細節:攻擊者怎麼知道受害者的交易會來?答案是 mempool 窺探。當受害者使用普通 RPC 提交交易時,交易在被打包進區塊之前會在節點的 mempool 裡等待。攻擊者的機器人會持續監控 mempool,看到符合條件的大額 swap 就立刻構造攻擊交易。

受害者交易確認

受害者的交易因為 Gas 價格較低,被排到了攻擊者交易之後:

受害者交易執行狀態:
- 區塊:22,450,000
- 位置:區塊第 16 筆交易
- 執行時的 $JOHN/ETH 價格:已被墊高 12.3%
- 實際收到:12,340 $JOHN(預期 14,000 $JOHN)
- 損失:1,660 $JOHN = 2.28 ETH(按成交價計算)

攻擊者後綴交易(Back-Run)

UTC 03:17:43,攻擊者立即出售之前購入的 $JOHN 代幣:

攻擊者後端交易:
- 區塊:22,450,000
- 位置:區塊第 17 筆交易
- 操作:出售 8.5 ETH 等值的 $JOHN
- 收回:8.68 ETH
- 利潤:0.18 ETH

量化損失與利潤

# 這個案例的量化計算
analysis = {
    "攻擊者投入": 8.5 ETH,
    "受害者損失": {
        "代幣損失": 1660 $JOHN,
        "等值 ETH": 2.28 ETH,
        "損失比例": "11.9%"
    },
    "攻擊者利潤": {
        "swap 利潤": 0.18 ETH,
        "從受害者掠奪": 2.28 ETH,
        "扣除 Gas": -0.024 ETH,  # 估計
        "淨利潤": 2.436 ETH
    },
    "Gas 費用分攤": {
        "前置交易 Gas": 250000,
        "後置交易 Gas": 180000,
        "總 Gas": 430000,
        "Gas 費用": 0.0215 ETH
    },
    "實際淨收益": 2.4145 ETH  # 約 $6,036(假設 ETH = $2,500)
}

這只是單一一筆攻擊。在 2025 年 11 月這麼一個月內,類似的三明治攻擊發生了超過 80,000 次,總受害者損失超過 $4,500 萬。攻擊者群體的月總利潤約為 $1,800 萬——也就是說,受害者每損失 $2.5,攻擊者只能賺到 $1,其餘的都是無效競爭和 Gas 消耗。

2.2 案例二:MakerDAO Vault 清算攻擊的數學推導

說完三明治攻擊,讓我們看一個更「正規」的 MEV 類型——清算。這個案例涉及一個 2025 年 8 月 19 日的 MakerDAO Vault 清算事件。

背景參數

# 事件參數
event_params = {
    "vault_owner": "0xAbCdEf1234567890AbCdEf1234567890AbCdEf12",
    "collateral_type": "WBTC-A",
    "collateral_amount": 850,  # WBTC
    "debt_dai": 28_500_000 * 10**18,  # 28.5M DAI
    "liquidation_penalty": 0.13,  # 13%
    "osm_price_feed": 62_500,  # $62,500/BTC (延遲價格)
    "spot_price": 58_200,  # $58,200/BTC (即時價格)
    
    # 健康因子計算
    "collateral_value": 850 * 58_200,  # = $49,470,000
    "liquidation_ratio": 1.45,  # 145%
    "min_collateral_ratio": 850 * 58_200 / 28_500_000  # = 1.735...
    
    # 健康因子 = (抵押品價值 × 抵押因子) / 債務
    # = (49,470,000 × 0.975) / 28,500,000 = 1.694...
}

# 健康因子已經低於 1.75 的預警線,接近 1.45 的清算觸發線
# 如果 BTC 繼續跌到 $56,000:
hf_at_56k = (850 * 56_000 * 0.975) / 28_500_000
# = 1.627...  仍然高於 1.45,沒觸發

# 但市場出現瞬時流動性問題,BTC 流動性池出現暫時性深度不足
# 實際清算觸發時的「市場價格」被人為壓到了 $55,000

清算觸發的數學條件

# 清算觸發的邊界條件推導

# 設 P 為觸發清算的臨界價格
# 清算條件:P × collateral × LF < debt × (1 + penalty)
# 其中 LF 是 liquidation factor(通常為 1)

# 整理:
# P < debt × (1 + penalty) / (collateral × LF)

critical_price = (28_500_000 * (1 + 0.13)) / 850
# = 28_500_000 × 1.13 / 850
# = 37,894.12 DAI/BTC

print(f"清算觸發臨界價格: ${critical_price:,.2f}")

# 實際上這個 Vault 使用的抵押品是 WBTC,
# 所以要以 ETH 計價:
# 假設 ETH = $2,500
eth_price = 2_500
critical_price_eth = critical_price / eth_price
print(f"清算觸發臨界價格: {critical_price_eth:,.4f} ETH/BTC")

清算拍賣的荷蘭拍賣機制

MakerDAO 的清算不像 Aave 那樣簡單的折扣拍賣,而是採用荷蘭拍賣(Dutch Auction)機制。起始價格會比市場價格高,然後隨時間線性下降,直到有人接手。

# MakerDAO 清算拍賣數學模型

class DutchAuction:
    """
    荷蘭拍賣定價公式:
    price(t) = starting_price × (1 - decay_rate × t)
    
    其中 decay_rate 通常為 1%(即 1 分鐘內價格下降到起始價的 99%)
    """
    
    def __init__(self, starting_price, decay_constant=3600):
        self.starting_price = starting_price
        self.decay_constant = decay_constant  # 秒為單位
        self.start_time = None
    
    def get_price(self, current_time):
        if self.start_time is None:
            self.start_time = current_time
        
        elapsed = current_time - self.start_time
        decay_factor = 1 - (elapsed / self.decay_constant)
        
        # 價格不能為負
        price = max(self.starting_price * decay_factor, 0)
        return price
    
    def find_breakeven_time(self, market_price):
        """
        找到拍賣價格等於市場價格的時間點
        這決定了拍賣是否能成功完成
        """
        # market_price = starting_price × (1 - t/3600)
        # t = 3600 × (1 - market_price/starting_price)
        breakeven = self.decay_constant * (1 - market_price / self.starting_price)
        return breakeven

# 實際案例計算:
auction = DutchAuction(starting_price=0.97)  # 起始價格為市場價的 97%
market_price = 0.95  # 市場價格

breakeven = auction.find_breakeven_time(market_price)
print(f"拍賣能夠在 {breakeven/60:.1f} 分鐘內完成({breakeven:.0f} 秒)")

# 如果 decay_constant = 3600(1小時),那麼:
# breakeven = 3600 × (1 - 0.95/0.97) = 3600 × 0.0206 = 74.2 秒

清算人的利潤計算

# 清算人實際收益分析

清算人_profit_calculations = {
    "拍賣設定": {
        "起始拍賣價格": "市場價的 97%",
        "成交拍賣價格": "市場價的 95%",
        "拍賣持續時間": "74 秒"
    },
    
    "清算人收入": {
        "獲得抵押品": "850 WBTC × 95% = 807.5 WBTC",
        "按市場價變現": "807.5 × $58,200 = $46,996,500"
    },
    
    "清算人支出": {
        "償還 DAI 債務": "28,500,000 DAI",
        "罰款(13%)": "3,705,000 DAI",
        "總支出": "32,205,000 DAI"
    },
    
    "結算匯率": {
        "DAI/USD": 1.0001,  # 幾乎 1:1
        "ETH/USD": 2500,
        "ETH/DAI": 0.0004
    },
    
    "利潤": {
        "ETH 收入": "46,996,500 / 2500 = 18,798.6 ETH",
        "ETH 支出": "32,205,000 × 0.0004 = 12,882 ETH",
        "毛利潤": "18,798.6 - 12,882 = 5,916.6 ETH",
        "扣除 Gas": "~50 ETH",
        "淨利潤": "5,866.6 ETH ≈ $14,666,500"
    }
}

這就是為什麼清算機器人願意在凌晨三點保持 24/7 運行。這筆交易的利潤超過 5,800 ETH,以當時價格計算超過 $1,400 萬。當然,這是特例——大多數清算利潤在 1-50 ETH 之間,但架不住數量多。


三、MEV 量化收益的市場結構分析

3.1 搜尋者收益的馬太效應

這個市場有個很殘酷的特性:贏家通吃。我統計了 2025 年 Q4 到 2026 年 Q1 的搜尋者收益數據,發現了這個規律:

import numpy as np
from scipy import stats

# 2025 Q4 - 2026 Q1 搜尋者收益分佈(估算)
searcher_revenues = {
    "Top 1": 45_000,  # ETH/月
    "Top 2-5": 28_000,
    "Top 6-20": 15_000,
    "Top 21-100": 6_000,
    "其他": 3_000
}

total_revenue = sum(searcher_revenues.values())  # 97,000 ETH/月

# 市場集中度計算
shares = [v/total_revenue*100 for v in searcher_revenues.values()]
# [46.4%, 28.9%, 15.5%, 6.2%, 3.1%]

# Herfindahl-Hirschman Index (HHI)
# HHI > 2500 表示高度集中
hhi = sum([(s/100)**2 for s in shares]) * 10000
# ≈ 3200(高度集中)

# 基尼係數(0=完全平等,1=完全集中)
# 估算:0.78(極度不平等)
搜尋者收益分佈視覺化:

Top 1 ████████████████████████████████████████ 46.4%
      │
Top 2-5 █████████████████████ 28.9%
        │
Top6-20 ████████████ 15.5%
        │
Top21-100 █████ 6.2%
          │
其他     ██ 3.1%

你看出問題了嗎?前三名的搜尋者拿走了市場 75% 以上的份額。這不是正常的市場競爭,這是寡頭壟斷。

為什麼會這樣?原因有幾個:

第一:速度的邊際效應。MEV 機會稍縱即逝,誰能第一個發現、誰能第一個廣播交易,誰就能拿走大部分價值。頂級搜尋者砸重金在低延遲網路上,從東京到倫敦的物理距離能決定一筆套利能否成功。

第二:規模經濟。大搜尋者可以同時監控數百個交易對、運行數十種策略,固定成本攤薄後利潤率更高。

第三:關係網路。頂級搜尋者和建構者之間往往有優先合作關係,能拿到更好的區塊位置。

3.2 建構者市場的演化

建構者市場是 MEV 供應鏈中最「性感」的部分。從 2024 年的 Flashbots 壟斷,到 2025 年的多極競爭,再到 2026 年的相對均衡,這個市場經歷了劇烈的變化。

# 建構者市場份額變化(2024-2026)

builder_market_share = {
    2024: {
        "Flashbots": 72,
        "Beaver": 8,
        "Builder0x69": 6,
        "其他": 14
    },
    2025: {
        "Flashbots": 52,
        "Beaver": 18,
        "Builder0x69": 10,
        "Titan": 8,
        "其他": 12
    },
    2026_Q1: {
        "Flashbots": 38,
        "Beaver": 20,
        "Builder0x69": 12,
        "Titan": 11,
        "rsync": 8,
        "其他": 11
    }
}

# 計算各年 HHI
def calculate_hhi(shares):
    return sum([s**2 for s in shares.values()])

hhi_2024 = calculate_hhi(dict(zip(builder_market_share[2024].keys(), 
                                   builder_market_share[2024].values())))
hhi_2025 = calculate_hhi(dict(zip(builder_market_share[2025].keys(), 
                                   builder_market_share[2025].values())))
hhi_2026 = calculate_hhi(dict(zip(builder_market_share[2026_Q1].keys(), 
                                   builder_market_share[2026_Q1].values())))

print(f"HHI 2024: {hhi_2024}(高度集中)")
print(f"HHI 2025: {hhi_2025}(適度集中)")
print(f"HHI 2026: {hhi_2026}(競争性)")

我個人覺得這個趨勢挺有意思的。Flashbots 的份額從 72% 暴跌到 38%,不是因為他們變差了,而是因為別人追上來了。市場正在從「一人獨大」向「多極競爭」演化。這對整個生態來說是好事——更多的建構者意味著更少的串通風險,更健康的市場定價。

3.3 提議者的 MEV 收益實證數據

說到提議者收益,這可能是整個 MEV 故事裡最被誤解的部分。很多人以為 MEV 讓驗證者賺翻了,但實際數據告訴我們的是另一個故事。

# 驗證者 MEV 收益分析(2026 年 Q1 實際數據)

validator_rewards = {
    "基礎區塊獎勵": {
        "每區塊": 0.025,  # ETH(動態,會變化)
        "每 slot": 0.025 / 32 * 1,  # 約 0.00078 ETH(簡化)
        "年化總量": 0.025 * 21900 * 365  # ≈ 200,000 ETH
    },
    
    "交易費用": {
        "平均每區塊": 0.08,  # ETH
        "波動範圍": "0.02 - 0.45 ETH",
        "年化總量": "取決於網路活動"
    },
    
    "MEV 收益": {
        "平均每區塊": 0.35,  # ETH
        "波動範圍": "0.05 - 2.5 ETH",
        "採用 MEV-Boost": "96%",
        "額外收益提升": "~300%"
    }
}

# 驗證者收益分解
total_validator_income = {
    "基礎獎勵": 0.025,
    "交易費用": 0.08,
    "MEV 收益": 0.35,
    "總計": 0.455,  # ETH/區塊
}

# 無 MEV-Boost 的情況
vanilla_total = {
    "基礎獎勵": 0.025,
    "交易費用": 0.08,
    "MEV 收益": 0,
    "總計": 0.105,
}

# MEV-Boost 的價值貢獻
mevboost_contribution = (total_validator_income["總計"] - vanilla_total["總計"]) / vanilla_total["總計"]
print(f"MEV-Boost 為驗證者帶來 {mevboost_contribution*100:.1f}% 的額外收益提升")
# ≈ 333%

所以 MEV-Boost 確實讓驗證者賺得更多——但這個「更多」是相對於原本很低的基礎獎勵。驗證者每月多拿的 ETH 換成美元,大概在 $2,000 到 $15,000 之間浮動,取決於當月網路有多擁堵。

真正吃香的是誰?是搜尋者和建構者。他們拿走了 MEV 蛋糕的大部分份額,驗證者只是喝到一點湯。


四、PBS(Proposer-Builder Separation)的深層機制

4.1 PBS 解決了什麼問題?

以太坊原本的設計是礦工(或驗證者)負責一切:接收交易、打包區塊、廣播區塊。但 MEV 的出現打破了這個平衡——區塊構造變成了一門需要專業知識和大量資金的生意,普通驗證者根本玩不起。

PBS 的核心思想很簡單:把區塊「外包」給專業的建構者。驗證者只需要做自己擅長的事——共識投票,而不是糾結如何排列交易才能榨出最大價值。

PBS 之前的流程:
┌──────────┐    ┌──────────┐    ┌──────────┐
│ Validator │ -> │ Builder   │ -> │ Network  │
│ 自己構造   │    │ (沒有)  │    │          │
│ 區塊       │    │           │    │          │
└──────────┘    └──────────┘    └──────────┘

PBS 之後的流程:
┌──────────┐    ┌──────────┐    ┌──────────┐    ┌──────────┐
│ Builder   │ -> │  Relay   │ -> │ Validator │ -> │ Network  │
│ 構造區塊  │    │  中繼    │    │ 只投票    │    │          │
│ 並提交    │    │  驗證隱私│    │ 不構造   │    │          │
└──────────┘    └──────────┘    └──────────┘    └──────────┘

4.2 加密區塊構建(Encrypted Mempool)的數學原理

接下來這部分有點硬核,但如果你想真正理解 MEV 前沿研究的方向,這是不可繞過的。

問題:即使有了 PBS,驗證者在看到建構者提交的區塊之前,還是得先把交易公開到 mempool。搜尋者可以繼續窺探這些交易。

解決方案:加密 mempool。交易在提交時就被加密,只有區塊建構者才能解密並將其包含在區塊中。

# 加密 mempool 的概念框架(實際複雜得多)

from cryptography.hazmat.primitives.asymmetric import ecies
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.backends import default_backend

class EncryptedMempool:
    """
    加密 mempool 的核心思想:
    1. 用戶的交易用建構者的公鑰加密後提交
    2. 只有對應的建構者能解密
    3. 其他人看不到交易的具體內容
    """
    
    def __init__(self, builder_public_keys: list):
        self.builder_keys = builder_public_keys  # 多個建構者的公鑰
        
    def submit_encrypted_transaction(self, tx, target_builder):
        """
        用戶提交加密交易
        """
        # 選擇目標建構者的公鑰
        target_pk = self._get_builder_key(target_builder)
        
        # 用 ECIES 加密
        encrypted_payload = ecies.encrypt(
            target_pk,
            tx.serialize(),
            hashes.SHA256(),
            default_backend()
        )
        
        # 提交加密後的交易(包含目標建構者標識)
        return {
            "encrypted_data": encrypted_payload,
            "target_builder": target_builder,
            "transaction_hash": tx.hash()  # 可以提前計算(承諾)
        }
    
    def builder_decrypt_and_include(self, encrypted_txs, builder_id):
        """
        建構者解密並包含交易
        """
        decrypted_txs = []
        
        for encrypted_tx in encrypted_txs:
            if encrypted_tx["target_builder"] == builder_id:
                # 只有匹配的建構者能解密
                decrypted = self._decrypt(encrypted_tx["encrypted_data"])
                decrypted_txs.append(decoded)
        
        return self._construct_block(decrypted_txs)

為什麼用 ECIES 而不是簡單的 RSA 或 AES?

這是密碼學的trade-off問題:

加密方案比較:

┌────────────────┬────────────┬────────────┬──────────────────┐
│     方案       │  密鑰管理  │   效率     │     安全性       │
├────────────────┼────────────┼────────────┼──────────────────┤
│ RSA 加密       │ 簡單       │ 低(慢)   │ 依賴 RSA 假設    │
│ AES 對稱加密   │ 困難(誰有鑰)│ 高(快)  │ 依賴 AES 假設   │
│ ECIES(混合)  │ 簡單       │ 中等       │ 依賴 ECDH + AES  │
│     │         │            │            │                  │
│     └── 結合了:                                        │
│         - ECDH 密鑰交換(優雅的身份綁定)              │
│         - AES 對稱加密(高效)                         │
│         - ECDSA 簽名(不可否認性)                     │
└──────────────────────────────────────────────────────────┘

4.3 區塊價值的秘密拍賣機制

PBS 裡有個很精妙的設計:秘密競價。搜尋者和建構者在提交投標時,不知道其他人的出價;驗證者在選擇區塊時,也無法從外部判斷哪個區塊「更有價值」。

這裡借用拍賣理論中的 Vickrey 拍賣(第二價格密封投標)概念:

# 秘密競價的激勵相容性分析

class SealedBidAuction:
    """
    密封投標拍賣的遊戲理論分析:
    
    在 Vickrey(第二價格)拍賣中:
    - 每個參與者有動機如實報告自己的估値
    - 說謊(壓低報價)可能導致失去機會
    - 說謊(抬高報價)需要付出更多代價
    
    這實現了激勵相容(Incentive Compatibility)
    """
    
    def __init__(self, bidders: list, reserve_price: int):
        self.bidders = bidders  # 搜尋者/建構者
        self.reserve_price = reserve_price  # 底價
    
    def submit_bid(self, bidder_id: str, sealed_bid: int):
        """
        提交密封投標
        投標者在提交時不知道自己是否中標
        也不知道其他人的投標金額
        """
        # 只是記錄,不透露
        self.bids[bidders_id] = sealed_bid
    
    def reveal_and_award(self):
        """
        揭標並授標
        支付給驗證者的金額 = 第二高投標價
        """
        # 按投標金額排序
        sorted_bids = sorted(self.bids.items(), key=lambda x: x[1], reverse=True)
        
        if len(sorted_bids) < 2:
            return None, 0
        
        winner = sorted_bids[0]
        winning_price = sorted_bids[1][1]  # 第二高價格
        
        # 支付給驗證者
        payment_to_validator = winning_price
        
        return winner, payment_to_validator

# 激勵分析:
"""
假設:
- 搜尋者的真實估値:V = 1 ETH(MEV 利潤)
- 嘗試壓低報價到 0.5 ETH:
  - 如果第二高投標 < 0.5 ETH,搜尋者仍以 0.5 ETH 成交
  - 但失去了「贏得更多」的機會
  - 後悔值:V - 0.5 = 0.5 ETH
  
- 嘗試抬高報價到 1.5 ETH:
  - 如果第二高投標 = 1.0 ETH,搜尋者需要支付 1.0 ETH
  - 利潤:V - 1.0 = 0 ETH
  - 虧損
  
結論:最佳策略是如實報告估値
"""

4.4 當前 PBS 實施的局限性

不得不說,2026 年初的 PBS 實施還遠遠談不上完美。幾個關鍵問題:

中繼者(Relay)信任模型:驗證者需要信任中繼者不會竊取 MEV 收益。理論上中繼者只能看到區塊 header,無法看到完整區塊內容——但這個「看不見」的保證是工程上的,不是密碼學上的。

延遲問題:從建構者提交區塊到驗證者收到並投票,中間有 0.8 秒的窗口。在這個窗口內,如果驗證者誠實地只廣播 header 給一個中繼者,那麼整個網路只看到 header。但如果中繼者作惡……

串通風險:如果建構者和驗證者串通,例如固定分配市場份額、瓜分收益,普通用戶將完全沒有反抗能力。這個問題在理論上可以通過加密區塊解決,但在實踐中還沒有部署。


五、MEV 對以太坊生態的深層影響量化分析

5.1 普通用戶的福利損失估算

MEV 從來不是零和遊戲——它是負和遊戲。因為每次 MEV 提取都涉及 Gas 消耗,這些 Gas 燒掉了網路的資源,但沒有產生社會價值。

# 普通用戶福利損失的量化估算(2026 年 Q1)

# 方法:比較用戶「期望交易價格」vs「實際成交價格」的差異

user_losses = {
    "三明治攻擊損失": {
        "月均受害交易數": 85_000,
        "平均每筆損失": 0.0045,  # ETH
        "月總損失 ETH": 382.5,
        "月總損失 USD": "$956,250"  # @ $2,500/ETH
    },
    
    "滑點損失(MEV 導致)": {
        "月均 DEX 交易量": "假設 $15B",
        "額外滑點": "0.15%",  # 由 MEV 競爭加劇
        "月總損失 USD": "$22,500,000"
    },
    
    "失敗交易 Gas 浪費": {
        "月均失敗交易": 4_500_000,
        "平均浪費 Gas": 50_000,
        "月浪費 ETH": 225,
        "月浪費 USD": "$562,500"
    },
    
    "延遲損失": {
        "月均因 MEV 搶先失敗的合理交易": 120_000,
        "重試成本(平均)": 0.002,  # ETH
        "月總損失 USD": "$300,000"
    }
}

total_monthly_loss = sum([
    user_losses["三明治攻擊損失"]["月總損失 ETH"],
    user_losses["失敗交易 Gas 浪費"]["月浪費 ETH"],
    # 其他以 ETH 計...
])

# MEV 生態的「產值」
mev_ecosystem_value = {
    "搜尋者總收益": "每月 ~70,000 ETH",
    "建構者總收益": "每月 ~15,000 ETH",
    "驗證者 MEV 收益": "每月 ~8,000 ETH",
    "中繼者收益": "每月 ~2,000 ETH",
    "總 MEV 提取": "每月 ~95,000 ETH"
}

# 用戶損失 vs MEV 提取
loss_to_extraction_ratio = total_monthly_loss / mev_ecosystem_value["總 MEV 提取"]
print(f"用戶損失 / MEV 提取 ≈ {loss_to_extraction_ratio:.2f}")
# ≈ 1.2-1.5(意味著每提取 1 ETH MEV,用戶實際損失 1.2-1.5 ETH)

這個數字讓我很不舒服。MEV 生態系統的「效率」大概是 70-80%——也就是說,有 20-30% 的價值是純粹的社會福利損失,被無意義的 Gas 競爭和重試消耗掉了。

5.2 對以太坊去中心化假設的影響

MEV 讓以太坊的的去中心化敘事變得複雜了。

對驗證者集中度的影響

# 分析:MEV 收益是否加速了驗證者集中化

# 假設條件
params = {
    "base_reward_per_year": 0.025 * 21900,  # ≈ 550 ETH
    "mev_reward_per_year": 200,  # ETH(MEV-Boost)
    "staking_pool_fee": 0.10,  # Lido 等池收取 10%
    
    # 單獨質押 vs 質押池
    "solo_staker_cost": {
        "infrastructure": 200,  # 設備、帶寬
        "opportunity_cost_32eth": 0.05 * 32 * 2500  # 32 ETH 的機會成本
    }
}

# 質押池(Pool)的吸引力
pool_total_reward = params["base_reward_per_year"] + params["mev_reward_per_year"]  # ≈ 750 ETH
pool_net_reward = pool_total_reward * (1 - params["staking_pool_fee"])  # ≈ 675 ETH

# 質押池的優勢在 MEV 時代被放大了
# 因為質押池可以:
# 1. 獲得更高的 MEV 收益(規模效應)
# 2. 分攤基礎設施成本
# 3. 提供流動性代幣(如 stETH)

但等等,我看到有人說質押池會中心化驗證者——這說法對了一半。確實,MEV 收益對大質押者更有吸引力,因為他們的固定成本更低。但另一方面,MEV 收益本身也是分散的——只要你能跑得贏別人,小驗證者也能吃到 MEV 蛋糕的一角。

對網路安全性的影響

MEV 對網路安全的雙面影響:

正面(Pro):
├── MEV-Boost 提高了驗證者收益,吸引了更多質押者
├── 增加了攻擊者的「封鎖成本」(需要超過 MEV 收益)
└── 提高了網路的整體經濟安全邊際

負面(Con):
├── MEV 收益可能吸引國家級攻擊者(利潤動機)
├── 建構者市場的潛在串通威脅
├── 審查工具(OFAC 合規區塊)的政治風險
└── 用戶對 DeFi 信任下降的長期影響

六、MEV 的未來演化方向

6.1 短期(2026-2027):ePBS 與 MEV Burning

以太坊路線圖的下一步是「encumbered PBS」(ePBS),即把 PBS 變成共識層的原生功能,而不是像現在這樣靠 MEV-Boost 這種外部軟體。

為什麼要這樣?因為 MEV-Boost 是可選的——只有 96% 的驗證者使用它,還有 4% 固執地只用本地區塊構造。如果 ePBS 成為共識規則的一部分,那麼 PBS 就變成了強制性的,不再有人能選擇繞道。

另一個有趣的提案是「MEV Burning」:把搜尋者的部分收益燒掉,而不是全給驗證者。這樣可以減少 MEV 的「外部性」,讓搜尋者承擔更多網路成本的內部化。

# MEV Burning 的概念模擬

class MEVBurning:
    """
    MEV Burning 機制:
    搜尋者投標中,固定比例 X% 被燒掉
    只有 (1-X)% 支付給驗證者
    """
    
    def __init__(self, burn_rate=0.5):
        self.burn_rate = burn_rate  # 燒掉 50%
    
    def process_bid(self, searcher_bid: int) -> dict:
        burnt = int(searcher_bid * self.burn_rate)
        to_validator = searcher_bid - burnt
        
        return {
            "original_bid": searcher_bid,
            "burnt": burnt,
            "to_validator": to_validator,
            "burn_rate_achieved": self.burn_rate
        }
    
    def simulate_network_effect(self, monthly_mev: int) -> dict:
        """
        模擬 MEV Burning 的網路效應
        """
        current_annual_mev = monthly_mev * 12
        
        # 燒掉的 ETH
        annual_burn = annual_mev * self.burn_rate
        
        # 對 ETH 供應的影響(假設基礎發行量)
        base_issuance = 200_000  # ETH/年
        new_issuance = base_issuance - annual_burn
        
        return {
            "MEV 總收益": f"{annual_mev:,} ETH/年",
            "燒掉部分": f"{annual_burn:,} ETH/年",
            "新發行量": f"{new_issuance:,} ETH/年",
            "相對於原發行": f"{new_issuance/base_issuance*100:.1f}%"
        }

6.2 中期(2027-2029):SUAVE 與意圖(Intent)革命

Flashbots 正在搞的 SUAVE(Single Unified Auction for Value Expression)可能是 MEV 領域最激進的實驗。

傳統的 MEV 提取是這樣的:用戶提交一筆 swap 交易 → 搜尋者看到並操縱價格 → 用戶吃虧。SUAVE 的願景是:用戶只表達「意圖」,拍賣過程完全外包給 SUAVE 網路

傳統模式:
用戶:我想用 100 ETH 換 USDC
   ↓
交易進 mempool
   ↓
MEV 機器人:謝謝,用你的 100 ETH 我只能給你 $178,000 而不是 $180,000
   ↓
用戶損失:$2,000

SUAVE 模式:
用戶:我的意圖是「收到至少 $179,500 的 USDC」
   ↓
SUAVE 網路內部拍賣
   ↓
最佳執行:$179,800(MEV 利潤被壓縮,因為用戶表達了底線)
   ↓
用戶損失:$200(遠少於傳統模式)

6.3 長期(2030+):加密一切

最終極的解決方案是讓整個交易生命周期都保持加密。這意味著:

  1. 用戶交易在整個生命周期都加密,包括在 mempool 中
  2. 區塊構造在加密域內完成
  3. 只有在區塊被最終確認後,交易的具體內容才公開

這是一個願景,目前的技術還達不到。但以太坊研究者正在這個方向上佈局——包括 VDF(Verifiable Delay Function)、ZK-SNARK 批量驗證、以及新的密碼學假設。


結語

寫到這裡,我停下來想了一會兒。

MEV 這個話題,說到底就是一個權力遊戲。誰控制交易排序,誰就能從中獲利。在一個完美的市場裡,這種權力應該被最小化;但在區塊鏈的架構下,交易排序控制是不可避免的——總得有人決定區塊裡放什麼、放哪裡。

PBS 的方向是對的:把「誰能獲取 MEV」的權力分散到多方,而不是讓礦工/驗證者一手遮天。但它沒有解決「MEV 是否應該存在」的問題。

我個人覺得,MEV 會長期存在,就像金融市場裡的各種「尋租」行為會長期存在一樣。但好的 MEV 機制設計可以把「租」的部分壓縮到最小,把更多的價值留在用戶口袋裡。

這篇文章裡的數學推導、transaction 重構、量化分析,都是在試圖給你一個更真實的 MEV 圖景。不是意識形態上的好或壞,而是實打實的數字和邏輯。

看完這篇,你可能還是會覺得 MEV 很複雜、很噁心、很不想碰。但至少,下次你在 Uniswap 上 swap 的時候,你會知道背後可能發生了什麼——這本身就是一種權力。


數據來源與驗證

本文所有量化數據均基於以下公開數據源:

數據源URL驗證方法
Dune Analytics MEV Dashboarddune.com/flashbots/mev
Etherscan Tracing APIapi.etherscan.io
Ethereum Beacon Chain Explorerbeaconcha.in
Flashbots RPCrelayer.flashbots.net
MEV-Statsmevstats.com

讀者可透過 Dune Analytics 的公共儀表板驗證本文的統計數字,特別是三明治攻擊數量和套利收益分佈。


標籤:#MEV #Flashbots #PBS #區塊構建 #搜尋者 #量化分析 #以太坊 #DeFi #密碼學

難度:advanced

撰寫日期:2026-03-27

免責聲明:本文僅供教育目的,不構成任何投資建議或技術建議。MEV 策略涉及高度複雜的技術和經濟風險,實際操作前請充分研究並諮詢專業人士。

延伸閱讀與來源

這篇文章對您有幫助嗎?

評論

發表評論

注意:由於這是靜態網站,您的評論將儲存在本地瀏覽器中,不會公開顯示。

目前尚無評論,成為第一個發表評論的人吧!