Gas-Price

交易失敗是否退還所有Gas Fee?

  • October 8, 2022
function burn(uint256 _value) public returns (bool success) {
   balances[msg.sender] = balances[msg.sender].sub(_value);
   totalSupply = totalSupply.sub(_value);
   Burn(msg.sender, _value);
   require(balances[msg.sender] >= _value); // fail tx
   return true;
}

執行上述burn函式後,如果最後require()失敗,之前執行程式碼的gas費會全額退還嗎?

氣體消耗是這樣的。分三種情況:

  1. 假設您將 gas 限制設置為 30 000(這是您在發送交易時預付的最大 gas 量)。假設交易成本為 5000 gas。交易成功。執行所需的 gas 將從您發送的 30 000 gas 中扣除。您將獲得 25 000 汽油。
  2. 您已將您的 gas 限制再次設置為 30 000。交易成本為 35000 gas。在這種情況下,您發送的全部 30 000 gas 將從您的帳戶中扣除,但交易不會成功," Out of gas "會發生還原。
  3. 你的 gas 限制是 30 000 gas。交易成本也為 30 000 gas,但在函式體的深處有 2 行的需求語句。由於require()聲明未得到滿足,事務將恢復。在這種情況下,執行語句之前的所有邏輯所需的gas require ()(相當於10 000 gas)將從您的帳戶中扣除,在這種情況下,僅消耗10 000 gas,剩餘的20 000被發送回到你身邊。

在您的特定情況下,msg.sender將支付require()語句之前所有操作的執行費用。如果氣體限制中剩餘的任何額外氣體,該金額將被退還。但是用於計算require()語句之前的所有邏輯的氣體將被發送到它的礦工並被燒毀。

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