Revert-Opcode
在 revert() 之前通過“自毀”返還 Gas
在最終呼叫 revert() 的事務中,如果在 revert 之前我們有 SELFDESTRUCT 一些契約並因此收到了 gas 退款,那麼 gas 退款是否也會被退回?
一個有趣的問題!我在文件中找不到任何關於此的內容,但我也找不到任何關於
selfdestruct
’s gas 退款的資訊(直到我注意到這個How do do gas returns work?)。我對以下合約做了一些試驗:
pragma solidity ^0.7.0; contract A { function die() public { selfdestruct(msg.sender); } } contract B { A aRef; function init() public { aRef = new A(); } function killIt() public { uint i; for (i = 0; i < 10000; i++) { } aRef.die(); revert(); } }
所以我所做的是:
- 部署 B
- 執行初始化
- 執行 killIt
我在兩種情況下檢查了gas費用:
- 就像我在上面粘貼的那樣執行。撥打
killIt
費用 588914- 執行
aRef.die();
註釋掉的行。撥打killIt
費用 581421顯然,
selfdestruct
這裡沒有應用 ’s gas 退款,所以退款被浪費了。