Browse Source

cmd, core, eth, miner, params, tests: finalize the DAO fork

Péter Szilágyi 9 years ago
parent
commit
2c2e389b77

+ 3 - 3
cmd/geth/dao_test.go

@@ -83,7 +83,7 @@ var daoGenesisForkBlock = big.NewInt(314)
 // Tests that the DAO hard-fork number and the nodes support/opposition is correctly
 // set in the database after various initialization procedures and invocations.
 func TestDAODefaultMainnet(t *testing.T) {
-	testDAOForkBlockNewChain(t, false, "", [][2]bool{{false, false}}, params.MainNetDAOForkBlock, false)
+	testDAOForkBlockNewChain(t, false, "", [][2]bool{{false, false}}, params.MainNetDAOForkBlock, true)
 }
 func TestDAOSupportMainnet(t *testing.T) {
 	testDAOForkBlockNewChain(t, false, "", [][2]bool{{true, false}}, params.MainNetDAOForkBlock, true)
@@ -98,7 +98,7 @@ func TestDAOSwitchToOpposeMainnet(t *testing.T) {
 	testDAOForkBlockNewChain(t, false, "", [][2]bool{{true, false}, {false, true}}, params.MainNetDAOForkBlock, false)
 }
 func TestDAODefaultTestnet(t *testing.T) {
-	testDAOForkBlockNewChain(t, true, "", [][2]bool{{false, false}}, params.TestNetDAOForkBlock, false)
+	testDAOForkBlockNewChain(t, true, "", [][2]bool{{false, false}}, params.TestNetDAOForkBlock, true)
 }
 func TestDAOSupportTestnet(t *testing.T) {
 	testDAOForkBlockNewChain(t, true, "", [][2]bool{{true, false}}, params.TestNetDAOForkBlock, true)
@@ -116,7 +116,7 @@ func TestDAOInitOldPrivnet(t *testing.T) {
 	testDAOForkBlockNewChain(t, false, daoOldGenesis, [][2]bool{}, nil, false)
 }
 func TestDAODefaultOldPrivnet(t *testing.T) {
-	testDAOForkBlockNewChain(t, false, daoOldGenesis, [][2]bool{{false, false}}, params.MainNetDAOForkBlock, false)
+	testDAOForkBlockNewChain(t, false, daoOldGenesis, [][2]bool{{false, false}}, params.MainNetDAOForkBlock, true)
 }
 func TestDAOSupportOldPrivnet(t *testing.T) {
 	testDAOForkBlockNewChain(t, false, daoOldGenesis, [][2]bool{{true, false}}, params.MainNetDAOForkBlock, true)

+ 5 - 4
cmd/utils/flags.go

@@ -814,17 +814,18 @@ func MustMakeChainConfigFromDb(ctx *cli.Context, db ethdb.Database) *core.ChainC
 	// Set any missing fields due to them being unset or system upgrade
 	if config.HomesteadBlock == nil {
 		if ctx.GlobalBool(TestNetFlag.Name) {
-			config.HomesteadBlock = new(big.Int).Set(params.TestNetHomesteadBlock)
+			config.HomesteadBlock = params.TestNetHomesteadBlock
 		} else {
-			config.HomesteadBlock = new(big.Int).Set(params.MainNetHomesteadBlock)
+			config.HomesteadBlock = params.MainNetHomesteadBlock
 		}
 	}
 	if config.DAOForkBlock == nil {
 		if ctx.GlobalBool(TestNetFlag.Name) {
-			config.DAOForkBlock = new(big.Int).Set(params.TestNetDAOForkBlock)
+			config.DAOForkBlock = params.TestNetDAOForkBlock
 		} else {
-			config.DAOForkBlock = new(big.Int).Set(params.MainNetDAOForkBlock)
+			config.DAOForkBlock = params.MainNetDAOForkBlock
 		}
+		config.DAOForkSupport = true
 	}
 	// Force override any existing configs if explicitly requested
 	switch {

+ 1 - 28
core/block_validator.go

@@ -17,7 +17,6 @@
 package core
 
 import (
-	"bytes"
 	"fmt"
 	"math/big"
 	"time"
@@ -249,33 +248,7 @@ func ValidateHeader(config *ChainConfig, pow pow.PoW, header *types.Header, pare
 		}
 	}
 	// If all checks passed, validate the extra-data field for hard forks
-	return ValidateHeaderExtraData(config, header)
-}
-
-// ValidateHeaderExtraData validates the extra-data field of a block header to
-// ensure it conforms to hard-fork rules.
-func ValidateHeaderExtraData(config *ChainConfig, header *types.Header) error {
-	// DAO hard-fork extension to the header validity: a) if the node is no-fork,
-	// do not accept blocks in the [fork, fork+10) range with the fork specific
-	// extra-data set; b) if the node is pro-fork, require blocks in the specific
-	// range to have the unique extra-data set.
-	if daoBlock := config.DAOForkBlock; daoBlock != nil {
-		// Check whether the block is among the fork extra-override range
-		limit := new(big.Int).Add(daoBlock, params.DAOForkExtraRange)
-		if daoBlock.Cmp(header.Number) <= 0 && header.Number.Cmp(limit) < 0 {
-			// Depending whether we support or oppose the fork, verrift the extra-data contents
-			if config.DAOForkSupport {
-				if bytes.Compare(header.Extra, params.DAOForkBlockExtra) != 0 {
-					return ValidationError("DAO pro-fork bad block extra-data: 0x%x", header.Extra)
-				}
-			} else {
-				if bytes.Compare(header.Extra, params.DAOForkBlockExtra) == 0 {
-					return ValidationError("DAO no-fork bad block extra-data: 0x%x", header.Extra)
-				}
-			}
-		}
-	}
-	return nil
+	return ValidateDAOHeaderExtraData(config, header)
 }
 
 // CalcDifficulty is the difficulty adjustment algorithm. It returns

+ 74 - 0
core/dao.go

@@ -0,0 +1,74 @@
+// Copyright 2016 The go-ethereum Authors
+// This file is part of the go-ethereum library.
+//
+// The go-ethereum library is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Lesser General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// The go-ethereum library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
+
+package core
+
+import (
+	"bytes"
+	"math/big"
+
+	"github.com/ethereum/go-ethereum/core/state"
+	"github.com/ethereum/go-ethereum/core/types"
+	"github.com/ethereum/go-ethereum/params"
+)
+
+// ValidateDAOHeaderExtraData validates the extra-data field of a block header to
+// ensure it conforms to DAO hard-fork rules.
+//
+// DAO hard-fork extension to the header validity:
+//   a) if the node is no-fork, do not accept blocks in the [fork, fork+10) range
+//      with the fork specific extra-data set
+//   b) if the node is pro-fork, require blocks in the specific range to have the
+//      unique extra-data set.
+func ValidateDAOHeaderExtraData(config *ChainConfig, header *types.Header) error {
+	// Short circuit validation if the node doesn't care about the DAO fork
+	if config.DAOForkBlock == nil {
+		return nil
+	}
+	// Make sure the block is within the fork's modified extra-data range
+	limit := new(big.Int).Add(config.DAOForkBlock, params.DAOForkExtraRange)
+	if header.Number.Cmp(config.DAOForkBlock) < 0 || header.Number.Cmp(limit) >= 0 {
+		return nil
+	}
+	// Depending whether we support or oppose the fork, validate the extra-data contents
+	if config.DAOForkSupport {
+		if bytes.Compare(header.Extra, params.DAOForkBlockExtra) != 0 {
+			return ValidationError("DAO pro-fork bad block extra-data: 0x%x", header.Extra)
+		}
+	} else {
+		if bytes.Compare(header.Extra, params.DAOForkBlockExtra) == 0 {
+			return ValidationError("DAO no-fork bad block extra-data: 0x%x", header.Extra)
+		}
+	}
+	// All ok, header has the same extra-data we expect
+	return nil
+}
+
+// ApplyDAOHardFork modifies the state database according to the DAO hard-fork
+// rules, transferring all balances of a set of DAO accounts to a single refund
+// contract.
+func ApplyDAOHardFork(statedb *state.StateDB) {
+	// Retrieve the contract to refund balances into
+	refund := statedb.GetOrNewStateObject(params.DAORefundContract)
+
+	// Move every DAO account and extra-balance account funds into the refund contract
+	for _, addr := range params.DAODrainList {
+		if account := statedb.GetStateObject(addr); account != nil {
+			refund.AddBalance(account.Balance())
+			account.SetBalance(new(big.Int))
+		}
+	}
+}

+ 0 - 17
core/state_processor.go

@@ -25,7 +25,6 @@ import (
 	"github.com/ethereum/go-ethereum/crypto"
 	"github.com/ethereum/go-ethereum/logger"
 	"github.com/ethereum/go-ethereum/logger/glog"
-	"github.com/ethereum/go-ethereum/params"
 )
 
 var (
@@ -134,19 +133,3 @@ func AccumulateRewards(statedb *state.StateDB, header *types.Header, uncles []*t
 	}
 	statedb.AddBalance(header.Coinbase, reward)
 }
-
-// ApplyDAOHardFork modifies the state database according to the DAO hard-fork
-// rules, transferring all balances of a set of DAO accounts to a single refund
-// contract.
-func ApplyDAOHardFork(statedb *state.StateDB) {
-	// Retrieve the contract to refund balances into
-	refund := statedb.GetOrNewStateObject(params.DAORefundContract)
-
-	// Move every DAO account and extra-balance account funds into the refund contract
-	for _, addr := range params.DAODrainList {
-		if account := statedb.GetStateObject(addr); account != nil {
-			refund.AddBalance(account.Balance())
-			account.SetBalance(new(big.Int))
-		}
-	}
-}

+ 4 - 4
eth/handler.go

@@ -513,7 +513,7 @@ func (pm *ProtocolManager) handleMsg(p *peer) error {
 			}
 			// If we're seemingly on the same chain, disable the drop timer
 			if verifyDAO {
-				glog.V(logger.Info).Infof("%v: seems to be on the same side of the DAO fork", p)
+				glog.V(logger.Debug).Infof("%v: seems to be on the same side of the DAO fork", p)
 				p.forkDrop.Stop()
 				p.forkDrop = nil
 				return nil
@@ -529,11 +529,11 @@ func (pm *ProtocolManager) handleMsg(p *peer) error {
 				p.forkDrop = nil
 
 				// Validate the header and either drop the peer or continue
-				if err := core.ValidateHeaderExtraData(pm.chainconfig, headers[0]); err != nil {
-					glog.V(logger.Info).Infof("%v: verified to be on the other side of the DAO fork, dropping", p)
+				if err := core.ValidateDAOHeaderExtraData(pm.chainconfig, headers[0]); err != nil {
+					glog.V(logger.Debug).Infof("%v: verified to be on the other side of the DAO fork, dropping", p)
 					return err
 				}
-				glog.V(logger.Info).Infof("%v: verified to be on the same side of the DAO fork", p)
+				glog.V(logger.Debug).Infof("%v: verified to be on the same side of the DAO fork", p)
 			}
 			// Irrelevant of the fork checks, send the header to the fetcher just in case
 			headers = pm.fetcher.FilterHeaders(headers, time.Now())

+ 1 - 1
miner/worker.go

@@ -474,7 +474,7 @@ func (self *worker) commitNewWork() {
 	if daoBlock := self.config.DAOForkBlock; daoBlock != nil {
 		// Check whether the block is among the fork extra-override range
 		limit := new(big.Int).Add(daoBlock, params.DAOForkExtraRange)
-		if daoBlock.Cmp(header.Number) <= 0 && header.Number.Cmp(limit) < 0 {
+		if header.Number.Cmp(daoBlock) >= 0 && header.Number.Cmp(limit) < 0 {
 			// Depending whether we support or oppose the fork, override differently
 			if self.config.DAOForkSupport {
 				header.Extra = common.CopyBytes(params.DAOForkBlockExtra)

+ 418 - 0
params/dao.go

@@ -0,0 +1,418 @@
+// Copyright 2016 The go-ethereum Authors
+// This file is part of the go-ethereum library.
+//
+// The go-ethereum library is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Lesser General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// The go-ethereum library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
+
+package params
+
+import (
+	"encoding/json"
+	"fmt"
+	"math/big"
+
+	"github.com/ethereum/go-ethereum/common"
+)
+
+// TestNetDAOForkBlock is the block number where the DAO hard-fork commences on
+// the Ethereum test network. It's enforced nil since it was decided not to do a
+// testnet transition.
+var TestNetDAOForkBlock *big.Int
+
+// MainNetDAOForkBlock is the block number where the DAO hard-fork commences on
+// the Ethereum main network.
+var MainNetDAOForkBlock = big.NewInt(1920000)
+
+// DAOForkBlockExtra is the block header extra-data field to set for the DAO fork
+// point and a number of consecutive blocks to allow fast/light syncers to correctly
+// pick the side they want  ("dao-hard-fork").
+var DAOForkBlockExtra = common.FromHex("0x64616f2d686172642d666f726b")
+
+// DAOForkExtraRange is the number of consecutive blocks from the DAO fork point
+// to override the extra-data in to prevent no-fork attacks.
+var DAOForkExtraRange = big.NewInt(10)
+
+// DAORefundContract is the address of the refund contract to send DAO balances to.
+var DAORefundContract = common.HexToAddress("0xbf4ed7b27f1d666546e30d74d50d173d20bca754")
+
+// DAODrainList is the list of accounts whose full balances will be moved into a
+// refund contract at the beginning of the dao-fork block.
+var DAODrainList []common.Address
+
+func init() {
+	// Parse the list of DAO accounts to drain
+	var list []map[string]string
+	if err := json.Unmarshal([]byte(daoDrainListJSON), &list); err != nil {
+		panic(fmt.Errorf("Failed to parse DAO drain list: %v", err))
+	}
+	// Collect all the accounts that need draining
+	for _, dao := range list {
+		DAODrainList = append(DAODrainList, common.HexToAddress(dao["address"]))
+		DAODrainList = append(DAODrainList, common.HexToAddress(dao["extraBalanceAccount"]))
+	}
+}
+
+// daoDrainListJSON is the JSON encoded list of accounts whose full balances will
+// be moved into a refund contract at the beginning of the dao-fork block.
+const daoDrainListJSON = `
+[
+   {
+      "address":"0xd4fe7bc31cedb7bfb8a345f31e668033056b2728",
+      "balance":"186cc8bfaefb7be",
+      "extraBalance":"0",
+      "extraBalanceAccount":"0xb3fb0e5aba0e20e5c49d252dfd30e102b171a425"
+   },
+   {
+      "address":"0x2c19c7f9ae8b751e37aeb2d93a699722395ae18f",
+      "balance":"b14e8feab1ff435",
+      "extraBalance":"0",
+      "extraBalanceAccount":"0xecd135fa4f61a655311e86238c92adcd779555d2"
+   },
+   {
+      "address":"0x1975bd06d486162d5dc297798dfc41edd5d160a7",
+      "balance":"359d26614cb5070c77",
+      "extraBalance":"0",
+      "extraBalanceAccount":"0xa3acf3a1e16b1d7c315e23510fdd7847b48234f6"
+   },
+   {
+      "address":"0x319f70bab6845585f412ec7724b744fec6095c85",
+      "balance":"6e075cd846d2cb1d42",
+      "extraBalance":"13d34fd41b545b81",
+      "extraBalanceAccount":"0x06706dd3f2c9abf0a21ddcc6941d9b86f0596936"
+   },
+   {
+      "address":"0x5c8536898fbb74fc7445814902fd08422eac56d0",
+      "balance":"b1e5593558008fd78",
+      "extraBalance":"0",
+      "extraBalanceAccount":"0x6966ab0d485353095148a2155858910e0965b6f9"
+   },
+   {
+      "address":"0x779543a0491a837ca36ce8c635d6154e3c4911a6",
+      "balance":"392eaa20d1aad59a4c",
+      "extraBalance":"426938826a96c9",
+      "extraBalanceAccount":"0x2a5ed960395e2a49b1c758cef4aa15213cfd874c"
+   },
+   {
+      "address":"0x5c6e67ccd5849c0d29219c4f95f1a7a93b3f5dc5",
+      "balance":"2875d22b29793d4ba7",
+      "extraBalance":"0",
+      "extraBalanceAccount":"0x9c50426be05db97f5d64fc54bf89eff947f0a321"
+   },
+   {
+      "address":"0x200450f06520bdd6c527622a273333384d870efb",
+      "balance":"43c341d9f96954c049",
+      "extraBalance":"0",
+      "extraBalanceAccount":"0xbe8539bfe837b67d1282b2b1d61c3f723966f049"
+   },
+   {
+      "address":"0x6b0c4d41ba9ab8d8cfb5d379c69a612f2ced8ecb",
+      "balance":"75251057154d70fa816",
+      "extraBalance":"0",
+      "extraBalanceAccount":"0xf1385fb24aad0cd7432824085e42aff90886fef5"
+   },
+   {
+      "address":"0xd1ac8b1ef1b69ff51d1d401a476e7e612414f091",
+      "balance":"392409769296cf67f36",
+      "extraBalance":"0",
+      "extraBalanceAccount":"0x8163e7fb499e90f8544ea62bbf80d21cd26d9efd"
+   },
+   {
+      "address":"0x51e0ddd9998364a2eb38588679f0d2c42653e4a6",
+      "balance":"8ac72eccbf4e8083",
+      "extraBalance":"0",
+      "extraBalanceAccount":"0x627a0a960c079c21c34f7612d5d230e01b4ad4c7"
+   },
+   {
+      "address":"0xf0b1aa0eb660754448a7937c022e30aa692fe0c5",
+      "balance":"82289c3bb3e8c98799",
+      "extraBalance":"0",
+      "extraBalanceAccount":"0x24c4d950dfd4dd1902bbed3508144a54542bba94"
+   },
+   {
+      "address":"0x9f27daea7aca0aa0446220b98d028715e3bc803d",
+      "balance":"56bc29049ebed40fd",
+      "extraBalance":"0",
+      "extraBalanceAccount":"0xa5dc5acd6a7968a4554d89d65e59b7fd3bff0f90"
+   },
+   {
+      "address":"0xd9aef3a1e38a39c16b31d1ace71bca8ef58d315b",
+      "balance":"56bc7d3ff79110524",
+      "extraBalance":"0",
+      "extraBalanceAccount":"0x63ed5a272de2f6d968408b4acb9024f4cc208ebf"
+   },
+   {
+      "address":"0x6f6704e5a10332af6672e50b3d9754dc460dfa4d",
+      "balance":"23b651bd48cbc70cc",
+      "extraBalance":"0",
+      "extraBalanceAccount":"0x77ca7b50b6cd7e2f3fa008e24ab793fd56cb15f6"
+   },
+   {
+      "address":"0x492ea3bb0f3315521c31f273e565b868fc090f17",
+      "balance":"13ea6d4fee651dd7c9",
+      "extraBalance":"0",
+      "extraBalanceAccount":"0x0ff30d6de14a8224aa97b78aea5388d1c51c1f00"
+   },
+   {
+      "address":"0x9ea779f907f0b315b364b0cfc39a0fde5b02a416",
+      "balance":"35ac471a3836ae7de5a",
+      "extraBalance":"0",
+      "extraBalanceAccount":"0xceaeb481747ca6c540a000c1f3641f8cef161fa7"
+   },
+   {
+      "address":"0xcc34673c6c40e791051898567a1222daf90be287",
+      "balance":"d529c0b76b7aa0",
+      "extraBalance":"0",
+      "extraBalanceAccount":"0x579a80d909f346fbfb1189493f521d7f48d52238"
+   },
+   {
+      "address":"0xe308bd1ac5fda103967359b2712dd89deffb7973",
+      "balance":"5cd9e7df3a8e5cdd3",
+      "extraBalance":"0",
+      "extraBalanceAccount":"0x4cb31628079fb14e4bc3cd5e30c2f7489b00960c"
+   },
+   {
+      "address":"0xac1ecab32727358dba8962a0f3b261731aad9723",
+      "balance":"2c8442fe35363313b93",
+      "extraBalance":"0",
+      "extraBalanceAccount":"0x4fd6ace747f06ece9c49699c7cabc62d02211f75"
+   },
+   {
+      "address":"0x440c59b325d2997a134c2c7c60a8c61611212bad",
+      "balance":"e77583a3958130e53",
+      "extraBalance":"0",
+      "extraBalanceAccount":"0x4486a3d68fac6967006d7a517b889fd3f98c102b"
+   },
+   {
+      "address":"0x9c15b54878ba618f494b38f0ae7443db6af648ba",
+      "balance":"1f0b6ade348ca998",
+      "extraBalance":"0",
+      "extraBalanceAccount":"0x27b137a85656544b1ccb5a0f2e561a5703c6a68f"
+   },
+   {
+      "address":"0x21c7fdb9ed8d291d79ffd82eb2c4356ec0d81241",
+      "balance":"61725880736659",
+      "extraBalance":"0",
+      "extraBalanceAccount":"0x23b75c2f6791eef49c69684db4c6c1f93bf49a50"
+   },
+   {
+      "address":"0x1ca6abd14d30affe533b24d7a21bff4c2d5e1f3b",
+      "balance":"42948d8dc7ddbc22d",
+      "extraBalance":"0",
+      "extraBalanceAccount":"0xb9637156d330c0d605a791f1c31ba5890582fe1c"
+   },
+   {
+      "address":"0x6131c42fa982e56929107413a9d526fd99405560",
+      "balance":"7306683851d1eafbfa",
+      "extraBalance":"0",
+      "extraBalanceAccount":"0x1591fc0f688c81fbeb17f5426a162a7024d430c2"
+   },
+   {
+      "address":"0x542a9515200d14b68e934e9830d91645a980dd7a",
+      "balance":"2a8457d0d8432e21d0c",
+      "extraBalance":"0",
+      "extraBalanceAccount":"0xc4bbd073882dd2add2424cf47d35213405b01324"
+   },
+   {
+      "address":"0x782495b7b3355efb2833d56ecb34dc22ad7dfcc4",
+      "balance":"d8d7391feaeaa8cdb",
+      "extraBalance":"0",
+      "extraBalanceAccount":"0x58b95c9a9d5d26825e70a82b6adb139d3fd829eb"
+   },
+   {
+      "address":"0x3ba4d81db016dc2890c81f3acec2454bff5aada5",
+      "balance":"1",
+      "extraBalance":"0",
+      "extraBalanceAccount":"0xb52042c8ca3f8aa246fa79c3feaa3d959347c0ab"
+   },
+   {
+      "address":"0xe4ae1efdfc53b73893af49113d8694a057b9c0d1",
+      "balance":"456397665fa74041",
+      "extraBalance":"0",
+      "extraBalanceAccount":"0x3c02a7bc0391e86d91b7d144e61c2c01a25a79c5"
+   },
+   {
+      "address":"0x0737a6b837f97f46ebade41b9bc3e1c509c85c53",
+      "balance":"6324dcb7126ecbef",
+      "extraBalance":"0",
+      "extraBalanceAccount":"0x97f43a37f595ab5dd318fb46e7a155eae057317a"
+   },
+   {
+      "address":"0x52c5317c848ba20c7504cb2c8052abd1fde29d03",
+      "balance":"6c3419b0705c01cd0d",
+      "extraBalance":"0",
+      "extraBalanceAccount":"0x4863226780fe7c0356454236d3b1c8792785748d"
+   },
+   {
+      "address":"0x5d2b2e6fcbe3b11d26b525e085ff818dae332479",
+      "balance":"456397665fa74041",
+      "extraBalance":"0",
+      "extraBalanceAccount":"0x5f9f3392e9f62f63b8eac0beb55541fc8627f42c"
+   },
+   {
+      "address":"0x057b56736d32b86616a10f619859c6cd6f59092a",
+      "balance":"232c025bb44b46",
+      "extraBalance":"0",
+      "extraBalanceAccount":"0x9aa008f65de0b923a2a4f02012ad034a5e2e2192"
+   },
+   {
+      "address":"0x304a554a310c7e546dfe434669c62820b7d83490",
+      "balance":"3034f5ca7d45e17df199b",
+      "extraBalance":"f7d15162c44e97b6e",
+      "extraBalanceAccount":"0x914d1b8b43e92723e64fd0a06f5bdb8dd9b10c79"
+   },
+   {
+      "address":"0x4deb0033bb26bc534b197e61d19e0733e5679784",
+      "balance":"4417e96ed796591e09",
+      "extraBalance":"0",
+      "extraBalanceAccount":"0x07f5c1e1bc2c93e0402f23341973a0e043f7bf8a"
+   },
+   {
+      "address":"0x35a051a0010aba705c9008d7a7eff6fb88f6ea7b",
+      "balance":"d3ff7771412bbcc9",
+      "extraBalance":"0",
+      "extraBalanceAccount":"0x4fa802324e929786dbda3b8820dc7834e9134a2a"
+   },
+   {
+      "address":"0x9da397b9e80755301a3b32173283a91c0ef6c87e",
+      "balance":"32ae324c233816b4c2",
+      "extraBalance":"0",
+      "extraBalanceAccount":"0x8d9edb3054ce5c5774a420ac37ebae0ac02343c6"
+   },
+   {
+      "address":"0x0101f3be8ebb4bbd39a2e3b9a3639d4259832fd9",
+      "balance":"1e530695b705f037c6",
+      "extraBalance":"0",
+      "extraBalanceAccount":"0x5dc28b15dffed94048d73806ce4b7a4612a1d48f"
+   },
+   {
+      "address":"0xbcf899e6c7d9d5a215ab1e3444c86806fa854c76",
+      "balance":"68013bad5b4b1133fc5",
+      "extraBalance":"0",
+      "extraBalanceAccount":"0x12e626b0eebfe86a56d633b9864e389b45dcb260"
+   },
+   {
+      "address":"0xa2f1ccba9395d7fcb155bba8bc92db9bafaeade7",
+      "balance":"456397665fa74041",
+      "extraBalance":"0",
+      "extraBalanceAccount":"0xec8e57756626fdc07c63ad2eafbd28d08e7b0ca5"
+   },
+   {
+      "address":"0xd164b088bd9108b60d0ca3751da4bceb207b0782",
+      "balance":"3635ce47fabaaa336e",
+      "extraBalance":"0",
+      "extraBalanceAccount":"0x6231b6d0d5e77fe001c2a460bd9584fee60d409b"
+   },
+   {
+      "address":"0x1cba23d343a983e9b5cfd19496b9a9701ada385f",
+      "balance":"f3abd9906c170a",
+      "extraBalance":"0",
+      "extraBalanceAccount":"0xa82f360a8d3455c5c41366975bde739c37bfeb8a"
+   },
+   {
+      "address":"0x9fcd2deaff372a39cc679d5c5e4de7bafb0b1339",
+      "balance":"4c6679d9d9b95a4e08",
+      "extraBalance":"0",
+      "extraBalanceAccount":"0x005f5cee7a43331d5a3d3eec71305925a62f34b6"
+   },
+   {
+      "address":"0x0e0da70933f4c7849fc0d203f5d1d43b9ae4532d",
+      "balance":"40f622936475de31849",
+      "extraBalance":"671e1bbabded39754",
+      "extraBalanceAccount":"0xd131637d5275fd1a68a3200f4ad25c71a2a9522e"
+   },
+   {
+      "address":"0xbc07118b9ac290e4622f5e77a0853539789effbe",
+      "balance":"1316ccfa4a35db5e58f",
+      "extraBalance":"0",
+      "extraBalanceAccount":"0x47e7aa56d6bdf3f36be34619660de61275420af8"
+   },
+   {
+      "address":"0xacd87e28b0c9d1254e868b81cba4cc20d9a32225",
+      "balance":"b3ad6bb72000bab9f",
+      "extraBalance":"0",
+      "extraBalanceAccount":"0xadf80daec7ba8dcf15392f1ac611fff65d94f880"
+   },
+   {
+      "address":"0x5524c55fb03cf21f549444ccbecb664d0acad706",
+      "balance":"16f2da372a5c8a70967",
+      "extraBalance":"0",
+      "extraBalanceAccount":"0x40b803a9abce16f50f36a77ba41180eb90023925"
+   },
+   {
+      "address":"0xfe24cdd8648121a43a7c86d289be4dd2951ed49f",
+      "balance":"ea0b1bdc78f500a43",
+      "extraBalance":"0",
+      "extraBalanceAccount":"0x17802f43a0137c506ba92291391a8a8f207f487d"
+   },
+   {
+      "address":"0x253488078a4edf4d6f42f113d1e62836a942cf1a",
+      "balance":"3060e3aed135cc80",
+      "extraBalance":"0",
+      "extraBalanceAccount":"0x86af3e9626fce1957c82e88cbf04ddf3a2ed7915"
+   },
+   {
+      "address":"0xb136707642a4ea12fb4bae820f03d2562ebff487",
+      "balance":"6050bdeb3354b5c98adc3",
+      "extraBalance":"0",
+      "extraBalanceAccount":"0xdbe9b615a3ae8709af8b93336ce9b477e4ac0940"
+   },
+   {
+      "address":"0xf14c14075d6c4ed84b86798af0956deef67365b5",
+      "balance":"1d77844e94c25ba2",
+      "extraBalance":"0",
+      "extraBalanceAccount":"0xca544e5c4687d109611d0f8f928b53a25af72448"
+   },
+   {
+      "address":"0xaeeb8ff27288bdabc0fa5ebb731b6f409507516c",
+      "balance":"2e93a72de4fc5ec0ed",
+      "extraBalance":"0",
+      "extraBalanceAccount":"0xcbb9d3703e651b0d496cdefb8b92c25aeb2171f7"
+   },
+   {
+      "address":"0x6d87578288b6cb5549d5076a207456a1f6a63dc0",
+      "balance":"1afd340799e48c18",
+      "extraBalance":"0",
+      "extraBalanceAccount":"0xb2c6f0dfbb716ac562e2d85d6cb2f8d5ee87603e"
+   },
+   {
+      "address":"0xaccc230e8a6e5be9160b8cdf2864dd2a001c28b6",
+      "balance":"14d0944eb3be947a8",
+      "extraBalance":"0",
+      "extraBalanceAccount":"0x2b3455ec7fedf16e646268bf88846bd7a2319bb2"
+   },
+   {
+      "address":"0x4613f3bca5c44ea06337a9e439fbc6d42e501d0a",
+      "balance":"6202b236a200e365eba",
+      "extraBalance":"11979be9020f03ec4ec",
+      "extraBalanceAccount":"0xd343b217de44030afaa275f54d31a9317c7f441e"
+   },
+   {
+      "address":"0x84ef4b2357079cd7a7c69fd7a37cd0609a679106",
+      "balance":"7ed634ebbba531901e07",
+      "extraBalance":"f9c5eff28cb08720c85",
+      "extraBalanceAccount":"0xda2fef9e4a3230988ff17df2165440f37e8b1708"
+   },
+   {
+      "address":"0xf4c64518ea10f995918a454158c6b61407ea345c",
+      "balance":"39152e15508a96ff894a",
+      "extraBalance":"14041ca908bcc185c8",
+      "extraBalanceAccount":"0x7602b46df5390e432ef1c307d4f2c9ff6d65cc97"
+   },
+   {
+      "address":"0xbb9bc244d798123fde783fcc1c72d3bb8c189413",
+      "balance":"1",
+      "extraBalance":"5553ebc",
+      "extraBalanceAccount":"0x807640a13483f8ac783c557fcdf27be11ea4ac7a"
+   }
+]
+`

+ 0 - 108
params/dao_list.go

@@ -1,108 +0,0 @@
-// Copyright 2016 The go-ethereum Authors
-// This file is part of the go-ethereum library.
-//
-// The go-ethereum library is free software: you can redistribute it and/or modify
-// it under the terms of the GNU Lesser General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// The go-ethereum library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public License
-// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
-
-package params
-
-import (
-	"encoding/json"
-	"fmt"
-
-	"github.com/ethereum/go-ethereum/common"
-)
-
-// DAODrainList is the list of accounts whose full balances will be moved into a
-// refund contract at the beginning of the dao-fork block.
-var DAODrainList []common.Address
-
-func init() {
-	// Parse the list of DAO accounts to drain
-	var list []map[string]string
-	if err := json.Unmarshal([]byte(daoDrainListJSON), &list); err != nil {
-		panic(fmt.Errorf("Failed to parse DAO drain list: %v", err))
-	}
-	// Collect all the accounts that need draining
-	for _, dao := range list {
-		DAODrainList = append(DAODrainList, common.HexToAddress(dao["address"]))
-		DAODrainList = append(DAODrainList, common.HexToAddress(dao["extraBalanceAccount"]))
-	}
-}
-
-// daoDrainListJSON is the JSON encoded list of accounts whose full balances will
-// be moved into a refund contract at the beginning of the dao-fork block.
-const daoDrainListJSON = `
-[
-   {
-      "address":"0x304a554a310c7e546dfe434669c62820b7d83490",
-      "balance":"30328a3f333ac2fb5f509",
-      "extraBalance":"9184e72a000",
-      "extraBalanceAccount":"0x914d1b8b43e92723e64fd0a06f5bdb8dd9b10c79"
-   },
-   {
-      "address":"0xfe24cdd8648121a43a7c86d289be4dd2951ed49f",
-      "balance":"ea0b1bdc78f500a43",
-      "extraBalance":"0",
-      "extraBalanceAccount":"0x17802f43a0137c506ba92291391a8a8f207f487d"
-   },
-   {
-      "address":"0xb136707642a4ea12fb4bae820f03d2562ebff487",
-      "balance":"6050bdeb3354b5c98adc3",
-      "extraBalance":"0",
-      "extraBalanceAccount":"0xdbe9b615a3ae8709af8b93336ce9b477e4ac0940"
-   },
-   {
-      "address":"0xf14c14075d6c4ed84b86798af0956deef67365b5",
-      "balance":"1d77844e94c25ba2",
-      "extraBalance":"0",
-      "extraBalanceAccount":"0xca544e5c4687d109611d0f8f928b53a25af72448"
-   },
-   {
-      "address":"0xaeeb8ff27288bdabc0fa5ebb731b6f409507516c",
-      "balance":"2e93a72de4fc5ec0ed",
-      "extraBalance":"0",
-      "extraBalanceAccount":"0xcbb9d3703e651b0d496cdefb8b92c25aeb2171f7"
-   },
-   {
-      "address":"0xaccc230e8a6e5be9160b8cdf2864dd2a001c28b6",
-      "balance":"14d0944eb3be947a8",
-      "extraBalance":"0",
-      "extraBalanceAccount":"0x2b3455ec7fedf16e646268bf88846bd7a2319bb2"
-   },
-   {
-      "address":"0x4613f3bca5c44ea06337a9e439fbc6d42e501d0a",
-      "balance":"275eaa8345ced6523a8",
-      "extraBalance":"0",
-      "extraBalanceAccount":"0xd343b217de44030afaa275f54d31a9317c7f441e"
-   },
-   {
-      "address":"0x84ef4b2357079cd7a7c69fd7a37cd0609a679106",
-      "balance":"4accfbf922fd046baa05",
-      "extraBalance":"0",
-      "extraBalanceAccount":"0xda2fef9e4a3230988ff17df2165440f37e8b1708"
-   },
-   {
-      "address":"0xf4c64518ea10f995918a454158c6b61407ea345c",
-      "balance":"38d275b0ed7862ba4f13",
-      "extraBalance":"0",
-      "extraBalanceAccount":"0x7602b46df5390e432ef1c307d4f2c9ff6d65cc97"
-   },
-   {
-      "address":"0xbb9bc244d798123fde783fcc1c72d3bb8c189413",
-      "balance":"1",
-      "extraBalance":"49097c66ae78c50e4d3c",
-      "extraBalanceAccount":"0x807640a13483f8ac783c557fcdf27be11ea4ac7a"
-   }
-]
-`

+ 1 - 11
params/util.go

@@ -16,19 +16,9 @@
 
 package params
 
-import (
-	"math/big"
-
-	"github.com/ethereum/go-ethereum/common"
-)
+import "math/big"
 
 var (
 	TestNetHomesteadBlock = big.NewInt(494000)  // Testnet homestead block
 	MainNetHomesteadBlock = big.NewInt(1150000) // Mainnet homestead block
-
-	TestNetDAOForkBlock = big.NewInt(8888888)                                               // Testnet dao hard-fork block
-	MainNetDAOForkBlock = big.NewInt(9999999)                                               // Mainnet dao hard-fork block
-	DAOForkBlockExtra   = common.FromHex("0x64616f2d686172642d666f726b")                    // Block extradata to signel the fork with ("dao-hard-fork")
-	DAOForkExtraRange   = big.NewInt(10)                                                    // Number of blocks to override the extradata (prevent no-fork attacks)
-	DAORefundContract   = common.HexToAddress("0x0000000000000000000000000000000000000000") // Address of the refund contract to send DAO balances to
 )

+ 0 - 7
tests/block_test.go

@@ -20,9 +20,6 @@ import (
 	"math/big"
 	"path/filepath"
 	"testing"
-
-	"github.com/ethereum/go-ethereum/common"
-	"github.com/ethereum/go-ethereum/params"
 )
 
 func TestBcValidBlockTests(t *testing.T) {
@@ -217,10 +214,6 @@ func TestHomesteadBcState(t *testing.T) {
 
 // DAO hard-fork tests
 func TestDAOBcTheDao(t *testing.T) {
-	// Temporarilly override the hard-fork specs
-	defer func(old common.Address) { params.DAORefundContract = old }(params.DAORefundContract)
-	params.DAORefundContract = common.HexToAddress("0xabcabcabcabcabcabcabcabcabcabcabcabcabca")
-
 	err := RunBlockTest(big.NewInt(5), big.NewInt(8), filepath.Join(blockTestDir, "TestNetwork", "bcTheDaoTest.json"), BlockSkipTests)
 	if err != nil {
 		t.Fatal(err)

File diff suppressed because it is too large
+ 3949 - 236
tests/files/BlockchainTests/TestNetwork/bcTheDaoTest.json


Some files were not shown because too many files changed in this diff