Solidity
如何“看到”SELFDESTRUCT的退款?
我正在嘗試使用安全帽來模擬並查看汽油退款。這是我的 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-3529
selfdestruct
取消了Gas 退款。沒有看到退款是預期的行為。selfdestruct
不幸的是,他們取消了 gas 退款,因為它在區塊鏈中填充了佔用空間的 gastoken 和交易,只是為了拿回一些便宜的 gas,而乙太坊開發人員並不喜歡這種做法。
在我看來,它應該被保留,因為它幫助人們使用了一些廉價的汽油,但現在已經不可能了。