67 lines
3.4 KiB
Markdown
67 lines
3.4 KiB
Markdown
|
---
|
||
|
eip: 6190
|
||
|
title: Verkle-compatible SELFDESTRUCT
|
||
|
description: Changes SELFDESTRUCT to only cause a finite number of state changes
|
||
|
author: Gavin John (@Pandapip1)
|
||
|
discussions-to: https://ethereum-magicians.org/t/eip-6190-functional-selfdestruct/12232
|
||
|
status: Review
|
||
|
type: Standards Track
|
||
|
category: Core
|
||
|
created: 2022-12-20
|
||
|
requires: 2929, 6188, 6189
|
||
|
---
|
||
|
|
||
|
## Abstract
|
||
|
|
||
|
Changes `SELFDESTRUCT` to only cause a finite number of state changes.
|
||
|
|
||
|
## Motivation
|
||
|
|
||
|
The `SELFDESTRUCT` instruction has a fixed price, but is unbounded in storage/account changes (it needs to delete all keys). This has been an outstanding concern for some time.
|
||
|
|
||
|
Furthermore, with *Verkle trees* accounts will be organised differently. Account properties, including storage, would have individual keys. It would not be possible to traverse and find all used keys. This makes `SELFDESTRUCT` very challenging to support in Verkle trees. This EIP is a step towards supporting `SELFDESTRUCT` in Verkle trees.
|
||
|
|
||
|
## Specification
|
||
|
|
||
|
The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be interpreted as described in RFC 2119 and RFC 8174.
|
||
|
|
||
|
### Prerequisites
|
||
|
|
||
|
[EIP-6188](./eip-6188.md) and [EIP-6189](./eip-6189.md) must be used for this EIP to function correctly.
|
||
|
|
||
|
### `SELFDESTRUCT` Behaviour
|
||
|
|
||
|
Instead of destroying the contract at the end of the transaction, instead, the following will occur at the end of the transaction in which it is invoked:
|
||
|
|
||
|
1. The contract's code is set to `0x1`, and its nonce is set to `2^64-1`.
|
||
|
2. The contract's `0`th storage slot is set to the address that would be issued if the contract used the `CREATE` opcode (`keccak256(contractAddress, nonce)`). Note that the nonce is always `2^64-1`.
|
||
|
3. If the contract was self-destructed after the call being forwarded by one or more alias contracts, the alias contract's `0`th storage slot is set to the address calculated in step 2.
|
||
|
4. The contract's balance is transferred, in its entirety, to the address on the top of the stack.
|
||
|
5. The top of the stack is popped.
|
||
|
|
||
|
### Gas Cost of `SELFDESTRUCT`
|
||
|
|
||
|
The base gas cost of `SELFDESTRUCT` is set to `5000`. The gas cost of `SELFDESTRUCT` is increased by `5000` for each alias contract that forwarded to the contract being self-destructed. Finally, the [EIP-2929](./eip-2929.md) gas cost increase is applied.
|
||
|
|
||
|
## Rationale
|
||
|
|
||
|
This EIP is designed to be a step towards supporting `SELFDESTRUCT` in Verkle trees while making the minimum amount of changes.
|
||
|
|
||
|
The `5000` base gas cost and additional alias contracts represents the cost of setting the account nonce and first storage slot. The [EIP-2929](./eip-2929.md) gas cost increase is preserved for the reasons mentioned in said EIP's Rationale.
|
||
|
|
||
|
The nonce of `2^64-1` was chosen since it is the nonce protected by [EIP-6188](./eip-6188.md). The account code of `0x1` was chosen since it was the code specified in [EIP-6189](./eip-6189.md).
|
||
|
|
||
|
The address being the same as the one created by `CREATE` is designed to reduce possible attack vectors by not introducing a new mechanism by which accounts can be created at specific addresses.
|
||
|
|
||
|
## Backwards Compatibility
|
||
|
|
||
|
This EIP requires a protocol upgrade, since it modifies consensus rules.
|
||
|
|
||
|
## Security Considerations
|
||
|
|
||
|
Needs discussion.
|
||
|
|
||
|
## Copyright
|
||
|
|
||
|
Copyright and related rights waived via [CC0](../LICENSE.md).
|