forked from DecentralizedClimateFoundation/DCIPs
202 lines
12 KiB
Markdown
202 lines
12 KiB
Markdown
---
|
|
eip: 779
|
|
title: "Hardfork Meta: DAO Fork"
|
|
author: Casey Detrio (@cdetrio)
|
|
type: Meta
|
|
status: Final
|
|
created: 2017-11-26
|
|
requires: 606
|
|
---
|
|
|
|
## Abstract
|
|
|
|
This documents the changes included in the hard fork named "DAO Fork". Unlike other hard forks, the DAO Fork did not change the protocol; all EVM opcodes, transaction format, block structure, and so on remained the same. Rather, the DAO Fork was an "irregular state change" that transferred ether balances from a list of accounts ("child DAO" contracts) into a specified account (the "WithdrawDAO" contract).
|
|
|
|
## Specification
|
|
|
|
- Codename: DAO Fork
|
|
- Activation:
|
|
- Block == 1,920,000 on Mainnet
|
|
|
|
See references [1] and [2] for the original, full specification. It is summarized here for convenience.
|
|
|
|
At block 1880000, the following accounts are encoded into a list `L`:
|
|
* The DAO (`0xbb9bc244d798123fde783fcc1c72d3bb8c189413`)
|
|
* its extraBalance (`0x807640a13483f8ac783c557fcdf27be11ea4ac7a`)
|
|
* all children of the DAO creator (`0x4a574510c7014e4ae985403536074abe582adfc8`)
|
|
* and the extraBalance of each child
|
|
|
|
<details>
|
|
<summary>Reference list L</summary>
|
|
|
|
```
|
|
0xd4fe7bc31cedb7bfb8a345f31e668033056b2728,
|
|
0xb3fb0e5aba0e20e5c49d252dfd30e102b171a425,
|
|
0x2c19c7f9ae8b751e37aeb2d93a699722395ae18f,
|
|
0xecd135fa4f61a655311e86238c92adcd779555d2,
|
|
0x1975bd06d486162d5dc297798dfc41edd5d160a7,
|
|
0xa3acf3a1e16b1d7c315e23510fdd7847b48234f6,
|
|
0x319f70bab6845585f412ec7724b744fec6095c85,
|
|
0x06706dd3f2c9abf0a21ddcc6941d9b86f0596936,
|
|
0x5c8536898fbb74fc7445814902fd08422eac56d0,
|
|
0x6966ab0d485353095148a2155858910e0965b6f9,
|
|
0x779543a0491a837ca36ce8c635d6154e3c4911a6,
|
|
0x2a5ed960395e2a49b1c758cef4aa15213cfd874c,
|
|
0x5c6e67ccd5849c0d29219c4f95f1a7a93b3f5dc5,
|
|
0x9c50426be05db97f5d64fc54bf89eff947f0a321,
|
|
0x200450f06520bdd6c527622a273333384d870efb,
|
|
0xbe8539bfe837b67d1282b2b1d61c3f723966f049,
|
|
0x6b0c4d41ba9ab8d8cfb5d379c69a612f2ced8ecb,
|
|
0xf1385fb24aad0cd7432824085e42aff90886fef5,
|
|
0xd1ac8b1ef1b69ff51d1d401a476e7e612414f091,
|
|
0x8163e7fb499e90f8544ea62bbf80d21cd26d9efd,
|
|
0x51e0ddd9998364a2eb38588679f0d2c42653e4a6,
|
|
0x627a0a960c079c21c34f7612d5d230e01b4ad4c7,
|
|
0xf0b1aa0eb660754448a7937c022e30aa692fe0c5,
|
|
0x24c4d950dfd4dd1902bbed3508144a54542bba94,
|
|
0x9f27daea7aca0aa0446220b98d028715e3bc803d,
|
|
0xa5dc5acd6a7968a4554d89d65e59b7fd3bff0f90,
|
|
0xd9aef3a1e38a39c16b31d1ace71bca8ef58d315b,
|
|
0x63ed5a272de2f6d968408b4acb9024f4cc208ebf,
|
|
0x6f6704e5a10332af6672e50b3d9754dc460dfa4d,
|
|
0x77ca7b50b6cd7e2f3fa008e24ab793fd56cb15f6,
|
|
0x492ea3bb0f3315521c31f273e565b868fc090f17,
|
|
0x0ff30d6de14a8224aa97b78aea5388d1c51c1f00,
|
|
0x9ea779f907f0b315b364b0cfc39a0fde5b02a416,
|
|
0xceaeb481747ca6c540a000c1f3641f8cef161fa7,
|
|
0xcc34673c6c40e791051898567a1222daf90be287,
|
|
0x579a80d909f346fbfb1189493f521d7f48d52238,
|
|
0xe308bd1ac5fda103967359b2712dd89deffb7973,
|
|
0x4cb31628079fb14e4bc3cd5e30c2f7489b00960c,
|
|
0xac1ecab32727358dba8962a0f3b261731aad9723,
|
|
0x4fd6ace747f06ece9c49699c7cabc62d02211f75,
|
|
0x440c59b325d2997a134c2c7c60a8c61611212bad,
|
|
0x4486a3d68fac6967006d7a517b889fd3f98c102b,
|
|
0x9c15b54878ba618f494b38f0ae7443db6af648ba,
|
|
0x27b137a85656544b1ccb5a0f2e561a5703c6a68f,
|
|
0x21c7fdb9ed8d291d79ffd82eb2c4356ec0d81241,
|
|
0x23b75c2f6791eef49c69684db4c6c1f93bf49a50,
|
|
0x1ca6abd14d30affe533b24d7a21bff4c2d5e1f3b,
|
|
0xb9637156d330c0d605a791f1c31ba5890582fe1c,
|
|
0x6131c42fa982e56929107413a9d526fd99405560,
|
|
0x1591fc0f688c81fbeb17f5426a162a7024d430c2,
|
|
0x542a9515200d14b68e934e9830d91645a980dd7a,
|
|
0xc4bbd073882dd2add2424cf47d35213405b01324,
|
|
0x782495b7b3355efb2833d56ecb34dc22ad7dfcc4,
|
|
0x58b95c9a9d5d26825e70a82b6adb139d3fd829eb,
|
|
0x3ba4d81db016dc2890c81f3acec2454bff5aada5,
|
|
0xb52042c8ca3f8aa246fa79c3feaa3d959347c0ab,
|
|
0xe4ae1efdfc53b73893af49113d8694a057b9c0d1,
|
|
0x3c02a7bc0391e86d91b7d144e61c2c01a25a79c5,
|
|
0x0737a6b837f97f46ebade41b9bc3e1c509c85c53,
|
|
0x97f43a37f595ab5dd318fb46e7a155eae057317a,
|
|
0x52c5317c848ba20c7504cb2c8052abd1fde29d03,
|
|
0x4863226780fe7c0356454236d3b1c8792785748d,
|
|
0x5d2b2e6fcbe3b11d26b525e085ff818dae332479,
|
|
0x5f9f3392e9f62f63b8eac0beb55541fc8627f42c,
|
|
0x057b56736d32b86616a10f619859c6cd6f59092a,
|
|
0x9aa008f65de0b923a2a4f02012ad034a5e2e2192,
|
|
0x304a554a310c7e546dfe434669c62820b7d83490,
|
|
0x914d1b8b43e92723e64fd0a06f5bdb8dd9b10c79,
|
|
0x4deb0033bb26bc534b197e61d19e0733e5679784,
|
|
0x07f5c1e1bc2c93e0402f23341973a0e043f7bf8a,
|
|
0x35a051a0010aba705c9008d7a7eff6fb88f6ea7b,
|
|
0x4fa802324e929786dbda3b8820dc7834e9134a2a,
|
|
0x9da397b9e80755301a3b32173283a91c0ef6c87e,
|
|
0x8d9edb3054ce5c5774a420ac37ebae0ac02343c6,
|
|
0x0101f3be8ebb4bbd39a2e3b9a3639d4259832fd9,
|
|
0x5dc28b15dffed94048d73806ce4b7a4612a1d48f,
|
|
0xbcf899e6c7d9d5a215ab1e3444c86806fa854c76,
|
|
0x12e626b0eebfe86a56d633b9864e389b45dcb260,
|
|
0xa2f1ccba9395d7fcb155bba8bc92db9bafaeade7,
|
|
0xec8e57756626fdc07c63ad2eafbd28d08e7b0ca5,
|
|
0xd164b088bd9108b60d0ca3751da4bceb207b0782,
|
|
0x6231b6d0d5e77fe001c2a460bd9584fee60d409b,
|
|
0x1cba23d343a983e9b5cfd19496b9a9701ada385f,
|
|
0xa82f360a8d3455c5c41366975bde739c37bfeb8a,
|
|
0x9fcd2deaff372a39cc679d5c5e4de7bafb0b1339,
|
|
0x005f5cee7a43331d5a3d3eec71305925a62f34b6,
|
|
0x0e0da70933f4c7849fc0d203f5d1d43b9ae4532d,
|
|
0xd131637d5275fd1a68a3200f4ad25c71a2a9522e,
|
|
0xbc07118b9ac290e4622f5e77a0853539789effbe,
|
|
0x47e7aa56d6bdf3f36be34619660de61275420af8,
|
|
0xacd87e28b0c9d1254e868b81cba4cc20d9a32225,
|
|
0xadf80daec7ba8dcf15392f1ac611fff65d94f880,
|
|
0x5524c55fb03cf21f549444ccbecb664d0acad706,
|
|
0x40b803a9abce16f50f36a77ba41180eb90023925,
|
|
0xfe24cdd8648121a43a7c86d289be4dd2951ed49f,
|
|
0x17802f43a0137c506ba92291391a8a8f207f487d,
|
|
0x253488078a4edf4d6f42f113d1e62836a942cf1a,
|
|
0x86af3e9626fce1957c82e88cbf04ddf3a2ed7915,
|
|
0xb136707642a4ea12fb4bae820f03d2562ebff487,
|
|
0xdbe9b615a3ae8709af8b93336ce9b477e4ac0940,
|
|
0xf14c14075d6c4ed84b86798af0956deef67365b5,
|
|
0xca544e5c4687d109611d0f8f928b53a25af72448,
|
|
0xaeeb8ff27288bdabc0fa5ebb731b6f409507516c,
|
|
0xcbb9d3703e651b0d496cdefb8b92c25aeb2171f7,
|
|
0x6d87578288b6cb5549d5076a207456a1f6a63dc0,
|
|
0xb2c6f0dfbb716ac562e2d85d6cb2f8d5ee87603e,
|
|
0xaccc230e8a6e5be9160b8cdf2864dd2a001c28b6,
|
|
0x2b3455ec7fedf16e646268bf88846bd7a2319bb2,
|
|
0x4613f3bca5c44ea06337a9e439fbc6d42e501d0a,
|
|
0xd343b217de44030afaa275f54d31a9317c7f441e,
|
|
0x84ef4b2357079cd7a7c69fd7a37cd0609a679106,
|
|
0xda2fef9e4a3230988ff17df2165440f37e8b1708,
|
|
0xf4c64518ea10f995918a454158c6b61407ea345c,
|
|
0x7602b46df5390e432ef1c307d4f2c9ff6d65cc97,
|
|
0xbb9bc244d798123fde783fcc1c72d3bb8c189413,
|
|
0x807640a13483f8ac783c557fcdf27be11ea4ac7a
|
|
```
|
|
</details>
|
|
|
|
At the beginning of block 1920000, all ether throughout all accounts in `L` will be transferred to a contract deployed at `0xbf4ed7b27f1d666546e30d74d50d173d20bca754`. The contract was created from the following Solidity code (compiler version `v0.3.5-2016-07-01-48238c9`):
|
|
|
|
```solidity
|
|
// Deployed on mainnet at 0xbf4ed7b27f1d666546e30d74d50d173d20bca754
|
|
|
|
contract DAO {
|
|
function balanceOf(address addr) returns (uint);
|
|
function transferFrom(address from, address to, uint balance) returns (bool);
|
|
uint public totalSupply;
|
|
}
|
|
|
|
contract WithdrawDAO {
|
|
DAO constant public mainDAO = DAO(0xbb9bc244d798123fde783fcc1c72d3bb8c189413);
|
|
address public trustee = 0xda4a4626d3e16e094de3225a751aab7128e96526;
|
|
|
|
function withdraw(){
|
|
uint balance = mainDAO.balanceOf(msg.sender);
|
|
|
|
if (!mainDAO.transferFrom(msg.sender, this, balance) || !msg.sender.send(balance))
|
|
throw;
|
|
}
|
|
|
|
function trusteeWithdraw() {
|
|
trustee.send((this.balance + mainDAO.balanceOf(this)) - mainDAO.totalSupply());
|
|
}
|
|
}
|
|
```
|
|
|
|
This contract is deployed on Mainnet in block 1883496 in transaction hash `0xfeae1ff3cf9b6927d607744e3883ea105fb16042d4639857d9cfce3eba644286`. The deployment code of the contract is:
|
|
|
|
```
|
|
0x606060405273da4a4626d3e16e094de3225a751aab7128e96526600060006101000a81548173ffffffffffffffffffffffffffffffffffffffff02191690830217905550610462806100516000396000f360606040526000357c0100000000000000000000000000000000000000000000000000000000900480632e6e504a1461005a5780633ccfd60b14610069578063eedcf50a14610078578063fdf97cb2146100b157610058565b005b61006760048050506100ea565b005b6100766004805050610277565b005b6100856004805050610424565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6100be600480505061043c565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073bb9bc244d798123fde783fcc1c72d3bb8c18941373ffffffffffffffffffffffffffffffffffffffff166318160ddd604051817c01000000000000000000000000000000000000000000000000000000000281526004018090506020604051808303816000876161da5a03f115610002575050506040518051906020015073bb9bc244d798123fde783fcc1c72d3bb8c18941373ffffffffffffffffffffffffffffffffffffffff166370a0823130604051827c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1681526020019150506020604051808303816000876161da5a03f11561000257505050604051805190602001503073ffffffffffffffffffffffffffffffffffffffff16310103604051809050600060405180830381858888f19350505050505b565b600073bb9bc244d798123fde783fcc1c72d3bb8c18941373ffffffffffffffffffffffffffffffffffffffff166370a0823133604051827c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1681526020019150506020604051808303816000876161da5a03f1156100025750505060405180519060200150905073bb9bc244d798123fde783fcc1c72d3bb8c18941373ffffffffffffffffffffffffffffffffffffffff166323b872dd333084604051847c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200193505050506020604051808303816000876161da5a03f1156100025750505060405180519060200150158061041657503373ffffffffffffffffffffffffffffffffffffffff16600082604051809050600060405180830381858888f19350505050155b1561042057610002565b5b50565b73bb9bc244d798123fde783fcc1c72d3bb8c18941381565b600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168156
|
|
```
|
|
|
|
This deployment results in the runtime bytecode:
|
|
|
|
```
|
|
0x60606040526000357c0100000000000000000000000000000000000000000000000000000000900480632e6e504a1461005a5780633ccfd60b14610069578063eedcf50a14610078578063fdf97cb2146100b157610058565b005b61006760048050506100ea565b005b6100766004805050610277565b005b6100856004805050610424565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6100be600480505061043c565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073bb9bc244d798123fde783fcc1c72d3bb8c18941373ffffffffffffffffffffffffffffffffffffffff166318160ddd604051817c01000000000000000000000000000000000000000000000000000000000281526004018090506020604051808303816000876161da5a03f115610002575050506040518051906020015073bb9bc244d798123fde783fcc1c72d3bb8c18941373ffffffffffffffffffffffffffffffffffffffff166370a0823130604051827c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1681526020019150506020604051808303816000876161da5a03f11561000257505050604051805190602001503073ffffffffffffffffffffffffffffffffffffffff16310103604051809050600060405180830381858888f19350505050505b565b600073bb9bc244d798123fde783fcc1c72d3bb8c18941373ffffffffffffffffffffffffffffffffffffffff166370a0823133604051827c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1681526020019150506020604051808303816000876161da5a03f1156100025750505060405180519060200150905073bb9bc244d798123fde783fcc1c72d3bb8c18941373ffffffffffffffffffffffffffffffffffffffff166323b872dd333084604051847c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200193505050506020604051808303816000876161da5a03f1156100025750505060405180519060200150158061041657503373ffffffffffffffffffffffffffffffffffffffff16600082604051809050600060405180830381858888f19350505050155b1561042057610002565b5b50565b73bb9bc244d798123fde783fcc1c72d3bb8c18941381565b600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168156
|
|
```
|
|
|
|
Blocks with block numbers in the range [1_920_000, 1_920_009] **MUST** have `0x64616f2d686172642d666f726b` (hex encoded ASCII string `dao-hard-fork`) in the `extraData` field of the block.
|
|
|
|
## References
|
|
|
|
1. https://blog.slock.it/hard-fork-specification-24b889e70703
|
|
2. https://blog.ethereum.org/2016/07/15/to-fork-or-not-to-fork/
|
|
|
|
## Copyright
|
|
|
|
Copyright and related rights waived via [CC0](../LICENSE.md).
|