From a879cd1dae8374264dc4861a68ea22c590f04b4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= Date: Thu, 7 Jul 2016 16:04:34 +0300 Subject: [PATCH 1/9] cmd, core, eth, params: implement flags to control dao fork blocks --- cmd/geth/dao_test.go | 306 +++++++++++++++++++++++++++++++++++++++++++ cmd/geth/main.go | 9 +- cmd/geth/usage.go | 1 - cmd/utils/flags.go | 76 ++++++----- core/config.go | 4 +- eth/backend.go | 2 + params/util.go | 2 + 7 files changed, 354 insertions(+), 46 deletions(-) create mode 100644 cmd/geth/dao_test.go diff --git a/cmd/geth/dao_test.go b/cmd/geth/dao_test.go new file mode 100644 index 0000000000..fd6831c15c --- /dev/null +++ b/cmd/geth/dao_test.go @@ -0,0 +1,306 @@ +// 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" +) + +var daoNoForkGenesis = `{ + "alloc" : {}, + "coinbase" : "0x0000000000000000000000000000000000000000", + "difficulty" : "0x20000", + "extraData" : "", + "gasLimit" : "0x2fefd8", + "nonce" : "0x0000000000000042", + "mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000", + "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000", + "timestamp" : "0x00" +}` +var daoNoForkGenesisHash = common.HexToHash("5e1fc79cb4ffa4739177b5408045cd5d51c6cf766133f23f7cd72ee1f8d790e0") + +var daoProForkGenesis = `{ + "alloc" : {}, + "coinbase" : "0x0000000000000000000000000000000000000000", + "difficulty" : "0x20000", + "extraData" : "", + "gasLimit" : "0x2fefd8", + "nonce" : "0x0000000000000043", + "mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000", + "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000", + "timestamp" : "0x00", + "config" : { + "daoForkBlock": 314 + } +}` +var daoProForkGenesisHash = common.HexToHash("c80f3c1c3d81ae6d8ea59edf35d3e4b723e4c8684ec71fdb6d4715e3f8add237") +var daoProForkBlock = big.NewInt(314) + +// Tests that creating a new node to with or without the DAO fork flag will correctly +// set the genesis block but with DAO support explicitly set or unset in the chain +// config in the database. +func TestDAOSupportMainnet(t *testing.T) { + testDAOForkBlockNewChain(t, false, "", true, params.MainNetDAOForkBlock) +} +func TestDAOSupportTestnet(t *testing.T) { + testDAOForkBlockNewChain(t, true, "", true, params.TestNetDAOForkBlock) +} +func TestDAOSupportPrivnet(t *testing.T) { + testDAOForkBlockNewChain(t, false, daoProForkGenesis, false, daoProForkBlock) +} +func TestDAONoSupportMainnet(t *testing.T) { + testDAOForkBlockNewChain(t, false, "", false, nil) +} +func TestDAONoSupportTestnet(t *testing.T) { + testDAOForkBlockNewChain(t, true, "", false, nil) +} +func TestDAONoSupportPrivnet(t *testing.T) { + testDAOForkBlockNewChain(t, false, daoNoForkGenesis, false, nil) +} + +func testDAOForkBlockNewChain(t *testing.T, testnet bool, genesis string, fork bool, expect *big.Int) { + // 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() + } + execDAOGeth(t, datadir, testnet, fork, false) + + // Retrieve the DAO config flag from the database + path := filepath.Join(datadir, "chaindata") + if testnet { + 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") + } else if genesis == daoNoForkGenesis { + genesisHash = daoNoForkGenesisHash + } else if genesis == daoProForkGenesis { + genesisHash = daoProForkGenesisHash + } + 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 expect != nil { + t.Fatalf("dao hard-fork block mismatch: have nil, want %v", expect) + } + } else if config.DAOForkBlock.Cmp(expect) != 0 { + t.Fatalf("dao hard-fork block mismatch: have %v, want %v", config.DAOForkBlock, expect) + } +} + +// Tests that starting up an already existing node with various DAO fork override +// flags correctly changes the chain configs in the database. +func TestDAODefaultMainnet(t *testing.T) { + testDAOForkBlockOldChain(t, false, "", false, false, false, false, nil) +} +func TestDAOStartSupportMainnet(t *testing.T) { + testDAOForkBlockOldChain(t, false, "", false, true, false, false, params.MainNetDAOForkBlock) +} +func TestDAOContinueExplicitSupportMainnet(t *testing.T) { + testDAOForkBlockOldChain(t, false, "", true, true, false, false, params.MainNetDAOForkBlock) +} +func TestDAOContinueImplicitSupportMainnet(t *testing.T) { + testDAOForkBlockOldChain(t, false, "", true, false, false, false, params.MainNetDAOForkBlock) +} +func TestDAOSwitchSupportMainnet(t *testing.T) { + testDAOForkBlockOldChain(t, false, "", false, true, true, false, params.MainNetDAOForkBlock) +} +func TestDAOStartOpposeMainnet(t *testing.T) { + testDAOForkBlockOldChain(t, false, "", false, false, false, true, nil) +} +func TestDAOContinueExplicitOpposeMainnet(t *testing.T) { + testDAOForkBlockOldChain(t, false, "", false, false, true, true, nil) +} +func TestDAOContinueImplicitOpposeMainnet(t *testing.T) { + testDAOForkBlockOldChain(t, false, "", false, false, true, false, nil) +} +func TestDAOSwitchOpposeMainnet(t *testing.T) { + testDAOForkBlockOldChain(t, false, "", true, false, false, true, nil) +} +func TestDAODefaultTestnet(t *testing.T) { + testDAOForkBlockOldChain(t, true, "", false, false, false, false, nil) +} +func TestDAOStartSupportTestnet(t *testing.T) { + testDAOForkBlockOldChain(t, true, "", false, true, false, false, params.TestNetDAOForkBlock) +} +func TestDAOContinueExplicitSupportTestnet(t *testing.T) { + testDAOForkBlockOldChain(t, true, "", true, true, false, false, params.TestNetDAOForkBlock) +} +func TestDAOContinueImplicitSupportTestnet(t *testing.T) { + testDAOForkBlockOldChain(t, true, "", true, false, false, false, params.TestNetDAOForkBlock) +} +func TestDAOSwitchSupportTestnet(t *testing.T) { + testDAOForkBlockOldChain(t, true, "", false, true, true, false, params.TestNetDAOForkBlock) +} +func TestDAOStartOpposeTestnet(t *testing.T) { + testDAOForkBlockOldChain(t, true, "", false, false, false, true, nil) +} +func TestDAOContinueExplicitOpposeTestnet(t *testing.T) { + testDAOForkBlockOldChain(t, true, "", false, false, true, true, nil) +} +func TestDAOContinueImplicitOpposeTestnet(t *testing.T) { + testDAOForkBlockOldChain(t, true, "", false, false, true, false, nil) +} +func TestDAOSwitchOpposeTestnet(t *testing.T) { + testDAOForkBlockOldChain(t, true, "", true, false, false, true, nil) +} +func TestDAODefaultPrivnet(t *testing.T) { + testDAOForkBlockOldChain(t, false, daoNoForkGenesis, false, false, false, false, nil) +} +func TestDAOStartSupportConPrivnet(t *testing.T) { + testDAOForkBlockOldChain(t, false, daoNoForkGenesis, false, true, false, false, params.MainNetDAOForkBlock) +} +func TestDAOContinueExplicitSupportConPrivnet(t *testing.T) { + testDAOForkBlockOldChain(t, false, daoNoForkGenesis, true, true, false, false, params.MainNetDAOForkBlock) +} +func TestDAOContinueImplicitSupportConPrivnet(t *testing.T) { + testDAOForkBlockOldChain(t, false, daoNoForkGenesis, true, false, false, false, params.MainNetDAOForkBlock) +} +func TestDAOSwitchSupportConPrivnet(t *testing.T) { + testDAOForkBlockOldChain(t, false, daoNoForkGenesis, false, true, true, false, params.MainNetDAOForkBlock) +} +func TestDAOStartOpposeConPrivnet(t *testing.T) { + testDAOForkBlockOldChain(t, false, daoNoForkGenesis, false, false, false, true, nil) +} +func TestDAOContinueExplicitOpposeConPrivnet(t *testing.T) { + testDAOForkBlockOldChain(t, false, daoNoForkGenesis, false, false, true, true, nil) +} +func TestDAOContinueImplicitOpposeConPrivnet(t *testing.T) { + testDAOForkBlockOldChain(t, false, daoNoForkGenesis, false, false, true, false, nil) +} +func TestDAOSwitchOpposeConPrivnet(t *testing.T) { + testDAOForkBlockOldChain(t, false, daoNoForkGenesis, true, false, false, true, nil) +} +func TestDAODefaultProPrivnet(t *testing.T) { + testDAOForkBlockOldChain(t, false, daoProForkGenesis, false, false, false, false, daoProForkBlock) +} +func TestDAOStartSupportProPrivnet(t *testing.T) { + testDAOForkBlockOldChain(t, false, daoProForkGenesis, false, true, false, false, daoProForkBlock) +} +func TestDAOContinueExplicitSupportProPrivnet(t *testing.T) { + testDAOForkBlockOldChain(t, false, daoProForkGenesis, true, true, false, false, daoProForkBlock) +} +func TestDAOContinueImplicitSupportProPrivnet(t *testing.T) { + testDAOForkBlockOldChain(t, false, daoProForkGenesis, true, false, false, false, daoProForkBlock) +} +func TestDAOSwitchSupportProPrivnet(t *testing.T) { + testDAOForkBlockOldChain(t, false, daoProForkGenesis, false, true, true, false, params.MainNetDAOForkBlock) +} +func TestDAOStartOpposeProPrivnet(t *testing.T) { + testDAOForkBlockOldChain(t, false, daoProForkGenesis, false, false, false, true, nil) +} +func TestDAOContinueExplicitOpposeProPrivnet(t *testing.T) { + testDAOForkBlockOldChain(t, false, daoProForkGenesis, false, false, true, true, nil) +} +func TestDAOContinueImplicitOpposeProPrivnet(t *testing.T) { + testDAOForkBlockOldChain(t, false, daoProForkGenesis, false, false, true, false, nil) +} +func TestDAOSwitchOpposeProPrivnet(t *testing.T) { + testDAOForkBlockOldChain(t, false, daoProForkGenesis, true, false, false, true, nil) +} + +func testDAOForkBlockOldChain(t *testing.T, testnet bool, genesis string, oldSupport, newSupport, oldOppose, newOppose bool, expect *big.Int) { + // Create a temporary data directory to use and inspect later + datadir := tmpdir(t) + defer os.RemoveAll(datadir) + + // Cycle two Geth instances, possibly changing fork support in between + 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() + } + execDAOGeth(t, datadir, testnet, oldSupport, oldOppose) + execDAOGeth(t, datadir, testnet, newSupport, newOppose) + + // Retrieve the DAO config flag from the database + path := filepath.Join(datadir, "chaindata") + if testnet { + 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") + } else if genesis == daoNoForkGenesis { + genesisHash = daoNoForkGenesisHash + } else if genesis == daoProForkGenesis { + genesisHash = daoProForkGenesisHash + } + 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 expect != nil { + t.Fatalf("dao hard-fork block mismatch: have nil, want %v", expect) + } + } else if config.DAOForkBlock.Cmp(expect) != 0 { + t.Fatalf("dao hard-fork block mismatch: have %v, want %v", config.DAOForkBlock, expect) + } +} + +// execDAOGeth starts a Geth instance with some DAO forks set and terminates. +func execDAOGeth(t *testing.T, datadir string, testnet bool, supportFork bool, opposeFork bool) { + args := []string{"--port", "0", "--maxpeers", "0", "--nodiscover", "--nat", "none", "--ipcdisable", "--datadir", datadir} + if testnet { + args = append(args, "--testnet") + } + if supportFork { + args = append(args, "--support-dao-fork") + } + if opposeFork { + args = append(args, "--oppose-dao-fork") + } + geth := runGeth(t, append(args, []string{"--exec", "2+2", "console"}...)...) + geth.cmd.Wait() +} 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..b95f5159cd 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,44 @@ 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 genesis != nil { - // Existing genesis block, use stored config if available. + // If the chain is already initialized, use any existing chain configs + if genesis := core.GetBlock(db, core.GetCanonicalHash(db, 0), 0); genesis != nil { storedConfig, err := core.GetChainConfig(db, genesis.Hash()) if err == nil { + // Force override any existing configs if explicitly requested + switch { + case storedConfig.DAOForkBlock == nil && ctx.GlobalBool(SupportDAOFork.Name) && ctx.GlobalBool(TestNetFlag.Name): + storedConfig.DAOForkBlock = params.TestNetDAOForkBlock + case storedConfig.DAOForkBlock == nil && ctx.GlobalBool(SupportDAOFork.Name): + storedConfig.DAOForkBlock = params.MainNetDAOForkBlock + case ctx.GlobalBool(OpposeDAOFork.Name): + storedConfig.DAOForkBlock = nil + } return storedConfig } else if err != core.ChainConfigNotFoundErr { Fatalf("Could not make chain configuration: %v", err) } } - var homesteadBlockNo *big.Int + // If the chain is uninitialized nor no configs are present, create one + var homesteadBlock *big.Int if ctx.GlobalBool(TestNetFlag.Name) { - homesteadBlockNo = params.TestNetHomesteadBlock + homesteadBlock = params.TestNetHomesteadBlock } else { - homesteadBlockNo = params.MainNetHomesteadBlock + homesteadBlock = params.MainNetHomesteadBlock + } + var daoForkBlock *big.Int + switch { + case ctx.GlobalBool(SupportDAOFork.Name) && ctx.GlobalBool(TestNetFlag.Name): + daoForkBlock = params.TestNetDAOForkBlock + case ctx.GlobalBool(SupportDAOFork.Name): + daoForkBlock = params.MainNetDAOForkBlock + case ctx.GlobalBool(OpposeDAOFork.Name): + daoForkBlock = nil + } + return &core.ChainConfig{ + HomesteadBlock: homesteadBlock, + DAOForkBlock: daoForkBlock, } - return &core.ChainConfig{HomesteadBlock: homesteadBlockNo} } // MakeChainDatabase open an LevelDB using the flags passed to the client and will hard crash if it fails. diff --git a/core/config.go b/core/config.go index 81ca76aa31..d557ae5a4d 100644 --- a/core/config.go +++ b/core/config.go @@ -31,7 +31,8 @@ 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 (0 = already homestead) + DAOForkBlock *big.Int `json:"daoForkBlock"` // TheDAO hard-fork block (nil = no fork) VmConfig vm.Config `json:"-"` } @@ -41,6 +42,5 @@ func (c *ChainConfig) IsHomestead(num *big.Int) bool { if num == nil { return false } - return num.Cmp(c.HomesteadBlock) >= 0 } 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/params/util.go b/params/util.go index b37bc79b21..b768508520 100644 --- a/params/util.go +++ b/params/util.go @@ -21,4 +21,6 @@ import "math/big" var ( TestNetHomesteadBlock = big.NewInt(494000) // testnet homestead block MainNetHomesteadBlock = big.NewInt(1150000) // mainnet homestead block + TestNetDAOForkBlock = big.NewInt(8888888) // testnet dao hard-fork block + MainNetDAOForkBlock = big.NewInt(9999999) // mainnet dao hard-fork block ) From 9b21fb9303b2abb888f4b7962f009903022b4910 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= Date: Fri, 8 Jul 2016 11:43:36 +0300 Subject: [PATCH 2/9] core: gracefully handle missing homestead block config --- cmd/geth/genesis_test.go | 105 +++++++++++++++++++++++++++++++++++++++ core/config.go | 2 +- 2 files changed, 106 insertions(+), 1 deletion(-) create mode 100644 cmd/geth/genesis_test.go diff --git a/cmd/geth/genesis_test.go b/cmd/geth/genesis_test.go new file mode 100644 index 0000000000..7485d7d89e --- /dev/null +++ b/cmd/geth/genesis_test.go @@ -0,0 +1,105 @@ +// 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, + }, + }`, + 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/core/config.go b/core/config.go index d557ae5a4d..d04b00e9c3 100644 --- a/core/config.go +++ b/core/config.go @@ -39,7 +39,7 @@ type ChainConfig struct { // 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 From 5b5602269c74db7dc95700deba2b110b878d2dd4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= Date: Fri, 8 Jul 2016 13:00:37 +0300 Subject: [PATCH 3/9] cmd/geth, miner, params: special extradata for DAO fork start --- cmd/geth/genesis_test.go | 1 + miner/worker.go | 10 +++++++++- params/util.go | 17 ++++++++++++----- 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/cmd/geth/genesis_test.go b/cmd/geth/genesis_test.go index 7485d7d89e..43d678d895 100644 --- a/cmd/geth/genesis_test.go +++ b/cmd/geth/genesis_test.go @@ -75,6 +75,7 @@ var customGenesisTests = []struct { "timestamp" : "0x00", "config" : { "homesteadBlock" : 314, + "daoForkBlock" : 141 }, }`, query: "eth.getBlock(0).nonce", diff --git a/miner/worker.go b/miner/worker.go index 09cf6b6aa7..7197a33ba4 100644 --- a/miner/worker.go +++ b/miner/worker.go @@ -33,6 +33,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 +469,14 @@ func (self *worker) commitNewWork() { Extra: self.extra, Time: big.NewInt(tstamp), } - + // If we are doing a DAO 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 { + header.Extra = common.CopyBytes(params.DAOForkBlockExtra) + } + } previous := self.current // Could potentially happen if starting to mine in an odd state. err := self.makeCurrent(parent, header) diff --git a/params/util.go b/params/util.go index b768508520..a0c9a3199a 100644 --- a/params/util.go +++ b/params/util.go @@ -16,11 +16,18 @@ 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 - TestNetDAOForkBlock = big.NewInt(8888888) // testnet dao hard-fork block - MainNetDAOForkBlock = big.NewInt(9999999) // mainnet dao hard-fork 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) ) From 3d6dbc3b0dfd3b749e04383a673e2b6106773db4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= Date: Fri, 8 Jul 2016 18:48:17 +0300 Subject: [PATCH 4/9] cmd, core, miner: add extradata validation to consensus rules --- cmd/geth/dao_test.go | 336 ++++++++++++++--------------------- cmd/geth/genesis_test.go | 3 +- cmd/utils/flags.go | 53 +++--- core/block_validator.go | 21 +++ core/block_validator_test.go | 105 +++++++++++ core/config.go | 5 +- miner/worker.go | 10 +- 7 files changed, 296 insertions(+), 237 deletions(-) diff --git a/cmd/geth/dao_test.go b/cmd/geth/dao_test.go index fd6831c15c..bfa0c2a035 100644 --- a/cmd/geth/dao_test.go +++ b/cmd/geth/dao_test.go @@ -29,6 +29,21 @@ import ( "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", @@ -38,50 +53,121 @@ var daoNoForkGenesis = `{ "nonce" : "0x0000000000000042", "mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000", "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000", - "timestamp" : "0x00" + "timestamp" : "0x00", + "config" : { + "daoForkBlock" : 314, + "daoForkSupport" : false + } }` -var daoNoForkGenesisHash = common.HexToHash("5e1fc79cb4ffa4739177b5408045cd5d51c6cf766133f23f7cd72ee1f8d790e0") +// Genesis block for nodes which actively support the DAO fork var daoProForkGenesis = `{ "alloc" : {}, "coinbase" : "0x0000000000000000000000000000000000000000", "difficulty" : "0x20000", "extraData" : "", "gasLimit" : "0x2fefd8", - "nonce" : "0x0000000000000043", + "nonce" : "0x0000000000000042", "mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000", "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp" : "0x00", "config" : { - "daoForkBlock": 314 + "daoForkBlock" : 314, + "daoForkSupport" : true } }` -var daoProForkGenesisHash = common.HexToHash("c80f3c1c3d81ae6d8ea59edf35d3e4b723e4c8684ec71fdb6d4715e3f8add237") -var daoProForkBlock = big.NewInt(314) -// Tests that creating a new node to with or without the DAO fork flag will correctly -// set the genesis block but with DAO support explicitly set or unset in the chain -// config in the database. +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, "", true, params.MainNetDAOForkBlock) + 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, "", true, params.TestNetDAOForkBlock) + testDAOForkBlockNewChain(t, true, "", [][2]bool{{true, false}}, params.TestNetDAOForkBlock, true) } -func TestDAOSupportPrivnet(t *testing.T) { - testDAOForkBlockNewChain(t, false, daoProForkGenesis, false, daoProForkBlock) +func TestDAOOpposeTestnet(t *testing.T) { + testDAOForkBlockNewChain(t, true, "", [][2]bool{{false, true}}, params.TestNetDAOForkBlock, false) } -func TestDAONoSupportMainnet(t *testing.T) { - testDAOForkBlockNewChain(t, false, "", false, nil) +func TestDAOSwitchToSupportTestnet(t *testing.T) { + testDAOForkBlockNewChain(t, true, "", [][2]bool{{false, true}, {true, false}}, params.TestNetDAOForkBlock, true) } -func TestDAONoSupportTestnet(t *testing.T) { - testDAOForkBlockNewChain(t, true, "", false, nil) +func TestDAOSwitchToOpposeTestnet(t *testing.T) { + testDAOForkBlockNewChain(t, true, "", [][2]bool{{true, false}, {false, true}}, params.TestNetDAOForkBlock, false) } -func TestDAONoSupportPrivnet(t *testing.T) { - testDAOForkBlockNewChain(t, false, daoNoForkGenesis, false, nil) +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, fork bool, expect *big.Int) { +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) @@ -94,11 +180,23 @@ func testDAOForkBlockNewChain(t *testing.T, testnet bool, genesis string, fork b } runGeth(t, "--datadir", datadir, "init", json).cmd.Wait() } - execDAOGeth(t, datadir, testnet, fork, false) - + 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 { + if testnet && genesis == "" { path = filepath.Join(datadir, "testnet", "chaindata") } db, err := ethdb.NewLDBDatabase(path, 0, 0) @@ -110,170 +208,9 @@ func testDAOForkBlockNewChain(t *testing.T, testnet bool, genesis string, fork b genesisHash := common.HexToHash("0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3") if testnet { genesisHash = common.HexToHash("0x0cd786a2425d16f152c658316c423e6ce1181e15c3295826d7c9904cba9ce303") - } else if genesis == daoNoForkGenesis { - genesisHash = daoNoForkGenesisHash - } else if genesis == daoProForkGenesis { - genesisHash = daoProForkGenesisHash } - 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 expect != nil { - t.Fatalf("dao hard-fork block mismatch: have nil, want %v", expect) - } - } else if config.DAOForkBlock.Cmp(expect) != 0 { - t.Fatalf("dao hard-fork block mismatch: have %v, want %v", config.DAOForkBlock, expect) - } -} - -// Tests that starting up an already existing node with various DAO fork override -// flags correctly changes the chain configs in the database. -func TestDAODefaultMainnet(t *testing.T) { - testDAOForkBlockOldChain(t, false, "", false, false, false, false, nil) -} -func TestDAOStartSupportMainnet(t *testing.T) { - testDAOForkBlockOldChain(t, false, "", false, true, false, false, params.MainNetDAOForkBlock) -} -func TestDAOContinueExplicitSupportMainnet(t *testing.T) { - testDAOForkBlockOldChain(t, false, "", true, true, false, false, params.MainNetDAOForkBlock) -} -func TestDAOContinueImplicitSupportMainnet(t *testing.T) { - testDAOForkBlockOldChain(t, false, "", true, false, false, false, params.MainNetDAOForkBlock) -} -func TestDAOSwitchSupportMainnet(t *testing.T) { - testDAOForkBlockOldChain(t, false, "", false, true, true, false, params.MainNetDAOForkBlock) -} -func TestDAOStartOpposeMainnet(t *testing.T) { - testDAOForkBlockOldChain(t, false, "", false, false, false, true, nil) -} -func TestDAOContinueExplicitOpposeMainnet(t *testing.T) { - testDAOForkBlockOldChain(t, false, "", false, false, true, true, nil) -} -func TestDAOContinueImplicitOpposeMainnet(t *testing.T) { - testDAOForkBlockOldChain(t, false, "", false, false, true, false, nil) -} -func TestDAOSwitchOpposeMainnet(t *testing.T) { - testDAOForkBlockOldChain(t, false, "", true, false, false, true, nil) -} -func TestDAODefaultTestnet(t *testing.T) { - testDAOForkBlockOldChain(t, true, "", false, false, false, false, nil) -} -func TestDAOStartSupportTestnet(t *testing.T) { - testDAOForkBlockOldChain(t, true, "", false, true, false, false, params.TestNetDAOForkBlock) -} -func TestDAOContinueExplicitSupportTestnet(t *testing.T) { - testDAOForkBlockOldChain(t, true, "", true, true, false, false, params.TestNetDAOForkBlock) -} -func TestDAOContinueImplicitSupportTestnet(t *testing.T) { - testDAOForkBlockOldChain(t, true, "", true, false, false, false, params.TestNetDAOForkBlock) -} -func TestDAOSwitchSupportTestnet(t *testing.T) { - testDAOForkBlockOldChain(t, true, "", false, true, true, false, params.TestNetDAOForkBlock) -} -func TestDAOStartOpposeTestnet(t *testing.T) { - testDAOForkBlockOldChain(t, true, "", false, false, false, true, nil) -} -func TestDAOContinueExplicitOpposeTestnet(t *testing.T) { - testDAOForkBlockOldChain(t, true, "", false, false, true, true, nil) -} -func TestDAOContinueImplicitOpposeTestnet(t *testing.T) { - testDAOForkBlockOldChain(t, true, "", false, false, true, false, nil) -} -func TestDAOSwitchOpposeTestnet(t *testing.T) { - testDAOForkBlockOldChain(t, true, "", true, false, false, true, nil) -} -func TestDAODefaultPrivnet(t *testing.T) { - testDAOForkBlockOldChain(t, false, daoNoForkGenesis, false, false, false, false, nil) -} -func TestDAOStartSupportConPrivnet(t *testing.T) { - testDAOForkBlockOldChain(t, false, daoNoForkGenesis, false, true, false, false, params.MainNetDAOForkBlock) -} -func TestDAOContinueExplicitSupportConPrivnet(t *testing.T) { - testDAOForkBlockOldChain(t, false, daoNoForkGenesis, true, true, false, false, params.MainNetDAOForkBlock) -} -func TestDAOContinueImplicitSupportConPrivnet(t *testing.T) { - testDAOForkBlockOldChain(t, false, daoNoForkGenesis, true, false, false, false, params.MainNetDAOForkBlock) -} -func TestDAOSwitchSupportConPrivnet(t *testing.T) { - testDAOForkBlockOldChain(t, false, daoNoForkGenesis, false, true, true, false, params.MainNetDAOForkBlock) -} -func TestDAOStartOpposeConPrivnet(t *testing.T) { - testDAOForkBlockOldChain(t, false, daoNoForkGenesis, false, false, false, true, nil) -} -func TestDAOContinueExplicitOpposeConPrivnet(t *testing.T) { - testDAOForkBlockOldChain(t, false, daoNoForkGenesis, false, false, true, true, nil) -} -func TestDAOContinueImplicitOpposeConPrivnet(t *testing.T) { - testDAOForkBlockOldChain(t, false, daoNoForkGenesis, false, false, true, false, nil) -} -func TestDAOSwitchOpposeConPrivnet(t *testing.T) { - testDAOForkBlockOldChain(t, false, daoNoForkGenesis, true, false, false, true, nil) -} -func TestDAODefaultProPrivnet(t *testing.T) { - testDAOForkBlockOldChain(t, false, daoProForkGenesis, false, false, false, false, daoProForkBlock) -} -func TestDAOStartSupportProPrivnet(t *testing.T) { - testDAOForkBlockOldChain(t, false, daoProForkGenesis, false, true, false, false, daoProForkBlock) -} -func TestDAOContinueExplicitSupportProPrivnet(t *testing.T) { - testDAOForkBlockOldChain(t, false, daoProForkGenesis, true, true, false, false, daoProForkBlock) -} -func TestDAOContinueImplicitSupportProPrivnet(t *testing.T) { - testDAOForkBlockOldChain(t, false, daoProForkGenesis, true, false, false, false, daoProForkBlock) -} -func TestDAOSwitchSupportProPrivnet(t *testing.T) { - testDAOForkBlockOldChain(t, false, daoProForkGenesis, false, true, true, false, params.MainNetDAOForkBlock) -} -func TestDAOStartOpposeProPrivnet(t *testing.T) { - testDAOForkBlockOldChain(t, false, daoProForkGenesis, false, false, false, true, nil) -} -func TestDAOContinueExplicitOpposeProPrivnet(t *testing.T) { - testDAOForkBlockOldChain(t, false, daoProForkGenesis, false, false, true, true, nil) -} -func TestDAOContinueImplicitOpposeProPrivnet(t *testing.T) { - testDAOForkBlockOldChain(t, false, daoProForkGenesis, false, false, true, false, nil) -} -func TestDAOSwitchOpposeProPrivnet(t *testing.T) { - testDAOForkBlockOldChain(t, false, daoProForkGenesis, true, false, false, true, nil) -} - -func testDAOForkBlockOldChain(t *testing.T, testnet bool, genesis string, oldSupport, newSupport, oldOppose, newOppose bool, expect *big.Int) { - // Create a temporary data directory to use and inspect later - datadir := tmpdir(t) - defer os.RemoveAll(datadir) - - // Cycle two Geth instances, possibly changing fork support in between 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() - } - execDAOGeth(t, datadir, testnet, oldSupport, oldOppose) - execDAOGeth(t, datadir, testnet, newSupport, newOppose) - - // Retrieve the DAO config flag from the database - path := filepath.Join(datadir, "chaindata") - if testnet { - 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") - } else if genesis == daoNoForkGenesis { - genesisHash = daoNoForkGenesisHash - } else if genesis == daoProForkGenesis { - genesisHash = daoProForkGenesisHash + genesisHash = daoGenesisHash } config, err := core.GetChainConfig(db, genesisHash) if err != nil { @@ -281,26 +218,15 @@ func testDAOForkBlockOldChain(t *testing.T, testnet bool, genesis string, oldSup } // Validate the DAO hard-fork block number against the expected value if config.DAOForkBlock == nil { - if expect != nil { - t.Fatalf("dao hard-fork block mismatch: have nil, want %v", expect) + if expectBlock != nil { + t.Errorf("dao hard-fork block mismatch: have nil, want %v", expectBlock) } - } else if config.DAOForkBlock.Cmp(expect) != 0 { - t.Fatalf("dao hard-fork block mismatch: have %v, want %v", config.DAOForkBlock, expect) + } 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) } } - -// execDAOGeth starts a Geth instance with some DAO forks set and terminates. -func execDAOGeth(t *testing.T, datadir string, testnet bool, supportFork bool, opposeFork bool) { - args := []string{"--port", "0", "--maxpeers", "0", "--nodiscover", "--nat", "none", "--ipcdisable", "--datadir", datadir} - if testnet { - args = append(args, "--testnet") - } - if supportFork { - args = append(args, "--support-dao-fork") - } - if opposeFork { - args = append(args, "--oppose-dao-fork") - } - geth := runGeth(t, append(args, []string{"--exec", "2+2", "console"}...)...) - geth.cmd.Wait() -} diff --git a/cmd/geth/genesis_test.go b/cmd/geth/genesis_test.go index 43d678d895..4f8b1642ef 100644 --- a/cmd/geth/genesis_test.go +++ b/cmd/geth/genesis_test.go @@ -75,7 +75,8 @@ var customGenesisTests = []struct { "timestamp" : "0x00", "config" : { "homesteadBlock" : 314, - "daoForkBlock" : 141 + "daoForkBlock" : 141, + "daoForkSupport" : true }, }`, query: "eth.getBlock(0).nonce", diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index b95f5159cd..fae1647b3e 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -798,43 +798,42 @@ 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 { // If the chain is already initialized, use any existing chain configs + config := new(core.ChainConfig) + if genesis := core.GetBlock(db, core.GetCanonicalHash(db, 0), 0); genesis != nil { storedConfig, err := core.GetChainConfig(db, genesis.Hash()) - if err == nil { - // Force override any existing configs if explicitly requested - switch { - case storedConfig.DAOForkBlock == nil && ctx.GlobalBool(SupportDAOFork.Name) && ctx.GlobalBool(TestNetFlag.Name): - storedConfig.DAOForkBlock = params.TestNetDAOForkBlock - case storedConfig.DAOForkBlock == nil && ctx.GlobalBool(SupportDAOFork.Name): - storedConfig.DAOForkBlock = params.MainNetDAOForkBlock - case ctx.GlobalBool(OpposeDAOFork.Name): - storedConfig.DAOForkBlock = 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) } } - // If the chain is uninitialized nor no configs are present, create one - var homesteadBlock *big.Int - if ctx.GlobalBool(TestNetFlag.Name) { - homesteadBlock = params.TestNetHomesteadBlock - } else { - homesteadBlock = 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) + } } - var daoForkBlock *big.Int + 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) && ctx.GlobalBool(TestNetFlag.Name): - daoForkBlock = params.TestNetDAOForkBlock case ctx.GlobalBool(SupportDAOFork.Name): - daoForkBlock = params.MainNetDAOForkBlock + config.DAOForkSupport = true case ctx.GlobalBool(OpposeDAOFork.Name): - daoForkBlock = nil - } - return &core.ChainConfig{ - HomesteadBlock: homesteadBlock, - DAOForkBlock: daoForkBlock, + 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..73d5813288 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,26 @@ func ValidateHeader(config *ChainConfig, pow pow.PoW, header *types.Header, pare return &BlockNonceErr{header.Number, header.Hash(), header.Nonce.Uint64()} } } + // 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 d04b00e9c3..c0d065a57f 100644 --- a/core/config.go +++ b/core/config.go @@ -31,8 +31,9 @@ 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 `json:"homesteadBlock"` // homestead switch block (0 = already homestead) - DAOForkBlock *big.Int `json:"daoForkBlock"` // TheDAO hard-fork block (nil = no fork) + 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:"-"` } diff --git a/miner/worker.go b/miner/worker.go index 7197a33ba4..ba0085d521 100644 --- a/miner/worker.go +++ b/miner/worker.go @@ -17,6 +17,7 @@ package miner import ( + "bytes" "fmt" "math/big" "sync" @@ -469,12 +470,17 @@ func (self *worker) commitNewWork() { Extra: self.extra, Time: big.NewInt(tstamp), } - // If we are doing a DAO hard-fork check whether to override the extra-data or not + // 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 { - header.Extra = common.CopyBytes(params.DAOForkBlockExtra) + // 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 From 0d335014be2710707b3a37ba9d847e18b0615360 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= Date: Fri, 8 Jul 2016 20:59:11 +0300 Subject: [PATCH 5/9] core, eth: enforce network split post DAO hard-fork --- core/block_validator.go | 7 ++++ eth/handler.go | 58 ++++++++++++++++++++++++++++++-- eth/handler_test.go | 73 +++++++++++++++++++++++++++++++++++++++++ eth/peer.go | 10 +++--- 4 files changed, 141 insertions(+), 7 deletions(-) diff --git a/core/block_validator.go b/core/block_validator.go index 73d5813288..3b597310ea 100644 --- a/core/block_validator.go +++ b/core/block_validator.go @@ -248,6 +248,13 @@ 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 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 From 22914b65dbb7444a49357a49ad09bf07d20c4704 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= Date: Mon, 11 Jul 2016 13:55:11 +0300 Subject: [PATCH 6/9] core, params, tests: add DAO hard-fork balance moves --- cmd/ethtest/main.go | 4 +- core/state_processor.go | 23 +- miner/worker.go | 4 + params/dao_list.go | 108 + params/util.go | 9 +- tests/block_test.go | 67 +- tests/block_test_util.go | 16 +- .../TestNetwork/bcTheDaoTest.json | 1818 +++++++++++++++++ tests/util.go | 2 + tests/vm_test_util.go | 2 +- 10 files changed, 2011 insertions(+), 42 deletions(-) create mode 100644 params/dao_list.go create mode 100644 tests/files/BlockchainTests/TestNetwork/bcTheDaoTest.json 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/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/miner/worker.go b/miner/worker.go index ba0085d521..9118b0f8ea 100644 --- a/miner/worker.go +++ b/miner/worker.go @@ -490,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 a0c9a3199a..884f1f803c 100644 --- a/params/util.go +++ b/params/util.go @@ -26,8 +26,9 @@ var ( TestNetHomesteadBlock = big.NewInt(494000) // Testnet homestead block MainNetHomesteadBlock = big.NewInt(1150000) // Mainnet homestead block - TestNetDAOForkBlock = big.NewInt(8888888) // Testnet dao hard-fork block - MainNetDAOForkBlock = big.NewInt(9999999) // Mainnet dao hard-fork block - DAOForkBlockExtra = common.FromHex("0x64616f2d686172642d666f726b") // Block extradata to signel the fork with ("dao-hard-fork") - DAOForkExtraRange = big.NewInt(10) // Number of blocks to override the extradata (prevent no-fork attacks) + 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 From 2b400c8be2016d6cb8ccf27683795b2a72b8ed5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= Date: Thu, 14 Jul 2016 11:22:58 +0300 Subject: [PATCH 7/9] cmd, core, eth, miner, params, tests: finalize the DAO fork --- cmd/geth/dao_test.go | 6 +- cmd/utils/flags.go | 9 +- core/block_validator.go | 29 +- core/dao.go | 74 + core/state_processor.go | 17 - eth/handler.go | 8 +- miner/worker.go | 2 +- params/dao.go | 418 ++++++ params/dao_list.go | 108 -- params/util.go | 12 +- .../TestNetwork/bcTheDaoTest.json | 1192 ++++++++++++++--- 11 files changed, 1541 insertions(+), 334 deletions(-) create mode 100644 core/dao.go create mode 100644 params/dao.go delete mode 100644 params/dao_list.go diff --git a/cmd/geth/dao_test.go b/cmd/geth/dao_test.go index bfa0c2a035..7058fb385c 100644 --- a/cmd/geth/dao_test.go +++ b/cmd/geth/dao_test.go @@ -83,7 +83,7 @@ var daoGenesisForkBlock = big.NewInt(314) // Tests that the DAO hard-fork number and the nodes support/opposition is correctly // set in the database after various initialization procedures and invocations. func TestDAODefaultMainnet(t *testing.T) { - testDAOForkBlockNewChain(t, false, "", [][2]bool{{false, false}}, params.MainNetDAOForkBlock, false) + testDAOForkBlockNewChain(t, false, "", [][2]bool{{false, false}}, params.MainNetDAOForkBlock, true) } func TestDAOSupportMainnet(t *testing.T) { testDAOForkBlockNewChain(t, false, "", [][2]bool{{true, false}}, params.MainNetDAOForkBlock, true) @@ -98,7 +98,7 @@ func TestDAOSwitchToOpposeMainnet(t *testing.T) { testDAOForkBlockNewChain(t, false, "", [][2]bool{{true, false}, {false, true}}, params.MainNetDAOForkBlock, false) } func TestDAODefaultTestnet(t *testing.T) { - testDAOForkBlockNewChain(t, true, "", [][2]bool{{false, false}}, params.TestNetDAOForkBlock, false) + testDAOForkBlockNewChain(t, true, "", [][2]bool{{false, false}}, params.TestNetDAOForkBlock, true) } func TestDAOSupportTestnet(t *testing.T) { testDAOForkBlockNewChain(t, true, "", [][2]bool{{true, false}}, params.TestNetDAOForkBlock, true) @@ -116,7 +116,7 @@ func TestDAOInitOldPrivnet(t *testing.T) { testDAOForkBlockNewChain(t, false, daoOldGenesis, [][2]bool{}, nil, false) } func TestDAODefaultOldPrivnet(t *testing.T) { - testDAOForkBlockNewChain(t, false, daoOldGenesis, [][2]bool{{false, false}}, params.MainNetDAOForkBlock, false) + testDAOForkBlockNewChain(t, false, daoOldGenesis, [][2]bool{{false, false}}, params.MainNetDAOForkBlock, true) } func TestDAOSupportOldPrivnet(t *testing.T) { testDAOForkBlockNewChain(t, false, daoOldGenesis, [][2]bool{{true, false}}, params.MainNetDAOForkBlock, true) diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index fae1647b3e..7b5915a05d 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -814,17 +814,18 @@ func MustMakeChainConfigFromDb(ctx *cli.Context, db ethdb.Database) *core.ChainC // Set any missing fields due to them being unset or system upgrade if config.HomesteadBlock == nil { if ctx.GlobalBool(TestNetFlag.Name) { - config.HomesteadBlock = new(big.Int).Set(params.TestNetHomesteadBlock) + config.HomesteadBlock = params.TestNetHomesteadBlock } else { - config.HomesteadBlock = new(big.Int).Set(params.MainNetHomesteadBlock) + config.HomesteadBlock = params.MainNetHomesteadBlock } } if config.DAOForkBlock == nil { if ctx.GlobalBool(TestNetFlag.Name) { - config.DAOForkBlock = new(big.Int).Set(params.TestNetDAOForkBlock) + config.DAOForkBlock = params.TestNetDAOForkBlock } else { - config.DAOForkBlock = new(big.Int).Set(params.MainNetDAOForkBlock) + config.DAOForkBlock = params.MainNetDAOForkBlock } + config.DAOForkSupport = true } // Force override any existing configs if explicitly requested switch { diff --git a/core/block_validator.go b/core/block_validator.go index 3b597310ea..e5bc6178b9 100644 --- a/core/block_validator.go +++ b/core/block_validator.go @@ -17,7 +17,6 @@ package core import ( - "bytes" "fmt" "math/big" "time" @@ -249,33 +248,7 @@ func ValidateHeader(config *ChainConfig, pow pow.PoW, header *types.Header, pare } } // If all checks passed, validate the extra-data field for hard forks - return ValidateHeaderExtraData(config, header) -} - -// ValidateHeaderExtraData validates the extra-data field of a block header to -// ensure it conforms to hard-fork rules. -func ValidateHeaderExtraData(config *ChainConfig, header *types.Header) error { - // DAO hard-fork extension to the header validity: a) if the node is no-fork, - // do not accept blocks in the [fork, fork+10) range with the fork specific - // extra-data set; b) if the node is pro-fork, require blocks in the specific - // range to have the unique extra-data set. - if daoBlock := config.DAOForkBlock; daoBlock != nil { - // Check whether the block is among the fork extra-override range - limit := new(big.Int).Add(daoBlock, params.DAOForkExtraRange) - if daoBlock.Cmp(header.Number) <= 0 && header.Number.Cmp(limit) < 0 { - // Depending whether we support or oppose the fork, verrift the extra-data contents - if config.DAOForkSupport { - if bytes.Compare(header.Extra, params.DAOForkBlockExtra) != 0 { - return ValidationError("DAO pro-fork bad block extra-data: 0x%x", header.Extra) - } - } else { - if bytes.Compare(header.Extra, params.DAOForkBlockExtra) == 0 { - return ValidationError("DAO no-fork bad block extra-data: 0x%x", header.Extra) - } - } - } - } - return nil + return ValidateDAOHeaderExtraData(config, header) } // CalcDifficulty is the difficulty adjustment algorithm. It returns diff --git a/core/dao.go b/core/dao.go new file mode 100644 index 0000000000..e315c9884b --- /dev/null +++ b/core/dao.go @@ -0,0 +1,74 @@ +// Copyright 2016 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package core + +import ( + "bytes" + "math/big" + + "github.com/ethereum/go-ethereum/core/state" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/params" +) + +// ValidateDAOHeaderExtraData validates the extra-data field of a block header to +// ensure it conforms to DAO hard-fork rules. +// +// DAO hard-fork extension to the header validity: +// a) if the node is no-fork, do not accept blocks in the [fork, fork+10) range +// with the fork specific extra-data set +// b) if the node is pro-fork, require blocks in the specific range to have the +// unique extra-data set. +func ValidateDAOHeaderExtraData(config *ChainConfig, header *types.Header) error { + // Short circuit validation if the node doesn't care about the DAO fork + if config.DAOForkBlock == nil { + return nil + } + // Make sure the block is within the fork's modified extra-data range + limit := new(big.Int).Add(config.DAOForkBlock, params.DAOForkExtraRange) + if header.Number.Cmp(config.DAOForkBlock) < 0 || header.Number.Cmp(limit) >= 0 { + return nil + } + // Depending whether we support or oppose the fork, validate the extra-data contents + if config.DAOForkSupport { + if bytes.Compare(header.Extra, params.DAOForkBlockExtra) != 0 { + return ValidationError("DAO pro-fork bad block extra-data: 0x%x", header.Extra) + } + } else { + if bytes.Compare(header.Extra, params.DAOForkBlockExtra) == 0 { + return ValidationError("DAO no-fork bad block extra-data: 0x%x", header.Extra) + } + } + // All ok, header has the same extra-data we expect + return nil +} + +// ApplyDAOHardFork modifies the state database according to the DAO hard-fork +// rules, transferring all balances of a set of DAO accounts to a single refund +// contract. +func ApplyDAOHardFork(statedb *state.StateDB) { + // Retrieve the contract to refund balances into + refund := statedb.GetOrNewStateObject(params.DAORefundContract) + + // Move every DAO account and extra-balance account funds into the refund contract + for _, addr := range params.DAODrainList { + if account := statedb.GetStateObject(addr); account != nil { + refund.AddBalance(account.Balance()) + account.SetBalance(new(big.Int)) + } + } +} diff --git a/core/state_processor.go b/core/state_processor.go index a9c2d1e181..6797d87b4f 100644 --- a/core/state_processor.go +++ b/core/state_processor.go @@ -25,7 +25,6 @@ import ( "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/logger" "github.com/ethereum/go-ethereum/logger/glog" - "github.com/ethereum/go-ethereum/params" ) var ( @@ -134,19 +133,3 @@ func AccumulateRewards(statedb *state.StateDB, header *types.Header, uncles []*t } statedb.AddBalance(header.Coinbase, reward) } - -// ApplyDAOHardFork modifies the state database according to the DAO hard-fork -// rules, transferring all balances of a set of DAO accounts to a single refund -// contract. -func ApplyDAOHardFork(statedb *state.StateDB) { - // Retrieve the contract to refund balances into - refund := statedb.GetOrNewStateObject(params.DAORefundContract) - - // Move every DAO account and extra-balance account funds into the refund contract - for _, addr := range params.DAODrainList { - if account := statedb.GetStateObject(addr); account != nil { - refund.AddBalance(account.Balance()) - account.SetBalance(new(big.Int)) - } - } -} diff --git a/eth/handler.go b/eth/handler.go index 946d5930fa..01550e6c28 100644 --- a/eth/handler.go +++ b/eth/handler.go @@ -513,7 +513,7 @@ func (pm *ProtocolManager) handleMsg(p *peer) error { } // If we're seemingly on the same chain, disable the drop timer if verifyDAO { - glog.V(logger.Info).Infof("%v: seems to be on the same side of the DAO fork", p) + glog.V(logger.Debug).Infof("%v: seems to be on the same side of the DAO fork", p) p.forkDrop.Stop() p.forkDrop = nil return nil @@ -529,11 +529,11 @@ func (pm *ProtocolManager) handleMsg(p *peer) error { p.forkDrop = nil // Validate the header and either drop the peer or continue - if err := core.ValidateHeaderExtraData(pm.chainconfig, headers[0]); err != nil { - glog.V(logger.Info).Infof("%v: verified to be on the other side of the DAO fork, dropping", p) + if err := core.ValidateDAOHeaderExtraData(pm.chainconfig, headers[0]); err != nil { + glog.V(logger.Debug).Infof("%v: verified to be on the other side of the DAO fork, dropping", p) return err } - glog.V(logger.Info).Infof("%v: verified to be on the same side of the DAO fork", p) + glog.V(logger.Debug).Infof("%v: verified to be on the same side of the DAO fork", p) } // Irrelevant of the fork checks, send the header to the fetcher just in case headers = pm.fetcher.FilterHeaders(headers, time.Now()) diff --git a/miner/worker.go b/miner/worker.go index 9118b0f8ea..dfda6d8985 100644 --- a/miner/worker.go +++ b/miner/worker.go @@ -474,7 +474,7 @@ func (self *worker) commitNewWork() { if daoBlock := self.config.DAOForkBlock; daoBlock != nil { // Check whether the block is among the fork extra-override range limit := new(big.Int).Add(daoBlock, params.DAOForkExtraRange) - if daoBlock.Cmp(header.Number) <= 0 && header.Number.Cmp(limit) < 0 { + if header.Number.Cmp(daoBlock) >= 0 && header.Number.Cmp(limit) < 0 { // Depending whether we support or oppose the fork, override differently if self.config.DAOForkSupport { header.Extra = common.CopyBytes(params.DAOForkBlockExtra) diff --git a/params/dao.go b/params/dao.go new file mode 100644 index 0000000000..3e2a68cc9e --- /dev/null +++ b/params/dao.go @@ -0,0 +1,418 @@ +// Copyright 2016 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package params + +import ( + "encoding/json" + "fmt" + "math/big" + + "github.com/ethereum/go-ethereum/common" +) + +// TestNetDAOForkBlock is the block number where the DAO hard-fork commences on +// the Ethereum test network. It's enforced nil since it was decided not to do a +// testnet transition. +var TestNetDAOForkBlock *big.Int + +// MainNetDAOForkBlock is the block number where the DAO hard-fork commences on +// the Ethereum main network. +var MainNetDAOForkBlock = big.NewInt(1920000) + +// DAOForkBlockExtra is the block header extra-data field to set for the DAO fork +// point and a number of consecutive blocks to allow fast/light syncers to correctly +// pick the side they want ("dao-hard-fork"). +var DAOForkBlockExtra = common.FromHex("0x64616f2d686172642d666f726b") + +// DAOForkExtraRange is the number of consecutive blocks from the DAO fork point +// to override the extra-data in to prevent no-fork attacks. +var DAOForkExtraRange = big.NewInt(10) + +// DAORefundContract is the address of the refund contract to send DAO balances to. +var DAORefundContract = common.HexToAddress("0xbf4ed7b27f1d666546e30d74d50d173d20bca754") + +// DAODrainList is the list of accounts whose full balances will be moved into a +// refund contract at the beginning of the dao-fork block. +var DAODrainList []common.Address + +func init() { + // Parse the list of DAO accounts to drain + var list []map[string]string + if err := json.Unmarshal([]byte(daoDrainListJSON), &list); err != nil { + panic(fmt.Errorf("Failed to parse DAO drain list: %v", err)) + } + // Collect all the accounts that need draining + for _, dao := range list { + DAODrainList = append(DAODrainList, common.HexToAddress(dao["address"])) + DAODrainList = append(DAODrainList, common.HexToAddress(dao["extraBalanceAccount"])) + } +} + +// daoDrainListJSON is the JSON encoded list of accounts whose full balances will +// be moved into a refund contract at the beginning of the dao-fork block. +const daoDrainListJSON = ` +[ + { + "address":"0xd4fe7bc31cedb7bfb8a345f31e668033056b2728", + "balance":"186cc8bfaefb7be", + "extraBalance":"0", + "extraBalanceAccount":"0xb3fb0e5aba0e20e5c49d252dfd30e102b171a425" + }, + { + "address":"0x2c19c7f9ae8b751e37aeb2d93a699722395ae18f", + "balance":"b14e8feab1ff435", + "extraBalance":"0", + "extraBalanceAccount":"0xecd135fa4f61a655311e86238c92adcd779555d2" + }, + { + "address":"0x1975bd06d486162d5dc297798dfc41edd5d160a7", + "balance":"359d26614cb5070c77", + "extraBalance":"0", + "extraBalanceAccount":"0xa3acf3a1e16b1d7c315e23510fdd7847b48234f6" + }, + { + "address":"0x319f70bab6845585f412ec7724b744fec6095c85", + "balance":"6e075cd846d2cb1d42", + "extraBalance":"13d34fd41b545b81", + "extraBalanceAccount":"0x06706dd3f2c9abf0a21ddcc6941d9b86f0596936" + }, + { + "address":"0x5c8536898fbb74fc7445814902fd08422eac56d0", + "balance":"b1e5593558008fd78", + "extraBalance":"0", + "extraBalanceAccount":"0x6966ab0d485353095148a2155858910e0965b6f9" + }, + { + "address":"0x779543a0491a837ca36ce8c635d6154e3c4911a6", + "balance":"392eaa20d1aad59a4c", + "extraBalance":"426938826a96c9", + "extraBalanceAccount":"0x2a5ed960395e2a49b1c758cef4aa15213cfd874c" + }, + { + "address":"0x5c6e67ccd5849c0d29219c4f95f1a7a93b3f5dc5", + "balance":"2875d22b29793d4ba7", + "extraBalance":"0", + "extraBalanceAccount":"0x9c50426be05db97f5d64fc54bf89eff947f0a321" + }, + { + "address":"0x200450f06520bdd6c527622a273333384d870efb", + "balance":"43c341d9f96954c049", + "extraBalance":"0", + "extraBalanceAccount":"0xbe8539bfe837b67d1282b2b1d61c3f723966f049" + }, + { + "address":"0x6b0c4d41ba9ab8d8cfb5d379c69a612f2ced8ecb", + "balance":"75251057154d70fa816", + "extraBalance":"0", + "extraBalanceAccount":"0xf1385fb24aad0cd7432824085e42aff90886fef5" + }, + { + "address":"0xd1ac8b1ef1b69ff51d1d401a476e7e612414f091", + "balance":"392409769296cf67f36", + "extraBalance":"0", + "extraBalanceAccount":"0x8163e7fb499e90f8544ea62bbf80d21cd26d9efd" + }, + { + "address":"0x51e0ddd9998364a2eb38588679f0d2c42653e4a6", + "balance":"8ac72eccbf4e8083", + "extraBalance":"0", + "extraBalanceAccount":"0x627a0a960c079c21c34f7612d5d230e01b4ad4c7" + }, + { + "address":"0xf0b1aa0eb660754448a7937c022e30aa692fe0c5", + "balance":"82289c3bb3e8c98799", + "extraBalance":"0", + "extraBalanceAccount":"0x24c4d950dfd4dd1902bbed3508144a54542bba94" + }, + { + "address":"0x9f27daea7aca0aa0446220b98d028715e3bc803d", + "balance":"56bc29049ebed40fd", + "extraBalance":"0", + "extraBalanceAccount":"0xa5dc5acd6a7968a4554d89d65e59b7fd3bff0f90" + }, + { + "address":"0xd9aef3a1e38a39c16b31d1ace71bca8ef58d315b", + "balance":"56bc7d3ff79110524", + "extraBalance":"0", + "extraBalanceAccount":"0x63ed5a272de2f6d968408b4acb9024f4cc208ebf" + }, + { + "address":"0x6f6704e5a10332af6672e50b3d9754dc460dfa4d", + "balance":"23b651bd48cbc70cc", + "extraBalance":"0", + "extraBalanceAccount":"0x77ca7b50b6cd7e2f3fa008e24ab793fd56cb15f6" + }, + { + "address":"0x492ea3bb0f3315521c31f273e565b868fc090f17", + "balance":"13ea6d4fee651dd7c9", + "extraBalance":"0", + "extraBalanceAccount":"0x0ff30d6de14a8224aa97b78aea5388d1c51c1f00" + }, + { + "address":"0x9ea779f907f0b315b364b0cfc39a0fde5b02a416", + "balance":"35ac471a3836ae7de5a", + "extraBalance":"0", + "extraBalanceAccount":"0xceaeb481747ca6c540a000c1f3641f8cef161fa7" + }, + { + "address":"0xcc34673c6c40e791051898567a1222daf90be287", + "balance":"d529c0b76b7aa0", + "extraBalance":"0", + "extraBalanceAccount":"0x579a80d909f346fbfb1189493f521d7f48d52238" + }, + { + "address":"0xe308bd1ac5fda103967359b2712dd89deffb7973", + "balance":"5cd9e7df3a8e5cdd3", + "extraBalance":"0", + "extraBalanceAccount":"0x4cb31628079fb14e4bc3cd5e30c2f7489b00960c" + }, + { + "address":"0xac1ecab32727358dba8962a0f3b261731aad9723", + "balance":"2c8442fe35363313b93", + "extraBalance":"0", + "extraBalanceAccount":"0x4fd6ace747f06ece9c49699c7cabc62d02211f75" + }, + { + "address":"0x440c59b325d2997a134c2c7c60a8c61611212bad", + "balance":"e77583a3958130e53", + "extraBalance":"0", + "extraBalanceAccount":"0x4486a3d68fac6967006d7a517b889fd3f98c102b" + }, + { + "address":"0x9c15b54878ba618f494b38f0ae7443db6af648ba", + "balance":"1f0b6ade348ca998", + "extraBalance":"0", + "extraBalanceAccount":"0x27b137a85656544b1ccb5a0f2e561a5703c6a68f" + }, + { + "address":"0x21c7fdb9ed8d291d79ffd82eb2c4356ec0d81241", + "balance":"61725880736659", + "extraBalance":"0", + "extraBalanceAccount":"0x23b75c2f6791eef49c69684db4c6c1f93bf49a50" + }, + { + "address":"0x1ca6abd14d30affe533b24d7a21bff4c2d5e1f3b", + "balance":"42948d8dc7ddbc22d", + "extraBalance":"0", + "extraBalanceAccount":"0xb9637156d330c0d605a791f1c31ba5890582fe1c" + }, + { + "address":"0x6131c42fa982e56929107413a9d526fd99405560", + "balance":"7306683851d1eafbfa", + "extraBalance":"0", + "extraBalanceAccount":"0x1591fc0f688c81fbeb17f5426a162a7024d430c2" + }, + { + "address":"0x542a9515200d14b68e934e9830d91645a980dd7a", + "balance":"2a8457d0d8432e21d0c", + "extraBalance":"0", + "extraBalanceAccount":"0xc4bbd073882dd2add2424cf47d35213405b01324" + }, + { + "address":"0x782495b7b3355efb2833d56ecb34dc22ad7dfcc4", + "balance":"d8d7391feaeaa8cdb", + "extraBalance":"0", + "extraBalanceAccount":"0x58b95c9a9d5d26825e70a82b6adb139d3fd829eb" + }, + { + "address":"0x3ba4d81db016dc2890c81f3acec2454bff5aada5", + "balance":"1", + "extraBalance":"0", + "extraBalanceAccount":"0xb52042c8ca3f8aa246fa79c3feaa3d959347c0ab" + }, + { + "address":"0xe4ae1efdfc53b73893af49113d8694a057b9c0d1", + "balance":"456397665fa74041", + "extraBalance":"0", + "extraBalanceAccount":"0x3c02a7bc0391e86d91b7d144e61c2c01a25a79c5" + }, + { + "address":"0x0737a6b837f97f46ebade41b9bc3e1c509c85c53", + "balance":"6324dcb7126ecbef", + "extraBalance":"0", + "extraBalanceAccount":"0x97f43a37f595ab5dd318fb46e7a155eae057317a" + }, + { + "address":"0x52c5317c848ba20c7504cb2c8052abd1fde29d03", + "balance":"6c3419b0705c01cd0d", + "extraBalance":"0", + "extraBalanceAccount":"0x4863226780fe7c0356454236d3b1c8792785748d" + }, + { + "address":"0x5d2b2e6fcbe3b11d26b525e085ff818dae332479", + "balance":"456397665fa74041", + "extraBalance":"0", + "extraBalanceAccount":"0x5f9f3392e9f62f63b8eac0beb55541fc8627f42c" + }, + { + "address":"0x057b56736d32b86616a10f619859c6cd6f59092a", + "balance":"232c025bb44b46", + "extraBalance":"0", + "extraBalanceAccount":"0x9aa008f65de0b923a2a4f02012ad034a5e2e2192" + }, + { + "address":"0x304a554a310c7e546dfe434669c62820b7d83490", + "balance":"3034f5ca7d45e17df199b", + "extraBalance":"f7d15162c44e97b6e", + "extraBalanceAccount":"0x914d1b8b43e92723e64fd0a06f5bdb8dd9b10c79" + }, + { + "address":"0x4deb0033bb26bc534b197e61d19e0733e5679784", + "balance":"4417e96ed796591e09", + "extraBalance":"0", + "extraBalanceAccount":"0x07f5c1e1bc2c93e0402f23341973a0e043f7bf8a" + }, + { + "address":"0x35a051a0010aba705c9008d7a7eff6fb88f6ea7b", + "balance":"d3ff7771412bbcc9", + "extraBalance":"0", + "extraBalanceAccount":"0x4fa802324e929786dbda3b8820dc7834e9134a2a" + }, + { + "address":"0x9da397b9e80755301a3b32173283a91c0ef6c87e", + "balance":"32ae324c233816b4c2", + "extraBalance":"0", + "extraBalanceAccount":"0x8d9edb3054ce5c5774a420ac37ebae0ac02343c6" + }, + { + "address":"0x0101f3be8ebb4bbd39a2e3b9a3639d4259832fd9", + "balance":"1e530695b705f037c6", + "extraBalance":"0", + "extraBalanceAccount":"0x5dc28b15dffed94048d73806ce4b7a4612a1d48f" + }, + { + "address":"0xbcf899e6c7d9d5a215ab1e3444c86806fa854c76", + "balance":"68013bad5b4b1133fc5", + "extraBalance":"0", + "extraBalanceAccount":"0x12e626b0eebfe86a56d633b9864e389b45dcb260" + }, + { + "address":"0xa2f1ccba9395d7fcb155bba8bc92db9bafaeade7", + "balance":"456397665fa74041", + "extraBalance":"0", + "extraBalanceAccount":"0xec8e57756626fdc07c63ad2eafbd28d08e7b0ca5" + }, + { + "address":"0xd164b088bd9108b60d0ca3751da4bceb207b0782", + "balance":"3635ce47fabaaa336e", + "extraBalance":"0", + "extraBalanceAccount":"0x6231b6d0d5e77fe001c2a460bd9584fee60d409b" + }, + { + "address":"0x1cba23d343a983e9b5cfd19496b9a9701ada385f", + "balance":"f3abd9906c170a", + "extraBalance":"0", + "extraBalanceAccount":"0xa82f360a8d3455c5c41366975bde739c37bfeb8a" + }, + { + "address":"0x9fcd2deaff372a39cc679d5c5e4de7bafb0b1339", + "balance":"4c6679d9d9b95a4e08", + "extraBalance":"0", + "extraBalanceAccount":"0x005f5cee7a43331d5a3d3eec71305925a62f34b6" + }, + { + "address":"0x0e0da70933f4c7849fc0d203f5d1d43b9ae4532d", + "balance":"40f622936475de31849", + "extraBalance":"671e1bbabded39754", + "extraBalanceAccount":"0xd131637d5275fd1a68a3200f4ad25c71a2a9522e" + }, + { + "address":"0xbc07118b9ac290e4622f5e77a0853539789effbe", + "balance":"1316ccfa4a35db5e58f", + "extraBalance":"0", + "extraBalanceAccount":"0x47e7aa56d6bdf3f36be34619660de61275420af8" + }, + { + "address":"0xacd87e28b0c9d1254e868b81cba4cc20d9a32225", + "balance":"b3ad6bb72000bab9f", + "extraBalance":"0", + "extraBalanceAccount":"0xadf80daec7ba8dcf15392f1ac611fff65d94f880" + }, + { + "address":"0x5524c55fb03cf21f549444ccbecb664d0acad706", + "balance":"16f2da372a5c8a70967", + "extraBalance":"0", + "extraBalanceAccount":"0x40b803a9abce16f50f36a77ba41180eb90023925" + }, + { + "address":"0xfe24cdd8648121a43a7c86d289be4dd2951ed49f", + "balance":"ea0b1bdc78f500a43", + "extraBalance":"0", + "extraBalanceAccount":"0x17802f43a0137c506ba92291391a8a8f207f487d" + }, + { + "address":"0x253488078a4edf4d6f42f113d1e62836a942cf1a", + "balance":"3060e3aed135cc80", + "extraBalance":"0", + "extraBalanceAccount":"0x86af3e9626fce1957c82e88cbf04ddf3a2ed7915" + }, + { + "address":"0xb136707642a4ea12fb4bae820f03d2562ebff487", + "balance":"6050bdeb3354b5c98adc3", + "extraBalance":"0", + "extraBalanceAccount":"0xdbe9b615a3ae8709af8b93336ce9b477e4ac0940" + }, + { + "address":"0xf14c14075d6c4ed84b86798af0956deef67365b5", + "balance":"1d77844e94c25ba2", + "extraBalance":"0", + "extraBalanceAccount":"0xca544e5c4687d109611d0f8f928b53a25af72448" + }, + { + "address":"0xaeeb8ff27288bdabc0fa5ebb731b6f409507516c", + "balance":"2e93a72de4fc5ec0ed", + "extraBalance":"0", + "extraBalanceAccount":"0xcbb9d3703e651b0d496cdefb8b92c25aeb2171f7" + }, + { + "address":"0x6d87578288b6cb5549d5076a207456a1f6a63dc0", + "balance":"1afd340799e48c18", + "extraBalance":"0", + "extraBalanceAccount":"0xb2c6f0dfbb716ac562e2d85d6cb2f8d5ee87603e" + }, + { + "address":"0xaccc230e8a6e5be9160b8cdf2864dd2a001c28b6", + "balance":"14d0944eb3be947a8", + "extraBalance":"0", + "extraBalanceAccount":"0x2b3455ec7fedf16e646268bf88846bd7a2319bb2" + }, + { + "address":"0x4613f3bca5c44ea06337a9e439fbc6d42e501d0a", + "balance":"6202b236a200e365eba", + "extraBalance":"11979be9020f03ec4ec", + "extraBalanceAccount":"0xd343b217de44030afaa275f54d31a9317c7f441e" + }, + { + "address":"0x84ef4b2357079cd7a7c69fd7a37cd0609a679106", + "balance":"7ed634ebbba531901e07", + "extraBalance":"f9c5eff28cb08720c85", + "extraBalanceAccount":"0xda2fef9e4a3230988ff17df2165440f37e8b1708" + }, + { + "address":"0xf4c64518ea10f995918a454158c6b61407ea345c", + "balance":"39152e15508a96ff894a", + "extraBalance":"14041ca908bcc185c8", + "extraBalanceAccount":"0x7602b46df5390e432ef1c307d4f2c9ff6d65cc97" + }, + { + "address":"0xbb9bc244d798123fde783fcc1c72d3bb8c189413", + "balance":"1", + "extraBalance":"5553ebc", + "extraBalanceAccount":"0x807640a13483f8ac783c557fcdf27be11ea4ac7a" + } +] +` diff --git a/params/dao_list.go b/params/dao_list.go deleted file mode 100644 index 7565ab333c..0000000000 --- a/params/dao_list.go +++ /dev/null @@ -1,108 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -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 884f1f803c..9d1fa54e60 100644 --- a/params/util.go +++ b/params/util.go @@ -16,19 +16,9 @@ package params -import ( - "math/big" - - "github.com/ethereum/go-ethereum/common" -) +import "math/big" var ( TestNetHomesteadBlock = big.NewInt(494000) // Testnet homestead block MainNetHomesteadBlock = big.NewInt(1150000) // Mainnet homestead block - - TestNetDAOForkBlock = big.NewInt(8888888) // Testnet dao hard-fork block - MainNetDAOForkBlock = big.NewInt(9999999) // Mainnet dao hard-fork block - DAOForkBlockExtra = common.FromHex("0x64616f2d686172642d666f726b") // Block extradata to signel the fork with ("dao-hard-fork") - DAOForkExtraRange = big.NewInt(10) // Number of blocks to override the extradata (prevent no-fork attacks) - DAORefundContract = common.HexToAddress("0x0000000000000000000000000000000000000000") // Address of the refund contract to send DAO balances to ) diff --git a/tests/files/BlockchainTests/TestNetwork/bcTheDaoTest.json b/tests/files/BlockchainTests/TestNetwork/bcTheDaoTest.json index cb9652a7d8..c1d2b77785 100644 --- a/tests/files/BlockchainTests/TestNetwork/bcTheDaoTest.json +++ b/tests/files/BlockchainTests/TestNetwork/bcTheDaoTest.json @@ -9,19 +9,19 @@ "extraData" : "0x", "gasLimit" : "0x2fefba", "gasUsed" : "0x5208", - "hash" : "18da61d1b7f4c81d33a4646d1d1140b13ea28c8715f85e42cda0224915ea9e9c", - "mixHash" : "f470fa89e99f9f0e5a2f302c0dac085b006cb6372212e93764224e5d711b573d", - "nonce" : "2eddd7b66317fc69", + "hash" : "f8cb917341639578ff41f66586de342d29b4b7bffc8aebcd6a981a68035d33ed", + "mixHash" : "e200b760aec43546c7c83f6f90cc0cacbbd101bb4a6528c4e17099d6abf9f55b", + "nonce" : "ad584dd4c72dea1e", "number" : "0x01", "parentHash" : "eb310def4877fc94c3945bdabd9ba6bbafff1c74944b2bd74a4ac01f0868804c", "receiptTrie" : "63e81aadc86aed2ebe147fd86db74d8fbe91a938af0521be549669246e607443", "stateRoot" : "421450c5fcaa516f03635983f0c9d936574721033424eac5e6d71c8fa14b766f", - "timestamp" : "0x578362c8", + "timestamp" : "0x57841831", "transactionsTrie" : "ac81275d7a81a720240146377982939179218535bfcfa9469c8bdd3e264ef179", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "blocknumber" : "1", - "rlp" : "0xf9024cf901f9a0eb310def4877fc94c3945bdabd9ba6bbafff1c74944b2bd74a4ac01f0868804ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0421450c5fcaa516f03635983f0c9d936574721033424eac5e6d71c8fa14b766fa0ac81275d7a81a720240146377982939179218535bfcfa9469c8bdd3e264ef179a063e81aadc86aed2ebe147fd86db74d8fbe91a938af0521be549669246e607443b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000001832fefba82520884578362c880a0f470fa89e99f9f0e5a2f302c0dac085b006cb6372212e93764224e5d711b573d882eddd7b66317fc69f84df84b8001827530800a801ca057cb46c0b702929c4fd4127b2370f28a7aeeaa65509699e58eedf7692090a0a9a05ba7c83d99be6a9bca0c81947023ba3b5f2162516d82d0757bf8004f3e9bc03ac0", + "rlp" : "0xf9024cf901f9a0eb310def4877fc94c3945bdabd9ba6bbafff1c74944b2bd74a4ac01f0868804ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0421450c5fcaa516f03635983f0c9d936574721033424eac5e6d71c8fa14b766fa0ac81275d7a81a720240146377982939179218535bfcfa9469c8bdd3e264ef179a063e81aadc86aed2ebe147fd86db74d8fbe91a938af0521be549669246e607443b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000001832fefba825208845784183180a0e200b760aec43546c7c83f6f90cc0cacbbd101bb4a6528c4e17099d6abf9f55b88ad584dd4c72dea1ef84df84b8001827530800a801ca057cb46c0b702929c4fd4127b2370f28a7aeeaa65509699e58eedf7692090a0a9a05ba7c83d99be6a9bca0c81947023ba3b5f2162516d82d0757bf8004f3e9bc03ac0", "transactions" : [ { "data" : "0x", @@ -46,19 +46,19 @@ "extraData" : "0x", "gasLimit" : "0x2fefba", "gasUsed" : "0x5208", - "hash" : "6ce6218f835e3e4868a94325f31b57777373ca768f933763badaaf4147cb027b", - "mixHash" : "6bf524f42685c9912d2907520db254352cc2f84428f354097d7b13ad27a88796", - "nonce" : "6713fb980f3c9f72", + "hash" : "d1b7b902d227d73e3b666ab45848a1e9c0d14243028b460c90067026b7d11294", + "mixHash" : "db85dc45ef39ab4299c2776168643603fd8bdd46d7d0d6c8cd4c168b411a58fb", + "nonce" : "01afbbb39e2fe7d6", "number" : "0x02", - "parentHash" : "18da61d1b7f4c81d33a4646d1d1140b13ea28c8715f85e42cda0224915ea9e9c", + "parentHash" : "f8cb917341639578ff41f66586de342d29b4b7bffc8aebcd6a981a68035d33ed", "receiptTrie" : "b41287e7f7e5d2983862a73e54c86ec144ecf835096984770f6bf485188268b8", "stateRoot" : "1e31d34b22a8d2fd9893bb58fa80e6ca4561320eed43776c295acca93721847c", - "timestamp" : "0x578362ce", + "timestamp" : "0x5784183a", "transactionsTrie" : "76c7a0ce7644661f276c76fb9a82eaee879d0642cf4ed244fc10afc02c646abf", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "blocknumber" : "2", - "rlp" : "0xf9024cf901f9a018da61d1b7f4c81d33a4646d1d1140b13ea28c8715f85e42cda0224915ea9e9ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a01e31d34b22a8d2fd9893bb58fa80e6ca4561320eed43776c295acca93721847ca076c7a0ce7644661f276c76fb9a82eaee879d0642cf4ed244fc10afc02c646abfa0b41287e7f7e5d2983862a73e54c86ec144ecf835096984770f6bf485188268b8b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302004002832fefba82520884578362ce80a06bf524f42685c9912d2907520db254352cc2f84428f354097d7b13ad27a88796886713fb980f3c9f72f84df84b0101827530800a801ca0bb6e3cf3f281af13ef1393d7052b03cab367079a9eb71aa829ec72b231a60e1fa04bcfe1da53f26bb95806d38e9f42fef262aaaf5191e16ec473a695c8978a0b05c0", + "rlp" : "0xf9024cf901f9a0f8cb917341639578ff41f66586de342d29b4b7bffc8aebcd6a981a68035d33eda01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a01e31d34b22a8d2fd9893bb58fa80e6ca4561320eed43776c295acca93721847ca076c7a0ce7644661f276c76fb9a82eaee879d0642cf4ed244fc10afc02c646abfa0b41287e7f7e5d2983862a73e54c86ec144ecf835096984770f6bf485188268b8b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302004002832fefba825208845784183a80a0db85dc45ef39ab4299c2776168643603fd8bdd46d7d0d6c8cd4c168b411a58fb8801afbbb39e2fe7d6f84df84b0101827530800a801ca0bb6e3cf3f281af13ef1393d7052b03cab367079a9eb71aa829ec72b231a60e1fa04bcfe1da53f26bb95806d38e9f42fef262aaaf5191e16ec473a695c8978a0b05c0", "transactions" : [ { "data" : "0x", @@ -83,19 +83,19 @@ "extraData" : "0x", "gasLimit" : "0x2fefba", "gasUsed" : "0x5208", - "hash" : "341aaea7ee0397c8e54effcd92e9f6e6aeda54828fa958a89a700df5b427047e", - "mixHash" : "76844249a296c9045e8c77e8c10b1794bf6b35fc1090d43b9ceacade45f57607", - "nonce" : "f6876f9244e81160", + "hash" : "207c926fb84b163aa14515e092045f213d3d30b06794616c9d3ae93fd3ad9728", + "mixHash" : "f8c84aafed7821f71379d4cf0be5ed4b2faab4fec20805f443e061617e9edd3d", + "nonce" : "915d8300b77b667c", "number" : "0x03", - "parentHash" : "6ce6218f835e3e4868a94325f31b57777373ca768f933763badaaf4147cb027b", + "parentHash" : "d1b7b902d227d73e3b666ab45848a1e9c0d14243028b460c90067026b7d11294", "receiptTrie" : "12f61177f6c2cebe14df5474c8b8c1f8f47f4ea8fff7f8b22b7aa8a4156581c8", "stateRoot" : "587518607d6c98344439896e7f39111d76a8aac09b70d624e237da6fa29bbc44", - "timestamp" : "0x578362d0", + "timestamp" : "0x5784183b", "transactionsTrie" : "3798aa164b61e27b93484c76a5f319bd93c808dc78ef31cf8b93f4e1b248ca2c", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "blocknumber" : "3", - "rlp" : "0xf9024cf901f9a06ce6218f835e3e4868a94325f31b57777373ca768f933763badaaf4147cb027ba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0587518607d6c98344439896e7f39111d76a8aac09b70d624e237da6fa29bbc44a03798aa164b61e27b93484c76a5f319bd93c808dc78ef31cf8b93f4e1b248ca2ca012f61177f6c2cebe14df5474c8b8c1f8f47f4ea8fff7f8b22b7aa8a4156581c8b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302008003832fefba82520884578362d080a076844249a296c9045e8c77e8c10b1794bf6b35fc1090d43b9ceacade45f5760788f6876f9244e81160f84df84b0201827530800a801ca0f6d884cae1f86bdff1281e95e416089c544a4a5578a75d5e8ad76118e341b055a075b7d88985ed5acd61f30c9f9570c6c33bb92f3ad1a32b86a0747817fbc5ededc0", + "rlp" : "0xf9024cf901f9a0d1b7b902d227d73e3b666ab45848a1e9c0d14243028b460c90067026b7d11294a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0587518607d6c98344439896e7f39111d76a8aac09b70d624e237da6fa29bbc44a03798aa164b61e27b93484c76a5f319bd93c808dc78ef31cf8b93f4e1b248ca2ca012f61177f6c2cebe14df5474c8b8c1f8f47f4ea8fff7f8b22b7aa8a4156581c8b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302008003832fefba825208845784183b80a0f8c84aafed7821f71379d4cf0be5ed4b2faab4fec20805f443e061617e9edd3d88915d8300b77b667cf84df84b0201827530800a801ca0f6d884cae1f86bdff1281e95e416089c544a4a5578a75d5e8ad76118e341b055a075b7d88985ed5acd61f30c9f9570c6c33bb92f3ad1a32b86a0747817fbc5ededc0", "transactions" : [ { "data" : "0x", @@ -120,19 +120,19 @@ "extraData" : "0x", "gasLimit" : "0x2fefba", "gasUsed" : "0x5208", - "hash" : "c0cdd54d1a098c97570019a6cf54f4bf5cb0fefb8ec9b2a3a81009535ff894b5", - "mixHash" : "6c0ca9fc980d1b4bbda5dd1ead2f8a73883cd1b3895ffba14489b9d58cfe46f4", - "nonce" : "66818a34832a70b9", + "hash" : "61d869243d239509fea671c8e97ebf21ae357e959707054f5b4c4b30cfeb2466", + "mixHash" : "f7cd7fdada85a935c66a8fab09fc789181d1e1e0c39ec544f2642d8529eca374", + "nonce" : "c8fc27ea8c132de9", "number" : "0x04", - "parentHash" : "341aaea7ee0397c8e54effcd92e9f6e6aeda54828fa958a89a700df5b427047e", + "parentHash" : "207c926fb84b163aa14515e092045f213d3d30b06794616c9d3ae93fd3ad9728", "receiptTrie" : "4346f81bc8c58aa684049309decc863c93cd6cdc84c592b62bd1439eee3636ac", "stateRoot" : "c8ba761363f3cb1958f01fd55b864bcba7f33324ba4f95e60fc9e48d9ba6777a", - "timestamp" : "0x578362d2", + "timestamp" : "0x5784183d", "transactionsTrie" : "4cc1b34b3a9d29bf69842a54e1c48bc97afc433883f66d2c59287f118c9c3c2c", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "blocknumber" : "4", - "rlp" : "0xf9024cf901f9a0341aaea7ee0397c8e54effcd92e9f6e6aeda54828fa958a89a700df5b427047ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0c8ba761363f3cb1958f01fd55b864bcba7f33324ba4f95e60fc9e48d9ba6777aa04cc1b34b3a9d29bf69842a54e1c48bc97afc433883f66d2c59287f118c9c3c2ca04346f81bc8c58aa684049309decc863c93cd6cdc84c592b62bd1439eee3636acb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200c004832fefba82520884578362d280a06c0ca9fc980d1b4bbda5dd1ead2f8a73883cd1b3895ffba14489b9d58cfe46f48866818a34832a70b9f84df84b0301827530800a801ca0753ee5d896db8d87fe850e7935418587277cd9c010dfaaf7dd09b0a2e73785dca066deb3c241d532c7b880ae7a9a311ee7a92ef1c5e4e2bf3307990a2881bc13b0c0", + "rlp" : "0xf9024cf901f9a0207c926fb84b163aa14515e092045f213d3d30b06794616c9d3ae93fd3ad9728a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0c8ba761363f3cb1958f01fd55b864bcba7f33324ba4f95e60fc9e48d9ba6777aa04cc1b34b3a9d29bf69842a54e1c48bc97afc433883f66d2c59287f118c9c3c2ca04346f81bc8c58aa684049309decc863c93cd6cdc84c592b62bd1439eee3636acb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200c004832fefba825208845784183d80a0f7cd7fdada85a935c66a8fab09fc789181d1e1e0c39ec544f2642d8529eca37488c8fc27ea8c132de9f84df84b0301827530800a801ca0753ee5d896db8d87fe850e7935418587277cd9c010dfaaf7dd09b0a2e73785dca066deb3c241d532c7b880ae7a9a311ee7a92ef1c5e4e2bf3307990a2881bc13b0c0", "transactions" : [ { "data" : "0x", @@ -157,19 +157,19 @@ "extraData" : "0x", "gasLimit" : "0x2fefba", "gasUsed" : "0xcf08", - "hash" : "e6988968ae553d9afde49b0ff8c8f865e0ad5da5e40f31afb12a755289c99381", - "mixHash" : "418a41d8cb95ab177da1d5e32682f0206af88fe90a55601a35fb45ce3ee1d1a6", - "nonce" : "648f4d040cc945b5", + "hash" : "3ea47f1375ab14ee502989dc3a686a03091f93d6bd51595cc57846d44478eb58", + "mixHash" : "4b6cf201e184bfd641b2ed32c735cffd76164f07d9fdb1f9abbf160aa7c89314", + "nonce" : "e7b20e974fd69c3c", "number" : "0x05", - "parentHash" : "c0cdd54d1a098c97570019a6cf54f4bf5cb0fefb8ec9b2a3a81009535ff894b5", + "parentHash" : "61d869243d239509fea671c8e97ebf21ae357e959707054f5b4c4b30cfeb2466", "receiptTrie" : "49f411805d9b0ace02b56752bf40396c5505bb7ced5f174abf02a20b623982c0", "stateRoot" : "8045027de50cc67c31daed085a6e72311e4f931606c6caa9f85bfc34009b3d00", - "timestamp" : "0x578362d5", + "timestamp" : "0x57841842", "transactionsTrie" : "165af780d27795ebc80c27759d3d949a9c4b05d35fcc7e9d3da8be357f5340cd", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "blocknumber" : "5", - "rlp" : "0xf9024cf901f9a0c0cdd54d1a098c97570019a6cf54f4bf5cb0fefb8ec9b2a3a81009535ff894b5a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a08045027de50cc67c31daed085a6e72311e4f931606c6caa9f85bfc34009b3d00a0165af780d27795ebc80c27759d3d949a9c4b05d35fcc7e9d3da8be357f5340cda049f411805d9b0ace02b56752bf40396c5505bb7ced5f174abf02a20b623982c0b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302010005832fefba82cf0884578362d580a0418a41d8cb95ab177da1d5e32682f0206af88fe90a55601a35fb45ce3ee1d1a688648f4d040cc945b5f84df84b040182ea60800a801ba0cb1400f01459519ac3dc0426c6d7f95641dc6a7b8008069c9dfbe4f94b167169a07445362aadae8c25e4f0b494ad553bfc652bf34fb2ed0ccbf9a6b089c2b09f62c0", + "rlp" : "0xf9024cf901f9a061d869243d239509fea671c8e97ebf21ae357e959707054f5b4c4b30cfeb2466a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a08045027de50cc67c31daed085a6e72311e4f931606c6caa9f85bfc34009b3d00a0165af780d27795ebc80c27759d3d949a9c4b05d35fcc7e9d3da8be357f5340cda049f411805d9b0ace02b56752bf40396c5505bb7ced5f174abf02a20b623982c0b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302010005832fefba82cf08845784184280a04b6cf201e184bfd641b2ed32c735cffd76164f07d9fdb1f9abbf160aa7c8931488e7b20e974fd69c3cf84df84b040182ea60800a801ba0cb1400f01459519ac3dc0426c6d7f95641dc6a7b8008069c9dfbe4f94b167169a07445362aadae8c25e4f0b494ad553bfc652bf34fb2ed0ccbf9a6b089c2b09f62c0", "transactions" : [ { "data" : "0x", @@ -194,19 +194,19 @@ "extraData" : "0x", "gasLimit" : "0x2fefba", "gasUsed" : "0xcf08", - "hash" : "111c5c0a5b2f0743d6167baa6d31718fae8dcfd85eb51e788ab419444488f857", - "mixHash" : "cc03279986ee03546a0d0c0609bdfb76d830216c29b44b9008a7d5b8c7ffc317", - "nonce" : "c29ace8b96a6c660", + "hash" : "751aff3599e189225eacaecb0df7646ffc76efb6896021312d9b1961b56d53bf", + "mixHash" : "ef4aad53ab703f0e3c99914be60a1eaf709e8f906b6fe48b11f4bd5488d4a7e8", + "nonce" : "db2f02f42b89a108", "number" : "0x06", - "parentHash" : "e6988968ae553d9afde49b0ff8c8f865e0ad5da5e40f31afb12a755289c99381", + "parentHash" : "3ea47f1375ab14ee502989dc3a686a03091f93d6bd51595cc57846d44478eb58", "receiptTrie" : "5e40223bcc6a700b1d32c94ec5b7ed325345b400cf06913d4a1538d80dde375d", "stateRoot" : "293f78bf5ea7fbe0c13c88d246c5d84bf917dbf39e35722ae601ea85543dee9d", - "timestamp" : "0x578362d7", + "timestamp" : "0x57841844", "transactionsTrie" : "ef009c3c274a522a6e2ca98232fffff747bdfab79189be3e2b5e5dc54e2a51be", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "blocknumber" : "6", - "rlp" : "0xf9024cf901f9a0e6988968ae553d9afde49b0ff8c8f865e0ad5da5e40f31afb12a755289c99381a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0293f78bf5ea7fbe0c13c88d246c5d84bf917dbf39e35722ae601ea85543dee9da0ef009c3c274a522a6e2ca98232fffff747bdfab79189be3e2b5e5dc54e2a51bea05e40223bcc6a700b1d32c94ec5b7ed325345b400cf06913d4a1538d80dde375db90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302014006832fefba82cf0884578362d780a0cc03279986ee03546a0d0c0609bdfb76d830216c29b44b9008a7d5b8c7ffc31788c29ace8b96a6c660f84df84b050182ea60800a801ba04d147b172eb81fdb11a21826eabad091084f6e9613d340b5897872843efa6435a023640d906f65fd156b92d518068263d99d94dc88c3e0950fd7633fb0d4d237eec0", + "rlp" : "0xf9024cf901f9a03ea47f1375ab14ee502989dc3a686a03091f93d6bd51595cc57846d44478eb58a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0293f78bf5ea7fbe0c13c88d246c5d84bf917dbf39e35722ae601ea85543dee9da0ef009c3c274a522a6e2ca98232fffff747bdfab79189be3e2b5e5dc54e2a51bea05e40223bcc6a700b1d32c94ec5b7ed325345b400cf06913d4a1538d80dde375db90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302014006832fefba82cf08845784184480a0ef4aad53ab703f0e3c99914be60a1eaf709e8f906b6fe48b11f4bd5488d4a7e888db2f02f42b89a108f84df84b050182ea60800a801ba04d147b172eb81fdb11a21826eabad091084f6e9613d340b5897872843efa6435a023640d906f65fd156b92d518068263d99d94dc88c3e0950fd7633fb0d4d237eec0", "transactions" : [ { "data" : "0x", @@ -231,19 +231,19 @@ "extraData" : "0x", "gasLimit" : "0x2fefba", "gasUsed" : "0xa042", - "hash" : "3b08badb7af69e5b04e06a1aafe6b1e26b9e59931f6703f96833a1e65ed061e4", - "mixHash" : "c43fd62737e2c341234fed01e5a75da2e41a0d0d5d71ed7f65a6d07343af82df", - "nonce" : "2510c815a38b31b7", + "hash" : "8f3383708683f3f4f2da97f00689e7787ac6a81ca8176a7d5e81f2ca348a3d76", + "mixHash" : "de424d746ee6621aea630e8ff36e68c55689374d61173aae012d48991be6a1fa", + "nonce" : "7a4e89724f935f52", "number" : "0x07", - "parentHash" : "111c5c0a5b2f0743d6167baa6d31718fae8dcfd85eb51e788ab419444488f857", + "parentHash" : "751aff3599e189225eacaecb0df7646ffc76efb6896021312d9b1961b56d53bf", "receiptTrie" : "e3beaaa91301cca4d98fc58b2aad310bd7bd147d4ff00f4fb5ce2b186a039f2d", "stateRoot" : "219ec50b26a20c420f96b8905f669455145efef0233e52a39c2d338b52a60f8c", - "timestamp" : "0x578362d8", + "timestamp" : "0x57841847", "transactionsTrie" : "b2d17fa171d19df4e817ffb15f38526d125a42b7879cd712584b130dc8ad341c", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "blocknumber" : "7", - "rlp" : "0xf90260f901f9a0111c5c0a5b2f0743d6167baa6d31718fae8dcfd85eb51e788ab419444488f857a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0219ec50b26a20c420f96b8905f669455145efef0233e52a39c2d338b52a60f8ca0b2d17fa171d19df4e817ffb15f38526d125a42b7879cd712584b130dc8ad341ca0e3beaaa91301cca4d98fc58b2aad310bd7bd147d4ff00f4fb5ce2b186a039f2db90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302018007832fefba82a04284578362d880a0c43fd62737e2c341234fed01e5a75da2e41a0d0d5d71ed7f65a6d07343af82df882510c815a38b31b7f861f85f060182ea609410000000000000000000000000000000000000070a801ba0bb8523d4c53ed16b355d0a2dba02154d23a5480449dc3894be40ef95511d2fe9a010ad725c2df4979b7a071b3fa9b6b719223f0167d68b98f213e8611f84d4d81bc0", + "rlp" : "0xf90260f901f9a0751aff3599e189225eacaecb0df7646ffc76efb6896021312d9b1961b56d53bfa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0219ec50b26a20c420f96b8905f669455145efef0233e52a39c2d338b52a60f8ca0b2d17fa171d19df4e817ffb15f38526d125a42b7879cd712584b130dc8ad341ca0e3beaaa91301cca4d98fc58b2aad310bd7bd147d4ff00f4fb5ce2b186a039f2db90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302018007832fefba82a042845784184780a0de424d746ee6621aea630e8ff36e68c55689374d61173aae012d48991be6a1fa887a4e89724f935f52f861f85f060182ea609410000000000000000000000000000000000000070a801ba0bb8523d4c53ed16b355d0a2dba02154d23a5480449dc3894be40ef95511d2fe9a010ad725c2df4979b7a071b3fa9b6b719223f0167d68b98f213e8611f84d4d81bc0", "transactions" : [ { "data" : "0x", @@ -272,19 +272,19 @@ "extraData" : "0x64616f2d686172642d666f726b", "gasLimit" : "0x2fefba", "gasUsed" : "0x65aa", - "hash" : "a8e7968fd01c207811352ab6fc86841574979a456617eb110ebd4e25b7415bcd", - "mixHash" : "d7379be76dc312d2b562cbc727089ac08a2100390056664d46b3e367e9fe43a7", - "nonce" : "796b5d001b1985d4", + "hash" : "b5a3da40a0c9a3289547217e6b2bdf98ec35f622fc3670ab4a78cba604243f74", + "mixHash" : "d8f2e0030ec6a3743815995d85546abb9dd4f3e941479bc77557503271e8a40c", + "nonce" : "d088a735fc2388fa", "number" : "0x08", - "parentHash" : "3b08badb7af69e5b04e06a1aafe6b1e26b9e59931f6703f96833a1e65ed061e4", + "parentHash" : "8f3383708683f3f4f2da97f00689e7787ac6a81ca8176a7d5e81f2ca348a3d76", "receiptTrie" : "cb09490c5315ec68e121f33138f04090fb2b4a22da3f87a28c8626ec65a405cb", "stateRoot" : "25c76e2a0478ceeaaf17619cfa46b1907f676cebf43fa41c857f10b1b50c8884", - "timestamp" : "0x578362dc", + "timestamp" : "0x5784184a", "transactionsTrie" : "2982eb44bedb5b2484b9606fe37f966942a2cce51f0705537f9040ef0614d54e", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "blocknumber" : "8", - "rlp" : "0xf9026df90206a03b08badb7af69e5b04e06a1aafe6b1e26b9e59931f6703f96833a1e65ed061e4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a025c76e2a0478ceeaaf17619cfa46b1907f676cebf43fa41c857f10b1b50c8884a02982eb44bedb5b2484b9606fe37f966942a2cce51f0705537f9040ef0614d54ea0cb09490c5315ec68e121f33138f04090fb2b4a22da3f87a28c8626ec65a405cbb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830201c008832fefba8265aa84578362dc8d64616f2d686172642d666f726ba0d7379be76dc312d2b562cbc727089ac08a2100390056664d46b3e367e9fe43a788796b5d001b1985d4f861f85f070182ea609410000000000000000000000000000000000000080a801ba03bce709627e1c9340795f11cc866742a0b5ced2b7e2da53e0cfe6f5f1df0a77ea02df804cdb52edacc4e01d8632050101cf7de7b235d37c31b504010910ec8f1f6c0", + "rlp" : "0xf9026df90206a08f3383708683f3f4f2da97f00689e7787ac6a81ca8176a7d5e81f2ca348a3d76a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a025c76e2a0478ceeaaf17619cfa46b1907f676cebf43fa41c857f10b1b50c8884a02982eb44bedb5b2484b9606fe37f966942a2cce51f0705537f9040ef0614d54ea0cb09490c5315ec68e121f33138f04090fb2b4a22da3f87a28c8626ec65a405cbb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830201c008832fefba8265aa845784184a8d64616f2d686172642d666f726ba0d8f2e0030ec6a3743815995d85546abb9dd4f3e941479bc77557503271e8a40c88d088a735fc2388faf861f85f070182ea609410000000000000000000000000000000000000080a801ba03bce709627e1c9340795f11cc866742a0b5ced2b7e2da53e0cfe6f5f1df0a77ea02df804cdb52edacc4e01d8632050101cf7de7b235d37c31b504010910ec8f1f6c0", "transactions" : [ { "data" : "0x", @@ -313,19 +313,19 @@ "extraData" : "0x64616f2d686172642d666f726b", "gasLimit" : "0x2fefba", "gasUsed" : "0x5208", - "hash" : "174c3f191f8955da5a75246f43edcbc1fde1fb0b2824dd5ac6986692763cc328", - "mixHash" : "e9ea6f80af2746d73f07a040332d0f9ce5d643b1f28c8536f549f14a3b36a272", - "nonce" : "1046883c965b5d81", + "hash" : "75fb6bea7b5262f6c59333a0031cbe96aad54b01530cd25fd0b4e500fba88e53", + "mixHash" : "f5646c4d022f1ac0a6b47e397cbf71fe5e8b4eed1166d6d4613bd8db53af31e0", + "nonce" : "5d1c3d7859173fe2", "number" : "0x09", - "parentHash" : "a8e7968fd01c207811352ab6fc86841574979a456617eb110ebd4e25b7415bcd", + "parentHash" : "b5a3da40a0c9a3289547217e6b2bdf98ec35f622fc3670ab4a78cba604243f74", "receiptTrie" : "405be8d48a642e0536283f01acfb9868e4d921a1444005e8298cb83d00f82704", "stateRoot" : "9082a0c78b99b419eed76e297c9367cd2613ac98684e211a10794599e1efd0b6", - "timestamp" : "0x578362e0", + "timestamp" : "0x57841850", "transactionsTrie" : "7dac38119a2beeb72d0f67b77bef9a4cbae22ca5c7151f1e737f9db1bf37b135", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "blocknumber" : "9", - "rlp" : "0xf9026df90206a0a8e7968fd01c207811352ab6fc86841574979a456617eb110ebd4e25b7415bcda01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a09082a0c78b99b419eed76e297c9367cd2613ac98684e211a10794599e1efd0b6a07dac38119a2beeb72d0f67b77bef9a4cbae22ca5c7151f1e737f9db1bf37b135a0405be8d48a642e0536283f01acfb9868e4d921a1444005e8298cb83d00f82704b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302020009832fefba82520884578362e08d64616f2d686172642d666f726ba0e9ea6f80af2746d73f07a040332d0f9ce5d643b1f28c8536f549f14a3b36a272881046883c965b5d81f861f85f080182ea6094100000000000000000000000000000000000000101801ba0af2bb21c6953c5c7bb966a9c09e43c52641e6e317ab738cd409a5fb9ef5e753fa010db71dc8b41e52ce746895f743c1cc1fe7ed32f17ff7935b610fcbccdc75720c0", + "rlp" : "0xf9026df90206a0b5a3da40a0c9a3289547217e6b2bdf98ec35f622fc3670ab4a78cba604243f74a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a09082a0c78b99b419eed76e297c9367cd2613ac98684e211a10794599e1efd0b6a07dac38119a2beeb72d0f67b77bef9a4cbae22ca5c7151f1e737f9db1bf37b135a0405be8d48a642e0536283f01acfb9868e4d921a1444005e8298cb83d00f82704b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302020009832fefba82520884578418508d64616f2d686172642d666f726ba0f5646c4d022f1ac0a6b47e397cbf71fe5e8b4eed1166d6d4613bd8db53af31e0885d1c3d7859173fe2f861f85f080182ea6094100000000000000000000000000000000000000101801ba0af2bb21c6953c5c7bb966a9c09e43c52641e6e317ab738cd409a5fb9ef5e753fa010db71dc8b41e52ce746895f743c1cc1fe7ed32f17ff7935b610fcbccdc75720c0", "transactions" : [ { "data" : "0x", @@ -354,19 +354,19 @@ "extraData" : "0x64616f2d686172642d666f726b", "gasLimit" : "0x2fefba", "gasUsed" : "0x5208", - "hash" : "872664b8cea7f2f8a92618e2c2f609ed8688424a211f9b51ede088523bd35fa3", - "mixHash" : "0f075e1fcf0d36cc5018bcb2f1ec03ad7cb85350fbfc3437695d8adbe0319055", - "nonce" : "fb63b58204ee99a1", + "hash" : "100b63b0e3299ab19fb63aba60f7d07c7acd3e8087aac70dcf9d25166004e041", + "mixHash" : "80a13747b86bbc91adeb95e2e375bcc4a701b52551a7a38ffa00a95a18754529", + "nonce" : "befc37a5a99c6642", "number" : "0x0a", - "parentHash" : "174c3f191f8955da5a75246f43edcbc1fde1fb0b2824dd5ac6986692763cc328", + "parentHash" : "75fb6bea7b5262f6c59333a0031cbe96aad54b01530cd25fd0b4e500fba88e53", "receiptTrie" : "7816771f20df86ba51fe1b9b124be162607d9a74753fbcec73e7fd0e4b803fc8", "stateRoot" : "14baa5da9e9e7b864d11a6ab7c75d49f3582ef61566bc06ac825894eab40dd47", - "timestamp" : "0x578362e5", + "timestamp" : "0x57841857", "transactionsTrie" : "771cef5982e1119f26a627bbeeadc21e350838157aad275b2f4a884a57e277da", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "blocknumber" : "10", - "rlp" : "0xf9026df90206a0174c3f191f8955da5a75246f43edcbc1fde1fb0b2824dd5ac6986692763cc328a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a014baa5da9e9e7b864d11a6ab7c75d49f3582ef61566bc06ac825894eab40dd47a0771cef5982e1119f26a627bbeeadc21e350838157aad275b2f4a884a57e277daa07816771f20df86ba51fe1b9b124be162607d9a74753fbcec73e7fd0e4b803fc8b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830202400a832fefba82520884578362e58d64616f2d686172642d666f726ba00f075e1fcf0d36cc5018bcb2f1ec03ad7cb85350fbfc3437695d8adbe031905588fb63b58204ee99a1f861f85f090182ea6094100000000000000000000000000000000000000101801ca0c3d783e93561599d86cbf460e153b3cb37d90478a3c47bfc08bd29563c9d849fa0100e466f7a4c6af73a9030988c63ec88ccaba460fd6a1fb1adc30b61dbdd0857c0", + "rlp" : "0xf9026df90206a075fb6bea7b5262f6c59333a0031cbe96aad54b01530cd25fd0b4e500fba88e53a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a014baa5da9e9e7b864d11a6ab7c75d49f3582ef61566bc06ac825894eab40dd47a0771cef5982e1119f26a627bbeeadc21e350838157aad275b2f4a884a57e277daa07816771f20df86ba51fe1b9b124be162607d9a74753fbcec73e7fd0e4b803fc8b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830202400a832fefba82520884578418578d64616f2d686172642d666f726ba080a13747b86bbc91adeb95e2e375bcc4a701b52551a7a38ffa00a95a1875452988befc37a5a99c6642f861f85f090182ea6094100000000000000000000000000000000000000101801ca0c3d783e93561599d86cbf460e153b3cb37d90478a3c47bfc08bd29563c9d849fa0100e466f7a4c6af73a9030988c63ec88ccaba460fd6a1fb1adc30b61dbdd0857c0", "transactions" : [ { "data" : "0x", @@ -395,19 +395,19 @@ "extraData" : "0x64616f2d686172642d666f726b", "gasLimit" : "0x2fefba", "gasUsed" : "0x5208", - "hash" : "ea29fb161cd0baa00b7ec957ffb4eec2c13f98dbdaa5cbb5352e6c315885c7d2", - "mixHash" : "f5e7f98d27237c0000ff5d35c1078056a01b07564d37768456d47bc2c97e7e3e", - "nonce" : "f4a8a19edb48f3bc", + "hash" : "d4c78a452f10b91e8304036c4bedf785c6af7eafc0804d09bd99a97d9d351047", + "mixHash" : "33f7624d4eefc93d4ae8be542be7bbb491071545d50433a9bf0bedd431a2c20f", + "nonce" : "bc754783c3b558ce", "number" : "0x0b", - "parentHash" : "872664b8cea7f2f8a92618e2c2f609ed8688424a211f9b51ede088523bd35fa3", + "parentHash" : "100b63b0e3299ab19fb63aba60f7d07c7acd3e8087aac70dcf9d25166004e041", "receiptTrie" : "76c1e3d0c78e8ddf32608b571a8bbcf6ec06ad6e4d832b1527be8bcdc9e8babc", "stateRoot" : "745349a2480a86c28aa035ce47b40f8f5045efefac899c3ed9265103427043dd", - "timestamp" : "0x578362e9", + "timestamp" : "0x5784185b", "transactionsTrie" : "10a81573cb14d5c2794e1b406e26b6d9612c888bbc98c453131bd9b06f61d7c9", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "blocknumber" : "11", - "rlp" : "0xf9026df90206a0872664b8cea7f2f8a92618e2c2f609ed8688424a211f9b51ede088523bd35fa3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0745349a2480a86c28aa035ce47b40f8f5045efefac899c3ed9265103427043dda010a81573cb14d5c2794e1b406e26b6d9612c888bbc98c453131bd9b06f61d7c9a076c1e3d0c78e8ddf32608b571a8bbcf6ec06ad6e4d832b1527be8bcdc9e8babcb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830202800b832fefba82520884578362e98d64616f2d686172642d666f726ba0f5e7f98d27237c0000ff5d35c1078056a01b07564d37768456d47bc2c97e7e3e88f4a8a19edb48f3bcf861f85f0a0182ea6094100000000000000000000000000000000000000101801ca076766ba9925c43448e1ac5c05f7583e6d3a3366eb3dc95a3489ff363b449795ca059b8da33b7aea0d60059f5c1eabce26c1e23e32f31930bff3b49eb1e94cc62a0c0", + "rlp" : "0xf9026df90206a0100b63b0e3299ab19fb63aba60f7d07c7acd3e8087aac70dcf9d25166004e041a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0745349a2480a86c28aa035ce47b40f8f5045efefac899c3ed9265103427043dda010a81573cb14d5c2794e1b406e26b6d9612c888bbc98c453131bd9b06f61d7c9a076c1e3d0c78e8ddf32608b571a8bbcf6ec06ad6e4d832b1527be8bcdc9e8babcb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830202800b832fefba825208845784185b8d64616f2d686172642d666f726ba033f7624d4eefc93d4ae8be542be7bbb491071545d50433a9bf0bedd431a2c20f88bc754783c3b558cef861f85f0a0182ea6094100000000000000000000000000000000000000101801ca076766ba9925c43448e1ac5c05f7583e6d3a3366eb3dc95a3489ff363b449795ca059b8da33b7aea0d60059f5c1eabce26c1e23e32f31930bff3b49eb1e94cc62a0c0", "transactions" : [ { "data" : "0x", @@ -436,19 +436,19 @@ "extraData" : "0x64616f2d686172642d666f726b", "gasLimit" : "0x2fefba", "gasUsed" : "0x5208", - "hash" : "dd37603315dead14fc07c82fd274016e5853ed2b74c05df832bec2eeeded5d01", - "mixHash" : "5409bef91ea0fe9b28750db667aca7b42019e99806c64850d6baf74a527c39e9", - "nonce" : "8ad88fec4eaba1bd", + "hash" : "9a44d656e43bae2658cae5f762cdcf92814be00d0970a5ef8d132e903ac46b9c", + "mixHash" : "ed2e1f031ae953c82356f176a7c1341f6f8d3bd30e7df1d92c1b58773cbe499b", + "nonce" : "34be99b812a970ba", "number" : "0x0c", - "parentHash" : "ea29fb161cd0baa00b7ec957ffb4eec2c13f98dbdaa5cbb5352e6c315885c7d2", + "parentHash" : "d4c78a452f10b91e8304036c4bedf785c6af7eafc0804d09bd99a97d9d351047", "receiptTrie" : "7cced79fcdebd96670df83f4c13f71aa9cb3dbce19df27f7f6ff8b12fef91282", "stateRoot" : "40ef6bb351314ea48ab6462f2cabcf96ee476cec1f4670919f90efb2a5956ab3", - "timestamp" : "0x578362ed", + "timestamp" : "0x57841860", "transactionsTrie" : "b7757adef51c8c3b9b0433d1a0db70fe5505e8db1848934da1c1d2c6aafc3f65", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "blocknumber" : "12", - "rlp" : "0xf9026df90206a0ea29fb161cd0baa00b7ec957ffb4eec2c13f98dbdaa5cbb5352e6c315885c7d2a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a040ef6bb351314ea48ab6462f2cabcf96ee476cec1f4670919f90efb2a5956ab3a0b7757adef51c8c3b9b0433d1a0db70fe5505e8db1848934da1c1d2c6aafc3f65a07cced79fcdebd96670df83f4c13f71aa9cb3dbce19df27f7f6ff8b12fef91282b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830202c00c832fefba82520884578362ed8d64616f2d686172642d666f726ba05409bef91ea0fe9b28750db667aca7b42019e99806c64850d6baf74a527c39e9888ad88fec4eaba1bdf861f85f0b0182ea6094100000000000000000000000000000000000000101801ca085939abfa5d1d2dd8e1bde2655e44236d8e1940a075000301d6deab472ccd680a078d2ae659006c58f9ccc5af29955f7439e48b30b2efe64abdd001165364faa9ac0", + "rlp" : "0xf9026df90206a0d4c78a452f10b91e8304036c4bedf785c6af7eafc0804d09bd99a97d9d351047a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a040ef6bb351314ea48ab6462f2cabcf96ee476cec1f4670919f90efb2a5956ab3a0b7757adef51c8c3b9b0433d1a0db70fe5505e8db1848934da1c1d2c6aafc3f65a07cced79fcdebd96670df83f4c13f71aa9cb3dbce19df27f7f6ff8b12fef91282b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830202c00c832fefba82520884578418608d64616f2d686172642d666f726ba0ed2e1f031ae953c82356f176a7c1341f6f8d3bd30e7df1d92c1b58773cbe499b8834be99b812a970baf861f85f0b0182ea6094100000000000000000000000000000000000000101801ca085939abfa5d1d2dd8e1bde2655e44236d8e1940a075000301d6deab472ccd680a078d2ae659006c58f9ccc5af29955f7439e48b30b2efe64abdd001165364faa9ac0", "transactions" : [ { "data" : "0x", @@ -477,19 +477,19 @@ "extraData" : "0x64616f2d686172642d666f726b", "gasLimit" : "0x2fefba", "gasUsed" : "0x5208", - "hash" : "c481c38537eaa8cdc85f0ee37cc714b2016cdf16bfa238f2c2971be9ecfd6250", - "mixHash" : "0d93ec85a64803d79b7af732d1c343c0a686d699c7878761db0c119d3c7da9f9", - "nonce" : "5ba262dce70d6a1e", + "hash" : "b8850efdb301eb5c7447ce128d13a57b41fe96e315add511e568153b3c6b63fb", + "mixHash" : "43d22de0da39f2221c0f432a514c23bf92e8fad5a1c125f03e601f2a098825a8", + "nonce" : "26641ca64753ace9", "number" : "0x0d", - "parentHash" : "dd37603315dead14fc07c82fd274016e5853ed2b74c05df832bec2eeeded5d01", + "parentHash" : "9a44d656e43bae2658cae5f762cdcf92814be00d0970a5ef8d132e903ac46b9c", "receiptTrie" : "27206e196468a999013a22f5ad0a2747cba1311e0398bb601fda5570045753b8", "stateRoot" : "be645d0bc31a6df9f0df1ff766d651e5253eeaa750c9d6eea98349a4c2b26679", - "timestamp" : "0x578362f1", + "timestamp" : "0x57841865", "transactionsTrie" : "38b9ac6344a8e2cdd0c0b598f70f21997ab1b39d3ecb2f7a8c7af93e300e0398", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "blocknumber" : "13", - "rlp" : "0xf9026df90206a0dd37603315dead14fc07c82fd274016e5853ed2b74c05df832bec2eeeded5d01a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0be645d0bc31a6df9f0df1ff766d651e5253eeaa750c9d6eea98349a4c2b26679a038b9ac6344a8e2cdd0c0b598f70f21997ab1b39d3ecb2f7a8c7af93e300e0398a027206e196468a999013a22f5ad0a2747cba1311e0398bb601fda5570045753b8b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830203000d832fefba82520884578362f18d64616f2d686172642d666f726ba00d93ec85a64803d79b7af732d1c343c0a686d699c7878761db0c119d3c7da9f9885ba262dce70d6a1ef861f85f0c0182ea6094100000000000000000000000000000000000000101801ca00bb5ae599741966cbd02d6080937bd1f247dfaa266e19891228a4fbfc0c85226a07a4f56371aa5b685bc10d64e180e24850ae18b0fcc675e7d187f877b8d9b1bf6c0", + "rlp" : "0xf9026df90206a09a44d656e43bae2658cae5f762cdcf92814be00d0970a5ef8d132e903ac46b9ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0be645d0bc31a6df9f0df1ff766d651e5253eeaa750c9d6eea98349a4c2b26679a038b9ac6344a8e2cdd0c0b598f70f21997ab1b39d3ecb2f7a8c7af93e300e0398a027206e196468a999013a22f5ad0a2747cba1311e0398bb601fda5570045753b8b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830203000d832fefba82520884578418658d64616f2d686172642d666f726ba043d22de0da39f2221c0f432a514c23bf92e8fad5a1c125f03e601f2a098825a88826641ca64753ace9f861f85f0c0182ea6094100000000000000000000000000000000000000101801ca00bb5ae599741966cbd02d6080937bd1f247dfaa266e19891228a4fbfc0c85226a07a4f56371aa5b685bc10d64e180e24850ae18b0fcc675e7d187f877b8d9b1bf6c0", "transactions" : [ { "data" : "0x", @@ -518,19 +518,19 @@ "extraData" : "0x64616f2d686172642d666f726b", "gasLimit" : "0x2fefba", "gasUsed" : "0x5208", - "hash" : "b14471504858a942fbfd5df9cb31e47796a86ff02bb42e4aea45982b2f8af5c4", - "mixHash" : "e786f31b72887e787326f12aff5c5af35bd9e88ce28743117df384467687ab3d", - "nonce" : "4dd28afbb24464cc", + "hash" : "483ef5a4d87e34de0395aab47209e1dad3d8856cd1610fcfa0d89c7588ca9be6", + "mixHash" : "00a3e3d8ad7aa53abb76d5d3fb82e4ba90f965c42df18282d4c48b28625e8637", + "nonce" : "1f177ba198c06d71", "number" : "0x0e", - "parentHash" : "c481c38537eaa8cdc85f0ee37cc714b2016cdf16bfa238f2c2971be9ecfd6250", + "parentHash" : "b8850efdb301eb5c7447ce128d13a57b41fe96e315add511e568153b3c6b63fb", "receiptTrie" : "3219cbaae09e7a53589bfa9a65ef4dd7e37b8d631a65b3dfbcbba13bdc3cdb05", "stateRoot" : "ffcc7e2a5c78d83c28d38494c8f432971d60fc23e8461c400880e59c9f22f2e6", - "timestamp" : "0x578362f6", + "timestamp" : "0x5784186d", "transactionsTrie" : "4b6ff42fd8884c83615bf62830df849b18901c07615aafef9aaf16d33f807349", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "blocknumber" : "14", - "rlp" : "0xf9026df90206a0c481c38537eaa8cdc85f0ee37cc714b2016cdf16bfa238f2c2971be9ecfd6250a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0ffcc7e2a5c78d83c28d38494c8f432971d60fc23e8461c400880e59c9f22f2e6a04b6ff42fd8884c83615bf62830df849b18901c07615aafef9aaf16d33f807349a03219cbaae09e7a53589bfa9a65ef4dd7e37b8d631a65b3dfbcbba13bdc3cdb05b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830203400e832fefba82520884578362f68d64616f2d686172642d666f726ba0e786f31b72887e787326f12aff5c5af35bd9e88ce28743117df384467687ab3d884dd28afbb24464ccf861f85f0d0182ea6094100000000000000000000000000000000000000101801ba0db8f9cd690ad1f6481c09a5445a4185d4fcfdeed76f7ba403d303985c1abaa4ca01ed5f2e9fd9a021103acc910cbefcdaa82d2afd44205a8f681f0c17ebf2da192c0", + "rlp" : "0xf9026df90206a0b8850efdb301eb5c7447ce128d13a57b41fe96e315add511e568153b3c6b63fba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0ffcc7e2a5c78d83c28d38494c8f432971d60fc23e8461c400880e59c9f22f2e6a04b6ff42fd8884c83615bf62830df849b18901c07615aafef9aaf16d33f807349a03219cbaae09e7a53589bfa9a65ef4dd7e37b8d631a65b3dfbcbba13bdc3cdb05b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830203400e832fefba825208845784186d8d64616f2d686172642d666f726ba000a3e3d8ad7aa53abb76d5d3fb82e4ba90f965c42df18282d4c48b28625e8637881f177ba198c06d71f861f85f0d0182ea6094100000000000000000000000000000000000000101801ba0db8f9cd690ad1f6481c09a5445a4185d4fcfdeed76f7ba403d303985c1abaa4ca01ed5f2e9fd9a021103acc910cbefcdaa82d2afd44205a8f681f0c17ebf2da192c0", "transactions" : [ { "data" : "0x", @@ -559,19 +559,19 @@ "extraData" : "0x64616f2d686172642d666f726b", "gasLimit" : "0x2fefba", "gasUsed" : "0x5208", - "hash" : "9849305deb139e14edc8a2daf9c69ff4bde43c90d1a9fc4be74d60ca856de52c", - "mixHash" : "0b38e08a130828a9b42499a61955a1f05f29b3c54721c9000108681b24df1bbe", - "nonce" : "a903296b20afc6c1", + "hash" : "2db651651bc9b9de8ee2fde8f3010d00105228ec8813f64dc822b2888fec3f1b", + "mixHash" : "3a9f5ef26ddbcd73f204d721be133e41aaf51a17fa5e66eb88f618cb28cb32ca", + "nonce" : "35f2bfb5c5240df8", "number" : "0x0f", - "parentHash" : "b14471504858a942fbfd5df9cb31e47796a86ff02bb42e4aea45982b2f8af5c4", + "parentHash" : "483ef5a4d87e34de0395aab47209e1dad3d8856cd1610fcfa0d89c7588ca9be6", "receiptTrie" : "3f8e538224b10251d17ea50eef083205f714f89dd10b1338df828c2fd14da074", "stateRoot" : "da5a9eb135d2a19f28da52eda0fcff26d26326dac4c622d6b2f0d7a6873ab27c", - "timestamp" : "0x578362fb", + "timestamp" : "0x57841873", "transactionsTrie" : "ce025c4f49fea19fbb8b91252f03fd36d2ff6e9e8817c701452992098534abda", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "blocknumber" : "15", - "rlp" : "0xf9026df90206a0b14471504858a942fbfd5df9cb31e47796a86ff02bb42e4aea45982b2f8af5c4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0da5a9eb135d2a19f28da52eda0fcff26d26326dac4c622d6b2f0d7a6873ab27ca0ce025c4f49fea19fbb8b91252f03fd36d2ff6e9e8817c701452992098534abdaa03f8e538224b10251d17ea50eef083205f714f89dd10b1338df828c2fd14da074b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830203800f832fefba82520884578362fb8d64616f2d686172642d666f726ba00b38e08a130828a9b42499a61955a1f05f29b3c54721c9000108681b24df1bbe88a903296b20afc6c1f861f85f0e0182ea6094100000000000000000000000000000000000000101801ca0af8f37a08239d55138f8b92680c682d4118da357c79d6a6b148a6dcce4d961d1a057bf5b29fc32419091bd8e170fed46703b7a2640be0ca91d6903d75c932be160c0", + "rlp" : "0xf9026df90206a0483ef5a4d87e34de0395aab47209e1dad3d8856cd1610fcfa0d89c7588ca9be6a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0da5a9eb135d2a19f28da52eda0fcff26d26326dac4c622d6b2f0d7a6873ab27ca0ce025c4f49fea19fbb8b91252f03fd36d2ff6e9e8817c701452992098534abdaa03f8e538224b10251d17ea50eef083205f714f89dd10b1338df828c2fd14da074b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830203800f832fefba82520884578418738d64616f2d686172642d666f726ba03a9f5ef26ddbcd73f204d721be133e41aaf51a17fa5e66eb88f618cb28cb32ca8835f2bfb5c5240df8f861f85f0e0182ea6094100000000000000000000000000000000000000101801ca0af8f37a08239d55138f8b92680c682d4118da357c79d6a6b148a6dcce4d961d1a057bf5b29fc32419091bd8e170fed46703b7a2640be0ca91d6903d75c932be160c0", "transactions" : [ { "data" : "0x", @@ -600,19 +600,19 @@ "extraData" : "0x64616f2d686172642d666f726b", "gasLimit" : "0x2fefba", "gasUsed" : "0x5208", - "hash" : "6d29b0a6632f26fa1e689965087a09c739771dc469b9c49bc744d6207c9e2fed", - "mixHash" : "7ab225e313b7f890caaf575528bb16189826c5a1c9589e7ad5635d123886b6a5", - "nonce" : "682109d020f5de8a", + "hash" : "5f540caeaf2f3c961294d8860d2ab017812a389ab6cc3f2f14e47eebd01d00b1", + "mixHash" : "d91a6678bb92661c4b93ceac8fb6333526d8c068205eecd7d4e9e676aaaaa92c", + "nonce" : "41d6873a13454eeb", "number" : "0x10", - "parentHash" : "9849305deb139e14edc8a2daf9c69ff4bde43c90d1a9fc4be74d60ca856de52c", + "parentHash" : "2db651651bc9b9de8ee2fde8f3010d00105228ec8813f64dc822b2888fec3f1b", "receiptTrie" : "cb5e5d42756e48dfe3c93e5656cb7367090c1406ddb6a47f71058cb96de158f0", "stateRoot" : "7d9e18f987e1e0f6244158d2c75dc881e28cdc3b54da6ad3d6743e630d11674f", - "timestamp" : "0x57836301", + "timestamp" : "0x57841878", "transactionsTrie" : "6f2130deb628c7742532339d5b5f1539f9579edcab16996b3b05836a6883073f", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "blocknumber" : "16", - "rlp" : "0xf9026df90206a09849305deb139e14edc8a2daf9c69ff4bde43c90d1a9fc4be74d60ca856de52ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a07d9e18f987e1e0f6244158d2c75dc881e28cdc3b54da6ad3d6743e630d11674fa06f2130deb628c7742532339d5b5f1539f9579edcab16996b3b05836a6883073fa0cb5e5d42756e48dfe3c93e5656cb7367090c1406ddb6a47f71058cb96de158f0b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830203c010832fefba82520884578363018d64616f2d686172642d666f726ba07ab225e313b7f890caaf575528bb16189826c5a1c9589e7ad5635d123886b6a588682109d020f5de8af861f85f0f0182ea6094100000000000000000000000000000000000000101801ba040a5467881266422758d59ae66fb3d2511f0131038b0e43abc397d01527fd61ea0172ed4b9c3cf917bf071cb6cc716c4f6754949ea94888d4bb9657eac98fd2c10c0", + "rlp" : "0xf9026df90206a02db651651bc9b9de8ee2fde8f3010d00105228ec8813f64dc822b2888fec3f1ba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a07d9e18f987e1e0f6244158d2c75dc881e28cdc3b54da6ad3d6743e630d11674fa06f2130deb628c7742532339d5b5f1539f9579edcab16996b3b05836a6883073fa0cb5e5d42756e48dfe3c93e5656cb7367090c1406ddb6a47f71058cb96de158f0b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830203c010832fefba82520884578418788d64616f2d686172642d666f726ba0d91a6678bb92661c4b93ceac8fb6333526d8c068205eecd7d4e9e676aaaaa92c8841d6873a13454eebf861f85f0f0182ea6094100000000000000000000000000000000000000101801ba040a5467881266422758d59ae66fb3d2511f0131038b0e43abc397d01527fd61ea0172ed4b9c3cf917bf071cb6cc716c4f6754949ea94888d4bb9657eac98fd2c10c0", "transactions" : [ { "data" : "0x", @@ -641,19 +641,19 @@ "extraData" : "0x64616f2d686172642d666f726b", "gasLimit" : "0x2fefba", "gasUsed" : "0x5208", - "hash" : "f05375344257478b69eaf22bb6ee010daac8e37077c20946b2cd673e4caf4897", - "mixHash" : "5aca39367567bf655adcbed51353fda57286a67a4ad09d8a5e2be84522727744", - "nonce" : "e14722f02bf5d663", + "hash" : "80df908d16953ad446881da97171b51d48bbb364d5281d74cd264f5906174a2b", + "mixHash" : "df9d86c5d0211102f0d2909b56c12e0e3604ec6e4a212f5db3e31eadb4588c87", + "nonce" : "c9b346aea491dfd5", "number" : "0x11", - "parentHash" : "6d29b0a6632f26fa1e689965087a09c739771dc469b9c49bc744d6207c9e2fed", + "parentHash" : "5f540caeaf2f3c961294d8860d2ab017812a389ab6cc3f2f14e47eebd01d00b1", "receiptTrie" : "eea278a71391069b01fd9759bafca57b149bc9d6dc212bdddaa2f378e0ecfe95", "stateRoot" : "c0f43306d07073f10d93dcf01bd8dada0eceedb213eed501801a13f2b205e333", - "timestamp" : "0x57836307", + "timestamp" : "0x5784187d", "transactionsTrie" : "316f3430ee504cbaa58cec2ce451de2fc9e0f1e7f99b16b33f69ab3ca93130be", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "blocknumber" : "17", - "rlp" : "0xf9026df90206a06d29b0a6632f26fa1e689965087a09c739771dc469b9c49bc744d6207c9e2feda01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0c0f43306d07073f10d93dcf01bd8dada0eceedb213eed501801a13f2b205e333a0316f3430ee504cbaa58cec2ce451de2fc9e0f1e7f99b16b33f69ab3ca93130bea0eea278a71391069b01fd9759bafca57b149bc9d6dc212bdddaa2f378e0ecfe95b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302040011832fefba82520884578363078d64616f2d686172642d666f726ba05aca39367567bf655adcbed51353fda57286a67a4ad09d8a5e2be8452272774488e14722f02bf5d663f861f85f100182ea6094100000000000000000000000000000000000000101801ba0d7933ba406ea332cdec2d673bbf5789c34a43224629c220bd0ac2c9d81c7b094a05e0a096cbe3bdc9047b18de6be4822165c669bddf712456567dc525547059ff8c0", + "rlp" : "0xf9026df90206a05f540caeaf2f3c961294d8860d2ab017812a389ab6cc3f2f14e47eebd01d00b1a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0c0f43306d07073f10d93dcf01bd8dada0eceedb213eed501801a13f2b205e333a0316f3430ee504cbaa58cec2ce451de2fc9e0f1e7f99b16b33f69ab3ca93130bea0eea278a71391069b01fd9759bafca57b149bc9d6dc212bdddaa2f378e0ecfe95b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302040011832fefba825208845784187d8d64616f2d686172642d666f726ba0df9d86c5d0211102f0d2909b56c12e0e3604ec6e4a212f5db3e31eadb4588c8788c9b346aea491dfd5f861f85f100182ea6094100000000000000000000000000000000000000101801ba0d7933ba406ea332cdec2d673bbf5789c34a43224629c220bd0ac2c9d81c7b094a05e0a096cbe3bdc9047b18de6be4822165c669bddf712456567dc525547059ff8c0", "transactions" : [ { "data" : "0x", @@ -690,7 +690,7 @@ "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "genesisRLP" : "0xf901fcf901f7a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a04eda2e603f5b9ad6e92c0cba602372d0a0cd2e776a17b61a7a20225ffa7643d7a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000080832fefd8808454c98c8142a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421880102030405060708c0c0", - "lastblockhash" : "f05375344257478b69eaf22bb6ee010daac8e37077c20946b2cd673e4caf4897", + "lastblockhash" : "80df908d16953ad446881da97171b51d48bbb364d5281d74cd264f5906174a2b", "postState" : { "0c243ebe6a031753dc0dd850acf422844a3efb76" : { "balance" : "0x0a", @@ -1082,7 +1082,7 @@ } } }, - "DaoTransactions_EmptyTransaction" : { + "DaoTransactions_EmptyTransactionAndForkBlocksAhead" : { "blocks" : [ { "blockHeader" : { @@ -1092,19 +1092,19 @@ "extraData" : "0x", "gasLimit" : "0x2fefba", "gasUsed" : "0x5208", - "hash" : "5b0edda940d3516661fb973d9e19d092b4a394dc4d87874bdcc5e98078213350", - "mixHash" : "a639b3eb62e9e9655578c1da80a0392f0193b7e2afec23f91b1d8436ca7deace", - "nonce" : "97fa42f0f9ee028e", + "hash" : "937efbc24fab15f0dd8240830cd829997bc29516803f6dfac950b441f2821827", + "mixHash" : "029cb30edc14a5d27511f6e26586b35cdc9fcc65d8fbe0f5d4b6067cc29c2736", + "nonce" : "ffbe57d4c0758b04", "number" : "0x01", "parentHash" : "eb310def4877fc94c3945bdabd9ba6bbafff1c74944b2bd74a4ac01f0868804c", "receiptTrie" : "63e81aadc86aed2ebe147fd86db74d8fbe91a938af0521be549669246e607443", "stateRoot" : "421450c5fcaa516f03635983f0c9d936574721033424eac5e6d71c8fa14b766f", - "timestamp" : "0x57836309", + "timestamp" : "0x57841881", "transactionsTrie" : "ac81275d7a81a720240146377982939179218535bfcfa9469c8bdd3e264ef179", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "blocknumber" : "1", - "rlp" : "0xf9024cf901f9a0eb310def4877fc94c3945bdabd9ba6bbafff1c74944b2bd74a4ac01f0868804ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0421450c5fcaa516f03635983f0c9d936574721033424eac5e6d71c8fa14b766fa0ac81275d7a81a720240146377982939179218535bfcfa9469c8bdd3e264ef179a063e81aadc86aed2ebe147fd86db74d8fbe91a938af0521be549669246e607443b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000001832fefba825208845783630980a0a639b3eb62e9e9655578c1da80a0392f0193b7e2afec23f91b1d8436ca7deace8897fa42f0f9ee028ef84df84b8001827530800a801ca057cb46c0b702929c4fd4127b2370f28a7aeeaa65509699e58eedf7692090a0a9a05ba7c83d99be6a9bca0c81947023ba3b5f2162516d82d0757bf8004f3e9bc03ac0", + "rlp" : "0xf9024cf901f9a0eb310def4877fc94c3945bdabd9ba6bbafff1c74944b2bd74a4ac01f0868804ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0421450c5fcaa516f03635983f0c9d936574721033424eac5e6d71c8fa14b766fa0ac81275d7a81a720240146377982939179218535bfcfa9469c8bdd3e264ef179a063e81aadc86aed2ebe147fd86db74d8fbe91a938af0521be549669246e607443b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000001832fefba825208845784188180a0029cb30edc14a5d27511f6e26586b35cdc9fcc65d8fbe0f5d4b6067cc29c273688ffbe57d4c0758b04f84df84b8001827530800a801ca057cb46c0b702929c4fd4127b2370f28a7aeeaa65509699e58eedf7692090a0a9a05ba7c83d99be6a9bca0c81947023ba3b5f2162516d82d0757bf8004f3e9bc03ac0", "transactions" : [ { "data" : "0x", @@ -1129,19 +1129,19 @@ "extraData" : "0x", "gasLimit" : "0x2fefba", "gasUsed" : "0x5208", - "hash" : "ae62864a01c26f47b77ac9235ad2dc1db5740c82a53e625f6becca64317b377b", - "mixHash" : "b17c97168dc8d478616303a2c09169dffdf757126db3db3c6df67d16f7677a63", - "nonce" : "d4170412ca50a625", + "hash" : "273e426aad419e2e52632faf3ebf0c5c5ae91545e3c4afe0ad245bf8ce01c5d2", + "mixHash" : "16de5d01c0070ace027223feb02c75f7c53f7c456225e6102ca0797e735054dd", + "nonce" : "9e1ddcd0bbf5714e", "number" : "0x02", - "parentHash" : "5b0edda940d3516661fb973d9e19d092b4a394dc4d87874bdcc5e98078213350", + "parentHash" : "937efbc24fab15f0dd8240830cd829997bc29516803f6dfac950b441f2821827", "receiptTrie" : "b41287e7f7e5d2983862a73e54c86ec144ecf835096984770f6bf485188268b8", "stateRoot" : "1e31d34b22a8d2fd9893bb58fa80e6ca4561320eed43776c295acca93721847c", - "timestamp" : "0x5783630c", + "timestamp" : "0x57841884", "transactionsTrie" : "76c7a0ce7644661f276c76fb9a82eaee879d0642cf4ed244fc10afc02c646abf", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "blocknumber" : "2", - "rlp" : "0xf9024cf901f9a05b0edda940d3516661fb973d9e19d092b4a394dc4d87874bdcc5e98078213350a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a01e31d34b22a8d2fd9893bb58fa80e6ca4561320eed43776c295acca93721847ca076c7a0ce7644661f276c76fb9a82eaee879d0642cf4ed244fc10afc02c646abfa0b41287e7f7e5d2983862a73e54c86ec144ecf835096984770f6bf485188268b8b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302004002832fefba825208845783630c80a0b17c97168dc8d478616303a2c09169dffdf757126db3db3c6df67d16f7677a6388d4170412ca50a625f84df84b0101827530800a801ca0bb6e3cf3f281af13ef1393d7052b03cab367079a9eb71aa829ec72b231a60e1fa04bcfe1da53f26bb95806d38e9f42fef262aaaf5191e16ec473a695c8978a0b05c0", + "rlp" : "0xf9024cf901f9a0937efbc24fab15f0dd8240830cd829997bc29516803f6dfac950b441f2821827a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a01e31d34b22a8d2fd9893bb58fa80e6ca4561320eed43776c295acca93721847ca076c7a0ce7644661f276c76fb9a82eaee879d0642cf4ed244fc10afc02c646abfa0b41287e7f7e5d2983862a73e54c86ec144ecf835096984770f6bf485188268b8b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302004002832fefba825208845784188480a016de5d01c0070ace027223feb02c75f7c53f7c456225e6102ca0797e735054dd889e1ddcd0bbf5714ef84df84b0101827530800a801ca0bb6e3cf3f281af13ef1393d7052b03cab367079a9eb71aa829ec72b231a60e1fa04bcfe1da53f26bb95806d38e9f42fef262aaaf5191e16ec473a695c8978a0b05c0", "transactions" : [ { "data" : "0x", @@ -1166,19 +1166,19 @@ "extraData" : "0x", "gasLimit" : "0x2fefba", "gasUsed" : "0x5208", - "hash" : "44220b4a438fa769755e99320bebe37fc2e019c919fd741508b34d0ef9eb8445", - "mixHash" : "d2c22cf2fdcd7c91d4d4870dd9f36a6ff696440cd839b9e9bae1137596385710", - "nonce" : "18effd2ae4b7e5b8", + "hash" : "ef571b4f2c09362d41b8e895a66c1833790821efc6d7a6007f0c6b05d74f54f3", + "mixHash" : "8749f616289bd7d0d2c800a744d9f01e84b46c69773e513d75deaae814158a11", + "nonce" : "5aba904fb7f5b3a4", "number" : "0x03", - "parentHash" : "ae62864a01c26f47b77ac9235ad2dc1db5740c82a53e625f6becca64317b377b", + "parentHash" : "273e426aad419e2e52632faf3ebf0c5c5ae91545e3c4afe0ad245bf8ce01c5d2", "receiptTrie" : "12f61177f6c2cebe14df5474c8b8c1f8f47f4ea8fff7f8b22b7aa8a4156581c8", "stateRoot" : "587518607d6c98344439896e7f39111d76a8aac09b70d624e237da6fa29bbc44", - "timestamp" : "0x5783630d", + "timestamp" : "0x57841886", "transactionsTrie" : "3798aa164b61e27b93484c76a5f319bd93c808dc78ef31cf8b93f4e1b248ca2c", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "blocknumber" : "3", - "rlp" : "0xf9024cf901f9a0ae62864a01c26f47b77ac9235ad2dc1db5740c82a53e625f6becca64317b377ba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0587518607d6c98344439896e7f39111d76a8aac09b70d624e237da6fa29bbc44a03798aa164b61e27b93484c76a5f319bd93c808dc78ef31cf8b93f4e1b248ca2ca012f61177f6c2cebe14df5474c8b8c1f8f47f4ea8fff7f8b22b7aa8a4156581c8b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302008003832fefba825208845783630d80a0d2c22cf2fdcd7c91d4d4870dd9f36a6ff696440cd839b9e9bae11375963857108818effd2ae4b7e5b8f84df84b0201827530800a801ca0f6d884cae1f86bdff1281e95e416089c544a4a5578a75d5e8ad76118e341b055a075b7d88985ed5acd61f30c9f9570c6c33bb92f3ad1a32b86a0747817fbc5ededc0", + "rlp" : "0xf9024cf901f9a0273e426aad419e2e52632faf3ebf0c5c5ae91545e3c4afe0ad245bf8ce01c5d2a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0587518607d6c98344439896e7f39111d76a8aac09b70d624e237da6fa29bbc44a03798aa164b61e27b93484c76a5f319bd93c808dc78ef31cf8b93f4e1b248ca2ca012f61177f6c2cebe14df5474c8b8c1f8f47f4ea8fff7f8b22b7aa8a4156581c8b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302008003832fefba825208845784188680a08749f616289bd7d0d2c800a744d9f01e84b46c69773e513d75deaae814158a11885aba904fb7f5b3a4f84df84b0201827530800a801ca0f6d884cae1f86bdff1281e95e416089c544a4a5578a75d5e8ad76118e341b055a075b7d88985ed5acd61f30c9f9570c6c33bb92f3ad1a32b86a0747817fbc5ededc0", "transactions" : [ { "data" : "0x", @@ -1203,19 +1203,19 @@ "extraData" : "0x", "gasLimit" : "0x2fefba", "gasUsed" : "0x5208", - "hash" : "0aefb5c5a7ec080c970350d9583090b714d37bf95c0a6e2e02dbc1002a5b30b5", - "mixHash" : "023bed20cb52812ce526a57786b78fb62c51f5da5a3bf45ee96dd6e7eb448199", - "nonce" : "7c8f2986da78a3bd", + "hash" : "bc0b83cc861213d619f8c519d91e0bc4c265b7ad28bb9b466406abbb5e570731", + "mixHash" : "c17cdf1351527cbb80c12d2317b0301146be41b12a4bd19203d5d9dd2d8881a6", + "nonce" : "9921b6ed78a9f3cc", "number" : "0x04", - "parentHash" : "44220b4a438fa769755e99320bebe37fc2e019c919fd741508b34d0ef9eb8445", + "parentHash" : "ef571b4f2c09362d41b8e895a66c1833790821efc6d7a6007f0c6b05d74f54f3", "receiptTrie" : "4346f81bc8c58aa684049309decc863c93cd6cdc84c592b62bd1439eee3636ac", "stateRoot" : "c8ba761363f3cb1958f01fd55b864bcba7f33324ba4f95e60fc9e48d9ba6777a", - "timestamp" : "0x57836310", + "timestamp" : "0x57841888", "transactionsTrie" : "4cc1b34b3a9d29bf69842a54e1c48bc97afc433883f66d2c59287f118c9c3c2c", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "blocknumber" : "4", - "rlp" : "0xf9024cf901f9a044220b4a438fa769755e99320bebe37fc2e019c919fd741508b34d0ef9eb8445a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0c8ba761363f3cb1958f01fd55b864bcba7f33324ba4f95e60fc9e48d9ba6777aa04cc1b34b3a9d29bf69842a54e1c48bc97afc433883f66d2c59287f118c9c3c2ca04346f81bc8c58aa684049309decc863c93cd6cdc84c592b62bd1439eee3636acb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200c004832fefba825208845783631080a0023bed20cb52812ce526a57786b78fb62c51f5da5a3bf45ee96dd6e7eb448199887c8f2986da78a3bdf84df84b0301827530800a801ca0753ee5d896db8d87fe850e7935418587277cd9c010dfaaf7dd09b0a2e73785dca066deb3c241d532c7b880ae7a9a311ee7a92ef1c5e4e2bf3307990a2881bc13b0c0", + "rlp" : "0xf9024cf901f9a0ef571b4f2c09362d41b8e895a66c1833790821efc6d7a6007f0c6b05d74f54f3a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0c8ba761363f3cb1958f01fd55b864bcba7f33324ba4f95e60fc9e48d9ba6777aa04cc1b34b3a9d29bf69842a54e1c48bc97afc433883f66d2c59287f118c9c3c2ca04346f81bc8c58aa684049309decc863c93cd6cdc84c592b62bd1439eee3636acb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200c004832fefba825208845784188880a0c17cdf1351527cbb80c12d2317b0301146be41b12a4bd19203d5d9dd2d8881a6889921b6ed78a9f3ccf84df84b0301827530800a801ca0753ee5d896db8d87fe850e7935418587277cd9c010dfaaf7dd09b0a2e73785dca066deb3c241d532c7b880ae7a9a311ee7a92ef1c5e4e2bf3307990a2881bc13b0c0", "transactions" : [ { "data" : "0x", @@ -1240,19 +1240,19 @@ "extraData" : "0x", "gasLimit" : "0x2fefba", "gasUsed" : "0xcf08", - "hash" : "c1a27ab42a9d209533699cf0cb3f7d9387d748789c9e4b83861d6eca9d344c27", - "mixHash" : "70a51ab9792974a9cdc257e272b6893f45e710fd73403312d51184e529a82ec8", - "nonce" : "e3ef9bdbb00719d9", + "hash" : "6329ec33ae4921ac483119c459d9b433c988ecbf1dab47a42f04b7fa460a4ac1", + "mixHash" : "79b2376a8bb88ec4b89dfc2c8d64316d958b43592f2792801e4de93fbcc682da", + "nonce" : "67d3fb68ffa629d2", "number" : "0x05", - "parentHash" : "0aefb5c5a7ec080c970350d9583090b714d37bf95c0a6e2e02dbc1002a5b30b5", + "parentHash" : "bc0b83cc861213d619f8c519d91e0bc4c265b7ad28bb9b466406abbb5e570731", "receiptTrie" : "49f411805d9b0ace02b56752bf40396c5505bb7ced5f174abf02a20b623982c0", "stateRoot" : "8045027de50cc67c31daed085a6e72311e4f931606c6caa9f85bfc34009b3d00", - "timestamp" : "0x57836312", + "timestamp" : "0x5784188a", "transactionsTrie" : "165af780d27795ebc80c27759d3d949a9c4b05d35fcc7e9d3da8be357f5340cd", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "blocknumber" : "5", - "rlp" : "0xf9024cf901f9a00aefb5c5a7ec080c970350d9583090b714d37bf95c0a6e2e02dbc1002a5b30b5a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a08045027de50cc67c31daed085a6e72311e4f931606c6caa9f85bfc34009b3d00a0165af780d27795ebc80c27759d3d949a9c4b05d35fcc7e9d3da8be357f5340cda049f411805d9b0ace02b56752bf40396c5505bb7ced5f174abf02a20b623982c0b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302010005832fefba82cf08845783631280a070a51ab9792974a9cdc257e272b6893f45e710fd73403312d51184e529a82ec888e3ef9bdbb00719d9f84df84b040182ea60800a801ba0cb1400f01459519ac3dc0426c6d7f95641dc6a7b8008069c9dfbe4f94b167169a07445362aadae8c25e4f0b494ad553bfc652bf34fb2ed0ccbf9a6b089c2b09f62c0", + "rlp" : "0xf9024cf901f9a0bc0b83cc861213d619f8c519d91e0bc4c265b7ad28bb9b466406abbb5e570731a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a08045027de50cc67c31daed085a6e72311e4f931606c6caa9f85bfc34009b3d00a0165af780d27795ebc80c27759d3d949a9c4b05d35fcc7e9d3da8be357f5340cda049f411805d9b0ace02b56752bf40396c5505bb7ced5f174abf02a20b623982c0b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302010005832fefba82cf08845784188a80a079b2376a8bb88ec4b89dfc2c8d64316d958b43592f2792801e4de93fbcc682da8867d3fb68ffa629d2f84df84b040182ea60800a801ba0cb1400f01459519ac3dc0426c6d7f95641dc6a7b8008069c9dfbe4f94b167169a07445362aadae8c25e4f0b494ad553bfc652bf34fb2ed0ccbf9a6b089c2b09f62c0", "transactions" : [ { "data" : "0x", @@ -1277,19 +1277,19 @@ "extraData" : "0x", "gasLimit" : "0x2fefba", "gasUsed" : "0xcf08", - "hash" : "23ee03d1084a13984fe604e7ea070c6d907db16960a3835ef57d1baa16689d4f", - "mixHash" : "fac0b79165a4c5531f2f26a3d77a823e8853298fd9eb09436ab380323c3b1f9b", - "nonce" : "ce6bf09522313f40", + "hash" : "41e24f30308598382173973762075d8f518032f6a9193634c756d2c3bc6ee50b", + "mixHash" : "f008142ef350d111d19f370d7fb12836c5154726174d9931b9afcd3d9d2855b8", + "nonce" : "9a43b5bf61121f7a", "number" : "0x06", - "parentHash" : "c1a27ab42a9d209533699cf0cb3f7d9387d748789c9e4b83861d6eca9d344c27", + "parentHash" : "6329ec33ae4921ac483119c459d9b433c988ecbf1dab47a42f04b7fa460a4ac1", "receiptTrie" : "5e40223bcc6a700b1d32c94ec5b7ed325345b400cf06913d4a1538d80dde375d", "stateRoot" : "293f78bf5ea7fbe0c13c88d246c5d84bf917dbf39e35722ae601ea85543dee9d", - "timestamp" : "0x57836314", + "timestamp" : "0x5784188d", "transactionsTrie" : "ef009c3c274a522a6e2ca98232fffff747bdfab79189be3e2b5e5dc54e2a51be", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "blocknumber" : "6", - "rlp" : "0xf9024cf901f9a0c1a27ab42a9d209533699cf0cb3f7d9387d748789c9e4b83861d6eca9d344c27a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0293f78bf5ea7fbe0c13c88d246c5d84bf917dbf39e35722ae601ea85543dee9da0ef009c3c274a522a6e2ca98232fffff747bdfab79189be3e2b5e5dc54e2a51bea05e40223bcc6a700b1d32c94ec5b7ed325345b400cf06913d4a1538d80dde375db90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302014006832fefba82cf08845783631480a0fac0b79165a4c5531f2f26a3d77a823e8853298fd9eb09436ab380323c3b1f9b88ce6bf09522313f40f84df84b050182ea60800a801ba04d147b172eb81fdb11a21826eabad091084f6e9613d340b5897872843efa6435a023640d906f65fd156b92d518068263d99d94dc88c3e0950fd7633fb0d4d237eec0", + "rlp" : "0xf9024cf901f9a06329ec33ae4921ac483119c459d9b433c988ecbf1dab47a42f04b7fa460a4ac1a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0293f78bf5ea7fbe0c13c88d246c5d84bf917dbf39e35722ae601ea85543dee9da0ef009c3c274a522a6e2ca98232fffff747bdfab79189be3e2b5e5dc54e2a51bea05e40223bcc6a700b1d32c94ec5b7ed325345b400cf06913d4a1538d80dde375db90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302014006832fefba82cf08845784188d80a0f008142ef350d111d19f370d7fb12836c5154726174d9931b9afcd3d9d2855b8889a43b5bf61121f7af84df84b050182ea60800a801ba04d147b172eb81fdb11a21826eabad091084f6e9613d340b5897872843efa6435a023640d906f65fd156b92d518068263d99d94dc88c3e0950fd7633fb0d4d237eec0", "transactions" : [ { "data" : "0x", @@ -1314,19 +1314,19 @@ "extraData" : "0x", "gasLimit" : "0x2fefba", "gasUsed" : "0xa042", - "hash" : "60ffcb5008eaea340506bc43689d1b2a3f6be9963822e4d07ea3c3439a5c238a", - "mixHash" : "2deb7b956c9872f070ee6766097fb87f4faf05eafc58d75de0a8a66c1b2d6aac", - "nonce" : "0154f5718e21141d", + "hash" : "e854f07ec75a197378a9806b2e83e90af289aa7a9e20d651b6f75f5b055ec484", + "mixHash" : "083679933107345e671e06c524a95cdc1084f965f7542a692283619b807b4555", + "nonce" : "a463a2fe523f4078", "number" : "0x07", - "parentHash" : "23ee03d1084a13984fe604e7ea070c6d907db16960a3835ef57d1baa16689d4f", + "parentHash" : "41e24f30308598382173973762075d8f518032f6a9193634c756d2c3bc6ee50b", "receiptTrie" : "e3beaaa91301cca4d98fc58b2aad310bd7bd147d4ff00f4fb5ce2b186a039f2d", "stateRoot" : "219ec50b26a20c420f96b8905f669455145efef0233e52a39c2d338b52a60f8c", - "timestamp" : "0x57836317", + "timestamp" : "0x5784188f", "transactionsTrie" : "b2d17fa171d19df4e817ffb15f38526d125a42b7879cd712584b130dc8ad341c", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "blocknumber" : "7", - "rlp" : "0xf90260f901f9a023ee03d1084a13984fe604e7ea070c6d907db16960a3835ef57d1baa16689d4fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0219ec50b26a20c420f96b8905f669455145efef0233e52a39c2d338b52a60f8ca0b2d17fa171d19df4e817ffb15f38526d125a42b7879cd712584b130dc8ad341ca0e3beaaa91301cca4d98fc58b2aad310bd7bd147d4ff00f4fb5ce2b186a039f2db90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302018007832fefba82a042845783631780a02deb7b956c9872f070ee6766097fb87f4faf05eafc58d75de0a8a66c1b2d6aac880154f5718e21141df861f85f060182ea609410000000000000000000000000000000000000070a801ba0bb8523d4c53ed16b355d0a2dba02154d23a5480449dc3894be40ef95511d2fe9a010ad725c2df4979b7a071b3fa9b6b719223f0167d68b98f213e8611f84d4d81bc0", + "rlp" : "0xf90260f901f9a041e24f30308598382173973762075d8f518032f6a9193634c756d2c3bc6ee50ba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0219ec50b26a20c420f96b8905f669455145efef0233e52a39c2d338b52a60f8ca0b2d17fa171d19df4e817ffb15f38526d125a42b7879cd712584b130dc8ad341ca0e3beaaa91301cca4d98fc58b2aad310bd7bd147d4ff00f4fb5ce2b186a039f2db90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302018007832fefba82a042845784188f80a0083679933107345e671e06c524a95cdc1084f965f7542a692283619b807b455588a463a2fe523f4078f861f85f060182ea609410000000000000000000000000000000000000070a801ba0bb8523d4c53ed16b355d0a2dba02154d23a5480449dc3894be40ef95511d2fe9a010ad725c2df4979b7a071b3fa9b6b719223f0167d68b98f213e8611f84d4d81bc0", "transactions" : [ { "data" : "0x", @@ -1355,19 +1355,19 @@ "extraData" : "0x64616f2d686172642d666f726b", "gasLimit" : "0x2fefba", "gasUsed" : "0x00", - "hash" : "759a2064217e4e4a7b2d000b85db1b4a3c38f0d385a2d5fe3c1db59b2b542800", - "mixHash" : "1a03d073e18853b3cae2466c7b3bf0569ec2bee77dac157c9266bbbcd0e26bc4", - "nonce" : "e2b29b5ff2f88b23", + "hash" : "363d0a4d7a64d8f9a0d837ada513ae8aecf82c3a167f383baf036c15b082ab2f", + "mixHash" : "e28ee83890511a82ee755fbebb135d2dfc5a9a50572377520792f97c08101e7c", + "nonce" : "7eeb14841d8197fd", "number" : "0x08", - "parentHash" : "60ffcb5008eaea340506bc43689d1b2a3f6be9963822e4d07ea3c3439a5c238a", + "parentHash" : "e854f07ec75a197378a9806b2e83e90af289aa7a9e20d651b6f75f5b055ec484", "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "stateRoot" : "d8c26888f3be8b3caa592fa608b0a6c91e4d71a0657b11afebea18528f0ff44d", - "timestamp" : "0x5783631b", + "timestamp" : "0x57841894", "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "blocknumber" : "8", - "rlp" : "0xf90209f90204a060ffcb5008eaea340506bc43689d1b2a3f6be9963822e4d07ea3c3439a5c238aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0d8c26888f3be8b3caa592fa608b0a6c91e4d71a0657b11afebea18528f0ff44da056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830201c008832fefba80845783631b8d64616f2d686172642d666f726ba01a03d073e18853b3cae2466c7b3bf0569ec2bee77dac157c9266bbbcd0e26bc488e2b29b5ff2f88b23c0c0", + "rlp" : "0xf90209f90204a0e854f07ec75a197378a9806b2e83e90af289aa7a9e20d651b6f75f5b055ec484a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0d8c26888f3be8b3caa592fa608b0a6c91e4d71a0657b11afebea18528f0ff44da056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830201c008832fefba8084578418948d64616f2d686172642d666f726ba0e28ee83890511a82ee755fbebb135d2dfc5a9a50572377520792f97c08101e7c887eeb14841d8197fdc0c0", "transactions" : [ ], "uncleHeaders" : [ @@ -1381,19 +1381,19 @@ "extraData" : "0x64616f2d686172642d666f726b", "gasLimit" : "0x2fefba", "gasUsed" : "0x65aa", - "hash" : "c4a01f3cc777a997d690a0c72dd799817cc2bc0cdc79f6c10d7367d3375eb9a3", - "mixHash" : "28a7e07f83e0624319e9221bf1cd71ee5e35b29c8570d1457ead8f2caf2f10d5", - "nonce" : "46bac1b638d711b4", + "hash" : "85fd587a5805508b53ced9f0fd3ce967b7de629acdb54d1dcc1f6136cc861853", + "mixHash" : "23ca2108bbf52d307f0485685093923cc0e88bb532e16b3e33ddfbedabf02e20", + "nonce" : "583a155bc41f60dc", "number" : "0x09", - "parentHash" : "759a2064217e4e4a7b2d000b85db1b4a3c38f0d385a2d5fe3c1db59b2b542800", + "parentHash" : "363d0a4d7a64d8f9a0d837ada513ae8aecf82c3a167f383baf036c15b082ab2f", "receiptTrie" : "ba60c4ab1b477e30a2befb448e466b1404264989fabb1eb870376381202aed52", "stateRoot" : "b6776ae31aa5aeaf7ec2b8f644716df0cbcba8a9d22ca34e795c9461f81fd04f", - "timestamp" : "0x5783631d", + "timestamp" : "0x57841897", "transactionsTrie" : "964e2a482dc1856fff3b00f545aaf8720aeef70a3ffe86cebf05bbc2c34bf539", "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "blocknumber" : "9", - "rlp" : "0xf9026df90206a0759a2064217e4e4a7b2d000b85db1b4a3c38f0d385a2d5fe3c1db59b2b542800a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b6776ae31aa5aeaf7ec2b8f644716df0cbcba8a9d22ca34e795c9461f81fd04fa0964e2a482dc1856fff3b00f545aaf8720aeef70a3ffe86cebf05bbc2c34bf539a0ba60c4ab1b477e30a2befb448e466b1404264989fabb1eb870376381202aed52b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302020009832fefba8265aa845783631d8d64616f2d686172642d666f726ba028a7e07f83e0624319e9221bf1cd71ee5e35b29c8570d1457ead8f2caf2f10d58846bac1b638d711b4f861f85f070182ea6094100000000000000000000000000000000000000801801ba09e18981c45e9f6bb54e3f52cae58f2c3c00f2220a9f1c788d0ee3fc2394d4956a038207c17c10faae1fa83bff79770fa38134a19b6ca6f04059d7a307c05f67e6ac0", + "rlp" : "0xf9026df90206a0363d0a4d7a64d8f9a0d837ada513ae8aecf82c3a167f383baf036c15b082ab2fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0b6776ae31aa5aeaf7ec2b8f644716df0cbcba8a9d22ca34e795c9461f81fd04fa0964e2a482dc1856fff3b00f545aaf8720aeef70a3ffe86cebf05bbc2c34bf539a0ba60c4ab1b477e30a2befb448e466b1404264989fabb1eb870376381202aed52b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302020009832fefba8265aa84578418978d64616f2d686172642d666f726ba023ca2108bbf52d307f0485685093923cc0e88bb532e16b3e33ddfbedabf02e2088583a155bc41f60dcf861f85f070182ea6094100000000000000000000000000000000000000801801ba09e18981c45e9f6bb54e3f52cae58f2c3c00f2220a9f1c788d0ee3fc2394d4956a038207c17c10faae1fa83bff79770fa38134a19b6ca6f04059d7a307c05f67e6ac0", "transactions" : [ { "data" : "0x", @@ -1409,6 +1409,14 @@ ], "uncleHeaders" : [ ] + }, + { + "blocknumber" : "10", + "rlp" : "0xf90236f901e3a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000940000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080808080a0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80f84df84b080182ea608001801ba066a8a933ff9208ecb2334a7edcf0592751d68e5e9cf155814238cd3072a7d38ba02cd8720983a8172b1304aad194d3f2ea3daeaf5c51bc3dc983d8218448f063bdc0" + }, + { + "blocknumber" : "11", + "rlp" : "0xf90236f901e3a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000940000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080808080a0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80f84df84b090182ea608001801ba08c41aab2b35a0c8c82f88076fe817d2c3a261e6bbab3c270f2d5f6c8ba077f2ea04861726cfb49b87296466ab8cf0790d7790e7e371168dc7e960361bc3479e985c0" } ], "genesisBlockHeader" : { @@ -1430,7 +1438,7 @@ "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" }, "genesisRLP" : "0xf901fcf901f7a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a04eda2e603f5b9ad6e92c0cba602372d0a0cd2e776a17b61a7a20225ffa7643d7a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000080832fefd8808454c98c8142a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421880102030405060708c0c0", - "lastblockhash" : "c4a01f3cc777a997d690a0c72dd799817cc2bc0cdc79f6c10d7367d3375eb9a3", + "lastblockhash" : "85fd587a5805508b53ced9f0fd3ce967b7de629acdb54d1dcc1f6136cc861853", "postState" : { "0c243ebe6a031753dc0dd850acf422844a3efb76" : { "balance" : "0x0a", @@ -1814,5 +1822,873 @@ } } } + }, + "DaoTransactions_UncleExtradata" : { + "blocks" : [ + { + "blockHeader" : { + "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", + "difficulty" : "0x020000", + "extraData" : "0x", + "gasLimit" : "0x2fefba", + "gasUsed" : "0x5208", + "hash" : "166dd0be1fc334e9ce125b8e83dd18c4351a93443c0c44a55710c71b51f33e40", + "mixHash" : "c9aab9b1a42fdd1e2fd07eb6592aabee582a33e8c314d6edfafce399cd44b0ee", + "nonce" : "216082a7e9d68e4b", + "number" : "0x01", + "parentHash" : "eb310def4877fc94c3945bdabd9ba6bbafff1c74944b2bd74a4ac01f0868804c", + "receiptTrie" : "63e81aadc86aed2ebe147fd86db74d8fbe91a938af0521be549669246e607443", + "stateRoot" : "421450c5fcaa516f03635983f0c9d936574721033424eac5e6d71c8fa14b766f", + "timestamp" : "0x5784189f", + "transactionsTrie" : "ac81275d7a81a720240146377982939179218535bfcfa9469c8bdd3e264ef179", + "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" + }, + "blocknumber" : "1", + "rlp" : "0xf9024cf901f9a0eb310def4877fc94c3945bdabd9ba6bbafff1c74944b2bd74a4ac01f0868804ca01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0421450c5fcaa516f03635983f0c9d936574721033424eac5e6d71c8fa14b766fa0ac81275d7a81a720240146377982939179218535bfcfa9469c8bdd3e264ef179a063e81aadc86aed2ebe147fd86db74d8fbe91a938af0521be549669246e607443b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000001832fefba825208845784189f80a0c9aab9b1a42fdd1e2fd07eb6592aabee582a33e8c314d6edfafce399cd44b0ee88216082a7e9d68e4bf84df84b8001827530800a801ca057cb46c0b702929c4fd4127b2370f28a7aeeaa65509699e58eedf7692090a0a9a05ba7c83d99be6a9bca0c81947023ba3b5f2162516d82d0757bf8004f3e9bc03ac0", + "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" : "be526a4f0ca82e4073b6155de5e88683b0144706ffe48080a423e7fcdf7eb207", + "mixHash" : "831622c412d9005be123c2cc5541d3a43c1339c8ce10dd2bc7f9a4bbc0d0b0d5", + "nonce" : "f65c25acd0f2047a", + "number" : "0x02", + "parentHash" : "166dd0be1fc334e9ce125b8e83dd18c4351a93443c0c44a55710c71b51f33e40", + "receiptTrie" : "b41287e7f7e5d2983862a73e54c86ec144ecf835096984770f6bf485188268b8", + "stateRoot" : "1e31d34b22a8d2fd9893bb58fa80e6ca4561320eed43776c295acca93721847c", + "timestamp" : "0x578418a1", + "transactionsTrie" : "76c7a0ce7644661f276c76fb9a82eaee879d0642cf4ed244fc10afc02c646abf", + "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" + }, + "blocknumber" : "2", + "rlp" : "0xf9024cf901f9a0166dd0be1fc334e9ce125b8e83dd18c4351a93443c0c44a55710c71b51f33e40a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a01e31d34b22a8d2fd9893bb58fa80e6ca4561320eed43776c295acca93721847ca076c7a0ce7644661f276c76fb9a82eaee879d0642cf4ed244fc10afc02c646abfa0b41287e7f7e5d2983862a73e54c86ec144ecf835096984770f6bf485188268b8b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302004002832fefba82520884578418a180a0831622c412d9005be123c2cc5541d3a43c1339c8ce10dd2bc7f9a4bbc0d0b0d588f65c25acd0f2047af84df84b0101827530800a801ca0bb6e3cf3f281af13ef1393d7052b03cab367079a9eb71aa829ec72b231a60e1fa04bcfe1da53f26bb95806d38e9f42fef262aaaf5191e16ec473a695c8978a0b05c0", + "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" : "d960470c5d6cb5777ba2ca069c41cb08ebaab95b04424c9740ff3b8b3e1afc82", + "mixHash" : "006836d27904b05bf304b0462e23378a65b197ed1673614bcaeb6a6cc6b75657", + "nonce" : "2bc803ac972a5060", + "number" : "0x03", + "parentHash" : "be526a4f0ca82e4073b6155de5e88683b0144706ffe48080a423e7fcdf7eb207", + "receiptTrie" : "12f61177f6c2cebe14df5474c8b8c1f8f47f4ea8fff7f8b22b7aa8a4156581c8", + "stateRoot" : "587518607d6c98344439896e7f39111d76a8aac09b70d624e237da6fa29bbc44", + "timestamp" : "0x578418a2", + "transactionsTrie" : "3798aa164b61e27b93484c76a5f319bd93c808dc78ef31cf8b93f4e1b248ca2c", + "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" + }, + "blocknumber" : "3", + "rlp" : "0xf9024cf901f9a0be526a4f0ca82e4073b6155de5e88683b0144706ffe48080a423e7fcdf7eb207a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0587518607d6c98344439896e7f39111d76a8aac09b70d624e237da6fa29bbc44a03798aa164b61e27b93484c76a5f319bd93c808dc78ef31cf8b93f4e1b248ca2ca012f61177f6c2cebe14df5474c8b8c1f8f47f4ea8fff7f8b22b7aa8a4156581c8b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302008003832fefba82520884578418a280a0006836d27904b05bf304b0462e23378a65b197ed1673614bcaeb6a6cc6b75657882bc803ac972a5060f84df84b0201827530800a801ca0f6d884cae1f86bdff1281e95e416089c544a4a5578a75d5e8ad76118e341b055a075b7d88985ed5acd61f30c9f9570c6c33bb92f3ad1a32b86a0747817fbc5ededc0", + "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" : "91e9fae950b50c551c0b31ab2e99265350ec0fdc46d508d609adcdfc3fc5bffa", + "mixHash" : "dcd57ffc4e31e203f27347c8d95f6200728bca67deef8f64fff020f3baee068e", + "nonce" : "94012fc98cabd7b5", + "number" : "0x04", + "parentHash" : "d960470c5d6cb5777ba2ca069c41cb08ebaab95b04424c9740ff3b8b3e1afc82", + "receiptTrie" : "4346f81bc8c58aa684049309decc863c93cd6cdc84c592b62bd1439eee3636ac", + "stateRoot" : "c8ba761363f3cb1958f01fd55b864bcba7f33324ba4f95e60fc9e48d9ba6777a", + "timestamp" : "0x578418a4", + "transactionsTrie" : "4cc1b34b3a9d29bf69842a54e1c48bc97afc433883f66d2c59287f118c9c3c2c", + "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" + }, + "blocknumber" : "4", + "rlp" : "0xf9024cf901f9a0d960470c5d6cb5777ba2ca069c41cb08ebaab95b04424c9740ff3b8b3e1afc82a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0c8ba761363f3cb1958f01fd55b864bcba7f33324ba4f95e60fc9e48d9ba6777aa04cc1b34b3a9d29bf69842a54e1c48bc97afc433883f66d2c59287f118c9c3c2ca04346f81bc8c58aa684049309decc863c93cd6cdc84c592b62bd1439eee3636acb9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200c004832fefba82520884578418a480a0dcd57ffc4e31e203f27347c8d95f6200728bca67deef8f64fff020f3baee068e8894012fc98cabd7b5f84df84b0301827530800a801ca0753ee5d896db8d87fe850e7935418587277cd9c010dfaaf7dd09b0a2e73785dca066deb3c241d532c7b880ae7a9a311ee7a92ef1c5e4e2bf3307990a2881bc13b0c0", + "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" : "63d80f27eec75761ba0eb224acf8b5a017975569a315940b2bc9fc2efdf662e5", + "mixHash" : "b0755aeb8a1746b060bf2ab2bb52a2642a2e969306d9838f827cde8ca574b238", + "nonce" : "4838852dfaffbc26", + "number" : "0x05", + "parentHash" : "91e9fae950b50c551c0b31ab2e99265350ec0fdc46d508d609adcdfc3fc5bffa", + "receiptTrie" : "49f411805d9b0ace02b56752bf40396c5505bb7ced5f174abf02a20b623982c0", + "stateRoot" : "8045027de50cc67c31daed085a6e72311e4f931606c6caa9f85bfc34009b3d00", + "timestamp" : "0x578418a5", + "transactionsTrie" : "165af780d27795ebc80c27759d3d949a9c4b05d35fcc7e9d3da8be357f5340cd", + "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" + }, + "blocknumber" : "5", + "rlp" : "0xf9024cf901f9a091e9fae950b50c551c0b31ab2e99265350ec0fdc46d508d609adcdfc3fc5bffaa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a08045027de50cc67c31daed085a6e72311e4f931606c6caa9f85bfc34009b3d00a0165af780d27795ebc80c27759d3d949a9c4b05d35fcc7e9d3da8be357f5340cda049f411805d9b0ace02b56752bf40396c5505bb7ced5f174abf02a20b623982c0b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302010005832fefba82cf0884578418a580a0b0755aeb8a1746b060bf2ab2bb52a2642a2e969306d9838f827cde8ca574b238884838852dfaffbc26f84df84b040182ea60800a801ba0cb1400f01459519ac3dc0426c6d7f95641dc6a7b8008069c9dfbe4f94b167169a07445362aadae8c25e4f0b494ad553bfc652bf34fb2ed0ccbf9a6b089c2b09f62c0", + "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" : "b96e2b785cb110da5c125eeab71efc53ba944af01475bd9ea9e2ef609aa18d7f", + "mixHash" : "0826f3d1eb79d505d45cdebaaebd7bd5cdcec21f93f70368a75b7673c750cdf5", + "nonce" : "032d2ea53eb2bc97", + "number" : "0x06", + "parentHash" : "63d80f27eec75761ba0eb224acf8b5a017975569a315940b2bc9fc2efdf662e5", + "receiptTrie" : "5e40223bcc6a700b1d32c94ec5b7ed325345b400cf06913d4a1538d80dde375d", + "stateRoot" : "293f78bf5ea7fbe0c13c88d246c5d84bf917dbf39e35722ae601ea85543dee9d", + "timestamp" : "0x578418a7", + "transactionsTrie" : "ef009c3c274a522a6e2ca98232fffff747bdfab79189be3e2b5e5dc54e2a51be", + "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" + }, + "blocknumber" : "6", + "rlp" : "0xf9024cf901f9a063d80f27eec75761ba0eb224acf8b5a017975569a315940b2bc9fc2efdf662e5a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0293f78bf5ea7fbe0c13c88d246c5d84bf917dbf39e35722ae601ea85543dee9da0ef009c3c274a522a6e2ca98232fffff747bdfab79189be3e2b5e5dc54e2a51bea05e40223bcc6a700b1d32c94ec5b7ed325345b400cf06913d4a1538d80dde375db90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302014006832fefba82cf0884578418a780a00826f3d1eb79d505d45cdebaaebd7bd5cdcec21f93f70368a75b7673c750cdf588032d2ea53eb2bc97f84df84b050182ea60800a801ba04d147b172eb81fdb11a21826eabad091084f6e9613d340b5897872843efa6435a023640d906f65fd156b92d518068263d99d94dc88c3e0950fd7633fb0d4d237eec0", + "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" : "bb4f9818a9f879e3c584567919cd062474c37a9139eb447609bed432b13b5f49", + "mixHash" : "fab18ba8094b4a256d746adc2c15339f4f251a3c571cbee3443601b5f6e270b4", + "nonce" : "b874dfe7cbb3bae3", + "number" : "0x07", + "parentHash" : "b96e2b785cb110da5c125eeab71efc53ba944af01475bd9ea9e2ef609aa18d7f", + "receiptTrie" : "e3beaaa91301cca4d98fc58b2aad310bd7bd147d4ff00f4fb5ce2b186a039f2d", + "stateRoot" : "219ec50b26a20c420f96b8905f669455145efef0233e52a39c2d338b52a60f8c", + "timestamp" : "0x578418a9", + "transactionsTrie" : "b2d17fa171d19df4e817ffb15f38526d125a42b7879cd712584b130dc8ad341c", + "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" + }, + "blocknumber" : "7", + "rlp" : "0xf90260f901f9a0b96e2b785cb110da5c125eeab71efc53ba944af01475bd9ea9e2ef609aa18d7fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0219ec50b26a20c420f96b8905f669455145efef0233e52a39c2d338b52a60f8ca0b2d17fa171d19df4e817ffb15f38526d125a42b7879cd712584b130dc8ad341ca0e3beaaa91301cca4d98fc58b2aad310bd7bd147d4ff00f4fb5ce2b186a039f2db90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302018007832fefba82a04284578418a980a0fab18ba8094b4a256d746adc2c15339f4f251a3c571cbee3443601b5f6e270b488b874dfe7cbb3bae3f861f85f060182ea609410000000000000000000000000000000000000070a801ba0bb8523d4c53ed16b355d0a2dba02154d23a5480449dc3894be40ef95511d2fe9a010ad725c2df4979b7a071b3fa9b6b719223f0167d68b98f213e8611f84d4d81bc0", + "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" : "f47d2dba3b077187b315cf126aad5e8f4b761b9056f0fe0aa25cfb1a568150fa", + "mixHash" : "049f458d0c79b6b9ae5227c05946a0cf7a12361d61fb310f501105d52bf8ed34", + "nonce" : "596610c22c5cbd93", + "number" : "0x08", + "parentHash" : "bb4f9818a9f879e3c584567919cd062474c37a9139eb447609bed432b13b5f49", + "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot" : "7ff10e11aa347e565a1554d91d017eff6430b78919964cae10e41369cb9ed9b7", + "timestamp" : "0x578418ae", + "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "uncleHash" : "4e04d7cb054042a83dc42b776e622d960219e8fadf0f60d885e18eaa25e95dab" + }, + "blocknumber" : "8", + "rlp" : "0xf90405f90204a0bb4f9818a9f879e3c584567919cd062474c37a9139eb447609bed432b13b5f49a04e04d7cb054042a83dc42b776e622d960219e8fadf0f60d885e18eaa25e95dab948888f1f195afa192cfee860698584c030f4c9db1a07ff10e11aa347e565a1554d91d017eff6430b78919964cae10e41369cb9ed9b7a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830201c008832fefba8084578418ae8d64616f2d686172642d666f726ba0049f458d0c79b6b9ae5227c05946a0cf7a12361d61fb310f501105d52bf8ed3488596610c22c5cbd93c0f901faf901f7a0b96e2b785cb110da5c125eeab71efc53ba944af01475bd9ea9e2ef609aa18d7fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0293f78bf5ea7fbe0c13c88d246c5d84bf917dbf39e35722ae601ea85543dee9da056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302018007832fefba8084578418ac80a0a7df96eb1ec9601197df1b7d4471a683b291a7575450248cbad3a27c828f2c1e88d62ffe60c02ef206", + "transactions" : [ + ], + "uncleHeaders" : [ + { + "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "coinbase" : "0000000000000000000000000000000000000000", + "difficulty" : "0x020180", + "extraData" : "0x", + "gasLimit" : "0x2fefba", + "gasUsed" : "0x00", + "hash" : "7b188fd0ae41e265e6508e3bb4264ee55d0cfe99dfa92deb9f9b6f5881b6eafb", + "mixHash" : "a7df96eb1ec9601197df1b7d4471a683b291a7575450248cbad3a27c828f2c1e", + "nonce" : "d62ffe60c02ef206", + "number" : "0x07", + "parentHash" : "b96e2b785cb110da5c125eeab71efc53ba944af01475bd9ea9e2ef609aa18d7f", + "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot" : "293f78bf5ea7fbe0c13c88d246c5d84bf917dbf39e35722ae601ea85543dee9d", + "timestamp" : "0x578418ac", + "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" + } + ] + }, + { + "blocknumber" : "9", + "rlp" : "0xf90670f90206a0f47d2dba3b077187b315cf126aad5e8f4b761b9056f0fe0aa25cfb1a568150faa0e4510e7c4ba6daf82fefe95b7c9a2e57150f3ff648bbced13ba5ce4e9af3578c948888f1f195afa192cfee860698584c030f4c9db1a0ab2d35f61c8354793f4b1e25466f89383d5cd924b62c45784abdcde5b9cb3156a0964e2a482dc1856fff3b00f545aaf8720aeef70a3ffe86cebf05bbc2c34bf539a005cf7ce6d8dda10857c8cf25239df384e7373b2a1721cc41aff2558dcbb40e1bb90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302020009832fefba8265aa84578418b58d64616f2d686172642d666f726ba00ffba3bad095a4792c06753bcaea0c6b5f92b34414b8bfde8b931527f9ef3a0d8840a024f583bc77ccf861f85f070182ea6094100000000000000000000000000000000000000801801ba09e18981c45e9f6bb54e3f52cae58f2c3c00f2220a9f1c788d0ee3fc2394d4956a038207c17c10faae1fa83bff79770fa38134a19b6ca6f04059d7a307c05f67e6af90401f90204a0bb4f9818a9f879e3c584567919cd062474c37a9139eb447609bed432b13b5f49a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0219ec50b26a20c420f96b8905f669455145efef0233e52a39c2d338b52a60f8ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830201c008832fefba8084578418b18d64616f2d686172642d666f726ba06639b3c805a32ab42ed4fe49d86f334449f59e3e483d5e8922080b98fbb8e56888f08a457b13f6cadff901f7a0bb4f9818a9f879e3c584567919cd062474c37a9139eb447609bed432b13b5f49a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0219ec50b26a20c420f96b8905f669455145efef0233e52a39c2d338b52a60f8ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830201c008832fefba8084578418b180a09f56e9e9839fb34efda467637b9186ccca681e3f9ceb77c27c5aa4bfcda0f7dc888c714c6c969a9648" + }, + { + "blockHeader" : { + "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", + "difficulty" : "0x020180", + "extraData" : "0x64616f2d686172642d666f726b", + "gasLimit" : "0x2fefba", + "gasUsed" : "0x65aa", + "hash" : "465d949f966ef556759cd1da49cb067358276bdfe2cbd737b49e7242a66e0e3e", + "mixHash" : "64bb39417f9d2094f39f191e11bd13ae84f319ba9d16de062f731a899e0ebaf1", + "nonce" : "bbc818b42f99cab8", + "number" : "0x09", + "parentHash" : "f47d2dba3b077187b315cf126aad5e8f4b761b9056f0fe0aa25cfb1a568150fa", + "receiptTrie" : "05cf7ce6d8dda10857c8cf25239df384e7373b2a1721cc41aff2558dcbb40e1b", + "stateRoot" : "ab2d35f61c8354793f4b1e25466f89383d5cd924b62c45784abdcde5b9cb3156", + "timestamp" : "0x578418c2", + "transactionsTrie" : "964e2a482dc1856fff3b00f545aaf8720aeef70a3ffe86cebf05bbc2c34bf539", + "uncleHash" : "e9509b731f9d581c6876a856e6c413feff593558dd310f769568a0ca47c4c95f" + }, + "blocknumber" : "9", + "rlp" : "0xf90476f90206a0f47d2dba3b077187b315cf126aad5e8f4b761b9056f0fe0aa25cfb1a568150faa0e9509b731f9d581c6876a856e6c413feff593558dd310f769568a0ca47c4c95f948888f1f195afa192cfee860698584c030f4c9db1a0ab2d35f61c8354793f4b1e25466f89383d5cd924b62c45784abdcde5b9cb3156a0964e2a482dc1856fff3b00f545aaf8720aeef70a3ffe86cebf05bbc2c34bf539a005cf7ce6d8dda10857c8cf25239df384e7373b2a1721cc41aff2558dcbb40e1bb90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302018009832fefba8265aa84578418c28d64616f2d686172642d666f726ba064bb39417f9d2094f39f191e11bd13ae84f319ba9d16de062f731a899e0ebaf188bbc818b42f99cab8f861f85f070182ea6094100000000000000000000000000000000000000801801ba09e18981c45e9f6bb54e3f52cae58f2c3c00f2220a9f1c788d0ee3fc2394d4956a038207c17c10faae1fa83bff79770fa38134a19b6ca6f04059d7a307c05f67e6af90207f90204a0bb4f9818a9f879e3c584567919cd062474c37a9139eb447609bed432b13b5f49a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0219ec50b26a20c420f96b8905f669455145efef0233e52a39c2d338b52a60f8ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302014008832fefba8084578418c08d64616f2d686172642d666f726ba08cf428dd8e7567bc22982ab9f8b7b7908834b035d01603df0c672cbfdce40c5d88daafa733a83fb266", + "transactions" : [ + { + "data" : "0x", + "gasLimit" : "0xea60", + "gasPrice" : "0x01", + "nonce" : "0x07", + "r" : "0x9e18981c45e9f6bb54e3f52cae58f2c3c00f2220a9f1c788d0ee3fc2394d4956", + "s" : "0x38207c17c10faae1fa83bff79770fa38134a19b6ca6f04059d7a307c05f67e6a", + "to" : "1000000000000000000000000000000000000008", + "v" : "0x1b", + "value" : "0x01" + } + ], + "uncleHeaders" : [ + { + "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "coinbase" : "0000000000000000000000000000000000000000", + "difficulty" : "0x020140", + "extraData" : "0x64616f2d686172642d666f726b", + "gasLimit" : "0x2fefba", + "gasUsed" : "0x00", + "hash" : "bf4dfd5cc79a10fa9e66b782307bedf5cfc11a9e53218f41baba6b821ae55d12", + "mixHash" : "8cf428dd8e7567bc22982ab9f8b7b7908834b035d01603df0c672cbfdce40c5d", + "nonce" : "daafa733a83fb266", + "number" : "0x08", + "parentHash" : "bb4f9818a9f879e3c584567919cd062474c37a9139eb447609bed432b13b5f49", + "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot" : "219ec50b26a20c420f96b8905f669455145efef0233e52a39c2d338b52a60f8c", + "timestamp" : "0x578418c0", + "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" + } + ] + }, + { + "blocknumber" : "10", + "rlp" : "0xf90455f90206a0465d949f966ef556759cd1da49cb067358276bdfe2cbd737b49e7242a66e0e3ea08553f3d50686660d32d8a483ede305d6f90e4bee1404cac2854f1f41e49b4eb5948888f1f195afa192cfee860698584c030f4c9db1a0dfa46241fd321ee668529fc010d5f260c1cecbd446e0fb75c26dba855710da85a0f49ed12e4a98811e40b2cd24a470e3ff48ab6c1887d36fa68f79440321685d00a069586b7641a84494a7674454f8953058b6497a4f67d0c6182b46e5449b93c281b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830201c00a832fefba82cf0884578418c78d64616f2d686172642d666f726ba0e98ad9119e8a1903f597415987eb7fa54aded27442e0c241187068699c6c124e88f98decbfb346a271f84df84b080182ea608001801ba066a8a933ff9208ecb2334a7edcf0592751d68e5e9cf155814238cd3072a7d38ba02cd8720983a8172b1304aad194d3f2ea3daeaf5c51bc3dc983d8218448f063bdf901faf901f7a0f47d2dba3b077187b315cf126aad5e8f4b761b9056f0fe0aa25cfb1a568150faa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a07ff10e11aa347e565a1554d91d017eff6430b78919964cae10e41369cb9ed9b7a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302018009832fefba8084578418c680a0a1cf856b4a26aed51fff7c25960a2f5a1746eb17043824c4e7457e77f006add0884682e0af0e40f779" + }, + { + "blocknumber" : "11", + "rlp" : "0xf905fff90204a0465d949f966ef556759cd1da49cb067358276bdfe2cbd737b49e7242a66e0e3ea0d1038d662743c1ead9586287ab3eeb12a86042ba670f90252ed23a7704cdec97948888f1f195afa192cfee860698584c030f4c9db1a0e29d166bbe4cadabb95581d58830046b24c531183aafcec9ab5714f549d49649a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830201800a832fefba8084578418cf8d64616f2d686172642d666f726ba08887e7062a062b31b091ceddf24c937d4405c2e0e3ee5550907fc680e1330c22883fe7901d125c0363c0f903f4f901f7a0f47d2dba3b077187b315cf126aad5e8f4b761b9056f0fe0aa25cfb1a568150faa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a07ff10e11aa347e565a1554d91d017eff6430b78919964cae10e41369cb9ed9b7a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302018009832fefba8084578418cb80a03d1087f5082092c70283c661f2ea42c07261544566c729e3a369be6f180b26e688c6c99feae1660a3cf901f7a0465d949f966ef556759cd1da49cb067358276bdfe2cbd737b49e7242a66e0e3ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0ab2d35f61c8354793f4b1e25466f89383d5cd924b62c45784abdcde5b9cb3156a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830201800a832fefba8084578418cc80a09613b0cbfa1f5d91c489abb1077dc86486a3c35f3c5a34ebe1e513bc4024346388ac4eaec71ef57672" + }, + { + "blockHeader" : { + "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", + "difficulty" : "0x020140", + "extraData" : "0x64616f2d686172642d666f726b", + "gasLimit" : "0x2fefba", + "gasUsed" : "0x5208", + "hash" : "66dcff2fd43447455e361af4c638415d7b0f1f3175abbf907d32f9a7a9cf8cf7", + "mixHash" : "0a505d3ce763f7ecefa4c9a34ebaee6ce8298a7c7c81d4c2431d50159cfca30b", + "nonce" : "4a7a73f6d266198b", + "number" : "0x0a", + "parentHash" : "465d949f966ef556759cd1da49cb067358276bdfe2cbd737b49e7242a66e0e3e", + "receiptTrie" : "ad35c45d79ae130f298960a3594a48071fcb8bebfccd435fdc1a4aec95edb272", + "stateRoot" : "96fe7230a72b9470e988f50be548baaaa497913235d9adea33be4ce46613aed2", + "timestamp" : "0x578418d9", + "transactionsTrie" : "916147a0805a950d8cc91ea336b3b7237474ac724029dc99f96b07eef085e4d7", + "uncleHash" : "1f79c072acb5bf959343b61d16963b2562e7fda1d9bc14d4b4af57de907ccef1" + }, + "blocknumber" : "10", + "rlp" : "0xf9067df90206a0465d949f966ef556759cd1da49cb067358276bdfe2cbd737b49e7242a66e0e3ea01f79c072acb5bf959343b61d16963b2562e7fda1d9bc14d4b4af57de907ccef1948888f1f195afa192cfee860698584c030f4c9db1a096fe7230a72b9470e988f50be548baaaa497913235d9adea33be4ce46613aed2a0916147a0805a950d8cc91ea336b3b7237474ac724029dc99f96b07eef085e4d7a0ad35c45d79ae130f298960a3594a48071fcb8bebfccd435fdc1a4aec95edb272b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830201400a832fefba82520884578418d98d64616f2d686172642d666f726ba00a505d3ce763f7ecefa4c9a34ebaee6ce8298a7c7c81d4c2431d50159cfca30b884a7a73f6d266198bf861f85f080182ea609410000000000000000000000000000000000000106f801ba047acd0e2edbc13fbfed74b1b5e6f5afaae464ff6662fc15fc76cf16f6821a72da02e989a61feb7751d802ec9ec12d30a6c419a65c8ba6acd96857a73c18b6a5564f9040ef90204a0bb4f9818a9f879e3c584567919cd062474c37a9139eb447609bed432b13b5f49a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0219ec50b26a20c420f96b8905f669455145efef0233e52a39c2d338b52a60f8ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200c008832fefba8084578418d58d64616f2d686172642d666f726ba09d1e75c86979d104eb43440c30f4ba498554416eac73224ecbb785167a8925b1883c1505c6b7aeae94f90204a0f47d2dba3b077187b315cf126aad5e8f4b761b9056f0fe0aa25cfb1a568150faa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a07ff10e11aa347e565a1554d91d017eff6430b78919964cae10e41369cb9ed9b7a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302014009832fefba8084578418d58d64616f2d686172642d666f726ba08dfa01d1a190349ea73c36e380997c866826ceea8f19ddf554cf3ec672741c2f88cd117ec41480468c", + "transactions" : [ + { + "data" : "0x", + "gasLimit" : "0xea60", + "gasPrice" : "0x01", + "nonce" : "0x08", + "r" : "0x47acd0e2edbc13fbfed74b1b5e6f5afaae464ff6662fc15fc76cf16f6821a72d", + "s" : "0x2e989a61feb7751d802ec9ec12d30a6c419a65c8ba6acd96857a73c18b6a5564", + "to" : "1000000000000000000000000000000000000010", + "v" : "0x1b", + "value" : "0x6f" + } + ], + "uncleHeaders" : [ + { + "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "coinbase" : "0000000000000000000000000000000000000000", + "difficulty" : "0x0200c0", + "extraData" : "0x64616f2d686172642d666f726b", + "gasLimit" : "0x2fefba", + "gasUsed" : "0x00", + "hash" : "0f635777fef46428bb4cb1fea91dd9fbe99d80cc0b947639260feb3115d98aab", + "mixHash" : "9d1e75c86979d104eb43440c30f4ba498554416eac73224ecbb785167a8925b1", + "nonce" : "3c1505c6b7aeae94", + "number" : "0x08", + "parentHash" : "bb4f9818a9f879e3c584567919cd062474c37a9139eb447609bed432b13b5f49", + "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot" : "219ec50b26a20c420f96b8905f669455145efef0233e52a39c2d338b52a60f8c", + "timestamp" : "0x578418d5", + "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" + }, + { + "bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "coinbase" : "0000000000000000000000000000000000000000", + "difficulty" : "0x020140", + "extraData" : "0x64616f2d686172642d666f726b", + "gasLimit" : "0x2fefba", + "gasUsed" : "0x00", + "hash" : "e992e2c4e473dd062d96354a116612029f7a5e9da4c887bcdfa74d799f2d4cb9", + "mixHash" : "8dfa01d1a190349ea73c36e380997c866826ceea8f19ddf554cf3ec672741c2f", + "nonce" : "cd117ec41480468c", + "number" : "0x09", + "parentHash" : "f47d2dba3b077187b315cf126aad5e8f4b761b9056f0fe0aa25cfb1a568150fa", + "receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot" : "7ff10e11aa347e565a1554d91d017eff6430b78919964cae10e41369cb9ed9b7", + "timestamp" : "0x578418d5", + "transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" + } + ] + } + ], + "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" : "66dcff2fd43447455e361af4c638415d7b0f1f3175abbf907d32f9a7a9cf8cf7", + "postState" : { + "0000000000000000000000000000000000000000" : { + "balance" : "0xea300b17a8b78000", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "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" : { + } + }, + "1000000000000000000000000000000000000010" : { + "balance" : "0x6f", + "code" : "0x", + "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" : "0x02be902146fa2abe24", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "914d1b8b43e92723e64fd0a06f5bdb8dd9b10c79" : { + "balance" : "0x00", + "code" : "0x", + "nonce" : "0x00", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "0x3b968b26", + "code" : "0x", + "nonce" : "0x09", + "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" : { + } + } + } } -} +} \ No newline at end of file From eb9824aef01cd5b29d4b54ceaeb9a14574976dc8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= Date: Thu, 14 Jul 2016 18:17:03 +0300 Subject: [PATCH 8/9] accounts, core, eth: pass chain config for chain maker to test DAO --- accounts/abi/bind/backends/simulated.go | 4 +- core/bench_test.go | 2 +- core/block_validator_test.go | 105 ------------------- core/blockchain_test.go | 16 +-- core/chain_makers.go | 28 ++++- core/chain_makers_test.go | 2 +- core/chain_pow_test.go | 6 +- core/dao_test.go | 132 ++++++++++++++++++++++++ core/database_util_test.go | 2 +- core/state_processor.go | 2 +- eth/backend_test.go | 2 +- eth/downloader/downloader_test.go | 2 +- eth/fetcher/fetcher_test.go | 2 +- eth/filters/filter_test.go | 4 +- eth/handler_test.go | 2 +- eth/helper_test.go | 2 +- 16 files changed, 181 insertions(+), 132 deletions(-) create mode 100644 core/dao_test.go diff --git a/accounts/abi/bind/backends/simulated.go b/accounts/abi/bind/backends/simulated.go index 9bce3f988a..687a31bf11 100644 --- a/accounts/abi/bind/backends/simulated.go +++ b/accounts/abi/bind/backends/simulated.go @@ -73,7 +73,7 @@ func (b *SimulatedBackend) Commit() { // Rollback aborts all pending transactions, reverting to the last committed state. func (b *SimulatedBackend) Rollback() { - blocks, _ := core.GenerateChain(b.blockchain.CurrentBlock(), b.database, 1, func(int, *core.BlockGen) {}) + blocks, _ := core.GenerateChain(nil, b.blockchain.CurrentBlock(), b.database, 1, func(int, *core.BlockGen) {}) b.pendingBlock = blocks[0] b.pendingState, _ = state.New(b.pendingBlock.Root(), b.database) @@ -179,7 +179,7 @@ func (b *SimulatedBackend) EstimateGasLimit(ctx context.Context, sender common.A // SendTransaction implements ContractTransactor.SendTransaction, delegating the raw // transaction injection to the remote node. func (b *SimulatedBackend) SendTransaction(ctx context.Context, tx *types.Transaction) error { - blocks, _ := core.GenerateChain(b.blockchain.CurrentBlock(), b.database, 1, func(number int, block *core.BlockGen) { + blocks, _ := core.GenerateChain(nil, b.blockchain.CurrentBlock(), b.database, 1, func(number int, block *core.BlockGen) { for _, tx := range b.pendingBlock.Transactions() { block.AddTx(tx) } diff --git a/core/bench_test.go b/core/bench_test.go index c6029499a8..344e7e3c55 100644 --- a/core/bench_test.go +++ b/core/bench_test.go @@ -163,7 +163,7 @@ func benchInsertChain(b *testing.B, disk bool, gen func(int, *BlockGen)) { // Generate a chain of b.N blocks using the supplied block // generator function. genesis := WriteGenesisBlockForTesting(db, GenesisAccount{benchRootAddr, benchRootFunds}) - chain, _ := GenerateChain(genesis, db, b.N, gen) + chain, _ := GenerateChain(nil, genesis, db, b.N, gen) // Time the insertion of the new chain. // State and blocks are stored in the same DB. diff --git a/core/block_validator_test.go b/core/block_validator_test.go index 5320c3f8da..c6daf9e7f3 100644 --- a/core/block_validator_test.go +++ b/core/block_validator_test.go @@ -27,7 +27,6 @@ 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" ) @@ -93,107 +92,3 @@ 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/blockchain_test.go b/core/blockchain_test.go index a26fe4a1b9..c3e4d352dd 100644 --- a/core/blockchain_test.go +++ b/core/blockchain_test.go @@ -712,7 +712,7 @@ func TestFastVsFullChains(t *testing.T) { funds = big.NewInt(1000000000) genesis = GenesisBlockForTesting(gendb, address, funds) ) - blocks, receipts := GenerateChain(genesis, gendb, 1024, func(i int, block *BlockGen) { + blocks, receipts := GenerateChain(nil, genesis, gendb, 1024, func(i int, block *BlockGen) { block.SetCoinbase(common.Address{0x00}) // If the block number is multiple of 3, send a few bonus transactions to the miner @@ -795,7 +795,7 @@ func TestLightVsFastVsFullChainHeads(t *testing.T) { genesis = GenesisBlockForTesting(gendb, address, funds) ) height := uint64(1024) - blocks, receipts := GenerateChain(genesis, gendb, int(height), nil) + blocks, receipts := GenerateChain(nil, genesis, gendb, int(height), nil) // Configure a subchain to roll back remove := []common.Hash{} @@ -895,7 +895,7 @@ func TestChainTxReorgs(t *testing.T) { // - futureAdd: transaction added after the reorg has already finished var pastAdd, freshAdd, futureAdd *types.Transaction - chain, _ := GenerateChain(genesis, db, 3, func(i int, gen *BlockGen) { + chain, _ := GenerateChain(nil, genesis, db, 3, func(i int, gen *BlockGen) { switch i { case 0: pastDrop, _ = types.NewTransaction(gen.TxNonce(addr2), addr2, big.NewInt(1000), params.TxGas, nil, nil).SignECDSA(key2) @@ -920,7 +920,7 @@ func TestChainTxReorgs(t *testing.T) { } // overwrite the old chain - chain, _ = GenerateChain(genesis, db, 5, func(i int, gen *BlockGen) { + chain, _ = GenerateChain(nil, genesis, db, 5, func(i int, gen *BlockGen) { switch i { case 0: pastAdd, _ = types.NewTransaction(gen.TxNonce(addr3), addr3, big.NewInt(1000), params.TxGas, nil, nil).SignECDSA(key3) @@ -990,7 +990,7 @@ func TestLogReorgs(t *testing.T) { blockchain, _ := NewBlockChain(db, testChainConfig(), FakePow{}, evmux) subs := evmux.Subscribe(RemovedLogsEvent{}) - chain, _ := GenerateChain(genesis, db, 2, func(i int, gen *BlockGen) { + chain, _ := GenerateChain(nil, genesis, db, 2, func(i int, gen *BlockGen) { if i == 1 { tx, err := types.NewContractCreation(gen.TxNonce(addr1), new(big.Int), big.NewInt(1000000), new(big.Int), code).SignECDSA(key1) if err != nil { @@ -1003,7 +1003,7 @@ func TestLogReorgs(t *testing.T) { t.Fatalf("failed to insert chain: %v", err) } - chain, _ = GenerateChain(genesis, db, 3, func(i int, gen *BlockGen) {}) + chain, _ = GenerateChain(nil, genesis, db, 3, func(i int, gen *BlockGen) {}) if _, err := blockchain.InsertChain(chain); err != nil { t.Fatalf("failed to insert forked chain: %v", err) } @@ -1025,12 +1025,12 @@ func TestReorgSideEvent(t *testing.T) { evmux := &event.TypeMux{} blockchain, _ := NewBlockChain(db, testChainConfig(), FakePow{}, evmux) - chain, _ := GenerateChain(genesis, db, 3, func(i int, gen *BlockGen) {}) + chain, _ := GenerateChain(nil, genesis, db, 3, func(i int, gen *BlockGen) {}) if _, err := blockchain.InsertChain(chain); err != nil { t.Fatalf("failed to insert chain: %v", err) } - replacementBlocks, _ := GenerateChain(genesis, db, 4, func(i int, gen *BlockGen) { + replacementBlocks, _ := GenerateChain(nil, genesis, db, 4, func(i int, gen *BlockGen) { tx, err := types.NewContractCreation(gen.TxNonce(addr1), new(big.Int), big.NewInt(1000000), new(big.Int), nil).SignECDSA(key1) if i == 2 { gen.OffsetTime(-1) diff --git a/core/chain_makers.go b/core/chain_makers.go index ef0ac66d1b..0b9a5f75d3 100644 --- a/core/chain_makers.go +++ b/core/chain_makers.go @@ -26,6 +26,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" ) @@ -35,7 +36,11 @@ import ( // MakeChainConfig returns a new ChainConfig with the ethereum default chain settings. func MakeChainConfig() *ChainConfig { - return &ChainConfig{HomesteadBlock: big.NewInt(0)} + return &ChainConfig{ + HomesteadBlock: big.NewInt(0), + DAOForkBlock: nil, + DAOForkSupport: true, + } } // FakePow is a non-validating proof of work implementation. @@ -173,10 +178,27 @@ func (b *BlockGen) OffsetTime(seconds int64) { // Blocks created by GenerateChain do not contain valid proof of work // values. Inserting them into BlockChain requires use of FakePow or // a similar non-validating proof of work implementation. -func GenerateChain(parent *types.Block, db ethdb.Database, n int, gen func(int, *BlockGen)) ([]*types.Block, []types.Receipts) { +func GenerateChain(config *ChainConfig, parent *types.Block, db ethdb.Database, n int, gen func(int, *BlockGen)) ([]*types.Block, []types.Receipts) { blocks, receipts := make(types.Blocks, n), make([]types.Receipts, n) genblock := func(i int, h *types.Header, statedb *state.StateDB) (*types.Block, types.Receipts) { b := &BlockGen{parent: parent, i: i, chain: blocks, header: h, statedb: statedb} + + // Mutate the state and block according to any hard-fork specs + if config == nil { + config = MakeChainConfig() + } + if daoBlock := config.DAOForkBlock; daoBlock != nil { + limit := new(big.Int).Add(daoBlock, params.DAOForkExtraRange) + if h.Number.Cmp(daoBlock) >= 0 && h.Number.Cmp(limit) < 0 { + if config.DAOForkSupport { + h.Extra = common.CopyBytes(params.DAOForkBlockExtra) + } + } + } + if config.DAOForkSupport && config.DAOForkBlock != nil && config.DAOForkBlock.Cmp(h.Number) == 0 { + ApplyDAOHardFork(statedb) + } + // Execute any user modifications to the block and finalize it if gen != nil { gen(i, b) } @@ -261,7 +283,7 @@ func makeHeaderChain(parent *types.Header, n int, db ethdb.Database, seed int) [ // makeBlockChain creates a deterministic chain of blocks rooted at parent. func makeBlockChain(parent *types.Block, n int, db ethdb.Database, seed int) []*types.Block { - blocks, _ := GenerateChain(parent, db, n, func(i int, b *BlockGen) { + blocks, _ := GenerateChain(nil, parent, db, n, func(i int, b *BlockGen) { b.SetCoinbase(common.Address{0: byte(seed), 19: byte(i)}) }) return blocks diff --git a/core/chain_makers_test.go b/core/chain_makers_test.go index 32c3efe8da..f52b09ad90 100644 --- a/core/chain_makers_test.go +++ b/core/chain_makers_test.go @@ -47,7 +47,7 @@ func ExampleGenerateChain() { // This call generates a chain of 5 blocks. The function runs for // each block and adds different features to gen based on the // block index. - chain, _ := GenerateChain(genesis, db, 5, func(i int, gen *BlockGen) { + chain, _ := GenerateChain(nil, genesis, db, 5, func(i int, gen *BlockGen) { switch i { case 0: // In block 1, addr1 sends addr2 some ether. diff --git a/core/chain_pow_test.go b/core/chain_pow_test.go index d2b0bd1443..2e26c8211c 100644 --- a/core/chain_pow_test.go +++ b/core/chain_pow_test.go @@ -60,7 +60,7 @@ func TestPowVerification(t *testing.T) { var ( testdb, _ = ethdb.NewMemDatabase() genesis = GenesisBlockForTesting(testdb, common.Address{}, new(big.Int)) - blocks, _ = GenerateChain(genesis, testdb, 8, nil) + blocks, _ = GenerateChain(nil, genesis, testdb, 8, nil) ) headers := make([]*types.Header, len(blocks)) for i, block := range blocks { @@ -115,7 +115,7 @@ func testPowConcurrentVerification(t *testing.T, threads int) { var ( testdb, _ = ethdb.NewMemDatabase() genesis = GenesisBlockForTesting(testdb, common.Address{}, new(big.Int)) - blocks, _ = GenerateChain(genesis, testdb, 8, nil) + blocks, _ = GenerateChain(nil, genesis, testdb, 8, nil) ) headers := make([]*types.Header, len(blocks)) for i, block := range blocks { @@ -186,7 +186,7 @@ func testPowConcurrentAbortion(t *testing.T, threads int) { var ( testdb, _ = ethdb.NewMemDatabase() genesis = GenesisBlockForTesting(testdb, common.Address{}, new(big.Int)) - blocks, _ = GenerateChain(genesis, testdb, 1024, nil) + blocks, _ = GenerateChain(nil, genesis, testdb, 1024, nil) ) headers := make([]*types.Header, len(blocks)) for i, block := range blocks { diff --git a/core/dao_test.go b/core/dao_test.go new file mode 100644 index 0000000000..0830b12316 --- /dev/null +++ b/core/dao_test.go @@ -0,0 +1,132 @@ +// 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 core + +import ( + "math/big" + "testing" + + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/event" + "github.com/ethereum/go-ethereum/params" +) + +// 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(nil, genesis, db, int(forkBlock.Int64()-1), func(i int, gen *BlockGen) {}) + + // Create the concurrent, conflicting two nodes + proDb, _ := ethdb.NewMemDatabase() + WriteGenesisBlockForTesting(proDb) + proConf := &ChainConfig{HomesteadBlock: big.NewInt(0), DAOForkBlock: forkBlock, DAOForkSupport: true} + proBc, _ := NewBlockChain(proDb, proConf, new(FakePow), new(event.TypeMux)) + + conDb, _ := ethdb.NewMemDatabase() + WriteGenesisBlockForTesting(conDb) + conConf := &ChainConfig{HomesteadBlock: big.NewInt(0), DAOForkBlock: forkBlock, DAOForkSupport: false} + conBc, _ := NewBlockChain(conDb, conConf, 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, conConf, 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(proConf, conBc.CurrentBlock(), db, 1, func(i int, gen *BlockGen) {}) + 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(conConf, 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, proConf, 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(conConf, 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(proConf, proBc.CurrentBlock(), db, 1, func(i int, gen *BlockGen) {}) + 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, conConf, 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(proConf, conBc.CurrentBlock(), db, 1, func(i int, gen *BlockGen) {}) + 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, proConf, 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(conConf, 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/database_util_test.go b/core/database_util_test.go index 6c19f78c84..280270ac84 100644 --- a/core/database_util_test.go +++ b/core/database_util_test.go @@ -561,7 +561,7 @@ func TestMipmapChain(t *testing.T) { defer db.Close() genesis := WriteGenesisBlockForTesting(db, GenesisAccount{addr, big.NewInt(1000000)}) - chain, receipts := GenerateChain(genesis, db, 1010, func(i int, gen *BlockGen) { + chain, receipts := GenerateChain(nil, genesis, db, 1010, func(i int, gen *BlockGen) { var receipts types.Receipts switch i { case 1: diff --git a/core/state_processor.go b/core/state_processor.go index 6797d87b4f..fd8e9762e9 100644 --- a/core/state_processor.go +++ b/core/state_processor.go @@ -65,7 +65,7 @@ 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 + // Mutate the the block and state according to any hard-fork specs if p.config.DAOForkSupport && p.config.DAOForkBlock != nil && p.config.DAOForkBlock.Cmp(block.Number()) == 0 { ApplyDAOHardFork(statedb) } diff --git a/eth/backend_test.go b/eth/backend_test.go index cb94adbf0f..105d71080d 100644 --- a/eth/backend_test.go +++ b/eth/backend_test.go @@ -32,7 +32,7 @@ func TestMipmapUpgrade(t *testing.T) { addr := common.BytesToAddress([]byte("jeff")) genesis := core.WriteGenesisBlockForTesting(db) - chain, receipts := core.GenerateChain(genesis, db, 10, func(i int, gen *core.BlockGen) { + chain, receipts := core.GenerateChain(nil, genesis, db, 10, func(i int, gen *core.BlockGen) { var receipts types.Receipts switch i { case 1: diff --git a/eth/downloader/downloader_test.go b/eth/downloader/downloader_test.go index e9e051ded4..fac6ef81c2 100644 --- a/eth/downloader/downloader_test.go +++ b/eth/downloader/downloader_test.go @@ -55,7 +55,7 @@ func init() { // reassembly. func makeChain(n int, seed byte, parent *types.Block, parentReceipts types.Receipts, heavy bool) ([]common.Hash, map[common.Hash]*types.Header, map[common.Hash]*types.Block, map[common.Hash]types.Receipts) { // Generate the block chain - blocks, receipts := core.GenerateChain(parent, testdb, n, func(i int, block *core.BlockGen) { + blocks, receipts := core.GenerateChain(nil, parent, testdb, n, func(i int, block *core.BlockGen) { block.SetCoinbase(common.Address{seed}) // If a heavy chain is requested, delay blocks to raise difficulty diff --git a/eth/fetcher/fetcher_test.go b/eth/fetcher/fetcher_test.go index 2404c8cfa7..6a32be14c6 100644 --- a/eth/fetcher/fetcher_test.go +++ b/eth/fetcher/fetcher_test.go @@ -45,7 +45,7 @@ var ( // contains a transaction and every 5th an uncle to allow testing correct block // reassembly. func makeChain(n int, seed byte, parent *types.Block) ([]common.Hash, map[common.Hash]*types.Block) { - blocks, _ := core.GenerateChain(parent, testdb, n, func(i int, block *core.BlockGen) { + blocks, _ := core.GenerateChain(nil, parent, testdb, n, func(i int, block *core.BlockGen) { block.SetCoinbase(common.Address{seed}) // If the block number is multiple of 3, send a bonus transaction to the miner diff --git a/eth/filters/filter_test.go b/eth/filters/filter_test.go index a95adfce7d..7b714f5d5f 100644 --- a/eth/filters/filter_test.go +++ b/eth/filters/filter_test.go @@ -57,7 +57,7 @@ func BenchmarkMipmaps(b *testing.B) { defer db.Close() genesis := core.WriteGenesisBlockForTesting(db, core.GenesisAccount{Address: addr1, Balance: big.NewInt(1000000)}) - chain, receipts := core.GenerateChain(genesis, db, 100010, func(i int, gen *core.BlockGen) { + chain, receipts := core.GenerateChain(nil, genesis, db, 100010, func(i int, gen *core.BlockGen) { var receipts types.Receipts switch i { case 2403: @@ -133,7 +133,7 @@ func TestFilters(t *testing.T) { defer db.Close() genesis := core.WriteGenesisBlockForTesting(db, core.GenesisAccount{Address: addr, Balance: big.NewInt(1000000)}) - chain, receipts := core.GenerateChain(genesis, db, 1000, func(i int, gen *core.BlockGen) { + chain, receipts := core.GenerateChain(nil, genesis, db, 1000, func(i int, gen *core.BlockGen) { var receipts types.Receipts switch i { case 1: diff --git a/eth/handler_test.go b/eth/handler_test.go index d5b1bf3508..60a642130b 100644 --- a/eth/handler_test.go +++ b/eth/handler_test.go @@ -630,7 +630,7 @@ func testDAOChallenge(t *testing.T, localForked, remoteForked bool, timeout bool } // 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) { + blocks, _ := core.GenerateChain(nil, genesis, db, 1, func(i int, block *core.BlockGen) { if remoteForked { block.SetExtra(params.DAOForkBlockExtra) } diff --git a/eth/helper_test.go b/eth/helper_test.go index dacb1593f5..28ff69b17f 100644 --- a/eth/helper_test.go +++ b/eth/helper_test.go @@ -56,7 +56,7 @@ func newTestProtocolManager(fastSync bool, blocks int, generator func(int, *core chainConfig = &core.ChainConfig{HomesteadBlock: big.NewInt(0)} // homestead set to 0 because of chain maker blockchain, _ = core.NewBlockChain(db, chainConfig, pow, evmux) ) - chain, _ := core.GenerateChain(genesis, db, blocks, generator) + chain, _ := core.GenerateChain(nil, genesis, db, blocks, generator) if _, err := blockchain.InsertChain(chain); err != nil { panic(err) } From d1c60d59e9929b0cfb3334b205b8caa655f54dd8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= Date: Thu, 14 Jul 2016 15:27:07 +0300 Subject: [PATCH 9/9] circleci: enable docker based hive testing --- circle.yml | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 circle.yml diff --git a/circle.yml b/circle.yml new file mode 100644 index 0000000000..54471ae262 --- /dev/null +++ b/circle.yml @@ -0,0 +1,32 @@ +machine: + services: + - docker + +dependencies: + cache_directories: + - "~/.ethash" # Cache the ethash DAG generated by hive for consecutive builds + - "~/.docker" # Cache all docker images manually to avoid lengthy rebuilds + override: + # Restore all previously cached docker images and ethash DAGs + - mkdir -p ~/.docker + - for img in `ls ~/.docker`; do docker load -i ~/.docker/$img; done + - mkdir -p ~/.go_workspace/src/github.com/karalabe/hive/workspace/ethash/ ~/.ethash + - cp -r ~/.ethash/. ~/.go_workspace/src/github.com/karalabe/hive/workspace/ethash/ + + # Pull in and dry run hive to build all modified images + - go get -u github.com/karalabe/hive + - (cd ~/.go_workspace/src/github.com/karalabe/hive && hive --docker-noshell --client=NONE --test=. --sim=. --loglevel=6) + + # Cache all the docker images and the ethash DAGs + - for img in `docker images | grep -v "^" | tail -n +2 | awk '{print $1}'`; do docker save $img > ~/.docker/`echo $img | tr '/' ':'`.tar; done + - cp -r ~/.go_workspace/src/github.com/karalabe/hive/workspace/ethash/. ~/.ethash + +test: + override: + # Build Geth and move into a known folder + - make geth + - cp ./build/bin/geth $HOME/geth + + # Run hive and move all generated logs into the public artifacts folder + - (cd ~/.go_workspace/src/github.com/karalabe/hive && hive --docker-noshell --client=go-ethereum:local --override=$HOME/geth --test=. --sim=.) + - cp -r ~/.go_workspace/src/github.com/karalabe/hive/workspace/logs/* $CIRCLE_ARTIFACTS