EIP-7775: BURN 操作码
一个用于在给定地址燃烧原生以太币的操作码
Authors | Dev Bear (@itsdevbear) |
---|---|
Created | 2024-09-30 |
Discussion Link | https://ethereum-magicians.org/t/eip-7775-burn-opcode/21287 |
摘要
本提案引入了一个 BURN
操作码到 EVM。当调用时,该操作码将在当前 evm 上下文的地址处燃烧原生以太币。
动机
本提案的动机是提供一种标准化且高效的方式,在 EVM 中直接燃烧原生以太币。历史上,诸如 BeaconDepositContract 这样的合约通过使其无法从给定地址恢复来“燃烧”以太币。这种方法可能会导致混淆和潜在的误用。通过引入专用的 BURN
操作码,我们可以确保一种清晰且一致的燃烧原生以太币的方法。当以太坊 L2 将以太币转回 L1 时,这可能会变得有用,其他 EVM L1 链也可以利用它来实现其密码经济学。
规范
本文档中使用的关键词“必须 (MUST)”,“禁止 (MUST NOT)”,“需要 (REQUIRED)”,“应该 (SHALL)”,“不应该 (SHALL NOT)”,“推荐 (SHOULD)”,“不推荐 (SHOULD NOT)”,“可以 (MAY)”和“可选 (OPTIONAL)”应按照 RFC 2119 和 RFC 8174 中的描述进行解释。
行为
引入 BURN
操作码 (0xFC)
,其行为如下:
- 从堆栈顶部弹出 1 个 32 字节的字,将这些字节视为要燃烧的原生以太币的
uint256
数量。 - 从 EVM 执行上下文中检索当前地址。
- 检查当前地址的余额。
- 如果要燃烧的数量大于当前地址的余额,则该操作码
必须 (MUST)
回滚。 - 如果要燃烧的数量为 0,则执行
不得 (MUST NOT)
回滚。 - 从当前地址的原生以太币余额中减去该数量。
当 BURN
在 DELEGATECALL 或 CALLCODE 的上下文中使用时,要操作其余额的合约是发出 DELEGATECALL 或 CALLCODE 指令的合约。
当 BURN
在 STATICCALL 的上下文中使用时,调用必须 (MUST)
回滚。
Gas 消耗
BURN
操作码的基本 gas 消耗为 100 gas。动态 gas 消耗确定如下:
- 如果要燃烧的值为 0,则动态 gas 消耗为 0。
- 如果帐户不存在,或者帐户的余额为 0,则动态 gas 消耗为 0。
- 否则,动态 gas 消耗为 2800。
BURN
操作码的总 gas 消耗是基本 gas 消耗和动态 gas 消耗的总和。
伪代码
BURN
操作码的伪代码示例:
def op_burn(pc, interpreter, scope):
# 消耗基本 gas 费用
interpreter.consume_gas(100)
# 从堆栈中弹出要燃烧的值
value_to_burn = scope.stack.pop()
# 如果要燃烧的值为 0,则不回滚
if value_to_burn == 0:
return None
# 从 EVM 执行上下文中检索当前地址
current_address = scope.contract.address()
# 检查当前地址的余额
balance = interpreter.evm.state_db.get_balance(current_address)
# 如果要燃烧的值大于余额,则回滚
if value_to_burn > balance:
return "ErrInsufficientBalance"
# 如果帐户余额为 0,则返回。
if balance == 0:
return None
# 从当前地址的余额中减去该值
interpreter.evm.state_db.sub_balance(current_address, value_to_burn)
# 此时已知该帐户存在,因此我们消耗“warm”gas。
interpreter.consume_gas(2800)
return None
理由
BURN
操作码的引入有助于清理以太坊中一些奇怪的语义。历史上,燃烧原生以太币涉及将它们发送到无法恢复的地址,例如零地址或没有提款功能的合约。这种方法不仅效率低下,而且还会使索引器和其他跟踪 Token 移动的工具感到困惑。通过提供专用的 BURN
操作码,我们消除了这种歧义,并确保燃烧 Token 的行为是明确和标准化的。
潜在的优点:
- 提供了一种清晰且标准化的方法,用于在智能合约中燃烧原生以太币。
- 允许在智能合约中更好地进行原生 Token 的会计核算。
- 降低了被标记为“已烧毁”的原生 Token 被无意中恢复而导致的智能合约漏洞利用的可能性。
潜在的缺点:
- 无法帮助移除存在于现有合约中无法恢复的以太币。
- 客户端中的新代码
- 需要向黄皮书中添加新概念。
向后兼容性
此 EIP 引入了一个新的操作码,因此必须通过计划的硬分叉激活。
测试用例
参考实现
安全考虑
- 使用
DELEGATECALL
时,可能会导致滥用。
需要讨论。
版权
在 CC0 下放弃版权及相关权利。
Citation
Please cite this document as:
Dev Bear (@itsdevbear), "EIP-7775: BURN 操作码 [DRAFT]," Ethereum Improvement Proposals, no. 7775, September 2024. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-7775.