History of Ethereum Hard Forks
An overview of the events that resulted in a blockchain of 10 million blocks in 5 years.
Today, May 4th, 2020, the 10 millionth block of the Ethereum blockchain has been mined. Combined, these blocks were mined by computing over 15 zettahashes over the past 5 years. It would take a modern graphics card, like the GTX 1080 Ti, over 150 million years to do this.
Over the course of our way towards this milestone, a recognizable amount of forks have occurred. Although forks always create a chain split, the old chain is often abandoned, which is why they are sometimes referred to as “network upgrades.” Today, we will be taking a look at the events that have collectively led us to our current mainnet Ethereum blockchain.
Pre-Release: Olympic — #0
On May 9th, 2015, the Olympic: Frontier pre-release was announced by the Ethereum Foundation. The release was meant as a proof-of-concept and included a bounty program to receive up to 25,000 Ether for things like sending out the most transactions, being the miner that includes the most transactions, or finding serious issues like creating a (substantial) fork between Go and C++ clients.
It lasted for 14 days. While technically Olympic was a different network and thus isn’t entirely supposed to be on this list, this stage did define a part of the so-called “Genesis” block in the Frontier release.
Frontier — #0
Frontier marks the first official Ethereum release, “Ethereum 1.0.” The launch consisted of a Genesis block, which included 8893 transactions of everyone who bought Ether during the official presale. In total, a little over 72 million ETH was “pre-mined,” of which almost 12 million was allocated for the Ethereum development fund.
Initially, Ethereum had a hardcoded gas limit per block of 5,000 gas. Because every transaction has a base cost of 21,000 gas, this meant the Ethereum blockchain only allowed for mining blocks. Per a blog post published by Ethereum.org:
This ‘thawing’ period will enable miners to start their operations and early adopters to install their clients without having to ‘rush’. After a few days (likely 3–4, but this could change), we’ll release a small software update which all clients will have to install. This update will see the Gas limit per block raised to 3 million, an initial number from which it will expand or contract as per the default miner settings.
About 5 days after Ethereum’s release, this limit was changed to a default target value of 3,141,592 gas. However, this was not an immediate change, as miners are only allowed to raise/lower the actual gas limit by
(previous block limit) / 1024 gas each block.
Block #46,147 contained Ethereum’s first transaction, a transfer of 31337 wei.
Ice Age — #200,000
In the blockchain space, the term “difficulty” refers to how much effort it takes a computer to mine the next block. The difficulty is readjusted automatically in order to stabilize block times. As more blocks are being mined in a given time frame, the difficulty is raised, and vice versa.
In order to guarantee another hard-fork point to switch from PoW to PoS within 16 months after Ethereum’s initial release, an exponential difficulty increase was added that would noticeably slow down new blocks being mined after about a year. After that time, the network would reach an “Ice Age,” where the difficulty would exponentially increase until it would be too high for anyone to find a block.
The image above depicts the average time needed to find a block. Three clear spikes are visible, which is when ice ages started to kick in. Every time a spike ended, the ice age was manually delayed by a new hard fork. Although the ice age needed to be delayed several times, work on proof of stake is still very much in progress.
Homestead — #1,150,000
Homestead was the second major planned version, and included three so-called EIPs, or “Ethereum Improvement Proposals”:
- EIP 2: Homestead Hard-fork Changes
- EIP 7: DELEGATECALL
- EIP 8: devp2p Forward Compatibility Requirements for Homestead
DAO Fork — #1,920,000
On June 17th, 2016, a vulnerability found inside the DAO contract had been exploited to drain approximately 3.6 million ETH from the fund. Due to the way this contract was designed, these funds would be frozen for 28 days before they could be transferred.
If no action would have been taken, the attacker would single-handedly have owned around 4.4% of the total supply of ETH. Because of this, a controversial proposal (EIP 779) was drawn up in order to change the code of the attacker’s lockup contract so everyone would be able to withdraw their ETH from the DAO contract.
On July 20th, a majority of mining power supported a fork which implemented this change, while a smaller community decided to split off and rename the old chain to Ethereum Classic.
Tangerine Whistle — #2,463,000
Tangerine Whistle was a small unplanned fork that included just one EIP, EIP-150. The proposal repriced some opcodes to prevent denial-of-service attacks from being worthwhile.
Spurious Dragon — #2,675,000
Spurious Dragon was another unplanned fork on November 22nd, 2016, which included four proposals related to fixing unwanted behaviour:
- EIP 155: Simple replay attack protection
- EIP 160: EXP cost increase
- EIP 161: State trie clearing (invariant-preserving alternative)
- EIP 170: Contract code size limit
Byzantium — #4,370,000
Byzantium is the first half of “Metropolis,” which was the name given to the third planned stage of Ethereum. It contained a wide variety of changes, including 4 new opcodes, 4 precompiles, a reduction of the block reward, and another delay of the Ice Age difficulty bomb. The full list of EIPs included is:
- EIP 100: Change difficulty adjustment to target mean block time including uncles
- EIP 140: REVERT instruction
- EIP 196: Precompiled contracts for addition and scalar multiplication on the elliptic curve alt_bn128
- EIP 197: Precompiled contracts for optimal ate pairing check on the elliptic curve alt_bn128
- EIP 198: Big integer modular exponentiation
- EIP 211: New opcodes: RETURNDATASIZE and RETURNDATACOPY
- EIP 214: New opcode STATICCALL
- EIP 649: Metropolis Difficulty Bomb Delay and Block Reward Reduction
- EIP 658: Embedding transaction status code in receipts
Constantinople / St. Petersburg — #7,280,000
The second half of the Metropolis stage consisted of the Constantinople fork, which was supposed to happen on block 7,080,000, included five EIPs:
- EIP 145: Bitwise shifting instructions in EVM
- EIP 1014: Skinny CREATE2
- EIP 1052: EXTCODEHASH opcode
- EIP 1234: Constantinople Difficulty Bomb Delay and Block Reward Adjustment
- EIP 1283: Net gas metering for SSTORE without dirty maps
However, just 32 hours before the fork was supposed to happen, Constantinople was postponed due to the discovery of an unwanted side effect of EIP-1283, which introduced a reentrancy attack to many deployed contracts.
As a result, EIP-1283 was removed from the list of planned integrations, and the fork was rescheduled to block 7,280,000. Furthermore, the fork was given a new name: St. Petersburg.
Istanbul — #9,069,000
Following the Byzantium and Constantinople forks, the name of this fork comes as no surprise to many. The fork includes two new opcodes, a new precompile, and some gas adjustments.
- EIP 152: Add BLAKE2 compression function `F` precompile
- EIP 1108: Reduce alt_bn128 precompile gas costs
- EIP 1344: ChainID opcode
- EIP 1884: Repricing for trie-size-dependent opcodes
- EIP 2028: Transaction data gas cost reduction
- EIP 2200: Structured Definitions for Net Gas Metering
If you would like to learn more about these changes, you should read my other article: “Ethereum’s Istanbul Fork — Technical Explanation”.
Ethereum’s Istanbul Fork — Technical Explanation
A technical summary of the upcoming changes that will be introduced with the Istanbul hard fork on block 9,069,000.
Muir Glacier — #9,200,000
Muir Glacier only included one EIP, EIP-2384, in order to once again delay the difficulty bomb.
Serenity / ETH 2.0 — ?
The next step on the Ethereum roadmap is Serenity, also known as ETH 2.0. This upgrade would involve a proof-of-stake beacon chain, shard chains, eWASM, and more.
If you would like to learn more about what’s being worked on right now, you should read “The Roadmap to Serenity” by ConsenSys.
Talk To Us & Share Your Thoughts
- Buterin, V. (2015). Olympic: Frontier Pre-Release
- Gupta, V. (2015). The Ethereum Launch Process
- Tual, S. (2015). Ethereum Protocol Update 1
- Wilcke, J. (2016). Homestead Release
- Buterin, V. (2016). CRITICAL UPDATE Re: DAO Vulnerability
- Jameson, H. (2016). FAQ: Upcoming Ethereum Hard Fork
- Jameson, H. (2016). Hard Fork №4: Spurious Dragon
- Ethereum Foundation. (2017). Byzantium HF Announcement
- Jameson, H. (2019). Ethereum Constantinople Postponement
- Jameson, H. (2019). Ethereum Constantinople/St. Petersburg Upgrade Announcement
- Jameson, H. (2019). Ethereum Istanbul Upgrade Announcement