diff --git a/cmd/ethtest/main.go b/cmd/ethtest/main.go index e0ad0a7ea4..71465fb55e 100644 --- a/cmd/ethtest/main.go +++ b/cmd/ethtest/main.go @@ -74,9 +74,9 @@ func runTestWithReader(test string, r io.Reader) error { var err error switch strings.ToLower(test) { case "bk", "block", "blocktest", "blockchaintest", "blocktests", "blockchaintests": - err = tests.RunBlockTestWithReader(params.MainNetHomesteadBlock, r, skipTests) + err = tests.RunBlockTestWithReader(params.MainNetHomesteadBlock, params.MainNetDAOForkBlock, r, skipTests) case "st", "state", "statetest", "statetests": - rs := tests.RuleSet{HomesteadBlock: params.MainNetHomesteadBlock} + rs := tests.RuleSet{HomesteadBlock: params.MainNetHomesteadBlock, DAOForkBlock: params.MainNetDAOForkBlock, DAOForkSupport: true} err = tests.RunStateTestWithReader(rs, r, skipTests) case "tx", "transactiontest", "transactiontests": err = tests.RunTransactionTestsWithReader(r, skipTests) diff --git a/cmd/geth/dao_test.go b/cmd/geth/dao_test.go new file mode 100644 index 0000000000..bfa0c2a035 --- /dev/null +++ b/cmd/geth/dao_test.go @@ -0,0 +1,232 @@ +// Copyright 2016 The go-ethereum Authors +// This file is part of go-ethereum. +// +// go-ethereum is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// go-ethereum 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with go-ethereum. If not, see . + +package main + +import ( + "io/ioutil" + "math/big" + "os" + "path/filepath" + "testing" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/params" +) + +// Genesis block for nodes which don't care about the DAO fork (i.e. not configured) +var daoOldGenesis = `{ + "alloc" : {}, + "coinbase" : "0x0000000000000000000000000000000000000000", + "difficulty" : "0x20000", + "extraData" : "", + "gasLimit" : "0x2fefd8", + "nonce" : "0x0000000000000042", + "mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000", + "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000", + "timestamp" : "0x00", + "config" : {} +}` + +// Genesis block for nodes which actively oppose the DAO fork +var daoNoForkGenesis = `{ + "alloc" : {}, + "coinbase" : "0x0000000000000000000000000000000000000000", + "difficulty" : "0x20000", + "extraData" : "", + "gasLimit" : "0x2fefd8", + "nonce" : "0x0000000000000042", + "mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000", + "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000", + "timestamp" : "0x00", + "config" : { + "daoForkBlock" : 314, + "daoForkSupport" : false + } +}` + +// Genesis block for nodes which actively support the DAO fork +var daoProForkGenesis = `{ + "alloc" : {}, + "coinbase" : "0x0000000000000000000000000000000000000000", + "difficulty" : "0x20000", + "extraData" : "", + "gasLimit" : "0x2fefd8", + "nonce" : "0x0000000000000042", + "mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000", + "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000", + "timestamp" : "0x00", + "config" : { + "daoForkBlock" : 314, + "daoForkSupport" : true + } +}` + +var daoGenesisHash = common.HexToHash("5e1fc79cb4ffa4739177b5408045cd5d51c6cf766133f23f7cd72ee1f8d790e0") +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) +} +func TestDAOSupportMainnet(t *testing.T) { + testDAOForkBlockNewChain(t, false, "", [][2]bool{{true, false}}, params.MainNetDAOForkBlock, true) +} +func TestDAOOpposeMainnet(t *testing.T) { + testDAOForkBlockNewChain(t, false, "", [][2]bool{{false, true}}, params.MainNetDAOForkBlock, false) +} +func TestDAOSwitchToSupportMainnet(t *testing.T) { + testDAOForkBlockNewChain(t, false, "", [][2]bool{{false, true}, {true, false}}, params.MainNetDAOForkBlock, true) +} +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) +} +func TestDAOSupportTestnet(t *testing.T) { + testDAOForkBlockNewChain(t, true, "", [][2]bool{{true, false}}, params.TestNetDAOForkBlock, true) +} +func TestDAOOpposeTestnet(t *testing.T) { + testDAOForkBlockNewChain(t, true, "", [][2]bool{{false, true}}, params.TestNetDAOForkBlock, false) +} +func TestDAOSwitchToSupportTestnet(t *testing.T) { + testDAOForkBlockNewChain(t, true, "", [][2]bool{{false, true}, {true, false}}, params.TestNetDAOForkBlock, true) +} +func TestDAOSwitchToOpposeTestnet(t *testing.T) { + testDAOForkBlockNewChain(t, true, "", [][2]bool{{true, false}, {false, true}}, params.TestNetDAOForkBlock, false) +} +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) +} +func TestDAOSupportOldPrivnet(t *testing.T) { + testDAOForkBlockNewChain(t, false, daoOldGenesis, [][2]bool{{true, false}}, params.MainNetDAOForkBlock, true) +} +func TestDAOOpposeOldPrivnet(t *testing.T) { + testDAOForkBlockNewChain(t, false, daoOldGenesis, [][2]bool{{false, true}}, params.MainNetDAOForkBlock, false) +} +func TestDAOSwitchToSupportOldPrivnet(t *testing.T) { + testDAOForkBlockNewChain(t, false, daoOldGenesis, [][2]bool{{false, true}, {true, false}}, params.MainNetDAOForkBlock, true) +} +func TestDAOSwitchToOpposeOldPrivnet(t *testing.T) { + testDAOForkBlockNewChain(t, false, daoOldGenesis, [][2]bool{{true, false}, {false, true}}, params.MainNetDAOForkBlock, false) +} +func TestDAOInitNoForkPrivnet(t *testing.T) { + testDAOForkBlockNewChain(t, false, daoNoForkGenesis, [][2]bool{}, daoGenesisForkBlock, false) +} +func TestDAODefaultNoForkPrivnet(t *testing.T) { + testDAOForkBlockNewChain(t, false, daoNoForkGenesis, [][2]bool{{false, false}}, daoGenesisForkBlock, false) +} +func TestDAOSupportNoForkPrivnet(t *testing.T) { + testDAOForkBlockNewChain(t, false, daoNoForkGenesis, [][2]bool{{true, false}}, daoGenesisForkBlock, true) +} +func TestDAOOpposeNoForkPrivnet(t *testing.T) { + testDAOForkBlockNewChain(t, false, daoNoForkGenesis, [][2]bool{{false, true}}, daoGenesisForkBlock, false) +} +func TestDAOSwitchToSupportNoForkPrivnet(t *testing.T) { + testDAOForkBlockNewChain(t, false, daoNoForkGenesis, [][2]bool{{false, true}, {true, false}}, daoGenesisForkBlock, true) +} +func TestDAOSwitchToOpposeNoForkPrivnet(t *testing.T) { + testDAOForkBlockNewChain(t, false, daoNoForkGenesis, [][2]bool{{true, false}, {false, true}}, daoGenesisForkBlock, false) +} +func TestDAOInitProForkPrivnet(t *testing.T) { + testDAOForkBlockNewChain(t, false, daoProForkGenesis, [][2]bool{}, daoGenesisForkBlock, true) +} +func TestDAODefaultProForkPrivnet(t *testing.T) { + testDAOForkBlockNewChain(t, false, daoProForkGenesis, [][2]bool{{false, false}}, daoGenesisForkBlock, true) +} +func TestDAOSupportProForkPrivnet(t *testing.T) { + testDAOForkBlockNewChain(t, false, daoProForkGenesis, [][2]bool{{true, false}}, daoGenesisForkBlock, true) +} +func TestDAOOpposeProForkPrivnet(t *testing.T) { + testDAOForkBlockNewChain(t, false, daoProForkGenesis, [][2]bool{{false, true}}, daoGenesisForkBlock, false) +} +func TestDAOSwitchToSupportProForkPrivnet(t *testing.T) { + testDAOForkBlockNewChain(t, false, daoProForkGenesis, [][2]bool{{false, true}, {true, false}}, daoGenesisForkBlock, true) +} +func TestDAOSwitchToOpposeProForkPrivnet(t *testing.T) { + testDAOForkBlockNewChain(t, false, daoProForkGenesis, [][2]bool{{true, false}, {false, true}}, daoGenesisForkBlock, false) +} + +func testDAOForkBlockNewChain(t *testing.T, testnet bool, genesis string, votes [][2]bool, expectBlock *big.Int, expectVote bool) { + // Create a temporary data directory to use and inspect later + datadir := tmpdir(t) + defer os.RemoveAll(datadir) + + // Start a Geth instance with the requested flags set and immediately terminate + if genesis != "" { + json := filepath.Join(datadir, "genesis.json") + if err := ioutil.WriteFile(json, []byte(genesis), 0600); err != nil { + t.Fatalf("failed to write genesis file: %v", err) + } + runGeth(t, "--datadir", datadir, "init", json).cmd.Wait() + } + for _, vote := range votes { + args := []string{"--port", "0", "--maxpeers", "0", "--nodiscover", "--nat", "none", "--ipcdisable", "--datadir", datadir} + if testnet { + args = append(args, "--testnet") + } + if vote[0] { + args = append(args, "--support-dao-fork") + } + if vote[1] { + args = append(args, "--oppose-dao-fork") + } + geth := runGeth(t, append(args, []string{"--exec", "2+2", "console"}...)...) + geth.cmd.Wait() + } + // Retrieve the DAO config flag from the database + path := filepath.Join(datadir, "chaindata") + if testnet && genesis == "" { + path = filepath.Join(datadir, "testnet", "chaindata") + } + db, err := ethdb.NewLDBDatabase(path, 0, 0) + if err != nil { + t.Fatalf("failed to open test database: %v", err) + } + defer db.Close() + + genesisHash := common.HexToHash("0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3") + if testnet { + genesisHash = common.HexToHash("0x0cd786a2425d16f152c658316c423e6ce1181e15c3295826d7c9904cba9ce303") + } + if genesis != "" { + genesisHash = daoGenesisHash + } + config, err := core.GetChainConfig(db, genesisHash) + if err != nil { + t.Fatalf("failed to retrieve chain config: %v", err) + } + // Validate the DAO hard-fork block number against the expected value + if config.DAOForkBlock == nil { + if expectBlock != nil { + t.Errorf("dao hard-fork block mismatch: have nil, want %v", expectBlock) + } + } else if expectBlock == nil { + t.Errorf("dao hard-fork block mismatch: have %v, want nil", config.DAOForkBlock) + } else if config.DAOForkBlock.Cmp(expectBlock) != 0 { + t.Errorf("dao hard-fork block mismatch: have %v, want %v", config.DAOForkBlock, expectBlock) + } + if config.DAOForkSupport != expectVote { + t.Errorf("dao hard-fork support mismatch: have %v, want %v", config.DAOForkSupport, expectVote) + } +} diff --git a/cmd/geth/genesis_test.go b/cmd/geth/genesis_test.go new file mode 100644 index 0000000000..4f8b1642ef --- /dev/null +++ b/cmd/geth/genesis_test.go @@ -0,0 +1,107 @@ +// Copyright 2016 The go-ethereum Authors +// This file is part of go-ethereum. +// +// go-ethereum is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// go-ethereum 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 General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with go-ethereum. If not, see . + +package main + +import ( + "io/ioutil" + "os" + "path/filepath" + "testing" +) + +var customGenesisTests = []struct { + genesis string + query string + result string +}{ + // Plain genesis file without anything extra + { + genesis: `{ + "alloc" : {}, + "coinbase" : "0x0000000000000000000000000000000000000000", + "difficulty" : "0x20000", + "extraData" : "", + "gasLimit" : "0x2fefd8", + "nonce" : "0x0000000000000042", + "mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000", + "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000", + "timestamp" : "0x00" + }`, + query: "eth.getBlock(0).nonce", + result: "0x0000000000000042", + }, + // Genesis file with an empty chain configuration (ensure missing fields work) + { + genesis: `{ + "alloc" : {}, + "coinbase" : "0x0000000000000000000000000000000000000000", + "difficulty" : "0x20000", + "extraData" : "", + "gasLimit" : "0x2fefd8", + "nonce" : "0x0000000000000042", + "mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000", + "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000", + "timestamp" : "0x00", + "config" : {} + }`, + query: "eth.getBlock(0).nonce", + result: "0x0000000000000042", + }, + // Genesis file with specific chain configurations + { + genesis: `{ + "alloc" : {}, + "coinbase" : "0x0000000000000000000000000000000000000000", + "difficulty" : "0x20000", + "extraData" : "", + "gasLimit" : "0x2fefd8", + "nonce" : "0x0000000000000042", + "mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000", + "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000", + "timestamp" : "0x00", + "config" : { + "homesteadBlock" : 314, + "daoForkBlock" : 141, + "daoForkSupport" : true + }, + }`, + query: "eth.getBlock(0).nonce", + result: "0x0000000000000042", + }, +} + +// Tests that initializing Geth with a custom genesis block and chain definitions +// work properly. +func TestCustomGenesis(t *testing.T) { + for i, tt := range customGenesisTests { + // Create a temporary data directory to use and inspect later + datadir := tmpdir(t) + defer os.RemoveAll(datadir) + + // Initialize the data directory with the custom genesis block + json := filepath.Join(datadir, "genesis.json") + if err := ioutil.WriteFile(json, []byte(tt.genesis), 0600); err != nil { + t.Fatalf("test %d: failed to write genesis file: %v", i, err) + } + runGeth(t, "--datadir", datadir, "init", json).cmd.Wait() + + // Query the custom genesis block + geth := runGeth(t, "--datadir", datadir, "--maxpeers", "0", "--nodiscover", "--nat", "none", "--ipcdisable", "--exec", tt.query, "console") + geth.expectRegexp(tt.result) + geth.expectExit() + } +} diff --git a/cmd/geth/main.go b/cmd/geth/main.go index cb43f8769d..5f1157b90b 100644 --- a/cmd/geth/main.go +++ b/cmd/geth/main.go @@ -150,7 +150,6 @@ participating. utils.IdentityFlag, utils.UnlockedAccountFlag, utils.PasswordFileFlag, - utils.GenesisFileFlag, utils.BootnodesFlag, utils.DataDirFlag, utils.KeyStoreDirFlag, @@ -165,6 +164,8 @@ participating. utils.MaxPendingPeersFlag, utils.EtherbaseFlag, utils.GasPriceFlag, + utils.SupportDAOFork, + utils.OpposeDAOFork, utils.MinerThreadsFlag, utils.MiningEnabledFlag, utils.MiningGPUFlag, @@ -225,12 +226,6 @@ participating. eth.EnableBadBlockReporting = true utils.SetupNetwork(ctx) - - // Deprecation warning. - if ctx.GlobalIsSet(utils.GenesisFileFlag.Name) { - common.PrintDepricationWarning("--genesis is deprecated. Switch to use 'geth init /path/to/file'") - } - return nil } diff --git a/cmd/geth/usage.go b/cmd/geth/usage.go index e7ef9e2c7b..eb897d2b5a 100644 --- a/cmd/geth/usage.go +++ b/cmd/geth/usage.go @@ -68,7 +68,6 @@ var AppHelpFlagGroups = []flagGroup{ utils.OlympicFlag, utils.TestNetFlag, utils.DevModeFlag, - utils.GenesisFileFlag, utils.IdentityFlag, utils.FastSyncFlag, utils.LightKDFFlag, diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index 38ba3a9ba0..fae1647b3e 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -126,10 +126,6 @@ var ( Name: "dev", Usage: "Developer mode: pre-configured private network with several debugging flags", } - GenesisFileFlag = cli.StringFlag{ - Name: "genesis", - Usage: "Insert/overwrite the genesis block (JSON format)", - } IdentityFlag = cli.StringFlag{ Name: "identity", Usage: "Custom node name", @@ -161,6 +157,15 @@ var ( Name: "lightkdf", Usage: "Reduce key-derivation RAM & CPU usage at some expense of KDF strength", } + // Fork settings + SupportDAOFork = cli.BoolFlag{ + Name: "support-dao-fork", + Usage: "Updates the chain rules to support the DAO hard-fork", + } + OpposeDAOFork = cli.BoolFlag{ + Name: "oppose-dao-fork", + Usage: "Updates the chain rules to oppose the DAO hard-fork", + } // Miner settings // TODO: refactor CPU vs GPU mining flags MiningEnabledFlag = cli.BoolFlag{ @@ -534,20 +539,6 @@ func MakeWSRpcHost(ctx *cli.Context) string { return ctx.GlobalString(WSListenAddrFlag.Name) } -// MakeGenesisBlock loads up a genesis block from an input file specified in the -// command line, or returns the empty string if none set. -func MakeGenesisBlock(ctx *cli.Context) string { - genesis := ctx.GlobalString(GenesisFileFlag.Name) - if genesis == "" { - return "" - } - data, err := ioutil.ReadFile(genesis) - if err != nil { - Fatalf("Failed to load custom genesis file: %v", err) - } - return string(data) -} - // MakeDatabaseHandles raises out the number of allowed file handles per process // for Geth and returns half of the allowance to assign to the database. func MakeDatabaseHandles() int { @@ -689,7 +680,6 @@ func MakeSystemNode(name, version string, relconf release.Config, extra []byte, ethConf := ð.Config{ ChainConfig: MustMakeChainConfig(ctx), - Genesis: MakeGenesisBlock(ctx), FastSync: ctx.GlobalBool(FastSyncFlag.Name), BlockChainVersion: ctx.GlobalInt(BlockchainVersionFlag.Name), DatabaseCache: ctx.GlobalInt(CacheFlag.Name), @@ -722,17 +712,13 @@ func MakeSystemNode(name, version string, relconf release.Config, extra []byte, if !ctx.GlobalIsSet(NetworkIdFlag.Name) { ethConf.NetworkId = 1 } - if !ctx.GlobalIsSet(GenesisFileFlag.Name) { - ethConf.Genesis = core.OlympicGenesisBlock() - } + ethConf.Genesis = core.OlympicGenesisBlock() case ctx.GlobalBool(TestNetFlag.Name): if !ctx.GlobalIsSet(NetworkIdFlag.Name) { ethConf.NetworkId = 2 } - if !ctx.GlobalIsSet(GenesisFileFlag.Name) { - ethConf.Genesis = core.TestNetGenesisBlock() - } + ethConf.Genesis = core.TestNetGenesisBlock() state.StartingNonce = 1048576 // (2**20) case ctx.GlobalBool(DevModeFlag.Name): @@ -747,9 +733,7 @@ func MakeSystemNode(name, version string, relconf release.Config, extra []byte, stackConf.ListenAddr = ":0" } // Override the Ethereum protocol configs - if !ctx.GlobalIsSet(GenesisFileFlag.Name) { - ethConf.Genesis = core.OlympicGenesisBlock() - } + ethConf.Genesis = core.OlympicGenesisBlock() if !ctx.GlobalIsSet(GasPriceFlag.Name) { ethConf.GasPrice = new(big.Int) } @@ -813,24 +797,43 @@ func MustMakeChainConfig(ctx *cli.Context) *core.ChainConfig { // MustMakeChainConfigFromDb reads the chain configuration from the given database. func MustMakeChainConfigFromDb(ctx *cli.Context, db ethdb.Database) *core.ChainConfig { - genesis := core.GetBlock(db, core.GetCanonicalHash(db, 0), 0) + // If the chain is already initialized, use any existing chain configs + config := new(core.ChainConfig) - if genesis != nil { - // Existing genesis block, use stored config if available. + if genesis := core.GetBlock(db, core.GetCanonicalHash(db, 0), 0); genesis != nil { storedConfig, err := core.GetChainConfig(db, genesis.Hash()) - if err == nil { - return storedConfig - } else if err != core.ChainConfigNotFoundErr { + switch err { + case nil: + config = storedConfig + case core.ChainConfigNotFoundErr: + // No configs found, use empty, will populate below + default: Fatalf("Could not make chain configuration: %v", err) } } - var homesteadBlockNo *big.Int - if ctx.GlobalBool(TestNetFlag.Name) { - homesteadBlockNo = params.TestNetHomesteadBlock - } else { - homesteadBlockNo = params.MainNetHomesteadBlock + // 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) + } else { + config.HomesteadBlock = new(big.Int).Set(params.MainNetHomesteadBlock) + } } - return &core.ChainConfig{HomesteadBlock: homesteadBlockNo} + if config.DAOForkBlock == nil { + if ctx.GlobalBool(TestNetFlag.Name) { + config.DAOForkBlock = new(big.Int).Set(params.TestNetDAOForkBlock) + } else { + config.DAOForkBlock = new(big.Int).Set(params.MainNetDAOForkBlock) + } + } + // Force override any existing configs if explicitly requested + switch { + case ctx.GlobalBool(SupportDAOFork.Name): + config.DAOForkSupport = true + case ctx.GlobalBool(OpposeDAOFork.Name): + config.DAOForkSupport = false + } + return config } // MakeChainDatabase open an LevelDB using the flags passed to the client and will hard crash if it fails. diff --git a/core/block_validator.go b/core/block_validator.go index c3f959324a..3b597310ea 100644 --- a/core/block_validator.go +++ b/core/block_validator.go @@ -17,6 +17,7 @@ package core import ( + "bytes" "fmt" "math/big" "time" @@ -247,6 +248,33 @@ func ValidateHeader(config *ChainConfig, pow pow.PoW, header *types.Header, pare return &BlockNonceErr{header.Number, header.Hash(), header.Nonce.Uint64()} } } + // 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 } diff --git a/core/block_validator_test.go b/core/block_validator_test.go index c6daf9e7f3..5320c3f8da 100644 --- a/core/block_validator_test.go +++ b/core/block_validator_test.go @@ -27,6 +27,7 @@ import ( "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/event" + "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/pow/ezp" ) @@ -92,3 +93,107 @@ func TestPutReceipt(t *testing.T) { t.Error("expected to get 1 receipt, got none.") } } + +// Tests that DAO-fork enabled clients can properly filter out fork-commencing +// blocks based on their extradata fields. +func TestDAOForkRangeExtradata(t *testing.T) { + forkBlock := big.NewInt(32) + + // Generate a common prefix for both pro-forkers and non-forkers + db, _ := ethdb.NewMemDatabase() + genesis := WriteGenesisBlockForTesting(db) + prefix, _ := GenerateChain(genesis, db, int(forkBlock.Int64()-1), func(i int, gen *BlockGen) {}) + + // Create the concurrent, conflicting two nodes + proDb, _ := ethdb.NewMemDatabase() + WriteGenesisBlockForTesting(proDb) + proBc, _ := NewBlockChain(proDb, &ChainConfig{HomesteadBlock: big.NewInt(0), DAOForkBlock: forkBlock, DAOForkSupport: true}, new(FakePow), new(event.TypeMux)) + + conDb, _ := ethdb.NewMemDatabase() + WriteGenesisBlockForTesting(conDb) + conBc, _ := NewBlockChain(conDb, &ChainConfig{HomesteadBlock: big.NewInt(0), DAOForkBlock: forkBlock, DAOForkSupport: false}, new(FakePow), new(event.TypeMux)) + + if _, err := proBc.InsertChain(prefix); err != nil { + t.Fatalf("pro-fork: failed to import chain prefix: %v", err) + } + if _, err := conBc.InsertChain(prefix); err != nil { + t.Fatalf("con-fork: failed to import chain prefix: %v", err) + } + // Try to expand both pro-fork and non-fork chains iteratively with other camp's blocks + for i := int64(0); i < params.DAOForkExtraRange.Int64(); i++ { + // Create a pro-fork block, and try to feed into the no-fork chain + db, _ = ethdb.NewMemDatabase() + WriteGenesisBlockForTesting(db) + bc, _ := NewBlockChain(db, &ChainConfig{HomesteadBlock: big.NewInt(0)}, new(FakePow), new(event.TypeMux)) + + blocks := conBc.GetBlocksFromHash(conBc.CurrentBlock().Hash(), int(conBc.CurrentBlock().NumberU64()+1)) + for j := 0; j < len(blocks)/2; j++ { + blocks[j], blocks[len(blocks)-1-j] = blocks[len(blocks)-1-j], blocks[j] + } + if _, err := bc.InsertChain(blocks); err != nil { + t.Fatalf("failed to import contra-fork chain for expansion: %v", err) + } + blocks, _ = GenerateChain(conBc.CurrentBlock(), db, 1, func(i int, gen *BlockGen) { gen.SetExtra(params.DAOForkBlockExtra) }) + if _, err := conBc.InsertChain(blocks); err == nil { + t.Fatalf("contra-fork chain accepted pro-fork block: %v", blocks[0]) + } + // Create a proper no-fork block for the contra-forker + blocks, _ = GenerateChain(conBc.CurrentBlock(), db, 1, func(i int, gen *BlockGen) {}) + if _, err := conBc.InsertChain(blocks); err != nil { + t.Fatalf("contra-fork chain didn't accepted no-fork block: %v", err) + } + // Create a no-fork block, and try to feed into the pro-fork chain + db, _ = ethdb.NewMemDatabase() + WriteGenesisBlockForTesting(db) + bc, _ = NewBlockChain(db, &ChainConfig{HomesteadBlock: big.NewInt(0)}, new(FakePow), new(event.TypeMux)) + + blocks = proBc.GetBlocksFromHash(proBc.CurrentBlock().Hash(), int(proBc.CurrentBlock().NumberU64()+1)) + for j := 0; j < len(blocks)/2; j++ { + blocks[j], blocks[len(blocks)-1-j] = blocks[len(blocks)-1-j], blocks[j] + } + if _, err := bc.InsertChain(blocks); err != nil { + t.Fatalf("failed to import pro-fork chain for expansion: %v", err) + } + blocks, _ = GenerateChain(proBc.CurrentBlock(), db, 1, func(i int, gen *BlockGen) {}) + if _, err := proBc.InsertChain(blocks); err == nil { + t.Fatalf("pro-fork chain accepted contra-fork block: %v", blocks[0]) + } + // Create a proper pro-fork block for the pro-forker + blocks, _ = GenerateChain(proBc.CurrentBlock(), db, 1, func(i int, gen *BlockGen) { gen.SetExtra(params.DAOForkBlockExtra) }) + if _, err := proBc.InsertChain(blocks); err != nil { + t.Fatalf("pro-fork chain didn't accepted pro-fork block: %v", err) + } + } + // Verify that contra-forkers accept pro-fork extra-datas after forking finishes + db, _ = ethdb.NewMemDatabase() + WriteGenesisBlockForTesting(db) + bc, _ := NewBlockChain(db, &ChainConfig{HomesteadBlock: big.NewInt(0)}, new(FakePow), new(event.TypeMux)) + + blocks := conBc.GetBlocksFromHash(conBc.CurrentBlock().Hash(), int(conBc.CurrentBlock().NumberU64()+1)) + for j := 0; j < len(blocks)/2; j++ { + blocks[j], blocks[len(blocks)-1-j] = blocks[len(blocks)-1-j], blocks[j] + } + if _, err := bc.InsertChain(blocks); err != nil { + t.Fatalf("failed to import contra-fork chain for expansion: %v", err) + } + blocks, _ = GenerateChain(conBc.CurrentBlock(), db, 1, func(i int, gen *BlockGen) { gen.SetExtra(params.DAOForkBlockExtra) }) + if _, err := conBc.InsertChain(blocks); err != nil { + t.Fatalf("contra-fork chain didn't accept pro-fork block post-fork: %v", err) + } + // Verify that pro-forkers accept contra-fork extra-datas after forking finishes + db, _ = ethdb.NewMemDatabase() + WriteGenesisBlockForTesting(db) + bc, _ = NewBlockChain(db, &ChainConfig{HomesteadBlock: big.NewInt(0)}, new(FakePow), new(event.TypeMux)) + + blocks = proBc.GetBlocksFromHash(proBc.CurrentBlock().Hash(), int(proBc.CurrentBlock().NumberU64()+1)) + for j := 0; j < len(blocks)/2; j++ { + blocks[j], blocks[len(blocks)-1-j] = blocks[len(blocks)-1-j], blocks[j] + } + if _, err := bc.InsertChain(blocks); err != nil { + t.Fatalf("failed to import pro-fork chain for expansion: %v", err) + } + blocks, _ = GenerateChain(proBc.CurrentBlock(), db, 1, func(i int, gen *BlockGen) {}) + if _, err := proBc.InsertChain(blocks); err != nil { + t.Fatalf("pro-fork chain didn't accept contra-fork block post-fork: %v", err) + } +} diff --git a/core/config.go b/core/config.go index 81ca76aa31..c0d065a57f 100644 --- a/core/config.go +++ b/core/config.go @@ -31,16 +31,17 @@ var ChainConfigNotFoundErr = errors.New("ChainConfig not found") // general conf // that any network, identified by its genesis block, can have its own // set of configuration options. type ChainConfig struct { - HomesteadBlock *big.Int // homestead switch block + HomesteadBlock *big.Int `json:"homesteadBlock"` // Homestead switch block (nil = no fork, 0 = already homestead) + DAOForkBlock *big.Int `json:"daoForkBlock"` // TheDAO hard-fork switch block (nil = no fork) + DAOForkSupport bool `json:"daoForkSupport"` // Whether the nodes supports or opposes the DAO hard-fork VmConfig vm.Config `json:"-"` } // IsHomestead returns whether num is either equal to the homestead block or greater. func (c *ChainConfig) IsHomestead(num *big.Int) bool { - if num == nil { + if c.HomesteadBlock == nil || num == nil { return false } - return num.Cmp(c.HomesteadBlock) >= 0 } diff --git a/core/state_processor.go b/core/state_processor.go index 95b3057bbc..a9c2d1e181 100644 --- a/core/state_processor.go +++ b/core/state_processor.go @@ -25,6 +25,7 @@ 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 ( @@ -65,7 +66,11 @@ func (p *StateProcessor) Process(block *types.Block, statedb *state.StateDB, cfg allLogs vm.Logs gp = new(GasPool).AddGas(block.GasLimit()) ) - + // Mutate the statedb according to any hard-fork specs + if p.config.DAOForkSupport && p.config.DAOForkBlock != nil && p.config.DAOForkBlock.Cmp(block.Number()) == 0 { + ApplyDAOHardFork(statedb) + } + // Iterate over and process the individual transactions for i, tx := range block.Transactions() { statedb.StartRecord(tx.Hash(), block.Hash(), i) receipt, logs, _, err := ApplyTransaction(p.config, p.bc, gp, statedb, header, tx, totalUsedGas, cfg) @@ -129,3 +134,19 @@ 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)) + } + } +} diff --git a/eth/backend.go b/eth/backend.go index 351cc27445..c8a9af6eee 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -205,6 +205,8 @@ func New(ctx *node.ServiceContext, config *Config) (*Ethereum, error) { if config.ChainConfig == nil { return nil, errors.New("missing chain config") } + core.WriteChainConfig(chainDb, genesis.Hash(), config.ChainConfig) + eth.chainConfig = config.ChainConfig eth.chainConfig.VmConfig = vm.Config{ EnableJit: config.EnableJit, diff --git a/eth/handler.go b/eth/handler.go index 47a36cc0bf..946d5930fa 100644 --- a/eth/handler.go +++ b/eth/handler.go @@ -45,6 +45,10 @@ const ( estHeaderRlpSize = 500 // Approximate size of an RLP encoded block header ) +var ( + daoChallengeTimeout = 15 * time.Second // Time allowance for a node to reply to the DAO handshake challenge +) + // errIncompatibleConfig is returned if the requested protocols and configs are // not compatible (low protocol version restrictions and high requirements). var errIncompatibleConfig = errors.New("incompatible configuration") @@ -62,9 +66,10 @@ type ProtocolManager struct { fastSync uint32 // Flag whether fast sync is enabled (gets disabled if we already have blocks) synced uint32 // Flag whether we're considered synchronised (enables transaction processing) - txpool txPool - blockchain *core.BlockChain - chaindb ethdb.Database + txpool txPool + blockchain *core.BlockChain + chaindb ethdb.Database + chainconfig *core.ChainConfig downloader *downloader.Downloader fetcher *fetcher.Fetcher @@ -99,6 +104,7 @@ func NewProtocolManager(config *core.ChainConfig, fastSync bool, networkId int, txpool: txpool, blockchain: blockchain, chaindb: chaindb, + chainconfig: config, peers: newPeerSet(), newPeerCh: make(chan *peer), noMorePeers: make(chan struct{}), @@ -278,6 +284,18 @@ func (pm *ProtocolManager) handle(p *peer) error { // after this will be sent via broadcasts. pm.syncTransactions(p) + // If we're DAO hard-fork aware, validate any remote peer with regard to the hard-fork + if daoBlock := pm.chainconfig.DAOForkBlock; daoBlock != nil { + // Request the peer's DAO fork header for extra-data validation + if err := p.RequestHeadersByNumber(daoBlock.Uint64(), 1, 0, false); err != nil { + return err + } + // Start a timer to disconnect if the peer doesn't reply in time + p.forkDrop = time.AfterFunc(daoChallengeTimeout, func() { + glog.V(logger.Warn).Infof("%v: timed out DAO fork-check, dropping", p) + pm.removePeer(p.id) + }) + } // main loop. handle incoming messages. for { if err := pm.handleMsg(p); err != nil { @@ -481,9 +499,43 @@ func (pm *ProtocolManager) handleMsg(p *peer) error { if err := msg.Decode(&headers); err != nil { return errResp(ErrDecode, "msg %v: %v", msg, err) } + // If no headers were received, but we're expending a DAO fork check, maybe it's that + if len(headers) == 0 && p.forkDrop != nil { + // Possibly an empty reply to the fork header checks, sanity check TDs + verifyDAO := true + + // If we already have a DAO header, we can check the peer's TD against it. If + // the peer's ahead of this, it too must have a reply to the DAO check + if daoHeader := pm.blockchain.GetHeaderByNumber(pm.chainconfig.DAOForkBlock.Uint64()); daoHeader != nil { + if p.Td().Cmp(pm.blockchain.GetTd(daoHeader.Hash(), daoHeader.Number.Uint64())) >= 0 { + verifyDAO = false + } + } + // 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) + p.forkDrop.Stop() + p.forkDrop = nil + return nil + } + } // Filter out any explicitly requested headers, deliver the rest to the downloader filter := len(headers) == 1 if filter { + // If it's a potential DAO fork check, validate against the rules + if p.forkDrop != nil && pm.chainconfig.DAOForkBlock.Cmp(headers[0].Number) == 0 { + // Disable the fork drop timer + p.forkDrop.Stop() + 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) + return err + } + glog.V(logger.Info).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()) } if len(headers) > 0 || !filter { diff --git a/eth/handler_test.go b/eth/handler_test.go index 8418c28b23..d5b1bf3508 100644 --- a/eth/handler_test.go +++ b/eth/handler_test.go @@ -20,6 +20,7 @@ import ( "math/big" "math/rand" "testing" + "time" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core" @@ -28,6 +29,7 @@ import ( "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/eth/downloader" "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/event" "github.com/ethereum/go-ethereum/p2p" "github.com/ethereum/go-ethereum/params" ) @@ -580,3 +582,74 @@ func testGetReceipt(t *testing.T, protocol int) { t.Errorf("receipts mismatch: %v", err) } } + +// Tests that post eth protocol handshake, DAO fork-enabled clients also execute +// a DAO "challenge" verifying each others' DAO fork headers to ensure they're on +// compatible chains. +func TestDAOChallengeNoVsNo(t *testing.T) { testDAOChallenge(t, false, false, false) } +func TestDAOChallengeNoVsPro(t *testing.T) { testDAOChallenge(t, false, true, false) } +func TestDAOChallengeProVsNo(t *testing.T) { testDAOChallenge(t, true, false, false) } +func TestDAOChallengeProVsPro(t *testing.T) { testDAOChallenge(t, true, true, false) } +func TestDAOChallengeNoVsTimeout(t *testing.T) { testDAOChallenge(t, false, false, true) } +func TestDAOChallengeProVsTimeout(t *testing.T) { testDAOChallenge(t, true, true, true) } + +func testDAOChallenge(t *testing.T, localForked, remoteForked bool, timeout bool) { + // Reduce the DAO handshake challenge timeout + if timeout { + defer func(old time.Duration) { daoChallengeTimeout = old }(daoChallengeTimeout) + daoChallengeTimeout = 500 * time.Millisecond + } + // Create a DAO aware protocol manager + var ( + evmux = new(event.TypeMux) + pow = new(core.FakePow) + db, _ = ethdb.NewMemDatabase() + genesis = core.WriteGenesisBlockForTesting(db) + config = &core.ChainConfig{DAOForkBlock: big.NewInt(1), DAOForkSupport: localForked} + blockchain, _ = core.NewBlockChain(db, config, pow, evmux) + ) + pm, err := NewProtocolManager(config, false, NetworkId, evmux, new(testTxPool), pow, blockchain, db) + if err != nil { + t.Fatalf("failed to start test protocol manager: %v", err) + } + pm.Start() + defer pm.Stop() + + // Connect a new peer and check that we receive the DAO challenge + peer, _ := newTestPeer("peer", eth63, pm, true) + defer peer.close() + + challenge := &getBlockHeadersData{ + Origin: hashOrNumber{Number: config.DAOForkBlock.Uint64()}, + Amount: 1, + Skip: 0, + Reverse: false, + } + if err := p2p.ExpectMsg(peer.app, GetBlockHeadersMsg, challenge); err != nil { + t.Fatalf("challenge mismatch: %v", err) + } + // Create a block to reply to the challenge if no timeout is simualted + if !timeout { + blocks, _ := core.GenerateChain(genesis, db, 1, func(i int, block *core.BlockGen) { + if remoteForked { + block.SetExtra(params.DAOForkBlockExtra) + } + }) + if err := p2p.Send(peer.app, BlockHeadersMsg, []*types.Header{blocks[0].Header()}); err != nil { + t.Fatalf("failed to answer challenge: %v", err) + } + } else { + // Otherwise wait until the test timeout passes + time.Sleep(daoChallengeTimeout + 500*time.Millisecond) + } + // Verify that depending on fork side, the remote peer is maintained or dropped + if localForked == remoteForked && !timeout { + if peers := pm.peers.Len(); peers != 1 { + t.Fatalf("peer count mismatch: have %d, want %d", peers, 1) + } + } else { + if peers := pm.peers.Len(); peers != 0 { + t.Fatalf("peer count mismatch: have %d, want %d", peers, 0) + } + } +} diff --git a/eth/peer.go b/eth/peer.go index 8eb41b0f99..b97825c69e 100644 --- a/eth/peer.go +++ b/eth/peer.go @@ -59,10 +59,12 @@ type peer struct { *p2p.Peer rw p2p.MsgReadWriter - version int // Protocol version negotiated - head common.Hash - td *big.Int - lock sync.RWMutex + version int // Protocol version negotiated + forkDrop *time.Timer // Timed connection dropper if forks aren't validated in time + + head common.Hash + td *big.Int + lock sync.RWMutex knownTxs *set.Set // Set of transaction hashes known to be known by this peer knownBlocks *set.Set // Set of block hashes known to be known by this peer diff --git a/miner/worker.go b/miner/worker.go index 09cf6b6aa7..9118b0f8ea 100644 --- a/miner/worker.go +++ b/miner/worker.go @@ -17,6 +17,7 @@ package miner import ( + "bytes" "fmt" "math/big" "sync" @@ -33,6 +34,7 @@ import ( "github.com/ethereum/go-ethereum/event" "github.com/ethereum/go-ethereum/logger" "github.com/ethereum/go-ethereum/logger/glog" + "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/pow" "gopkg.in/fatih/set.v0" ) @@ -468,7 +470,19 @@ func (self *worker) commitNewWork() { Extra: self.extra, Time: big.NewInt(tstamp), } - + // If we are care about TheDAO hard-fork check whether to override the extra-data or not + 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 { + // Depending whether we support or oppose the fork, override differently + if self.config.DAOForkSupport { + header.Extra = common.CopyBytes(params.DAOForkBlockExtra) + } else if bytes.Compare(header.Extra, params.DAOForkBlockExtra) == 0 { + header.Extra = []byte{} // If miner opposes, don't let it use the reserved extra-data + } + } + } previous := self.current // Could potentially happen if starting to mine in an odd state. err := self.makeCurrent(parent, header) @@ -476,7 +490,11 @@ func (self *worker) commitNewWork() { glog.V(logger.Info).Infoln("Could not create new env for mining, retrying on next block.") return } + // Create the current work task and check any fork transitions needed work := self.current + if self.config.DAOForkSupport && self.config.DAOForkBlock != nil && self.config.DAOForkBlock.Cmp(header.Number) == 0 { + core.ApplyDAOHardFork(work.state) + } /* //approach 1 transactions := self.eth.TxPool().GetTransactions() diff --git a/params/dao_list.go b/params/dao_list.go new file mode 100644 index 0000000000..7565ab333c --- /dev/null +++ b/params/dao_list.go @@ -0,0 +1,108 @@ +// 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 . + +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" + } +] +` diff --git a/params/util.go b/params/util.go index b37bc79b21..884f1f803c 100644 --- a/params/util.go +++ b/params/util.go @@ -16,9 +16,19 @@ package params -import "math/big" +import ( + "math/big" + + "github.com/ethereum/go-ethereum/common" +) var ( - TestNetHomesteadBlock = big.NewInt(494000) // testnet homestead block - MainNetHomesteadBlock = big.NewInt(1150000) // mainnet homestead block + 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 ) diff --git a/tests/block_test.go b/tests/block_test.go index c258268dbb..9b2fedceb4 100644 --- a/tests/block_test.go +++ b/tests/block_test.go @@ -20,66 +20,69 @@ import ( "math/big" "path/filepath" "testing" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/params" ) func TestBcValidBlockTests(t *testing.T) { - err := RunBlockTest(big.NewInt(1000000), filepath.Join(blockTestDir, "bcValidBlockTest.json"), BlockSkipTests) + err := RunBlockTest(big.NewInt(1000000), nil, filepath.Join(blockTestDir, "bcValidBlockTest.json"), BlockSkipTests) if err != nil { t.Fatal(err) } } func TestBcUncleHeaderValidityTests(t *testing.T) { - err := RunBlockTest(big.NewInt(1000000), filepath.Join(blockTestDir, "bcUncleHeaderValiditiy.json"), BlockSkipTests) + err := RunBlockTest(big.NewInt(1000000), nil, filepath.Join(blockTestDir, "bcUncleHeaderValiditiy.json"), BlockSkipTests) if err != nil { t.Fatal(err) } } func TestBcUncleTests(t *testing.T) { - err := RunBlockTest(big.NewInt(1000000), filepath.Join(blockTestDir, "bcUncleTest.json"), BlockSkipTests) + err := RunBlockTest(big.NewInt(1000000), nil, filepath.Join(blockTestDir, "bcUncleTest.json"), BlockSkipTests) if err != nil { t.Fatal(err) } } func TestBcForkUncleTests(t *testing.T) { - err := RunBlockTest(big.NewInt(1000000), filepath.Join(blockTestDir, "bcForkUncle.json"), BlockSkipTests) + err := RunBlockTest(big.NewInt(1000000), nil, filepath.Join(blockTestDir, "bcForkUncle.json"), BlockSkipTests) if err != nil { t.Fatal(err) } } func TestBcInvalidHeaderTests(t *testing.T) { - err := RunBlockTest(big.NewInt(1000000), filepath.Join(blockTestDir, "bcInvalidHeaderTest.json"), BlockSkipTests) + err := RunBlockTest(big.NewInt(1000000), nil, filepath.Join(blockTestDir, "bcInvalidHeaderTest.json"), BlockSkipTests) if err != nil { t.Fatal(err) } } func TestBcInvalidRLPTests(t *testing.T) { - err := RunBlockTest(big.NewInt(1000000), filepath.Join(blockTestDir, "bcInvalidRLPTest.json"), BlockSkipTests) + err := RunBlockTest(big.NewInt(1000000), nil, filepath.Join(blockTestDir, "bcInvalidRLPTest.json"), BlockSkipTests) if err != nil { t.Fatal(err) } } func TestBcRPCAPITests(t *testing.T) { - err := RunBlockTest(big.NewInt(1000000), filepath.Join(blockTestDir, "bcRPC_API_Test.json"), BlockSkipTests) + err := RunBlockTest(big.NewInt(1000000), nil, filepath.Join(blockTestDir, "bcRPC_API_Test.json"), BlockSkipTests) if err != nil { t.Fatal(err) } } func TestBcForkBlockTests(t *testing.T) { - err := RunBlockTest(big.NewInt(1000000), filepath.Join(blockTestDir, "bcForkBlockTest.json"), BlockSkipTests) + err := RunBlockTest(big.NewInt(1000000), nil, filepath.Join(blockTestDir, "bcForkBlockTest.json"), BlockSkipTests) if err != nil { t.Fatal(err) } } func TestBcForkStress(t *testing.T) { - err := RunBlockTest(big.NewInt(1000000), filepath.Join(blockTestDir, "bcForkStressTest.json"), BlockSkipTests) + err := RunBlockTest(big.NewInt(1000000), nil, filepath.Join(blockTestDir, "bcForkStressTest.json"), BlockSkipTests) if err != nil { t.Fatal(err) } @@ -89,21 +92,21 @@ func TestBcTotalDifficulty(t *testing.T) { // skip because these will fail due to selfish mining fix t.Skip() - err := RunBlockTest(big.NewInt(1000000), filepath.Join(blockTestDir, "bcTotalDifficultyTest.json"), BlockSkipTests) + err := RunBlockTest(big.NewInt(1000000), nil, filepath.Join(blockTestDir, "bcTotalDifficultyTest.json"), BlockSkipTests) if err != nil { t.Fatal(err) } } func TestBcWallet(t *testing.T) { - err := RunBlockTest(big.NewInt(1000000), filepath.Join(blockTestDir, "bcWalletTest.json"), BlockSkipTests) + err := RunBlockTest(big.NewInt(1000000), nil, filepath.Join(blockTestDir, "bcWalletTest.json"), BlockSkipTests) if err != nil { t.Fatal(err) } } func TestBcGasPricer(t *testing.T) { - err := RunBlockTest(big.NewInt(1000000), filepath.Join(blockTestDir, "bcGasPricerTest.json"), BlockSkipTests) + err := RunBlockTest(big.NewInt(1000000), nil, filepath.Join(blockTestDir, "bcGasPricerTest.json"), BlockSkipTests) if err != nil { t.Fatal(err) } @@ -111,7 +114,7 @@ func TestBcGasPricer(t *testing.T) { // TODO: iterate over files once we got more than a few func TestBcRandom(t *testing.T) { - err := RunBlockTest(big.NewInt(1000000), filepath.Join(blockTestDir, "RandomTests/bl201507071825GO.json"), BlockSkipTests) + err := RunBlockTest(big.NewInt(1000000), nil, filepath.Join(blockTestDir, "RandomTests/bl201507071825GO.json"), BlockSkipTests) if err != nil { t.Fatal(err) } @@ -121,14 +124,14 @@ func TestBcMultiChain(t *testing.T) { // skip due to selfish mining t.Skip() - err := RunBlockTest(big.NewInt(1000000), filepath.Join(blockTestDir, "bcMultiChainTest.json"), BlockSkipTests) + err := RunBlockTest(big.NewInt(1000000), nil, filepath.Join(blockTestDir, "bcMultiChainTest.json"), BlockSkipTests) if err != nil { t.Fatal(err) } } func TestBcState(t *testing.T) { - err := RunBlockTest(big.NewInt(1000000), filepath.Join(blockTestDir, "bcStateTest.json"), BlockSkipTests) + err := RunBlockTest(big.NewInt(1000000), nil, filepath.Join(blockTestDir, "bcStateTest.json"), BlockSkipTests) if err != nil { t.Fatal(err) } @@ -136,77 +139,89 @@ func TestBcState(t *testing.T) { // Homestead tests func TestHomesteadBcValidBlockTests(t *testing.T) { - err := RunBlockTest(big.NewInt(0), filepath.Join(blockTestDir, "Homestead", "bcValidBlockTest.json"), BlockSkipTests) + err := RunBlockTest(big.NewInt(0), nil, filepath.Join(blockTestDir, "Homestead", "bcValidBlockTest.json"), BlockSkipTests) if err != nil { t.Fatal(err) } } func TestHomesteadBcUncleHeaderValidityTests(t *testing.T) { - err := RunBlockTest(big.NewInt(0), filepath.Join(blockTestDir, "Homestead", "bcUncleHeaderValiditiy.json"), BlockSkipTests) + err := RunBlockTest(big.NewInt(0), nil, filepath.Join(blockTestDir, "Homestead", "bcUncleHeaderValiditiy.json"), BlockSkipTests) if err != nil { t.Fatal(err) } } func TestHomesteadBcUncleTests(t *testing.T) { - err := RunBlockTest(big.NewInt(0), filepath.Join(blockTestDir, "Homestead", "bcUncleTest.json"), BlockSkipTests) + err := RunBlockTest(big.NewInt(0), nil, filepath.Join(blockTestDir, "Homestead", "bcUncleTest.json"), BlockSkipTests) if err != nil { t.Fatal(err) } } func TestHomesteadBcInvalidHeaderTests(t *testing.T) { - err := RunBlockTest(big.NewInt(0), filepath.Join(blockTestDir, "Homestead", "bcInvalidHeaderTest.json"), BlockSkipTests) + err := RunBlockTest(big.NewInt(0), nil, filepath.Join(blockTestDir, "Homestead", "bcInvalidHeaderTest.json"), BlockSkipTests) if err != nil { t.Fatal(err) } } func TestHomesteadBcRPCAPITests(t *testing.T) { - err := RunBlockTest(big.NewInt(0), filepath.Join(blockTestDir, "Homestead", "bcRPC_API_Test.json"), BlockSkipTests) + err := RunBlockTest(big.NewInt(0), nil, filepath.Join(blockTestDir, "Homestead", "bcRPC_API_Test.json"), BlockSkipTests) if err != nil { t.Fatal(err) } } func TestHomesteadBcForkStress(t *testing.T) { - err := RunBlockTest(big.NewInt(0), filepath.Join(blockTestDir, "Homestead", "bcForkStressTest.json"), BlockSkipTests) + err := RunBlockTest(big.NewInt(0), nil, filepath.Join(blockTestDir, "Homestead", "bcForkStressTest.json"), BlockSkipTests) if err != nil { t.Fatal(err) } } func TestHomesteadBcTotalDifficulty(t *testing.T) { - err := RunBlockTest(big.NewInt(0), filepath.Join(blockTestDir, "Homestead", "bcTotalDifficultyTest.json"), BlockSkipTests) + err := RunBlockTest(big.NewInt(0), nil, filepath.Join(blockTestDir, "Homestead", "bcTotalDifficultyTest.json"), BlockSkipTests) if err != nil { t.Fatal(err) } } func TestHomesteadBcWallet(t *testing.T) { - err := RunBlockTest(big.NewInt(0), filepath.Join(blockTestDir, "Homestead", "bcWalletTest.json"), BlockSkipTests) + err := RunBlockTest(big.NewInt(0), nil, filepath.Join(blockTestDir, "Homestead", "bcWalletTest.json"), BlockSkipTests) if err != nil { t.Fatal(err) } } func TestHomesteadBcGasPricer(t *testing.T) { - err := RunBlockTest(big.NewInt(0), filepath.Join(blockTestDir, "Homestead", "bcGasPricerTest.json"), BlockSkipTests) + err := RunBlockTest(big.NewInt(0), nil, filepath.Join(blockTestDir, "Homestead", "bcGasPricerTest.json"), BlockSkipTests) if err != nil { t.Fatal(err) } } func TestHomesteadBcMultiChain(t *testing.T) { - err := RunBlockTest(big.NewInt(0), filepath.Join(blockTestDir, "Homestead", "bcMultiChainTest.json"), BlockSkipTests) + err := RunBlockTest(big.NewInt(0), nil, filepath.Join(blockTestDir, "Homestead", "bcMultiChainTest.json"), BlockSkipTests) if err != nil { t.Fatal(err) } } func TestHomesteadBcState(t *testing.T) { - err := RunBlockTest(big.NewInt(0), filepath.Join(blockTestDir, "Homestead", "bcStateTest.json"), BlockSkipTests) + err := RunBlockTest(big.NewInt(0), nil, filepath.Join(blockTestDir, "Homestead", "bcStateTest.json"), BlockSkipTests) + if err != nil { + t.Fatal(err) + } +} + +// 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) } diff --git a/tests/block_test_util.go b/tests/block_test_util.go index d9a5eec086..7da15cebe3 100644 --- a/tests/block_test_util.go +++ b/tests/block_test_util.go @@ -103,7 +103,7 @@ type btTransaction struct { Value string } -func RunBlockTestWithReader(homesteadBlock *big.Int, r io.Reader, skipTests []string) error { +func RunBlockTestWithReader(homesteadBlock, daoForkBlock *big.Int, r io.Reader, skipTests []string) error { btjs := make(map[string]*btJSON) if err := readJson(r, &btjs); err != nil { return err @@ -114,13 +114,13 @@ func RunBlockTestWithReader(homesteadBlock *big.Int, r io.Reader, skipTests []st return err } - if err := runBlockTests(homesteadBlock, bt, skipTests); err != nil { + if err := runBlockTests(homesteadBlock, daoForkBlock, bt, skipTests); err != nil { return err } return nil } -func RunBlockTest(homesteadBlock *big.Int, file string, skipTests []string) error { +func RunBlockTest(homesteadBlock, daoForkBlock *big.Int, file string, skipTests []string) error { btjs := make(map[string]*btJSON) if err := readJsonFile(file, &btjs); err != nil { return err @@ -130,13 +130,13 @@ func RunBlockTest(homesteadBlock *big.Int, file string, skipTests []string) erro if err != nil { return err } - if err := runBlockTests(homesteadBlock, bt, skipTests); err != nil { + if err := runBlockTests(homesteadBlock, daoForkBlock, bt, skipTests); err != nil { return err } return nil } -func runBlockTests(homesteadBlock *big.Int, bt map[string]*BlockTest, skipTests []string) error { +func runBlockTests(homesteadBlock, daoForkBlock *big.Int, bt map[string]*BlockTest, skipTests []string) error { skipTest := make(map[string]bool, len(skipTests)) for _, name := range skipTests { skipTest[name] = true @@ -148,7 +148,7 @@ func runBlockTests(homesteadBlock *big.Int, bt map[string]*BlockTest, skipTests continue } // test the block - if err := runBlockTest(homesteadBlock, test); err != nil { + if err := runBlockTest(homesteadBlock, daoForkBlock, test); err != nil { return fmt.Errorf("%s: %v", name, err) } glog.Infoln("Block test passed: ", name) @@ -157,7 +157,7 @@ func runBlockTests(homesteadBlock *big.Int, bt map[string]*BlockTest, skipTests return nil } -func runBlockTest(homesteadBlock *big.Int, test *BlockTest) error { +func runBlockTest(homesteadBlock, daoForkBlock *big.Int, test *BlockTest) error { // import pre accounts & construct test genesis block & state root db, _ := ethdb.NewMemDatabase() if _, err := test.InsertPreState(db); err != nil { @@ -169,7 +169,7 @@ func runBlockTest(homesteadBlock *big.Int, test *BlockTest) error { core.WriteCanonicalHash(db, test.Genesis.Hash(), test.Genesis.NumberU64()) core.WriteHeadBlockHash(db, test.Genesis.Hash()) evmux := new(event.TypeMux) - config := &core.ChainConfig{HomesteadBlock: homesteadBlock} + config := &core.ChainConfig{HomesteadBlock: homesteadBlock, DAOForkBlock: daoForkBlock, DAOForkSupport: true} chain, err := core.NewBlockChain(db, config, ethash.NewShared(), evmux) if err != nil { return err diff --git a/tests/files/BlockchainTests/TestNetwork/bcTheDaoTest.json b/tests/files/BlockchainTests/TestNetwork/bcTheDaoTest.json new file mode 100644 index 0000000000..cb9652a7d8 --- /dev/null +++ b/tests/files/BlockchainTests/TestNetwork/bcTheDaoTest.json @@ -0,0 +1,1818 @@ +{ + "DaoTransactions" : { + "blocks" : [ + { + "blockHeader" : { + "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", + "difficulty" : "0x020000", + "extraData" : "0x", + "gasLimit" : "0x2fefba", + "gasUsed" : "0x5208", + "hash" : "18da61d1b7f4c81d33a4646d1d1140b13ea28c8715f85e42cda0224915ea9e9c", + "mixHash" : "f470fa89e99f9f0e5a2f302c0dac085b006cb6372212e93764224e5d711b573d", + "nonce" : "2eddd7b66317fc69", + "number" : "0x01", + "parentHash" : "eb310def4877fc94c3945bdabd9ba6bbafff1c74944b2bd74a4ac01f0868804c", + "receiptTrie" : "63e81aadc86aed2ebe147fd86db74d8fbe91a938af0521be549669246e607443", + "stateRoot" : "421450c5fcaa516f03635983f0c9d936574721033424eac5e6d71c8fa14b766f", + "timestamp" : "0x578362c8", + "transactionsTrie" : "ac81275d7a81a720240146377982939179218535bfcfa9469c8bdd3e264ef179", + "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" + }, + "blocknumber" : "1", + "rlp" : "0xf9024cf901f9a0eb310def4877fc94c3945bdabd9ba6bbafff1c74944b2bd74a4ac01f0868804ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0421450c5fcaa516f03635983f0c9d936574721033424eac5e6d71c8fa14b766fa0ac81275d7a81a720240146377982939179218535bfcfa9469c8bdd3e264ef179a063e81aadc86aed2ebe147fd86db74d8fbe91a938af0521be549669246e607443b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000001832fefba82520884578362c880a0f470fa89e99f9f0e5a2f302c0dac085b006cb6372212e93764224e5d711b573d882eddd7b66317fc69f84df84b8001827530800a801ca057cb46c0b702929c4fd4127b2370f28a7aeeaa65509699e58eedf7692090a0a9a05ba7c83d99be6a9bca0c81947023ba3b5f2162516d82d0757bf8004f3e9bc03ac0", + "transactions" : [ + { + "data" : "0x", + "gasLimit" : "0x7530", + "gasPrice" : "0x01", + "nonce" : "0x00", + "r" : "0x57cb46c0b702929c4fd4127b2370f28a7aeeaa65509699e58eedf7692090a0a9", + "s" : "0x5ba7c83d99be6a9bca0c81947023ba3b5f2162516d82d0757bf8004f3e9bc03a", + "to" : "", + "v" : "0x1c", + "value" : "0x0a" + } + ], + "uncleHeaders" : [ + ] + }, + { + "blockHeader" : { + "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", + "difficulty" : "0x020040", + "extraData" : "0x", + "gasLimit" : "0x2fefba", + "gasUsed" : "0x5208", + "hash" : "6ce6218f835e3e4868a94325f31b57777373ca768f933763badaaf4147cb027b", + "mixHash" : "6bf524f42685c9912d2907520db254352cc2f84428f354097d7b13ad27a88796", + "nonce" : "6713fb980f3c9f72", + "number" : "0x02", + "parentHash" : "18da61d1b7f4c81d33a4646d1d1140b13ea28c8715f85e42cda0224915ea9e9c", + "receiptTrie" : "b41287e7f7e5d2983862a73e54c86ec144ecf835096984770f6bf485188268b8", + "stateRoot" : "1e31d34b22a8d2fd9893bb58fa80e6ca4561320eed43776c295acca93721847c", + "timestamp" : "0x578362ce", + "transactionsTrie" : "76c7a0ce7644661f276c76fb9a82eaee879d0642cf4ed244fc10afc02c646abf", + "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" + }, + "blocknumber" : "2", + "rlp" : "0xf9024cf901f9a018da61d1b7f4c81d33a4646d1d1140b13ea28c8715f85e42cda0224915ea9e9ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a01e31d34b22a8d2fd9893bb58fa80e6ca4561320eed43776c295acca93721847ca076c7a0ce7644661f276c76fb9a82eaee879d0642cf4ed244fc10afc02c646abfa0b41287e7f7e5d2983862a73e54c86ec144ecf835096984770f6bf485188268b8b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302004002832fefba82520884578362ce80a06bf524f42685c9912d2907520db254352cc2f84428f354097d7b13ad27a88796886713fb980f3c9f72f84df84b0101827530800a801ca0bb6e3cf3f281af13ef1393d7052b03cab367079a9eb71aa829ec72b231a60e1fa04bcfe1da53f26bb95806d38e9f42fef262aaaf5191e16ec473a695c8978a0b05c0", + "transactions" : [ + { + "data" : "0x", + "gasLimit" : "0x7530", + "gasPrice" : "0x01", + "nonce" : "0x01", + "r" : "0xbb6e3cf3f281af13ef1393d7052b03cab367079a9eb71aa829ec72b231a60e1f", + "s" : "0x4bcfe1da53f26bb95806d38e9f42fef262aaaf5191e16ec473a695c8978a0b05", + "to" : "", + "v" : "0x1c", + "value" : "0x0a" + } + ], + "uncleHeaders" : [ + ] + }, + { + "blockHeader" : { + "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", + "difficulty" : "0x020080", + "extraData" : "0x", + "gasLimit" : "0x2fefba", + "gasUsed" : "0x5208", + "hash" : "341aaea7ee0397c8e54effcd92e9f6e6aeda54828fa958a89a700df5b427047e", + "mixHash" : "76844249a296c9045e8c77e8c10b1794bf6b35fc1090d43b9ceacade45f57607", + "nonce" : "f6876f9244e81160", + "number" : "0x03", + "parentHash" : "6ce6218f835e3e4868a94325f31b57777373ca768f933763badaaf4147cb027b", + "receiptTrie" : "12f61177f6c2cebe14df5474c8b8c1f8f47f4ea8fff7f8b22b7aa8a4156581c8", + "stateRoot" : "587518607d6c98344439896e7f39111d76a8aac09b70d624e237da6fa29bbc44", + "timestamp" : "0x578362d0", + "transactionsTrie" : "3798aa164b61e27b93484c76a5f319bd93c808dc78ef31cf8b93f4e1b248ca2c", + "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" + }, + "blocknumber" : "3", + "rlp" : "0xf9024cf901f9a06ce6218f835e3e4868a94325f31b57777373ca768f933763badaaf4147cb027ba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0587518607d6c98344439896e7f39111d76a8aac09b70d624e237da6fa29bbc44a03798aa164b61e27b93484c76a5f319bd93c808dc78ef31cf8b93f4e1b248ca2ca012f61177f6c2cebe14df5474c8b8c1f8f47f4ea8fff7f8b22b7aa8a4156581c8b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302008003832fefba82520884578362d080a076844249a296c9045e8c77e8c10b1794bf6b35fc1090d43b9ceacade45f5760788f6876f9244e81160f84df84b0201827530800a801ca0f6d884cae1f86bdff1281e95e416089c544a4a5578a75d5e8ad76118e341b055a075b7d88985ed5acd61f30c9f9570c6c33bb92f3ad1a32b86a0747817fbc5ededc0", + "transactions" : [ + { + "data" : "0x", + "gasLimit" : "0x7530", + "gasPrice" : "0x01", + "nonce" : "0x02", + "r" : "0xf6d884cae1f86bdff1281e95e416089c544a4a5578a75d5e8ad76118e341b055", + "s" : "0x75b7d88985ed5acd61f30c9f9570c6c33bb92f3ad1a32b86a0747817fbc5eded", + "to" : "", + "v" : "0x1c", + "value" : "0x0a" + } + ], + "uncleHeaders" : [ + ] + }, + { + "blockHeader" : { + "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", + "difficulty" : "0x0200c0", + "extraData" : "0x", + "gasLimit" : "0x2fefba", + "gasUsed" : "0x5208", + "hash" : "c0cdd54d1a098c97570019a6cf54f4bf5cb0fefb8ec9b2a3a81009535ff894b5", + "mixHash" : "6c0ca9fc980d1b4bbda5dd1ead2f8a73883cd1b3895ffba14489b9d58cfe46f4", + "nonce" : "66818a34832a70b9", + "number" : "0x04", + "parentHash" : "341aaea7ee0397c8e54effcd92e9f6e6aeda54828fa958a89a700df5b427047e", + "receiptTrie" : "4346f81bc8c58aa684049309decc863c93cd6cdc84c592b62bd1439eee3636ac", + "stateRoot" : "c8ba761363f3cb1958f01fd55b864bcba7f33324ba4f95e60fc9e48d9ba6777a", + "timestamp" : "0x578362d2", + "transactionsTrie" : "4cc1b34b3a9d29bf69842a54e1c48bc97afc433883f66d2c59287f118c9c3c2c", + "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" + }, + "blocknumber" : "4", + "rlp" : "0xf9024cf901f9a0341aaea7ee0397c8e54effcd92e9f6e6aeda54828fa958a89a700df5b427047ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0c8ba761363f3cb1958f01fd55b864bcba7f33324ba4f95e60fc9e48d9ba6777aa04cc1b34b3a9d29bf69842a54e1c48bc97afc433883f66d2c59287f118c9c3c2ca04346f81bc8c58aa684049309decc863c93cd6cdc84c592b62bd1439eee3636acb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200c004832fefba82520884578362d280a06c0ca9fc980d1b4bbda5dd1ead2f8a73883cd1b3895ffba14489b9d58cfe46f48866818a34832a70b9f84df84b0301827530800a801ca0753ee5d896db8d87fe850e7935418587277cd9c010dfaaf7dd09b0a2e73785dca066deb3c241d532c7b880ae7a9a311ee7a92ef1c5e4e2bf3307990a2881bc13b0c0", + "transactions" : [ + { + "data" : "0x", + "gasLimit" : "0x7530", + "gasPrice" : "0x01", + "nonce" : "0x03", + "r" : "0x753ee5d896db8d87fe850e7935418587277cd9c010dfaaf7dd09b0a2e73785dc", + "s" : "0x66deb3c241d532c7b880ae7a9a311ee7a92ef1c5e4e2bf3307990a2881bc13b0", + "to" : "", + "v" : "0x1c", + "value" : "0x0a" + } + ], + "uncleHeaders" : [ + ] + }, + { + "blockHeader" : { + "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", + "difficulty" : "0x020100", + "extraData" : "0x", + "gasLimit" : "0x2fefba", + "gasUsed" : "0xcf08", + "hash" : "e6988968ae553d9afde49b0ff8c8f865e0ad5da5e40f31afb12a755289c99381", + "mixHash" : "418a41d8cb95ab177da1d5e32682f0206af88fe90a55601a35fb45ce3ee1d1a6", + "nonce" : "648f4d040cc945b5", + "number" : "0x05", + "parentHash" : "c0cdd54d1a098c97570019a6cf54f4bf5cb0fefb8ec9b2a3a81009535ff894b5", + "receiptTrie" : "49f411805d9b0ace02b56752bf40396c5505bb7ced5f174abf02a20b623982c0", + "stateRoot" : "8045027de50cc67c31daed085a6e72311e4f931606c6caa9f85bfc34009b3d00", + "timestamp" : "0x578362d5", + "transactionsTrie" : "165af780d27795ebc80c27759d3d949a9c4b05d35fcc7e9d3da8be357f5340cd", + "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" + }, + "blocknumber" : "5", + "rlp" : "0xf9024cf901f9a0c0cdd54d1a098c97570019a6cf54f4bf5cb0fefb8ec9b2a3a81009535ff894b5a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a08045027de50cc67c31daed085a6e72311e4f931606c6caa9f85bfc34009b3d00a0165af780d27795ebc80c27759d3d949a9c4b05d35fcc7e9d3da8be357f5340cda049f411805d9b0ace02b56752bf40396c5505bb7ced5f174abf02a20b623982c0b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302010005832fefba82cf0884578362d580a0418a41d8cb95ab177da1d5e32682f0206af88fe90a55601a35fb45ce3ee1d1a688648f4d040cc945b5f84df84b040182ea60800a801ba0cb1400f01459519ac3dc0426c6d7f95641dc6a7b8008069c9dfbe4f94b167169a07445362aadae8c25e4f0b494ad553bfc652bf34fb2ed0ccbf9a6b089c2b09f62c0", + "transactions" : [ + { + "data" : "0x", + "gasLimit" : "0xea60", + "gasPrice" : "0x01", + "nonce" : "0x04", + "r" : "0xcb1400f01459519ac3dc0426c6d7f95641dc6a7b8008069c9dfbe4f94b167169", + "s" : "0x7445362aadae8c25e4f0b494ad553bfc652bf34fb2ed0ccbf9a6b089c2b09f62", + "to" : "", + "v" : "0x1b", + "value" : "0x0a" + } + ], + "uncleHeaders" : [ + ] + }, + { + "blockHeader" : { + "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", + "difficulty" : "0x020140", + "extraData" : "0x", + "gasLimit" : "0x2fefba", + "gasUsed" : "0xcf08", + "hash" : "111c5c0a5b2f0743d6167baa6d31718fae8dcfd85eb51e788ab419444488f857", + "mixHash" : "cc03279986ee03546a0d0c0609bdfb76d830216c29b44b9008a7d5b8c7ffc317", + "nonce" : "c29ace8b96a6c660", + "number" : "0x06", + "parentHash" : "e6988968ae553d9afde49b0ff8c8f865e0ad5da5e40f31afb12a755289c99381", + "receiptTrie" : "5e40223bcc6a700b1d32c94ec5b7ed325345b400cf06913d4a1538d80dde375d", + "stateRoot" : "293f78bf5ea7fbe0c13c88d246c5d84bf917dbf39e35722ae601ea85543dee9d", + "timestamp" : "0x578362d7", + "transactionsTrie" : "ef009c3c274a522a6e2ca98232fffff747bdfab79189be3e2b5e5dc54e2a51be", + "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" + }, + "blocknumber" : "6", + "rlp" : "0xf9024cf901f9a0e6988968ae553d9afde49b0ff8c8f865e0ad5da5e40f31afb12a755289c99381a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0293f78bf5ea7fbe0c13c88d246c5d84bf917dbf39e35722ae601ea85543dee9da0ef009c3c274a522a6e2ca98232fffff747bdfab79189be3e2b5e5dc54e2a51bea05e40223bcc6a700b1d32c94ec5b7ed325345b400cf06913d4a1538d80dde375db90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302014006832fefba82cf0884578362d780a0cc03279986ee03546a0d0c0609bdfb76d830216c29b44b9008a7d5b8c7ffc31788c29ace8b96a6c660f84df84b050182ea60800a801ba04d147b172eb81fdb11a21826eabad091084f6e9613d340b5897872843efa6435a023640d906f65fd156b92d518068263d99d94dc88c3e0950fd7633fb0d4d237eec0", + "transactions" : [ + { + "data" : "0x", + "gasLimit" : "0xea60", + "gasPrice" : "0x01", + "nonce" : "0x05", + "r" : "0x4d147b172eb81fdb11a21826eabad091084f6e9613d340b5897872843efa6435", + "s" : "0x23640d906f65fd156b92d518068263d99d94dc88c3e0950fd7633fb0d4d237ee", + "to" : "", + "v" : "0x1b", + "value" : "0x0a" + } + ], + "uncleHeaders" : [ + ] + }, + { + "blockHeader" : { + "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", + "difficulty" : "0x020180", + "extraData" : "0x", + "gasLimit" : "0x2fefba", + "gasUsed" : "0xa042", + "hash" : "3b08badb7af69e5b04e06a1aafe6b1e26b9e59931f6703f96833a1e65ed061e4", + "mixHash" : "c43fd62737e2c341234fed01e5a75da2e41a0d0d5d71ed7f65a6d07343af82df", + "nonce" : "2510c815a38b31b7", + "number" : "0x07", + "parentHash" : "111c5c0a5b2f0743d6167baa6d31718fae8dcfd85eb51e788ab419444488f857", + "receiptTrie" : "e3beaaa91301cca4d98fc58b2aad310bd7bd147d4ff00f4fb5ce2b186a039f2d", + "stateRoot" : "219ec50b26a20c420f96b8905f669455145efef0233e52a39c2d338b52a60f8c", + "timestamp" : "0x578362d8", + "transactionsTrie" : "b2d17fa171d19df4e817ffb15f38526d125a42b7879cd712584b130dc8ad341c", + "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" + }, + "blocknumber" : "7", + "rlp" : "0xf90260f901f9a0111c5c0a5b2f0743d6167baa6d31718fae8dcfd85eb51e788ab419444488f857a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0219ec50b26a20c420f96b8905f669455145efef0233e52a39c2d338b52a60f8ca0b2d17fa171d19df4e817ffb15f38526d125a42b7879cd712584b130dc8ad341ca0e3beaaa91301cca4d98fc58b2aad310bd7bd147d4ff00f4fb5ce2b186a039f2db90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302018007832fefba82a04284578362d880a0c43fd62737e2c341234fed01e5a75da2e41a0d0d5d71ed7f65a6d07343af82df882510c815a38b31b7f861f85f060182ea609410000000000000000000000000000000000000070a801ba0bb8523d4c53ed16b355d0a2dba02154d23a5480449dc3894be40ef95511d2fe9a010ad725c2df4979b7a071b3fa9b6b719223f0167d68b98f213e8611f84d4d81bc0", + "transactions" : [ + { + "data" : "0x", + "gasLimit" : "0xea60", + "gasPrice" : "0x01", + "nonce" : "0x06", + "r" : "0xbb8523d4c53ed16b355d0a2dba02154d23a5480449dc3894be40ef95511d2fe9", + "s" : "0x10ad725c2df4979b7a071b3fa9b6b719223f0167d68b98f213e8611f84d4d81b", + "to" : "1000000000000000000000000000000000000007", + "v" : "0x1b", + "value" : "0x0a" + } + ], + "uncleHeaders" : [ + ] + }, + { + "blocknumber" : "8", + "rlp" : "0xf9024af901e3a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000940000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080808080a0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80f861f85f070182ea609410000000000000000000000000000000000000080a801ba03bce709627e1c9340795f11cc866742a0b5ced2b7e2da53e0cfe6f5f1df0a77ea02df804cdb52edacc4e01d8632050101cf7de7b235d37c31b504010910ec8f1f6c0" + }, + { + "blockHeader" : { + "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", + "difficulty" : "0x0201c0", + "extraData" : "0x64616f2d686172642d666f726b", + "gasLimit" : "0x2fefba", + "gasUsed" : "0x65aa", + "hash" : "a8e7968fd01c207811352ab6fc86841574979a456617eb110ebd4e25b7415bcd", + "mixHash" : "d7379be76dc312d2b562cbc727089ac08a2100390056664d46b3e367e9fe43a7", + "nonce" : "796b5d001b1985d4", + "number" : "0x08", + "parentHash" : "3b08badb7af69e5b04e06a1aafe6b1e26b9e59931f6703f96833a1e65ed061e4", + "receiptTrie" : "cb09490c5315ec68e121f33138f04090fb2b4a22da3f87a28c8626ec65a405cb", + "stateRoot" : "25c76e2a0478ceeaaf17619cfa46b1907f676cebf43fa41c857f10b1b50c8884", + "timestamp" : "0x578362dc", + "transactionsTrie" : "2982eb44bedb5b2484b9606fe37f966942a2cce51f0705537f9040ef0614d54e", + "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" + }, + "blocknumber" : "8", + "rlp" : "0xf9026df90206a03b08badb7af69e5b04e06a1aafe6b1e26b9e59931f6703f96833a1e65ed061e4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a025c76e2a0478ceeaaf17619cfa46b1907f676cebf43fa41c857f10b1b50c8884a02982eb44bedb5b2484b9606fe37f966942a2cce51f0705537f9040ef0614d54ea0cb09490c5315ec68e121f33138f04090fb2b4a22da3f87a28c8626ec65a405cbb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830201c008832fefba8265aa84578362dc8d64616f2d686172642d666f726ba0d7379be76dc312d2b562cbc727089ac08a2100390056664d46b3e367e9fe43a788796b5d001b1985d4f861f85f070182ea609410000000000000000000000000000000000000080a801ba03bce709627e1c9340795f11cc866742a0b5ced2b7e2da53e0cfe6f5f1df0a77ea02df804cdb52edacc4e01d8632050101cf7de7b235d37c31b504010910ec8f1f6c0", + "transactions" : [ + { + "data" : "0x", + "gasLimit" : "0xea60", + "gasPrice" : "0x01", + "nonce" : "0x07", + "r" : "0x3bce709627e1c9340795f11cc866742a0b5ced2b7e2da53e0cfe6f5f1df0a77e", + "s" : "0x2df804cdb52edacc4e01d8632050101cf7de7b235d37c31b504010910ec8f1f6", + "to" : "1000000000000000000000000000000000000008", + "v" : "0x1b", + "value" : "0x0a" + } + ], + "uncleHeaders" : [ + ] + }, + { + "blocknumber" : "9", + "rlp" : "0xf9024af901e3a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000940000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080808080a0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80f861f85f080182ea6094100000000000000000000000000000000000000101801ba0af2bb21c6953c5c7bb966a9c09e43c52641e6e317ab738cd409a5fb9ef5e753fa010db71dc8b41e52ce746895f743c1cc1fe7ed32f17ff7935b610fcbccdc75720c0" + }, + { + "blockHeader" : { + "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", + "difficulty" : "0x020200", + "extraData" : "0x64616f2d686172642d666f726b", + "gasLimit" : "0x2fefba", + "gasUsed" : "0x5208", + "hash" : "174c3f191f8955da5a75246f43edcbc1fde1fb0b2824dd5ac6986692763cc328", + "mixHash" : "e9ea6f80af2746d73f07a040332d0f9ce5d643b1f28c8536f549f14a3b36a272", + "nonce" : "1046883c965b5d81", + "number" : "0x09", + "parentHash" : "a8e7968fd01c207811352ab6fc86841574979a456617eb110ebd4e25b7415bcd", + "receiptTrie" : "405be8d48a642e0536283f01acfb9868e4d921a1444005e8298cb83d00f82704", + "stateRoot" : "9082a0c78b99b419eed76e297c9367cd2613ac98684e211a10794599e1efd0b6", + "timestamp" : "0x578362e0", + "transactionsTrie" : "7dac38119a2beeb72d0f67b77bef9a4cbae22ca5c7151f1e737f9db1bf37b135", + "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" + }, + "blocknumber" : "9", + "rlp" : "0xf9026df90206a0a8e7968fd01c207811352ab6fc86841574979a456617eb110ebd4e25b7415bcda01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a09082a0c78b99b419eed76e297c9367cd2613ac98684e211a10794599e1efd0b6a07dac38119a2beeb72d0f67b77bef9a4cbae22ca5c7151f1e737f9db1bf37b135a0405be8d48a642e0536283f01acfb9868e4d921a1444005e8298cb83d00f82704b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302020009832fefba82520884578362e08d64616f2d686172642d666f726ba0e9ea6f80af2746d73f07a040332d0f9ce5d643b1f28c8536f549f14a3b36a272881046883c965b5d81f861f85f080182ea6094100000000000000000000000000000000000000101801ba0af2bb21c6953c5c7bb966a9c09e43c52641e6e317ab738cd409a5fb9ef5e753fa010db71dc8b41e52ce746895f743c1cc1fe7ed32f17ff7935b610fcbccdc75720c0", + "transactions" : [ + { + "data" : "0x", + "gasLimit" : "0xea60", + "gasPrice" : "0x01", + "nonce" : "0x08", + "r" : "0xaf2bb21c6953c5c7bb966a9c09e43c52641e6e317ab738cd409a5fb9ef5e753f", + "s" : "0x10db71dc8b41e52ce746895f743c1cc1fe7ed32f17ff7935b610fcbccdc75720", + "to" : "1000000000000000000000000000000000000001", + "v" : "0x1b", + "value" : "0x01" + } + ], + "uncleHeaders" : [ + ] + }, + { + "blocknumber" : "10", + "rlp" : "0xf9024af901e3a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000940000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080808080a0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80f861f85f090182ea6094100000000000000000000000000000000000000101801ca0c3d783e93561599d86cbf460e153b3cb37d90478a3c47bfc08bd29563c9d849fa0100e466f7a4c6af73a9030988c63ec88ccaba460fd6a1fb1adc30b61dbdd0857c0" + }, + { + "blockHeader" : { + "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", + "difficulty" : "0x020240", + "extraData" : "0x64616f2d686172642d666f726b", + "gasLimit" : "0x2fefba", + "gasUsed" : "0x5208", + "hash" : "872664b8cea7f2f8a92618e2c2f609ed8688424a211f9b51ede088523bd35fa3", + "mixHash" : "0f075e1fcf0d36cc5018bcb2f1ec03ad7cb85350fbfc3437695d8adbe0319055", + "nonce" : "fb63b58204ee99a1", + "number" : "0x0a", + "parentHash" : "174c3f191f8955da5a75246f43edcbc1fde1fb0b2824dd5ac6986692763cc328", + "receiptTrie" : "7816771f20df86ba51fe1b9b124be162607d9a74753fbcec73e7fd0e4b803fc8", + "stateRoot" : "14baa5da9e9e7b864d11a6ab7c75d49f3582ef61566bc06ac825894eab40dd47", + "timestamp" : "0x578362e5", + "transactionsTrie" : "771cef5982e1119f26a627bbeeadc21e350838157aad275b2f4a884a57e277da", + "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" + }, + "blocknumber" : "10", + "rlp" : "0xf9026df90206a0174c3f191f8955da5a75246f43edcbc1fde1fb0b2824dd5ac6986692763cc328a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a014baa5da9e9e7b864d11a6ab7c75d49f3582ef61566bc06ac825894eab40dd47a0771cef5982e1119f26a627bbeeadc21e350838157aad275b2f4a884a57e277daa07816771f20df86ba51fe1b9b124be162607d9a74753fbcec73e7fd0e4b803fc8b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830202400a832fefba82520884578362e58d64616f2d686172642d666f726ba00f075e1fcf0d36cc5018bcb2f1ec03ad7cb85350fbfc3437695d8adbe031905588fb63b58204ee99a1f861f85f090182ea6094100000000000000000000000000000000000000101801ca0c3d783e93561599d86cbf460e153b3cb37d90478a3c47bfc08bd29563c9d849fa0100e466f7a4c6af73a9030988c63ec88ccaba460fd6a1fb1adc30b61dbdd0857c0", + "transactions" : [ + { + "data" : "0x", + "gasLimit" : "0xea60", + "gasPrice" : "0x01", + "nonce" : "0x09", + "r" : "0xc3d783e93561599d86cbf460e153b3cb37d90478a3c47bfc08bd29563c9d849f", + "s" : "0x100e466f7a4c6af73a9030988c63ec88ccaba460fd6a1fb1adc30b61dbdd0857", + "to" : "1000000000000000000000000000000000000001", + "v" : "0x1c", + "value" : "0x01" + } + ], + "uncleHeaders" : [ + ] + }, + { + "blocknumber" : "11", + "rlp" : "0xf9024af901e3a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000940000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080808080a0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80f861f85f0a0182ea6094100000000000000000000000000000000000000101801ca076766ba9925c43448e1ac5c05f7583e6d3a3366eb3dc95a3489ff363b449795ca059b8da33b7aea0d60059f5c1eabce26c1e23e32f31930bff3b49eb1e94cc62a0c0" + }, + { + "blockHeader" : { + "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", + "difficulty" : "0x020280", + "extraData" : "0x64616f2d686172642d666f726b", + "gasLimit" : "0x2fefba", + "gasUsed" : "0x5208", + "hash" : "ea29fb161cd0baa00b7ec957ffb4eec2c13f98dbdaa5cbb5352e6c315885c7d2", + "mixHash" : "f5e7f98d27237c0000ff5d35c1078056a01b07564d37768456d47bc2c97e7e3e", + "nonce" : "f4a8a19edb48f3bc", + "number" : "0x0b", + "parentHash" : "872664b8cea7f2f8a92618e2c2f609ed8688424a211f9b51ede088523bd35fa3", + "receiptTrie" : "76c1e3d0c78e8ddf32608b571a8bbcf6ec06ad6e4d832b1527be8bcdc9e8babc", + "stateRoot" : "745349a2480a86c28aa035ce47b40f8f5045efefac899c3ed9265103427043dd", + "timestamp" : "0x578362e9", + "transactionsTrie" : "10a81573cb14d5c2794e1b406e26b6d9612c888bbc98c453131bd9b06f61d7c9", + "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" + }, + "blocknumber" : "11", + "rlp" : "0xf9026df90206a0872664b8cea7f2f8a92618e2c2f609ed8688424a211f9b51ede088523bd35fa3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0745349a2480a86c28aa035ce47b40f8f5045efefac899c3ed9265103427043dda010a81573cb14d5c2794e1b406e26b6d9612c888bbc98c453131bd9b06f61d7c9a076c1e3d0c78e8ddf32608b571a8bbcf6ec06ad6e4d832b1527be8bcdc9e8babcb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830202800b832fefba82520884578362e98d64616f2d686172642d666f726ba0f5e7f98d27237c0000ff5d35c1078056a01b07564d37768456d47bc2c97e7e3e88f4a8a19edb48f3bcf861f85f0a0182ea6094100000000000000000000000000000000000000101801ca076766ba9925c43448e1ac5c05f7583e6d3a3366eb3dc95a3489ff363b449795ca059b8da33b7aea0d60059f5c1eabce26c1e23e32f31930bff3b49eb1e94cc62a0c0", + "transactions" : [ + { + "data" : "0x", + "gasLimit" : "0xea60", + "gasPrice" : "0x01", + "nonce" : "0x0a", + "r" : "0x76766ba9925c43448e1ac5c05f7583e6d3a3366eb3dc95a3489ff363b449795c", + "s" : "0x59b8da33b7aea0d60059f5c1eabce26c1e23e32f31930bff3b49eb1e94cc62a0", + "to" : "1000000000000000000000000000000000000001", + "v" : "0x1c", + "value" : "0x01" + } + ], + "uncleHeaders" : [ + ] + }, + { + "blocknumber" : "12", + "rlp" : "0xf9024af901e3a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000940000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080808080a0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80f861f85f0b0182ea6094100000000000000000000000000000000000000101801ca085939abfa5d1d2dd8e1bde2655e44236d8e1940a075000301d6deab472ccd680a078d2ae659006c58f9ccc5af29955f7439e48b30b2efe64abdd001165364faa9ac0" + }, + { + "blockHeader" : { + "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", + "difficulty" : "0x0202c0", + "extraData" : "0x64616f2d686172642d666f726b", + "gasLimit" : "0x2fefba", + "gasUsed" : "0x5208", + "hash" : "dd37603315dead14fc07c82fd274016e5853ed2b74c05df832bec2eeeded5d01", + "mixHash" : "5409bef91ea0fe9b28750db667aca7b42019e99806c64850d6baf74a527c39e9", + "nonce" : "8ad88fec4eaba1bd", + "number" : "0x0c", + "parentHash" : "ea29fb161cd0baa00b7ec957ffb4eec2c13f98dbdaa5cbb5352e6c315885c7d2", + "receiptTrie" : "7cced79fcdebd96670df83f4c13f71aa9cb3dbce19df27f7f6ff8b12fef91282", + "stateRoot" : "40ef6bb351314ea48ab6462f2cabcf96ee476cec1f4670919f90efb2a5956ab3", + "timestamp" : "0x578362ed", + "transactionsTrie" : "b7757adef51c8c3b9b0433d1a0db70fe5505e8db1848934da1c1d2c6aafc3f65", + "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" + }, + "blocknumber" : "12", + "rlp" : "0xf9026df90206a0ea29fb161cd0baa00b7ec957ffb4eec2c13f98dbdaa5cbb5352e6c315885c7d2a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a040ef6bb351314ea48ab6462f2cabcf96ee476cec1f4670919f90efb2a5956ab3a0b7757adef51c8c3b9b0433d1a0db70fe5505e8db1848934da1c1d2c6aafc3f65a07cced79fcdebd96670df83f4c13f71aa9cb3dbce19df27f7f6ff8b12fef91282b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830202c00c832fefba82520884578362ed8d64616f2d686172642d666f726ba05409bef91ea0fe9b28750db667aca7b42019e99806c64850d6baf74a527c39e9888ad88fec4eaba1bdf861f85f0b0182ea6094100000000000000000000000000000000000000101801ca085939abfa5d1d2dd8e1bde2655e44236d8e1940a075000301d6deab472ccd680a078d2ae659006c58f9ccc5af29955f7439e48b30b2efe64abdd001165364faa9ac0", + "transactions" : [ + { + "data" : "0x", + "gasLimit" : "0xea60", + "gasPrice" : "0x01", + "nonce" : "0x0b", + "r" : "0x85939abfa5d1d2dd8e1bde2655e44236d8e1940a075000301d6deab472ccd680", + "s" : "0x78d2ae659006c58f9ccc5af29955f7439e48b30b2efe64abdd001165364faa9a", + "to" : "1000000000000000000000000000000000000001", + "v" : "0x1c", + "value" : "0x01" + } + ], + "uncleHeaders" : [ + ] + }, + { + "blocknumber" : "13", + "rlp" : "0xf9024af901e3a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000940000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080808080a0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80f861f85f0c0182ea6094100000000000000000000000000000000000000101801ca00bb5ae599741966cbd02d6080937bd1f247dfaa266e19891228a4fbfc0c85226a07a4f56371aa5b685bc10d64e180e24850ae18b0fcc675e7d187f877b8d9b1bf6c0" + }, + { + "blockHeader" : { + "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", + "difficulty" : "0x020300", + "extraData" : "0x64616f2d686172642d666f726b", + "gasLimit" : "0x2fefba", + "gasUsed" : "0x5208", + "hash" : "c481c38537eaa8cdc85f0ee37cc714b2016cdf16bfa238f2c2971be9ecfd6250", + "mixHash" : "0d93ec85a64803d79b7af732d1c343c0a686d699c7878761db0c119d3c7da9f9", + "nonce" : "5ba262dce70d6a1e", + "number" : "0x0d", + "parentHash" : "dd37603315dead14fc07c82fd274016e5853ed2b74c05df832bec2eeeded5d01", + "receiptTrie" : "27206e196468a999013a22f5ad0a2747cba1311e0398bb601fda5570045753b8", + "stateRoot" : "be645d0bc31a6df9f0df1ff766d651e5253eeaa750c9d6eea98349a4c2b26679", + "timestamp" : "0x578362f1", + "transactionsTrie" : "38b9ac6344a8e2cdd0c0b598f70f21997ab1b39d3ecb2f7a8c7af93e300e0398", + "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" + }, + "blocknumber" : "13", + "rlp" : "0xf9026df90206a0dd37603315dead14fc07c82fd274016e5853ed2b74c05df832bec2eeeded5d01a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0be645d0bc31a6df9f0df1ff766d651e5253eeaa750c9d6eea98349a4c2b26679a038b9ac6344a8e2cdd0c0b598f70f21997ab1b39d3ecb2f7a8c7af93e300e0398a027206e196468a999013a22f5ad0a2747cba1311e0398bb601fda5570045753b8b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830203000d832fefba82520884578362f18d64616f2d686172642d666f726ba00d93ec85a64803d79b7af732d1c343c0a686d699c7878761db0c119d3c7da9f9885ba262dce70d6a1ef861f85f0c0182ea6094100000000000000000000000000000000000000101801ca00bb5ae599741966cbd02d6080937bd1f247dfaa266e19891228a4fbfc0c85226a07a4f56371aa5b685bc10d64e180e24850ae18b0fcc675e7d187f877b8d9b1bf6c0", + "transactions" : [ + { + "data" : "0x", + "gasLimit" : "0xea60", + "gasPrice" : "0x01", + "nonce" : "0x0c", + "r" : "0x0bb5ae599741966cbd02d6080937bd1f247dfaa266e19891228a4fbfc0c85226", + "s" : "0x7a4f56371aa5b685bc10d64e180e24850ae18b0fcc675e7d187f877b8d9b1bf6", + "to" : "1000000000000000000000000000000000000001", + "v" : "0x1c", + "value" : "0x01" + } + ], + "uncleHeaders" : [ + ] + }, + { + "blocknumber" : "14", + "rlp" : "0xf9024af901e3a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000940000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080808080a0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80f861f85f0d0182ea6094100000000000000000000000000000000000000101801ba0db8f9cd690ad1f6481c09a5445a4185d4fcfdeed76f7ba403d303985c1abaa4ca01ed5f2e9fd9a021103acc910cbefcdaa82d2afd44205a8f681f0c17ebf2da192c0" + }, + { + "blockHeader" : { + "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", + "difficulty" : "0x020340", + "extraData" : "0x64616f2d686172642d666f726b", + "gasLimit" : "0x2fefba", + "gasUsed" : "0x5208", + "hash" : "b14471504858a942fbfd5df9cb31e47796a86ff02bb42e4aea45982b2f8af5c4", + "mixHash" : "e786f31b72887e787326f12aff5c5af35bd9e88ce28743117df384467687ab3d", + "nonce" : "4dd28afbb24464cc", + "number" : "0x0e", + "parentHash" : "c481c38537eaa8cdc85f0ee37cc714b2016cdf16bfa238f2c2971be9ecfd6250", + "receiptTrie" : "3219cbaae09e7a53589bfa9a65ef4dd7e37b8d631a65b3dfbcbba13bdc3cdb05", + "stateRoot" : "ffcc7e2a5c78d83c28d38494c8f432971d60fc23e8461c400880e59c9f22f2e6", + "timestamp" : "0x578362f6", + "transactionsTrie" : "4b6ff42fd8884c83615bf62830df849b18901c07615aafef9aaf16d33f807349", + "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" + }, + "blocknumber" : "14", + "rlp" : "0xf9026df90206a0c481c38537eaa8cdc85f0ee37cc714b2016cdf16bfa238f2c2971be9ecfd6250a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0ffcc7e2a5c78d83c28d38494c8f432971d60fc23e8461c400880e59c9f22f2e6a04b6ff42fd8884c83615bf62830df849b18901c07615aafef9aaf16d33f807349a03219cbaae09e7a53589bfa9a65ef4dd7e37b8d631a65b3dfbcbba13bdc3cdb05b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830203400e832fefba82520884578362f68d64616f2d686172642d666f726ba0e786f31b72887e787326f12aff5c5af35bd9e88ce28743117df384467687ab3d884dd28afbb24464ccf861f85f0d0182ea6094100000000000000000000000000000000000000101801ba0db8f9cd690ad1f6481c09a5445a4185d4fcfdeed76f7ba403d303985c1abaa4ca01ed5f2e9fd9a021103acc910cbefcdaa82d2afd44205a8f681f0c17ebf2da192c0", + "transactions" : [ + { + "data" : "0x", + "gasLimit" : "0xea60", + "gasPrice" : "0x01", + "nonce" : "0x0d", + "r" : "0xdb8f9cd690ad1f6481c09a5445a4185d4fcfdeed76f7ba403d303985c1abaa4c", + "s" : "0x1ed5f2e9fd9a021103acc910cbefcdaa82d2afd44205a8f681f0c17ebf2da192", + "to" : "1000000000000000000000000000000000000001", + "v" : "0x1b", + "value" : "0x01" + } + ], + "uncleHeaders" : [ + ] + }, + { + "blocknumber" : "15", + "rlp" : "0xf9024af901e3a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000940000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080808080a0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80f861f85f0e0182ea6094100000000000000000000000000000000000000101801ca0af8f37a08239d55138f8b92680c682d4118da357c79d6a6b148a6dcce4d961d1a057bf5b29fc32419091bd8e170fed46703b7a2640be0ca91d6903d75c932be160c0" + }, + { + "blockHeader" : { + "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", + "difficulty" : "0x020380", + "extraData" : "0x64616f2d686172642d666f726b", + "gasLimit" : "0x2fefba", + "gasUsed" : "0x5208", + "hash" : "9849305deb139e14edc8a2daf9c69ff4bde43c90d1a9fc4be74d60ca856de52c", + "mixHash" : "0b38e08a130828a9b42499a61955a1f05f29b3c54721c9000108681b24df1bbe", + "nonce" : "a903296b20afc6c1", + "number" : "0x0f", + "parentHash" : "b14471504858a942fbfd5df9cb31e47796a86ff02bb42e4aea45982b2f8af5c4", + "receiptTrie" : "3f8e538224b10251d17ea50eef083205f714f89dd10b1338df828c2fd14da074", + "stateRoot" : "da5a9eb135d2a19f28da52eda0fcff26d26326dac4c622d6b2f0d7a6873ab27c", + "timestamp" : "0x578362fb", + "transactionsTrie" : "ce025c4f49fea19fbb8b91252f03fd36d2ff6e9e8817c701452992098534abda", + "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" + }, + "blocknumber" : "15", + "rlp" : "0xf9026df90206a0b14471504858a942fbfd5df9cb31e47796a86ff02bb42e4aea45982b2f8af5c4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0da5a9eb135d2a19f28da52eda0fcff26d26326dac4c622d6b2f0d7a6873ab27ca0ce025c4f49fea19fbb8b91252f03fd36d2ff6e9e8817c701452992098534abdaa03f8e538224b10251d17ea50eef083205f714f89dd10b1338df828c2fd14da074b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830203800f832fefba82520884578362fb8d64616f2d686172642d666f726ba00b38e08a130828a9b42499a61955a1f05f29b3c54721c9000108681b24df1bbe88a903296b20afc6c1f861f85f0e0182ea6094100000000000000000000000000000000000000101801ca0af8f37a08239d55138f8b92680c682d4118da357c79d6a6b148a6dcce4d961d1a057bf5b29fc32419091bd8e170fed46703b7a2640be0ca91d6903d75c932be160c0", + "transactions" : [ + { + "data" : "0x", + "gasLimit" : "0xea60", + "gasPrice" : "0x01", + "nonce" : "0x0e", + "r" : "0xaf8f37a08239d55138f8b92680c682d4118da357c79d6a6b148a6dcce4d961d1", + "s" : "0x57bf5b29fc32419091bd8e170fed46703b7a2640be0ca91d6903d75c932be160", + "to" : "1000000000000000000000000000000000000001", + "v" : "0x1c", + "value" : "0x01" + } + ], + "uncleHeaders" : [ + ] + }, + { + "blocknumber" : "16", + "rlp" : "0xf9024af901e3a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000940000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080808080a0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80f861f85f0f0182ea6094100000000000000000000000000000000000000101801ba040a5467881266422758d59ae66fb3d2511f0131038b0e43abc397d01527fd61ea0172ed4b9c3cf917bf071cb6cc716c4f6754949ea94888d4bb9657eac98fd2c10c0" + }, + { + "blockHeader" : { + "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", + "difficulty" : "0x0203c0", + "extraData" : "0x64616f2d686172642d666f726b", + "gasLimit" : "0x2fefba", + "gasUsed" : "0x5208", + "hash" : "6d29b0a6632f26fa1e689965087a09c739771dc469b9c49bc744d6207c9e2fed", + "mixHash" : "7ab225e313b7f890caaf575528bb16189826c5a1c9589e7ad5635d123886b6a5", + "nonce" : "682109d020f5de8a", + "number" : "0x10", + "parentHash" : "9849305deb139e14edc8a2daf9c69ff4bde43c90d1a9fc4be74d60ca856de52c", + "receiptTrie" : "cb5e5d42756e48dfe3c93e5656cb7367090c1406ddb6a47f71058cb96de158f0", + "stateRoot" : "7d9e18f987e1e0f6244158d2c75dc881e28cdc3b54da6ad3d6743e630d11674f", + "timestamp" : "0x57836301", + "transactionsTrie" : "6f2130deb628c7742532339d5b5f1539f9579edcab16996b3b05836a6883073f", + "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" + }, + "blocknumber" : "16", + "rlp" : "0xf9026df90206a09849305deb139e14edc8a2daf9c69ff4bde43c90d1a9fc4be74d60ca856de52ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a07d9e18f987e1e0f6244158d2c75dc881e28cdc3b54da6ad3d6743e630d11674fa06f2130deb628c7742532339d5b5f1539f9579edcab16996b3b05836a6883073fa0cb5e5d42756e48dfe3c93e5656cb7367090c1406ddb6a47f71058cb96de158f0b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830203c010832fefba82520884578363018d64616f2d686172642d666f726ba07ab225e313b7f890caaf575528bb16189826c5a1c9589e7ad5635d123886b6a588682109d020f5de8af861f85f0f0182ea6094100000000000000000000000000000000000000101801ba040a5467881266422758d59ae66fb3d2511f0131038b0e43abc397d01527fd61ea0172ed4b9c3cf917bf071cb6cc716c4f6754949ea94888d4bb9657eac98fd2c10c0", + "transactions" : [ + { + "data" : "0x", + "gasLimit" : "0xea60", + "gasPrice" : "0x01", + "nonce" : "0x0f", + "r" : "0x40a5467881266422758d59ae66fb3d2511f0131038b0e43abc397d01527fd61e", + "s" : "0x172ed4b9c3cf917bf071cb6cc716c4f6754949ea94888d4bb9657eac98fd2c10", + "to" : "1000000000000000000000000000000000000001", + "v" : "0x1b", + "value" : "0x01" + } + ], + "uncleHeaders" : [ + ] + }, + { + "blocknumber" : "17", + "rlp" : "0xf9024af901e3a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000940000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080808080a0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80f861f85f100182ea6094100000000000000000000000000000000000000101801ba0d7933ba406ea332cdec2d673bbf5789c34a43224629c220bd0ac2c9d81c7b094a05e0a096cbe3bdc9047b18de6be4822165c669bddf712456567dc525547059ff8c0" + }, + { + "blockHeader" : { + "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", + "difficulty" : "0x020400", + "extraData" : "0x64616f2d686172642d666f726b", + "gasLimit" : "0x2fefba", + "gasUsed" : "0x5208", + "hash" : "f05375344257478b69eaf22bb6ee010daac8e37077c20946b2cd673e4caf4897", + "mixHash" : "5aca39367567bf655adcbed51353fda57286a67a4ad09d8a5e2be84522727744", + "nonce" : "e14722f02bf5d663", + "number" : "0x11", + "parentHash" : "6d29b0a6632f26fa1e689965087a09c739771dc469b9c49bc744d6207c9e2fed", + "receiptTrie" : "eea278a71391069b01fd9759bafca57b149bc9d6dc212bdddaa2f378e0ecfe95", + "stateRoot" : "c0f43306d07073f10d93dcf01bd8dada0eceedb213eed501801a13f2b205e333", + "timestamp" : "0x57836307", + "transactionsTrie" : "316f3430ee504cbaa58cec2ce451de2fc9e0f1e7f99b16b33f69ab3ca93130be", + "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" + }, + "blocknumber" : "17", + "rlp" : "0xf9026df90206a06d29b0a6632f26fa1e689965087a09c739771dc469b9c49bc744d6207c9e2feda01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0c0f43306d07073f10d93dcf01bd8dada0eceedb213eed501801a13f2b205e333a0316f3430ee504cbaa58cec2ce451de2fc9e0f1e7f99b16b33f69ab3ca93130bea0eea278a71391069b01fd9759bafca57b149bc9d6dc212bdddaa2f378e0ecfe95b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302040011832fefba82520884578363078d64616f2d686172642d666f726ba05aca39367567bf655adcbed51353fda57286a67a4ad09d8a5e2be8452272774488e14722f02bf5d663f861f85f100182ea6094100000000000000000000000000000000000000101801ba0d7933ba406ea332cdec2d673bbf5789c34a43224629c220bd0ac2c9d81c7b094a05e0a096cbe3bdc9047b18de6be4822165c669bddf712456567dc525547059ff8c0", + "transactions" : [ + { + "data" : "0x", + "gasLimit" : "0xea60", + "gasPrice" : "0x01", + "nonce" : "0x10", + "r" : "0xd7933ba406ea332cdec2d673bbf5789c34a43224629c220bd0ac2c9d81c7b094", + "s" : "0x5e0a096cbe3bdc9047b18de6be4822165c669bddf712456567dc525547059ff8", + "to" : "1000000000000000000000000000000000000001", + "v" : "0x1b", + "value" : "0x01" + } + ], + "uncleHeaders" : [ + ] + } + ], + "genesisBlockHeader" : { + "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", + "difficulty" : "0x020000", + "extraData" : "0x42", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", + "hash" : "eb310def4877fc94c3945bdabd9ba6bbafff1c74944b2bd74a4ac01f0868804c", + "mixHash" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "nonce" : "0102030405060708", + "number" : "0x00", + "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", + "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot" : "4eda2e603f5b9ad6e92c0cba602372d0a0cd2e776a17b61a7a20225ffa7643d7", + "timestamp" : "0x54c98c81", + "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" + }, + "genesisRLP" : "0xf901fcf901f7a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a04eda2e603f5b9ad6e92c0cba602372d0a0cd2e776a17b61a7a20225ffa7643d7a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000080832fefd8808454c98c8142a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421880102030405060708c0c0", + "lastblockhash" : "f05375344257478b69eaf22bb6ee010daac8e37077c20946b2cd673e4caf4897", + "postState" : { + "0c243ebe6a031753dc0dd850acf422844a3efb76" : { + "balance" : "0x0a", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "1000000000000000000000000000000000000001" : { + "balance" : "0x09", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "1000000000000000000000000000000000000007" : { + "balance" : "0x0a", + "code" : "0x73807640a13483f8ac783c557fcdf27be11ea4ac7a31600055", + "nonce" : "0x00", + "storage" : { + "0x00" : "0x02540be400" + } + }, + "1000000000000000000000000000000000000008" : { + "balance" : "0x0a", + "code" : "0x73807640a13483f8ac783c557fcdf27be11ea4ac7a31600055", + "nonce" : "0x00", + "storage" : { + } + }, + "17802f43a0137c506ba92291391a8a8f207f487d" : { + "balance" : "0x00", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "248f0f0f33eadb89e9d87fd5c127f58567f3ffde" : { + "balance" : "0x0a", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "2b3455ec7fedf16e646268bf88846bd7a2319bb2" : { + "balance" : "0x00", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "304a554a310c7e546dfe434669c62820b7d83490" : { + "balance" : "0x00", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "4613f3bca5c44ea06337a9e439fbc6d42e501d0a" : { + "balance" : "0x00", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { + "balance" : "0x0a", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "7602b46df5390e432ef1c307d4f2c9ff6d65cc97" : { + "balance" : "0x00", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "807640a13483f8ac783c557fcdf27be11ea4ac7a" : { + "balance" : "0x00", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "84ef4b2357079cd7a7c69fd7a37cd0609a679106" : { + "balance" : "0x00", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "85c2f277588ea1e6901ed59e587bea222c575f87" : { + "balance" : "0x0a", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "8888f1f195afa192cfee860698584c030f4c9db1" : { + "balance" : "0x049b9ca9a6943ace64", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "914d1b8b43e92723e64fd0a06f5bdb8dd9b10c79" : { + "balance" : "0x00", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "0x3b93fb43", + "code" : "0x", + "nonce" : "0x11", + "storage" : { + } + }, + "abcabcabcabcabcabcabcabcabcabcabcabcabca" : { + "balance" : "0x2c3cf12e40", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "accc230e8a6e5be9160b8cdf2864dd2a001c28b6" : { + "balance" : "0x00", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "aeeb8ff27288bdabc0fa5ebb731b6f409507516c" : { + "balance" : "0x00", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "b136707642a4ea12fb4bae820f03d2562ebff487" : { + "balance" : "0x00", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "b1d37cf6180ceb738ca45b5005a2f418c02e204b" : { + "balance" : "0x0a", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "bb9bc244d798123fde783fcc1c72d3bb8c189413" : { + "balance" : "0x00", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "ca544e5c4687d109611d0f8f928b53a25af72448" : { + "balance" : "0x00", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "cbb9d3703e651b0d496cdefb8b92c25aeb2171f7" : { + "balance" : "0x00", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "d343b217de44030afaa275f54d31a9317c7f441e" : { + "balance" : "0x00", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "da2fef9e4a3230988ff17df2165440f37e8b1708" : { + "balance" : "0x00", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "dbe9b615a3ae8709af8b93336ce9b477e4ac0940" : { + "balance" : "0x00", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "ec0e71ad0a90ffe1909d27dac207f7680abba42d" : { + "balance" : "0x0a", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "f14c14075d6c4ed84b86798af0956deef67365b5" : { + "balance" : "0x00", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "f4c64518ea10f995918a454158c6b61407ea345c" : { + "balance" : "0x00", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "fe24cdd8648121a43a7c86d289be4dd2951ed49f" : { + "balance" : "0x00", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + } + }, + "pre" : { + "1000000000000000000000000000000000000007" : { + "balance" : "0x00", + "code" : "0x73807640a13483f8ac783c557fcdf27be11ea4ac7a31600055", + "nonce" : "0x00", + "storage" : { + } + }, + "1000000000000000000000000000000000000008" : { + "balance" : "0x00", + "code" : "0x73807640a13483f8ac783c557fcdf27be11ea4ac7a31600055", + "nonce" : "0x00", + "storage" : { + } + }, + "17802f43a0137c506ba92291391a8a8f207f487d" : { + "balance" : "0x02540be400", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "2b3455ec7fedf16e646268bf88846bd7a2319bb2" : { + "balance" : "0x02540be400", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "304a554a310c7e546dfe434669c62820b7d83490" : { + "balance" : "0x0f4240", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "4613f3bca5c44ea06337a9e439fbc6d42e501d0a" : { + "balance" : "0x02540be400", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "7602b46df5390e432ef1c307d4f2c9ff6d65cc97" : { + "balance" : "0x02540be400", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "807640a13483f8ac783c557fcdf27be11ea4ac7a" : { + "balance" : "0x02540be400", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "84ef4b2357079cd7a7c69fd7a37cd0609a679106" : { + "balance" : "0x02540be400", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "914d1b8b43e92723e64fd0a06f5bdb8dd9b10c79" : { + "balance" : "0x02540be400", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "0x3b9aca00", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "accc230e8a6e5be9160b8cdf2864dd2a001c28b6" : { + "balance" : "0x02540be400", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "aeeb8ff27288bdabc0fa5ebb731b6f409507516c" : { + "balance" : "0x02540be400", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "b136707642a4ea12fb4bae820f03d2562ebff487" : { + "balance" : "0x02540be400", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "bb9bc244d798123fde783fcc1c72d3bb8c189413" : { + "balance" : "0x02540be400", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "ca544e5c4687d109611d0f8f928b53a25af72448" : { + "balance" : "0x02540be400", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "cbb9d3703e651b0d496cdefb8b92c25aeb2171f7" : { + "balance" : "0x02540be400", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "d343b217de44030afaa275f54d31a9317c7f441e" : { + "balance" : "0x02540be400", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "da2fef9e4a3230988ff17df2165440f37e8b1708" : { + "balance" : "0x02540be400", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "dbe9b615a3ae8709af8b93336ce9b477e4ac0940" : { + "balance" : "0x02540be400", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "f14c14075d6c4ed84b86798af0956deef67365b5" : { + "balance" : "0x02540be400", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "f4c64518ea10f995918a454158c6b61407ea345c" : { + "balance" : "0x02540be400", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "fe24cdd8648121a43a7c86d289be4dd2951ed49f" : { + "balance" : "0x02540be400", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + } + } + }, + "DaoTransactions_EmptyTransaction" : { + "blocks" : [ + { + "blockHeader" : { + "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", + "difficulty" : "0x020000", + "extraData" : "0x", + "gasLimit" : "0x2fefba", + "gasUsed" : "0x5208", + "hash" : "5b0edda940d3516661fb973d9e19d092b4a394dc4d87874bdcc5e98078213350", + "mixHash" : "a639b3eb62e9e9655578c1da80a0392f0193b7e2afec23f91b1d8436ca7deace", + "nonce" : "97fa42f0f9ee028e", + "number" : "0x01", + "parentHash" : "eb310def4877fc94c3945bdabd9ba6bbafff1c74944b2bd74a4ac01f0868804c", + "receiptTrie" : "63e81aadc86aed2ebe147fd86db74d8fbe91a938af0521be549669246e607443", + "stateRoot" : "421450c5fcaa516f03635983f0c9d936574721033424eac5e6d71c8fa14b766f", + "timestamp" : "0x57836309", + "transactionsTrie" : "ac81275d7a81a720240146377982939179218535bfcfa9469c8bdd3e264ef179", + "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" + }, + "blocknumber" : "1", + "rlp" : "0xf9024cf901f9a0eb310def4877fc94c3945bdabd9ba6bbafff1c74944b2bd74a4ac01f0868804ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0421450c5fcaa516f03635983f0c9d936574721033424eac5e6d71c8fa14b766fa0ac81275d7a81a720240146377982939179218535bfcfa9469c8bdd3e264ef179a063e81aadc86aed2ebe147fd86db74d8fbe91a938af0521be549669246e607443b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000001832fefba825208845783630980a0a639b3eb62e9e9655578c1da80a0392f0193b7e2afec23f91b1d8436ca7deace8897fa42f0f9ee028ef84df84b8001827530800a801ca057cb46c0b702929c4fd4127b2370f28a7aeeaa65509699e58eedf7692090a0a9a05ba7c83d99be6a9bca0c81947023ba3b5f2162516d82d0757bf8004f3e9bc03ac0", + "transactions" : [ + { + "data" : "0x", + "gasLimit" : "0x7530", + "gasPrice" : "0x01", + "nonce" : "0x00", + "r" : "0x57cb46c0b702929c4fd4127b2370f28a7aeeaa65509699e58eedf7692090a0a9", + "s" : "0x5ba7c83d99be6a9bca0c81947023ba3b5f2162516d82d0757bf8004f3e9bc03a", + "to" : "", + "v" : "0x1c", + "value" : "0x0a" + } + ], + "uncleHeaders" : [ + ] + }, + { + "blockHeader" : { + "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", + "difficulty" : "0x020040", + "extraData" : "0x", + "gasLimit" : "0x2fefba", + "gasUsed" : "0x5208", + "hash" : "ae62864a01c26f47b77ac9235ad2dc1db5740c82a53e625f6becca64317b377b", + "mixHash" : "b17c97168dc8d478616303a2c09169dffdf757126db3db3c6df67d16f7677a63", + "nonce" : "d4170412ca50a625", + "number" : "0x02", + "parentHash" : "5b0edda940d3516661fb973d9e19d092b4a394dc4d87874bdcc5e98078213350", + "receiptTrie" : "b41287e7f7e5d2983862a73e54c86ec144ecf835096984770f6bf485188268b8", + "stateRoot" : "1e31d34b22a8d2fd9893bb58fa80e6ca4561320eed43776c295acca93721847c", + "timestamp" : "0x5783630c", + "transactionsTrie" : "76c7a0ce7644661f276c76fb9a82eaee879d0642cf4ed244fc10afc02c646abf", + "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" + }, + "blocknumber" : "2", + "rlp" : "0xf9024cf901f9a05b0edda940d3516661fb973d9e19d092b4a394dc4d87874bdcc5e98078213350a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a01e31d34b22a8d2fd9893bb58fa80e6ca4561320eed43776c295acca93721847ca076c7a0ce7644661f276c76fb9a82eaee879d0642cf4ed244fc10afc02c646abfa0b41287e7f7e5d2983862a73e54c86ec144ecf835096984770f6bf485188268b8b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302004002832fefba825208845783630c80a0b17c97168dc8d478616303a2c09169dffdf757126db3db3c6df67d16f7677a6388d4170412ca50a625f84df84b0101827530800a801ca0bb6e3cf3f281af13ef1393d7052b03cab367079a9eb71aa829ec72b231a60e1fa04bcfe1da53f26bb95806d38e9f42fef262aaaf5191e16ec473a695c8978a0b05c0", + "transactions" : [ + { + "data" : "0x", + "gasLimit" : "0x7530", + "gasPrice" : "0x01", + "nonce" : "0x01", + "r" : "0xbb6e3cf3f281af13ef1393d7052b03cab367079a9eb71aa829ec72b231a60e1f", + "s" : "0x4bcfe1da53f26bb95806d38e9f42fef262aaaf5191e16ec473a695c8978a0b05", + "to" : "", + "v" : "0x1c", + "value" : "0x0a" + } + ], + "uncleHeaders" : [ + ] + }, + { + "blockHeader" : { + "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", + "difficulty" : "0x020080", + "extraData" : "0x", + "gasLimit" : "0x2fefba", + "gasUsed" : "0x5208", + "hash" : "44220b4a438fa769755e99320bebe37fc2e019c919fd741508b34d0ef9eb8445", + "mixHash" : "d2c22cf2fdcd7c91d4d4870dd9f36a6ff696440cd839b9e9bae1137596385710", + "nonce" : "18effd2ae4b7e5b8", + "number" : "0x03", + "parentHash" : "ae62864a01c26f47b77ac9235ad2dc1db5740c82a53e625f6becca64317b377b", + "receiptTrie" : "12f61177f6c2cebe14df5474c8b8c1f8f47f4ea8fff7f8b22b7aa8a4156581c8", + "stateRoot" : "587518607d6c98344439896e7f39111d76a8aac09b70d624e237da6fa29bbc44", + "timestamp" : "0x5783630d", + "transactionsTrie" : "3798aa164b61e27b93484c76a5f319bd93c808dc78ef31cf8b93f4e1b248ca2c", + "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" + }, + "blocknumber" : "3", + "rlp" : "0xf9024cf901f9a0ae62864a01c26f47b77ac9235ad2dc1db5740c82a53e625f6becca64317b377ba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0587518607d6c98344439896e7f39111d76a8aac09b70d624e237da6fa29bbc44a03798aa164b61e27b93484c76a5f319bd93c808dc78ef31cf8b93f4e1b248ca2ca012f61177f6c2cebe14df5474c8b8c1f8f47f4ea8fff7f8b22b7aa8a4156581c8b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302008003832fefba825208845783630d80a0d2c22cf2fdcd7c91d4d4870dd9f36a6ff696440cd839b9e9bae11375963857108818effd2ae4b7e5b8f84df84b0201827530800a801ca0f6d884cae1f86bdff1281e95e416089c544a4a5578a75d5e8ad76118e341b055a075b7d88985ed5acd61f30c9f9570c6c33bb92f3ad1a32b86a0747817fbc5ededc0", + "transactions" : [ + { + "data" : "0x", + "gasLimit" : "0x7530", + "gasPrice" : "0x01", + "nonce" : "0x02", + "r" : "0xf6d884cae1f86bdff1281e95e416089c544a4a5578a75d5e8ad76118e341b055", + "s" : "0x75b7d88985ed5acd61f30c9f9570c6c33bb92f3ad1a32b86a0747817fbc5eded", + "to" : "", + "v" : "0x1c", + "value" : "0x0a" + } + ], + "uncleHeaders" : [ + ] + }, + { + "blockHeader" : { + "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", + "difficulty" : "0x0200c0", + "extraData" : "0x", + "gasLimit" : "0x2fefba", + "gasUsed" : "0x5208", + "hash" : "0aefb5c5a7ec080c970350d9583090b714d37bf95c0a6e2e02dbc1002a5b30b5", + "mixHash" : "023bed20cb52812ce526a57786b78fb62c51f5da5a3bf45ee96dd6e7eb448199", + "nonce" : "7c8f2986da78a3bd", + "number" : "0x04", + "parentHash" : "44220b4a438fa769755e99320bebe37fc2e019c919fd741508b34d0ef9eb8445", + "receiptTrie" : "4346f81bc8c58aa684049309decc863c93cd6cdc84c592b62bd1439eee3636ac", + "stateRoot" : "c8ba761363f3cb1958f01fd55b864bcba7f33324ba4f95e60fc9e48d9ba6777a", + "timestamp" : "0x57836310", + "transactionsTrie" : "4cc1b34b3a9d29bf69842a54e1c48bc97afc433883f66d2c59287f118c9c3c2c", + "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" + }, + "blocknumber" : "4", + "rlp" : "0xf9024cf901f9a044220b4a438fa769755e99320bebe37fc2e019c919fd741508b34d0ef9eb8445a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0c8ba761363f3cb1958f01fd55b864bcba7f33324ba4f95e60fc9e48d9ba6777aa04cc1b34b3a9d29bf69842a54e1c48bc97afc433883f66d2c59287f118c9c3c2ca04346f81bc8c58aa684049309decc863c93cd6cdc84c592b62bd1439eee3636acb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200c004832fefba825208845783631080a0023bed20cb52812ce526a57786b78fb62c51f5da5a3bf45ee96dd6e7eb448199887c8f2986da78a3bdf84df84b0301827530800a801ca0753ee5d896db8d87fe850e7935418587277cd9c010dfaaf7dd09b0a2e73785dca066deb3c241d532c7b880ae7a9a311ee7a92ef1c5e4e2bf3307990a2881bc13b0c0", + "transactions" : [ + { + "data" : "0x", + "gasLimit" : "0x7530", + "gasPrice" : "0x01", + "nonce" : "0x03", + "r" : "0x753ee5d896db8d87fe850e7935418587277cd9c010dfaaf7dd09b0a2e73785dc", + "s" : "0x66deb3c241d532c7b880ae7a9a311ee7a92ef1c5e4e2bf3307990a2881bc13b0", + "to" : "", + "v" : "0x1c", + "value" : "0x0a" + } + ], + "uncleHeaders" : [ + ] + }, + { + "blockHeader" : { + "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", + "difficulty" : "0x020100", + "extraData" : "0x", + "gasLimit" : "0x2fefba", + "gasUsed" : "0xcf08", + "hash" : "c1a27ab42a9d209533699cf0cb3f7d9387d748789c9e4b83861d6eca9d344c27", + "mixHash" : "70a51ab9792974a9cdc257e272b6893f45e710fd73403312d51184e529a82ec8", + "nonce" : "e3ef9bdbb00719d9", + "number" : "0x05", + "parentHash" : "0aefb5c5a7ec080c970350d9583090b714d37bf95c0a6e2e02dbc1002a5b30b5", + "receiptTrie" : "49f411805d9b0ace02b56752bf40396c5505bb7ced5f174abf02a20b623982c0", + "stateRoot" : "8045027de50cc67c31daed085a6e72311e4f931606c6caa9f85bfc34009b3d00", + "timestamp" : "0x57836312", + "transactionsTrie" : "165af780d27795ebc80c27759d3d949a9c4b05d35fcc7e9d3da8be357f5340cd", + "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" + }, + "blocknumber" : "5", + "rlp" : "0xf9024cf901f9a00aefb5c5a7ec080c970350d9583090b714d37bf95c0a6e2e02dbc1002a5b30b5a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a08045027de50cc67c31daed085a6e72311e4f931606c6caa9f85bfc34009b3d00a0165af780d27795ebc80c27759d3d949a9c4b05d35fcc7e9d3da8be357f5340cda049f411805d9b0ace02b56752bf40396c5505bb7ced5f174abf02a20b623982c0b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302010005832fefba82cf08845783631280a070a51ab9792974a9cdc257e272b6893f45e710fd73403312d51184e529a82ec888e3ef9bdbb00719d9f84df84b040182ea60800a801ba0cb1400f01459519ac3dc0426c6d7f95641dc6a7b8008069c9dfbe4f94b167169a07445362aadae8c25e4f0b494ad553bfc652bf34fb2ed0ccbf9a6b089c2b09f62c0", + "transactions" : [ + { + "data" : "0x", + "gasLimit" : "0xea60", + "gasPrice" : "0x01", + "nonce" : "0x04", + "r" : "0xcb1400f01459519ac3dc0426c6d7f95641dc6a7b8008069c9dfbe4f94b167169", + "s" : "0x7445362aadae8c25e4f0b494ad553bfc652bf34fb2ed0ccbf9a6b089c2b09f62", + "to" : "", + "v" : "0x1b", + "value" : "0x0a" + } + ], + "uncleHeaders" : [ + ] + }, + { + "blockHeader" : { + "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", + "difficulty" : "0x020140", + "extraData" : "0x", + "gasLimit" : "0x2fefba", + "gasUsed" : "0xcf08", + "hash" : "23ee03d1084a13984fe604e7ea070c6d907db16960a3835ef57d1baa16689d4f", + "mixHash" : "fac0b79165a4c5531f2f26a3d77a823e8853298fd9eb09436ab380323c3b1f9b", + "nonce" : "ce6bf09522313f40", + "number" : "0x06", + "parentHash" : "c1a27ab42a9d209533699cf0cb3f7d9387d748789c9e4b83861d6eca9d344c27", + "receiptTrie" : "5e40223bcc6a700b1d32c94ec5b7ed325345b400cf06913d4a1538d80dde375d", + "stateRoot" : "293f78bf5ea7fbe0c13c88d246c5d84bf917dbf39e35722ae601ea85543dee9d", + "timestamp" : "0x57836314", + "transactionsTrie" : "ef009c3c274a522a6e2ca98232fffff747bdfab79189be3e2b5e5dc54e2a51be", + "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" + }, + "blocknumber" : "6", + "rlp" : "0xf9024cf901f9a0c1a27ab42a9d209533699cf0cb3f7d9387d748789c9e4b83861d6eca9d344c27a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0293f78bf5ea7fbe0c13c88d246c5d84bf917dbf39e35722ae601ea85543dee9da0ef009c3c274a522a6e2ca98232fffff747bdfab79189be3e2b5e5dc54e2a51bea05e40223bcc6a700b1d32c94ec5b7ed325345b400cf06913d4a1538d80dde375db90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302014006832fefba82cf08845783631480a0fac0b79165a4c5531f2f26a3d77a823e8853298fd9eb09436ab380323c3b1f9b88ce6bf09522313f40f84df84b050182ea60800a801ba04d147b172eb81fdb11a21826eabad091084f6e9613d340b5897872843efa6435a023640d906f65fd156b92d518068263d99d94dc88c3e0950fd7633fb0d4d237eec0", + "transactions" : [ + { + "data" : "0x", + "gasLimit" : "0xea60", + "gasPrice" : "0x01", + "nonce" : "0x05", + "r" : "0x4d147b172eb81fdb11a21826eabad091084f6e9613d340b5897872843efa6435", + "s" : "0x23640d906f65fd156b92d518068263d99d94dc88c3e0950fd7633fb0d4d237ee", + "to" : "", + "v" : "0x1b", + "value" : "0x0a" + } + ], + "uncleHeaders" : [ + ] + }, + { + "blockHeader" : { + "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", + "difficulty" : "0x020180", + "extraData" : "0x", + "gasLimit" : "0x2fefba", + "gasUsed" : "0xa042", + "hash" : "60ffcb5008eaea340506bc43689d1b2a3f6be9963822e4d07ea3c3439a5c238a", + "mixHash" : "2deb7b956c9872f070ee6766097fb87f4faf05eafc58d75de0a8a66c1b2d6aac", + "nonce" : "0154f5718e21141d", + "number" : "0x07", + "parentHash" : "23ee03d1084a13984fe604e7ea070c6d907db16960a3835ef57d1baa16689d4f", + "receiptTrie" : "e3beaaa91301cca4d98fc58b2aad310bd7bd147d4ff00f4fb5ce2b186a039f2d", + "stateRoot" : "219ec50b26a20c420f96b8905f669455145efef0233e52a39c2d338b52a60f8c", + "timestamp" : "0x57836317", + "transactionsTrie" : "b2d17fa171d19df4e817ffb15f38526d125a42b7879cd712584b130dc8ad341c", + "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" + }, + "blocknumber" : "7", + "rlp" : "0xf90260f901f9a023ee03d1084a13984fe604e7ea070c6d907db16960a3835ef57d1baa16689d4fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0219ec50b26a20c420f96b8905f669455145efef0233e52a39c2d338b52a60f8ca0b2d17fa171d19df4e817ffb15f38526d125a42b7879cd712584b130dc8ad341ca0e3beaaa91301cca4d98fc58b2aad310bd7bd147d4ff00f4fb5ce2b186a039f2db90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302018007832fefba82a042845783631780a02deb7b956c9872f070ee6766097fb87f4faf05eafc58d75de0a8a66c1b2d6aac880154f5718e21141df861f85f060182ea609410000000000000000000000000000000000000070a801ba0bb8523d4c53ed16b355d0a2dba02154d23a5480449dc3894be40ef95511d2fe9a010ad725c2df4979b7a071b3fa9b6b719223f0167d68b98f213e8611f84d4d81bc0", + "transactions" : [ + { + "data" : "0x", + "gasLimit" : "0xea60", + "gasPrice" : "0x01", + "nonce" : "0x06", + "r" : "0xbb8523d4c53ed16b355d0a2dba02154d23a5480449dc3894be40ef95511d2fe9", + "s" : "0x10ad725c2df4979b7a071b3fa9b6b719223f0167d68b98f213e8611f84d4d81b", + "to" : "1000000000000000000000000000000000000007", + "v" : "0x1b", + "value" : "0x0a" + } + ], + "uncleHeaders" : [ + ] + }, + { + "blocknumber" : "8", + "rlp" : "0xf901e8f901e3a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000940000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080808080a0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80c0c0" + }, + { + "blockHeader" : { + "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", + "difficulty" : "0x0201c0", + "extraData" : "0x64616f2d686172642d666f726b", + "gasLimit" : "0x2fefba", + "gasUsed" : "0x00", + "hash" : "759a2064217e4e4a7b2d000b85db1b4a3c38f0d385a2d5fe3c1db59b2b542800", + "mixHash" : "1a03d073e18853b3cae2466c7b3bf0569ec2bee77dac157c9266bbbcd0e26bc4", + "nonce" : "e2b29b5ff2f88b23", + "number" : "0x08", + "parentHash" : "60ffcb5008eaea340506bc43689d1b2a3f6be9963822e4d07ea3c3439a5c238a", + "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot" : "d8c26888f3be8b3caa592fa608b0a6c91e4d71a0657b11afebea18528f0ff44d", + "timestamp" : "0x5783631b", + "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" + }, + "blocknumber" : "8", + "rlp" : "0xf90209f90204a060ffcb5008eaea340506bc43689d1b2a3f6be9963822e4d07ea3c3439a5c238aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0d8c26888f3be8b3caa592fa608b0a6c91e4d71a0657b11afebea18528f0ff44da056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830201c008832fefba80845783631b8d64616f2d686172642d666f726ba01a03d073e18853b3cae2466c7b3bf0569ec2bee77dac157c9266bbbcd0e26bc488e2b29b5ff2f88b23c0c0", + "transactions" : [ + ], + "uncleHeaders" : [ + ] + }, + { + "blockHeader" : { + "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", + "difficulty" : "0x020200", + "extraData" : "0x64616f2d686172642d666f726b", + "gasLimit" : "0x2fefba", + "gasUsed" : "0x65aa", + "hash" : "c4a01f3cc777a997d690a0c72dd799817cc2bc0cdc79f6c10d7367d3375eb9a3", + "mixHash" : "28a7e07f83e0624319e9221bf1cd71ee5e35b29c8570d1457ead8f2caf2f10d5", + "nonce" : "46bac1b638d711b4", + "number" : "0x09", + "parentHash" : "759a2064217e4e4a7b2d000b85db1b4a3c38f0d385a2d5fe3c1db59b2b542800", + "receiptTrie" : "ba60c4ab1b477e30a2befb448e466b1404264989fabb1eb870376381202aed52", + "stateRoot" : "b6776ae31aa5aeaf7ec2b8f644716df0cbcba8a9d22ca34e795c9461f81fd04f", + "timestamp" : "0x5783631d", + "transactionsTrie" : "964e2a482dc1856fff3b00f545aaf8720aeef70a3ffe86cebf05bbc2c34bf539", + "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" + }, + "blocknumber" : "9", + "rlp" : "0xf9026df90206a0759a2064217e4e4a7b2d000b85db1b4a3c38f0d385a2d5fe3c1db59b2b542800a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b6776ae31aa5aeaf7ec2b8f644716df0cbcba8a9d22ca34e795c9461f81fd04fa0964e2a482dc1856fff3b00f545aaf8720aeef70a3ffe86cebf05bbc2c34bf539a0ba60c4ab1b477e30a2befb448e466b1404264989fabb1eb870376381202aed52b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302020009832fefba8265aa845783631d8d64616f2d686172642d666f726ba028a7e07f83e0624319e9221bf1cd71ee5e35b29c8570d1457ead8f2caf2f10d58846bac1b638d711b4f861f85f070182ea6094100000000000000000000000000000000000000801801ba09e18981c45e9f6bb54e3f52cae58f2c3c00f2220a9f1c788d0ee3fc2394d4956a038207c17c10faae1fa83bff79770fa38134a19b6ca6f04059d7a307c05f67e6ac0", + "transactions" : [ + { + "data" : "0x", + "gasLimit" : "0xea60", + "gasPrice" : "0x01", + "nonce" : "0x07", + "r" : "0x9e18981c45e9f6bb54e3f52cae58f2c3c00f2220a9f1c788d0ee3fc2394d4956", + "s" : "0x38207c17c10faae1fa83bff79770fa38134a19b6ca6f04059d7a307c05f67e6a", + "to" : "1000000000000000000000000000000000000008", + "v" : "0x1b", + "value" : "0x01" + } + ], + "uncleHeaders" : [ + ] + } + ], + "genesisBlockHeader" : { + "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", + "difficulty" : "0x020000", + "extraData" : "0x42", + "gasLimit" : "0x2fefd8", + "gasUsed" : "0x00", + "hash" : "eb310def4877fc94c3945bdabd9ba6bbafff1c74944b2bd74a4ac01f0868804c", + "mixHash" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "nonce" : "0102030405060708", + "number" : "0x00", + "parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", + "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot" : "4eda2e603f5b9ad6e92c0cba602372d0a0cd2e776a17b61a7a20225ffa7643d7", + "timestamp" : "0x54c98c81", + "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" + }, + "genesisRLP" : "0xf901fcf901f7a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a04eda2e603f5b9ad6e92c0cba602372d0a0cd2e776a17b61a7a20225ffa7643d7a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000080832fefd8808454c98c8142a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421880102030405060708c0c0", + "lastblockhash" : "c4a01f3cc777a997d690a0c72dd799817cc2bc0cdc79f6c10d7367d3375eb9a3", + "postState" : { + "0c243ebe6a031753dc0dd850acf422844a3efb76" : { + "balance" : "0x0a", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "1000000000000000000000000000000000000007" : { + "balance" : "0x0a", + "code" : "0x73807640a13483f8ac783c557fcdf27be11ea4ac7a31600055", + "nonce" : "0x00", + "storage" : { + "0x00" : "0x02540be400" + } + }, + "1000000000000000000000000000000000000008" : { + "balance" : "0x01", + "code" : "0x73807640a13483f8ac783c557fcdf27be11ea4ac7a31600055", + "nonce" : "0x00", + "storage" : { + } + }, + "17802f43a0137c506ba92291391a8a8f207f487d" : { + "balance" : "0x00", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "248f0f0f33eadb89e9d87fd5c127f58567f3ffde" : { + "balance" : "0x0a", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "2b3455ec7fedf16e646268bf88846bd7a2319bb2" : { + "balance" : "0x00", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "304a554a310c7e546dfe434669c62820b7d83490" : { + "balance" : "0x00", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "4613f3bca5c44ea06337a9e439fbc6d42e501d0a" : { + "balance" : "0x00", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { + "balance" : "0x0a", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "7602b46df5390e432ef1c307d4f2c9ff6d65cc97" : { + "balance" : "0x00", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "807640a13483f8ac783c557fcdf27be11ea4ac7a" : { + "balance" : "0x00", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "84ef4b2357079cd7a7c69fd7a37cd0609a679106" : { + "balance" : "0x00", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "85c2f277588ea1e6901ed59e587bea222c575f87" : { + "balance" : "0x0a", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "8888f1f195afa192cfee860698584c030f4c9db1" : { + "balance" : "0x0270801d946c97ec1c", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "914d1b8b43e92723e64fd0a06f5bdb8dd9b10c79" : { + "balance" : "0x00", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "0x3b96dd9d", + "code" : "0x", + "nonce" : "0x08", + "storage" : { + } + }, + "abcabcabcabcabcabcabcabcabcabcabcabcabca" : { + "balance" : "0x2c3cf12e40", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "accc230e8a6e5be9160b8cdf2864dd2a001c28b6" : { + "balance" : "0x00", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "aeeb8ff27288bdabc0fa5ebb731b6f409507516c" : { + "balance" : "0x00", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "b136707642a4ea12fb4bae820f03d2562ebff487" : { + "balance" : "0x00", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "b1d37cf6180ceb738ca45b5005a2f418c02e204b" : { + "balance" : "0x0a", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "bb9bc244d798123fde783fcc1c72d3bb8c189413" : { + "balance" : "0x00", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "ca544e5c4687d109611d0f8f928b53a25af72448" : { + "balance" : "0x00", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "cbb9d3703e651b0d496cdefb8b92c25aeb2171f7" : { + "balance" : "0x00", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "d343b217de44030afaa275f54d31a9317c7f441e" : { + "balance" : "0x00", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "da2fef9e4a3230988ff17df2165440f37e8b1708" : { + "balance" : "0x00", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "dbe9b615a3ae8709af8b93336ce9b477e4ac0940" : { + "balance" : "0x00", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "ec0e71ad0a90ffe1909d27dac207f7680abba42d" : { + "balance" : "0x0a", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "f14c14075d6c4ed84b86798af0956deef67365b5" : { + "balance" : "0x00", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "f4c64518ea10f995918a454158c6b61407ea345c" : { + "balance" : "0x00", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "fe24cdd8648121a43a7c86d289be4dd2951ed49f" : { + "balance" : "0x00", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + } + }, + "pre" : { + "1000000000000000000000000000000000000007" : { + "balance" : "0x00", + "code" : "0x73807640a13483f8ac783c557fcdf27be11ea4ac7a31600055", + "nonce" : "0x00", + "storage" : { + } + }, + "1000000000000000000000000000000000000008" : { + "balance" : "0x00", + "code" : "0x73807640a13483f8ac783c557fcdf27be11ea4ac7a31600055", + "nonce" : "0x00", + "storage" : { + } + }, + "17802f43a0137c506ba92291391a8a8f207f487d" : { + "balance" : "0x02540be400", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "2b3455ec7fedf16e646268bf88846bd7a2319bb2" : { + "balance" : "0x02540be400", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "304a554a310c7e546dfe434669c62820b7d83490" : { + "balance" : "0x0f4240", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "4613f3bca5c44ea06337a9e439fbc6d42e501d0a" : { + "balance" : "0x02540be400", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "7602b46df5390e432ef1c307d4f2c9ff6d65cc97" : { + "balance" : "0x02540be400", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "807640a13483f8ac783c557fcdf27be11ea4ac7a" : { + "balance" : "0x02540be400", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "84ef4b2357079cd7a7c69fd7a37cd0609a679106" : { + "balance" : "0x02540be400", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "914d1b8b43e92723e64fd0a06f5bdb8dd9b10c79" : { + "balance" : "0x02540be400", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "0x3b9aca00", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "accc230e8a6e5be9160b8cdf2864dd2a001c28b6" : { + "balance" : "0x02540be400", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "aeeb8ff27288bdabc0fa5ebb731b6f409507516c" : { + "balance" : "0x02540be400", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "b136707642a4ea12fb4bae820f03d2562ebff487" : { + "balance" : "0x02540be400", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "bb9bc244d798123fde783fcc1c72d3bb8c189413" : { + "balance" : "0x02540be400", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "ca544e5c4687d109611d0f8f928b53a25af72448" : { + "balance" : "0x02540be400", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "cbb9d3703e651b0d496cdefb8b92c25aeb2171f7" : { + "balance" : "0x02540be400", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "d343b217de44030afaa275f54d31a9317c7f441e" : { + "balance" : "0x02540be400", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "da2fef9e4a3230988ff17df2165440f37e8b1708" : { + "balance" : "0x02540be400", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "dbe9b615a3ae8709af8b93336ce9b477e4ac0940" : { + "balance" : "0x02540be400", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "f14c14075d6c4ed84b86798af0956deef67365b5" : { + "balance" : "0x02540be400", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "f4c64518ea10f995918a454158c6b61407ea345c" : { + "balance" : "0x02540be400", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "fe24cdd8648121a43a7c86d289be4dd2951ed49f" : { + "balance" : "0x02540be400", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + } + } + } +} diff --git a/tests/util.go b/tests/util.go index 877e1acdb7..8d1917d15b 100644 --- a/tests/util.go +++ b/tests/util.go @@ -141,6 +141,8 @@ type VmTest struct { type RuleSet struct { HomesteadBlock *big.Int + DAOForkBlock *big.Int + DAOForkSupport bool } func (r RuleSet) IsHomestead(n *big.Int) bool { diff --git a/tests/vm_test_util.go b/tests/vm_test_util.go index 2f516951b8..37f0af33c5 100644 --- a/tests/vm_test_util.go +++ b/tests/vm_test_util.go @@ -241,7 +241,7 @@ func RunVm(state *state.StateDB, env, exec map[string]string) ([]byte, vm.Logs, caller := state.GetOrNewStateObject(from) - vmenv := NewEnvFromMap(RuleSet{params.MainNetHomesteadBlock}, state, env, exec) + vmenv := NewEnvFromMap(RuleSet{params.MainNetHomesteadBlock, params.MainNetDAOForkBlock, true}, state, env, exec) vmenv.vmTest = true vmenv.skipTransfer = true vmenv.initial = true