The question Please confirm what the hard forks of Ethereum were and when they took place was asked on Reddit by u/Tykerr.
3 Answers
Ethereum Mainnet blocks #0 (genesis block) and #1 (first mined block):
> new Date(eth.getBlock(0).timestamp * 1000).toUTCString()
"Thu, 01 Jan 1970 00:00:00 UTC"
> new Date(eth.getBlock(1).timestamp * 1000).toUTCString()
"Thu, 30 Jul 2015 15:26:28 UTC"
0.1 #200,000 Ice Age
Source: u/accape's statement "There is also the very first HF shortly after genesis which introduced the ice age (which went into effect at block 200,000)."
And from Ethereum Protocol Update 1, dated Aug 4 2015, "starting from block 200,000 (very roughly 17 days from now), the difficulty will undergo an exponential increase which will only become noticeable in about a year".
> new Date(eth.getBlock(200000).timestamp * 1000).toUTCString()
"Mon, 07 Sep 2015 21:33:09 UTC"
1. #1,150,000 Homestead
Source What was the first block mined with Homestead?
> new Date(eth.getBlock(1150000).timestamp * 1000).toUTCString()
"Mon, 14 Mar 2016 18:49:53 UTC"
Note that https://etherchain.org/block/1150000 reports 2016-03-14 19:49:53 and https://etherscan.io/block/1150000 reports Mar-14-2016 06:49:53 PM +UTC
See also EIP 606: Hardfork Meta: Homestead
2. #1,920,000 DAO
Source Give a summary of the fork state changes in block 1920000.
> new Date(eth.getBlock(1920000).timestamp * 1000).toUTCString()
"Wed, 20 Jul 2016 13:20:40 UTC"
Note that this hard fork produced the Ethereum Classic chain which is the original un-forked chain while the forked chain is the main Ethereum chain. If you owned ethers (ETH) prior to this fork, you will own the same number of Classic ethers (ETC) as well as regular ethers (ETH).
See also EIP 779: Hardfork Meta: DAO Fork
3. #2,463,000 Tangerine Whistle
Source FAQ: Upcoming Ethereum Hard Fork, dated Oct 18 2016.
> new Date(eth.getBlock(2463000).timestamp * 1000).toUTCString()
"Tue, 18 Oct 2016 13:19:31 UTC"
The main changes to the protocol were:
- EIP 150-1c - Long-term gas cost changes for IO-heavy operations to mitigate transaction spam attacks
- EIP 158 - State clearing
See also EIP 608: Hardfork Meta: Tangerine Whistle
The software versions were:
- Ethereum Wallet/Mist 0.8.6
geth
1.4.18- Parity 1.3.8
- EthereumJ 1.3.6
4. #2,675,000 Spurious Dragon
Source Hard Fork No. 4: Spurious Dragon, dated Nov 18 2016.
> new Date(eth.getBlock(2675000).timestamp * 1000).toUTCString()
"Tue, 22 Nov 2016 16:15:44 UTC"
The main changes to the protocol were:
- EIP 155: Replay attack protection - to prevent transactions from the main Ethereum chain being replayed on the Classic chain.
- EIP 160: EXP cost increase - "making it more difficult to slow down the network via computationally expensive contract operations"
- EIP 161: State trie clearing - "enabling 'debloat' of the blockchain state" to clean up the 20 million empty accounts created in the Sep and Oct 2016 Ethereum network attack.
- EIP 170: Contract code size limit - "changes the maximum code size that a contract on the blockchain can have"
See also EIP 607: Hardfork Meta: Spurious Dragon
The software versions were:
- Ethereum Wallet/Mist 0.8.7
geth
1.5.2- Parity 1.4.4
5. #4,370,000 Byzantium
Source Byzantium HF Announcement, dated Oct 12 2017.
> new Date(eth.getBlock(4370000).timestamp * 1000).toUTCString()
"Mon, 16 Oct 2017 05:22:11 UTC"
The main changes to the protocol were:
- EIP 140: Addition of ‘REVERT’ opcode - which permits error handling without consuming all gas.
- EIP 658: Embedding transaction return data in receipts - to indicate success or failure.
- EIP 196: Elliptic curve addition and scalar multiplication on alt_bn128 - permitting ZK-Snarks and other cryptographic mathemagic™.
- EIP 197: Pairing checks - permitting ZK-Snarks and other cryptographic mathemagic™.
- EIP 198: Big integer modular exponentiation - enabling RSA signature verification and other cryptographic applications.
- EIP 211: Support for variable length return values.
- EIP 214: Addition of the ‘STATICCALL’ opcode - permitting non-state-changing calls to other contracts.
- EIP 100: Difficulty adjustment formula change - to take uncles into account.
- EIP 649: Delay of the ice age / difficulty bomb by 1 year, and reduction of block reward from 5 to 3 ether.
See also EIP 609: Hardfork Meta: Byzantium
The software versions were:
- Ethereum Wallet/Mist 0.9.1
geth
1.7.2- Parity 1.7.6 (to be released)
- Ethereum Harmony 2.1.56
6. #7,280,000 Constantinople/St. Petersburg
Source:
- First attempt targeting #7,080,000 - Ethereum Constantinople Upgrade Announcement, dated Jan 11 2019. This was postponed due to a vulnerability in EIP 1283
- Second attempt targeting #7,280,000 - Ethereum Constantinople/St. Petersburg Upgrade Announcement, dated Feb 22 2019
> new Date(eth.getBlock(7080000).timestamp * 1000).toUTCString()
"Thu, 17 Jan 2019 05:57:13 UTC"
The main changes to the protocol are:
EIP 145 - Native bitwise shifting with cost on par with other arithmetic operations
EIP 1052 - New EXTCODEHASH opcode that returns the keccak256 hash of a contract's code
EIP 1283 - Net gas metering changes for SSTORE opcode- Removed in second attempt due to vulnerabilityEIP 1234 - Delay difficulty bomb for ~12m and reduce block reward from 3 ETH to 2 ETH
The software versions are:
- geth 1.8.23
- Parity v2.2.10-stable
- Harmony v2.3 Build 74
- Pantheon v0.9.1
- EthereumJS v2.6.0
- Ethereum Wallet/Mist v0.11.1
7. #9,069,000 Istanbul
Source Ethereum Istanbul Upgrade Announcement, dated Nov 20 2019
> new Date(eth.getBlock(9069000).timestamp * 1000).toUTCString()
"Sun, 08 Dec 2019 00:25:09 UTC"
The main changes to the protocol as listed in EIP 1679: Hardfork Meta: Istanbul were:
- EIP-152: Add Blake2 compression function F precompile
- EIP-1108: Reduce alt_bn128 precompile gas costs
- EIP-1344: Add ChainID opcode
- EIP-1884: Repricing for trie-size-dependent opcodes
- EIP-2028: Calldata gas cost reduction
- EIP-2200: Rebalance net-metered SSTORE gas cost with consideration of SLOAD gas cost change
The software versions are:
- geth v1.9.9
- Parity v2.5.11-stable
- Besu v1.3.6
- Nethermind v1.2.3
- ethereumJS v4.0.2
- Trinity v0.1.0-alpha.31
- Aleth v1.7.1
-
1This is extremely useful. Thanks. One suggestion. Pull out the blockNumbers to make them a bit more obvious. I found this post because I was trying to answer the question "During which blocks were the DDOS attack," because I had to resync my chain, and I wanted to know when the sync would slow down. I looked at this post for a while, thinking it would be perfect if it included block numbers before I noticed the block numbers almost hidden in the code. My suggestion is to expose the block numbers more obviously perhaps even in the title of the hard fork. Thanks. Commented Apr 8, 2017 at 12:51
-
Added the block numbers as you suggested. Re syncing, see ethereum.stackexchange.com/questions/9883/… . Commented Apr 9, 2017 at 11:39
-
1
-
-
1
Actually all Ethereum forks are modeled in EthOn (http://ethon.consensys.net). I attached an illustration, below.
https://github.com/ethereum/execution-specs has a summary of the hard forks.
Ethereum Protocol Releases (as of January 2022)
Version and Code Name | Block No. | Released | Incl EIPs | Specs | Blog |
---|---|---|---|---|---|
Arrow Glacier | 13773000 | 2021-12-09 | EIP-4345 | Specification | Blog |
London | 12965000 | 2021-08-05 | EIP-1559 EIP-3198 EIP-3529 EIP-3541 EIP-3554 |
Specification | Blog |
Berlin | 12244000 | 2021-04-15 | EIP-2565 EIP-2929 EIP-2718 EIP-2930 |
~HFM-2070~ Specification |
Blog |
Muir Glacier | 9200000 | 2020-01-02 | EIP-2384 | HFM-2387 | Blog |
Istanbul | 9069000 | 2019-12-07 | EIP-152 EIP-1108 EIP-1344 EIP-1884 EIP-2028 EIP-2200 |
HFM-1679 | Blog |
Petersburg | 7280000 | 2019-02-28 | EIP-145 EIP-1014 EIP-1052 EIP-1234 |
HFM-1716 | Blog |
Constantinople | 7280000 | 2019-02-28 | EIP-145 EIP-1014 EIP-1052 EIP-1234 EIP-1283 |
HFM-1013 | Blog |
Byzantium | 4370000 | 2017-10-16 | EIP-100 EIP-140 EIP-196 EIP-197 EIP-198 EIP-211 EIP-214 EIP-649 EIP-658 |
HFM-609 | Blog |
Spurious Dragon | 2675000 | 2016-11-22 | EIP-155 EIP-160 EIP-161 EIP-170 |
HFM-607 | Blog |
Tangerine Whistle | 2463000 | 2016-10-18 | EIP-150 | HFM-608 | Blog |
DAO Fork | 1920000 | 2016-07-20 | HFM-779 | Blog | |
DAO Wars | aborted | aborted | Blog | ||
Homestead | 1150000 | 2016-03-14 | EIP-2 EIP-7 EIP-8 |
HFM-606 | Blog |
Frontier Thawing | 200000 | 2015-09-07 | Blog | ||
Frontier | 1 | 2015-07-30 | Blog |