Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ECIP-1054: Support for ETH Byzantium EVM and Protocol Upgrades #10

Merged
merged 25 commits into from
Mar 29, 2019
Merged
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
cd26a35
Init bare file
meowsbits Feb 11, 2019
d9813d9
Init copy ECIP-1045
meowsbits Feb 11, 2019
5448cb5
Swap ECIP for ECLIP, remove Const. from Header
meowsbits Feb 11, 2019
55c4460
Remove Constantinople specs and undefine ETA
meowsbits Feb 11, 2019
9081155
Update ECLIPs/ECLIP-etcbyz.md
zmitton Feb 12, 2019
b07af65
Revise motivation section
meowsbits Feb 12, 2019
9dfa5dc
Fix typo, add note about strangeness of 'unbreaking opcode' case
meowsbits Feb 12, 2019
2108940
Add Rationale conclusion note about feature upgrade
meowsbits Feb 12, 2019
eef2e02
Update ECLIPs/ECLIP-etcbyz.md
BelfordZ Feb 19, 2019
4113214
Update ECLIPs/ECLIP-etcbyz.md
BelfordZ Feb 19, 2019
f349db1
Add EIP100 to proposal
meowsbits Mar 18, 2019
f7b7483
ecip: give byzantium a number 1054
soc1c Mar 20, 2019
de5c9ee
ECIP-1054: add simple summary
soc1c Mar 20, 2019
568b3f2
ECIP-1054: improve abstract
soc1c Mar 20, 2019
afb495e
ECIP-1054: improve motivation and specification
soc1c Mar 20, 2019
869444f
ECIP-1054: improve rationale and implementation
soc1c Mar 20, 2019
807cbe9
ECIP-1054: remove redundant history section
soc1c Mar 20, 2019
d7d67a1
ECIP-1054: check grammar and spelling
soc1c Mar 22, 2019
a0b6568
ECIP-1054: reformat paragraphs
soc1c Mar 22, 2019
ed01f85
ECIP-1054: simplify abstract
soc1c Mar 22, 2019
637d762
ECIP-1054: improve rationale
soc1c Mar 22, 2019
f2bd4cf
ECIP-1054: assign a name to the upgrade
soc1c Mar 22, 2019
fc8fdac
ECIP-1054: include outstanding spurious dragon eips
soc1c Mar 22, 2019
85b899b
ECIP-1054: propose block numbers
soc1c Mar 22, 2019
cd3e903
ECIP-1054: mantis supports all included changes
soc1c Mar 22, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
92 changes: 92 additions & 0 deletions ECLIPs/ECIP-1054.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
### ECIP-1054: Atlantis EVM and Protocol Upgrades

ECIP: 1054
Title: Atlantis EVM and Protocol Upgrades
Status: Draft
Type: Standards Track
Author: Isaac Ardis <[email protected]>
Created: 2019-02-11

### Simple Summary

Enable the outstanding Ethereum Foundation _Spurious Dragon_ and _Byzantium_ network protocol upgrades on the Ethereum
Classic network in a hard-fork code-named _Atlantis_ to enable maximum compatibility across these networks.

### Abstract

Add support for a subset of protocol-impacting changes introduced in the Ethereum Foundation (ETH) network via the
_Spurious Dragon_ and _Byzantium_ hardforks. The proposed changes for Ethereum Classic's _Atlantis_ upgrade include:

- Spurious Dragon state-trie clearing.
- Spurious Dragon contract-code size limit.
- Byzantium EVM opcodes, namely `REVERT`, `RETURNDATASIZE`, `RETURNDATACOPY`, and `STATICCALL`.
- Byzantium EVM precompiled contracts, namely addition and scalar multiplication on the elliptic curve `alt_bn128`,
optimal ate pairing check on the elliptic curve `alt_bn128`, and BIGINT modular exponentiation.
- Replacing the intermediate state root field in transaction receipts with the contract return status.
- Change difficulty adjustment to target mean block time including uncle.

This document proposes the following blocks at which to implement these changes in the Classic networks:

- `1_039_000` on Kotti Classic PoA-testnet (early August 2019)
- `4_723_000` on Morden Classic PoW-testnet (early August 2019)
- `8_750_000` on Ethereum Classic PoW-mainnet (mid-September 2019)

For more information on the opcodes and their respective EIPs and implementations, please see the _Specification_
section of this document.

### Motivation

To enhance the Ethereum Virtual Machine's (EVM) capabilities, various opcodes and precompiled contracts shall be added
to the Ethereum Classic networks, all of which have been in use on the Ethereum Foundation networks since late 2017.
Adoption of the _receipt status_ feature provides a helpful method for decentralized-application developers to access
the successful or failed state of a contract. This would establish a higher level of interoperability between Foundation
and Classic EVMs, and make a more extensive array of tooling available for the ETC network (e.g., Solidity version,
contract debugging tools). The proposed change to the difficulty formula ensures that the difficulty adjustment
algorithm targets a constant average rate of blocks produced including uncles, and so ensures a highly predictable
issuance rate that cannot be manipulated upward by manipulating the uncle rate.

### Specification

Technical specifications for each EIP can be found at those documents respectively:

- [EIP 100](https://eips.ethereum.org/EIPS/eip-100) (Change difficulty adjustment to target mean block time including uncles)
- [EIP 140](https://eips.ethereum.org/EIPS/eip-140) (`REVERT` instruction in the Ethereum Virtual Machine)
- [EIP 161](https://eips.ethereum.org/EIPS/eip-161) (State-trie clearing)
- [EIP 170](https://eips.ethereum.org/EIPS/eip-170) (Contract-code size limit)
- [EIP 196](https://eips.ethereum.org/EIPS/eip-196) (Precompiled contracts for addition and scalar multiplication on the elliptic curve `alt_bn128`)
- [EIP 197](https://eips.ethereum.org/EIPS/eip-197) (Precompiled contracts for optimal ate pairing check on the elliptic curve `alt_bn128`)
- [EIP 198](https://eips.ethereum.org/EIPS/eip-198) (Precompiled contract for BIGINT modular exponentiation)
- [EIP 211](https://eips.ethereum.org/EIPS/eip-211) (New opcodes `RETURNDATASIZE` and `RETURNDATACOPY`)
- [EIP 214](https://eips.ethereum.org/EIPS/eip-214) (New opcode `STATICCALL`)
- [EIP 658](https://eips.ethereum.org/EIPS/eip-658) (Embedding transaction status code in receipts)

### Rationale

__Atomicity__: This protocol specification notably omits the scheduled features of the anticipated _Constantinople_
protocol upgrade, which would be expected to include various further EVM upgrades. This allows for dedicated testing of
the proposed changes in light of multiple delays of the Constantinople fork
([a postmortem of the latest delay](https://medium.com/ethereum-cat-herders/a-post-mortem-report-the-constantinople-ethereum-hard-fork-postponement-dd780d7ae63d)).

__Interoperability__: establishing and maintaining interoperable behavior between Ethereum clients is essential for
developers and end-user adoption, yielding benefits for all participating chains (e.g., ETH and ETC, Ropsten and Morden,
Görli and Kotti).

__Immutability__: None of the introduced new opcodes in the EVM has the potential to change the behavior of existing
contracts; in the case where previously an arbitrary invalid bytecode would have been deployed to the network, none of
them would be able to modify the state of the Ethereum Classic networks retrospectively. Adding opcodes and precompiled
contracts to the EVM increases its functionality and should be considered a feature upgrade rather than a modification.

### Implementation

Adoption of the content of this ECIP requires a hard fork as it introduces changes that are not backward compatible.

The following clients with Ethereum Classic support implement the _Spurious Dragon_ and _Byzantium_ features currently:

- Geth Classic: partial support for EIP-658 receipt status code change

This comment was marked as resolved.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This reflects the current state, not the desired state. In general, this section is used to point out a reference implementation which can be used by other client developer teams.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

IMO this should just be removed then; a spec should not be a roster of supposed current implementations unless the implementation(s) is part of the spec.

- Parity Ethereum: all features due to Ethereum Foundation compatibility
- Multi Geth: all features due to Ethereum Foundation compatibility
- Mantis: all features due to Ethereum Foundation compatibility

## Copyright

Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/).