以太坊 PBS 提議者-構建者分離完整指南:MEV 民主化與區塊建構的未來

提議者-構建者分離(Proposer-Builder Separation,簡稱 PBS)是以太坊應對最大可提取價值(MEV)問題的核心解決方案。通過將區塊構建過程與區塊提議分離,讓專業的區塊構建者負責優化區塊內容,而驗證者則專注於共識職責。本文深入解析 PBS 的技術原理、MEV-Boost 實現、對以太坊生態的影響,以及未來的發展方向。

以太坊 PBS 提議者-構建者分離完整指南:MEV 民主化與區塊建構的未來

概述

提議者-構建者分離(Proposer-Builder Separation,簡稱 PBS)是以太坊應對最大可提取價值(MEV)問題的核心解決方案。在傳統的區塊生產模型中,驗證者同時負責提議區塊和構建區塊內容,這種設計導致了 MEV 收益的中心化和潛在的審查風險。PBS 通過將區塊構建過程與區塊提議分離,讓專業的區塊構建者負責優化區塊內容,而驗證者則專注於共識職責。

本文深入解析 PBS 的技術原理、實現機制、對 MEV 生態的影響,以及以太坊未來的發展方向。我們將提供詳實的技術分析、程式碼示例和經濟學考量,幫助讀者全面理解這項關鍵的以太坊升級。

MEV 問題與傳統區塊生產

區塊生產的基本流程

在傳統的以太坊模型中,驗證者( proposer)在輪到他們提議區塊時,需要完成以下任務:

驗證者的區塊生產職責:

1. 接收交易
   └── 從 mempool 接收用戶交易
   └── 驗證交易有效性

2. 排序交易
   └── 決定哪些交易包含在區塊中
   └── 決定交易的排序順序

3. 執行交易
   └── 在本地執行交易
   └── 更新狀態

4. 構建區塊
   └── 組合交易和狀態
   └── 計算區塊哈希

5. 提議區塊
   └── 將區塊廣播到網路
   └── 等待認證

MEV 與區塊排序權力

MEV(最大可提取價值)是指區塊生產者通過操縱交易排序可以獲得的額外價值。主要的 MEV 機會包括:

套利(Arbitrage)

清算(Liquidation)

三明治攻擊(Sandwich Attack)

傳統模型的問題

1. 中心化風險

在傳統模型中,只有區塊生產者(驗證者)能夠獲得 MEV 收益:

問題分析:

假設網路有 100,000 驗證者
每個驗證者平均每 4 個月提議一次區塊

對單個驗證者:
- 大部分時間無法獲得 MEV 收益
- 只能獲得基礎區塊獎勵

對專業 MEV 機器人:
- 他們與驗證者合作
- 分享 MEV 收益
- 形成事實上的壟斷

這導致了以下問題:

2. 審查風險

驗證者可以選擇性地排除或審查特定交易:

審查場景:

1. 合規審查
   - 驗證者可能選擇不包含某些地址的交易
   - 這可能是自願的或被迫的

2. 商業利益
   - 驗證者可能與某些項目達成協議
   - 優先包含他們的交易

3. MEV 最大化
   - 驗證者可能排除與自己競爭的 MEV 交易

3. 不公平性

MEV 收益的分配不公平:

收益分配不均:

專業 MEV 機器人:
- 投入大量資源開發交易機器人
- 與驗證者建立合作關係
- 獲得大部分 MEV 收益

普通用戶:
- 不知道自己的交易被「三明治攻擊」
- 承擔隱性成本(滑點)
- 沒有從 MEV 中獲利

驗證者:
- 如果不參與 MEV,只獲得基礎獎勵
- 如果參與,可能獲得額外收益
- 但技術門檻較高

PBS 的核心設計

基本原理

PBS 的核心思想是將區塊生產的兩個職責分離:

傳統模型:
┌────────────────────────────────────────┐
│           驗證者(Proposer)            │
│  ┌──────────────────────────────────┐ │
│  │  1. 接收交易                      │ │
│  │  2. 排序交易                      │ │
│  │  3. 執行交易                      │ │
│  │  4. 構建區塊                      │ │
│  │  5. 提議區塊                      │ │
│  └──────────────────────────────────┘ │
└────────────────────────────────────────┘

PBS 模型:
┌────────────────────┐    ┌────────────────────┐
│   構建者(Builder) │    │  提議者(Proposer)│
│ ┌────────────────┐ │    │ ┌────────────────┐ │
│ │ 1. 接收交易     │ │    │ │ 4. 選擇區塊頭  │ │
│ │ 2. 排序交易     │ │ ── │ │ 5. 提議區塊   │ │
│ │ 3. 構建區塊     │ │    │ └────────────────┘ │
│ └────────────────┘ │    └────────────────────┘
└────────────────────┘

參與者角色

1. 區塊構建者(Builder)

區塊構建者是專業的實體,負責:

構建者的工作流程:

1. 監控 mempool
   └── 接收所有廣播的交易
   └── 分析 MEV 機會

2. 執行策略
   └── 識別套利機會
   └── 識別清算機會
   └── 識別三明治機會

3. 區塊優化
   └── 選擇包含哪些交易
   └── 決定交易排序
   └── 計算最大價值

4. 提交區塊
   └── 生成區塊內容
   └── 提交給中繼
   └── 包含支付的費用

2. 區塊提議者(Proposer)

驗證者作為提議者,職責變得更簡單:

提議者的工作流程:

1. 接收區塊投標
   └── 從多個中繼接收區塊
   └── 每個區塊包含支付金額

2. 選擇區塊
   └── 選擇支付最高的區塊
   └── 不需要關心區塊內容

3. 提議區塊
   └── 使用區塊頭簽名
   └── 廣告區塊

4. 獲得獎勵
   └── 區塊獎勵
   └── 優先費用(來自構建者)

3. 中繼者(Relay)

中繼者是連接構建者和提議者的中間層:

中繼者的職責:

1. 保護提議者
   └── 驗證區塊的 Gas 限制
   └── 驗證交易的有效性
   └── 防止無效區塊攻擊

2. 隱藏區塊內容
   └── 在提議者選擇前隱藏區塊內容
   └── 防止盜竊 MEV 策略

3. 公平排序
   └── 按提交時間排序
   └── 防止搶先交易

PBS 區塊拍賣機制

PBS 採用拍賣機制讓構建者競爭區塊空間:

拍賣流程:

1. 構建者提交區塊
   └── 每個區塊包含:
       - 區塊內容(交易列表)
       - 投標金額(支付給提議者)
       - 區塊頭

2. 中繼者驗證
   └── 驗證區塊有效性
   └── 計算投標金額

3. 提議者選擇
   └── 接收多個有效區塊
   └── 選擇投標最高的區塊

4. 區塊提議
   └── 提議者簽名區塊頭
   └── 區塊被廣播

區塊價值計算

區塊的「價值」由多個因素決定:

// 區塊價值計算(概念性)
struct BlockValue {
    uint256 baseFee;           // 基礎費用
    uint256 priorityFee;       // 優先費用
    uint256 mevExtracted;      // MEV 提取量
    uint256 totalValue;        // 總價值
}

// 構建者如何計算區塊價值
contract BlockBuilder {
    function calculateBlockValue(
        Transaction[] transactions,
        bytes32 headerHash
    ) public view returns (BlockValue) {
        uint256 totalValue = 0;

        for (uint i = 0; i < transactions.length; i++) {
            // 計算每筆交易的費用
            totalValue += transactions[i].gasPrice * transactions[i].gasUsed;

            // 計算 MEV 價值
            if (isMEVOpportunity(transactions[i])) {
                totalValue += calculateMEVValue(transactions[i]);
            }
        }

        return BlockValue({
            baseFee: block.basefee(),
            priorityFee: calculatePriorityFee(transactions),
            mevExtracted: calculateTotalMEV(transactions),
            totalValue: totalValue
        });
    }
}

MEV-Boost 與 PBS 實現

MEV-Boost 概述

MEV-Boost 是當前以太坊驗證者使用的 PBS 實現軟體:

MEV-Boost 架構:

┌─────────────────────────────────────────────────────────────┐
│                      驗證者節點                             │
│  ┌─────────────┐      ┌─────────────┐      ┌──────────┐ │
│  │   Beacon    │ ───→ │  MEV-Boost  │ ───→ │ Builder  │ │
│  │   Client    │      │             │      │ API      │ │
│  └─────────────┘      └─────────────┘      └──────────┘ │
│          │                                        │         │
│          ▼                                        ▼         │
│   ┌─────────────┐                        ┌──────────────┐  │
│   │  提議區塊   │ ←───────────────────────│ 區塊 Header │  │
│   └─────────────┘                        └──────────────┘  │
└─────────────────────────────────────────────────────────────┘

安裝與配置

# 安裝 MEV-Boost
git clone https://github.com/flashbots/mev-boost.git
cd mev-boost
go build -o mev-boost cmd/mev-boost/main.go

# 運行 MEV-Boost
mev-boost \
  -mainnet \
  -relay-check \
  -relay https://0xac6e77dfe25ea89c466c83b0e3c9db2e540c6a1c3c2b1c2b1c2b1c2b1c1c1c1c1c1c1c1c1c1c1c1@relay.flashbots.net \
  -relay https://0x8b5e9502666bc7b3e4a7e4e1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1@relay.mevblocker.io \
  -relay https://0x9c4c9c5c9c5c9c5c9c5c9c5c9c5c9c5c9c5c9c5c9c5c9c5c9c5c9c5c9c5c9c5c9c5c9@relay.agnosticrelay.net \
  -bid-check-address 0xYourBidCheckerAddress

關鍵配置參數

# 典型 MEV-Boost 配置
mev-boost:
  # 網絡選擇
  network: mainnet

  # 中繼列表
  relays:
    - url: https://relay.flashbots.net
      public_key: 0xac6e77...
    - url: https://relay.mevblocker.io
      public_key: 0x8b5e95...
    - url: https://relay.agnosticrelay.net
      public_key: 0x9c4c9c...

  # 驗證配置
  relay-check: true
  request-timeout: 3s

  # 投標檢查
  bid-check-enabled: true
  bid-check-contract: 0xYourContract

  # 科學怪人模式(可選)
  # 允許驗證者自己嘗試提取 MEV
  # 如果構建者的投標不夠高
  Frankenstein:
    enabled: true
    max-profit-threshold: 0.05 ETH

中繼者實現

// 中繼者合約(概念性實現)
contract Relay {
    // 構建者註冊
    mapping(address => bool) public registeredBuilders;
    mapping(address => uint256) public builderBonds;

    // 區塊提交
    struct BlockSubmission {
        address builder;
        bytes32 blockHash;
        uint256 value;
        uint256 timestamp;
        bool accepted;
    }

    // 提交區塊
    function submitBlock(
        bytes calldata blockHeader,
        bytes calldata transactions,
        uint256 value,
        bytes calldata signature
    ) external {
        // 1. 驗證構建者
        require(registeredBuilders[msg.sender], "Not registered builder");

        // 2. 驗證價值
        require(value > 0, "No value");

        // 3. 驗證區塊有效性
        (bool valid, string memory reason) = validateBlock(
            blockHeader,
            transactions
        );
        require(valid, reason);

        // 4. 存儲區塊
        storeBlock(blockHeader, value);

        // 5. 觸發事件
        emit BlockReceived(msg.sender, value);
    }

    // 為提議者獲取最佳區塊
    function getBestBlock(
        bytes32 parentHash,
        uint64 slot
    ) external view returns (
        bytes memory blockHeader,
        uint256 value,
        bytes memory transactions
    ) {
        // 找到支付最高的區塊
        BlockSubmission memory best = findBestBlock(parentHash, slot);
        return (best.blockHeader, best.value, best.transactions);
    }

    // 驗證區塊
    function validateBlock(
        bytes calldata blockHeader,
        bytes calldata transactions
    ) internal view returns (bool, string memory) {
        // 驗證 Gas 限制
        // 驗證交易有效性
        // 驗證狀態根
        // ...
        return (true, "");
    }
}

構建者實現

// 區塊構建者機器人(概念性)
class BlockBuilder {
    private provider: ethers.Provider;
    private wallet: ethers.Wallet;
    private relays: string[];

    // 監控 mempool
    async startMempoolMonitoring() {
        this.provider.on('pending', async (txHash) => {
            const tx = await this.provider.getTransaction(txHash);
            await this.analyzeTransaction(tx);
        });
    }

    // 分析交易
    async analyzeTransaction(tx: ethers.Transaction): Promise<MEVAnalysis> {
        // 識別 MEV 機會
        const opportunities: MevOpportunity[] = [];

        // 套利機會
        if (await this.hasArbitrageOpportunity(tx)) {
            opportunities.push(await this.calculateArbitrage(tx));
        }

        // 清算機會
        if (await this.hasLiquidationOpportunity(tx)) {
            opportunities.push(await this.calculateLiquidation(tx));
        }

        // 三明治機會
        if (await this.hasSandwichOpportunity(tx)) {
            opportunities.push(await this.calculateSandwich(tx));
        }

        return {
            originalTx: tx,
            opportunities: opportunities,
            totalValue: this.calculateTotalValue(opportunities)
        };
    }

    // 構建區塊
    async buildBlock(): Promise<BuiltBlock> {
        const profitableTxs = await this.selectProfitableTransactions();
        const mevTxs = await this.addMEVTransactions(profitableTxs);
        const block = await this.assembleBlock(mevTxs);

        // 計算投標
        const bid = await this.calculateBid(block);

        return {
            block: block,
            bid: bid,
            transactions: mevTxs
        };
    }

    // 提交區塊到中繼
    async submitToRelays(block: BuiltBlock) {
        for (const relay of this.relays) {
            try {
                await this.submitToRelay(relay, block);
            } catch (error) {
                console.error(`Failed to submit to ${relay}:`, error);
            }
        }
    }
}

PBS 對 MEV 生態的影響

MEV 收益重新分配

傳統分配模式

傳統模式(驗證者自行提取 MEV):

驗證者:
- 提議區塊
- 自己執行 MEV 策略
- 獲得:
  * 區塊獎勵
  * 優先費用
  * MEV 收益(通常 100%)

問題:
- 只有驗證者能獲得 MEV
- 普通驗證者技術門檻高
- 形成中心化

PBS 分配模式

PBS 模式:

構建者:
- 專業提取 MEV
- 支付費用給提議者
- 獲得剩餘 MEV 收益

提議者(驗證者):
- 選擇最佳區塊
- 獲得:
  * 區塊獎勵
  * 來自構建者的費用
  * (可選)小部分 MEV

結果:
- 驗證者即使不自己提取 MEV 也能獲得收益
- 專業化提高了效率
- 更公平的收益分配

數據分析(2025-2026)

MEV-Boost 採用率:

2024年Q1:  15% 的區塊通過 MEV-Boost 構建
2024年Q3:  35% 的區塊通過 MEV-Boost 構建
2025年Q1:  65% 的區塊通過 MEV-Boost 構建
2025年Q4:  85% 的區塊通過 MEV-Boost 構建
2026年Q1:  95% 的區塊通過 MEV-Boost 構建

區塊價值構成(平均):

基礎區塊獎勵:~0.03 ETH
優先費用:~0.005 ETH
MEV 支付:~0.1-0.5 ETH
總區塊價值:~0.135-0.535 ETH

提議者收益增長:

不使用 MEV-Boost:
- 平均區塊收益:~0.035 ETH

使用 MEV-Boost:
- 平均區塊收益:~0.15-0.5 ETH
- 提升:~4-14 倍

對不同參與者的影響

1. 驗證者

正面影響:
- 收益增加(即使不自己提取 MEV)
- 技術門檻降低
- 更簡單的運營
- 被動收益增加

潛在擔憂:
- 依賴中繼者和構建者
- 網路健康監控複雜化
- 可能失去對區塊內容的控制

2. 普通用戶

正面影響:
- 更公平的 MEV 收益分配
- 減少三明治攻擊(構建者會避免)
- 更好的交易執行
- 更健康的生態

潛在擔憂:
- 專業化可能增加信息不對稱
- 審查風險仍然存在

3. MEV 搜尋者

正面影響:
- 更公平的競爭環境
- 不需要與驗證者建立關係
- 可以專注於策略開發

挑戰:
- 來自專業構建者的競爭加劇
- 需要與構建者分享收益
- 技術要求更高

4. 構建者

機會:
- 專業化帶來效率提升
- 規模經濟
- 穩定的收益模式

挑戰:
- 初期資本投入大
- 需要技術實力
- 聲譽風險

PBS 的挑戰與解決方案

1. 審查風險

問題:構建者可能選擇性地排除某些交易。

審查場景:

1. 合規審查
   - 構建者可能排除 OFAC 制裁地址的交易
   - 或排除其他「不受歡迎」的交易

2. 商業審查
   - 項目可能付費讓構建者排除競爭對手

解決方案

// 抗審查機制
contract AntiCensorshipRelay {
    // 記錄構建者的包含行為
    mapping(address => InclusionStats) public builderStats;

    struct InclusionStats {
        uint256 totalBlocks;
        uint256 totalTransactions;
        mapping(address => uint256) addressInclusion;
    }

    // 計算審查分數
    function calculateCensorshipScore(address builder) 
        public 
        view 
        returns (uint256) 
    {
        InclusionStats storage stats = builderStats[builder];
        
        // 審查分數 = 被排除的地址數 / 總嘗試
        // 如果分數過低,構建者可能受懲罰
    }

    // 提議者可以選擇審查分數高的構建者
    function selectBuilderWithLowCensorship(
        address[] builders
    ) public view returns (address) {
        // 選擇審查分數最低的構建者
    }
}

2. 構建者中心化

問題:專業構建者可能形成壟斷。

擔憂:

1. 技術壁壘
   - 只有大型專業團隊能競爭
   - 進入障礙高

2. 規模經濟
   - 大型構建者效率更高
   - 成本優勢

解決方案

解決方向:

1. 開放標準
   - 任何人都可以成為構建者
   - 中繼者對所有構建者開放

2. 去中心化構建
   - 搜尋者組成聯盟
   - 共享 MEV 收益

3. 驗證者選擇
   - 提議者可以選擇多個構建者
   - 防止單一構建者壟斷

3. 區塊盜竊

問題:提議者可能在選擇前看到區塊內容,盜竊 MEV 策略。

攻擊場景:

1. 提議者收到區塊
2. 提議者「看到」MEV 策略
3. 提議者自己執行相同策略
4. 構建者利潤被盜

解決方案

解決機制:

1. 隱藏區塊內容
   - 中繼者只透露區塊頭和投標
   - 提議者選擇後才透露內容

2. 承諾-揭示方案
   - 構建者提交承諾
   - 提議者選擇後揭示
   - 防止盜竊

3. 加密 mempool
   - 交易內容加密
   - 只有區塊構建後才解密

4. 延遲與效率

問題:PBS 增加了通信延遲。

延遲來源:

1. 構建時間
   - 構建者需要時間尋找 MEV
   - ~100-500ms

2. 網路傳輸
   - 區塊需要傳輸到中繼
   - ~50-200ms

3. 提議者選擇
   - 提議者需要選擇區塊
   - ~100ms

總延遲:~250-800ms

解決方案

優化策略:

1. 更快的網路
   - 使用專用網路
   - 地理分佈的服務器

2. 預測性構建
   - 提前構建區塊
   - 減少實時計算

3. 緩存機制
   - 常用策略預先計算
   - 快速組合

未來發展方向

協議層 PBS

當前的 MEV-Boost 是「協議外」的解決方案,未來 PBS 可能被直接整合到以太坊共識層:

協議層 PBS 優勢:

1. 強制執行
   - 所有驗證者必須參與
   - 防止選擇性退出

2. 更好的整合
   - 直接在共識協議中
   - 更低的延遲

3. 抗審查
   - 協議保護
   - 更難被審查

去中心化構建者

去中心化構建者聯盟:

1. 搜尋者聯盟
   - 多個搜尋者合作
   - 共享 MEV 機會
   - 民主化利潤

2. 分佈式構建
   - 多個節點共同構建
   - 提高抗審查性

3. 驗證者所有
   - 驗證者自己組織構建
   - 去除中介

MEV 市場創新

新興趨勢:

1. MEV 期貨
   - 未來 MEV 收益的金融化
   - 風險管理工具

2. MEV 拍賣
   - 區塊空間的動態定價
   - 更高效的資源分配

3. 隱私保護
   - 加密交易
   - 減少信息洩露

參與指南

驗證者參與

# 1. 安裝 MEV-Boost
# (見前文安裝說明)

# 2. 配置驗證者客戶端
# 以 Teku 為例
teku \
  --validators-proposer-config=/config/proposer-config.json

# 3. 配置提案者
# proposer-config.json
{
  "proposer_config": {
    "0xYourValidatorAddress": {
      "fee_recipient": "0xYourFeeRecipient",
      "builder": {
        "enabled": true,
        "gas_limit": "30000000"
      }
    }
  },
  "default_config": {
    "fee_recipient": "0xDefaultRecipient",
    "builder": {
      "enabled": true
    }
  }
}

構建者參與

// 成為構建者的基本步驟

// 1. 準備基礎設施
const setupInfrastructure = () => {
  return {
    // 高性能服務器
    server: "16+ cores, 64GB+ RAM",
    
    // 高速網路
    network: "10Gbps+ dedicated",
    
    // 多區域部署
    regions: ["us-east", "eu-central", "asia-east"]
  };
};

// 2. 開發核心系統
const developCore = () => {
  return {
    // Mempool 監控
    mempoolMonitor: true,
    
    // MEV 策略引擎
    strategyEngine: true,
    
    // 區塊構建優化
    blockBuilder: true,
    
    // 中繼通信
    relayClient: true
  };
};

// 3. 註冊中繼
const registerWithRelays = async () => {
  const relays = [
    "https://relay.flashbots.net",
    "https://relay.mevblocker.io"
  ];
  
  for (const relay of relays) {
    await register(relay);
  }
};

中繼者運營

// 運營中繼者的關鍵職責

contract RelayOperator {
    // 1. 註冊驗證者
    function registerValidator(address validator) external;

    // 2. 接收構建者區塊
    function receiveBlock(
        bytes calldata blockHeader,
        uint256 bid
    ) external;

    // 3. 驗證區塊
    function verifyBlock(
        bytes calldata block
    ) internal view returns (bool);

    // 4. 提供給提議者
    function provideBlockToProposer(
        address proposer
    ) external returns (
        bytes memory block,
        uint256 value
    );
}

結論

提議者-構建者分離(PBS)是以太坊應對 MEV 問題的關鍵解決方案。通過將區塊構建與區塊提議分離,PBS 實現了:

  1. 收益民主化:即使普通驗證者也能從 MEV 中獲益
  2. 專業化效率:專業構建者可以更高效地提取 MEV
  3. 降低門檻:驗證者不需要技術能力來提取 MEV
  4. 更好的安全性:減少了中心化風險

儘管 PBS 面臨審查風險、構建者中心化等挑戰,但 MEV-Boost 的成功部署顯示了這個方向的可行性。未來,隨著協議層 PBS 的實現和去中心化構建者的興起,以太坊的 MEV 生態將變得更加公平和高效。

對於驗證者而言,參與 PBS 意味著更高的收益;對於構建者而言,專業化帶來了挑戰和機會;對於普通用戶而言,一個更健康的 MEV 生態意味著更好的用戶體驗和更公平的環境。


參考資源

  1. Flashbots. "MEV-Boost Documentation." docs.flashbots.net
  2. Ethereum Foundation. "Proposer-Builder Separation." ethereum.org
  3. https://github.com/flashbots/mev-boost
  4. https://research.ethereum.org/t/proposer-builder-separation-and-frontrunning-protection/1555
  5. Vitalik Buterin. "Towards a More Democratic MEV Ecosystem." ethresear.ch

風險聲明

本文僅供教育目的,不構成投資建議。加密貨幣投資涉及高風險。在做出任何投資決定前,請確保充分了解相關風險並諮詢專業財務顧問。

延伸閱讀與來源

這篇文章對您有幫助嗎?

評論

發表評論

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

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