1. 背景
TIP-652提议弃用该SELFDESTRUCT操作码。此举旨在减少其在新部署合约中的使用,并暗示其功能在未来的 TVM 升级中可能会进一步受到限制。
作为与 EVM 兼容的公链,TRON 引入了TIP-6780,以与以太坊的EIP-6780保持一致,并保持与 EVM 的行为一致性。
2. 变化
以前,该SELFDESTRUCT操作码允许合约销毁自身,将其全部余额转移到指定地址,并随后删除合约帐户的所有关联数据(即代码、存储和帐户本身)。
2.1 核心变更:限制SELFDESTRUCT使用场景
账户数据(即代码、存储和账户本身)只有SELFDESTRUCT在合约创建交易中执行删除操作时才会被删除。
场景 1:SELFDESTRUCT在不同的事务中调用(默认情况)
- 账户实际上并没有被销毁。
- 当前合同的执行立即停止。
- 不会删除任何数据,包括存储密钥、代码或帐户本身。
- 但是,合约持有的所有资产(TRX、质押的 TRX、TRC-10 代币)都会转移到目标地址。
- 如果目标地址是合约本身,则资产不会被销毁。
场景 2:SELFDESTRUCT在同一事务中调用(创建后立即自毁)
在这种情况下,操作码的原有行为将被保留:
- 当前合同的执行立即停止。
- 所有账户数据均已删除。
- 所有资产均转移至目标地址。
- 如果目标地址是合约本身,则其余额设置为 0,资产将被销毁。
2.2 能源成本调整
操作码的固定能量成本从0SELFDESTRUCT调整到5,000。这提高了执行成本,以进一步阻止滥用。
3.影响
3.1 对开发者和智能合约的影响
硬分叉要求:此 TIP 是共识层变更,必须通过硬分叉来实现。
TRX销毁行为:以前,SELFDESTRUCT合约可以通过指定自身为目标地址来销毁其TRX。现在,此操作受到限制:
- 如果合约不是在当前交易中创建的,则其 TRX 不会被销毁,也不会发生转账。
- 只有在同一笔交易中创建并
SELFDESTRUCT调用合约,TRX 才能被销毁。
失效的设计模式:某些依赖SELFDESTRUCT于安全机制或代理升级的解决方案已不再安全或有效。例如:
CREATE2使用+SELFDESTRUCT来实现“可升级合约”的模式已被打破。SELFDESTRUCT依靠销毁账户来保护敏感数据的做法已经不再可行。
3.2 对TRON生态系统的影响
- 增强以太坊兼容性:此更改提高了与 EVM 的一致性,简化了跨链基础设施、开发者工具和去中心化应用程序 (DApp) 的迁移和集成。
- 改进合约安全性:此变更鼓励开发人员采用更强大、更可预测的合约设计模式,远离被认为不稳定或计划在未来弃用的操作码。
3. TRON链上数据分析
3.1 包含操作码的合约分析SELFDESTRUCT
如表所示,包含该操作码的合约数量SELFDESTRUCT极少,而持有资产的此类合约数量则更少。此外,这些合约均未执行过实际SELFDESTRUCT交易。该操作码通常用作将资产转出合约的机制,此功能在本提案实施后不会受到影响。
3.2 SELFDESTRUCT交易分析
- 对2025年(截至10月17日)数据的分析显示,涉及该平台的内部交易共计957,324笔
SELFDESTRUCT。其中绝大多数——957,316笔(99.999%)——遵循相同的模式:合约在同一笔交易中创建并销毁。此提案实施后,该特定用例不会受到影响。
其余8笔交易也呈现类似的模式:合约也在创建当天销毁,且这些地址在销毁后从未被重新激活或再次使用。 - 对所有交易的历史分析
SELFDESTRUCT证实,已自行销毁的地址之后从未被重新创建。
4. 结论
此提案限制了操作码的功能SELFDESTRUCT,以增强与以太坊的兼容性。强烈建议开发者避免SELFDESTRUCT在新智能合约中使用此操作码,而是采用更安全、更易于维护的合约生命周期管理模式。
SELFDESTRUCT 操作码的变更将包含在即将发布的版本中。发布后,必须通过网络治理投票激活才能生效。请关注TRONSCAN上的最新提案更新。