-
Notifications
You must be signed in to change notification settings - Fork 8
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
Changes from all commits
Commits
Show all changes
25 commits
Select commit
Hold shift + click to select a range
cd26a35
Init bare file
meowsbits d9813d9
Init copy ECIP-1045
meowsbits 5448cb5
Swap ECIP for ECLIP, remove Const. from Header
meowsbits 55c4460
Remove Constantinople specs and undefine ETA
meowsbits 9081155
Update ECLIPs/ECLIP-etcbyz.md
zmitton b07af65
Revise motivation section
meowsbits 9dfa5dc
Fix typo, add note about strangeness of 'unbreaking opcode' case
meowsbits 2108940
Add Rationale conclusion note about feature upgrade
meowsbits eef2e02
Update ECLIPs/ECLIP-etcbyz.md
BelfordZ 4113214
Update ECLIPs/ECLIP-etcbyz.md
BelfordZ f349db1
Add EIP100 to proposal
meowsbits f7b7483
ecip: give byzantium a number 1054
soc1c de5c9ee
ECIP-1054: add simple summary
soc1c 568b3f2
ECIP-1054: improve abstract
soc1c afb495e
ECIP-1054: improve motivation and specification
soc1c 869444f
ECIP-1054: improve rationale and implementation
soc1c 807cbe9
ECIP-1054: remove redundant history section
soc1c d7d67a1
ECIP-1054: check grammar and spelling
soc1c a0b6568
ECIP-1054: reformat paragraphs
soc1c ed01f85
ECIP-1054: simplify abstract
soc1c 637d762
ECIP-1054: improve rationale
soc1c f2bd4cf
ECIP-1054: assign a name to the upgrade
soc1c fc8fdac
ECIP-1054: include outstanding spurious dragon eips
soc1c 85b899b
ECIP-1054: propose block numbers
soc1c cd3e903
ECIP-1054: mantis supports all included changes
soc1c File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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,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 | ||
- 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/). |
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This comment was marked as resolved.
Sorry, something went wrong.
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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.