ethereum.dao_fork.dao

Dao Fork ^^^^^^^^

.. contents:: Table of Contents :backlinks: none :local:

Introduction

The Dao Fork was an irregular state change that moved all Ether from a large collection of accounts (The Dao and all its children) to a recovery contract.

The recovery contract was previously created using normal contract deployment.

  1"""
  2Dao Fork
  3^^^^^^^^
  4
  5.. contents:: Table of Contents
  6    :backlinks: none
  7    :local:
  8
  9Introduction
 10------------
 11
 12The Dao Fork was an irregular state change that moved all Ether from a large
 13collection of accounts (The Dao and all its children) to a recovery contract.
 14
 15The recovery contract was previously created using normal contract deployment.
 16"""
 17
 18from .state import State, get_account, move_ether
 19from .utils.hexadecimal import hex_to_address
 20
 21DAO_ACCOUNTS = [
 22    hex_to_address(address)
 23    for address in [
 24        "0xd4fe7bc31cedb7bfb8a345f31e668033056b2728",
 25        "0xb3fb0e5aba0e20e5c49d252dfd30e102b171a425",
 26        "0x2c19c7f9ae8b751e37aeb2d93a699722395ae18f",
 27        "0xecd135fa4f61a655311e86238c92adcd779555d2",
 28        "0x1975bd06d486162d5dc297798dfc41edd5d160a7",
 29        "0xa3acf3a1e16b1d7c315e23510fdd7847b48234f6",
 30        "0x319f70bab6845585f412ec7724b744fec6095c85",
 31        "0x06706dd3f2c9abf0a21ddcc6941d9b86f0596936",
 32        "0x5c8536898fbb74fc7445814902fd08422eac56d0",
 33        "0x6966ab0d485353095148a2155858910e0965b6f9",
 34        "0x779543a0491a837ca36ce8c635d6154e3c4911a6",
 35        "0x2a5ed960395e2a49b1c758cef4aa15213cfd874c",
 36        "0x5c6e67ccd5849c0d29219c4f95f1a7a93b3f5dc5",
 37        "0x9c50426be05db97f5d64fc54bf89eff947f0a321",
 38        "0x200450f06520bdd6c527622a273333384d870efb",
 39        "0xbe8539bfe837b67d1282b2b1d61c3f723966f049",
 40        "0x6b0c4d41ba9ab8d8cfb5d379c69a612f2ced8ecb",
 41        "0xf1385fb24aad0cd7432824085e42aff90886fef5",
 42        "0xd1ac8b1ef1b69ff51d1d401a476e7e612414f091",
 43        "0x8163e7fb499e90f8544ea62bbf80d21cd26d9efd",
 44        "0x51e0ddd9998364a2eb38588679f0d2c42653e4a6",
 45        "0x627a0a960c079c21c34f7612d5d230e01b4ad4c7",
 46        "0xf0b1aa0eb660754448a7937c022e30aa692fe0c5",
 47        "0x24c4d950dfd4dd1902bbed3508144a54542bba94",
 48        "0x9f27daea7aca0aa0446220b98d028715e3bc803d",
 49        "0xa5dc5acd6a7968a4554d89d65e59b7fd3bff0f90",
 50        "0xd9aef3a1e38a39c16b31d1ace71bca8ef58d315b",
 51        "0x63ed5a272de2f6d968408b4acb9024f4cc208ebf",
 52        "0x6f6704e5a10332af6672e50b3d9754dc460dfa4d",
 53        "0x77ca7b50b6cd7e2f3fa008e24ab793fd56cb15f6",
 54        "0x492ea3bb0f3315521c31f273e565b868fc090f17",
 55        "0x0ff30d6de14a8224aa97b78aea5388d1c51c1f00",
 56        "0x9ea779f907f0b315b364b0cfc39a0fde5b02a416",
 57        "0xceaeb481747ca6c540a000c1f3641f8cef161fa7",
 58        "0xcc34673c6c40e791051898567a1222daf90be287",
 59        "0x579a80d909f346fbfb1189493f521d7f48d52238",
 60        "0xe308bd1ac5fda103967359b2712dd89deffb7973",
 61        "0x4cb31628079fb14e4bc3cd5e30c2f7489b00960c",
 62        "0xac1ecab32727358dba8962a0f3b261731aad9723",
 63        "0x4fd6ace747f06ece9c49699c7cabc62d02211f75",
 64        "0x440c59b325d2997a134c2c7c60a8c61611212bad",
 65        "0x4486a3d68fac6967006d7a517b889fd3f98c102b",
 66        "0x9c15b54878ba618f494b38f0ae7443db6af648ba",
 67        "0x27b137a85656544b1ccb5a0f2e561a5703c6a68f",
 68        "0x21c7fdb9ed8d291d79ffd82eb2c4356ec0d81241",
 69        "0x23b75c2f6791eef49c69684db4c6c1f93bf49a50",
 70        "0x1ca6abd14d30affe533b24d7a21bff4c2d5e1f3b",
 71        "0xb9637156d330c0d605a791f1c31ba5890582fe1c",
 72        "0x6131c42fa982e56929107413a9d526fd99405560",
 73        "0x1591fc0f688c81fbeb17f5426a162a7024d430c2",
 74        "0x542a9515200d14b68e934e9830d91645a980dd7a",
 75        "0xc4bbd073882dd2add2424cf47d35213405b01324",
 76        "0x782495b7b3355efb2833d56ecb34dc22ad7dfcc4",
 77        "0x58b95c9a9d5d26825e70a82b6adb139d3fd829eb",
 78        "0x3ba4d81db016dc2890c81f3acec2454bff5aada5",
 79        "0xb52042c8ca3f8aa246fa79c3feaa3d959347c0ab",
 80        "0xe4ae1efdfc53b73893af49113d8694a057b9c0d1",
 81        "0x3c02a7bc0391e86d91b7d144e61c2c01a25a79c5",
 82        "0x0737a6b837f97f46ebade41b9bc3e1c509c85c53",
 83        "0x97f43a37f595ab5dd318fb46e7a155eae057317a",
 84        "0x52c5317c848ba20c7504cb2c8052abd1fde29d03",
 85        "0x4863226780fe7c0356454236d3b1c8792785748d",
 86        "0x5d2b2e6fcbe3b11d26b525e085ff818dae332479",
 87        "0x5f9f3392e9f62f63b8eac0beb55541fc8627f42c",
 88        "0x057b56736d32b86616a10f619859c6cd6f59092a",
 89        "0x9aa008f65de0b923a2a4f02012ad034a5e2e2192",
 90        "0x304a554a310c7e546dfe434669c62820b7d83490",
 91        "0x914d1b8b43e92723e64fd0a06f5bdb8dd9b10c79",
 92        "0x4deb0033bb26bc534b197e61d19e0733e5679784",
 93        "0x07f5c1e1bc2c93e0402f23341973a0e043f7bf8a",
 94        "0x35a051a0010aba705c9008d7a7eff6fb88f6ea7b",
 95        "0x4fa802324e929786dbda3b8820dc7834e9134a2a",
 96        "0x9da397b9e80755301a3b32173283a91c0ef6c87e",
 97        "0x8d9edb3054ce5c5774a420ac37ebae0ac02343c6",
 98        "0x0101f3be8ebb4bbd39a2e3b9a3639d4259832fd9",
 99        "0x5dc28b15dffed94048d73806ce4b7a4612a1d48f",
100        "0xbcf899e6c7d9d5a215ab1e3444c86806fa854c76",
101        "0x12e626b0eebfe86a56d633b9864e389b45dcb260",
102        "0xa2f1ccba9395d7fcb155bba8bc92db9bafaeade7",
103        "0xec8e57756626fdc07c63ad2eafbd28d08e7b0ca5",
104        "0xd164b088bd9108b60d0ca3751da4bceb207b0782",
105        "0x6231b6d0d5e77fe001c2a460bd9584fee60d409b",
106        "0x1cba23d343a983e9b5cfd19496b9a9701ada385f",
107        "0xa82f360a8d3455c5c41366975bde739c37bfeb8a",
108        "0x9fcd2deaff372a39cc679d5c5e4de7bafb0b1339",
109        "0x005f5cee7a43331d5a3d3eec71305925a62f34b6",
110        "0x0e0da70933f4c7849fc0d203f5d1d43b9ae4532d",
111        "0xd131637d5275fd1a68a3200f4ad25c71a2a9522e",
112        "0xbc07118b9ac290e4622f5e77a0853539789effbe",
113        "0x47e7aa56d6bdf3f36be34619660de61275420af8",
114        "0xacd87e28b0c9d1254e868b81cba4cc20d9a32225",
115        "0xadf80daec7ba8dcf15392f1ac611fff65d94f880",
116        "0x5524c55fb03cf21f549444ccbecb664d0acad706",
117        "0x40b803a9abce16f50f36a77ba41180eb90023925",
118        "0xfe24cdd8648121a43a7c86d289be4dd2951ed49f",
119        "0x17802f43a0137c506ba92291391a8a8f207f487d",
120        "0x253488078a4edf4d6f42f113d1e62836a942cf1a",
121        "0x86af3e9626fce1957c82e88cbf04ddf3a2ed7915",
122        "0xb136707642a4ea12fb4bae820f03d2562ebff487",
123        "0xdbe9b615a3ae8709af8b93336ce9b477e4ac0940",
124        "0xf14c14075d6c4ed84b86798af0956deef67365b5",
125        "0xca544e5c4687d109611d0f8f928b53a25af72448",
126        "0xaeeb8ff27288bdabc0fa5ebb731b6f409507516c",
127        "0xcbb9d3703e651b0d496cdefb8b92c25aeb2171f7",
128        "0x6d87578288b6cb5549d5076a207456a1f6a63dc0",
129        "0xb2c6f0dfbb716ac562e2d85d6cb2f8d5ee87603e",
130        "0xaccc230e8a6e5be9160b8cdf2864dd2a001c28b6",
131        "0x2b3455ec7fedf16e646268bf88846bd7a2319bb2",
132        "0x4613f3bca5c44ea06337a9e439fbc6d42e501d0a",
133        "0xd343b217de44030afaa275f54d31a9317c7f441e",
134        "0x84ef4b2357079cd7a7c69fd7a37cd0609a679106",
135        "0xda2fef9e4a3230988ff17df2165440f37e8b1708",
136        "0xf4c64518ea10f995918a454158c6b61407ea345c",
137        "0x7602b46df5390e432ef1c307d4f2c9ff6d65cc97",
138        "0xbb9bc244d798123fde783fcc1c72d3bb8c189413",
139        "0x807640a13483f8ac783c557fcdf27be11ea4ac7a",
140    ]
141]
142
143DAO_RECOVERY = hex_to_address("0xbf4ed7b27f1d666546e30d74d50d173d20bca754")
144
145
146def apply_dao(state: State) -> None:
147    """
148    Apply the dao fork to the state.
149
150    Parameters
151    ----------
152    state :
153        State before applying the DAO Fork.
154    """
155    for address in DAO_ACCOUNTS:
156        balance = get_account(state, address).balance
157        move_ether(state, address, DAO_RECOVERY, balance)
def apply_dao(state: ethereum.dao_fork.state.State) -> None:
147def apply_dao(state: State) -> None:
148    """
149    Apply the dao fork to the state.
150
151    Parameters
152    ----------
153    state :
154        State before applying the DAO Fork.
155    """
156    for address in DAO_ACCOUNTS:
157        balance = get_account(state, address).balance
158        move_ether(state, address, DAO_RECOVERY, balance)

Apply the dao fork to the state.

Parameters

state : State before applying the DAO Fork.