selfdestruct是solidity内置函数,用来删除合约并将该合约剩余的ETH发送到指定地址。
注意事项
对外提供合约销毁接口时,最好设置为只有合约所有者可以调用,可以使用函数修饰符onlyOwner进行函数声明。
当合约被销毁后与智能合约的交互也能成功,并且返回0。
当合约中有selfdestruct功能时常常会带来安全问题和信任问题,合约中的Selfdestruct功能会为攻击者打开攻击向量(例如使用selfdestruct向一个合约频繁转入token进行攻击,这将大大节省了GAS的费用,虽然很少人这么做),此外,此功能还会降低用户对合约的信心。
用法:
selfdestruct(_addr);
示例代码:
//SPDX-License-Identifier: MIT
pragma solidity 0.8.19;
contract Selfdestruct{
constructor() payable {}
function deleteSelf(address _addr) external {
selfdestruct(payable(_addr));
}
function getBalance() external view returns(uint) {
return address(this).balance;
}
}
部署合约的时候向合约发送1ETH,Remix如下:
执行销毁后: