EIP-6780
EIP-6780 is an Ethereum Improvement Proposal restricting the functionality of the SELFDESTRUT opcode, which previously allowed contracts to self-destruct and wipe their code and storage. Now, it only functions for contracts created within the same transaction. This ensures a cleaner, more manageable state, enhancing long-term stability and security while still allowing for legitimate use of the function. [2][3]
Overview
EIP-6780 - "SELFDESTRUCT only in same transaction" modifies the functionality of the SELFDESTRUCT opcode in preparation for the Verkle Tree architecture to be used in future Ethereum applications. The SELFDESTRUCT opcode is a powerful tool that lets smart contracts delete themselves, sending the remaining funds to a designated address. It’s akin to streamlining Ethereum’s internal housekeeping practices for a smoother-running network.[1]
Currently, Ethereum applications use the Merkle Tree architecture, and the SELFDESTRUCT opcode can be used to make significant changes to account states, such as deleting code and storage. However, when the Verkle Tree architecture is used in future Ethereum applications, it will not be easy to modify or delete accounts because Verkle Tree architecture stores each account in a different account key that is not connected to the root account.
Therefore, EIP-6780 proposes a modification to the functionality of the SELFDESTRUCT opcode. According to EIP-6780, the modified SELFDESTRUCT opcode will no longer have the ability to change or delete accounts when used, and will only be used to transfer ETH to the caller, except in the case where SELFDESTRUCT is called in the same transaction created by a smart contract.
Contracts exist on mainnet that currently use SELFDESTRUCT to limit who can initiate a transaction with a contract. By destroying the contract in the same transaction so nobody has a chance to call it.[5]
While EIP-6780 doesn't directly simplify the specification, it significantly improves implementations by:
- Limiting storage edits per block: This facilitates the implementation of Verkle trees and eases client development.
- Guaranteeing code persistence: This strengthens transaction verification in account abstraction wallets, preventing DoS vulnerabilities.
- These new invariants pave the way for further simplification, potentially leading to the complete removal of SELFDESTRUCT in the future.[3]
Authors
- Guillaume Ballet
- Vitalik Buterin
- Dankrad Feist