SELFDESTRUCT 不再烧币:EIP-8246 想把旧指令的最后一丝余烬熄灭 图 1
SELFDESTRUCT 不再烧币:EIP-8246 想把旧指令的最后一丝余烬熄灭 · 图 1

SELFDESTRUCT 是以太坊最早的特权指令:合约执行它,余额转给指定受益人,代码与存储被清空。围绕它去留的争论持续多年,2024 年 3 月坎昆升级激活的 EIP-6780 给出了阶段性方案:除”创建它的同一笔交易里自毁”外,SELFDESTRUCT 不再抹除代码与存储,退化成一次只转钱不清仓的操作。但那次减法留了一个尾巴——少数情形下余额仍会被直接销毁。EIP-8246 在 2026 年 5 月提议把这条尾巴也剪掉:清理流程照旧,钱不再蒸发。提案目前处于 Last Call(最终征求意见)状态,尚未随任何升级激活。

从销毁合约到销毁余额

自毁最初的设计动机是让有漏洞的合约体面退场:资金送出门、代码与存储从状态里抹掉。“烧币”不是原设,而是减法做了一半后的残差:EIP-6780 之后,只有一类交易仍会让 ETH 消失——合约在同一次交易里被创建、又执行了 SELFDESTRUCT,且要么以自身为受益人,要么在此期间(可能经多次 CALL 或嵌套自毁)陆续收到额外 ETH。这些 ETH 账面无处安放:收款方也可能在同笔交易里被清理,协议于是让它们蒸发换一致性。

一条几乎不存在的路径有多贵

提案的动机清单朴素得出奇:这条路径在真实世界几乎没人走——作者团队给出一项全网重放统计,从创世重放到约第 2500 万区块,坎昆规则生效之后经由这条路径发生的销毁只找到两笔。但”几乎不发生”和”规则不存在”在工程上是两回事:每条规范文本、每个客户端实现、每一套共识测试,都必须为它保留特殊分支——实现里要特判、测试里要覆盖、模拟器里要防它对账穿帮。EIP-8246 的改动面很小:被标记自毁的账户仍在交易收尾时清空代码、存储与 nonce(合约确实消失,地址仍被占用),只是余额完整保留、正常结算。

减法的尽头

回头看这条指令九年:原初形态(抹掉一切)、2016 年 Spurious Dragon 时代理顺创建与自毁的交互(EIP-161 的清理逻辑)、2024 年 EIP-6780 的”只转钱不清仓”,再到 8246 想完成的”连钱也别烧”。每一步都在缩小它的破坏半径,而语义保留的部分越来越接近”一个把账户标记为空的按钮”。对普通用户,变化是零:谁也不会靠”自毁时销毁一点余额”安排任何事——这正是提案敢动的底气,也是它排进低烈度维护类清单的原因。

一条直觉线

回看 SELFDESTRUCT 这九年,减法其实沿着一条可复用的直觉推进:把一条指令从「破坏半径大」削到「破坏半径可忽略」,每步都只动最危险的那一格——先让状态不被抹(2024 年 EIP-6780 把跨交易的自毁变成只转钱),再让钱不被烧(本提案把创建即自毁的销毁额退回受益人)。为什么这样切分而不是直接废指令?因为每刀都要过向后兼容的窄门:直接删除会砸到还在用它的旧合约与工具链,而逐步去毒让每一步都有「行为变化几乎为零」的底气——重放两千万余块只找到两笔销毁,就是这种底气的量化版本。对读新闻的人,这条直觉线的用处是:判断一条底层指令的生死,不必盯它名字里的 Dramatic 程度,盯它的破坏半径缩到多小,以及还剩谁在依赖那半格行为。

快速问答

问:这会影响 ETH 总供应量吗? 答:该路径的销毁量按重放统计可忽略;它不替代 EIP-1559 的基础费燃烧,也不支撑任何通缩叙事。

问:自毁的合约还能复活吗? 答:不能,也不因本提案改变:代码与存储照旧清空,本提案只保留资金。

问:Last Call 是什么意思? 答:提案进入最终征求意见期的标志,与”已激活”相距尚远,落地以官方升级公告为准。

风险提示:本文介绍协议历史与草案,不构成任何投资建议;自毁语义与升级条款请以当期规范为准。