Solidity

為什麼未達到 gasLimit 時沒有氣體

  • October 9, 2018

https://etherscan.io/tx/0x43f39829b3a48c4146808b12489e01bdb5dfa32d5b49514298339a719e538c09

tx 失敗,msg 顯示原因是:out of gas,但 Gas Limit 為 520000,而 Txn 僅使用了 86056 Gas。

為什麼會這樣?

附言。我們嘗試交換的 erc20 令牌的原始碼位於https://etherscan.io/address/0x4ceda7906a5ed2179785cd3a40a69ee8bc99c466#code

如果您查看該交易的奇偶校驗跟踪,您會發現它在從0x4ceda7906a5ed2179785cd3a40a69ee8bc99c4660x092988fc1090ff8f924b8f9cc71350e90ca446cd的呼叫中耗盡了 gas,該呼叫僅收到 2411 個 gas。

當合約進行子呼叫時,它們只允許傳遞可用於整個交易的氣體子集。

您用於交換的合約似乎將某些外部呼叫限制為 4999 gas。

因此,當您在代幣上呼叫 balanceOf 函式時,它只收到 4999 氣體。這個特定的代幣似乎正在使用另一個合約來跟踪餘額,然後進行第二次內部呼叫以從那裡檢索餘額。該呼叫僅接收 2411 個 gas(這是初始 balanceOf 呼叫中剩下的 4999 個 gas),不足以完成讀取和返回操作,因此會耗盡 gas。

如果不更新代幣互換合約,您可能無法解決此問題。

引用自:https://ethereum.stackexchange.com/questions/56492