forked from ethereum/EIPs
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
EIP-4758: Deactivate selfdestruct (ethereum#4758)
* Deactivate selfdestruct initial commit * Add discussions-to * Remove erroneous brackets in category * Update EIPS/eip-4758.md Co-authored-by: Bolton Bailey <bolton.bailey@gmail.com> * Move discussion to Ethereum Magicians * Fix header, add security considerations and other fixes * Fix typo * Remove external link Co-authored-by: Bolton Bailey <bolton.bailey@gmail.com>
- Loading branch information
1 parent
b38fac6
commit 24d5d1f
Showing
1 changed file
with
49 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
--- | ||
eip: 4758 | ||
title: Deactivate SELFDESTRUCT | ||
description: Deactivate SELFDESTRUCT by changing it to SENDALL, which does recover all funds to the caller but does not delete any code or storage. | ||
author: Guillaume Ballet (@gballet), Vitalik Buterin (@vbuterin), Dankrad Feist (@dankrad) | ||
discussions-to: https://ethereum-magicians.org/t/eip-4758-deactivate-selfdestruct/8710 | ||
status: Draft | ||
type: Standards Track | ||
category: Core | ||
created: 2022-02-03 | ||
--- | ||
|
||
## Abstract | ||
|
||
This EIP renames the `SELFDESTRUCT` opcode to `SENDALL`, and replaces its functionality. The new functionality will be only to send all Ether in the account to the caller. | ||
|
||
## Motivation | ||
|
||
The `SELFDESTRUCT` opcode requires large changes to the state of an account, in particular removing all code and storage. This will not be possible in the future with Verkle trees: Each account will be stored in many different account keys, which will not be obviously connected to the root account. | ||
|
||
This EIP implements this change. Applications that only use `SELFDESTRUCT` to retrieve funds will still work. | ||
|
||
## Specification | ||
|
||
* The `SELFDESTRUCT` opcode is renamed to `SENDALL`, and now only immediately moves all ETH in the account to the target; it no longer destroys code or storage or alters the nonce | ||
* All refunds related to `SELFDESTRUCT` are removed | ||
|
||
## Rationale | ||
|
||
Getting rid of the `SELFDESTRUCT` opcode has been considered in the past, and there are currently no strong reasons to use it. Disabling it will be a requirement for statelessness. | ||
|
||
## Backward Compatibility | ||
|
||
This EIP requires a hard fork, since it modifies consensus rules. | ||
|
||
Few applications are affected by this change. The only use that breaks is where a contract is re-created at the same address using `CREATE2` (after a `SELFDESTRUCT`). | ||
|
||
## Security Considerations | ||
|
||
The following applications of `SELFDESTRUCT` will be broken and applications that use it in this way are not safe anymore: | ||
1. Any use where `SELFDESTRUCT` is used to burn non-ETH token balances, such as ERC20, inside a contract. We do not know of any such use (since it can easily be done by sending to a burn address this seems an unlikely way to use `SELFDESTRUCT`) | ||
2. Where `CREATE2` is used to redeploy a contract in the same place. There are two ways in which this can fail: | ||
- The destruction prevents the contract from being used outside of a certain context. For example, the contract allows anyone to withdraw funds, but `SELFDESTRUCT` is used at the end of an operation to prevent others from doing this. This type of operation can easily be modified to not depend on `SELFDESTRUCT`. | ||
- The `SELFDESTRUCT` operation is used in order to make a contract upgradable. This is not supported anymore and delegates should be used. | ||
|
||
|
||
## Copyright | ||
|
||
Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). |