月亮链 月亮链
Ctrl+D收藏月亮链

SELF:观点:务实地取消 SELFDESTRUCT_TRU

作者:

时间:1900/1/1 0:00:00

本文将介绍?SELFDESTRUCT?对以太坊生态弊大于利的一些理由,正是因为这些理由,我们应该以某种方式移除?SELFDESTRUCT?。鉴于有些合约已经使用了?SELFDESTRUCT?,我提出了一些只需要付出最小的代价就能消除?SELFDESTRUCT?危害的方法。

一段历史:?SELFDESTRUCT?已经没有必要了

SELFDESTRUCT?早在以太坊的极早期便已引入。实际上,它在2013年12月发布的以太坊协议“规范”预告中就已经出现了。那时候,几乎没人仔细考虑过状态规模管理的长远问题。但是,有个想法我大概还有些印象,为了防止没用的垃圾状态不受限制地膨胀,我们需要让任何创建出来的对象都可以被销毁。具体的思路是,当外部账户的余额为零时触发自毁,而合约在没用后可以调用代码里的一行自毁语句触发自毁。还有一个gas退款机制用于激励大家销毁没用的状态。

2014年1月,AndrewMiller指出了一个非常严重的问题:在2013年12月的规范设计中,EOA很容易被重放攻击。如果我有100个币,我通过一笔交易发给你10个币,你可以简单地在链上重放这笔交易十次,从而转走我的全部余额。这个问题很快就修复了,为此我们增加了nonce字段。然而,nonce字段的引入让删除EOA的愿望彻底破灭了:nonce是不能被重置为零的一旦该账户被再次使用,nonce又要从零开始,就会被重放攻击)。

观点:ETH正面临2274美元至2323美元强阻力带:IntoTheBlock发推称,IOMAP揭示了ETH现在正面临其更强的链上阻力水平,在2,274美元和2,323美元之间,约57000个地址购买了985万个ETH。[2021/4/25 20:55:17]

2015年,有人提出了一些方案试图绕过这个问题,使余额为零的账户可以被安全地删除。然而,当时很明显,几乎没有合约开发者真正使用自毁功能:因为要弄清楚什么时候自毁太难了,而奖励也太少了。

到2019-21年,事情已经变得很明显了,我们需要的是其他形式的状态管理,比如租金机制或者是长期未动的状态“到期作废””)。而如果我们采用这两个方案中的任何一个,只要它是有效的,那么合约是否有能力主动删除自己就一点儿也不重要了。

SELFDESTRUCT?是唯一一个破坏重要恒常性质的操作码

SELFDESTRUCT?不仅没什么用,还会产生危害。它破坏了一些重要的恒常性质,这些性质本来是很好的,但是仅仅因为这一个操作码,我们就失去了这些性质。

观点:如果利率上升 比特币将“快速而深刻地崩溃”:2月22日消息,David Frum,前总统乔治·W·布什的国情咨文写手预测,当利率上升,持有比特币机会成本激增,比特币将“快速而深刻地崩溃”。但是,Castle Island Ventures的Nic Carter反对称,如果利率上升,企业部门将资不抵债,那么最后美联储将不得不继续印钱。(u.today)[2021/2/22 17:37:54]

SELFDESTRUCT?是唯一一个能在单个区块中变更无限个状态对象的操作码

其他所有的操作码都只能操作账户中的单个值或者存储树上的单个key,所以它们能变更多少固定大小的对象是有限制的。但是,SELFDESTRUCT可以删除整棵存储树。

在目前的状态树结构中,这是可以容忍的。但是,考虑一种特殊的情况:当调用SELFDESTRUCT删除许多存储插槽后,下一个事务又在同一个地址上创建一个合约并访问同一些存储槽。为了处理这种情况,需要额外设计复杂的缓存机制。此外,SELFDESTRUCT还阻碍了我们变更状态存储格式。

观点:区块链有助于解决经济危机 但无法解决当前社会危机:自5月25日乔治·弗洛伊德在明尼苏达州警察手中死亡后,在一片混乱中,加密领域的一些人开始思考,区块链甚至比特币能否提供一些帮助。加密货币开发人员和康奈尔大学教授EminGünSirer表示,“我不是他们中的一员。把资产放在分散的媒介中,让它们可以在全球范围内交易,这是一件有趣的事情,我看到了它未来的很多用途。所以,从经济上讲区块链是绝对有用的。但在这种特殊的社会环境中,区块链没有任何作用。”(Decrypt)[2020/6/6]

以SELFDESTRUCT会阻碍的两类状态存储格式为例:

任意的“单层”方案

存储槽可以存储在一些地址“附近”,而不是存储在合约里的方案有用,比如在ERC20转账或Uniswap交易的场景下)

请注意,这不是在空想,从根本上变更状态存储格式的讨论已经开始了,如果状态存储的数据结构能够接近单一的的键/值存储结构,并且单个区块中可以变更的状态数量有一个较低的上限,那将大大扩展我们的选择空间。

观点:Libra 2.0可能最终会对央行CBDC构成巨大威胁:数字货币研究所(Digital Monetary Institute)主席Philip Middleton近日在播客中解释了导致CBDC诞生的各种事件,以及数字法定货币的含义。他在谈到推动建立CBDC的各种外部因素时指出:“两大外部事件。一个是去年夏天Libra宣布可能推出。因此,一种由全球主要科技公司发行的私营部门货币,对各国央行和金融稳定构成了直接威胁。第二件事是新冠病。” 在此背景下,英格兰银行是率先就CBDC的前景展开全球讨论的组织之一,迄今为止,该银行已发布了各种探讨CBDC用途的讨论文件。然而,这里的问题是,如果没有私营部门的帮助,中央政府不太可能自己找到答案。两家实体都必须找到一个中间立场,找到一种共同合作的方式。对此,Middleton表示:“我预计许多国家将会试验央行提供货币的那种体制,但是私营部门提供货币的传递方式。实际上,如果你愿意的话,私营部门的经营者也被鼓励在现有的轨道上运营。” 这里要注意的一点是,即使CBDC项目最终成为政府和一个私人实体之间的合作伙伴关系,私人实体也没有真正的发言权。此外,随着Facebook的Libra 2.0的加入,在75家领先科技公司的支持下,它将成为许多央行CBDC项目的重要竞争对手。(AMBCrypto)[2020/5/8]

SELFDESTRUCT?是唯一一个会导致合约代码变动的操作码

观点:看好减半后形势,牛市一定会来:4月23日下午,XBIT举办线上AMA《行业大数据分析减半行情》直播分享,邀请了OKEx矿池负责人Alina、BTC.com CEO庄重、币信矿业CEO刘飞以及芯动科技销售总监汪生林。

四名嘉宾对减半后币价的走势表示看好,预言牛市一定会来。丰水期即将到来,刘飞认为今年矿场供应量整体是超出需求量的。汪生林表示,芯动矿机的生产和部署不会受疫情阴霾影响。此外,Alina认为,目前是矿池诞生以来竞争最激烈的时期,虽已形成三足鼎立的稳定格局,但后起之秀的爆发力不容小觑。近年来,BTC全网算力长期保持增长趋势,庄重认为,算力不会影响币价,矿机技术进步才能推动算力的逐步增长。[2020/4/23]

如果在一个特定的地址上存储了一段代码,那么这段代码就会永远保留在链上。这样的恒常性质是有用的,因为在构建应用时不需要担心这些代码会出现变动。

账户抽象化非常依赖该恒常性质用以支持库调用。因为代码存在变动的可能,还会导致应用的安全性变得复杂很多:2017年Parity的多签钱包就曾因为其引用的库代码合约被偶然删除而彻底瘫痪。

而唯一破坏代码不变性的操作码就是?SELFDESTRUCT?。

SELFDESTRUCT?是唯一一个可以未经账户同意就能修改账户余额的操作码

SELFDESTRUCT?有一个内置的“转账”的功能,其并不走正常的转账流程,因而可以绕过避免合约地址接收Ether的守护功能,以及对转账事件的日志记录。这为智能合约钱包埋下了隐患,让一些潜在有用的技巧没法使用,加重了开发者和审计者的心智负担。

SELFDESTRUCT?当前的用例

如今?SELFDESTRUCT?有两类重要的应用:

GasToken:当gas价格低时通过创建合约用掉gas,当gas价格高时通过调用?SELFDESTRUCT?获得gas退款。

利用SELFDESTRUCT实现代码的动态变更:这可用于dApp或DAO及其他类似用例的“升级”。

可以被安全地销毁。GasToken的开发者已经发出了警告“虽然对以太坊网络的变更会导致GasToken无法使用、不可赎回、不能互换以及/或毫无价值,但是GasToken的开发者极可能会拥护该变更”。移除selfdestruct退款只会导致有些操作的费用变得更贵。

从长远来看,是没必要的,还有其他一些被广泛使用的范式可用于支持动态代码变更。最容易实现的是?DELEGATECALL?转发器,合约从一个存储插槽中获取一个代码地址,然后调用对应地址的代码;修改这个存储插槽就能更新代码。不过,从短期来看,有少数应用已经使用了。

提案1:完全移除?SELFDESTRUCT

从某个区块开始,完全停用?SELFDESTRUCT?。在这个及之后的区块里,如果EVM在执行时遇到?0xff?操作码,只要抛出异常直接退出即可,就像EVM执行时遇到不存在的操作码一样。

在完全停用前,为了警示用户避免使用?SELFDESTRUCT?,我们可以渐进式地增加其gas费用:如果?block.number10**6>=FLAG_BLOCK?,则?SELFDESTRUCT?的gas费用增加到?10**10//(FLAG_BLOCK-block.number)?。

提案2:阉割?SELFDESTRUCT

我们也可以保留这个操作码,但是改变其行为,一方面消除其对状态树的破坏,另一方面增加一个新特性,让合约可以标识为不可自毁,从而确保代码不可变。

暂时提议新增的行为包括:

当一个合约调用?SELFDESTRUCT?时,并不会删除合约账户,而是清空代码,并且将nonce值增加?2**40?。没有退款。

通过调用将合约中的ETH转移到目标地址。

可以在代码为空的地址上创建合约。

在合约里调用?SSTORE?和?SLOAD?操作地址?A?时,实际操作的是?A_offset=(AA.nonce//2**40)%2**160?的存储树。

注意,从EIP-2929的角度来看,?A_offset?需要“可达”。如果该账户不在可达账户集合中,则需要额外支付2600gas以加入可达集合。

另一种选择是调整将storagekey转换为treekey的哈希函数,用?sha3(storage_keycontract_nonce//2**40)?代替?sha3(storage_key)?。需要注意的是,无论如何都需要做一些类似的调整,以方便合约级别的无状态key空间扩展。

合约可以在代码中指定?0xA8?作为第一个字节,EVM会将其识别为无操作,但使用它来开启一个标志,在执行过程中完全禁用?SELFDESTRUCT?的功能。

这两种解决方案也可以结合起来:当前立即阉割,将来完全移除。或者,这个操作码也可以永远不被完全移除,但是最终只保留一个功能,即向目标地址发送合约当前的全部ETH余额,我们可以将这个操作码重命名为?CLEAR?。

原文链接:

https://hackmd.io/@HWeNw8hNRimMm2m2GH56Cw/selfdestruct

作者:??Vitalik

翻译&校对:戡乱&?阿剑

标签:SELFESTLFDTRUSelfkeyCelestialSelfdrop Tokentrustwallet钱包安全吗

酷币交易所热门资讯
TPS:关于WBF暂时关闭ALC充提的公告_okex

尊敬的用户:因钱包升级,WBF暂时关闭ALC的充提币,具体恢复充提时间,将另行公告通知,为您带来不便,尽请谅解.

1900/1/1 0:00:00
GDP:首发 | 强监管环境下对比特币的影响_fil币还有希望吗

本文作者为?NewBloc?策略分析师?Barry,5?年外汇黄金市场交易经历。耶伦在2月份曾表示:“在非常低的利率环境下,评估债务的传统指标,如债务与GDP的比率100%的警戒线就没有那么重要.

1900/1/1 0:00:00
区块链:FF量化研究院3月19号行情分析与复盘_JEFF

-热点时事今天没什么好讲的,外围情况不好的情况下,警惕继续杀跌!一、诺贝尔经济学奖获得者保罗·克鲁格曼反驳了这种说法,即由于拜登的1.9万亿美元疫情纾困法案.

1900/1/1 0:00:00
比特币:美国法院判处比特币子入狱三年_BANKERS币

大规模的Twitter骇客背后的策划者,以推广比特币赠品局为由,对此表示认罪,并被判处三年徒刑。在黑客攻击期间,许多知名公司,政客和名人看到了他们的帐户,以推广加密货币局.

1900/1/1 0:00:00
LAVA:金色百家谈 | Newland上线LAVAswap 打造Heco生态效应新范式_ECO

火币矿池HPTFinance系列首款产品Newland上线LAVAswap,为Heco生态带来哪些创新?为何说Newland与LAVAswap的“牵手”.

1900/1/1 0:00:00
比特币:18天, 错过4倍盈利机会!_BTC

一、观点前天,文中交代了比特币两次放量探底的分析之法,从4小时线来看,目前刚好完成了一个短期的探底结束动作,下一步应看什么呢?短期探底回升之时.

1900/1/1 0:00:00