首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“自毁”用例?

“自毁”用例?
EN

Ethereum用户
提问于 2019-02-14 10:18:45
回答 4查看 3.6K关注 0票数 5

根据solidity.readthedocs.io (链接),这里是Self-destruct的定义:

定义:从块链中删除代码的唯一方法是在该地址的契约执行Selfdestruct操作时。存储在该地址的其余以太被发送到指定的目标,然后存储和代码从状态中移除。

虽然这一定义似乎允许删除特征(这是GDPR (一般资料保护规例)与区块链不兼容的主要挑战之一)。(链接到GDPR中的擦除权);然而,在Self-destruct定义之后,有以下说明和警告:

注意:即使合同的代码不包含对Selfdestruct的调用,它仍然可以使用delegatecallcallcode执行该操作。警告:即使合同被Selfdestruct删除,它仍然是块链历史的一部分,并且可能被大多数Ethereum节点保留。因此,使用Selfdestruct并不等于从硬盘中删除数据。

Self-destruct到底给了我们什么,它如何帮助我们?

EN

回答 4

Ethereum用户

回答已采纳

发布于 2019-02-14 10:41:23

首先是一个小小的修正。一切都是不可逆的,你无法逆转自毁。引用仅仅意味着数据仍然存在于区块链历史中,即使契约不再存在于最新的块中。因此,任何数据都不会从区块链(历史)中删除。

我至少能想到几个自毁用例:

1)当合同不再需要时,你可以自毁。通过这种方式,您可以确保没有人能够发送事务到它,也没有人可以与它交互。即使契约本身被代码(例如,通过更新某些状态变量)变得毫无用处,例如,它可能会留下安全漏洞。

2)迫使合同的用户开始使用新合同,因为旧合同根本不存在。例如,当您从旧的令牌契约切换到新的契约时。

( 3)合同的“最后”后门。如果合同不像你想的那样起作用,并且你已经包含了自毁功能,你可以删除它并创建一个更好的。

票数 4
EN

Ethereum用户

发布于 2021-01-06 17:42:56

selfdestruct的使用可能是意外的,有时会很方便,也可能是安全漏洞(如果您不解释的话):您可以使用它将以太发送到没有后备/接收功能的合同。

在测试过程中,我发现了一个有用的用例;您可以使用一个包含大量令牌的流动性池,并模拟它的地址(允许使用信托或硬帽子之类的框架)。但是,在使用池地址发送令牌之前,需要使用ETH为其提供资金,由于缺少回退/接收,通常会恢复ETH。您可以通过部署为此目的设计的自定义契约来做到这一点--它将自毁并将其ETH发送到收件人地址。

票数 2
EN

Ethereum用户

发布于 2019-02-15 00:27:12

自毁(它调用SUICIDE操作码)是一种调用契约以停止工作的方法。它不会删除代码,它只会使代码不可用(有点像注释掉的代码)。自杀电话之前的所有电话仍然有效,之后的所有电话都不是,除非它们只是以太交易(我指的是交易的高度,而不是任何形式的现在)。

坚固性中的自毁只有一个address类型的参数。

如果合同具有50以太和自毁功能,则调用如下所示:

代码语言:javascript
复制
selfdestruct(0xDeaDbeefdEAdbeefdEadbEEFdeadbeEFdEaDbeeF)

合同现在为空,所有50个ETH都被发送到0xDeaDbeefdEAdbeefdEadbEEFdelbebeEFdEaDbeeF减去"expended“gas。从技术上讲,这一支出中有一部分是负数的,因此发送的总煤气(21000)减少了19000 (操作费用为5000,但它退还了24000,节省下来的天然气为19000 ),因此,只需净消耗2000年天然气就可销毁合同。地址可以是任何东西,所以确保如果它是一个合同,它是可支付的(备用函数,应付,应该足够)。

这对于已经失效的合同非常有用,例如ICO拥有自己的主网,并且已经冻结。

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

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

复制
相关文章

相似问题

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