selfdestruct
selfdestruct(自毁)命令可以用来删除智能合约,并将该合约剩余 ETH 转到指定地址。selfdestruct 是为了应对合约出错的极端情况而设计的。它最早被命名为 suicide(自杀),但是这个词太敏感。为了保护抑郁的程序员,改名为 selfdestruct。
如何使用 selfdestruct
selfdestruct 使用起来非常简单:
其中_addr 是接收合约中剩余 ETH 的地址。
例子
在 DeleteContract 合约中,我们写了一个 public 状态变量 value,两个函数:getBalance() 用于获取合约 ETH 余额,deleteContract() 用于自毁合约,并把 ETH 转入给发起人。
部署好合约后,我们向 DeleteContract 合约转入 1 ETH。这时,getBalance() 会返回 1 ETH,value 变量是 10。
当我们调用 deleteContract() 函数,合约将自毁,所有变量都清空,此时 value 变为默认值 0,getBalance() 也返回空值。
总结
selfdestruct 是智能合约的紧急按钮,销毁合约并将剩余 ETH 转移到指定账户。当著名的 The DAO 攻击发生时,以太坊的创始人们一定后悔过没有在合约里加入 selfdestruct 来停止黑客的攻击吧。