首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >智能合约以太-如何在使用selfDestruct()后重新创建相同的合约

智能合约以太-如何在使用selfDestruct()后重新创建相同的合约
EN

Stack Overflow用户
提问于 2021-11-24 21:57:58
回答 1查看 45关注 0票数 1

是否可以在销毁(使用selftDestruct函数)的同时生成相同的契约?

我们假设第一个约定是拥有1Eth,然后将所有的eth提取到另一个erc20地址,在完全提取之后,第一个约定调用自销毁函数,然后重新部署相同的约定,并在循环中。

也许最简单的方法是使用条件函数?

EN

回答 1

Stack Overflow用户

发布于 2021-11-25 00:24:29

不可能“同时”,需要在单独的事务中做。

selfdestruct阻止对约定的后续操作,并将约定标记为删除。

但是,EVM直到事务处理结束时才删除其字节码。因此,在下一次tx之前,您将无法将新字节码部署到相同的地址。

代码语言:javascript
复制
pragma solidity ^0.8;

contract Destructable {
    function destruct() external {
        selfdestruct(payable(msg.sender));
    }
}

contract Deployer {
    function deployAndDestruct() external {
        Destructable destructable = new Destructable{salt: keccak256("hello")}();
        destructable.destruct();

        // The second deployment (within the same transation) causes a revert
        // because the bytecode on the desired address is still non-zero
        Destructable destructable2 = new Destructable{salt: keccak256("hello")}();
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70103433

复制
相关文章

相似问题

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