帖子
avatar

在一次調用失敗後仍持續運行的合約,今天沒有可靠的方法來判斷被調用方是故意回退,還是僅僅耗盡了gas,這取決於發送方的選擇。 這一缺口正是gas不足惡意攻擊的根源,而一項新的草案提案試圖在EVM層面填補這一漏洞。 EIP-8456於週一在Ethereum Magicians上開放討論,新增了一個稱為CALLSTATUS的指令,暫定操作碼為0xA5,耗費2 gas。 該指令會將當前幀中最近一次調用或創建操作的完成狀態以三位二進制位的形式推入堆棧。 位0表示回退,位1表示異常中止(例如gas耗盡),位2表示下方某幀發生了中止。 作者指出,目前唯一的證據是調用後的gasleft()算術運算,而每一次重新定價分叉都破壞了這些閾值。 EIP-8037提出的二維gas機制將使這種算術更加無效,因為其儲備池無法通過GAS操作碼訪問。 那麼,為何需要第三位? 大多數實際調用都經過中介層,例如代理、OpenZeppelin的functionCall封裝器、Multicall3或ERC-1271簽名檢查器。 如果僅報告直接被調用方的結束狀態,一個捕獲gas耗盡中止並以原因回退的封裝器,將看起來像是一次故意回退。 該草案保留了一個粘性標誌,會向上傳遞至每一幀,因此僅控制gas的發送方永遠無法讓調用方讀取到純粹的回退。 它報告的是結果而非原因,被調用方仍可通過INVALID故意產生中止。 它僅保護在其發布後編寫的代碼,因為已部署的合約無法讀取它。 目前尚無外部審查,操作碼編號仍開放,且針對58個列出案例的原型及測試仍在等待中。 連結 - https://t.co/KnByUBgWrY

此內容僅供資訊及教育用途。內容可能包括第三方見解、贊助內容或推廣材料,而創作者可能因此獲得報酬。本資訊流中的任何內容均不構成投資建議或收益保證。您須自行對投資決策負全責。交易前,請務必自行研究並審慎行事。我們不保證第三方資訊的準確性,亦不會對因此產生的任何損失承擔責任。過往表現並不代表未來結果。詳情請參閱我們的 社群條款 及 風險披露聲明。

avatar發佈你的回覆

評論