Solidity

如何“看到”SELFDESTRUCT的退款?

  • August 9, 2022

我正在嘗試使用安全帽來模擬並查看汽油退款。這是我的 2 個用於測試目的的智能合約:

pragma solidity ^0.8.9;



contract DaughterContract{
  function destruct()public {
       address payable addr = payable(address(msg.sender));
       selfdestruct(addr);
   }

}

import "hardhat/console.sol";

contract TestContract {


DaughterContract public lastSMBuilt;

uint256 myNum=0;

function createSmartContract() public returns (DaughterContract) {
    DaughterContract daughter = new DaughterContract();
    lastSMBuilt=daughter;
    return daughter;
}

function destroy() public {
    lastSMBuilt.destruct();
}

function expensiveTxWithDestroy() public {

 destroy();
   for(uint i=0; i<1995;i++){
      myNum=i;
   }
   }
}

1/ 我呼叫 createSmartContract 2/ 然後我呼叫昂貴的TxWithDestroy

如果我 在昂貴的TxWithDestroy 中評論****destroy呼叫,那麼gas 的總成本會更低。所以退款不會發生。難道我做錯了什麼?

2021年包含在倫敦硬分叉中的EIP-3529selfdestruct取消了Gas 退款。沒有看到退款是預期的行為。selfdestruct

不幸的是,他們取消了 gas 退款,因為它在區塊鏈中填充了佔用空間的 gastoken 和交易,只是為了拿回一些便宜的 gas,而乙太坊開發人員並不喜歡這種做法。

在我看來,它應該被保留,因為它幫助人們使用了一些廉價的汽油,但現在已經不可能了。

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