Gas

為什麼我需要指定比estimateGas 更高的gasLimit?

  • May 16, 2016

如果一個合約呼叫可以預見地需要 41043 的 gas 來處理estimateGas,那麼我為什麼需要指定 ~70000 的 gasLimit 來處理?

我相信在某些情況下,由於消耗 gas/返還 gas,累積 GasUsed 並不准確。如果合約在任何時候超過 gasLimit,它將失敗並出現 Out of Gas 異常。如果在契約的後期發放退款,即使它在契約執行期間上升到您認為的“gas limit”之上,也會降低累計gas。

讓我們以 Etherdice 為例。

  • 合約有數據在儲存
  • 每次使用者向合約發送交易時,合約都會清除儲存中最舊的項目
  • 然而,由於合約只在交易結束時退款,所有的資金都因gas不足而卡在合約中。

因此,在使用者發送交易之前,假設 gas 為 100,000。使用者發送交易後,gas 為 100,000。在合約期間,在某個時間點,它“需要”200,000。當它達到這個極限時,它就沒有油了。

在 etherdice 的情況下,實際上情況更糟,因為他達到了 Homestead 之前的全球限制 3141592。

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