区块见闻 区块见闻
Ctrl+D收藏区块见闻
首页 > DYDX > 正文

TRUC:Vitalik:为什么说SELFDESTRUCT对以太坊的生态弊大于利_ITA

作者:

时间:

原文链接:

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

作者:Vitalik

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

原标题:《Vitalik:务实地取消SELFDESTRUCT》

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

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

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

数据:Vitalik将500枚MKR兑换为350枚ETH:金色财经报道,据The Data Nerd监测,Vitalik Buterin于2小时前向CoWSwap转入了500枚MKR并出售,兑换为350枚ETH。不久之后,他将收到的所有ETH转入0x3f6开头地址。这是他时隔2年后第一次出售MKR。[2023/9/3 13:14:13]

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

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

辉瑞支持的VitaDAO投票决定创建营利性公司以资助长寿研究:金色财经报道,辉瑞支持的 VitaDAO 成员周三发布推文称,为了弥补 VitaDAO 的资金缺口,目前正在讨论建立一家美国营利性公司的提议,这将弥合研究和商业化之间的差距。该公司将作为 VitaDAO 的子公司或附属公司运营。如果获得批准,该提案将在 2023 年 4 月 3 日至 6 月 12 日之间进入为期 10 周的执行阶段。据悉,这家名为 VitaTech 的公司将利用公共资金来许可美国大学开发的长寿技术,并支持它们的持续发展。[2023/4/6 13:46:54]

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

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

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

Gravity DEX开发团队成立新项目Crescent:3月11日消息,开发流动性模块Gravity DEX的B-Harvest团队分拆成立了一个名为Crescent的新项目,正在寻求完全重构和扩展Gravity DEX。Crescent由Ignite Ventures资助,并与Ignite团队合作支持Crescent项目。

Crescent已经公布了治理代币CRE分配模型,总量2亿枚,其中将向ATOM委托者(delegator)空投1亿枚,另外1亿枚作为战略储备。空投方面,5000万枚CRE可在Crescent网络启动后推出Crescent DEX(DEXdrop)时索取,具体空投数量会根据二次空投系统确定,即按UTC时间2022年1月1日00:00快照时委托数量的平方根来决定,如果参与一些治理提案,能获得通过固定乘数获得更多奖励;剩余5000万枚将在一定时期内分配给使用Crescent Boost的ATOM委托人。[2022/3/11 13:50:06]

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

Vitalik Buterin:UNI 应成为预言机代币:以太坊创始人 Vitalik Buterin 在 Uniswap 治理论坛发起提案讨论,建议 Uniswap 能够为 ETH/USD 提供预言价格数据,以及提议 UNI 成为预言机代币,而不是像其它预言机一样使用 ETH/USDC 喂价。

Vitalik Buterin 解释称,算法稳定币需要针对链下法定货币提供资产喂价,而非链上美元稳定币。预言机需要有一个代币来预防女巫攻击(Sybil Attack),这种攻击的成本是代币总市值的一半减去不参与投票的代币价值,而以太坊上市值最高的两个项目代币是 LINK 和 UNI,但 Chainlink 是一个具有许多功能的复杂系统,需要有一个简单的替代方案来对 Chainlink 进行补充,以优化激励措施和最大程度地降低成本。[2021/5/12 21:53:03]

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

GTX(GravitationX)即将上线TokenBetter:据TokenBetter官方公告,GTX(GravitationX)将于2020年5月3日15:00上线TokenBetter。

GTX(GravitationX)的目标是通过结合 CryptoNote 协议和智能合约等一些经过验证的最佳技术,创建一种独特的先进区块链技术,增强可靠性,隐私性,安全性,可用性和可移植性,从而实现创建私人智能合约。GTX(GravitationX)发行总量限定1亿,永不增发。GTX拥有首个POD毁灭证明机制,百分之九十六的GTX将被摧毁,最后只剩下 4,000,000枚GTX。[2020/5/2]

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

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

任意的“单层”方案

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

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

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

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

账户抽象化非常依赖该恒常性质用以支持库调用。因为代码存在变动的可能,还会导致应用的安全性变得复杂很多: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.number+10**6>=FLAG_BLOCK?,则?SELFDESTRUCT?的gas费用增加到?10**10//(FLAG_BLOCK-block.number)?。

提案2:阉割?SELFDESTRUCT

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

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

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

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

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

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

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

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

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

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

标签:TRUCDESSELITATRUC价格TradeStarsUseless TokenVita Inu

DYDX热门资讯
比特币:你会选择购买1个比特币还是32个以太坊?_GHT

很多数字货币初学者最常见的问题之一是哪个是更好的投资组合?相同的金额,是拥有1个完整的比特币更好,还是拥有32个以太坊更好? 以太坊 以太坊有成为世界计算机的潜力,并且有极高的潜力.

cardano:深度分析:是时候关注NFT引发的新侵权问题了_Bitcoin Card

本文来自于decrypt,原文作者:JeffJohnRoberts译者:Odaily星球日报Moni NFT为艺术家提供了一种在互联网上赚更多钱的手段,但也引起了新的版权侵权形式.

COIN:CKcoin :全球金融市场一体化的超级数字货币交易平台_bitcoin交易所局

CKcoin是什么平台?—CKCoin交易所是全球首家集合数字货币、证券及期货市场的,并且支持数字货币,直接投资全球金融市场的一体化超级数字货币交易所.

ELF:IDC预测:区块链市场将实现51.7%的五年复合增长率_区块链域名的用途

今年全国两会期间,区块链成为两会代表、委员关注的“热词”。近日,第十三届全国人民代表大会第四次会议审查了国务院提出的《中华人民共和国国民经济和社会发展第十四个五年规划和2035年远景目标纲要》.

区块链:金色早报 | 《时代周刊》接受比特币支付_比特币是什么合法吗是不是局

头条 ▌美国《时代周刊》计划接受加密货币作为订阅支付方式金色财经报道,美国《时代周刊》总裁KeithGrossman在推特上写道,该杂志将在未来30天内开始接受加密货币作为数字订阅的支付方式.

OIN:显卡空气发布价格炒翻倍 央视揭挖矿利润率超90%_BTC

加密货币牛市导致全球显卡市场缺货涨价频发,就连央视这样的权威媒体也坐不住了。在最近一期的央视财经节目中,央视针对显卡发布如空气,短短几月价格被炒翻倍等显卡行业乱象进行了报道,并指出罪魁祸首就是挖.