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