研究說了什麼
ChainSecurity 在 2026 年 10 月 13 日的文章中指出,Glamsterdam 的 EIP-8037(建立狀態成本)與 EIP-8038(狀態存取成本)改變了 gas 的計費與退款方式,因此「捕捉外部呼叫失敗」的合約可能到達先前不可能到達的狀態。文中原話的重點是:即使合約程式碼不變,過去會 revert 的失敗路徑,現在可能完成執行。
文章列出四個機制:一、建立狀態的 gas 來自會被完整轉發的「儲備」,而 GAS 運算碼只回報 gas_left,所以 gasleft() 數值偏小不代表付不起建立狀態的費用;二、清除一個交易開始時為零的儲存槽,可立刻回補執行 gas,可能讓呼叫後的門檻檢查翻轉;三、中介合約在巢狀 gas 不足失敗後再 revert 時,其建立狀態的費用會退回,gas 可能回到呼叫者;四、重新定價本身可能讓原本足夠的轉發預算變得不夠。
受影響的寫法包括:記錄失敗子呼叫後繼續執行、批次處理時略過失敗項目、依 gasReq/63 或 gasInitial/64 之類呼叫後 gasleft() 門檻做分支,以及靠「gas 不足導致 revert」來阻止重試的失敗處理。建議作法包括:盡可能讓失敗向上傳遞使整筆交易 revert;需要處理失敗時保留可恢復路徑,不要只憑剩餘 gas 做不可逆決定;在兩套 gas 規則下重算續行成本;並以強制子呼叫失敗的測試,在相同前置狀態與 gas 假設下比較 Osaka 與 Glamsterdam 的結果。
與官方延期的關係,以及這篇研究的限制
以太坊基金會 10 月 22 日公告,原訂 10 月 26 日在 Hoodi 測試網啟用的 Glamsterdam 已延期,理由是核心開發者在 ACDE #248 決定進一步調查 EIP-8037 與主網智慧合約的互動;公告未設新日期,也沒有主網日期,並說主網使用者與 ETH 持有人無需行動。公告沒有點名 ChainSecurity 的研究,也沒有說明調查發現了什麼。
Bankless 於 10 月 23 日報導把延期與 ChainSecurity 的研究連在一起,並稱該公司已找到 13 個真實案例並聯繫受影響專案;但本站讀取的 ChainSecurity 文章本身沒有列出這個數字,13 個案例的說法目前只見於媒體轉述,未能獨立核實。研究本身依 2026 年 10 月 13 日審閱的 EIP 規格撰寫,當時 EIP 為 Last Call 狀態,細節仍可能更動;文章給的是示意情境與規格中的 gas 數字,不是實際攻擊或鏈上實測。
AI 觀點分析與推論
AI 觀點:風險在「沒改程式碼卻改了行為」
我傾向認為,這類問題的難處不在單一漏洞,而在不可升級的舊合約:開發者無法修補,只能由新規則的設計者決定是否調整定價或加入緩解。若研究的推演成立,受影響最大的會是用「呼叫後 gasleft() 門檻」或「batch 略過失敗」寫法的協議與其使用者,而一般只做轉帳或簡單交換的使用者較不容易碰到。
反面情境是:實際主網上符合危險寫法的合約很少,或開發者透過調整規格即可消除差異,那麼這次研究更像一次有價值的提前演練。我會看三個訊號來修正判斷:基金會或 ACDE 是否公開說明調查結果、EIP-8037/8038 是否因此修改、以及 ChainSecurity 是否公布可核對的受影響案例。這是推論,並非已確認的主網風險。




