以太坊交易有時看起來是成功的,但背後可能隱藏着問題。
根據 GitHub 上的草稿拉取請求 #36084,一名 Geth 开發者提出了一項對該客戶端 Gas 估計機制的修復方案。該補丁針對當前估計器中的一個問題:由於來自一個智能合約對另一個智能合約的內部調用失敗被忽略,可能導致 Gas 上限估計錯誤。
儘管交易本身仍可能完成,但並沒有證據表明用戶原本想執行的操作實際上已經發生。
Gas 估算問題是什麼?
問題出在這樣一種機制上:一個智能合約呼叫另一個智能合約,在捕捉到錯誤後繼續執行退款、記錄失敗,或乾脆跳過某個項目。從技術上說,這筆交易是成功的,但對用戶而言,結果卻不同。
這可能導致錢包給出的 Gas 上限建議,足以讓交易結束,卻不足以完成交易內部真正需要進行的工作。該開發者還指出,EIP-8037 可能會讓這種情況更加常見,因為失敗的內部執行所返還的 Gas,可能會幫助為備用流程提供資金。
Geth 的拉取請求 #36084 改變了什麼?

根據該拉取請求,這項改動為 Gas 估計中的“成功”提供了更嚴格的定義。這個版本的 Geth 將改進其處理內部失敗的方式:不再只檢查交易是否完成,而是將失敗的內部調用和合約創建也納入考慮範圍。
即便交易完成了,如果它產生的內部失敗次數多於在更高 Gas 上限下進行的一次參考執行,那麼這次估計也將被拒絕。
不過,這名開發者強調,一個總是失敗的內部調用,不應該讓估計值無限地上升。參考執行的作用,是讓估計器保留原本就存在的失敗,同時不允許因為 Gas 不足而新增失敗。該提案還引入了一個單獨的 Amsterdam 參考,以防止僅僅為了訪問狀態 Gas 儲備而出現不必要的上調。
開發者表示,他們已經依照 Amsterdam 更新後的新規則,重新回放了 432 笔以太坊主網交易,建議中的改動修復了 67 個案例中的 64 個。
Gas的上限提高了4%。另外有254個額外的估計結果未受到影響,因為這些案例並不存在上述問題;還有3個案例未被檢測出來。
對於普通投資者而言,這項擬議中的改動應能提高錢包估計的可靠性,並減少那些雖然完成了交易、卻沒有實現預期結果的情況,儘管在某些案例中會帶來更高的 Gas 上限。幸運的是,目前沒有證據表明更高的 Gas 上限與更高的手續費之間存在已被證明的聯繫。












