# Solidity极简入门: 26. 删除合约 **Published by:** [0xAA](https://paragraph.com/@wtfacademy/) **Published on:** 2022-05-16 **URL:** https://paragraph.com/@wtfacademy/solidity-26 ## Content 我最近在重新学solidity,巩固一下细节,也写一个“Solidity极简入门”,供小白们使用(编程大佬可以另找教程),每周更新1-3讲。 欢迎关注我的推特:@0xAA_Science WTF技术社群discord,内有加微信群方法:链接 所有代码和教程开源在github(1024个star发课程认证,2048个star发社群NFT): github.com/AmazingAng/WTFSolidityselfdestructselfdestruct(自毁)命令可以用来删除智能合约,并将该合约剩余ETH转到指定地址。selfdestruct是为了应对合约出错的极端情况而设计的。它最早被命名为suicide(自杀),但是这个词太敏感。为了保护抑郁的程序员,改名为selfdestruct。如何使用selfdestructselfdestruct使用起来非常简单:selfdestruct(_addr); 其中_addr是接收合约中剩余ETH的地址。例子contract DeleteContract { uint public value = 10; constructor() payable {} receive() external payable {} function deleteContract() external { // 调用selfdestruct销毁合约,并把剩余的ETH转给msg.sender selfdestruct(payable(msg.sender)); } function getBalance() external view returns(uint balance){ balance = address(this).balance; } } 在DeleteContract合约中,我们写了一个public状态变量value,两个函数:getBalance()用于获取合约ETH余额,deleteContract()用于自毁合约,并把ETH转入给发起人。 部署好合约后,我们向DeleteContract合约转入1 ETH。这时,getBalance()会返回1 ETH,value变量是10。 当我们调用deleteContract()函数,合约将自毁,所有变量都清空,此时value变为默认值0,getBalance()也返回空值。总结selfdestruct是智能合约的紧急按钮,销毁合约并将剩余ETH转移到指定账户。当著名的The DAO攻击发生时,以太坊的创始人们一定后悔过没有在合约里加入selfdestruct来停止黑客的攻击吧。 ## Publication Information - [0xAA](https://paragraph.com/@wtfacademy/): Publication homepage - [All Posts](https://paragraph.com/@wtfacademy/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@wtfacademy): Subscribe to updates - [Twitter](https://twitter.com/0xAA_Science): Follow on Twitter