首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一旦部署了智能契约,如何激活selfdestruct()?

一旦部署了智能契约,如何激活selfdestruct()?
EN

Ethereum用户
提问于 2022-03-24 09:54:28
回答 1查看 133关注 0票数 0

我是一个绝对的新手,有坚实的,所以道歉,如果这是一个新手的问题。我正在建设项目来学习稳固,我目前想要建立一个聪明的合同,我可以杀死如果我需要的话。

我找到了selfdestruct()函数,但我对它的工作方式感到有点困惑。一旦我的智能契约被部署,当我想要的时候,我如何激活selfdestruct()函数?

任何指导,包括进一步阅读/研究的链接。

提前谢谢。

EN

回答 1

Ethereum用户

发布于 2022-03-24 10:07:46

下面的约定显示了如何使用selfdestruct,在本例中,使用仅限于智能契约的所有者:

代码语言:javascript
复制
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract Destruct {

    address owner;

    modifier onlyOwner() {
        require(msg.sender == owner, "Not the owner");
        _;
    }

    constructor() {
        owner = msg.sender;
    }

    function callSelfDestruct() onlyOwner public {
        selfdestruct(payable(owner));
    }
}

我正在建设项目来学习稳固,我目前想要建立一个聪明的合同,我可以杀死如果我需要的话。

虽然保持一个干净的状态是一件好事(例如,selfdestruct -不会看到更多用于释放全局状态上某些空间的契约)--但您也应该意识到,这肯定会被潜在用户视为安全风险。

我找到了selfdestruct()函数,但我对它的工作方式有点困惑。

selfdestruct在块链空间中非常特殊,基本上当调用它时,它将把所有契约余额转发到其参数中指定的目标地址(在上面的示例中是owner)。此余额转发将绕过每次检查,不会触发任何receive()fallback()。因此,无论目标地址后面是哪种类型的账户,其余额都会通过自毁合同的余额来增加。

当tx被提交到状态(即它的执行完成之后),契约的代码将从全局状态中被删除,它不会被禁用,而是被删除。

当我想要的时候,我怎样才能激活自毁()函数?

您必须在您的合同代码中包括调用,如上面的示例所示。

按照这个示例,每当所有者想要selfdestruct契约时,它都必须调用callSelfDestruct函数。

另外,您应该注意到,正在进行中的移除/禁用selfdestruct行为的工作,今后不要依赖它。

我希望这能回答你的问题。

票数 0
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/124571

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档