59 lines
1.6 KiB
Markdown
59 lines
1.6 KiB
Markdown
|
---
|
||
|
eip: 2488
|
||
|
title: Deprecate the CALLCODE opcode
|
||
|
author: Alex Beregszaszi (@axic)
|
||
|
discussions-to: https://ethereum-magicians.org/t/eip-2488-deprecate-the-callcode-opcode/3957
|
||
|
status: Stagnant
|
||
|
type: Standards Track
|
||
|
category: Core
|
||
|
created: 2019-12-20
|
||
|
requires: 7
|
||
|
---
|
||
|
|
||
|
## Abstract
|
||
|
|
||
|
Deprecate `CALLCODE` in a *somewhat* backwards compatible way, by making it always return failure.
|
||
|
|
||
|
## Motivation
|
||
|
|
||
|
`CALLCODE` was part of the Frontier release of Ethereum. In the first few weeks/months it became clear
|
||
|
that it cannot accomplish its intended design goal. This was rectified with introducing `DELEGATECALL`
|
||
|
([EIP-7](./eip-7.md)) in the Homestead update (early 2016).
|
||
|
|
||
|
`CALLCODE` became never utilized, but it still puts a burden on EVM implementations.
|
||
|
|
||
|
Disabling it will not improve the situation for any client whose goal is to sync from genesis, but would
|
||
|
help light clients or clients planning to sync from a later point in time.
|
||
|
|
||
|
## Specification
|
||
|
|
||
|
If `block.number >= FORK_BLOCK`, the `CALLCODE` (`0xf2`) instruction always returns `0`, which signals failure.
|
||
|
|
||
|
## Rationale
|
||
|
|
||
|
It would be possible just to remove the opcode and exceptionally abort if it is encountered.
|
||
|
However, by returning failure, the contract has a chance to act on it and potentially recover.
|
||
|
|
||
|
## Backwards Compatibility
|
||
|
|
||
|
This is a breaking change and has a potential to break contracts. The author expects no contracts of any value
|
||
|
should be affected.
|
||
|
|
||
|
TODO: validate this claim.
|
||
|
|
||
|
## Security Considerations
|
||
|
|
||
|
TBA
|
||
|
|
||
|
## Test Cases
|
||
|
|
||
|
TBA
|
||
|
|
||
|
## Implementation
|
||
|
|
||
|
TBA
|
||
|
|
||
|
## Copyright
|
||
|
|
||
|
Copyright and related rights waived via [CC0](../LICENSE.md).
|