Ethereum Forks And Their Impact On Smart Contract Security
三句話摘要
以太坊 Fusaka 硬分叉即將上線,開發者與安全工程師必須了解哪些 EIP 會破壞現有智能合約。 智能合約不可篡改,但 EVM 會持續改變——永遠不要寫死 gas 數值,永遠要為可能不支援新功能的 L2 留後路。 智能合約不可篡改,但 EVM 可以改變:每次硬分叉都可能讓原本有效的合約行為失效,尤其是依賴特定 gas 成本或輸入格式假設的合約,任何寫死 gas 數值的設計都是危險的。
重點整理
重點- 1
智能合約不可篡改,但 EVM 可以改變:每次硬分叉都可能讓原本有效的合約行為失效,尤其是依賴特定 gas 成本或輸入格式假設的合約,任何寫死 gas 數值的設計都是危險的。
- 2
mod_exp 的兩項變更合力製造 DoS 風險:輸入大小限制 + gas 成本上調,若現有合約固定傳入大型輸入或固定 gas 呼叫 mod_exp,Fusaka 啟動後將直接 revert,導致合約功能永久癱瘓。
- 3
交易 gas 上限縮減三倍,高耗能函式需重新設計:批次迴圈操作(如清算多個倉位)若無分頁參數,可能在 Fusaka 後無法完整執行;需改為支援 `startIndex + limit` 的分段呼叫模式。
- 4
新 opcode/預編譯在 L2 上存在時間差風險:CLZ 與 P256 在主網啟動後,部分 L2 不會同步支援;若合約同時含有「不用新功能的存款」與「用到新功能的提款」,將導致資金鎖死在合約內。
實用技巧與重點
乾貨- Fusaka 時間表:演講當時預計兩週內啟動(2025 年)
- mod_exp 輸入限制:每個輸入最大 8,192 位元(目前無限制)
- mod_exp gas 變更:最低成本 → 500;總成本 × 2;>32 bytes 額外收費
- 交易 gas 上限:4,500 萬 → 1,600 萬(縮減約 3 倍)
- 歷史數據:主網上從未成功以超過 513 位元輸入呼叫 mod_exp;多數呼叫使用 329、28、256 位元
- 新增 opcode:`CLZ`(Count Leading Zeros,計算前導零數量)
- 新增預編譯:P256 ECDSA 簽名驗證(secp256r1 曲線),介面類似 `ecrecover`,無效輸入返回空資料
- P256 底層呼叫陷阱:若 L2 不支援此預編譯,`call` 預設成功返回但無資料,易造成誤判
- Solidity 現況:CLZ 僅在預發布版本的 assembly 區塊中可用;P256 需手動底層呼叫
- Glamsterdam(下一個分叉):預計明年,目前約 50 項 EIP 提案,含 ePBS、區塊級 access list,主要影響分類:新 opcode、新預編譯、gas 調整
- EIP-7702(PCRA 已上線):`msg.sender == tx.origin` 的 EOA 檢查已被破壞,可加 code size 檢查作為替代方案;目前尚無實際攻擊案例但有多個專案被迫更新
結論
結論“智能合約不可篡改,但 EVM 會持續改變——永遠不要寫死 gas 數值,永遠要為可能不支援新功能的 L2 留後路。”
完整解析
詳細講者唐(Signal Prime 安全工程師)在這場演講中,從實際安全工程師的角度系統性地梳理了以太坊即將到來的 Fusaka 分叉對智能合約的潛在衝擊。演講的核心前提很簡單卻容易被忽視:智能合約部署後無法修改,但它們底下的 EVM 卻持續在演進。就像積木塔的底層被抽換,上層再穩固也可能崩塌。
Fusaka 中真正會影響現有合約的有三項。第一,mod_exp 預編譯(用於 RSA 驗證等密碼學操作)將新增輸入大小上限 8,192 位元,超過者直接消耗全部 gas 並回滾;第二,mod_exp 的 gas 費用同步調漲,最低成本從原本標準拉高到 500,整體翻倍,固定 gas 呼叫的合約將中途耗盡。第三,也是影響最廣的一項:單筆交易的 gas 上限從等同整個區塊的 4,500 萬縮減至 1,600 萬,任何需要對大型陣列做全量迭代的函式(典型如清算所有倉位、批次結算)可能從此無法完整執行,永遠 revert。講者特別強調,解法是在函式加入 `startIndex` 和 `limit` 參數以支援跨交易的分段呼叫,這個設計模式對視圖函式早已是常識,但對複雜的狀態變更函式仍普遍被忽略。
另外兩項只影響新合約:CLZ opcode(計算 256 位元堆疊元素中的前導零數量)與 P256 預編譯(secp256r1 曲線的 ECDSA 驗證)。這兩者的共同危險不在功能本身,而在 L2 的支援時間差。主網啟動後,各 L2 不一定同步跟進。若一個合約同時包含「不依賴新功能的存款路徑」和「依賴新功能的提款路徑」,用戶存入後嘗試提款將遭遇 revert,資金因此被鎖死。P256 的底層呼叫還有額外陷阱:若 L2 上該預編譯不存在,EVM 預設仍會讓 `call` 成功返回,只是無資料,開發者若未嚴格檢查返回值長度,很容易把「不支援」誤判為「驗證通過」。
展望下一個分叉 Glamsterdam,目前雖有約 50 項提案,但核心兩項(ePBS 與區塊級 access list)對智能合約層無直接影響。可以預期的是,新 opcode、新預編譯與 gas 調整的組合仍然會到來,L2 支援時間差問題也將持續存在。講者以一句話作結:永遠不要假設 EVM 中任何操作的 gas 成本是固定不變的,這是貫穿所有分叉的最核心原則。
關鍵時刻
Pipeline v2帶時間戳的重點,會在逐字稿層級分析上線後產生。目前請先透過原始影片觀看。
事實查核
Pipeline v2說法查證是下一次管線升級的一部分。KeyFrame 只會顯示它真正能驗證的內容。

