首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何测试包括selfdestruct()在内的杀死函数?

如何测试包括selfdestruct()在内的杀死函数?
EN

Ethereum用户
提问于 2019-03-19 02:23:04
回答 1查看 758关注 0票数 1

那里。

我在下面编写杀死函数:

代码语言:javascript
复制
function kill() public onlyOwner returns (bool) {
  selfdestruct(msg.sender);     
  return true;
}

我的单元测试代码:

代码语言:javascript
复制
function testOwnerCanKillContract() public {
  XToken xtn = XToken(DeployedAddresses.XToken());
 bool isKilled = nmt.kill();
 Assert.equal(isKilled, true, "Owner should have to kill contract with selfdestruct.");
}

但是,在$块菌测试后出现还原错误时,测试会失败:

代码语言:javascript
复制
Error: Returned error: VM Exception while processing transaction: revert

那么,有谁知道如何解决这个问题,或者有什么想法吗?

此外,我的设想是:松露v5.0.5 (核心: 5.0.5) Solidity v0.5.0 (solc-js) Node v10.9.0

提前感谢!

EN

回答 1

Ethereum用户

回答已采纳

发布于 2019-03-19 02:45:23

我不太明白密码。看起来应该是xtn.kill();

在任何情况下,杀死清除状态和字节码。如果我没有弄错,return的步骤永远不会发生,因为合同被取消了。

如果是那样的话,任何对合同的调用都会失败。粗略地说,这是一种测试方法。

  1. 您可以像预期的那样测试它的恢复。一种“现在你看到了,不-拜,现在你不处理”。您的测试将坚持调用/事务必须恢复为成功。您将使用相同的模式来确认只有所有者才能使用onlyOwner函数,即测试不应该发生的事情实际上永远不会发生。
  2. 您可以通过比较发件人和合同之前和之后的余额来确认msg.sender收到了余额。这就是其中的一部分。
  3. 您可以确认地址上不再有字节码。看一下这里被接受的答案。因此,响应必须是0x如何检测地址是否为契约?

除非你真的有一个很好的理由,我会倾向于使用暂停模式来避免在区块链上造成令人讨厌的空洞。自毁是一种残忍的方式,会导致麻烦。

希望能帮上忙。

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

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

复制
相关文章

相似问题

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