Alert Source Discuss
🚧 Stagnant Standards Track: Core

EIP-6190: 兼容 Verkle 的 SELFDESTRUCT

更改 SELFDESTRUCT 以仅引起有限数量的状态更改

Authors Gavin John (@Pandapip1)
Created 2022-12-20
Discussion Link https://ethereum-magicians.org/t/eip-6190-functional-selfdestruct/12232
Requires EIP-2929, EIP-6188, EIP-6189

摘要

更改 SELFDESTRUCT 以仅引起有限数量的状态更改。

动机

SELFDESTRUCT 指令具有固定的价格,但在存储/帐户更改方面是无限制的(它需要删除所有密钥)。 这已经是一段时间以来一直存在的问题。

此外,使用 Verkle trees,帐户的组织方式将有所不同。 帐户属性(包括存储)将具有单独的密钥。 将无法遍历并找到所有已使用的密钥。 这使得在 Verkle trees 中支持 SELFDESTRUCT 变得非常具有挑战性。 此 EIP 是朝着在 Verkle trees 中支持 SELFDESTRUCT 迈出的一步。

规范

本文档中使用的关键词“MUST”,“MUST NOT”,“REQUIRED”,“SHALL”,“SHALL NOT”,“SHOULD”,“SHOULD NOT”,“RECOMMENDED”,“MAY”和“OPTIONAL”应按照 RFC 2119 和 RFC 8174 中的描述进行解释。

先决条件

必须使用 EIP-6188EIP-6189 才能使此 EIP 正常工作。

SELFDESTRUCT 行为

不是在事务结束时销毁合约,而是在调用它的事务结束时发生以下情况:

  1. 合约的代码设置为 0x1,其 nonce 设置为 2^64-1
  2. 合约的第 0 个存储槽设置为如果合约使用 CREATE 操作码 (keccak256(contractAddress, nonce)) 将发出的地址。 请注意,nonce 始终为 2^64-1
  3. 如果合约在被一个或多个别名合约转发的调用之后被自毁,则别名合约的第 0 个存储槽设置为在步骤 2 中计算出的地址。
  4. 合约的余额将全部转移到堆栈顶部的地址。
  5. 堆栈顶部弹出。

SELFDESTRUCT 的 Gas 成本

SELFDESTRUCT 的基本 gas 成本设置为 5000。 对于每个转发到正在自毁的合约的别名合约,SELFDESTRUCT 的 gas 成本将增加 5000。 最后,应用 EIP-2929 的 gas 成本增加。

理由

此 EIP 旨在成为在 Verkle trees 中支持 SELFDESTRUCT 的一步,同时尽可能减少更改量。

5000 的基本 gas 成本和额外的别名合约代表了设置帐户 nonce 和第一个存储槽的成本。 出于所述 EIP 的理由中提到的原因,保留了 EIP-2929 的 gas 成本增加。

选择 2^64-1 的 nonce 是因为它是由 EIP-6188 保护的 nonce。 选择 0x1 的帐户代码是因为它是 EIP-6189 中指定的代码。

地址与 CREATE 创建的地址相同,旨在通过不引入一种新的机制,通过该机制可以在特定地址创建帐户来减少可能的攻击媒介。

向后兼容性

此 EIP 需要协议升级,因为它修改了共识规则。

安全考虑

需要讨论。

版权

CC0 下放弃版权及相关权利。

Citation

Please cite this document as:

Gavin John (@Pandapip1), "EIP-6190: 兼容 Verkle 的 SELFDESTRUCT [DRAFT]," Ethereum Improvement Proposals, no. 6190, December 2022. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-6190.