* Include LICENCE in the Jekyll build * Replace old licence link with new and improved licence link * Add note to EIP-1 mandating the new link * Maybe this fixes it? * Rename LICENCE so that jekyll picks it up * Add original LICENCE file back * Delete the markdown file * Add Jekyll header Hopefully the tooling still detects it as CC0 * Remove Jekyll header * Maybe this will trick Jekyll and satisfy github? * Remove config changes * Enable incremental build * Will it work if I rename it? * I'll just paste the content of the licence into the file... * Perhaps this will work * Replace the licence file * Fix false positive Co-authored-by: Micah Zoltu <micah@zoltu.net> * Resolve feedback * Perhaps this might work * It didn't work This reverts commit 55116e15168fb20ae57dea97388bb260c0941465. * Will licencee still detect this correctly? * Jekyll Preamble in licence file * Include it? * Licence -> License, get rid of CC0.md * Force wording of copyright waiver * Formatting consistent with the rest of the list * Spelling * Escape * Task failed successfully * Fix two more links * Will this render it? * Perhaps this will work too * .md essential * Fix the issues Micah noted Co-authored-by: Micah Zoltu <micah@zoltu.net>
2.1 KiB
eip | title | author | discussions-to | status | type | category | created |
---|---|---|---|---|---|---|---|
2937 | SET_INDESTRUCTIBLE opcode | Vitalik Buterin (@vbuterin) | https://ethereum-magicians.org/t/eip-2937-set-indestructible/4571 | Stagnant | Standards Track | Core | 2020-09-04 |
Simple Summary
Add a SET_INDESTRUCTIBLE (0xA8)
opcode that prevents the contract from calling SELFDESTRUCT (0xFF)
.
Abstract
Motivation
The intended use case would be for contracts to make their first byte of code be the SET_INDESTRUCTIBLE
opcode if they wish to serve as libraries that guarantee to users that their code will exist unmodified forever. This is useful in account abstraction as well as other contexts.
Unlike EIPs that disable the SELFDESTRUCT
opcode entirely, this EIP does not modify behavior of any existing contracts.
Specification
Add a transaction-wide global variable globals.indestructible: Set[Address]
(i.e. a variable that operates the same way as the selfdestructs set), initialized to the empty set.
Add a SET_INDESTRUCTIBLE
opcode at 0xA8
, with gas cost G_base
, that adds the current callee
to the globals.indestructible
set. If in the current execution context the callee
is in globals.indestructible
, the SELFDESTRUCT
opcode throws an exception.
Rationale
Alternative proposals to this include:
- Simply banning
SELFDESTRUCT
outright. This would be ideal, but has larger backwards compatibility issues. - Using a local variable instead of a global variable. This is problematic because it would be broken by
DELEGATECALL
.
Backwards Compatibility
TBD
Security Considerations
This breaks forward compatibility with some forms of state rent, which would simply delete contracts that get too old without paying some maintenance fee. However, this is not the case with all state size control schemes; for example this is not an issue if we use ReGenesis.
If SELFDESTRUCT
is ever removed in the future, this EIP would simply become a no-op.
Copyright
Copyright and related rights waived via CC0.