Most hard forks are planned as part of a roadmap and consist of updates that the community generally agrees to; this is commonly called consensus. However, some hard forks do not always retain consensus which leads to multiple, distinct blockchains. The events that lead to the Ethereum / Ethereum Classic split is one such case.
Ethereum Classic came to be after members of the Ethereum community went ahead with a time-sensitive hard fork ("DAO Hard Fork"). On July 20th 2016, at a block height of 1.92 million, Ethereum introduced an irregular state change via a hard-fork in an effort to return approximately 3.6 million Ether that had been taken from a smart contract known as The DAO.
A number of people in the community disagreed with this change, believing it was as a violation of Ethereum’s immutability; they elected to continue the original chain under the moniker of Ethereum Classic. While the split itself was initially ideological both chains have since evolved into their own separate entities.
The DAO was created by Slock.It; a highly skilled team of developers including former founding members of Ethereum among their ranks. Slock.It conceived of The DAO as a way to provide community-based funding for projects. The core idea of it being that proposals would be submitted, curators would manage proposals, funds would be raised from investors within the Ethereum community, and if the project proves successful then investors would receive a share of the profits.
The DAO was also one of the first experiments in an Ethereum token. Rather than funding projects directly with Ether, participants would trade their Ether for DAO tokens, use them to vote on project funding, and would later be able to trade them back for Ether.
DAO tokens were able to be purchased in a crowdsale that ran from April 5th through April 30th, 2016 amassing nearly 14% <<[1]>> of the total Ether in existence which was worth ~$150 million USD at the time.
On June 9th, developer Peter Vessenes and Chriseth report that most Ethereum-based contracts which manage funds are potentially vulnerable to an exploit <<[2]>> that can empty contract funds. A few days later (June 12th) Stephen Tual (Founder of Slock.It), reports that The DAO’s code is not vulnerable <<[3]>> to the bug described by Peter and Chriseth. Worried DAO contributors temporarily breathe a sigh of relief until 5 days later (June 17th) when an unknown attacker ("the DAO Attacker") starts draining The DAO <<[4]>> using an exploit similar to the one described on June 9th. Ultimately the DAO Attacker siphons ~3.6 million Ether out of The DAO.
Simultaneously an assemblage of volunteers calling themselves the Robinhood Group (RHG) start using the same exploit to withdraw the remaining funds. On June 21st RHG announces <<[5]>> that they’ve secured the other 70% of The DAO, ~7.2 million Ether, with plans to return it to the community. Much thanks and commendations are given to the RHG for their quick actions and thinking that helped secure the bulk of the community’s Ether.
While a more detailed and thorough explanation of the bug is described by Phil Daian <<[6]>> the short explanation is that a Contract function can be called multiple times simultaneously on the Ethereum Virtual Machine (EVM; the part of Ethereum that runs all Contract code). This allowed the DAO Attacker to request to withdraw Ether repeatedly, and before the Contract could record that the DAO Attacker had done so, the attacker withdrew again.
Imagine you had $100 in your bank account and you could bring your bank teller any number of withdrawal slips. The bank teller gives you money for each slip in order, and only at the end of all the slips do they record your withdrawal. What if you brought them three slips to each withdraw $100? What if you brought them three thousand?
Put another way, the flow was:
-
DAO Attacker asks the DAO Contract to withdraw DAO tokens (DAO).
-
DAO Attacker asks the contract to withdraw DAO again. Before the contract updates its records that DAO was withdrawn.
-
Repeat step two as much as possible.
-
Contract finally logs a single DAO withdrawal, losing track of the withdrawals that happened in the interim.
One safety guard in The DAO was that all withdrawal requests were subject to a 28 day delay. This gave the community a short timeframe to discuss what to do about the exploit. From roughly June 17th to July 20th the DAO Attacker would be unable to convert their DAO tokens into Ether.
Several developers focused on finding a viable solution and multiple avenues were explored in this short space of time. Among them was the DAO Soft Fork, announced on June 24th, to delay DAO withdrawals until consensus was reached <<[7]>>, and a DAO Hard Fork, announced July 15th, to reverse the effects of the DAO Attack with an irregular state change <<[8]>>.
On June 28th developers discovered a DoS exploit in the DAO Soft Fork <<[9]>> and concluded that the DAO Hard Fork would be the only viable option on the fork route. The DAO Hard Fork would transfer all Ether that had been invested in the DAO into a new refund smart contract, allowing the original owners of the Ether to claim a full refund. This provided a solution for returning the hacked funds but also meant interfering with the balances of specific addresses on the network; however isolated they were. There would also be some leftover Ether in portions of The DAO known as childDAOs <<[12]>>. A group of trustees would manually authorize the leftover Ether; worth ~$6-7 million at the time <<[8]>>.
With time running out, multiple Ethereum development teams created clients that allowed a user to decide whether they wanted to enable this fork. However, the client creators wanted to decide whether to make this choice opt-in (don’t fork by default), or opt-out (fork by default). On July 15th a vote was open on Carbonvote.com <<[10]>>. On July 16th, at block 1,894,000 <<[11]>> it was closed. Of the 5.5% of the total Ether supply votes, ~80% of the votes (~4.5% of the total Ether supply) voted for opt-out. One quarter of the opt-out vote came from a single address <<[12]>>.
Ultimately the decision became opt-out, and those who opposed the DAO Hard Fork would need to explicitly state that they did by changing a configuration option in the software they were running.
On July 20th, at block 1,920,000 <<[13]>> Ethereum implemented the DAO Hard Fork <<[14]>> and thus two Ethereums were created, one supporting the irregular state change, and the other opposing it.
When the Hard Forked Ethereum (present-day Ethereum) gained a majority of the mining power, many assumed that consensus was achieved and the minority chain would fade away; as in previous forks. Despite this, a sizable portion of the Ethereum community started supporting the original chain which came to be known as Ethereum Classic.
Within days several exchanges began to list both Ethereum ("ETH") and Ethereum Classic ("ETC"). Due to the nature of hard forks, all Ethereum users holding Ether at the time of the split now held funds on both of the chains and a market value for ETC was soon established with Poloniex listing ETC on July 24th <<[15]>>.
A lot of discussion occurred on the /r/ethereum subreddit during the weeks leading up to the DAO Hard Fork. Some of the popular/key arguments are summarized below.
Argument | For | Against |
---|---|---|
Responsibility/Justice |
The responsibility for determining if a theft has occurred, and should be corrected can be done by the community if possible. There is a moral imperative. |
The responsibility for determining if a theft has occurred, and should be corrected, should only be done by a legal body. It is impossible to eliminate bias if affected parties are part of the decision. |
The DAO Agreement |
It is not possible for most participants of The DAO to properly evaluate the code, therefore they cannot agree to be bound by the code of The DAO. |
The opening paragraph of The DAO’s Terms & Conditions <<[23]>> states that "…The DAO’s code controls and sets forth all terms of The DAO Creation." |
Blockchain Immutability |
Blockchain immutability is a social construct and therefore we are allowed to change it if the majority agrees. |
Blockchain immutability is a social construct and therefore it is important to enforce immutability. |
Opt-in vs. Opt-out |
It’s okay for the community to choose whether a Hard Fork is opt-in or opt-out. We’ve voted to have it be opt-out. |
Historically Hard Forks are opt-in (ie. Bitcoin) and a non-vote is a no vote. The opt-out vote had only 4.5% of the total supply voting over a period of ~1 day. <<[12]>> |
-
April 5: Slock.It creates The DAO following a security audit by Dejavu Security <<[16]>>
-
April 30: The DAO crowdsale launches <<[17]>>
-
May 27: The DAO crowdsale ends
-
June 9: A potential recursive call bug is discovered and believed to affect many Solidity contracts that track user’s balances <<[2]>>
-
June 12: Stephen Tual declares that DAO funds are not at risk <<[3]>>
-
June 17: The DAO is exploited and a variant of the discovered bug (termed the "re-entry bug") is used to start draining the funds; eventually nabbing ~30% of the funds. <<[6]>>
-
June 21: The RHG announces it has secured the other ~70% of the Ether stored within The DAO. <<[5]>>
-
June 24: A soft fork vote is announced via opt-in signaling through Geth and Parity clients. This is designed to temporarily withhold funds until the community can better decide on what to do. <<[7]>>
-
June 28: A vulnerability is discovered in the soft fork and it’s abandoned. <<[9]>>
-
June 28 to July 15: Users debate on whether or not to hard fork. Most of the debate occurs on the /r/ethereum subreddit.
-
July 15: The DAO Hard Fork is proposed to reverse The DAO Attack. <<[8]>>
-
July 15: A vote is held on carbonvote to decide if the DAO Hard Fork is opt-in (don’t fork by default) or opt-out (fork by default). <<[10]>>
-
July 16: 5.5% of the total Ether supply votes, ~80% of the votes (~4.5% of the total supply) are pro the opt-out hard fork. One quarter of the pro-vote comes from a single address. <<[11]>> <<[12]>>
-
July 20: The hard fork occurs at block 1,920,000. <<[13]>> <<[14]>>
-
July 20: Those against the DAO Hard Fork continue running the old non-hard fork client software. This leads to issues with transactions being replayed on both chains. <<[18]>>
-
July 24: Poloniex lists the original Ethereum chain under the ticker symbol ETC; the first exchange to do so. <<[15]>>
-
August 10: The RHG transfers 2.9 million of the recovered ETC to Poloniex in order to convert it to ETH under the advice of Bity SA. 14% of the total RHG holdings are converted from ETC to ETH and other cryptocurrencies. Poloniex freezes the other 86% of deposited ETH. <<[19]>>
-
August 30: The frozen funds are sent by Poloniex back to the RHG. RHG then sets up a refund contract on the ETC chain. <<[20]>> <<[21]>>
-
December 11: IOHK’s ETC development team forms. Lead by Ethereum founding member Charles Hoskinson.
-
Jan 13, 2017: The ETC network is updated to resolve transaction replay issues. Both chains are now functionally separate. <<[22]>>
-
February 20: ETCDEVTeam forms. Lead by early ETC developer Igor Artamonov (splix).
While the initial split was centered around The DAO, Ethereum and Ethereum Classic are now separate projects. The full set of differences is constantly evolving and too extensive to cover in this chapter it is worth noting that the chains do differ significantly in their core development, and community structure.
All blockchains ultimately have many users and contributors. However, the core network development (code that runs the network) is often done by discrete groups due to the expertise and knowledge required to develop this type of software. As such the code that these groups produce is very closely tied to the code that actually runs the network.
Ethereum | Ethereum Classic |
---|---|
Ethereum Foundation, and volunteers. |
ETCDEV, IOHK, and volunteers. |
One of the biggest material differences between Ethereum and Ethereum Classic is ideology which manifests itself in two key ways: immutability and community structure.
Within the context of blockchains, immutability refers to the preservation of blockchain history.
Ethereum | Ethereum Classic |
---|---|
Follows a philosophy that’s colloquially termed "governance". This philosophy allows participants to vote, with varying degrees of representation, to change the blockchain in certain cases (such as The DAO attack). |
Follows a philosophy that once data is on the blockchain it cannot be modified by others. This is a philosophy shared with Bitcoin, Litecoin, and other cryptocurrencies. |
While blockchains aim to be decentralized much of the world around them is centralized. Ethereum and Ethereum Classic approach this reality in different ways.
Ethereum | Ethereum Classic |
---|---|
Owned by the Ethereum Foundation: /r/ethereum Subreddit, ethereum.org Website, Forums, GitHub (ethereum), Twitter (@ethereum), Facebook, and Google+ account. |
Owned by separate entities: /r/ethereumclassic Subreddit, the ethereumclassic.org Website, Forums, GitHubs (ethereumproject, ethereumclassic, etcdevteam, iohk, ethereumcommonwealth), Twitter (@eth_classic), Telegrams, and Discord. |
//// TODO: Really needs other forks as well, Ellaism, Ubiq, Musicoin ////
//// TODO: Hopefully someone more familiar with these other forks can elaborate, as well as clarify the difference between network and software forks if necessary. ////
Several other forks have occurred on Ethereum as well. Some of these are hard forks in the sense that they split directly off of the pre-existing Ethereum network. Others are software forks: they use Ethereum’s client/node software but run entirely separate networks without any history shared with Ethereum. There will likely be more forks over the life of Ethereum.
There are also several other projects that claim to be Ethereum forks but are actually based on ERC20 tokens and run on the Ethereum network. Two examples of these are EtherBTC (ETHB) and Ethereum Modification (EMOD). These are not forks in the traditional sense, and may sometimes be called airdrops.
-
Expanse was the first fork of the Ethereum blockchain to gain traction. It was announced via the Bitcoin Talk forum on September 7 2015. The actual fork occurred a week later on September 14 2015 at a block height of 800,000. It was originally founded by Christopher Franko and James Clayton. Their stated vision was to create an advanced chain for: "identity, governance, charity, commerce, and equity".
//// TODO: Recommend dropping some of the forks below if they seem to be abandoned ////
-
EthereumFog (ETF) was launched on December 14 2017 and forked at a block height of 4730660. Their stated aims are to develop "World Decentralized Fog Computing" by focusing on fog computing and decentralised storage. There is still little information on what this will actually entail.
-
EtherZero (ETZ) was launched on January 19 2018 at block height of 4936270 at a block height of 4936270. Its notable innovations were the introduction of a masternode architecture and the removal of transaction fees for smart contracts to enable a wider diversity of DAPPs. There have been some criticism from some prominent members of the Ethereum community, MyEtherWallet and MetaMask, due to the lack of clarity surrounding development and some accusations of possible phishing.
-
EtherInc (ETI) was launched on February 13 2018 at a block height of 5078585 with a focus on building decentralised organisations. They also announced the reduction of block times, increased miner rewards, the removal of uncle rewards and set a cap on mineable coins. They use the same private keys as Ethereum and have implemented replay protection to protect Ether on the original unforked chain.
-
[[[2]]] http://vessenes.com/more-ethereum-attacks-race-to-empty-is-the-real-deal/
-
[[[4]]] http://hackingdistributed.com/2016/06/18/analysis-of-the-dao-exploit
-
[[[5]]] https://www.reddit.com/r/ethereum/comments/4p7mhc/update_on_the_white_hat_attack/
-
[[[6]]] http://hackingdistributed.com/2016/06/18/analysis-of-the-dao-exploit/
-
[[[7]]] https://blog.ethereum.org/2016/06/24/dao-wars-youre-voice-soft-fork-dilemma/
-
[[[8]]] https://blog.slock.it/hard-fork-specification-24b889e70703
-
[[[9]]] https://blog.ethereum.org/2016/06/28/security-alert-dos-vulnerability-in-the-soft-fork/
-
[[[10]]] https://blog.ethereum.org/2016/07/15/to-fork-or-not-to-fork/
-
[[[11]]] https://etherscan.io/block/1894000
-
[[[12]]] https://elaineou.com/2016/07/18/stick-a-fork-in-ethereum/
-
[[[13]]] https://etherscan.io/block/1920000
-
[[[14]]] https://blog.ethereum.org/2016/07/20/hard-fork-completed/
-
[[[15]]] https://twitter.com/poloniex/status/757068619234803712
-
[[[16]]] https://blog.slock.it/deja-vu-dao-smart-contracts-audit-results-d26bc088e32e
-
[[[17]]] https://blog.slock.it/the-dao-creation-is-now-live-2270fd23affc
-
[[[18]]] https://gastracker.io/block/0x94365e3a8c0b35089c1d1195081fe7489b528a84b22199c916180db8b28ade7f
-
[[[20]]] https://medium.com/@jackfru1t/the-robin-hood-group-and-etc-bdc6a0c111c3
-
[[[23]]] https://web.archive.org/web/20160429141714/https://daohub.org/explainer.html/
-
[[[24]]] https://ethereumclassic.github.io/blog/2016-12-12-TeamGrothendieck/