aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorobscuren <geffobscura@gmail.com>2015-05-22 00:58:57 +0800
committerobscuren <geffobscura@gmail.com>2015-05-22 00:58:57 +0800
commit2c1c78a6d9e59de1d4cdeb32737d281814d690f7 (patch)
tree05471c7e1862733478b08e18bd7ed9419f7f7297
parent915fc0e581c042a8d4896880d45e680003809254 (diff)
parent3ea9868b656077c38af5ea8590761c3218ce558e (diff)
downloadgo-tangerine-2c1c78a6d9e59de1d4cdeb32737d281814d690f7.tar.gz
go-tangerine-2c1c78a6d9e59de1d4cdeb32737d281814d690f7.tar.zst
go-tangerine-2c1c78a6d9e59de1d4cdeb32737d281814d690f7.zip
Merge branch 'release/0.9.23'v0.9.23
-rw-r--r--cmd/geth/admin.go63
-rw-r--r--cmd/geth/info_test.json2
-rw-r--r--cmd/geth/js.go3
-rw-r--r--cmd/geth/js_test.go46
-rw-r--r--cmd/geth/main.go94
-rw-r--r--cmd/utils/cmd.go52
-rw-r--r--cmd/utils/flags.go8
-rw-r--r--common/compiler/solidity.go110
-rw-r--r--common/compiler/solidity_test.go42
-rw-r--r--core/block_cache.go3
-rw-r--r--core/block_processor.go37
-rw-r--r--core/block_processor_test.go6
-rw-r--r--core/chain_makers.go2
-rw-r--r--core/chain_manager.go186
-rw-r--r--core/chain_manager_test.go17
-rw-r--r--core/execution.go6
-rw-r--r--core/vm/memory.go12
-rw-r--r--core/vm/vm.go2
-rw-r--r--eth/backend.go114
-rw-r--r--eth/downloader/downloader.go51
-rw-r--r--eth/downloader/downloader_test.go63
-rw-r--r--eth/downloader/queue.go2
-rw-r--r--eth/handler.go71
-rw-r--r--eth/peer.go122
-rw-r--r--eth/protocol.go2
-rw-r--r--eth/sync.go36
-rw-r--r--ethdb/database.go21
-rw-r--r--jsre/ethereum_js.go2536
-rw-r--r--miner/agent.go25
-rw-r--r--miner/miner.go8
-rw-r--r--miner/worker.go9
-rw-r--r--rpc/api.go49
-rw-r--r--rpc/api_test.go44
-rw-r--r--rpc/args.go64
-rw-r--r--rpc/http.go3
-rw-r--r--tests/block_test.go4
-rw-r--r--tests/files/StateTests/stCallCreateCallCodeTest.json434
-rw-r--r--tests/files/StateTests/stMemoryStressTest.json20
-rw-r--r--tests/files/StateTests/stRecursiveCreate.json8255
-rw-r--r--tests/files/StateTests/stSolidityTest.json36
-rw-r--r--tests/files/VMTests/vmArithmeticTest.json485
-rw-r--r--tests/vm/gh_test.go34
-rw-r--r--xeth/xeth.go59
43 files changed, 12300 insertions, 938 deletions
diff --git a/cmd/geth/admin.go b/cmd/geth/admin.go
index ebdf3512a..4c8f110e4 100644
--- a/cmd/geth/admin.go
+++ b/cmd/geth/admin.go
@@ -8,6 +8,7 @@ import (
"strconv"
"time"
+ "github.com/ethereum/ethash"
"github.com/ethereum/go-ethereum/accounts"
"github.com/ethereum/go-ethereum/cmd/utils"
"github.com/ethereum/go-ethereum/common"
@@ -35,6 +36,7 @@ func (js *jsre) adminBindings() {
eth := ethO.Object()
eth.Set("pendingTransactions", js.pendingTransactions)
eth.Set("resend", js.resend)
+ eth.Set("sign", js.sign)
js.re.Set("admin", struct{}{})
t, _ := js.re.Get("admin")
@@ -72,6 +74,9 @@ func (js *jsre) adminBindings() {
miner.Set("hashrate", js.hashrate)
miner.Set("setExtra", js.setExtra)
miner.Set("setGasPrice", js.setGasPrice)
+ miner.Set("startAutoDAG", js.startAutoDAG)
+ miner.Set("stopAutoDAG", js.stopAutoDAG)
+ miner.Set("makeDAG", js.makeDAG)
admin.Set("debug", struct{}{})
t, _ = admin.Get("debug")
@@ -177,6 +182,30 @@ func (js *jsre) resend(call otto.FunctionCall) otto.Value {
return otto.FalseValue()
}
+func (js *jsre) sign(call otto.FunctionCall) otto.Value {
+ if len(call.ArgumentList) != 2 {
+ fmt.Println("requires 2 arguments: eth.sign(signer, data)")
+ return otto.UndefinedValue()
+ }
+ signer, err := call.Argument(0).ToString()
+ if err != nil {
+ fmt.Println(err)
+ return otto.UndefinedValue()
+ }
+
+ data, err := call.Argument(1).ToString()
+ if err != nil {
+ fmt.Println(err)
+ return otto.UndefinedValue()
+ }
+ v, err := js.xeth.Sign(signer, data, false)
+ if err != nil {
+ fmt.Println(err)
+ return otto.UndefinedValue()
+ }
+ return js.re.ToVal(v)
+}
+
func (js *jsre) debugBlock(call otto.FunctionCall) otto.Value {
block, err := js.getBlock(call)
if err != nil {
@@ -253,6 +282,30 @@ func (js *jsre) hashrate(otto.FunctionCall) otto.Value {
return js.re.ToVal(js.ethereum.Miner().HashRate())
}
+func (js *jsre) makeDAG(call otto.FunctionCall) otto.Value {
+ blockNumber, err := call.Argument(1).ToInteger()
+ if err != nil {
+ fmt.Println(err)
+ return otto.FalseValue()
+ }
+
+ err = ethash.MakeDAG(uint64(blockNumber), "")
+ if err != nil {
+ return otto.FalseValue()
+ }
+ return otto.TrueValue()
+}
+
+func (js *jsre) startAutoDAG(otto.FunctionCall) otto.Value {
+ js.ethereum.StartAutoDAG()
+ return otto.TrueValue()
+}
+
+func (js *jsre) stopAutoDAG(otto.FunctionCall) otto.Value {
+ js.ethereum.StopAutoDAG()
+ return otto.TrueValue()
+}
+
func (js *jsre) backtrace(call otto.FunctionCall) otto.Value {
tracestr, err := call.Argument(0).ToString()
if err != nil {
@@ -291,6 +344,9 @@ func (js *jsre) startMining(call otto.FunctionCall) otto.Value {
threads = int64(js.ethereum.MinerThreads)
}
+ // switch on DAG autogeneration when miner starts
+ js.ethereum.StartAutoDAG()
+
err = js.ethereum.StartMining(int(threads))
if err != nil {
fmt.Println(err)
@@ -302,6 +358,7 @@ func (js *jsre) startMining(call otto.FunctionCall) otto.Value {
func (js *jsre) stopMining(call otto.FunctionCall) otto.Value {
js.ethereum.StopMining()
+ js.ethereum.StopAutoDAG()
return otto.TrueValue()
}
@@ -383,7 +440,7 @@ func (js *jsre) unlock(call otto.FunctionCall) otto.Value {
var passphrase string
if arg.IsUndefined() {
fmt.Println("Please enter a passphrase now.")
- passphrase, err = readPassword("Passphrase: ", true)
+ passphrase, err = utils.PromptPassword("Passphrase: ", true)
if err != nil {
fmt.Println(err)
return otto.FalseValue()
@@ -410,12 +467,12 @@ func (js *jsre) newAccount(call otto.FunctionCall) otto.Value {
if arg.IsUndefined() {
fmt.Println("The new account will be encrypted with a passphrase.")
fmt.Println("Please enter a passphrase now.")
- auth, err := readPassword("Passphrase: ", true)
+ auth, err := utils.PromptPassword("Passphrase: ", true)
if err != nil {
fmt.Println(err)
return otto.FalseValue()
}
- confirm, err := readPassword("Repeat Passphrase: ", false)
+ confirm, err := utils.PromptPassword("Repeat Passphrase: ", false)
if err != nil {
fmt.Println(err)
return otto.FalseValue()
diff --git a/cmd/geth/info_test.json b/cmd/geth/info_test.json
index 1e0c271ac..63f2163a9 100644
--- a/cmd/geth/info_test.json
+++ b/cmd/geth/info_test.json
@@ -1 +1 @@
-{"code":"605280600c6000396000f3006000357c010000000000000000000000000000000000000000000000000000000090048063c6888fa114602e57005b60376004356041565b8060005260206000f35b6000600782029050604d565b91905056","info":{"abiDefinition":[{"constant":false,"inputs":[{"name":"a","type":"uint256"}],"name":"multiply","outputs":[{"name":"d","type":"uint256"}],"type":"function"}],"compilerVersion":"0.9.17","developerDoc":{"methods":{}},"language":"Solidity","languageVersion":"0","source":"contract test {\n /// @notice Will multiply `a` by 7.\n function multiply(uint a) returns(uint d) {\n return a * 7;\n }\n}\n","userDoc":{"methods":{"multiply(uint256)":{"notice":"Will multiply `a` by 7."}}}}} \ No newline at end of file
+{"code":"0x605880600c6000396000f3006000357c010000000000000000000000000000000000000000000000000000000090048063c6888fa114602e57005b603d6004803590602001506047565b8060005260206000f35b60006007820290506053565b91905056","info":{"abiDefinition":[{"constant":false,"inputs":[{"name":"a","type":"uint256"}],"name":"multiply","outputs":[{"name":"d","type":"uint256"}],"type":"function"}],"compilerVersion":"0.9.23","developerDoc":{"methods":{}},"language":"Solidity","languageVersion":"0","source":"contract test {\n /// @notice Will multiply `a` by 7.\n function multiply(uint a) returns(uint d) {\n return a * 7;\n }\n}\n","userDoc":{"methods":{"multiply(uint256)":{"notice":"Will multiply `a` by 7."}}}}} \ No newline at end of file
diff --git a/cmd/geth/js.go b/cmd/geth/js.go
index 4ddb3bd9c..f99051a1e 100644
--- a/cmd/geth/js.go
+++ b/cmd/geth/js.go
@@ -71,7 +71,7 @@ type jsre struct {
prompter
}
-func newJSRE(ethereum *eth.Ethereum, libPath, solcPath, corsDomain string, interactive bool, f xeth.Frontend) *jsre {
+func newJSRE(ethereum *eth.Ethereum, libPath, corsDomain string, interactive bool, f xeth.Frontend) *jsre {
js := &jsre{ethereum: ethereum, ps1: "> "}
// set default cors domain used by startRpc from CLI flag
js.corsDomain = corsDomain
@@ -81,7 +81,6 @@ func newJSRE(ethereum *eth.Ethereum, libPath, solcPath, corsDomain string, inter
js.xeth = xeth.New(ethereum, f)
js.wait = js.xeth.UpdateState()
// update state in separare forever blocks
- js.xeth.SetSolc(solcPath)
js.re = re.New(libPath)
js.apiBindings(f)
js.adminBindings()
diff --git a/cmd/geth/js_test.go b/cmd/geth/js_test.go
index e02e8f704..41e1034e9 100644
--- a/cmd/geth/js_test.go
+++ b/cmd/geth/js_test.go
@@ -24,7 +24,7 @@ import (
const (
testSolcPath = ""
- solcVersion = "0.9.17"
+ solcVersion = "0.9.23"
testKey = "e6fab74a43941f82d89cb7faa408e227cdad3153c4720e540e855c19b15e6674"
testAddress = "0x8605cdbbdb6d264aa742e77020dcbc58fcdce182"
@@ -34,6 +34,7 @@ const (
)
var (
+ versionRE = regexp.MustCompile(strconv.Quote(`"compilerVersion":"` + solcVersion + `"`))
testGenesis = `{"` + testAddress[2:] + `": {"balance": "` + testBalance + `"}}`
)
@@ -75,6 +76,7 @@ func testJEthRE(t *testing.T) (string, *testjethre, *eth.Ethereum) {
AccountManager: am,
MaxPeers: 0,
Name: "test",
+ SolcPath: testSolcPath,
})
if err != nil {
t.Fatal("%v", err)
@@ -101,7 +103,7 @@ func testJEthRE(t *testing.T) (string, *testjethre, *eth.Ethereum) {
t.Errorf("Error creating DocServer: %v", err)
}
tf := &testjethre{ds: ds, stateDb: ethereum.ChainManager().State().Copy()}
- repl := newJSRE(ethereum, assetPath, testSolcPath, "", false, tf)
+ repl := newJSRE(ethereum, assetPath, "", false, tf)
tf.jsre = repl
return tmp, tf, ethereum
}
@@ -172,6 +174,8 @@ func TestBlockChain(t *testing.T) {
tmpfile := filepath.Join(extmp, "export.chain")
tmpfileq := strconv.Quote(tmpfile)
+ ethereum.ChainManager().Reset()
+
checkEvalJSON(t, repl, `admin.export(`+tmpfileq+`)`, `true`)
if _, err := os.Stat(tmpfile); err != nil {
t.Fatal(err)
@@ -226,11 +230,11 @@ func TestSignature(t *testing.T) {
defer ethereum.Stop()
defer os.RemoveAll(tmp)
- val, err := repl.re.Run(`eth.sign({from: "` + testAddress + `", data: "` + testHash + `"})`)
+ val, err := repl.re.Run(`eth.sign("` + testAddress + `", "` + testHash + `")`)
// This is a very preliminary test, lacking actual signature verification
if err != nil {
- t.Errorf("Error runnig js: %v", err)
+ t.Errorf("Error running js: %v", err)
return
}
output := val.String()
@@ -244,7 +248,6 @@ func TestSignature(t *testing.T) {
}
func TestContract(t *testing.T) {
- t.Skip()
tmp, repl, ethereum := testJEthRE(t)
if err := ethereum.Start(); err != nil {
@@ -257,7 +260,9 @@ func TestContract(t *testing.T) {
var txc uint64
coinbase := common.HexToAddress(testAddress)
resolver.New(repl.xeth).CreateContracts(coinbase)
+ // time.Sleep(1000 * time.Millisecond)
+ // checkEvalJSON(t, repl, `eth.getBlock("pending", true).transactions.length`, `2`)
source := `contract test {\n` +
" /// @notice Will multiply `a` by 7." + `\n` +
` function multiply(uint a) returns(uint d) {\n` +
@@ -277,10 +282,9 @@ func TestContract(t *testing.T) {
// if solc is found with right version, test it, otherwise read from file
sol, err := compiler.New("")
if err != nil {
- t.Logf("solc not found: skipping compiler test")
+ t.Logf("solc not found: mocking contract compilation step")
} else if sol.Version() != solcVersion {
- err = fmt.Errorf("solc wrong version found (%v, expect %v): skipping compiler test", sol.Version(), solcVersion)
- t.Log(err)
+ t.Logf("WARNING: solc different version found (%v, test written for %v, may need to update)", sol.Version(), solcVersion)
}
if err != nil {
@@ -293,10 +297,10 @@ func TestContract(t *testing.T) {
t.Errorf("%v", err)
}
} else {
- checkEvalJSON(t, repl, `contract = eth.compile.solidity(source)`, string(contractInfo))
+ checkEvalJSON(t, repl, `contract = eth.compile.solidity(source).test`, string(contractInfo))
}
- checkEvalJSON(t, repl, `contract.code`, `"605280600c6000396000f3006000357c010000000000000000000000000000000000000000000000000000000090048063c6888fa114602e57005b60376004356041565b8060005260206000f35b6000600782029050604d565b91905056"`)
+ checkEvalJSON(t, repl, `contract.code`, `"0x605880600c6000396000f3006000357c010000000000000000000000000000000000000000000000000000000090048063c6888fa114602e57005b603d6004803590602001506047565b8060005260206000f35b60006007820290506053565b91905056"`)
checkEvalJSON(
t, repl,
@@ -306,15 +310,16 @@ func TestContract(t *testing.T) {
callSetup := `abiDef = JSON.parse('[{"constant":false,"inputs":[{"name":"a","type":"uint256"}],"name":"multiply","outputs":[{"name":"d","type":"uint256"}],"type":"function"}]');
Multiply7 = eth.contract(abiDef);
-multiply7 = new Multiply7(contractaddress);
+multiply7 = Multiply7.at(contractaddress);
`
-
+ // time.Sleep(1500 * time.Millisecond)
_, err = repl.re.Run(callSetup)
if err != nil {
- t.Errorf("unexpected error registering, got %v", err)
+ t.Errorf("unexpected error setting up contract, got %v", err)
}
- // updatespec
+ // checkEvalJSON(t, repl, `eth.getBlock("pending", true).transactions.length`, `3`)
+
// why is this sometimes failing?
// checkEvalJSON(t, repl, `multiply7.multiply.call(6)`, `42`)
expNotice := ""
@@ -322,20 +327,23 @@ multiply7 = new Multiply7(contractaddress);
t.Errorf("incorrect confirmation message: expected %v, got %v", expNotice, repl.lastConfirm)
}
- // why 0?
- checkEvalJSON(t, repl, `eth.getBlock("pending", true).transactions.length`, `0`)
-
txc, repl.xeth = repl.xeth.ApplyTestTxs(repl.stateDb, coinbase, txc)
checkEvalJSON(t, repl, `admin.contractInfo.start()`, `true`)
checkEvalJSON(t, repl, `multiply7.multiply.sendTransaction(6, { from: primary, gas: "1000000", gasPrice: "100000" })`, `undefined`)
- expNotice = `About to submit transaction (no NatSpec info found for contract: content hash not found for '0x4a6c99e127191d2ee302e42182c338344b39a37a47cdbb17ab0f26b6802eb4d1'): {"params":[{"to":"0x5dcaace5982778b409c524873b319667eba5d074","data": "0xc6888fa10000000000000000000000000000000000000000000000000000000000000006"}]}`
+ expNotice = `About to submit transaction (no NatSpec info found for contract: content hash not found for '0x87e2802265838c7f14bb69eecd2112911af6767907a702eeaa445239fb20711b'): {"params":[{"to":"0x5dcaace5982778b409c524873b319667eba5d074","data": "0xc6888fa10000000000000000000000000000000000000000000000000000000000000006"}]}`
if repl.lastConfirm != expNotice {
t.Errorf("incorrect confirmation message: expected %v, got %v", expNotice, repl.lastConfirm)
}
+ var contenthash = `"0x86d2b7cf1e72e9a7a3f8d96601f0151742a2f780f1526414304fbe413dc7f9bd"`
+ if sol != nil {
+ modContractInfo := versionRE.ReplaceAll(contractInfo, []byte(`"compilerVersion":"`+sol.Version()+`"`))
+ _ = modContractInfo
+ // contenthash = crypto.Sha3(modContractInfo)
+ }
checkEvalJSON(t, repl, `filename = "/tmp/info.json"`, `"/tmp/info.json"`)
- checkEvalJSON(t, repl, `contenthash = admin.contractInfo.register(primary, contractaddress, contract, filename)`, `"0x0d067e2dd99a4d8f0c0279738b17130dd415a89f24a23f0e7cf68c546ae3089d"`)
+ checkEvalJSON(t, repl, `contenthash = admin.contractInfo.register(primary, contractaddress, contract, filename)`, contenthash)
checkEvalJSON(t, repl, `admin.contractInfo.registerUrl(primary, contenthash, "file://"+filename)`, `true`)
if err != nil {
t.Errorf("unexpected error registering, got %v", err)
diff --git a/cmd/geth/main.go b/cmd/geth/main.go
index 3f3af2b64..513b405ff 100644
--- a/cmd/geth/main.go
+++ b/cmd/geth/main.go
@@ -21,7 +21,6 @@
package main
import (
- "bufio"
"fmt"
"io"
"io/ioutil"
@@ -44,13 +43,12 @@ import (
"github.com/ethereum/go-ethereum/logger"
"github.com/mattn/go-colorable"
"github.com/mattn/go-isatty"
- "github.com/peterh/liner"
)
import _ "net/http/pprof"
const (
ClientIdentifier = "Geth"
- Version = "0.9.22"
+ Version = "0.9.23"
)
var (
@@ -101,7 +99,15 @@ The output of this command is supposed to be machine-readable.
Usage: "import ethereum presale wallet",
},
},
- },
+ Description: `
+
+ get wallet import /path/to/my/presale.wallet
+
+will prompt for your password and imports your ether presale account.
+It can be used non-interactively with the --password option taking a
+passwordfile as argument containing the wallet password in plaintext.
+
+`},
{
Action: accountList,
Name: "account",
@@ -111,7 +117,7 @@ The output of this command is supposed to be machine-readable.
Manage accounts lets you create new accounts, list all existing accounts,
import a private key into a new account.
-'account help' shows a list of subcommands or help for one subcommand.
+' help' shows a list of subcommands or help for one subcommand.
It supports interactive mode, when you are prompted for password as well as
non-interactive mode where passwords are supplied via a given password file.
@@ -230,6 +236,11 @@ JavaScript API. See https://github.com/ethereum/go-ethereum/wiki/Javascipt-Conso
Name: "upgradedb",
Usage: "upgrade chainblock database",
},
+ {
+ Action: removeDb,
+ Name: "removedb",
+ Usage: "Remove blockchain and state databases",
+ },
}
app.Flags = []cli.Flag{
utils.IdentityFlag,
@@ -246,6 +257,7 @@ JavaScript API. See https://github.com/ethereum/go-ethereum/wiki/Javascipt-Conso
utils.GasPriceFlag,
utils.MinerThreadsFlag,
utils.MiningEnabledFlag,
+ utils.AutoDAGFlag,
utils.NATFlag,
utils.NatspecEnabledFlag,
utils.NodeKeyFileFlag,
@@ -323,7 +335,6 @@ func console(ctx *cli.Context) {
repl := newJSRE(
ethereum,
ctx.String(utils.JSpathFlag.Name),
- ctx.String(utils.SolcPathFlag.Name),
ctx.GlobalString(utils.RPCCORSDomainFlag.Name),
true,
nil,
@@ -345,7 +356,6 @@ func execJSFiles(ctx *cli.Context) {
repl := newJSRE(
ethereum,
ctx.String(utils.JSpathFlag.Name),
- ctx.String(utils.SolcPathFlag.Name),
ctx.GlobalString(utils.RPCCORSDomainFlag.Name),
false,
nil,
@@ -361,12 +371,20 @@ func execJSFiles(ctx *cli.Context) {
func unlockAccount(ctx *cli.Context, am *accounts.Manager, account string) (passphrase string) {
var err error
// Load startup keys. XXX we are going to need a different format
- // Attempt to unlock the account
- passphrase = getPassPhrase(ctx, "", false)
+
if len(account) == 0 {
utils.Fatalf("Invalid account address '%s'", account)
}
- err = am.Unlock(common.HexToAddress(account), passphrase)
+ // Attempt to unlock the account 3 times
+ attempts := 3
+ for tries := 0; tries < attempts; tries++ {
+ msg := fmt.Sprintf("Unlocking account %s...%s | Attempt %d/%d", account[:8], account[len(account)-6:], tries+1, attempts)
+ passphrase = getPassPhrase(ctx, msg, false)
+ err = am.Unlock(common.HexToAddress(account), passphrase)
+ if err == nil {
+ break
+ }
+ }
if err != nil {
utils.Fatalf("Unlock account failed '%v'", err)
}
@@ -381,15 +399,18 @@ func startEth(ctx *cli.Context, eth *eth.Ethereum) {
am := eth.AccountManager()
account := ctx.GlobalString(utils.UnlockedAccountFlag.Name)
- if len(account) > 0 {
- if account == "primary" {
- primaryAcc, err := am.Primary()
- if err != nil {
- utils.Fatalf("no primary account: %v", err)
+ accounts := strings.Split(account, " ")
+ for _, account := range accounts {
+ if len(account) > 0 {
+ if account == "primary" {
+ primaryAcc, err := am.Primary()
+ if err != nil {
+ utils.Fatalf("no primary account: %v", err)
+ }
+ account = primaryAcc.Hex()
}
- account = primaryAcc.Hex()
+ unlockAccount(ctx, am, account)
}
- unlockAccount(ctx, am, account)
}
// Start auxiliary services if enabled.
if ctx.GlobalBool(utils.RPCEnabledFlag.Name) {
@@ -421,12 +442,12 @@ func getPassPhrase(ctx *cli.Context, desc string, confirmation bool) (passphrase
passfile := ctx.GlobalString(utils.PasswordFileFlag.Name)
if len(passfile) == 0 {
fmt.Println(desc)
- auth, err := readPassword("Passphrase: ", true)
+ auth, err := utils.PromptPassword("Passphrase: ", true)
if err != nil {
utils.Fatalf("%v", err)
}
if confirmation {
- confirm, err := readPassword("Repeat Passphrase: ", false)
+ confirm, err := utils.PromptPassword("Repeat Passphrase: ", false)
if err != nil {
utils.Fatalf("%v", err)
}
@@ -543,6 +564,25 @@ func exportchain(ctx *cli.Context) {
return
}
+func removeDb(ctx *cli.Context) {
+ confirm, err := utils.PromptConfirm("Remove local databases?")
+ if err != nil {
+ utils.Fatalf("%v", err)
+ }
+
+ if confirm {
+ fmt.Println("Removing chain and state databases...")
+ start := time.Now()
+
+ os.RemoveAll(filepath.Join(ctx.GlobalString(utils.DataDirFlag.Name), "blockchain"))
+ os.RemoveAll(filepath.Join(ctx.GlobalString(utils.DataDirFlag.Name), "state"))
+
+ fmt.Printf("Removed in %v\n", time.Since(start))
+ } else {
+ fmt.Println("Operation aborted")
+ }
+}
+
func upgradeDb(ctx *cli.Context) {
fmt.Println("Upgrade blockchain DB")
@@ -574,6 +614,7 @@ func upgradeDb(ctx *cli.Context) {
ethereum.ExtraDb().Close()
os.RemoveAll(filepath.Join(ctx.GlobalString(utils.DataDirFlag.Name), "blockchain"))
+ os.RemoveAll(filepath.Join(ctx.GlobalString(utils.DataDirFlag.Name), "state"))
ethereum, err = eth.New(cfg)
if err != nil {
@@ -665,18 +706,3 @@ func hashish(x string) bool {
_, err := strconv.Atoi(x)
return err != nil
}
-
-func readPassword(prompt string, warnTerm bool) (string, error) {
- if liner.TerminalSupported() {
- lr := liner.NewLiner()
- defer lr.Close()
- return lr.PasswordPrompt(prompt)
- }
- if warnTerm {
- fmt.Println("!! Unsupported terminal, password will be echoed.")
- }
- fmt.Print(prompt)
- input, err := bufio.NewReader(os.Stdin).ReadString('\n')
- fmt.Println()
- return input, err
-}
diff --git a/cmd/utils/cmd.go b/cmd/utils/cmd.go
index fb55a64af..39b4e46da 100644
--- a/cmd/utils/cmd.go
+++ b/cmd/utils/cmd.go
@@ -22,11 +22,13 @@
package utils
import (
+ "bufio"
"fmt"
"io"
"os"
"os/signal"
"regexp"
+ "strings"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core"
@@ -35,6 +37,7 @@ import (
"github.com/ethereum/go-ethereum/logger"
"github.com/ethereum/go-ethereum/logger/glog"
"github.com/ethereum/go-ethereum/rlp"
+ "github.com/peterh/liner"
)
var interruptCallbacks = []func(os.Signal){}
@@ -71,18 +74,45 @@ func openLogFile(Datadir string, filename string) *os.File {
return file
}
-func confirm(message string) bool {
- fmt.Println(message, "Are you sure? (y/n)")
- var r string
- fmt.Scanln(&r)
- for ; ; fmt.Scanln(&r) {
- if r == "n" || r == "y" {
- break
- } else {
- fmt.Printf("Yes or no? (%s)", r)
- }
+func PromptConfirm(prompt string) (bool, error) {
+ var (
+ input string
+ err error
+ )
+ prompt = prompt + " [y/N] "
+
+ if liner.TerminalSupported() {
+ lr := liner.NewLiner()
+ defer lr.Close()
+ input, err = lr.Prompt(prompt)
+ } else {
+ fmt.Print(prompt)
+ input, err = bufio.NewReader(os.Stdin).ReadString('\n')
+ fmt.Println()
+ }
+
+ if len(input) > 0 && strings.ToUpper(input[:1]) == "Y" {
+ return true, nil
+ } else {
+ return false, nil
+ }
+
+ return false, err
+}
+
+func PromptPassword(prompt string, warnTerm bool) (string, error) {
+ if liner.TerminalSupported() {
+ lr := liner.NewLiner()
+ defer lr.Close()
+ return lr.PasswordPrompt(prompt)
+ }
+ if warnTerm {
+ fmt.Println("!! Unsupported terminal, password will be echoed.")
}
- return r == "y"
+ fmt.Print(prompt)
+ input, err := bufio.NewReader(os.Stdin).ReadString('\n')
+ fmt.Println()
+ return input, err
}
func initDataDir(Datadir string) {
diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go
index 6ec4fdc55..cb774aa5b 100644
--- a/cmd/utils/flags.go
+++ b/cmd/utils/flags.go
@@ -112,6 +112,10 @@ var (
Name: "mine",
Usage: "Enable mining",
}
+ AutoDAGFlag = cli.BoolFlag{
+ Name: "autodag",
+ Usage: "Enable automatic DAG pregeneration",
+ }
EtherbaseFlag = cli.StringFlag{
Name: "etherbase",
Usage: "Public address for block mining rewards. By default the address of your primary account is used",
@@ -313,6 +317,8 @@ func MakeEthConfig(clientID, version string, ctx *cli.Context) *eth.Config {
Dial: true,
BootNodes: ctx.GlobalString(BootnodesFlag.Name),
GasPrice: common.String2Big(ctx.GlobalString(GasPriceFlag.Name)),
+ SolcPath: ctx.GlobalString(SolcPathFlag.Name),
+ AutoDAG: ctx.GlobalBool(AutoDAGFlag.Name) || ctx.GlobalBool(MiningEnabledFlag.Name),
}
}
@@ -336,8 +342,8 @@ func GetChain(ctx *cli.Context) (*core.ChainManager, common.Database, common.Dat
}
eventMux := new(event.TypeMux)
- chainManager := core.NewChainManager(blockDb, stateDb, eventMux)
pow := ethash.New()
+ chainManager := core.NewChainManager(blockDb, stateDb, pow, eventMux)
txPool := core.NewTxPool(eventMux, chainManager.State, chainManager.GasLimit)
blockProcessor := core.NewBlockProcessor(stateDb, extraDb, pow, txPool, chainManager, eventMux)
chainManager.SetProcessor(blockProcessor)
diff --git a/common/compiler/solidity.go b/common/compiler/solidity.go
index 6790f9a1d..0cfd41c95 100644
--- a/common/compiler/solidity.go
+++ b/common/compiler/solidity.go
@@ -18,7 +18,8 @@ import (
)
const (
- flair = "Christian <c@ethdev.com> and Lefteris <lefteris@ethdev.com> (c) 2014-2015"
+ // flair = "Christian <c@ethdev.com> and Lefteris <lefteris@ethdev.com> (c) 2014-2015"
+ flair = ""
languageVersion = "0"
)
@@ -91,7 +92,7 @@ func (sol *Solidity) Version() string {
return sol.version
}
-func (sol *Solidity) Compile(source string) (contract *Contract, err error) {
+func (sol *Solidity) Compile(source string) (contracts map[string]*Contract, err error) {
if len(source) == 0 {
err = fmt.Errorf("empty source")
@@ -122,58 +123,61 @@ func (sol *Solidity) Compile(source string) (contract *Contract, err error) {
err = fmt.Errorf("solc error: missing code output")
return
}
- if len(matches) > 1 {
- err = fmt.Errorf("multi-contract sources are not supported")
- return
- }
- _, file := filepath.Split(matches[0])
- base := strings.Split(file, ".")[0]
-
- codeFile := filepath.Join(wd, base+".binary")
- abiDefinitionFile := filepath.Join(wd, base+".abi")
- userDocFile := filepath.Join(wd, base+".docuser")
- developerDocFile := filepath.Join(wd, base+".docdev")
- code, err := ioutil.ReadFile(codeFile)
- if err != nil {
- err = fmt.Errorf("error reading compiler output for code: %v", err)
- return
- }
- abiDefinitionJson, err := ioutil.ReadFile(abiDefinitionFile)
- if err != nil {
- err = fmt.Errorf("error reading compiler output for abiDefinition: %v", err)
- return
- }
- var abiDefinition interface{}
- err = json.Unmarshal(abiDefinitionJson, &abiDefinition)
-
- userDocJson, err := ioutil.ReadFile(userDocFile)
- if err != nil {
- err = fmt.Errorf("error reading compiler output for userDoc: %v", err)
- return
- }
- var userDoc interface{}
- err = json.Unmarshal(userDocJson, &userDoc)
-
- developerDocJson, err := ioutil.ReadFile(developerDocFile)
- if err != nil {
- err = fmt.Errorf("error reading compiler output for developerDoc: %v", err)
- return
- }
- var developerDoc interface{}
- err = json.Unmarshal(developerDocJson, &developerDoc)
-
- contract = &Contract{
- Code: string(code),
- Info: ContractInfo{
- Source: source,
- Language: "Solidity",
- LanguageVersion: languageVersion,
- CompilerVersion: sol.version,
- AbiDefinition: abiDefinition,
- UserDoc: userDoc,
- DeveloperDoc: developerDoc,
- },
+ contracts = make(map[string]*Contract)
+ for _, path := range matches {
+ _, file := filepath.Split(path)
+ base := strings.Split(file, ".")[0]
+
+ codeFile := filepath.Join(wd, base+".binary")
+ abiDefinitionFile := filepath.Join(wd, base+".abi")
+ userDocFile := filepath.Join(wd, base+".docuser")
+ developerDocFile := filepath.Join(wd, base+".docdev")
+
+ var code, abiDefinitionJson, userDocJson, developerDocJson []byte
+ code, err = ioutil.ReadFile(codeFile)
+ if err != nil {
+ err = fmt.Errorf("error reading compiler output for code: %v", err)
+ return
+ }
+ abiDefinitionJson, err = ioutil.ReadFile(abiDefinitionFile)
+ if err != nil {
+ err = fmt.Errorf("error reading compiler output for abiDefinition: %v", err)
+ return
+ }
+ var abiDefinition interface{}
+ err = json.Unmarshal(abiDefinitionJson, &abiDefinition)
+
+ userDocJson, err = ioutil.ReadFile(userDocFile)
+ if err != nil {
+ err = fmt.Errorf("error reading compiler output for userDoc: %v", err)
+ return
+ }
+ var userDoc interface{}
+ err = json.Unmarshal(userDocJson, &userDoc)
+
+ developerDocJson, err = ioutil.ReadFile(developerDocFile)
+ if err != nil {
+ err = fmt.Errorf("error reading compiler output for developerDoc: %v", err)
+ return
+ }
+ var developerDoc interface{}
+ err = json.Unmarshal(developerDocJson, &developerDoc)
+
+ contract := &Contract{
+ Code: "0x" + string(code),
+ Info: ContractInfo{
+ Source: source,
+ Language: "Solidity",
+ LanguageVersion: languageVersion,
+ CompilerVersion: sol.version,
+ AbiDefinition: abiDefinition,
+ UserDoc: userDoc,
+ DeveloperDoc: developerDoc,
+ },
+ }
+
+ contracts[base] = contract
}
return
diff --git a/common/compiler/solidity_test.go b/common/compiler/solidity_test.go
index 68e54a7ec..46f733e59 100644
--- a/common/compiler/solidity_test.go
+++ b/common/compiler/solidity_test.go
@@ -9,7 +9,7 @@ import (
"github.com/ethereum/go-ethereum/common"
)
-const solcVersion = "0.9.17"
+const solcVersion = "0.9.23"
var (
source = `
@@ -20,37 +20,45 @@ contract test {
}
}
`
- code = "605280600c6000396000f3006000357c010000000000000000000000000000000000000000000000000000000090048063c6888fa114602e57005b60376004356041565b8060005260206000f35b6000600782029050604d565b91905056"
- info = `{"source":"\ncontract test {\n /// @notice Will multiply ` + "`a`" + ` by 7.\n function multiply(uint a) returns(uint d) {\n return a * 7;\n }\n}\n","language":"Solidity","languageVersion":"0","compilerVersion":"0.9.17","abiDefinition":[{"constant":false,"inputs":[{"name":"a","type":"uint256"}],"name":"multiply","outputs":[{"name":"d","type":"uint256"}],"type":"function"}],"userDoc":{"methods":{"multiply(uint256)":{"notice":"Will multiply ` + "`a`" + ` by 7."}}},"developerDoc":{"methods":{}}}`
+ code = "0x605880600c6000396000f3006000357c010000000000000000000000000000000000000000000000000000000090048063c6888fa114602e57005b603d6004803590602001506047565b8060005260206000f35b60006007820290506053565b91905056"
+ info = `{"source":"\ncontract test {\n /// @notice Will multiply ` + "`a`" + ` by 7.\n function multiply(uint a) returns(uint d) {\n return a * 7;\n }\n}\n","language":"Solidity","languageVersion":"0","compilerVersion":"0.9.23","abiDefinition":[{"constant":false,"inputs":[{"name":"a","type":"uint256"}],"name":"multiply","outputs":[{"name":"d","type":"uint256"}],"type":"function"}],"userDoc":{"methods":{"multiply(uint256)":{"notice":"Will multiply ` + "`a`" + ` by 7."}}},"developerDoc":{"methods":{}}}`
- infohash = common.HexToHash("0x834075768a68e500e459b9c3213750c84de3df47156500cb01bb664d3f88c60a")
+ infohash = common.HexToHash("0xea782f674eb898e477c20e8a7cf11c2c28b09fa68b5278732104f7a101aed255")
)
func TestCompiler(t *testing.T) {
sol, err := New("")
if err != nil {
- t.Skip("no solc installed")
+ t.Skip("solc not found: skip")
+ } else if sol.Version() != solcVersion {
+ t.Logf("WARNING: a newer version of solc found (%v, expect %v)", sol.Version(), solcVersion)
}
- contract, err := sol.Compile(source)
+ contracts, err := sol.Compile(source)
if err != nil {
- t.Errorf("error compiling source. result %v: %v", contract, err)
+ t.Errorf("error compiling source. result %v: %v", contracts, err)
return
}
- /*
- if contract.Code != code {
- t.Errorf("wrong code, expected\n%s, got\n%s", code, contract.Code)
- }
- */
+
+ if len(contracts) != 1 {
+ t.Errorf("one contract expected, got\n%s", len(contracts))
+ }
+
+ if contracts["test"].Code != code {
+ t.Errorf("wrong code, expected\n%s, got\n%s", code, contracts["test"].Code)
+ }
+
}
func TestCompileError(t *testing.T) {
sol, err := New("")
if err != nil || sol.version != solcVersion {
- t.Skip("no solc installed")
+ t.Skip("solc not found: skip")
+ } else if sol.Version() != solcVersion {
+ t.Logf("WARNING: a newer version of solc found (%v, expect %v)", sol.Version(), solcVersion)
}
- contract, err := sol.Compile(source[2:])
+ contracts, err := sol.Compile(source[2:])
if err == nil {
- t.Errorf("error expected compiling source. got none. result %v", contract)
+ t.Errorf("error expected compiling source. got none. result %v", contracts)
return
}
}
@@ -78,11 +86,11 @@ func TestExtractInfo(t *testing.T) {
os.Remove(filename)
cinfohash, err := ExtractInfo(contract, filename)
if err != nil {
- t.Errorf("%v", err)
+ t.Errorf("error extracting info: %v", err)
}
got, err := ioutil.ReadFile(filename)
if err != nil {
- t.Errorf("%v", err)
+ t.Errorf("error reading '%v': %v", filename, err)
}
if string(got) != info {
t.Errorf("incorrect info.json extracted, expected:\n%s\ngot\n%s", info, string(got))
diff --git a/core/block_cache.go b/core/block_cache.go
index eeef5c41d..0c747d37c 100644
--- a/core/block_cache.go
+++ b/core/block_cache.go
@@ -85,6 +85,9 @@ func (bc *BlockCache) Get(hash common.Hash) *types.Block {
}
func (bc *BlockCache) Has(hash common.Hash) bool {
+ bc.mu.RLock()
+ defer bc.mu.RUnlock()
+
_, ok := bc.blocks[hash]
return ok
}
diff --git a/core/block_processor.go b/core/block_processor.go
index cae618b39..3f10e5efd 100644
--- a/core/block_processor.go
+++ b/core/block_processor.go
@@ -24,6 +24,8 @@ const (
BlockChainVersion = 2
)
+var receiptsPre = []byte("receipts-")
+
type BlockProcessor struct {
db common.Database
extraDb common.Database
@@ -189,7 +191,7 @@ func (sm *BlockProcessor) processWithParent(block, parent *types.Block) (logs st
state := state.New(parent.Root(), sm.db)
// Block validation
- if err = sm.ValidateHeader(block.Header(), parent.Header()); err != nil {
+ if err = sm.ValidateHeader(block.Header(), parent.Header(), false); err != nil {
return
}
@@ -263,13 +265,27 @@ func (sm *BlockProcessor) processWithParent(block, parent *types.Block) (logs st
putTx(sm.extraDb, tx, block, uint64(i))
}
+ receiptsRlp := block.Receipts().RlpEncode()
+ sm.extraDb.Put(append(receiptsPre, block.Hash().Bytes()...), receiptsRlp)
+
return state.Logs(), nil
}
+func (self *BlockProcessor) GetBlockReceipts(bhash common.Hash) (receipts types.Receipts, err error) {
+ var rdata []byte
+ rdata, err = self.extraDb.Get(append(receiptsPre, bhash[:]...))
+
+ if err == nil {
+ err = rlp.DecodeBytes(rdata, &receipts)
+ }
+ return
+
+}
+
// Validates the current block. Returns an error if the block was invalid,
// an uncle or anything that isn't on the current block chain.
// Validation validates easy over difficult (dagger takes longer time = difficult)
-func (sm *BlockProcessor) ValidateHeader(block, parent *types.Header) error {
+func (sm *BlockProcessor) ValidateHeader(block, parent *types.Header, checkPow bool) error {
if big.NewInt(int64(len(block.Extra))).Cmp(params.MaximumExtraDataSize) == 1 {
return fmt.Errorf("Block extra data too long (%d)", len(block.Extra))
}
@@ -300,9 +316,11 @@ func (sm *BlockProcessor) ValidateHeader(block, parent *types.Header) error {
return BlockEqualTSErr //ValidationError("Block timestamp equal or less than previous block (%v - %v)", block.Time, parent.Time)
}
- // Verify the nonce of the block. Return an error if it's not valid
- if !sm.Pow.Verify(types.NewBlockWithHeader(block)) {
- return ValidationError("Block's nonce is invalid (= %x)", block.Nonce)
+ if checkPow {
+ // Verify the nonce of the block. Return an error if it's not valid
+ if !sm.Pow.Verify(types.NewBlockWithHeader(block)) {
+ return ValidationError("Block's nonce is invalid (= %x)", block.Nonce)
+ }
}
return nil
@@ -351,6 +369,13 @@ func (sm *BlockProcessor) VerifyUncles(statedb *state.StateDB, block, parent *ty
uncles.Add(hash)
if ancestors.Has(hash) {
+ branch := fmt.Sprintf(" O - %x\n |\n", block.Hash())
+ ancestors.Each(func(item interface{}) bool {
+ branch += fmt.Sprintf(" O - %x\n |\n", hash)
+ return true
+ })
+ glog.Infoln(branch)
+
return UncleError("uncle[%d](%x) is ancestor", i, hash[:4])
}
@@ -358,7 +383,7 @@ func (sm *BlockProcessor) VerifyUncles(statedb *state.StateDB, block, parent *ty
return UncleError("uncle[%d](%x)'s parent unknown (%x)", i, hash[:4], uncle.ParentHash[0:4])
}
- if err := sm.ValidateHeader(uncle, ancestorHeaders[uncle.ParentHash]); err != nil {
+ if err := sm.ValidateHeader(uncle, ancestorHeaders[uncle.ParentHash], true); err != nil {
return ValidationError(fmt.Sprintf("uncle[%d](%x) header invalid: %v", i, hash[:4], err))
}
}
diff --git a/core/block_processor_test.go b/core/block_processor_test.go
index 02524a4c1..e0aa5fb4c 100644
--- a/core/block_processor_test.go
+++ b/core/block_processor_test.go
@@ -14,7 +14,7 @@ func proc() (*BlockProcessor, *ChainManager) {
db, _ := ethdb.NewMemDatabase()
var mux event.TypeMux
- chainMan := NewChainManager(db, db, &mux)
+ chainMan := NewChainManager(db, db, thePow(), &mux)
return NewBlockProcessor(db, db, ezp.New(), nil, chainMan, &mux), chainMan
}
@@ -24,13 +24,13 @@ func TestNumber(t *testing.T) {
block1.Header().Number = big.NewInt(3)
block1.Header().Time--
- err := bp.ValidateHeader(block1.Header(), chain.Genesis().Header())
+ err := bp.ValidateHeader(block1.Header(), chain.Genesis().Header(), false)
if err != BlockNumberErr {
t.Errorf("expected block number error %v", err)
}
block1 = chain.NewBlock(common.Address{})
- err = bp.ValidateHeader(block1.Header(), chain.Genesis().Header())
+ err = bp.ValidateHeader(block1.Header(), chain.Genesis().Header(), false)
if err == BlockNumberErr {
t.Errorf("didn't expect block number error")
}
diff --git a/core/chain_makers.go b/core/chain_makers.go
index acf7b39cc..44f17cc33 100644
--- a/core/chain_makers.go
+++ b/core/chain_makers.go
@@ -109,7 +109,7 @@ func makeChain(bman *BlockProcessor, parent *types.Block, max int, db common.Dat
// Effectively a fork factory
func newChainManager(block *types.Block, eventMux *event.TypeMux, db common.Database) *ChainManager {
genesis := GenesisBlock(db)
- bc := &ChainManager{blockDb: db, stateDb: db, genesisBlock: genesis, eventMux: eventMux}
+ bc := &ChainManager{blockDb: db, stateDb: db, genesisBlock: genesis, eventMux: eventMux, pow: FakePow{}}
bc.txState = state.ManageState(state.New(genesis.Root(), db))
bc.futureBlocks = NewBlockCache(1000)
if block == nil {
diff --git a/core/chain_manager.go b/core/chain_manager.go
index 2e8eb927d..4fb7506e5 100644
--- a/core/chain_manager.go
+++ b/core/chain_manager.go
@@ -5,6 +5,7 @@ import (
"fmt"
"io"
"math/big"
+ "runtime"
"sync"
"time"
@@ -15,6 +16,7 @@ import (
"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"
"github.com/ethereum/go-ethereum/rlp"
)
@@ -83,8 +85,9 @@ type ChainManager struct {
eventMux *event.TypeMux
genesisBlock *types.Block
// Last known total difficulty
- mu sync.RWMutex
- tsmu sync.RWMutex
+ mu sync.RWMutex
+ chainmu sync.RWMutex
+ tsmu sync.RWMutex
td *big.Int
currentBlock *types.Block
@@ -99,9 +102,11 @@ type ChainManager struct {
quit chan struct{}
wg sync.WaitGroup
+
+ pow pow.PoW
}
-func NewChainManager(blockDb, stateDb common.Database, mux *event.TypeMux) *ChainManager {
+func NewChainManager(blockDb, stateDb common.Database, pow pow.PoW, mux *event.TypeMux) *ChainManager {
bc := &ChainManager{
blockDb: blockDb,
stateDb: stateDb,
@@ -109,6 +114,7 @@ func NewChainManager(blockDb, stateDb common.Database, mux *event.TypeMux) *Chai
eventMux: mux,
quit: make(chan struct{}),
cache: NewBlockCache(blockCacheLimit),
+ pow: pow,
}
bc.setLastState()
@@ -342,7 +348,7 @@ func (self *ChainManager) Export(w io.Writer) error {
last := self.currentBlock.NumberU64()
- for nr := uint64(0); nr <= last; nr++ {
+ for nr := uint64(1); nr <= last; nr++ {
block := self.GetBlockByNumber(nr)
if block == nil {
return fmt.Errorf("export failed on #%d: not found", nr)
@@ -406,9 +412,11 @@ func (self *ChainManager) GetBlockHashesFromHash(hash common.Hash, max uint64) (
}
func (self *ChainManager) GetBlock(hash common.Hash) *types.Block {
- if block := self.cache.Get(hash); block != nil {
- return block
- }
+ /*
+ if block := self.cache.Get(hash); block != nil {
+ return block
+ }
+ */
data, _ := self.blockDb.Get(append(blockHashPre, hash[:]...))
if len(data) == 0 {
@@ -518,6 +526,9 @@ func (self *ChainManager) InsertChain(chain types.Blocks) (int, error) {
self.wg.Add(1)
defer self.wg.Done()
+ self.chainmu.Lock()
+ defer self.chainmu.Unlock()
+
// A queued approach to delivering events. This is generally faster than direct delivery and requires much less mutex acquiring.
var (
queue = make([]interface{}, len(chain))
@@ -525,10 +536,19 @@ func (self *ChainManager) InsertChain(chain types.Blocks) (int, error) {
stats struct{ queued, processed, ignored int }
tstart = time.Now()
)
+
+ // check the nonce in parallel to the block processing
+ // this speeds catching up significantly
+ nonceErrCh := make(chan error)
+ go func() {
+ nonceErrCh <- verifyNonces(self.pow, chain)
+ }()
+
for i, block := range chain {
if block == nil {
continue
}
+
// Setting block.Td regardless of error (known for example) prevents errors down the line
// in the protocol handler
block.Td = new(big.Int).Set(CalcTD(block, self.GetBlock(block.ParentHash())))
@@ -542,7 +562,6 @@ func (self *ChainManager) InsertChain(chain types.Blocks) (int, error) {
continue
}
- block.Td = new(big.Int)
// Do not penelise on future block. We'll need a block queue eventually that will queue
// future block for future use
if err == BlockFutureErr {
@@ -559,68 +578,67 @@ func (self *ChainManager) InsertChain(chain types.Blocks) (int, error) {
continue
}
- h := block.Header()
-
- glog.V(logger.Error).Infof("INVALID block #%v (%x)\n", h.Number, h.Hash().Bytes())
- glog.V(logger.Error).Infoln(err)
- glog.V(logger.Debug).Infoln(block)
+ blockErr(block, err)
return i, err
}
- self.mu.Lock()
- {
- cblock := self.currentBlock
- // Write block to database. Eventually we'll have to improve on this and throw away blocks that are
- // not in the canonical chain.
- self.write(block)
- // Compare the TD of the last known block in the canonical chain to make sure it's greater.
- // At this point it's possible that a different chain (fork) becomes the new canonical chain.
- if block.Td.Cmp(self.td) > 0 {
- // chain fork
- if block.ParentHash() != cblock.Hash() {
- // during split we merge two different chains and create the new canonical chain
- self.merge(cblock, block)
-
- queue[i] = ChainSplitEvent{block, logs}
- queueEvent.splitCount++
- }
-
- self.setTotalDifficulty(block.Td)
- self.insert(block)
+ cblock := self.currentBlock
+ // Write block to database. Eventually we'll have to improve on this and throw away blocks that are
+ // not in the canonical chain.
+ self.write(block)
+ // Compare the TD of the last known block in the canonical chain to make sure it's greater.
+ // At this point it's possible that a different chain (fork) becomes the new canonical chain.
+ if block.Td.Cmp(self.td) > 0 {
+ // chain fork
+ if block.ParentHash() != cblock.Hash() {
+ // during split we merge two different chains and create the new canonical chain
+ self.merge(cblock, block)
+
+ queue[i] = ChainSplitEvent{block, logs}
+ queueEvent.splitCount++
+ }
- jsonlogger.LogJson(&logger.EthChainNewHead{
- BlockHash: block.Hash().Hex(),
- BlockNumber: block.Number(),
- ChainHeadHash: cblock.Hash().Hex(),
- BlockPrevHash: block.ParentHash().Hex(),
- })
+ self.setTotalDifficulty(block.Td)
+ self.insert(block)
- self.setTransState(state.New(block.Root(), self.stateDb))
- self.txState.SetState(state.New(block.Root(), self.stateDb))
+ jsonlogger.LogJson(&logger.EthChainNewHead{
+ BlockHash: block.Hash().Hex(),
+ BlockNumber: block.Number(),
+ ChainHeadHash: cblock.Hash().Hex(),
+ BlockPrevHash: block.ParentHash().Hex(),
+ })
- queue[i] = ChainEvent{block, block.Hash(), logs}
- queueEvent.canonicalCount++
+ self.setTransState(state.New(block.Root(), self.stateDb))
+ self.txState.SetState(state.New(block.Root(), self.stateDb))
- if glog.V(logger.Debug) {
- glog.Infof("[%v] inserted block #%d (%d TXs %d UNCs) (%x...)\n", time.Now().UnixNano(), block.Number(), len(block.Transactions()), len(block.Uncles()), block.Hash().Bytes()[0:4])
- }
- } else {
- if glog.V(logger.Detail) {
- glog.Infof("inserted forked block #%d (TD=%v) (%d TXs %d UNCs) (%x...)\n", block.Number(), block.Difficulty(), len(block.Transactions()), len(block.Uncles()), block.Hash().Bytes()[0:4])
- }
+ queue[i] = ChainEvent{block, block.Hash(), logs}
+ queueEvent.canonicalCount++
- queue[i] = ChainSideEvent{block, logs}
- queueEvent.sideCount++
+ if glog.V(logger.Debug) {
+ glog.Infof("[%v] inserted block #%d (%d TXs %d UNCs) (%x...)\n", time.Now().UnixNano(), block.Number(), len(block.Transactions()), len(block.Uncles()), block.Hash().Bytes()[0:4])
+ }
+ } else {
+ if glog.V(logger.Detail) {
+ glog.Infof("inserted forked block #%d (TD=%v) (%d TXs %d UNCs) (%x...)\n", block.Number(), block.Difficulty(), len(block.Transactions()), len(block.Uncles()), block.Hash().Bytes()[0:4])
}
- self.futureBlocks.Delete(block.Hash())
+
+ queue[i] = ChainSideEvent{block, logs}
+ queueEvent.sideCount++
}
- self.mu.Unlock()
+ self.futureBlocks.Delete(block.Hash())
stats.processed++
}
+ // check and wait for the nonce error channel and
+ // make sure no nonce error was thrown in the process
+ err := <-nonceErrCh
+ if err != nil {
+ return 0, err
+ }
+
if (stats.queued > 0 || stats.processed > 0 || stats.ignored > 0) && bool(glog.V(logger.Info)) {
tend := time.Since(tstart)
start, end := chain[0], chain[len(chain)-1]
@@ -719,3 +737,63 @@ out:
}
}
}
+
+func blockErr(block *types.Block, err error) {
+ h := block.Header()
+ glog.V(logger.Error).Infof("INVALID block #%v (%x)\n", h.Number, h.Hash().Bytes())
+ glog.V(logger.Error).Infoln(err)
+ glog.V(logger.Debug).Infoln(block)
+}
+
+// verifyNonces verifies nonces of the given blocks in parallel and returns
+// an error if one of the blocks nonce verifications failed.
+func verifyNonces(pow pow.PoW, blocks []*types.Block) error {
+ // Spawn a few workers. They listen for blocks on the in channel
+ // and send results on done. The workers will exit in the
+ // background when in is closed.
+ var (
+ in = make(chan *types.Block)
+ done = make(chan error, runtime.GOMAXPROCS(0))
+ )
+ defer close(in)
+ for i := 0; i < cap(done); i++ {
+ go verifyNonce(pow, in, done)
+ }
+ // Feed blocks to the workers, aborting at the first invalid nonce.
+ var (
+ running, i int
+ block *types.Block
+ sendin = in
+ )
+ for i < len(blocks) || running > 0 {
+ if i == len(blocks) {
+ // Disable sending to in.
+ sendin = nil
+ } else {
+ block = blocks[i]
+ i++
+ }
+ select {
+ case sendin <- block:
+ running++
+ case err := <-done:
+ running--
+ if err != nil {
+ return err
+ }
+ }
+ }
+ return nil
+}
+
+// verifyNonce is a worker for the verifyNonces method. It will run until
+// in is closed.
+func verifyNonce(pow pow.PoW, in <-chan *types.Block, done chan<- error) {
+ for block := range in {
+ if !pow.Verify(block) {
+ done <- ValidationError("Block(#%v) nonce is invalid (= %x)", block.Number(), block.Nonce)
+ } else {
+ done <- nil
+ }
+ }
+}
diff --git a/core/chain_manager_test.go b/core/chain_manager_test.go
index b5155e223..7dc7358c0 100644
--- a/core/chain_manager_test.go
+++ b/core/chain_manager_test.go
@@ -9,11 +9,13 @@ import (
"strconv"
"testing"
+ "github.com/ethereum/ethash"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/state"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/ethdb"
"github.com/ethereum/go-ethereum/event"
+ "github.com/ethereum/go-ethereum/pow"
"github.com/ethereum/go-ethereum/rlp"
)
@@ -21,6 +23,11 @@ func init() {
runtime.GOMAXPROCS(runtime.NumCPU())
}
+func thePow() pow.PoW {
+ pow, _ := ethash.NewForTesting()
+ return pow
+}
+
// Test fork of length N starting from block i
func testFork(t *testing.T, bman *BlockProcessor, i, N int, f func(td1, td2 *big.Int)) {
// switch databases to process the new chain
@@ -259,7 +266,7 @@ func TestChainInsertions(t *testing.T) {
}
var eventMux event.TypeMux
- chainMan := NewChainManager(db, db, &eventMux)
+ chainMan := NewChainManager(db, db, thePow(), &eventMux)
txPool := NewTxPool(&eventMux, chainMan.State, func() *big.Int { return big.NewInt(100000000) })
blockMan := NewBlockProcessor(db, db, nil, txPool, chainMan, &eventMux)
chainMan.SetProcessor(blockMan)
@@ -305,7 +312,7 @@ func TestChainMultipleInsertions(t *testing.T) {
}
}
var eventMux event.TypeMux
- chainMan := NewChainManager(db, db, &eventMux)
+ chainMan := NewChainManager(db, db, thePow(), &eventMux)
txPool := NewTxPool(&eventMux, chainMan.State, func() *big.Int { return big.NewInt(100000000) })
blockMan := NewBlockProcessor(db, db, nil, txPool, chainMan, &eventMux)
chainMan.SetProcessor(blockMan)
@@ -334,7 +341,7 @@ func TestGetAncestors(t *testing.T) {
db, _ := ethdb.NewMemDatabase()
var eventMux event.TypeMux
- chainMan := NewChainManager(db, db, &eventMux)
+ chainMan := NewChainManager(db, db, thePow(), &eventMux)
chain, err := loadChain("valid1", t)
if err != nil {
fmt.Println(err)
@@ -372,7 +379,7 @@ func makeChainWithDiff(genesis *types.Block, d []int, seed byte) []*types.Block
func chm(genesis *types.Block, db common.Database) *ChainManager {
var eventMux event.TypeMux
- bc := &ChainManager{blockDb: db, stateDb: db, genesisBlock: genesis, eventMux: &eventMux}
+ bc := &ChainManager{blockDb: db, stateDb: db, genesisBlock: genesis, eventMux: &eventMux, pow: FakePow{}}
bc.cache = NewBlockCache(100)
bc.futureBlocks = NewBlockCache(100)
bc.processor = bproc{}
@@ -383,6 +390,7 @@ func chm(genesis *types.Block, db common.Database) *ChainManager {
}
func TestReorgLongest(t *testing.T) {
+ t.Skip("skipped while cache is removed")
db, _ := ethdb.NewMemDatabase()
genesis := GenesisBlock(db)
bc := chm(genesis, db)
@@ -402,6 +410,7 @@ func TestReorgLongest(t *testing.T) {
}
func TestReorgShortest(t *testing.T) {
+ t.Skip("skipped while cache is removed")
db, _ := ethdb.NewMemDatabase()
genesis := GenesisBlock(db)
bc := chm(genesis, db)
diff --git a/core/execution.go b/core/execution.go
index 9adf98032..522c90449 100644
--- a/core/execution.go
+++ b/core/execution.go
@@ -38,6 +38,12 @@ func (self *Execution) Create(caller vm.ContextRef) (ret []byte, err error, acco
code := self.input
self.input = nil
ret, err = self.exec(nil, code, caller)
+ // Here we get an error if we run into maximum stack depth,
+ // See: https://github.com/ethereum/yellowpaper/pull/131
+ // and YP definitions for CREATE instruction
+ if err != nil {
+ return nil, err, nil
+ }
account = self.env.State().GetStateObject(*self.address)
return
}
diff --git a/core/vm/memory.go b/core/vm/memory.go
index b77d486eb..d20aa9591 100644
--- a/core/vm/memory.go
+++ b/core/vm/memory.go
@@ -49,6 +49,18 @@ func (self *Memory) Get(offset, size int64) (cpy []byte) {
return
}
+func (self *Memory) GetPtr(offset, size int64) []byte {
+ if size == 0 {
+ return nil
+ }
+
+ if len(self.store) > int(offset) {
+ return self.store[offset : offset+size]
+ }
+
+ return nil
+}
+
func (m *Memory) Len() int {
return len(m.store)
}
diff --git a/core/vm/vm.go b/core/vm/vm.go
index 927b67293..35fa19d03 100644
--- a/core/vm/vm.go
+++ b/core/vm/vm.go
@@ -695,7 +695,7 @@ func (self *Vm) Run(context *Context, callData []byte) (ret []byte, err error) {
self.Printf("resume %x (%v)", context.Address(), context.Gas)
case RETURN:
offset, size := stack.pop(), stack.pop()
- ret := mem.Get(offset.Int64(), size.Int64())
+ ret := mem.GetPtr(offset.Int64(), size.Int64())
self.Printf(" => [%v, %v] (%d) 0x%x", offset, size, len(ret), ret).Endl()
diff --git a/eth/backend.go b/eth/backend.go
index a7107f8d8..938071fc7 100644
--- a/eth/backend.go
+++ b/eth/backend.go
@@ -14,6 +14,7 @@ import (
"github.com/ethereum/ethash"
"github.com/ethereum/go-ethereum/accounts"
"github.com/ethereum/go-ethereum/common"
+ "github.com/ethereum/go-ethereum/common/compiler"
"github.com/ethereum/go-ethereum/core"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/core/vm"
@@ -30,6 +31,14 @@ import (
"github.com/ethereum/go-ethereum/whisper"
)
+const (
+ epochLength = 30000
+ ethashRevision = 23
+
+ autoDAGcheckInterval = 10 * time.Hour
+ autoDAGepochHeight = epochLength / 2
+)
+
var (
jsonlogger = logger.NewJsonLogger()
@@ -59,6 +68,7 @@ type Config struct {
LogJSON string
VmDebug bool
NatSpec bool
+ AutoDAG bool
MaxPeers int
MaxPendingPeers int
@@ -79,6 +89,7 @@ type Config struct {
GasPrice *big.Int
MinerThreads int
AccountManager *accounts.Manager
+ SolcPath string
// NewDB is used to create databases.
// If nil, the default is to create leveldb databases on disk.
@@ -181,6 +192,8 @@ type Ethereum struct {
pow *ethash.Ethash
protocolManager *ProtocolManager
downloader *downloader.Downloader
+ SolcPath string
+ solc *compiler.Solidity
net *p2p.Server
eventMux *event.TypeMux
@@ -193,6 +206,8 @@ type Ethereum struct {
MinerThreads int
NatSpec bool
DataDir string
+ AutoDAG bool
+ autodagquit chan bool
etherbase common.Address
clientVersion string
ethVersionId int
@@ -209,7 +224,7 @@ func New(config *Config) (*Ethereum, error) {
// Let the database take 3/4 of the max open files (TODO figure out a way to get the actual limit of the open files)
const dbCount = 3
- ethdb.OpenFileLimit = 256 / (dbCount + 1)
+ ethdb.OpenFileLimit = 128 / (dbCount + 1)
newdb := config.NewDB
if newdb == nil {
@@ -264,11 +279,13 @@ func New(config *Config) (*Ethereum, error) {
netVersionId: config.NetworkId,
NatSpec: config.NatSpec,
MinerThreads: config.MinerThreads,
+ SolcPath: config.SolcPath,
+ AutoDAG: config.AutoDAG,
}
- eth.chainManager = core.NewChainManager(blockDb, stateDb, eth.EventMux())
- eth.downloader = downloader.New(eth.EventMux(), eth.chainManager.HasBlock, eth.chainManager.GetBlock)
eth.pow = ethash.New()
+ eth.chainManager = core.NewChainManager(blockDb, stateDb, eth.pow, eth.EventMux())
+ eth.downloader = downloader.New(eth.EventMux(), eth.chainManager.HasBlock, eth.chainManager.GetBlock)
eth.txPool = core.NewTxPool(eth.EventMux(), eth.chainManager.State, eth.chainManager.GasLimit)
eth.blockProcessor = core.NewBlockProcessor(stateDb, extraDb, eth.pow, eth.txPool, eth.chainManager, eth.EventMux())
eth.chainManager.SetProcessor(eth.blockProcessor)
@@ -443,6 +460,10 @@ func (s *Ethereum) Start() error {
// periodically flush databases
go s.syncDatabases()
+ if s.AutoDAG {
+ s.StartAutoDAG()
+ }
+
// Start services
go s.txPool.Start()
s.protocolManager.Start()
@@ -521,6 +542,7 @@ func (s *Ethereum) Stop() {
if s.whisper != nil {
s.whisper.Stop()
}
+ s.StopAutoDAG()
glog.V(logger.Info).Infoln("Server stopped")
close(s.shutdownChan)
@@ -554,6 +576,77 @@ func (self *Ethereum) syncAccounts(tx *types.Transaction) {
}
}
+// StartAutoDAG() spawns a go routine that checks the DAG every autoDAGcheckInterval
+// by default that is 10 times per epoch
+// in epoch n, if we past autoDAGepochHeight within-epoch blocks,
+// it calls ethash.MakeDAG to pregenerate the DAG for the next epoch n+1
+// if it does not exist yet as well as remove the DAG for epoch n-1
+// the loop quits if autodagquit channel is closed, it can safely restart and
+// stop any number of times.
+// For any more sophisticated pattern of DAG generation, use CLI subcommand
+// makedag
+func (self *Ethereum) StartAutoDAG() {
+ if self.autodagquit != nil {
+ return // already started
+ }
+ go func() {
+ glog.V(logger.Info).Infof("Automatic pregeneration of ethash DAG ON (ethash dir: %s)", ethash.DefaultDir)
+ var nextEpoch uint64
+ timer := time.After(0)
+ self.autodagquit = make(chan bool)
+ for {
+ select {
+ case <-timer:
+ glog.V(logger.Info).Infof("checking DAG (ethash dir: %s)", ethash.DefaultDir)
+ currentBlock := self.ChainManager().CurrentBlock().NumberU64()
+ thisEpoch := currentBlock / epochLength
+ if nextEpoch <= thisEpoch {
+ if currentBlock%epochLength > autoDAGepochHeight {
+ if thisEpoch > 0 {
+ previousDag, previousDagFull := dagFiles(thisEpoch - 1)
+ os.Remove(filepath.Join(ethash.DefaultDir, previousDag))
+ os.Remove(filepath.Join(ethash.DefaultDir, previousDagFull))
+ glog.V(logger.Info).Infof("removed DAG for epoch %d (%s)", thisEpoch-1, previousDag)
+ }
+ nextEpoch = thisEpoch + 1
+ dag, _ := dagFiles(nextEpoch)
+ if _, err := os.Stat(dag); os.IsNotExist(err) {
+ glog.V(logger.Info).Infof("Pregenerating DAG for epoch %d (%s)", nextEpoch, dag)
+ err := ethash.MakeDAG(nextEpoch*epochLength, "") // "" -> ethash.DefaultDir
+ if err != nil {
+ glog.V(logger.Error).Infof("Error generating DAG for epoch %d (%s)", nextEpoch, dag)
+ return
+ }
+ } else {
+ glog.V(logger.Error).Infof("DAG for epoch %d (%s)", nextEpoch, dag)
+ }
+ }
+ }
+ timer = time.After(autoDAGcheckInterval)
+ case <-self.autodagquit:
+ return
+ }
+ }
+ }()
+}
+
+// dagFiles(epoch) returns the two alternative DAG filenames (not a path)
+// 1) <revision>-<hex(seedhash[8])> 2) full-R<revision>-<hex(seedhash[8])>
+func dagFiles(epoch uint64) (string, string) {
+ seedHash, _ := ethash.GetSeedHash(epoch * epochLength)
+ dag := fmt.Sprintf("full-R%d-%x", ethashRevision, seedHash[:8])
+ return dag, "full-R" + dag
+}
+
+// stopAutoDAG stops automatic DAG pregeneration by quitting the loop
+func (self *Ethereum) StopAutoDAG() {
+ if self.autodagquit != nil {
+ close(self.autodagquit)
+ self.autodagquit = nil
+ }
+ glog.V(logger.Info).Infof("Automatic pregeneration of ethash DAG OFF (ethash dir: %s)", ethash.DefaultDir)
+}
+
func saveProtocolVersion(db common.Database, protov int) {
d, _ := db.Get([]byte("ProtocolVersion"))
protocolVersion := common.NewValue(d).Uint()
@@ -571,3 +664,18 @@ func saveBlockchainVersion(db common.Database, bcVersion int) {
db.Put([]byte("BlockchainVersion"), common.NewValue(bcVersion).Bytes())
}
}
+
+func (self *Ethereum) Solc() (*compiler.Solidity, error) {
+ var err error
+ if self.solc == nil {
+ self.solc, err = compiler.New(self.SolcPath)
+ }
+ return self.solc, err
+}
+
+// set in js console via admin interface or wrapper from cli flags
+func (self *Ethereum) SetSolc(solcPath string) (*compiler.Solidity, error) {
+ self.SolcPath = solcPath
+ self.solc = nil
+ return self.Solc()
+}
diff --git a/eth/downloader/downloader.go b/eth/downloader/downloader.go
index d817b223c..fd588d2f3 100644
--- a/eth/downloader/downloader.go
+++ b/eth/downloader/downloader.go
@@ -15,8 +15,10 @@ import (
)
const (
- maxHashFetch = 512 // Amount of hashes to be fetched per chunk
- maxBlockFetch = 128 // Amount of blocks to be fetched per chunk
+ MinHashFetch = 512 // Minimum amount of hashes to not consider a peer stalling
+ MaxHashFetch = 2048 // Amount of hashes to be fetched per retrieval request
+ MaxBlockFetch = 128 // Amount of blocks to be fetched per retrieval request
+
peerCountTimeout = 12 * time.Second // Amount of time it takes for the peer handler to ignore minDesiredPeerCount
hashTTL = 5 * time.Second // Time it takes for a hash request to time out
)
@@ -28,10 +30,11 @@ var (
)
var (
- errLowTd = errors.New("peer's TD is too low")
+ errLowTd = errors.New("peers TD is too low")
ErrBusy = errors.New("busy")
- errUnknownPeer = errors.New("peer's unknown or unhealthy")
+ errUnknownPeer = errors.New("peer is unknown or unhealthy")
ErrBadPeer = errors.New("action from bad peer ignored")
+ ErrStallingPeer = errors.New("peer is stalling")
errNoPeers = errors.New("no peers to keep download active")
ErrPendingQueue = errors.New("pending items in queue")
ErrTimeout = errors.New("timeout")
@@ -60,13 +63,18 @@ type hashPack struct {
hashes []common.Hash
}
+type crossCheck struct {
+ expire time.Time
+ parent common.Hash
+}
+
type Downloader struct {
mux *event.TypeMux
mu sync.RWMutex
- queue *queue // Scheduler for selecting the hashes to download
- peers *peerSet // Set of active peers from which download can proceed
- checks map[common.Hash]time.Time // Pending cross checks to verify a hash chain
+ queue *queue // Scheduler for selecting the hashes to download
+ peers *peerSet // Set of active peers from which download can proceed
+ checks map[common.Hash]*crossCheck // Pending cross checks to verify a hash chain
// Callbacks
hasBlock hashCheckFn
@@ -157,7 +165,7 @@ func (d *Downloader) Synchronise(id string, hash common.Hash) error {
// Reset the queue and peer set to clean any internal leftover state
d.queue.Reset()
d.peers.Reset()
- d.checks = make(map[common.Hash]time.Time)
+ d.checks = make(map[common.Hash]*crossCheck)
// Retrieve the origin peer and initiate the downloading process
p := d.peers.Peer(id)
@@ -283,15 +291,22 @@ func (d *Downloader) fetchHashes(p *peer, h common.Hash) error {
return ErrBadPeer
}
if !done {
+ // Check that the peer is not stalling the sync
+ if len(inserts) < MinHashFetch {
+ return ErrStallingPeer
+ }
// Try and fetch a random block to verify the hash batch
// Skip the last hash as the cross check races with the next hash fetch
- if len(inserts) > 1 {
- cross := inserts[rand.Intn(len(inserts)-1)]
- glog.V(logger.Detail).Infof("Cross checking (%s) with %x", active.id, cross)
+ cross := rand.Intn(len(inserts) - 1)
+ origin, parent := inserts[cross], inserts[cross+1]
+ glog.V(logger.Detail).Infof("Cross checking (%s) with %x/%x", active.id, origin, parent)
- d.checks[cross] = time.Now().Add(blockTTL)
- active.getBlocks([]common.Hash{cross})
+ d.checks[origin] = &crossCheck{
+ expire: time.Now().Add(blockTTL),
+ parent: parent,
}
+ active.getBlocks([]common.Hash{origin})
+
// Also fetch a fresh
active.getHashes(head)
continue
@@ -310,8 +325,8 @@ func (d *Downloader) fetchHashes(p *peer, h common.Hash) error {
continue
}
block := blockPack.blocks[0]
- if _, ok := d.checks[block.Hash()]; ok {
- if !d.queue.Has(block.ParentHash()) {
+ if check, ok := d.checks[block.Hash()]; ok {
+ if block.ParentHash() != check.parent {
return ErrCrossCheckFailed
}
delete(d.checks, block.Hash())
@@ -319,8 +334,8 @@ func (d *Downloader) fetchHashes(p *peer, h common.Hash) error {
case <-crossTicker.C:
// Iterate over all the cross checks and fail the hash chain if they're not verified
- for hash, deadline := range d.checks {
- if time.Now().After(deadline) {
+ for hash, check := range d.checks {
+ if time.Now().After(check.expire) {
glog.V(logger.Debug).Infof("Cross check timeout for %x", hash)
return ErrCrossCheckFailed
}
@@ -438,7 +453,7 @@ out:
}
// Get a possible chunk. If nil is returned no chunk
// could be returned due to no hashes available.
- request := d.queue.Reserve(peer, maxBlockFetch)
+ request := d.queue.Reserve(peer, MaxBlockFetch)
if request == nil {
continue
}
diff --git a/eth/downloader/downloader_test.go b/eth/downloader/downloader_test.go
index 19d64ac67..8b541d8b7 100644
--- a/eth/downloader/downloader_test.go
+++ b/eth/downloader/downloader_test.go
@@ -53,6 +53,8 @@ type downloadTester struct {
blocks map[common.Hash]*types.Block // Blocks associated with the hashes
chain []common.Hash // Block-chain being constructed
+ maxHashFetch int // Overrides the maximum number of retrieved hashes
+
t *testing.T
pcount int
done chan bool
@@ -133,8 +135,12 @@ func (dl *downloadTester) getBlock(hash common.Hash) *types.Block {
// getHashes retrieves a batch of hashes for reconstructing the chain.
func (dl *downloadTester) getHashes(head common.Hash) error {
+ limit := MaxHashFetch
+ if dl.maxHashFetch > 0 {
+ limit = dl.maxHashFetch
+ }
// Gather the next batch of hashes
- hashes := make([]common.Hash, 0, maxHashFetch)
+ hashes := make([]common.Hash, 0, limit)
for i, hash := range dl.hashes {
if hash == head {
i++
@@ -382,7 +388,7 @@ func TestRepeatingHashAttack(t *testing.T) {
// Make sure that syncing returns and does so with a failure
select {
- case <-time.After(100 * time.Millisecond):
+ case <-time.After(time.Second):
t.Fatalf("synchronisation blocked")
case err := <-errc:
if err == nil {
@@ -469,6 +475,23 @@ func TestMadeupHashChainAttack(t *testing.T) {
}
}
+// Tests that if a malicious peer makes up a random hash chain, and tries to push
+// indefinitely, one hash at a time, it actually gets caught with it. The reason
+// this is separate from the classical made up chain attack is that sending hashes
+// one by one prevents reliable block/parent verification.
+func TestMadeupHashChainDrippingAttack(t *testing.T) {
+ // Create a random chain of hashes to drip
+ hashes := createHashes(0, 16*blockCacheLimit)
+ tester := newTester(t, hashes, nil)
+
+ // Try and sync with the attacker, one hash at a time
+ tester.maxHashFetch = 1
+ tester.newPeer("attack", big.NewInt(10000), hashes[0])
+ if _, err := tester.syncTake("attack", hashes[0]); err != ErrStallingPeer {
+ t.Fatalf("synchronisation error mismatch: have %v, want %v", err, ErrStallingPeer)
+ }
+}
+
// Tests that if a malicious peer makes up a random block chain, and tried to
// push indefinitely, it actually gets caught with it.
func TestMadeupBlockChainAttack(t *testing.T) {
@@ -479,7 +502,7 @@ func TestMadeupBlockChainAttack(t *testing.T) {
crossCheckCycle = 25 * time.Millisecond
// Create a long chain of blocks and simulate an invalid chain by dropping every second
- hashes := createHashes(0, 32*blockCacheLimit)
+ hashes := createHashes(0, 16*blockCacheLimit)
blocks := createBlocksFromHashes(hashes)
gapped := make([]common.Hash, len(hashes)/2)
@@ -502,3 +525,37 @@ func TestMadeupBlockChainAttack(t *testing.T) {
t.Fatalf("failed to synchronise blocks: %v", err)
}
}
+
+// Advanced form of the above forged blockchain attack, where not only does the
+// attacker make up a valid hashes for random blocks, but also forges the block
+// parents to point to existing hashes.
+func TestMadeupParentBlockChainAttack(t *testing.T) {
+ defaultBlockTTL := blockTTL
+ defaultCrossCheckCycle := crossCheckCycle
+
+ blockTTL = 100 * time.Millisecond
+ crossCheckCycle = 25 * time.Millisecond
+
+ // Create a long chain of blocks and simulate an invalid chain by dropping every second
+ hashes := createHashes(0, 16*blockCacheLimit)
+ blocks := createBlocksFromHashes(hashes)
+ forges := createBlocksFromHashes(hashes)
+ for hash, block := range forges {
+ block.ParentHeaderHash = hash // Simulate pointing to already known hash
+ }
+ // Try and sync with the malicious node and check that it fails
+ tester := newTester(t, hashes, forges)
+ tester.newPeer("attack", big.NewInt(10000), hashes[0])
+ if _, err := tester.syncTake("attack", hashes[0]); err != ErrCrossCheckFailed {
+ t.Fatalf("synchronisation error mismatch: have %v, want %v", err, ErrCrossCheckFailed)
+ }
+ // Ensure that a valid chain can still pass sync
+ blockTTL = defaultBlockTTL
+ crossCheckCycle = defaultCrossCheckCycle
+
+ tester.blocks = blocks
+ tester.newPeer("valid", big.NewInt(20000), hashes[0])
+ if _, err := tester.syncTake("valid", hashes[0]); err != nil {
+ t.Fatalf("failed to synchronise blocks: %v", err)
+ }
+}
diff --git a/eth/downloader/queue.go b/eth/downloader/queue.go
index 13ec9a520..591a37773 100644
--- a/eth/downloader/queue.go
+++ b/eth/downloader/queue.go
@@ -17,7 +17,7 @@ import (
)
const (
- blockCacheLimit = 1024 // Maximum number of blocks to cache before throttling the download
+ blockCacheLimit = 8 * MaxBlockFetch // Maximum number of blocks to cache before throttling the download
)
// fetchRequest is a currently running block retrieval operation.
diff --git a/eth/handler.go b/eth/handler.go
index b2d741295..9117a70de 100644
--- a/eth/handler.go
+++ b/eth/handler.go
@@ -47,9 +47,7 @@ type ProtocolManager struct {
txpool txPool
chainman *core.ChainManager
downloader *downloader.Downloader
-
- pmu sync.Mutex
- peers map[string]*peer
+ peers *peerSet
SubProtocol p2p.Protocol
@@ -73,7 +71,7 @@ func NewProtocolManager(protocolVersion, networkId int, mux *event.TypeMux, txpo
txpool: txpool,
chainman: chainman,
downloader: downloader,
- peers: make(map[string]*peer),
+ peers: newPeerSet(),
newPeerCh: make(chan *peer, 1),
quitSync: make(chan struct{}),
}
@@ -95,10 +93,14 @@ func NewProtocolManager(protocolVersion, networkId int, mux *event.TypeMux, txpo
}
func (pm *ProtocolManager) removePeer(peer *peer) {
- pm.pmu.Lock()
- defer pm.pmu.Unlock()
+ // Unregister the peer from the downloader
pm.downloader.UnregisterPeer(peer.id)
- delete(pm.peers, peer.id)
+
+ // Remove the peer from the Ethereum peer set too
+ glog.V(logger.Detail).Infoln("Removing peer", peer.id)
+ if err := pm.peers.Unregister(peer.id); err != nil {
+ glog.V(logger.Error).Infoln("Removal failed:", err)
+ }
}
func (pm *ProtocolManager) Start() {
@@ -136,31 +138,32 @@ func (pm *ProtocolManager) newPeer(pv, nv int, p *p2p.Peer, rw p2p.MsgReadWriter
}
func (pm *ProtocolManager) handle(p *peer) error {
+ // Execute the Ethereum handshake, short circuit if fails
if err := p.handleStatus(); err != nil {
return err
}
- pm.pmu.Lock()
- pm.peers[p.id] = p
- pm.pmu.Unlock()
-
- pm.downloader.RegisterPeer(p.id, p.recentHash, p.requestHashes, p.requestBlocks)
- defer func() {
- pm.removePeer(p)
- }()
+ // Register the peer locally and in the downloader too
+ glog.V(logger.Detail).Infoln("Adding peer", p.id)
+ if err := pm.peers.Register(p); err != nil {
+ glog.V(logger.Error).Infoln("Addition failed:", err)
+ return err
+ }
+ defer pm.removePeer(p)
+ if err := pm.downloader.RegisterPeer(p.id, p.recentHash, p.requestHashes, p.requestBlocks); err != nil {
+ return err
+ }
// propagate existing transactions. new transactions appearing
// after this will be sent via broadcasts.
if err := p.sendTransactions(pm.txpool.GetTransactions()); err != nil {
return err
}
-
// main loop. handle incoming messages.
for {
if err := pm.handleMsg(p); err != nil {
return err
}
}
-
return nil
}
@@ -203,8 +206,8 @@ func (self *ProtocolManager) handleMsg(p *peer) error {
return errResp(ErrDecode, "->msg %v: %v", msg, err)
}
- if request.Amount > maxHashes {
- request.Amount = maxHashes
+ if request.Amount > downloader.MaxHashFetch {
+ request.Amount = downloader.MaxHashFetch
}
hashes := self.chainman.GetBlockHashesFromHash(request.Hash, request.Amount)
@@ -251,7 +254,7 @@ func (self *ProtocolManager) handleMsg(p *peer) error {
if block != nil {
blocks = append(blocks, block)
}
- if i == maxBlocks {
+ if i == downloader.MaxBlockFetch {
break
}
}
@@ -346,18 +349,8 @@ func (pm *ProtocolManager) verifyTd(peer *peer, request newBlockMsgData) error {
// out which peers do not contain the block in their block set and will do a
// sqrt(peers) to determine the amount of peers we broadcast to.
func (pm *ProtocolManager) BroadcastBlock(hash common.Hash, block *types.Block) {
- pm.pmu.Lock()
- defer pm.pmu.Unlock()
-
- // Find peers who don't know anything about the given hash. Peers that
- // don't know about the hash will be a candidate for the broadcast loop
- var peers []*peer
- for _, peer := range pm.peers {
- if !peer.blockHashes.Has(hash) {
- peers = append(peers, peer)
- }
- }
- // Broadcast block to peer set
+ // Broadcast block to a batch of peers not knowing about it
+ peers := pm.peers.PeersWithoutBlock(hash)
peers = peers[:int(math.Sqrt(float64(len(peers))))]
for _, peer := range peers {
peer.sendNewBlock(block)
@@ -369,18 +362,8 @@ func (pm *ProtocolManager) BroadcastBlock(hash common.Hash, block *types.Block)
// out which peers do not contain the block in their block set and will do a
// sqrt(peers) to determine the amount of peers we broadcast to.
func (pm *ProtocolManager) BroadcastTx(hash common.Hash, tx *types.Transaction) {
- pm.pmu.Lock()
- defer pm.pmu.Unlock()
-
- // Find peers who don't know anything about the given hash. Peers that
- // don't know about the hash will be a candidate for the broadcast loop
- var peers []*peer
- for _, peer := range pm.peers {
- if !peer.txHashes.Has(hash) {
- peers = append(peers, peer)
- }
- }
- // Broadcast block to peer set
+ // Broadcast transaction to a batch of peers not knowing about it
+ peers := pm.peers.PeersWithoutTx(hash)
//FIXME include this again: peers = peers[:int(math.Sqrt(float64(len(peers))))]
for _, peer := range peers {
peer.sendTransaction(tx)
diff --git a/eth/peer.go b/eth/peer.go
index 861efaaec..bb6a20349 100644
--- a/eth/peer.go
+++ b/eth/peer.go
@@ -1,17 +1,25 @@
package eth
import (
+ "errors"
"fmt"
"math/big"
+ "sync"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types"
+ "github.com/ethereum/go-ethereum/eth/downloader"
"github.com/ethereum/go-ethereum/logger"
"github.com/ethereum/go-ethereum/logger/glog"
"github.com/ethereum/go-ethereum/p2p"
"gopkg.in/fatih/set.v0"
)
+var (
+ errAlreadyRegistered = errors.New("peer is already registered")
+ errNotRegistered = errors.New("peer is not registered")
+)
+
type statusMsgData struct {
ProtocolVersion uint32
NetworkId uint32
@@ -25,16 +33,6 @@ type getBlockHashesMsgData struct {
Amount uint64
}
-func getBestPeer(peers map[string]*peer) *peer {
- var peer *peer
- for _, cp := range peers {
- if peer == nil || cp.td.Cmp(peer.td) > 0 {
- peer = cp
- }
- }
- return peer
-}
-
type peer struct {
*p2p.Peer
@@ -103,8 +101,8 @@ func (p *peer) sendTransaction(tx *types.Transaction) error {
}
func (p *peer) requestHashes(from common.Hash) error {
- glog.V(logger.Debug).Infof("[%s] fetching hashes (%d) %x...\n", p.id, maxHashes, from[:4])
- return p2p.Send(p.rw, GetBlockHashesMsg, getBlockHashesMsgData{from, maxHashes})
+ glog.V(logger.Debug).Infof("[%s] fetching hashes (%d) %x...\n", p.id, downloader.MaxHashFetch, from[:4])
+ return p2p.Send(p.rw, GetBlockHashesMsg, getBlockHashesMsgData{from, downloader.MaxHashFetch})
}
func (p *peer) requestBlocks(hashes []common.Hash) error {
@@ -159,3 +157,103 @@ func (p *peer) handleStatus() error {
return <-errc
}
+
+// peerSet represents the collection of active peers currently participating in
+// the Ethereum sub-protocol.
+type peerSet struct {
+ peers map[string]*peer
+ lock sync.RWMutex
+}
+
+// newPeerSet creates a new peer set to track the active participants.
+func newPeerSet() *peerSet {
+ return &peerSet{
+ peers: make(map[string]*peer),
+ }
+}
+
+// Register injects a new peer into the working set, or returns an error if the
+// peer is already known.
+func (ps *peerSet) Register(p *peer) error {
+ ps.lock.Lock()
+ defer ps.lock.Unlock()
+
+ if _, ok := ps.peers[p.id]; ok {
+ return errAlreadyRegistered
+ }
+ ps.peers[p.id] = p
+ return nil
+}
+
+// Unregister removes a remote peer from the active set, disabling any further
+// actions to/from that particular entity.
+func (ps *peerSet) Unregister(id string) error {
+ ps.lock.Lock()
+ defer ps.lock.Unlock()
+
+ if _, ok := ps.peers[id]; !ok {
+ return errNotRegistered
+ }
+ delete(ps.peers, id)
+ return nil
+}
+
+// Peer retrieves the registered peer with the given id.
+func (ps *peerSet) Peer(id string) *peer {
+ ps.lock.RLock()
+ defer ps.lock.RUnlock()
+
+ return ps.peers[id]
+}
+
+// Len returns if the current number of peers in the set.
+func (ps *peerSet) Len() int {
+ ps.lock.RLock()
+ defer ps.lock.RUnlock()
+
+ return len(ps.peers)
+}
+
+// PeersWithoutBlock retrieves a list of peers that do not have a given block in
+// their set of known hashes.
+func (ps *peerSet) PeersWithoutBlock(hash common.Hash) []*peer {
+ ps.lock.RLock()
+ defer ps.lock.RUnlock()
+
+ list := make([]*peer, 0, len(ps.peers))
+ for _, p := range ps.peers {
+ if !p.blockHashes.Has(hash) {
+ list = append(list, p)
+ }
+ }
+ return list
+}
+
+// PeersWithoutTx retrieves a list of peers that do not have a given transaction
+// in their set of known hashes.
+func (ps *peerSet) PeersWithoutTx(hash common.Hash) []*peer {
+ ps.lock.RLock()
+ defer ps.lock.RUnlock()
+
+ list := make([]*peer, 0, len(ps.peers))
+ for _, p := range ps.peers {
+ if !p.txHashes.Has(hash) {
+ list = append(list, p)
+ }
+ }
+ return list
+}
+
+// BestPeer retrieves the known peer with the currently highest total difficulty.
+func (ps *peerSet) BestPeer() *peer {
+ ps.lock.RLock()
+ defer ps.lock.RUnlock()
+
+ var best *peer
+ for _, p := range ps.peers {
+ if best == nil || p.td.Cmp(best.td) > 0 {
+ best = p
+ }
+ }
+ return best
+}
diff --git a/eth/protocol.go b/eth/protocol.go
index 48f37b59c..948051ed1 100644
--- a/eth/protocol.go
+++ b/eth/protocol.go
@@ -12,8 +12,6 @@ const (
NetworkId = 0
ProtocolLength = uint64(8)
ProtocolMaxMsgSize = 10 * 1024 * 1024
- maxHashes = 512
- maxBlocks = 128
)
// eth protocol message codes
diff --git a/eth/sync.go b/eth/sync.go
index aa7ebc77b..62d08acb6 100644
--- a/eth/sync.go
+++ b/eth/sync.go
@@ -10,8 +10,8 @@ import (
"github.com/ethereum/go-ethereum/logger/glog"
)
-// Sync contains all synchronisation code for the eth protocol
-
+// update periodically tries to synchronise with the network, both downloading
+// hashes and blocks as well as retrieving cached ones.
func (pm *ProtocolManager) update() {
forceSync := time.Tick(forceSyncCycle)
blockProc := time.Tick(blockProcCycle)
@@ -20,22 +20,16 @@ func (pm *ProtocolManager) update() {
for {
select {
case <-pm.newPeerCh:
- // Meet the `minDesiredPeerCount` before we select our best peer
- if len(pm.peers) < minDesiredPeerCount {
+ // Make sure we have peers to select from, then sync
+ if pm.peers.Len() < minDesiredPeerCount {
break
}
- // Find the best peer and synchronise with it
- peer := getBestPeer(pm.peers)
- if peer == nil {
- glog.V(logger.Debug).Infoln("Sync attempt canceled. No peers available")
- }
- go pm.synchronise(peer)
+ go pm.synchronise(pm.peers.BestPeer())
case <-forceSync:
// Force a sync even if not enough peers are present
- if peer := getBestPeer(pm.peers); peer != nil {
- go pm.synchronise(peer)
- }
+ go pm.synchronise(pm.peers.BestPeer())
+
case <-blockProc:
// Try to pull some blocks from the downloaded
if atomic.CompareAndSwapInt32(&blockProcPend, 0, 1) {
@@ -51,10 +45,9 @@ func (pm *ProtocolManager) update() {
}
}
-// processBlocks will attempt to reconstruct a chain by checking the first item and check if it's
-// a known parent. The first block in the chain may be unknown during downloading. When the
-// downloader isn't downloading blocks will be dropped with an unknown parent until either it
-// has depleted the list or found a known parent.
+// processBlocks retrieves downloaded blocks from the download cache and tries
+// to construct the local block chain with it. Note, since the block retrieval
+// order matters, access to this function *must* be synchronized/serialized.
func (pm *ProtocolManager) processBlocks() error {
pm.wg.Add(1)
defer pm.wg.Done()
@@ -79,15 +72,24 @@ func (pm *ProtocolManager) processBlocks() error {
return nil
}
+// synchronise tries to sync up our local block chain with a remote peer, both
+// adding various sanity checks as well as wrapping it with various log entries.
func (pm *ProtocolManager) synchronise(peer *peer) {
+ // Short circuit if no peers are available
+ if peer == nil {
+ glog.V(logger.Debug).Infoln("Synchronisation canceled: no peers available")
+ return
+ }
// Make sure the peer's TD is higher than our own. If not drop.
if peer.td.Cmp(pm.chainman.Td()) <= 0 {
+ glog.V(logger.Debug).Infoln("Synchronisation canceled: peer TD too small")
return
}
// FIXME if we have the hash in our chain and the TD of the peer is
// much higher than ours, something is wrong with us or the peer.
// Check if the hash is on our own chain
if pm.chainman.HasBlock(peer.recentHash) {
+ glog.V(logger.Debug).Infoln("Synchronisation canceled: head already known")
return
}
// Get the hashes from the peer (synchronously)
diff --git a/ethdb/database.go b/ethdb/database.go
index c351c024a..9bf09467b 100644
--- a/ethdb/database.go
+++ b/ethdb/database.go
@@ -7,6 +7,7 @@ import (
"github.com/ethereum/go-ethereum/logger"
"github.com/ethereum/go-ethereum/logger/glog"
"github.com/syndtr/goleveldb/leveldb"
+ "github.com/syndtr/goleveldb/leveldb/errors"
"github.com/syndtr/goleveldb/leveldb/iterator"
"github.com/syndtr/goleveldb/leveldb/opt"
)
@@ -24,9 +25,17 @@ type LDBDatabase struct {
quit chan struct{}
}
+// NewLDBDatabase returns a LevelDB wrapped object. LDBDatabase does not persist data by
+// it self but requires a background poller which syncs every X. `Flush` should be called
+// when data needs to be stored and written to disk.
func NewLDBDatabase(file string) (*LDBDatabase, error) {
// Open the db
db, err := leveldb.OpenFile(file, &opt.Options{OpenFilesCacheCapacity: OpenFileLimit})
+ // check for curruption and attempt to recover
+ if _, iscorrupted := err.(*errors.ErrCorrupted); iscorrupted {
+ db, err = leveldb.RecoverFile(file, nil)
+ }
+ // (re) check for errors and abort if opening of the db failed
if err != nil {
return nil, err
}
@@ -44,21 +53,15 @@ func (self *LDBDatabase) makeQueue() {
self.queue = make(map[string][]byte)
}
+// Put puts the given key / value to the queue
func (self *LDBDatabase) Put(key []byte, value []byte) {
self.mu.Lock()
defer self.mu.Unlock()
self.queue[string(key)] = value
- /*
- value = rle.Compress(value)
-
- err := self.db.Put(key, value, nil)
- if err != nil {
- fmt.Println("Error put", err)
- }
- */
}
+// Get returns the given key if it's present.
func (self *LDBDatabase) Get(key []byte) ([]byte, error) {
self.mu.Lock()
defer self.mu.Unlock()
@@ -76,6 +79,7 @@ func (self *LDBDatabase) Get(key []byte) ([]byte, error) {
return rle.Decompress(dat)
}
+// Delete deletes the key from the queue and database
func (self *LDBDatabase) Delete(key []byte) error {
self.mu.Lock()
defer self.mu.Unlock()
@@ -100,6 +104,7 @@ func (self *LDBDatabase) NewIterator() iterator.Iterator {
return self.db.NewIterator(nil, nil)
}
+// Flush flushes out the queue to leveldb
func (self *LDBDatabase) Flush() error {
self.mu.Lock()
defer self.mu.Unlock()
diff --git a/jsre/ethereum_js.go b/jsre/ethereum_js.go
index a61ffcbbf..6c0ae33d7 100644
--- a/jsre/ethereum_js.go
+++ b/jsre/ethereum_js.go
@@ -1,7 +1,6 @@
package jsre
-const Ethereum_JS = `
-require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
+const Ethereum_JS = `require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
/*
This file is part of ethereum.js.
@@ -18,142 +17,7 @@ require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof requ
You should have received a copy of the GNU Lesser General Public License
along with ethereum.js. If not, see <http://www.gnu.org/licenses/>.
*/
-/**
- * @file abi.js
- * @author Marek Kotewicz <marek@ethdev.com>
- * @author Gav Wood <g@ethdev.com>
- * @date 2014
- */
-
-var utils = require('../utils/utils');
-var coder = require('./coder');
-var solUtils = require('./utils');
-
-/**
- * Formats input params to bytes
- *
- * @method formatInput
- * @param {Array} abi inputs of method
- * @param {Array} params that will be formatted to bytes
- * @returns bytes representation of input params
- */
-var formatInput = function (inputs, params) {
- var i = inputs.map(function (input) {
- return input.type;
- });
- return coder.encodeParams(i, params);
-};
-
-/**
- * Formats output bytes back to param list
- *
- * @method formatOutput
- * @param {Array} abi outputs of method
- * @param {String} bytes represention of output
- * @returns {Array} output params
- */
-var formatOutput = function (outs, bytes) {
- var o = outs.map(function (out) {
- return out.type;
- });
-
- return coder.decodeParams(o, bytes);
-};
-
/**
- * Should be called to create input parser for contract with given abi
- *
- * @method inputParser
- * @param {Array} contract abi
- * @returns {Object} input parser object for given json abi
- * TODO: refactor creating the parser, do not double logic from contract
- */
-var inputParser = function (json) {
- var parser = {};
- json.forEach(function (method) {
- var displayName = utils.extractDisplayName(method.name);
- var typeName = utils.extractTypeName(method.name);
-
- var impl = function () {
- var params = Array.prototype.slice.call(arguments);
- return formatInput(method.inputs, params);
- };
-
- if (parser[displayName] === undefined) {
- parser[displayName] = impl;
- }
-
- parser[displayName][typeName] = impl;
- });
-
- return parser;
-};
-
-/**
- * Should be called to create output parser for contract with given abi
- *
- * @method outputParser
- * @param {Array} contract abi
- * @returns {Object} output parser for given json abi
- */
-var outputParser = function (json) {
- var parser = {};
- json.forEach(function (method) {
-
- var displayName = utils.extractDisplayName(method.name);
- var typeName = utils.extractTypeName(method.name);
-
- var impl = function (output) {
- return formatOutput(method.outputs, output);
- };
-
- if (parser[displayName] === undefined) {
- parser[displayName] = impl;
- }
-
- parser[displayName][typeName] = impl;
- });
-
- return parser;
-};
-
-var formatConstructorParams = function (abi, params) {
- var constructor = solUtils.getConstructor(abi, params.length);
- if (!constructor) {
- if (params.length > 0) {
- console.warn("didn't found matching constructor, using default one");
- }
- return '';
- }
- return formatInput(constructor.inputs, params);
-};
-
-module.exports = {
- inputParser: inputParser,
- outputParser: outputParser,
- formatInput: formatInput,
- formatOutput: formatOutput,
- formatConstructorParams: formatConstructorParams
-};
-
-},{"../utils/utils":8,"./coder":2,"./utils":5}],2:[function(require,module,exports){
-/*
- This file is part of ethereum.js.
-
- ethereum.js 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.
-
- ethereum.js 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 ethereum.js. If not, see <http://www.gnu.org/licenses/>.
-*/
-/**
* @file coder.js
* @author Marek Kotewicz <marek@ethdev.com>
* @date 2015
@@ -208,7 +72,7 @@ SolidityType.prototype.isType = function (name) {
* @method formatInput
* @param {Object} param - plain object, or an array of objects
* @param {Bool} arrayType - true if a param should be encoded as an array
- * @return {SolidityParam} encoded param wrapped in SolidityParam object
+ * @return {SolidityParam} encoded param wrapped in SolidityParam object
*/
SolidityType.prototype.formatInput = function (param, arrayType) {
if (utils.isArray(param) && arrayType) { // TODO: should fail if this two are not the same
@@ -216,10 +80,9 @@ SolidityType.prototype.formatInput = function (param, arrayType) {
return param.map(function (p) {
return self._inputFormatter(p);
}).reduce(function (acc, current) {
- acc.appendArrayElement(current);
- return acc;
- }, new SolidityParam(f.formatInputInt(param.length).value));
- }
+ return acc.combine(current);
+ }, f.formatInputInt(param.length)).withOffset(32);
+ }
return this._inputFormatter(param);
};
@@ -233,11 +96,11 @@ SolidityType.prototype.formatInput = function (param, arrayType) {
*/
SolidityType.prototype.formatOutput = function (param, arrayType) {
if (arrayType) {
- // let's assume, that we solidity will never return long arrays :P
+ // let's assume, that we solidity will never return long arrays :P
var result = [];
- var length = new BigNumber(param.value, 16);
+ var length = new BigNumber(param.dynamicPart().slice(0, 64), 16);
for (var i = 0; i < length * 64; i += 64) {
- result.push(this._outputFormatter(new SolidityParam(param.suffix.slice(i, i + 64))));
+ result.push(this._outputFormatter(new SolidityParam(param.dynamicPart().substr(i + 64, 64))));
}
return result;
}
@@ -245,31 +108,21 @@ SolidityType.prototype.formatOutput = function (param, arrayType) {
};
/**
- * Should be used to check if a type is variadic
- *
- * @method isVariadicType
- * @param {String} type
- * @returns {Bool} true if the type is variadic
- */
-SolidityType.prototype.isVariadicType = function (type) {
- return isArrayType(type) || this._mode === 'bytes';
-};
-
-/**
- * Should be used to shift param from params group
+ * Should be used to slice single param from bytes
*
- * @method shiftParam
+ * @method sliceParam
+ * @param {String} bytes
+ * @param {Number} index of param to slice
* @param {String} type
- * @returns {SolidityParam} shifted param
+ * @returns {SolidityParam} param
*/
-SolidityType.prototype.shiftParam = function (type, param) {
+SolidityType.prototype.sliceParam = function (bytes, index, type) {
if (this._mode === 'bytes') {
- return param.shiftBytes();
+ return SolidityParam.decodeBytes(bytes, index);
} else if (isArrayType(type)) {
- var length = new BigNumber(param.value.slice(0, 64), 16);
- return param.shiftArray(length);
+ return SolidityParam.decodeArray(bytes, index);
}
- return param.shiftValue();
+ return SolidityParam.decodeParam(bytes, index);
};
/**
@@ -284,7 +137,7 @@ var SolidityCoder = function (types) {
*
* @method _requireType
* @param {String} type
- * @returns {SolidityType}
+ * @returns {SolidityType}
* @throws {Error} throws if no matching type is found
*/
SolidityCoder.prototype._requireType = function (type) {
@@ -300,20 +153,6 @@ SolidityCoder.prototype._requireType = function (type) {
};
/**
- * Should be used to transform plain bytes to SolidityParam object
- *
- * @method _bytesToParam
- * @param {Array} types of params
- * @param {String} bytes to be transformed to SolidityParam
- * @return {SolidityParam} SolidityParam for this group of params
- */
-SolidityCoder.prototype._bytesToParam = function (types, bytes) {
- var value = bytes.slice(0, types.length * 64);
- var suffix = bytes.slice(types.length * 64);
- return new SolidityParam(value, suffix);
-};
-
-/**
* Should be used to transform plain param of given type to SolidityParam
*
* @method _formatInput
@@ -347,24 +186,11 @@ SolidityCoder.prototype.encodeParam = function (type, param) {
*/
SolidityCoder.prototype.encodeParams = function (types, params) {
var self = this;
- return types.map(function (type, index) {
+ var solidityParams = types.map(function (type, index) {
return self._formatInput(type, params[index]);
- }).reduce(function (acc, solidityParam) {
- acc.append(solidityParam);
- return acc;
- }, new SolidityParam()).encode();
-};
+ });
-/**
- * Should be used to transform SolidityParam to plain param
- *
- * @method _formatOutput
- * @param {String} type
- * @param {SolidityParam} param
- * @return {Object} plain param
- */
-SolidityCoder.prototype._formatOutput = function (type, param) {
- return this._requireType(type).formatOutput(param, isArrayType(type));
+ return SolidityParam.encodeList(solidityParams);
};
/**
@@ -376,7 +202,7 @@ SolidityCoder.prototype._formatOutput = function (type, param) {
* @return {Object} plain param
*/
SolidityCoder.prototype.decodeParam = function (type, bytes) {
- return this._formatOutput(type, this._bytesToParam([type], bytes));
+ return this.decodeParams([type], bytes)[0];
};
/**
@@ -389,10 +215,9 @@ SolidityCoder.prototype.decodeParam = function (type, bytes) {
*/
SolidityCoder.prototype.decodeParams = function (types, bytes) {
var self = this;
- var param = this._bytesToParam(types, bytes);
- return types.map(function (type) {
+ return types.map(function (type, index) {
var solidityType = self._requireType(type);
- var p = solidityType.shiftParam(type, param);
+ var p = solidityType.sliceParam(bytes, index, type);
return solidityType.formatOutput(p, isArrayType(type));
});
};
@@ -459,7 +284,7 @@ var coder = new SolidityCoder([
module.exports = coder;
-},{"../utils/utils":8,"./formatters":3,"./param":4,"bignumber.js":"bignumber.js"}],3:[function(require,module,exports){
+},{"../utils/utils":7,"./formatters":2,"./param":3,"bignumber.js":"bignumber.js"}],2:[function(require,module,exports){
/*
This file is part of ethereum.js.
@@ -476,7 +301,7 @@ module.exports = coder;
You should have received a copy of the GNU Lesser General Public License
along with ethereum.js. If not, see <http://www.gnu.org/licenses/>.
*/
-/**
+/**
* @file formatters.js
* @author Marek Kotewicz <marek@ethdev.com>
* @date 2015
@@ -525,7 +350,7 @@ var formatInputBytes = function (value) {
*/
var formatInputDynamicBytes = function (value) {
var result = utils.fromAscii(value, c.ETH_PADDING).substr(2);
- return new SolidityParam(formatInputInt(value.length).value, result);
+ return new SolidityParam(formatInputInt(value.length).value + result, 32);
};
/**
@@ -571,7 +396,7 @@ var signedIsNegative = function (value) {
* @returns {BigNumber} right-aligned output bytes formatted to big number
*/
var formatOutputInt = function (param) {
- var value = param.value || "0";
+ var value = param.staticPart() || "0";
// check if it's negative number
// it it is, return two's complement
@@ -589,7 +414,7 @@ var formatOutputInt = function (param) {
* @returns {BigNumeber} right-aligned output bytes formatted to uint
*/
var formatOutputUInt = function (param) {
- var value = param.value || "0";
+ var value = param.staticPart() || "0";
return new BigNumber(value, 16);
};
@@ -601,7 +426,7 @@ var formatOutputUInt = function (param) {
* @returns {BigNumber} input bytes formatted to real
*/
var formatOutputReal = function (param) {
- return formatOutputInt(param).dividedBy(new BigNumber(2).pow(128));
+ return formatOutputInt(param).dividedBy(new BigNumber(2).pow(128));
};
/**
@@ -612,7 +437,7 @@ var formatOutputReal = function (param) {
* @returns {BigNumber} input bytes formatted to ureal
*/
var formatOutputUReal = function (param) {
- return formatOutputUInt(param).dividedBy(new BigNumber(2).pow(128));
+ return formatOutputUInt(param).dividedBy(new BigNumber(2).pow(128));
};
/**
@@ -623,7 +448,7 @@ var formatOutputUReal = function (param) {
* @returns {Boolean} right-aligned input bytes formatted to bool
*/
var formatOutputBool = function (param) {
- return param.value === '0000000000000000000000000000000000000000000000000000000000000001' ? true : false;
+ return param.staticPart() === '0000000000000000000000000000000000000000000000000000000000000001' ? true : false;
};
/**
@@ -635,7 +460,7 @@ var formatOutputBool = function (param) {
*/
var formatOutputBytes = function (param) {
// length might also be important!
- return utils.toAscii(param.value);
+ return utils.toAscii(param.staticPart());
};
/**
@@ -647,7 +472,7 @@ var formatOutputBytes = function (param) {
*/
var formatOutputDynamicBytes = function (param) {
// length might also be important!
- return utils.toAscii(param.suffix);
+ return utils.toAscii(param.dynamicPart().slice(64));
};
/**
@@ -658,7 +483,7 @@ var formatOutputDynamicBytes = function (param) {
* @returns {String} address
*/
var formatOutputAddress = function (param) {
- var value = param.value;
+ var value = param.staticPart();
return "0x" + value.slice(value.length - 40, value.length);
};
@@ -679,7 +504,7 @@ module.exports = {
};
-},{"../utils/config":7,"../utils/utils":8,"./param":4,"bignumber.js":"bignumber.js"}],4:[function(require,module,exports){
+},{"../utils/config":5,"../utils/utils":7,"./param":3,"bignumber.js":"bignumber.js"}],3:[function(require,module,exports){
/*
This file is part of ethereum.js.
@@ -696,136 +521,202 @@ module.exports = {
You should have received a copy of the GNU Lesser General Public License
along with ethereum.js. If not, see <http://www.gnu.org/licenses/>.
*/
-/**
+/**
* @file param.js
* @author Marek Kotewicz <marek@ethdev.com>
* @date 2015
*/
+var utils = require('../utils/utils');
+
/**
* SolidityParam object prototype.
* Should be used when encoding, decoding solidity bytes
*/
-var SolidityParam = function (value, suffix) {
+var SolidityParam = function (value, offset) {
this.value = value || '';
- this.suffix = suffix || '';
+ this.offset = offset; // offset in bytes
};
/**
- * This method should be used to encode two params one after another
+ * This method should be used to get length of params's dynamic part
*
- * @method append
- * @param {SolidityParam} param that it appended after this
+ * @method dynamicPartLength
+ * @returns {Number} length of dynamic part (in bytes)
*/
-SolidityParam.prototype.append = function (param) {
- this.value += param.value;
- this.suffix += param.suffix;
+SolidityParam.prototype.dynamicPartLength = function () {
+ return this.dynamicPart().length / 2;
};
/**
- * This method should be used to encode next param in an array
+ * This method should be used to create copy of solidity param with different offset
*
- * @method appendArrayElement
- * @param {SolidityParam} param that is appended to an array
+ * @method withOffset
+ * @param {Number} offset length in bytes
+ * @returns {SolidityParam} new solidity param with applied offset
*/
-SolidityParam.prototype.appendArrayElement = function (param) {
- this.suffix += param.value;
- //this.suffix += param.suffix; // we do not support nested dynamic types
+SolidityParam.prototype.withOffset = function (offset) {
+ return new SolidityParam(this.value, offset);
};
/**
- * This method should be used to create bytearrays from param
+ * This method should be used to combine solidity params together
+ * eg. when appending an array
*
- * @method encode
- * @return {String} encoded param(s)
+ * @method combine
+ * @param {SolidityParam} param with which we should combine
+ * @param {SolidityParam} result of combination
*/
-SolidityParam.prototype.encode = function () {
- return this.value + this.suffix;
+SolidityParam.prototype.combine = function (param) {
+ return new SolidityParam(this.value + param.value);
};
/**
- * This method should be used to shift first param from group of params
+ * This method should be called to check if param has dynamic size.
+ * If it has, it returns true, otherwise false
*
- * @method shiftValue
- * @return {SolidityParam} first value param
+ * @method isDynamic
+ * @returns {Boolean}
*/
-SolidityParam.prototype.shiftValue = function () {
- var value = this.value.slice(0, 64);
- this.value = this.value.slice(64);
- return new SolidityParam(value);
+SolidityParam.prototype.isDynamic = function () {
+ return this.value.length > 64;
};
/**
- * This method should be used to first bytes param from group of params
+ * This method should be called to transform offset to bytes
*
- * @method shiftBytes
- * @return {SolidityParam} first bytes param
+ * @method offsetAsBytes
+ * @returns {String} bytes representation of offset
*/
-SolidityParam.prototype.shiftBytes = function () {
- return this.shiftArray(1);
+SolidityParam.prototype.offsetAsBytes = function () {
+ return !this.isDynamic() ? '' : utils.padLeft(utils.toTwosComplement(this.offset).toString(16), 64);
};
/**
- * This method should be used to shift an array from group of params
- *
- * @method shiftArray
- * @param {Number} size of an array to shift
- * @return {SolidityParam} first array param
+ * This method should be called to get static part of param
+ *
+ * @method staticPart
+ * @returns {String} offset if it is a dynamic param, otherwise value
*/
-SolidityParam.prototype.shiftArray = function (length) {
- var value = this.value.slice(0, 64);
- this.value = this.value.slice(64);
- var suffix = this.suffix.slice(0, 64 * length);
- this.suffix = this.suffix.slice(64 * length);
- return new SolidityParam(value, suffix);
+SolidityParam.prototype.staticPart = function () {
+ if (!this.isDynamic()) {
+ return this.value;
+ }
+ return this.offsetAsBytes();
};
-module.exports = SolidityParam;
+/**
+ * This method should be called to get dynamic part of param
+ *
+ * @method dynamicPart
+ * @returns {String} returns a value if it is a dynamic param, otherwise empty string
+ */
+SolidityParam.prototype.dynamicPart = function () {
+ return this.isDynamic() ? this.value : '';
+};
+/**
+ * This method should be called to encode param
+ *
+ * @method encode
+ * @returns {String}
+ */
+SolidityParam.prototype.encode = function () {
+ return this.staticPart() + this.dynamicPart();
+};
-},{}],5:[function(require,module,exports){
-/*
- This file is part of ethereum.js.
+/**
+ * This method should be called to encode array of params
+ *
+ * @method encodeList
+ * @param {Array[SolidityParam]} params
+ * @returns {String}
+ */
+SolidityParam.encodeList = function (params) {
- ethereum.js 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.
+ // updating offsets
+ var totalOffset = params.length * 32;
+ var offsetParams = params.map(function (param) {
+ if (!param.isDynamic()) {
+ return param;
+ }
+ var offset = totalOffset;
+ totalOffset += param.dynamicPartLength();
+ return param.withOffset(offset);
+ });
- ethereum.js 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.
+ // encode everything!
+ return offsetParams.reduce(function (result, param) {
+ return result + param.dynamicPart();
+ }, offsetParams.reduce(function (result, param) {
+ return result + param.staticPart();
+ }, ''));
+};
- You should have received a copy of the GNU Lesser General Public License
- along with ethereum.js. If not, see <http://www.gnu.org/licenses/>.
-*/
/**
- * @file utils.js
- * @author Marek Kotewicz <marek@ethdev.com>
- * @date 2015
+ * This method should be used to decode plain (static) solidity param at given index
+ *
+ * @method decodeParam
+ * @param {String} bytes
+ * @param {Number} index
+ * @returns {SolidityParam}
*/
+SolidityParam.decodeParam = function (bytes, index) {
+ index = index || 0;
+ return new SolidityParam(bytes.substr(index * 64, 64));
+};
/**
- * Returns the contstructor with matching number of arguments
+ * This method should be called to get offset value from bytes at given index
*
- * @method getConstructor
- * @param {Array} abi
- * @param {Number} numberOfArgs
- * @returns {Object} constructor function abi
+ * @method getOffset
+ * @param {String} bytes
+ * @param {Number} index
+ * @returns {Number} offset as number
*/
-var getConstructor = function (abi, numberOfArgs) {
- return abi.filter(function (f) {
- return f.type === 'constructor' && f.inputs.length === numberOfArgs;
- })[0];
+var getOffset = function (bytes, index) {
+ // we can do this cause offset is rather small
+ return parseInt('0x' + bytes.substr(index * 64, 64));
};
-module.exports = {
- getConstructor: getConstructor
+/**
+ * This method should be called to decode solidity bytes param at given index
+ *
+ * @method decodeBytes
+ * @param {String} bytes
+ * @param {Number} index
+ * @returns {SolidityParam}
+ */
+SolidityParam.decodeBytes = function (bytes, index) {
+ index = index || 0;
+ //TODO add support for strings longer than 32 bytes
+ //var length = parseInt('0x' + bytes.substr(offset * 64, 64));
+
+ var offset = getOffset(bytes, index);
+
+ // 2 * , cause we also parse length
+ return new SolidityParam(bytes.substr(offset * 2, 2 * 64));
};
+/**
+ * This method should be used to decode solidity array at given index
+ *
+ * @method decodeArray
+ * @param {String} bytes
+ * @param {Number} index
+ * @returns {SolidityParam}
+ */
+SolidityParam.decodeArray = function (bytes, index) {
+ index = index || 0;
+ var offset = getOffset(bytes, index);
+ var length = parseInt('0x' + bytes.substr(offset * 2, 64));
+ return new SolidityParam(bytes.substr(offset * 2, (length + 1) * 64));
+};
+
+module.exports = SolidityParam;
+
-},{}],6:[function(require,module,exports){
+},{"../utils/utils":7}],4:[function(require,module,exports){
'use strict';
// go env doesn't have and need XMLHttpRequest
@@ -836,7 +727,7 @@ if (typeof XMLHttpRequest === 'undefined') {
}
-},{}],7:[function(require,module,exports){
+},{}],5:[function(require,module,exports){
/*
This file is part of ethereum.js.
@@ -861,13 +752,13 @@ if (typeof XMLHttpRequest === 'undefined') {
/**
* Utils
- *
+ *
* @module utils
*/
/**
* Utility functions
- *
+ *
* @class [utils] config
* @constructor
*/
@@ -875,26 +766,26 @@ if (typeof XMLHttpRequest === 'undefined') {
/// required to define ETH_BIGNUMBER_ROUNDING_MODE
var BigNumber = require('bignumber.js');
-var ETH_UNITS = [
- 'wei',
- 'Kwei',
- 'Mwei',
- 'Gwei',
- 'szabo',
- 'finney',
- 'ether',
- 'grand',
- 'Mether',
- 'Gether',
- 'Tether',
- 'Pether',
- 'Eether',
- 'Zether',
- 'Yether',
- 'Nether',
- 'Dether',
- 'Vether',
- 'Uether'
+var ETH_UNITS = [
+ 'wei',
+ 'Kwei',
+ 'Mwei',
+ 'Gwei',
+ 'szabo',
+ 'finney',
+ 'ether',
+ 'grand',
+ 'Mether',
+ 'Gether',
+ 'Tether',
+ 'Pether',
+ 'Eether',
+ 'Zether',
+ 'Yether',
+ 'Nether',
+ 'Dether',
+ 'Vether',
+ 'Uether'
];
module.exports = {
@@ -908,7 +799,7 @@ module.exports = {
};
-},{"bignumber.js":"bignumber.js"}],8:[function(require,module,exports){
+},{"bignumber.js":"bignumber.js"}],6:[function(require,module,exports){
/*
This file is part of ethereum.js.
@@ -925,7 +816,39 @@ module.exports = {
You should have received a copy of the GNU Lesser General Public License
along with ethereum.js. If not, see <http://www.gnu.org/licenses/>.
*/
-/**
+/**
+ * @file sha3.js
+ * @author Marek Kotewicz <marek@ethdev.com>
+ * @date 2015
+ */
+
+var sha3 = require('crypto-js/sha3');
+
+module.exports = function (str) {
+ return sha3(str, {
+ outputLength: 256
+ }).toString();
+};
+
+
+},{"crypto-js/sha3":30}],7:[function(require,module,exports){
+/*
+ This file is part of ethereum.js.
+
+ ethereum.js 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.
+
+ ethereum.js 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 ethereum.js. If not, see <http://www.gnu.org/licenses/>.
+*/
+/**
* @file utils.js
* @author Marek Kotewicz <marek@ethdev.com>
* @date 2015
@@ -933,13 +856,13 @@ module.exports = {
/**
* Utils
- *
+ *
* @module utils
*/
/**
* Utility functions
- *
+ *
* @class [utils] utils
* @constructor
*/
@@ -978,7 +901,7 @@ var padLeft = function (string, chars, sign) {
return new Array(chars - string.length + 1).join(sign ? sign : "0") + string;
};
-/**
+/**
* Should be called to get sting from it's hex representation
*
* @method toAscii
@@ -1003,9 +926,9 @@ var toAscii = function(hex) {
return str;
};
-
+
/**
- * Shold be called to get hex representation (prefixed by 0x) of ascii string
+ * Shold be called to get hex representation (prefixed by 0x) of ascii string
*
* @method toHexNative
* @param {String} string
@@ -1022,7 +945,7 @@ var toHexNative = function(str) {
};
/**
- * Shold be called to get hex representation (prefixed by 0x) of ascii string
+ * Shold be called to get hex representation (prefixed by 0x) of ascii string
*
* @method fromAscii
* @param {String} string
@@ -1055,13 +978,13 @@ var transformToFullName = function (json) {
/**
* Should be called to get display name of contract function
- *
+ *
* @method extractDisplayName
* @param {String} name of function/event
* @returns {String} display name for function/event eg. multiply(uint256) -> multiply
*/
var extractDisplayName = function (name) {
- var length = name.indexOf('(');
+ var length = name.indexOf('(');
return length !== -1 ? name.substr(0, length) : name;
};
@@ -1169,7 +1092,7 @@ var getValueOfUnit = function (unit) {
var fromWei = function(number, unit) {
var returnValue = toBigNumber(number).dividedBy(getValueOfUnit(unit));
- return isBigNumber(number) ? returnValue : returnValue.toString(10);
+ return isBigNumber(number) ? returnValue : returnValue.toString(10);
};
/**
@@ -1195,7 +1118,7 @@ var fromWei = function(number, unit) {
var toWei = function(number, unit) {
var returnValue = toBigNumber(number).times(getValueOfUnit(unit));
- return isBigNumber(number) ? returnValue : returnValue.toString(10);
+ return isBigNumber(number) ? returnValue : returnValue.toString(10);
};
/**
@@ -1214,7 +1137,7 @@ var toBigNumber = function(number) {
if (isString(number) && (number.indexOf('0x') === 0 || number.indexOf('-0x') === 0)) {
return new BigNumber(number.replace('0x',''), 16);
}
-
+
return new BigNumber(number.toString(10), 10);
};
@@ -1266,7 +1189,7 @@ var toAddress = function (address) {
if (isStrictAddress(address)) {
return address;
}
-
+
if (/^[0-9a-f]{40}$/.test(address)) {
return '0x' + address;
}
@@ -1274,12 +1197,13 @@ var toAddress = function (address) {
return '0x' + padLeft(toHex(address).substr(2), 40);
};
+
/**
* Returns true if object is BigNumber, otherwise false
*
* @method isBigNumber
* @param {Object}
- * @return {Boolean}
+ * @return {Boolean}
*/
var isBigNumber = function (object) {
return object instanceof BigNumber ||
@@ -1288,7 +1212,7 @@ var isBigNumber = function (object) {
/**
* Returns true if object is string, otherwise false
- *
+ *
* @method isString
* @param {Object}
* @return {Boolean}
@@ -1339,12 +1263,12 @@ var isBoolean = function (object) {
* @return {Boolean}
*/
var isArray = function (object) {
- return object instanceof Array;
+ return object instanceof Array;
};
/**
* Returns true if given string is valid json object
- *
+ *
* @method isJson
* @param {String}
* @return {Boolean}
@@ -1384,12 +1308,12 @@ module.exports = {
};
-},{"bignumber.js":"bignumber.js"}],9:[function(require,module,exports){
+},{"bignumber.js":"bignumber.js"}],8:[function(require,module,exports){
module.exports={
- "version": "0.3.5"
+ "version": "0.4.2"
}
-},{}],10:[function(require,module,exports){
+},{}],9:[function(require,module,exports){
/*
This file is part of ethereum.js.
@@ -1427,16 +1351,9 @@ var utils = require('./utils/utils');
var formatters = require('./web3/formatters');
var RequestManager = require('./web3/requestmanager');
var c = require('./utils/config');
-var Method = require('./web3/method');
var Property = require('./web3/property');
-
-var web3Methods = [
- new Method({
- name: 'sha3',
- call: 'web3_sha3',
- params: 1
- })
-];
+var Batch = require('./web3/batch');
+var sha3 = require('./utils/sha3');
var web3Properties = [
new Property({
@@ -1521,6 +1438,10 @@ web3.toBigNumber = utils.toBigNumber;
web3.toWei = utils.toWei;
web3.fromWei = utils.fromWei;
web3.isAddress = utils.isAddress;
+web3.sha3 = sha3;
+web3.createBatch = function () {
+ return new Batch();
+};
// ADD defaultblock
Object.defineProperty(web3.eth, 'defaultBlock', {
@@ -1544,7 +1465,6 @@ Object.defineProperty(web3.eth, 'defaultAccount', {
});
/// setups all api methods
-setupMethods(web3, web3Methods);
setupProperties(web3, web3Properties);
setupMethods(web3.net, net.methods);
setupProperties(web3.net, net.properties);
@@ -1556,7 +1476,7 @@ setupMethods(web3.shh, shh.methods);
module.exports = web3;
-},{"./utils/config":7,"./utils/utils":8,"./version.json":9,"./web3/db":12,"./web3/eth":14,"./web3/filter":16,"./web3/formatters":17,"./web3/method":21,"./web3/net":22,"./web3/property":23,"./web3/requestmanager":25,"./web3/shh":26,"./web3/watches":27}],11:[function(require,module,exports){
+},{"./utils/config":5,"./utils/sha3":6,"./utils/utils":7,"./version.json":8,"./web3/batch":10,"./web3/db":12,"./web3/eth":14,"./web3/filter":16,"./web3/formatters":17,"./web3/net":22,"./web3/property":23,"./web3/requestmanager":25,"./web3/shh":26,"./web3/watches":27}],10:[function(require,module,exports){
/*
This file is part of ethereum.js.
@@ -1573,20 +1493,109 @@ module.exports = web3;
You should have received a copy of the GNU Lesser General Public License
along with ethereum.js. If not, see <http://www.gnu.org/licenses/>.
*/
-/**
+/**
+ * @file batch.js
+ * @author Marek Kotewicz <marek@ethdev.com>
+ * @date 2015
+ */
+
+var RequestManager = require('./requestmanager');
+
+var Batch = function () {
+ this.requests = [];
+};
+
+/**
+ * Should be called to add create new request to batch request
+ *
+ * @method add
+ * @param {Object} jsonrpc requet object
+ */
+Batch.prototype.add = function (request) {
+ this.requests.push(request);
+};
+
+/**
+ * Should be called to execute batch request
+ *
+ * @method execute
+ */
+Batch.prototype.execute = function () {
+ var requests = this.requests;
+ RequestManager.getInstance().sendBatch(requests, function (err, results) {
+ results = results || [];
+ requests.map(function (request, index) {
+ return results[index] || {};
+ }).map(function (result, index) {
+ return requests[index].format ? requests[index].format(result.result) : result.result;
+ }).forEach(function (result, index) {
+ if (requests[index].callback) {
+ requests[index].callback(err, result);
+ }
+ });
+ });
+};
+
+module.exports = Batch;
+
+
+},{"./requestmanager":25}],11:[function(require,module,exports){
+/*
+ This file is part of ethereum.js.
+
+ ethereum.js 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.
+
+ ethereum.js 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 ethereum.js. If not, see <http://www.gnu.org/licenses/>.
+*/
+/**
* @file contract.js
* @author Marek Kotewicz <marek@ethdev.com>
* @date 2014
*/
-var web3 = require('../web3');
-var solAbi = require('../solidity/abi');
+var web3 = require('../web3');
var utils = require('../utils/utils');
+var coder = require('../solidity/coder');
var SolidityEvent = require('./event');
var SolidityFunction = require('./function');
-var addFunctionsToContract = function (contract, desc) {
- desc.filter(function (json) {
+/**
+ * Should be called to encode constructor params
+ *
+ * @method encodeConstructorParams
+ * @param {Array} abi
+ * @param {Array} constructor params
+ */
+var encodeConstructorParams = function (abi, params) {
+ return abi.filter(function (json) {
+ return json.type === 'constructor' && json.inputs.length === params.length;
+ }).map(function (json) {
+ return json.inputs.map(function (input) {
+ return input.type;
+ });
+ }).map(function (types) {
+ return coder.encodeParams(types, params);
+ })[0] || '';
+};
+
+/**
+ * Should be called to add functions to contract object
+ *
+ * @method addFunctionsToContract
+ * @param {Contract} contract
+ * @param {Array} abi
+ */
+var addFunctionsToContract = function (contract, abi) {
+ abi.filter(function (json) {
return json.type === 'function';
}).map(function (json) {
return new SolidityFunction(json, contract.address);
@@ -1595,8 +1604,15 @@ var addFunctionsToContract = function (contract, desc) {
});
};
-var addEventsToContract = function (contract, desc) {
- desc.filter(function (json) {
+/**
+ * Should be called to add events to contract object
+ *
+ * @method addEventsToContract
+ * @param {Contract} contract
+ * @param {Array} abi
+ */
+var addEventsToContract = function (contract, abi) {
+ abi.filter(function (json) {
return json.type === 'event';
}).map(function (json) {
return new SolidityEvent(json, contract.address);
@@ -1606,65 +1622,106 @@ var addEventsToContract = function (contract, desc) {
};
/**
- * This method should be called when we want to call / transact some solidity method from javascript
- * it returns an object which has same methods available as solidity contract description
- * usage example:
- *
- * var abi = [{
- * name: 'myMethod',
- * inputs: [{ name: 'a', type: 'string' }],
- * outputs: [{name: 'd', type: 'string' }]
- * }]; // contract abi
- *
- * var MyContract = web3.eth.contract(abi); // creation of contract prototype
- *
- * var contractInstance = new MyContract('0x0123123121');
- *
- * contractInstance.myMethod('this is test string param for call'); // myMethod call (implicit, default)
- * contractInstance.call().myMethod('this is test string param for call'); // myMethod call (explicit)
- * contractInstance.sendTransaction().myMethod('this is test string param for transact'); // myMethod sendTransaction
+ * Should be called to create new ContractFactory
*
- * @param abi - abi json description of the contract, which is being created
- * @returns contract object
+ * @method contract
+ * @param {Array} abi
+ * @returns {ContractFactory} new contract factory
*/
var contract = function (abi) {
+ return new ContractFactory(abi);
+};
- // return prototype
- return Contract.bind(null, abi);
+/**
+ * Should be called to create new ContractFactory instance
+ *
+ * @method ContractFactory
+ * @param {Array} abi
+ */
+var ContractFactory = function (abi) {
+ this.abi = abi;
};
-var Contract = function (abi, options) {
+/**
+ * Should be called to create new contract on a blockchain
+ *
+ * @method new
+ * @param {Any} contract constructor param1 (optional)
+ * @param {Any} contract constructor param2 (optional)
+ * @param {Object} contract transaction object (required)
+ * @param {Function} callback
+ * @returns {Contract} returns contract if no callback was passed,
+ * otherwise calls callback function (err, contract)
+ */
+ContractFactory.prototype.new = function () {
+ // parse arguments
+ var options = {}; // required!
+ var callback;
- this.address = '';
- if (utils.isAddress(options)) {
- this.address = options;
- } else { // is an object!
- // TODO, parse the rest of the args
- options = options || {};
- var args = Array.prototype.slice.call(arguments, 2);
- var bytes = solAbi.formatConstructorParams(abi, args);
- options.data += bytes;
- this.address = web3.eth.sendTransaction(options);
+ var args = Array.prototype.slice.call(arguments);
+ if (utils.isFunction(args[args.length - 1])) {
+ callback = args.pop();
}
- addFunctionsToContract(this, abi);
- addEventsToContract(this, abi);
+ var last = args[args.length - 1];
+ if (utils.isObject(last) && !utils.isArray(last)) {
+ options = args.pop();
+ }
+
+ // throw an error if there are no options
+
+ var bytes = encodeConstructorParams(this.abi, args);
+ options.data += bytes;
+
+ if (!callback) {
+ var address = web3.eth.sendTransaction(options);
+ return this.at(address);
+ }
+
+ var self = this;
+ web3.eth.sendTransaction(options, function (err, address) {
+ if (err) {
+ callback(err);
+ }
+ self.at(address, callback);
+ });
};
-Contract.prototype.call = function () {
- console.error('contract.call is deprecated');
- return this;
+/**
+ * Should be called to get access to existing contract on a blockchain
+ *
+ * @method at
+ * @param {Address} contract address (required)
+ * @param {Function} callback {optional)
+ * @returns {Contract} returns contract if no callback was passed,
+ * otherwise calls callback function (err, contract)
+ */
+ContractFactory.prototype.at = function (address, callback) {
+ // TODO: address is required
+
+ if (callback) {
+ callback(null, new Contract(this.abi, address));
+ }
+ return new Contract(this.abi, address);
};
-Contract.prototype.sendTransaction = function () {
- console.error('contract.sendTransact is deprecated');
- return this;
+/**
+ * Should be called to create new contract instance
+ *
+ * @method Contract
+ * @param {Array} abi
+ * @param {Address} contract address
+ */
+var Contract = function (abi, address) {
+ this.address = address;
+ addFunctionsToContract(this, abi);
+ addEventsToContract(this, abi);
};
module.exports = contract;
-},{"../solidity/abi":1,"../utils/utils":8,"../web3":10,"./event":15,"./function":18}],12:[function(require,module,exports){
+},{"../solidity/coder":1,"../utils/utils":7,"../web3":9,"./event":15,"./function":18}],12:[function(require,module,exports){
/*
This file is part of ethereum.js.
@@ -1739,7 +1796,7 @@ module.exports = {
You should have received a copy of the GNU Lesser General Public License
along with ethereum.js. If not, see <http://www.gnu.org/licenses/>.
*/
-/**
+/**
* @file errors.js
* @author Marek Kotewicz <marek@ethdev.com>
* @date 2015
@@ -1925,12 +1982,6 @@ var getTransactionCount = new Method({
outputFormatter: utils.toDecimal
});
-var sign = new Method({
- name: 'sign',
- call: 'eth_sign',
- params: 1
-});
-
var sendTransaction = new Method({
name: 'sendTransaction',
call: 'eth_sendTransaction',
@@ -1945,6 +1996,14 @@ var call = new Method({
inputFormatter: [formatters.inputTransactionFormatter, formatters.inputDefaultBlockNumberFormatter]
});
+var estimateGas = new Method({
+ name: 'estimateGas',
+ call: 'eth_estimateGas',
+ params: 1,
+ inputFormatter: [formatters.inputTransactionFormatter],
+ outputFormatter: utils.toDecimal
+});
+
var compileSolidity = new Method({
name: 'compile.solidity',
call: 'eth_compileSolidity',
@@ -1963,6 +2022,18 @@ var compileSerpent = new Method({
params: 1
});
+var submitWork = new Method({
+ name: 'submitWork',
+ call: 'eth_submitWork',
+ params: 3
+});
+
+var getWork = new Method({
+ name: 'getWork',
+ call: 'eth_getWork',
+ params: 0
+});
+
var methods = [
getBalance,
getStorageAt,
@@ -1976,11 +2047,13 @@ var methods = [
getTransactionFromBlock,
getTransactionCount,
call,
- sign,
+ estimateGas,
sendTransaction,
compileSolidity,
compileLLL,
compileSerpent,
+ submitWork,
+ getWork
];
/// @returns an array of objects describing web3.eth api properties
@@ -2023,7 +2096,7 @@ module.exports = {
};
-},{"../utils/utils":8,"./formatters":17,"./method":21,"./property":23}],15:[function(require,module,exports){
+},{"../utils/utils":7,"./formatters":17,"./method":21,"./property":23}],15:[function(require,module,exports){
/*
This file is part of ethereum.js.
@@ -2040,7 +2113,7 @@ module.exports = {
You should have received a copy of the GNU Lesser General Public License
along with ethereum.js. If not, see <http://www.gnu.org/licenses/>.
*/
-/**
+/**
* @file event.js
* @author Marek Kotewicz <marek@ethdev.com>
* @date 2014
@@ -2050,6 +2123,7 @@ var utils = require('../utils/utils');
var coder = require('../solidity/coder');
var web3 = require('../web3');
var formatters = require('./formatters');
+var sha3 = require('../utils/sha3');
/**
* This prototype should be used to create event filters
@@ -2103,12 +2177,12 @@ SolidityEvent.prototype.typeName = function () {
* @return {String} event signature
*/
SolidityEvent.prototype.signature = function () {
- return web3.sha3(web3.fromAscii(this._name)).slice(2);
+ return sha3(this._name);
};
/**
* Should be used to encode indexed params and options to one final object
- *
+ *
* @method encode
* @param {Object} indexed
* @param {Object} options
@@ -2139,7 +2213,7 @@ SolidityEvent.prototype.encode = function (indexed, options) {
if (value === undefined || value === null) {
return null;
}
-
+
if (utils.isArray(value)) {
return value.map(function (v) {
return '0x' + coder.encodeParam(i.type, v);
@@ -2161,17 +2235,17 @@ SolidityEvent.prototype.encode = function (indexed, options) {
* @return {Object} result object with decoded indexed && not indexed params
*/
SolidityEvent.prototype.decode = function (data) {
-
+
data.data = data.data || '';
data.topics = data.topics || [];
var argTopics = this._anonymous ? data.topics : data.topics.slice(1);
var indexedData = argTopics.map(function (topics) { return topics.slice(2); }).join("");
- var indexedParams = coder.decodeParams(this.types(true), indexedData);
+ var indexedParams = coder.decodeParams(this.types(true), indexedData);
var notIndexedData = data.data.slice(2);
var notIndexedParams = coder.decodeParams(this.types(false), notIndexedData);
-
+
var result = formatters.outputLogFormatter(data);
result.event = this.displayName();
result.address = data.address;
@@ -2219,7 +2293,7 @@ SolidityEvent.prototype.attachToContract = function (contract) {
module.exports = SolidityEvent;
-},{"../solidity/coder":2,"../utils/utils":8,"../web3":10,"./formatters":17}],16:[function(require,module,exports){
+},{"../solidity/coder":1,"../utils/sha3":6,"../utils/utils":7,"../web3":9,"./formatters":17}],16:[function(require,module,exports){
/*
This file is part of ethereum.js.
@@ -2276,7 +2350,7 @@ var getOptions = function (options) {
if (utils.isString(options)) {
return options;
- }
+ }
options = options || {};
@@ -2292,8 +2366,8 @@ var getOptions = function (options) {
to: options.to,
address: options.address,
fromBlock: formatters.inputBlockNumberFormatter(options.fromBlock),
- toBlock: formatters.inputBlockNumberFormatter(options.toBlock)
- };
+ toBlock: formatters.inputBlockNumberFormatter(options.toBlock)
+ };
};
var Filter = function (options, methods, formatter) {
@@ -2376,7 +2450,7 @@ Filter.prototype.get = function (callback) {
module.exports = Filter;
-},{"../utils/utils":8,"./formatters":17,"./requestmanager":25}],17:[function(require,module,exports){
+},{"../utils/utils":7,"./formatters":17,"./requestmanager":25}],17:[function(require,module,exports){
/*
This file is part of ethereum.js.
@@ -2393,7 +2467,7 @@ module.exports = Filter;
You should have received a copy of the GNU Lesser General Public License
along with ethereum.js. If not, see <http://www.gnu.org/licenses/>.
*/
-/**
+/**
* @file formatters.js
* @author Marek Kotewicz <marek@ethdev.com>
* @author Fabian Vogelsteller <fabian@ethdev.com>
@@ -2451,18 +2525,18 @@ var inputTransactionFormatter = function (options){
delete options.code;
}
- ['gasPrice', 'gas', 'value'].filter(function (key) {
+ ['gasPrice', 'gas', 'value', 'nonce'].filter(function (key) {
return options[key] !== undefined;
}).forEach(function(key){
options[key] = utils.fromDecimal(options[key]);
});
- return options;
+ return options;
};
/**
* Formats the output of a transaction to its proper values
- *
+ *
* @method outputTransactionFormatter
* @param {Object} transaction
* @returns {Object} transaction
@@ -2481,7 +2555,7 @@ var outputTransactionFormatter = function (tx){
* Formats the output of a block to its proper values
*
* @method outputBlockFormatter
- * @param {Object} block object
+ * @param {Object} block object
* @returns {Object} block object
*/
var outputBlockFormatter = function(block) {
@@ -2508,7 +2582,7 @@ var outputBlockFormatter = function(block) {
/**
* Formats the output of a log
- *
+ *
* @method outputLogFormatter
* @param {Object} log object
* @returns {Object} log
@@ -2549,7 +2623,7 @@ var inputPostFormatter = function(post) {
return utils.fromAscii(topic);
});
- return post;
+ return post;
};
/**
@@ -2596,7 +2670,7 @@ module.exports = {
};
-},{"../utils/config":7,"../utils/utils":8}],18:[function(require,module,exports){
+},{"../utils/config":5,"../utils/utils":7}],18:[function(require,module,exports){
/*
This file is part of ethereum.js.
@@ -2613,7 +2687,7 @@ module.exports = {
You should have received a copy of the GNU Lesser General Public License
along with ethereum.js. If not, see <http://www.gnu.org/licenses/>.
*/
-/**
+/**
* @file function.js
* @author Marek Kotewicz <marek@ethdev.com>
* @date 2015
@@ -2622,6 +2696,7 @@ module.exports = {
var web3 = require('../web3');
var coder = require('../solidity/coder');
var utils = require('../utils/utils');
+var sha3 = require('../utils/sha3');
/**
* This prototype should be used to call/sendTransaction to solidity functions
@@ -2638,18 +2713,23 @@ var SolidityFunction = function (json, address) {
this._address = address;
};
+SolidityFunction.prototype.extractCallback = function (args) {
+ if (utils.isFunction(args[args.length - 1])) {
+ return args.pop(); // modify the args array!
+ }
+};
+
/**
* Should be used to create payload from arguments
*
* @method toPayload
- * @param {...} solidity function params
+ * @param {Array} solidity function params
* @param {Object} optional payload options
*/
-SolidityFunction.prototype.toPayload = function () {
- var args = Array.prototype.slice.call(arguments);
+SolidityFunction.prototype.toPayload = function (args) {
var options = {};
if (args.length > this._inputTypes.length && utils.isObject(args[args.length -1])) {
- options = args.pop();
+ options = args[args.length - 1];
}
options.to = this._address;
options.data = '0x' + this.signature() + coder.encodeParams(this._inputTypes, args);
@@ -2663,22 +2743,44 @@ SolidityFunction.prototype.toPayload = function () {
* @return {String} function signature
*/
SolidityFunction.prototype.signature = function () {
- return web3.sha3(web3.fromAscii(this._name)).slice(2, 10);
+ return sha3(this._name).slice(0, 8);
+};
+
+
+SolidityFunction.prototype.unpackOutput = function (output) {
+ if (output === null) {
+ return;
+ }
+
+ output = output.length >= 2 ? output.slice(2) : output;
+ var result = coder.decodeParams(this._outputTypes, output);
+ return result.length === 1 ? result[0] : result;
};
/**
- * Should be used to call function
- *
+ * Calls a contract function.
+ *
* @method call
- * @param {Object} options
+ * @param {...Object} Contract function arguments
+ * @param {function} If the last argument is a function, the contract function
+ * call will be asynchronous, and the callback will be passed the
+ * error and result.
* @return {String} output bytes
*/
SolidityFunction.prototype.call = function () {
- var payload = this.toPayload.apply(this, Array.prototype.slice.call(arguments));
- var output = web3.eth.call(payload);
- output = output.length >= 2 ? output.slice(2) : output;
- var result = coder.decodeParams(this._outputTypes, output);
- return result.length === 1 ? result[0] : result;
+ var args = Array.prototype.slice.call(arguments);
+ var callback = this.extractCallback(args);
+ var payload = this.toPayload(args);
+
+ if (!callback) {
+ var output = web3.eth.call(payload);
+ return this.unpackOutput(output);
+ }
+
+ var self = this;
+ web3.eth.call(payload, function (error, output) {
+ callback(error, self.unpackOutput(output));
+ });
};
/**
@@ -2688,8 +2790,16 @@ SolidityFunction.prototype.call = function () {
* @param {Object} options
*/
SolidityFunction.prototype.sendTransaction = function () {
- var payload = this.toPayload.apply(this, Array.prototype.slice.call(arguments));
- web3.eth.sendTransaction(payload);
+ var args = Array.prototype.slice.call(arguments);
+ var callback = this.extractCallback(args);
+ var payload = this.toPayload(args);
+
+ if (!callback) {
+ web3.eth.sendTransaction(payload);
+ return;
+ }
+
+ web3.eth.sendTransaction(payload, callback);
};
/**
@@ -2704,7 +2814,7 @@ SolidityFunction.prototype.displayName = function () {
/**
* Should be used to get function type name
- *
+ *
* @method typeName
* @return {String} type name of the function
*/
@@ -2713,13 +2823,32 @@ SolidityFunction.prototype.typeName = function () {
};
/**
+ * Should be called to get rpc requests from solidity function
+ *
+ * @method request
+ * @returns {Object}
+ */
+SolidityFunction.prototype.request = function () {
+ var args = Array.prototype.slice.call(arguments);
+ var callback = this.extractCallback(args);
+ var payload = this.toPayload(args);
+ var format = this.unpackOutput.bind(this);
+
+ return {
+ callback: callback,
+ payload: payload,
+ format: format
+ };
+};
+
+/**
* Should be called to execute function
*
* @method execute
*/
SolidityFunction.prototype.execute = function () {
var transaction = !this._constant;
-
+
// send transaction
if (transaction) {
return this.sendTransaction.apply(this, Array.prototype.slice.call(arguments));
@@ -2737,6 +2866,7 @@ SolidityFunction.prototype.execute = function () {
*/
SolidityFunction.prototype.attachToContract = function (contract) {
var execute = this.execute.bind(this);
+ execute.request = this.request.bind(this);
execute.call = this.call.bind(this);
execute.sendTransaction = this.sendTransaction.bind(this);
var displayName = this.displayName();
@@ -2749,7 +2879,7 @@ SolidityFunction.prototype.attachToContract = function (contract) {
module.exports = SolidityFunction;
-},{"../solidity/coder":2,"../utils/utils":8,"../web3":10}],19:[function(require,module,exports){
+},{"../solidity/coder":1,"../utils/sha3":6,"../utils/utils":7,"../web3":9}],19:[function(require,module,exports){
/*
This file is part of ethereum.js.
@@ -2787,7 +2917,7 @@ HttpProvider.prototype.send = function (payload) {
var request = new XMLHttpRequest();
request.open('POST', this.host, false);
-
+
try {
request.send(JSON.stringify(payload));
} catch(error) {
@@ -2800,15 +2930,32 @@ HttpProvider.prototype.send = function (payload) {
//if (request.status !== 200) {
//return;
//}
- return JSON.parse(request.responseText);
+
+ var result = request.responseText;
+
+ try {
+ result = JSON.parse(result);
+ } catch(e) {
+ throw errors.InvalidResponse(result);
+ }
+
+ return result;
};
HttpProvider.prototype.sendAsync = function (payload, callback) {
var request = new XMLHttpRequest();
request.onreadystatechange = function() {
if (request.readyState === 4) {
- // TODO: handle the error properly here!!!
- callback(null, JSON.parse(request.responseText));
+ var result = request.responseText;
+ var error = null;
+
+ try {
+ result = JSON.parse(result);
+ } catch(e) {
+ error = errors.InvalidResponse(result);
+ }
+
+ callback(error, result);
}
};
@@ -2824,7 +2971,7 @@ HttpProvider.prototype.sendAsync = function (payload, callback) {
module.exports = HttpProvider;
-},{"./errors":13,"xmlhttprequest":6}],20:[function(require,module,exports){
+},{"./errors":13,"xmlhttprequest":4}],20:[function(require,module,exports){
/*
This file is part of ethereum.js.
@@ -2974,12 +3121,11 @@ Method.prototype.extractCallback = function (args) {
if (utils.isFunction(args[args.length - 1])) {
return args.pop(); // modify the args array!
}
- return null;
};
/**
* Should be called to check if the number of arguments is correct
- *
+ *
* @method validateArgs
* @param {Array} arguments
* @throws {Error} if it is not
@@ -2992,7 +3138,7 @@ Method.prototype.validateArgs = function (args) {
/**
* Should be called to format input args of method
- *
+ *
* @method formatInput
* @param {Array}
* @return {Array}
@@ -3020,20 +3166,21 @@ Method.prototype.formatOutput = function (result) {
/**
* Should attach function to method
- *
+ *
* @method attachToObject
* @param {Object}
* @param {Function}
*/
Method.prototype.attachToObject = function (obj) {
var func = this.send.bind(this);
+ func.request = this.request.bind(this);
func.call = this.call; // that's ugly. filter.js uses it
var name = this.name.split('.');
if (name.length > 1) {
obj[name[0]] = obj[name[0]] || {};
obj[name[0]][name[1]] = func;
} else {
- obj[name[0]] = func;
+ obj[name[0]] = func;
}
};
@@ -3058,6 +3205,19 @@ Method.prototype.toPayload = function (args) {
};
/**
+ * Should be called to create pure JSONRPC request which can be used in batch request
+ *
+ * @method request
+ * @param {...} params
+ * @return {Object} jsonrpc request
+ */
+Method.prototype.request = function () {
+ var payload = this.toPayload(Array.prototype.slice.call(arguments));
+ payload.format = this.formatOutput.bind(this);
+ return payload;
+};
+
+/**
* Should send request to the API
*
* @method send
@@ -3069,7 +3229,7 @@ Method.prototype.send = function () {
if (payload.callback) {
var self = this;
return RequestManager.getInstance().sendAsync(payload, function (err, result) {
- payload.callback(null, self.formatOutput(result));
+ payload.callback(err, self.formatOutput(result));
});
}
return this.formatOutput(RequestManager.getInstance().send(payload));
@@ -3078,7 +3238,7 @@ Method.prototype.send = function () {
module.exports = Method;
-},{"../utils/utils":8,"./errors":13,"./requestmanager":25}],22:[function(require,module,exports){
+},{"../utils/utils":7,"./errors":13,"./requestmanager":25}],22:[function(require,module,exports){
/*
This file is part of ethereum.js.
@@ -3128,7 +3288,7 @@ module.exports = {
};
-},{"../utils/utils":8,"./property":23}],23:[function(require,module,exports){
+},{"../utils/utils":7,"./property":23}],23:[function(require,module,exports){
/*
This file is part of ethereum.js.
@@ -3164,7 +3324,7 @@ var Property = function (options) {
/**
* Should be called to format input args of method
- *
+ *
* @method formatInput
* @param {Array}
* @return {Array}
@@ -3186,7 +3346,7 @@ Property.prototype.formatOutput = function (result) {
/**
* Should attach function to method
- *
+ *
* @method attachToObject
* @param {Object}
* @param {Function}
@@ -3194,16 +3354,23 @@ Property.prototype.formatOutput = function (result) {
Property.prototype.attachToObject = function (obj) {
var proto = {
get: this.get.bind(this),
- set: this.set.bind(this)
};
- var name = this.name.split('.');
- if (name.length > 1) {
- obj[name[0]] = obj[name[0]] || {};
- Object.defineProperty(obj[name[0]], name[1], proto);
- } else {
- Object.defineProperty(obj, name[0], proto);
+ var names = this.name.split('.');
+ var name = names[0];
+ if (names.length > 1) {
+ obj[names[0]] = obj[names[0]] || {};
+ obj = obj[names[0]];
+ name = names[1];
}
+
+ Object.defineProperty(obj, name, proto);
+
+ var toAsyncName = function (prefix, name) {
+ return prefix + name.charAt(0).toUpperCase() + name.slice(1);
+ };
+
+ obj[toAsyncName('get', name)] = this.getAsync.bind(this);
};
/**
@@ -3219,15 +3386,20 @@ Property.prototype.get = function () {
};
/**
- * Should be used to set value of the property
+ * Should be used to asynchrounously get value of property
*
- * @method set
- * @param {Object} new value of the property
+ * @method getAsync
+ * @param {Function}
*/
-Property.prototype.set = function (value) {
- return RequestManager.getInstance().send({
- method: this.setter,
- params: [this.formatInput(value)]
+Property.prototype.getAsync = function (callback) {
+ var self = this;
+ RequestManager.getInstance().sendAsync({
+ method: this.getter
+ }, function (err, result) {
+ if (err) {
+ return callback(err);
+ }
+ callback(err, self.formatOutput(result));
});
};
@@ -3286,7 +3458,7 @@ module.exports = QtSyncProvider;
You should have received a copy of the GNU Lesser General Public License
along with ethereum.js. If not, see <http://www.gnu.org/licenses/>.
*/
-/**
+/**
* @file requestmanager.js
* @author Jeffrey Wilcke <jeff@ethdev.com>
* @author Marek Kotewicz <marek@ethdev.com>
@@ -3368,7 +3540,7 @@ RequestManager.prototype.sendAsync = function (data, callback) {
if (err) {
return callback(err);
}
-
+
if (!Jsonrpc.getInstance().isValidResponse(result)) {
return callback(errors.InvalidResponse(result));
}
@@ -3378,6 +3550,33 @@ RequestManager.prototype.sendAsync = function (data, callback) {
};
/**
+ * Should be called to asynchronously send batch request
+ *
+ * @method sendBatch
+ * @param {Array} batch data
+ * @param {Function} callback
+ */
+RequestManager.prototype.sendBatch = function (data, callback) {
+ if (!this.provider) {
+ return callback(errors.InvalidProvider());
+ }
+
+ var payload = Jsonrpc.getInstance().toBatchPayload(data);
+
+ this.provider.sendAsync(payload, function (err, results) {
+ if (err) {
+ return callback(err);
+ }
+
+ if (!utils.isArray(results)) {
+ return callback(errors.InvalidResponse(results));
+ }
+
+ callback(err, results);
+ });
+};
+
+/**
* Should be used to set provider of request manager
*
* @method setProvider
@@ -3427,7 +3626,7 @@ RequestManager.prototype.stopPolling = function (pollId) {
*/
RequestManager.prototype.reset = function () {
this.polls.forEach(function (poll) {
- poll.uninstall(poll.id);
+ poll.uninstall(poll.id);
});
this.polls = [];
@@ -3465,7 +3664,7 @@ RequestManager.prototype.poll = function () {
if (error) {
return;
}
-
+
if (!utils.isArray(results)) {
throw errors.InvalidResponse(results);
}
@@ -3490,7 +3689,7 @@ RequestManager.prototype.poll = function () {
module.exports = RequestManager;
-},{"../utils/config":7,"../utils/utils":8,"./errors":13,"./jsonrpc":20}],26:[function(require,module,exports){
+},{"../utils/config":5,"../utils/utils":7,"./errors":13,"./jsonrpc":20}],26:[function(require,module,exports){
/*
This file is part of ethereum.js.
@@ -3517,8 +3716,8 @@ var Method = require('./method');
var formatters = require('./formatters');
var post = new Method({
- name: 'post',
- call: 'shh_post',
+ name: 'post',
+ call: 'shh_post',
params: 1,
inputFormatter: [formatters.inputPostFormatter]
});
@@ -3588,7 +3787,20 @@ var Method = require('./method');
/// @returns an array of objects describing web3.eth.filter api methods
var eth = function () {
var newFilterCall = function (args) {
- return typeof args[0] === 'string' ? 'eth_newBlockFilter' : 'eth_newFilter';
+ var type = args[0];
+
+ switch(type) {
+ case 'latest':
+ args.pop();
+ this.params = 0;
+ return 'eth_newBlockFilter';
+ case 'pending':
+ args.pop();
+ this.params = 0;
+ return 'eth_newPendingTransactionFilter';
+ default:
+ return 'eth_newFilter';
+ }
};
var newFilter = new Method({
@@ -3665,7 +3877,1382 @@ module.exports = {
},{"./method":21}],28:[function(require,module,exports){
-},{}],"bignumber.js":[function(require,module,exports){
+},{}],29:[function(require,module,exports){
+;(function (root, factory) {
+ if (typeof exports === "object") {
+ // CommonJS
+ module.exports = exports = factory();
+ }
+ else if (typeof define === "function" && define.amd) {
+ // AMD
+ define([], factory);
+ }
+ else {
+ // Global (browser)
+ root.CryptoJS = factory();
+ }
+}(this, function () {
+
+ /**
+ * CryptoJS core components.
+ */
+ var CryptoJS = CryptoJS || (function (Math, undefined) {
+ /**
+ * CryptoJS namespace.
+ */
+ var C = {};
+
+ /**
+ * Library namespace.
+ */
+ var C_lib = C.lib = {};
+
+ /**
+ * Base object for prototypal inheritance.
+ */
+ var Base = C_lib.Base = (function () {
+ function F() {}
+
+ return {
+ /**
+ * Creates a new object that inherits from this object.
+ *
+ * @param {Object} overrides Properties to copy into the new object.
+ *
+ * @return {Object} The new object.
+ *
+ * @static
+ *
+ * @example
+ *
+ * var MyType = CryptoJS.lib.Base.extend({
+ * field: 'value',
+ *
+ * method: function () {
+ * }
+ * });
+ */
+ extend: function (overrides) {
+ // Spawn
+ F.prototype = this;
+ var subtype = new F();
+
+ // Augment
+ if (overrides) {
+ subtype.mixIn(overrides);
+ }
+
+ // Create default initializer
+ if (!subtype.hasOwnProperty('init')) {
+ subtype.init = function () {
+ subtype.$super.init.apply(this, arguments);
+ };
+ }
+
+ // Initializer's prototype is the subtype object
+ subtype.init.prototype = subtype;
+
+ // Reference supertype
+ subtype.$super = this;
+
+ return subtype;
+ },
+
+ /**
+ * Extends this object and runs the init method.
+ * Arguments to create() will be passed to init().
+ *
+ * @return {Object} The new object.
+ *
+ * @static
+ *
+ * @example
+ *
+ * var instance = MyType.create();
+ */
+ create: function () {
+ var instance = this.extend();
+ instance.init.apply(instance, arguments);
+
+ return instance;
+ },
+
+ /**
+ * Initializes a newly created object.
+ * Override this method to add some logic when your objects are created.
+ *
+ * @example
+ *
+ * var MyType = CryptoJS.lib.Base.extend({
+ * init: function () {
+ * // ...
+ * }
+ * });
+ */
+ init: function () {
+ },
+
+ /**
+ * Copies properties into this object.
+ *
+ * @param {Object} properties The properties to mix in.
+ *
+ * @example
+ *
+ * MyType.mixIn({
+ * field: 'value'
+ * });
+ */
+ mixIn: function (properties) {
+ for (var propertyName in properties) {
+ if (properties.hasOwnProperty(propertyName)) {
+ this[propertyName] = properties[propertyName];
+ }
+ }
+
+ // IE won't copy toString using the loop above
+ if (properties.hasOwnProperty('toString')) {
+ this.toString = properties.toString;
+ }
+ },
+
+ /**
+ * Creates a copy of this object.
+ *
+ * @return {Object} The clone.
+ *
+ * @example
+ *
+ * var clone = instance.clone();
+ */
+ clone: function () {
+ return this.init.prototype.extend(this);
+ }
+ };
+ }());
+
+ /**
+ * An array of 32-bit words.
+ *
+ * @property {Array} words The array of 32-bit words.
+ * @property {number} sigBytes The number of significant bytes in this word array.
+ */
+ var WordArray = C_lib.WordArray = Base.extend({
+ /**
+ * Initializes a newly created word array.
+ *
+ * @param {Array} words (Optional) An array of 32-bit words.
+ * @param {number} sigBytes (Optional) The number of significant bytes in the words.
+ *
+ * @example
+ *
+ * var wordArray = CryptoJS.lib.WordArray.create();
+ * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);
+ * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);
+ */
+ init: function (words, sigBytes) {
+ words = this.words = words || [];
+
+ if (sigBytes != undefined) {
+ this.sigBytes = sigBytes;
+ } else {
+ this.sigBytes = words.length * 4;
+ }
+ },
+
+ /**
+ * Converts this word array to a string.
+ *
+ * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex
+ *
+ * @return {string} The stringified word array.
+ *
+ * @example
+ *
+ * var string = wordArray + '';
+ * var string = wordArray.toString();
+ * var string = wordArray.toString(CryptoJS.enc.Utf8);
+ */
+ toString: function (encoder) {
+ return (encoder || Hex).stringify(this);
+ },
+
+ /**
+ * Concatenates a word array to this word array.
+ *
+ * @param {WordArray} wordArray The word array to append.
+ *
+ * @return {WordArray} This word array.
+ *
+ * @example
+ *
+ * wordArray1.concat(wordArray2);
+ */
+ concat: function (wordArray) {
+ // Shortcuts
+ var thisWords = this.words;
+ var thatWords = wordArray.words;
+ var thisSigBytes = this.sigBytes;
+ var thatSigBytes = wordArray.sigBytes;
+
+ // Clamp excess bits
+ this.clamp();
+
+ // Concat
+ if (thisSigBytes % 4) {
+ // Copy one byte at a time
+ for (var i = 0; i < thatSigBytes; i++) {
+ var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;
+ thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8);
+ }
+ } else if (thatWords.length > 0xffff) {
+ // Copy one word at a time
+ for (var i = 0; i < thatSigBytes; i += 4) {
+ thisWords[(thisSigBytes + i) >>> 2] = thatWords[i >>> 2];
+ }
+ } else {
+ // Copy all words at once
+ thisWords.push.apply(thisWords, thatWords);
+ }
+ this.sigBytes += thatSigBytes;
+
+ // Chainable
+ return this;
+ },
+
+ /**
+ * Removes insignificant bits.
+ *
+ * @example
+ *
+ * wordArray.clamp();
+ */
+ clamp: function () {
+ // Shortcuts
+ var words = this.words;
+ var sigBytes = this.sigBytes;
+
+ // Clamp
+ words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8);
+ words.length = Math.ceil(sigBytes / 4);
+ },
+
+ /**
+ * Creates a copy of this word array.
+ *
+ * @return {WordArray} The clone.
+ *
+ * @example
+ *
+ * var clone = wordArray.clone();
+ */
+ clone: function () {
+ var clone = Base.clone.call(this);
+ clone.words = this.words.slice(0);
+
+ return clone;
+ },
+
+ /**
+ * Creates a word array filled with random bytes.
+ *
+ * @param {number} nBytes The number of random bytes to generate.
+ *
+ * @return {WordArray} The random word array.
+ *
+ * @static
+ *
+ * @example
+ *
+ * var wordArray = CryptoJS.lib.WordArray.random(16);
+ */
+ random: function (nBytes) {
+ var words = [];
+
+ var r = (function (m_w) {
+ var m_w = m_w;
+ var m_z = 0x3ade68b1;
+ var mask = 0xffffffff;
+
+ return function () {
+ m_z = (0x9069 * (m_z & 0xFFFF) + (m_z >> 0x10)) & mask;
+ m_w = (0x4650 * (m_w & 0xFFFF) + (m_w >> 0x10)) & mask;
+ var result = ((m_z << 0x10) + m_w) & mask;
+ result /= 0x100000000;
+ result += 0.5;
+ return result * (Math.random() > .5 ? 1 : -1);
+ }
+ });
+
+ for (var i = 0, rcache; i < nBytes; i += 4) {
+ var _r = r((rcache || Math.random()) * 0x100000000);
+
+ rcache = _r() * 0x3ade67b7;
+ words.push((_r() * 0x100000000) | 0);
+ }
+
+ return new WordArray.init(words, nBytes);
+ }
+ });
+
+ /**
+ * Encoder namespace.
+ */
+ var C_enc = C.enc = {};
+
+ /**
+ * Hex encoding strategy.
+ */
+ var Hex = C_enc.Hex = {
+ /**
+ * Converts a word array to a hex string.
+ *
+ * @param {WordArray} wordArray The word array.
+ *
+ * @return {string} The hex string.
+ *
+ * @static
+ *
+ * @example
+ *
+ * var hexString = CryptoJS.enc.Hex.stringify(wordArray);
+ */
+ stringify: function (wordArray) {
+ // Shortcuts
+ var words = wordArray.words;
+ var sigBytes = wordArray.sigBytes;
+
+ // Convert
+ var hexChars = [];
+ for (var i = 0; i < sigBytes; i++) {
+ var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;
+ hexChars.push((bite >>> 4).toString(16));
+ hexChars.push((bite & 0x0f).toString(16));
+ }
+
+ return hexChars.join('');
+ },
+
+ /**
+ * Converts a hex string to a word array.
+ *
+ * @param {string} hexStr The hex string.
+ *
+ * @return {WordArray} The word array.
+ *
+ * @static
+ *
+ * @example
+ *
+ * var wordArray = CryptoJS.enc.Hex.parse(hexString);
+ */
+ parse: function (hexStr) {
+ // Shortcut
+ var hexStrLength = hexStr.length;
+
+ // Convert
+ var words = [];
+ for (var i = 0; i < hexStrLength; i += 2) {
+ words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4);
+ }
+
+ return new WordArray.init(words, hexStrLength / 2);
+ }
+ };
+
+ /**
+ * Latin1 encoding strategy.
+ */
+ var Latin1 = C_enc.Latin1 = {
+ /**
+ * Converts a word array to a Latin1 string.
+ *
+ * @param {WordArray} wordArray The word array.
+ *
+ * @return {string} The Latin1 string.
+ *
+ * @static
+ *
+ * @example
+ *
+ * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);
+ */
+ stringify: function (wordArray) {
+ // Shortcuts
+ var words = wordArray.words;
+ var sigBytes = wordArray.sigBytes;
+
+ // Convert
+ var latin1Chars = [];
+ for (var i = 0; i < sigBytes; i++) {
+ var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;
+ latin1Chars.push(String.fromCharCode(bite));
+ }
+
+ return latin1Chars.join('');
+ },
+
+ /**
+ * Converts a Latin1 string to a word array.
+ *
+ * @param {string} latin1Str The Latin1 string.
+ *
+ * @return {WordArray} The word array.
+ *
+ * @static
+ *
+ * @example
+ *
+ * var wordArray = CryptoJS.enc.Latin1.parse(latin1String);
+ */
+ parse: function (latin1Str) {
+ // Shortcut
+ var latin1StrLength = latin1Str.length;
+
+ // Convert
+ var words = [];
+ for (var i = 0; i < latin1StrLength; i++) {
+ words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8);
+ }
+
+ return new WordArray.init(words, latin1StrLength);
+ }
+ };
+
+ /**
+ * UTF-8 encoding strategy.
+ */
+ var Utf8 = C_enc.Utf8 = {
+ /**
+ * Converts a word array to a UTF-8 string.
+ *
+ * @param {WordArray} wordArray The word array.
+ *
+ * @return {string} The UTF-8 string.
+ *
+ * @static
+ *
+ * @example
+ *
+ * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);
+ */
+ stringify: function (wordArray) {
+ try {
+ return decodeURIComponent(escape(Latin1.stringify(wordArray)));
+ } catch (e) {
+ throw new Error('Malformed UTF-8 data');
+ }
+ },
+
+ /**
+ * Converts a UTF-8 string to a word array.
+ *
+ * @param {string} utf8Str The UTF-8 string.
+ *
+ * @return {WordArray} The word array.
+ *
+ * @static
+ *
+ * @example
+ *
+ * var wordArray = CryptoJS.enc.Utf8.parse(utf8String);
+ */
+ parse: function (utf8Str) {
+ return Latin1.parse(unescape(encodeURIComponent(utf8Str)));
+ }
+ };
+
+ /**
+ * Abstract buffered block algorithm template.
+ *
+ * The property blockSize must be implemented in a concrete subtype.
+ *
+ * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0
+ */
+ var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({
+ /**
+ * Resets this block algorithm's data buffer to its initial state.
+ *
+ * @example
+ *
+ * bufferedBlockAlgorithm.reset();
+ */
+ reset: function () {
+ // Initial values
+ this._data = new WordArray.init();
+ this._nDataBytes = 0;
+ },
+
+ /**
+ * Adds new data to this block algorithm's buffer.
+ *
+ * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8.
+ *
+ * @example
+ *
+ * bufferedBlockAlgorithm._append('data');
+ * bufferedBlockAlgorithm._append(wordArray);
+ */
+ _append: function (data) {
+ // Convert string to WordArray, else assume WordArray already
+ if (typeof data == 'string') {
+ data = Utf8.parse(data);
+ }
+
+ // Append
+ this._data.concat(data);
+ this._nDataBytes += data.sigBytes;
+ },
+
+ /**
+ * Processes available data blocks.
+ *
+ * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.
+ *
+ * @param {boolean} doFlush Whether all blocks and partial blocks should be processed.
+ *
+ * @return {WordArray} The processed data.
+ *
+ * @example
+ *
+ * var processedData = bufferedBlockAlgorithm._process();
+ * var processedData = bufferedBlockAlgorithm._process(!!'flush');
+ */
+ _process: function (doFlush) {
+ // Shortcuts
+ var data = this._data;
+ var dataWords = data.words;
+ var dataSigBytes = data.sigBytes;
+ var blockSize = this.blockSize;
+ var blockSizeBytes = blockSize * 4;
+
+ // Count blocks ready
+ var nBlocksReady = dataSigBytes / blockSizeBytes;
+ if (doFlush) {
+ // Round up to include partial blocks
+ nBlocksReady = Math.ceil(nBlocksReady);
+ } else {
+ // Round down to include only full blocks,
+ // less the number of blocks that must remain in the buffer
+ nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);
+ }
+
+ // Count words ready
+ var nWordsReady = nBlocksReady * blockSize;
+
+ // Count bytes ready
+ var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes);
+
+ // Process blocks
+ if (nWordsReady) {
+ for (var offset = 0; offset < nWordsReady; offset += blockSize) {
+ // Perform concrete-algorithm logic
+ this._doProcessBlock(dataWords, offset);
+ }
+
+ // Remove processed words
+ var processedWords = dataWords.splice(0, nWordsReady);
+ data.sigBytes -= nBytesReady;
+ }
+
+ // Return processed words
+ return new WordArray.init(processedWords, nBytesReady);
+ },
+
+ /**
+ * Creates a copy of this object.
+ *
+ * @return {Object} The clone.
+ *
+ * @example
+ *
+ * var clone = bufferedBlockAlgorithm.clone();
+ */
+ clone: function () {
+ var clone = Base.clone.call(this);
+ clone._data = this._data.clone();
+
+ return clone;
+ },
+
+ _minBufferSize: 0
+ });
+
+ /**
+ * Abstract hasher template.
+ *
+ * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits)
+ */
+ var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({
+ /**
+ * Configuration options.
+ */
+ cfg: Base.extend(),
+
+ /**
+ * Initializes a newly created hasher.
+ *
+ * @param {Object} cfg (Optional) The configuration options to use for this hash computation.
+ *
+ * @example
+ *
+ * var hasher = CryptoJS.algo.SHA256.create();
+ */
+ init: function (cfg) {
+ // Apply config defaults
+ this.cfg = this.cfg.extend(cfg);
+
+ // Set initial values
+ this.reset();
+ },
+
+ /**
+ * Resets this hasher to its initial state.
+ *
+ * @example
+ *
+ * hasher.reset();
+ */
+ reset: function () {
+ // Reset data buffer
+ BufferedBlockAlgorithm.reset.call(this);
+
+ // Perform concrete-hasher logic
+ this._doReset();
+ },
+
+ /**
+ * Updates this hasher with a message.
+ *
+ * @param {WordArray|string} messageUpdate The message to append.
+ *
+ * @return {Hasher} This hasher.
+ *
+ * @example
+ *
+ * hasher.update('message');
+ * hasher.update(wordArray);
+ */
+ update: function (messageUpdate) {
+ // Append
+ this._append(messageUpdate);
+
+ // Update the hash
+ this._process();
+
+ // Chainable
+ return this;
+ },
+
+ /**
+ * Finalizes the hash computation.
+ * Note that the finalize operation is effectively a destructive, read-once operation.
+ *
+ * @param {WordArray|string} messageUpdate (Optional) A final message update.
+ *
+ * @return {WordArray} The hash.
+ *
+ * @example
+ *
+ * var hash = hasher.finalize();
+ * var hash = hasher.finalize('message');
+ * var hash = hasher.finalize(wordArray);
+ */
+ finalize: function (messageUpdate) {
+ // Final message update
+ if (messageUpdate) {
+ this._append(messageUpdate);
+ }
+
+ // Perform concrete-hasher logic
+ var hash = this._doFinalize();
+
+ return hash;
+ },
+
+ blockSize: 512/32,
+
+ /**
+ * Creates a shortcut function to a hasher's object interface.
+ *
+ * @param {Hasher} hasher The hasher to create a helper for.
+ *
+ * @return {Function} The shortcut function.
+ *
+ * @static
+ *
+ * @example
+ *
+ * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);
+ */
+ _createHelper: function (hasher) {
+ return function (message, cfg) {
+ return new hasher.init(cfg).finalize(message);
+ };
+ },
+
+ /**
+ * Creates a shortcut function to the HMAC's object interface.
+ *
+ * @param {Hasher} hasher The hasher to use in this HMAC helper.
+ *
+ * @return {Function} The shortcut function.
+ *
+ * @static
+ *
+ * @example
+ *
+ * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);
+ */
+ _createHmacHelper: function (hasher) {
+ return function (message, key) {
+ return new C_algo.HMAC.init(hasher, key).finalize(message);
+ };
+ }
+ });
+
+ /**
+ * Algorithm namespace.
+ */
+ var C_algo = C.algo = {};
+
+ return C;
+ }(Math));
+
+
+ return CryptoJS;
+
+}));
+},{}],30:[function(require,module,exports){
+;(function (root, factory, undef) {
+ if (typeof exports === "object") {
+ // CommonJS
+ module.exports = exports = factory(require("./core"), require("./x64-core"));
+ }
+ else if (typeof define === "function" && define.amd) {
+ // AMD
+ define(["./core", "./x64-core"], factory);
+ }
+ else {
+ // Global (browser)
+ factory(root.CryptoJS);
+ }
+}(this, function (CryptoJS) {
+
+ (function (Math) {
+ // Shortcuts
+ var C = CryptoJS;
+ var C_lib = C.lib;
+ var WordArray = C_lib.WordArray;
+ var Hasher = C_lib.Hasher;
+ var C_x64 = C.x64;
+ var X64Word = C_x64.Word;
+ var C_algo = C.algo;
+
+ // Constants tables
+ var RHO_OFFSETS = [];
+ var PI_INDEXES = [];
+ var ROUND_CONSTANTS = [];
+
+ // Compute Constants
+ (function () {
+ // Compute rho offset constants
+ var x = 1, y = 0;
+ for (var t = 0; t < 24; t++) {
+ RHO_OFFSETS[x + 5 * y] = ((t + 1) * (t + 2) / 2) % 64;
+
+ var newX = y % 5;
+ var newY = (2 * x + 3 * y) % 5;
+ x = newX;
+ y = newY;
+ }
+
+ // Compute pi index constants
+ for (var x = 0; x < 5; x++) {
+ for (var y = 0; y < 5; y++) {
+ PI_INDEXES[x + 5 * y] = y + ((2 * x + 3 * y) % 5) * 5;
+ }
+ }
+
+ // Compute round constants
+ var LFSR = 0x01;
+ for (var i = 0; i < 24; i++) {
+ var roundConstantMsw = 0;
+ var roundConstantLsw = 0;
+
+ for (var j = 0; j < 7; j++) {
+ if (LFSR & 0x01) {
+ var bitPosition = (1 << j) - 1;
+ if (bitPosition < 32) {
+ roundConstantLsw ^= 1 << bitPosition;
+ } else /* if (bitPosition >= 32) */ {
+ roundConstantMsw ^= 1 << (bitPosition - 32);
+ }
+ }
+
+ // Compute next LFSR
+ if (LFSR & 0x80) {
+ // Primitive polynomial over GF(2): x^8 + x^6 + x^5 + x^4 + 1
+ LFSR = (LFSR << 1) ^ 0x71;
+ } else {
+ LFSR <<= 1;
+ }
+ }
+
+ ROUND_CONSTANTS[i] = X64Word.create(roundConstantMsw, roundConstantLsw);
+ }
+ }());
+
+ // Reusable objects for temporary values
+ var T = [];
+ (function () {
+ for (var i = 0; i < 25; i++) {
+ T[i] = X64Word.create();
+ }
+ }());
+
+ /**
+ * SHA-3 hash algorithm.
+ */
+ var SHA3 = C_algo.SHA3 = Hasher.extend({
+ /**
+ * Configuration options.
+ *
+ * @property {number} outputLength
+ * The desired number of bits in the output hash.
+ * Only values permitted are: 224, 256, 384, 512.
+ * Default: 512
+ */
+ cfg: Hasher.cfg.extend({
+ outputLength: 512
+ }),
+
+ _doReset: function () {
+ var state = this._state = []
+ for (var i = 0; i < 25; i++) {
+ state[i] = new X64Word.init();
+ }
+
+ this.blockSize = (1600 - 2 * this.cfg.outputLength) / 32;
+ },
+
+ _doProcessBlock: function (M, offset) {
+ // Shortcuts
+ var state = this._state;
+ var nBlockSizeLanes = this.blockSize / 2;
+
+ // Absorb
+ for (var i = 0; i < nBlockSizeLanes; i++) {
+ // Shortcuts
+ var M2i = M[offset + 2 * i];
+ var M2i1 = M[offset + 2 * i + 1];
+
+ // Swap endian
+ M2i = (
+ (((M2i << 8) | (M2i >>> 24)) & 0x00ff00ff) |
+ (((M2i << 24) | (M2i >>> 8)) & 0xff00ff00)
+ );
+ M2i1 = (
+ (((M2i1 << 8) | (M2i1 >>> 24)) & 0x00ff00ff) |
+ (((M2i1 << 24) | (M2i1 >>> 8)) & 0xff00ff00)
+ );
+
+ // Absorb message into state
+ var lane = state[i];
+ lane.high ^= M2i1;
+ lane.low ^= M2i;
+ }
+
+ // Rounds
+ for (var round = 0; round < 24; round++) {
+ // Theta
+ for (var x = 0; x < 5; x++) {
+ // Mix column lanes
+ var tMsw = 0, tLsw = 0;
+ for (var y = 0; y < 5; y++) {
+ var lane = state[x + 5 * y];
+ tMsw ^= lane.high;
+ tLsw ^= lane.low;
+ }
+
+ // Temporary values
+ var Tx = T[x];
+ Tx.high = tMsw;
+ Tx.low = tLsw;
+ }
+ for (var x = 0; x < 5; x++) {
+ // Shortcuts
+ var Tx4 = T[(x + 4) % 5];
+ var Tx1 = T[(x + 1) % 5];
+ var Tx1Msw = Tx1.high;
+ var Tx1Lsw = Tx1.low;
+
+ // Mix surrounding columns
+ var tMsw = Tx4.high ^ ((Tx1Msw << 1) | (Tx1Lsw >>> 31));
+ var tLsw = Tx4.low ^ ((Tx1Lsw << 1) | (Tx1Msw >>> 31));
+ for (var y = 0; y < 5; y++) {
+ var lane = state[x + 5 * y];
+ lane.high ^= tMsw;
+ lane.low ^= tLsw;
+ }
+ }
+
+ // Rho Pi
+ for (var laneIndex = 1; laneIndex < 25; laneIndex++) {
+ // Shortcuts
+ var lane = state[laneIndex];
+ var laneMsw = lane.high;
+ var laneLsw = lane.low;
+ var rhoOffset = RHO_OFFSETS[laneIndex];
+
+ // Rotate lanes
+ if (rhoOffset < 32) {
+ var tMsw = (laneMsw << rhoOffset) | (laneLsw >>> (32 - rhoOffset));
+ var tLsw = (laneLsw << rhoOffset) | (laneMsw >>> (32 - rhoOffset));
+ } else /* if (rhoOffset >= 32) */ {
+ var tMsw = (laneLsw << (rhoOffset - 32)) | (laneMsw >>> (64 - rhoOffset));
+ var tLsw = (laneMsw << (rhoOffset - 32)) | (laneLsw >>> (64 - rhoOffset));
+ }
+
+ // Transpose lanes
+ var TPiLane = T[PI_INDEXES[laneIndex]];
+ TPiLane.high = tMsw;
+ TPiLane.low = tLsw;
+ }
+
+ // Rho pi at x = y = 0
+ var T0 = T[0];
+ var state0 = state[0];
+ T0.high = state0.high;
+ T0.low = state0.low;
+
+ // Chi
+ for (var x = 0; x < 5; x++) {
+ for (var y = 0; y < 5; y++) {
+ // Shortcuts
+ var laneIndex = x + 5 * y;
+ var lane = state[laneIndex];
+ var TLane = T[laneIndex];
+ var Tx1Lane = T[((x + 1) % 5) + 5 * y];
+ var Tx2Lane = T[((x + 2) % 5) + 5 * y];
+
+ // Mix rows
+ lane.high = TLane.high ^ (~Tx1Lane.high & Tx2Lane.high);
+ lane.low = TLane.low ^ (~Tx1Lane.low & Tx2Lane.low);
+ }
+ }
+
+ // Iota
+ var lane = state[0];
+ var roundConstant = ROUND_CONSTANTS[round];
+ lane.high ^= roundConstant.high;
+ lane.low ^= roundConstant.low;;
+ }
+ },
+
+ _doFinalize: function () {
+ // Shortcuts
+ var data = this._data;
+ var dataWords = data.words;
+ var nBitsTotal = this._nDataBytes * 8;
+ var nBitsLeft = data.sigBytes * 8;
+ var blockSizeBits = this.blockSize * 32;
+
+ // Add padding
+ dataWords[nBitsLeft >>> 5] |= 0x1 << (24 - nBitsLeft % 32);
+ dataWords[((Math.ceil((nBitsLeft + 1) / blockSizeBits) * blockSizeBits) >>> 5) - 1] |= 0x80;
+ data.sigBytes = dataWords.length * 4;
+
+ // Hash final blocks
+ this._process();
+
+ // Shortcuts
+ var state = this._state;
+ var outputLengthBytes = this.cfg.outputLength / 8;
+ var outputLengthLanes = outputLengthBytes / 8;
+
+ // Squeeze
+ var hashWords = [];
+ for (var i = 0; i < outputLengthLanes; i++) {
+ // Shortcuts
+ var lane = state[i];
+ var laneMsw = lane.high;
+ var laneLsw = lane.low;
+
+ // Swap endian
+ laneMsw = (
+ (((laneMsw << 8) | (laneMsw >>> 24)) & 0x00ff00ff) |
+ (((laneMsw << 24) | (laneMsw >>> 8)) & 0xff00ff00)
+ );
+ laneLsw = (
+ (((laneLsw << 8) | (laneLsw >>> 24)) & 0x00ff00ff) |
+ (((laneLsw << 24) | (laneLsw >>> 8)) & 0xff00ff00)
+ );
+
+ // Squeeze state to retrieve hash
+ hashWords.push(laneLsw);
+ hashWords.push(laneMsw);
+ }
+
+ // Return final computed hash
+ return new WordArray.init(hashWords, outputLengthBytes);
+ },
+
+ clone: function () {
+ var clone = Hasher.clone.call(this);
+
+ var state = clone._state = this._state.slice(0);
+ for (var i = 0; i < 25; i++) {
+ state[i] = state[i].clone();
+ }
+
+ return clone;
+ }
+ });
+
+ /**
+ * Shortcut function to the hasher's object interface.
+ *
+ * @param {WordArray|string} message The message to hash.
+ *
+ * @return {WordArray} The hash.
+ *
+ * @static
+ *
+ * @example
+ *
+ * var hash = CryptoJS.SHA3('message');
+ * var hash = CryptoJS.SHA3(wordArray);
+ */
+ C.SHA3 = Hasher._createHelper(SHA3);
+
+ /**
+ * Shortcut function to the HMAC's object interface.
+ *
+ * @param {WordArray|string} message The message to hash.
+ * @param {WordArray|string} key The secret key.
+ *
+ * @return {WordArray} The HMAC.
+ *
+ * @static
+ *
+ * @example
+ *
+ * var hmac = CryptoJS.HmacSHA3(message, key);
+ */
+ C.HmacSHA3 = Hasher._createHmacHelper(SHA3);
+ }(Math));
+
+
+ return CryptoJS.SHA3;
+
+}));
+},{"./core":29,"./x64-core":31}],31:[function(require,module,exports){
+;(function (root, factory) {
+ if (typeof exports === "object") {
+ // CommonJS
+ module.exports = exports = factory(require("./core"));
+ }
+ else if (typeof define === "function" && define.amd) {
+ // AMD
+ define(["./core"], factory);
+ }
+ else {
+ // Global (browser)
+ factory(root.CryptoJS);
+ }
+}(this, function (CryptoJS) {
+
+ (function (undefined) {
+ // Shortcuts
+ var C = CryptoJS;
+ var C_lib = C.lib;
+ var Base = C_lib.Base;
+ var X32WordArray = C_lib.WordArray;
+
+ /**
+ * x64 namespace.
+ */
+ var C_x64 = C.x64 = {};
+
+ /**
+ * A 64-bit word.
+ */
+ var X64Word = C_x64.Word = Base.extend({
+ /**
+ * Initializes a newly created 64-bit word.
+ *
+ * @param {number} high The high 32 bits.
+ * @param {number} low The low 32 bits.
+ *
+ * @example
+ *
+ * var x64Word = CryptoJS.x64.Word.create(0x00010203, 0x04050607);
+ */
+ init: function (high, low) {
+ this.high = high;
+ this.low = low;
+ }
+
+ /**
+ * Bitwise NOTs this word.
+ *
+ * @return {X64Word} A new x64-Word object after negating.
+ *
+ * @example
+ *
+ * var negated = x64Word.not();
+ */
+ // not: function () {
+ // var high = ~this.high;
+ // var low = ~this.low;
+
+ // return X64Word.create(high, low);
+ // },
+
+ /**
+ * Bitwise ANDs this word with the passed word.
+ *
+ * @param {X64Word} word The x64-Word to AND with this word.
+ *
+ * @return {X64Word} A new x64-Word object after ANDing.
+ *
+ * @example
+ *
+ * var anded = x64Word.and(anotherX64Word);
+ */
+ // and: function (word) {
+ // var high = this.high & word.high;
+ // var low = this.low & word.low;
+
+ // return X64Word.create(high, low);
+ // },
+
+ /**
+ * Bitwise ORs this word with the passed word.
+ *
+ * @param {X64Word} word The x64-Word to OR with this word.
+ *
+ * @return {X64Word} A new x64-Word object after ORing.
+ *
+ * @example
+ *
+ * var ored = x64Word.or(anotherX64Word);
+ */
+ // or: function (word) {
+ // var high = this.high | word.high;
+ // var low = this.low | word.low;
+
+ // return X64Word.create(high, low);
+ // },
+
+ /**
+ * Bitwise XORs this word with the passed word.
+ *
+ * @param {X64Word} word The x64-Word to XOR with this word.
+ *
+ * @return {X64Word} A new x64-Word object after XORing.
+ *
+ * @example
+ *
+ * var xored = x64Word.xor(anotherX64Word);
+ */
+ // xor: function (word) {
+ // var high = this.high ^ word.high;
+ // var low = this.low ^ word.low;
+
+ // return X64Word.create(high, low);
+ // },
+
+ /**
+ * Shifts this word n bits to the left.
+ *
+ * @param {number} n The number of bits to shift.
+ *
+ * @return {X64Word} A new x64-Word object after shifting.
+ *
+ * @example
+ *
+ * var shifted = x64Word.shiftL(25);
+ */
+ // shiftL: function (n) {
+ // if (n < 32) {
+ // var high = (this.high << n) | (this.low >>> (32 - n));
+ // var low = this.low << n;
+ // } else {
+ // var high = this.low << (n - 32);
+ // var low = 0;
+ // }
+
+ // return X64Word.create(high, low);
+ // },
+
+ /**
+ * Shifts this word n bits to the right.
+ *
+ * @param {number} n The number of bits to shift.
+ *
+ * @return {X64Word} A new x64-Word object after shifting.
+ *
+ * @example
+ *
+ * var shifted = x64Word.shiftR(7);
+ */
+ // shiftR: function (n) {
+ // if (n < 32) {
+ // var low = (this.low >>> n) | (this.high << (32 - n));
+ // var high = this.high >>> n;
+ // } else {
+ // var low = this.high >>> (n - 32);
+ // var high = 0;
+ // }
+
+ // return X64Word.create(high, low);
+ // },
+
+ /**
+ * Rotates this word n bits to the left.
+ *
+ * @param {number} n The number of bits to rotate.
+ *
+ * @return {X64Word} A new x64-Word object after rotating.
+ *
+ * @example
+ *
+ * var rotated = x64Word.rotL(25);
+ */
+ // rotL: function (n) {
+ // return this.shiftL(n).or(this.shiftR(64 - n));
+ // },
+
+ /**
+ * Rotates this word n bits to the right.
+ *
+ * @param {number} n The number of bits to rotate.
+ *
+ * @return {X64Word} A new x64-Word object after rotating.
+ *
+ * @example
+ *
+ * var rotated = x64Word.rotR(7);
+ */
+ // rotR: function (n) {
+ // return this.shiftR(n).or(this.shiftL(64 - n));
+ // },
+
+ /**
+ * Adds this word with the passed word.
+ *
+ * @param {X64Word} word The x64-Word to add with this word.
+ *
+ * @return {X64Word} A new x64-Word object after adding.
+ *
+ * @example
+ *
+ * var added = x64Word.add(anotherX64Word);
+ */
+ // add: function (word) {
+ // var low = (this.low + word.low) | 0;
+ // var carry = (low >>> 0) < (this.low >>> 0) ? 1 : 0;
+ // var high = (this.high + word.high + carry) | 0;
+
+ // return X64Word.create(high, low);
+ // }
+ });
+
+ /**
+ * An array of 64-bit words.
+ *
+ * @property {Array} words The array of CryptoJS.x64.Word objects.
+ * @property {number} sigBytes The number of significant bytes in this word array.
+ */
+ var X64WordArray = C_x64.WordArray = Base.extend({
+ /**
+ * Initializes a newly created word array.
+ *
+ * @param {Array} words (Optional) An array of CryptoJS.x64.Word objects.
+ * @param {number} sigBytes (Optional) The number of significant bytes in the words.
+ *
+ * @example
+ *
+ * var wordArray = CryptoJS.x64.WordArray.create();
+ *
+ * var wordArray = CryptoJS.x64.WordArray.create([
+ * CryptoJS.x64.Word.create(0x00010203, 0x04050607),
+ * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f)
+ * ]);
+ *
+ * var wordArray = CryptoJS.x64.WordArray.create([
+ * CryptoJS.x64.Word.create(0x00010203, 0x04050607),
+ * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f)
+ * ], 10);
+ */
+ init: function (words, sigBytes) {
+ words = this.words = words || [];
+
+ if (sigBytes != undefined) {
+ this.sigBytes = sigBytes;
+ } else {
+ this.sigBytes = words.length * 8;
+ }
+ },
+
+ /**
+ * Converts this 64-bit word array to a 32-bit word array.
+ *
+ * @return {CryptoJS.lib.WordArray} This word array's data as a 32-bit word array.
+ *
+ * @example
+ *
+ * var x32WordArray = x64WordArray.toX32();
+ */
+ toX32: function () {
+ // Shortcuts
+ var x64Words = this.words;
+ var x64WordsLength = x64Words.length;
+
+ // Convert
+ var x32Words = [];
+ for (var i = 0; i < x64WordsLength; i++) {
+ var x64Word = x64Words[i];
+ x32Words.push(x64Word.high);
+ x32Words.push(x64Word.low);
+ }
+
+ return X32WordArray.create(x32Words, this.sigBytes);
+ },
+
+ /**
+ * Creates a copy of this word array.
+ *
+ * @return {X64WordArray} The clone.
+ *
+ * @example
+ *
+ * var clone = x64WordArray.clone();
+ */
+ clone: function () {
+ var clone = Base.clone.call(this);
+
+ // Clone "words" array
+ var words = clone.words = this.words.slice(0);
+
+ // Clone each X64Word object
+ var wordsLength = words.length;
+ for (var i = 0; i < wordsLength; i++) {
+ words[i] = words[i].clone();
+ }
+
+ return clone;
+ }
+ });
+ }());
+
+
+ return CryptoJS;
+
+}));
+},{"./core":29}],"bignumber.js":[function(require,module,exports){
'use strict';
module.exports = BigNumber; // jshint ignore:line
@@ -3676,7 +5263,6 @@ var web3 = require('./lib/web3');
web3.providers.HttpProvider = require('./lib/web3/httpprovider');
web3.providers.QtSyncProvider = require('./lib/web3/qtsync');
web3.eth.contract = require('./lib/web3/contract');
-web3.abi = require('./lib/solidity/abi');
// dont override global variable
if (typeof window !== 'undefined' && typeof window.web3 === 'undefined') {
@@ -3686,7 +5272,7 @@ if (typeof window !== 'undefined' && typeof window.web3 === 'undefined') {
module.exports = web3;
-},{"./lib/solidity/abi":1,"./lib/web3":10,"./lib/web3/contract":11,"./lib/web3/httpprovider":19,"./lib/web3/qtsync":24}]},{},["web3"])
+},{"./lib/web3":9,"./lib/web3/contract":11,"./lib/web3/httpprovider":19,"./lib/web3/qtsync":24}]},{},["web3"])
//# sourceMappingURL=web3-light.js.map
diff --git a/miner/agent.go b/miner/agent.go
index da2a2008d..3ed3ba839 100644
--- a/miner/agent.go
+++ b/miner/agent.go
@@ -40,7 +40,6 @@ func (self *CpuAgent) Stop() {
defer self.mu.Unlock()
close(self.quit)
- close(self.quitCurrentOp)
}
func (self *CpuAgent) Start() {
@@ -50,7 +49,6 @@ func (self *CpuAgent) Start() {
self.quit = make(chan struct{})
// creating current op ch makes sure we're not closing a nil ch
// later on
- self.quitCurrentOp = make(chan struct{})
self.workCh = make(chan *types.Block, 1)
go self.update()
@@ -62,11 +60,19 @@ out:
select {
case block := <-self.workCh:
self.mu.Lock()
- close(self.quitCurrentOp)
+ if self.quitCurrentOp != nil {
+ close(self.quitCurrentOp)
+ }
+ self.quitCurrentOp = make(chan struct{})
+ go self.mine(block, self.quitCurrentOp)
self.mu.Unlock()
-
- go self.mine(block)
case <-self.quit:
+ self.mu.Lock()
+ if self.quitCurrentOp != nil {
+ close(self.quitCurrentOp)
+ self.quitCurrentOp = nil
+ }
+ self.mu.Unlock()
break out
}
}
@@ -84,16 +90,11 @@ done:
}
}
-func (self *CpuAgent) mine(block *types.Block) {
+func (self *CpuAgent) mine(block *types.Block, stop <- chan struct{}) {
glog.V(logger.Debug).Infof("(re)started agent[%d]. mining...\n", self.index)
- // Reset the channel
- self.mu.Lock()
- self.quitCurrentOp = make(chan struct{})
- self.mu.Unlock()
-
// Mine
- nonce, mixDigest := self.pow.Search(block, self.quitCurrentOp)
+ nonce, mixDigest := self.pow.Search(block, stop)
if nonce != 0 {
block.SetNonce(nonce)
block.Header().MixDigest = common.BytesToHash(mixDigest)
diff --git a/miner/miner.go b/miner/miner.go
index 3f87e8151..4e99245f8 100644
--- a/miner/miner.go
+++ b/miner/miner.go
@@ -39,6 +39,10 @@ func New(eth core.Backend, mux *event.TypeMux, pow pow.PoW) *Miner {
return miner
}
+// update keeps track of the downloader events. Please be aware that this is a one shot type of update loop.
+// It's entered once and as soon as `Done` or `Failed` has been broadcasted the events are unregistered and
+// the loop is exited. This to prevent a major security vuln where external parties can DOS you with blocks
+// and halt your mining operation for as long as the DOS continues.
func (self *Miner) update() {
events := self.mux.Subscribe(downloader.StartEvent{}, downloader.DoneEvent{}, downloader.FailedEvent{})
for ev := range events.Chan() {
@@ -59,6 +63,10 @@ func (self *Miner) update() {
self.Start(self.coinbase, self.threads)
}
}
+ // unsubscribe. we're only interested in this event once
+ events.Unsubscribe()
+ // stop immediately and ignore all further pending events
+ break
}
}
diff --git a/miner/worker.go b/miner/worker.go
index d5f9dd8c5..5e4ff7510 100644
--- a/miner/worker.go
+++ b/miner/worker.go
@@ -224,7 +224,13 @@ func (self *worker) wait() {
}
self.mux.Post(core.NewMinedBlockEvent{block})
- glog.V(logger.Info).Infof("🔨 Mined block #%v", block.Number())
+ var stale string
+ canonBlock := self.chain.GetBlockByNumber(block.NumberU64())
+ if canonBlock != nil && canonBlock.Hash() != block.Hash() {
+ stale = "stale-"
+ }
+
+ glog.V(logger.Info).Infof("🔨 Mined %sblock #%v (%x)", stale, block.Number(), block.Hash().Bytes()[:4])
jsonlogger.LogJson(&logger.EthMinerNewBlock{
BlockHash: block.Hash().Hex(),
@@ -264,6 +270,7 @@ func (self *worker) makeCurrent() {
}
block.Header().Extra = self.extra
+ // when 08 is processed ancestors contain 07 (quick block)
current := env(block, self.eth)
for _, ancestor := range self.chain.GetAncestors(block, 7) {
for _, uncle := range ancestor.Uncles() {
diff --git a/rpc/api.go b/rpc/api.go
index b59253ef7..b6f6ac3f9 100644
--- a/rpc/api.go
+++ b/rpc/api.go
@@ -1,9 +1,9 @@
package rpc
import (
+ "bytes"
"encoding/json"
"math/big"
- // "sync"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/crypto"
@@ -158,16 +158,16 @@ func (api *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) err
v := api.xethAtStateNum(args.BlockNumber).CodeAtBytes(args.Address)
*reply = newHexData(v)
- case "eth_sign":
- args := new(NewSigArgs)
- if err := json.Unmarshal(req.Params, &args); err != nil {
- return err
- }
- v, err := api.xeth().Sign(args.From, args.Data, false)
- if err != nil {
- return err
- }
- *reply = v
+ // case "eth_sign":
+ // args := new(NewSigArgs)
+ // if err := json.Unmarshal(req.Params, &args); err != nil {
+ // return err
+ // }
+ // v, err := api.xeth().Sign(args.From, args.Data, false)
+ // if err != nil {
+ // return err
+ // }
+ // *reply = v
case "eth_sendTransaction", "eth_transact":
args := new(NewTxArgs)
@@ -230,7 +230,14 @@ func (api *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) err
block := api.xeth().EthBlockByNumber(args.BlockNumber)
br := NewBlockRes(block, args.IncludeTxs)
-
+ // If request was for "pending", nil nonsensical fields
+ if args.BlockNumber == -2 {
+ br.BlockHash = nil
+ br.BlockNumber = nil
+ br.Miner = nil
+ br.Nonce = nil
+ br.LogsBloom = nil
+ }
*reply = br
case "eth_getTransactionByHash":
args := new(HashArgs)
@@ -240,9 +247,12 @@ func (api *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) err
tx, bhash, bnum, txi := api.xeth().EthTransactionByHash(args.Hash)
if tx != nil {
v := NewTransactionRes(tx)
- v.BlockHash = newHexData(bhash)
- v.BlockNumber = newHexNum(bnum)
- v.TxIndex = newHexNum(txi)
+ // if the blockhash is 0, assume this is a pending transaction
+ if bytes.Compare(bhash.Bytes(), bytes.Repeat([]byte{0}, 32)) != 0 {
+ v.BlockHash = newHexData(bhash)
+ v.BlockNumber = newHexNum(bnum)
+ v.TxIndex = newHexNum(txi)
+ }
*reply = v
}
case "eth_getTransactionByBlockHashAndIndex":
@@ -337,7 +347,7 @@ func (api *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) err
solc, _ := api.xeth().Solc()
if solc == nil {
- return NewNotImplementedError(req.Method)
+ return NewNotAvailableError(req.Method, "solc (solidity compiler) not found")
}
args := new(SourceArgs)
@@ -345,12 +355,11 @@ func (api *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) err
return err
}
- contract, err := solc.Compile(args.Source)
+ contracts, err := solc.Compile(args.Source)
if err != nil {
return err
}
- contract.Code = newHexData(contract.Code).String()
- *reply = contract
+ *reply = contracts
case "eth_newFilter":
args := new(BlockFilterArgs)
@@ -577,7 +586,7 @@ func (api *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) err
return NewNotImplementedError(req.Method)
}
- glog.V(logger.Detail).Infof("Reply: %T %s\n", reply, reply)
+ // glog.V(logger.Detail).Infof("Reply: %v\n", reply)
return nil
}
diff --git a/rpc/api_test.go b/rpc/api_test.go
index b49e27bd1..d1dcad266 100644
--- a/rpc/api_test.go
+++ b/rpc/api_test.go
@@ -2,14 +2,11 @@ package rpc
import (
"encoding/json"
- // "sync"
- "testing"
- // "time"
- // "fmt"
- "io/ioutil"
"strconv"
+ "testing"
"github.com/ethereum/go-ethereum/common/compiler"
+ "github.com/ethereum/go-ethereum/eth"
"github.com/ethereum/go-ethereum/xeth"
)
@@ -30,12 +27,15 @@ func TestWeb3Sha3(t *testing.T) {
}
}
+const solcVersion = "0.9.23"
+
func TestCompileSolidity(t *testing.T) {
- t.Skip()
solc, err := compiler.New("")
if solc == nil {
- t.Skip("no solidity compiler")
+ t.Skip("no solc found: skip")
+ } else if solc.Version() != solcVersion {
+ t.Logf("WARNING: solc different version found (%v, test written for %v, may need to update)", solc.Version(), solcVersion)
}
source := `contract test {\n` +
" /// @notice Will multiply `a` by 7." + `\n` +
@@ -46,16 +46,16 @@ func TestCompileSolidity(t *testing.T) {
jsonstr := `{"jsonrpc":"2.0","method":"eth_compileSolidity","params":["` + source + `"],"id":64}`
- //expCode := "605280600c6000396000f3006000357c010000000000000000000000000000000000000000000000000000000090048063c6888fa114602e57005b60376004356041565b8060005260206000f35b6000600782029050604d565b91905056"
+ expCode := "0x605880600c6000396000f3006000357c010000000000000000000000000000000000000000000000000000000090048063c6888fa114602e57005b603d6004803590602001506047565b8060005260206000f35b60006007820290506053565b91905056"
expAbiDefinition := `[{"constant":false,"inputs":[{"name":"a","type":"uint256"}],"name":"multiply","outputs":[{"name":"d","type":"uint256"}],"type":"function"}]`
expUserDoc := `{"methods":{"multiply(uint256)":{"notice":"Will multiply ` + "`a`" + ` by 7."}}}`
expDeveloperDoc := `{"methods":{}}`
- expCompilerVersion := `0.9.13`
+ expCompilerVersion := solc.Version()
expLanguage := "Solidity"
expLanguageVersion := "0"
expSource := source
- api := NewEthereumApi(&xeth.XEth{})
+ api := NewEthereumApi(xeth.NewTest(&eth.Ethereum{}, nil))
var req RpcRequest
json.Unmarshal([]byte(jsonstr), &req)
@@ -70,26 +70,34 @@ func TestCompileSolidity(t *testing.T) {
t.Errorf("expected no error, got %v", err)
}
- var contract = compiler.Contract{}
- err = json.Unmarshal(respjson, &contract)
+ var contracts = make(map[string]*compiler.Contract)
+ err = json.Unmarshal(respjson, &contracts)
if err != nil {
t.Errorf("expected no error, got %v", err)
}
- /*
- if contract.Code != expCode {
- t.Errorf("Expected %s got %s", expCode, contract.Code)
- }
- */
+ if len(contracts) != 1 {
+ t.Errorf("expected one contract, got %v", len(contracts))
+ }
+
+ contract := contracts["test"]
+
+ if contract.Code != expCode {
+ t.Errorf("Expected \n%s got \n%s", expCode, contract.Code)
+ }
+
if strconv.Quote(contract.Info.Source) != `"`+expSource+`"` {
t.Errorf("Expected \n'%s' got \n'%s'", expSource, strconv.Quote(contract.Info.Source))
}
+
if contract.Info.Language != expLanguage {
t.Errorf("Expected %s got %s", expLanguage, contract.Info.Language)
}
+
if contract.Info.LanguageVersion != expLanguageVersion {
t.Errorf("Expected %s got %s", expLanguageVersion, contract.Info.LanguageVersion)
}
+
if contract.Info.CompilerVersion != expCompilerVersion {
t.Errorf("Expected %s got %s", expCompilerVersion, contract.Info.CompilerVersion)
}
@@ -112,8 +120,6 @@ func TestCompileSolidity(t *testing.T) {
if string(abidef) != expAbiDefinition {
t.Errorf("Expected \n'%s' got \n'%s'", expAbiDefinition, string(abidef))
}
- ioutil.WriteFile("/tmp/abidef", []byte(string(abidef)), 0700)
- ioutil.WriteFile("/tmp/expabidef", []byte(expAbiDefinition), 0700)
if string(userdoc) != expUserDoc {
t.Errorf("Expected \n'%s' got \n'%s'", expUserDoc, string(userdoc))
diff --git a/rpc/args.go b/rpc/args.go
index 686872a59..27824f12c 100644
--- a/rpc/args.go
+++ b/rpc/args.go
@@ -166,45 +166,45 @@ type NewTxArgs struct {
BlockNumber int64
}
-type NewSigArgs struct {
- From string
- Data string
-}
+// type NewSigArgs struct {
+// From string
+// Data string
+// }
-func (args *NewSigArgs) UnmarshalJSON(b []byte) (err error) {
- var obj []json.RawMessage
- var ext struct {
- From string
- Data string
- }
+// func (args *NewSigArgs) UnmarshalJSON(b []byte) (err error) {
+// var obj []json.RawMessage
+// var ext struct {
+// From string
+// Data string
+// }
- // Decode byte slice to array of RawMessages
- if err := json.Unmarshal(b, &obj); err != nil {
- return NewDecodeParamError(err.Error())
- }
+// // Decode byte slice to array of RawMessages
+// if err := json.Unmarshal(b, &obj); err != nil {
+// return NewDecodeParamError(err.Error())
+// }
- // Check for sufficient params
- if len(obj) < 1 {
- return NewInsufficientParamsError(len(obj), 1)
- }
+// // Check for sufficient params
+// if len(obj) < 1 {
+// return NewInsufficientParamsError(len(obj), 1)
+// }
- // Decode 0th RawMessage to temporary struct
- if err := json.Unmarshal(obj[0], &ext); err != nil {
- return NewDecodeParamError(err.Error())
- }
+// // Decode 0th RawMessage to temporary struct
+// if err := json.Unmarshal(obj[0], &ext); err != nil {
+// return NewDecodeParamError(err.Error())
+// }
- if len(ext.From) == 0 {
- return NewValidationError("from", "is required")
- }
+// if len(ext.From) == 0 {
+// return NewValidationError("from", "is required")
+// }
- if len(ext.Data) == 0 {
- return NewValidationError("data", "is required")
- }
+// if len(ext.Data) == 0 {
+// return NewValidationError("data", "is required")
+// }
- args.From = ext.From
- args.Data = ext.Data
- return nil
-}
+// args.From = ext.From
+// args.Data = ext.Data
+// return nil
+// }
func (args *NewTxArgs) UnmarshalJSON(b []byte) (err error) {
var obj []json.RawMessage
diff --git a/rpc/http.go b/rpc/http.go
index 9b3fa5142..f37e102f5 100644
--- a/rpc/http.go
+++ b/rpc/http.go
@@ -6,6 +6,7 @@ import (
"io"
"io/ioutil"
"net/http"
+ "strings"
"github.com/ethereum/go-ethereum/logger"
"github.com/ethereum/go-ethereum/logger/glog"
@@ -39,7 +40,7 @@ func Start(pipe *xeth.XEth, config RpcConfig) error {
if len(config.CorsDomain) > 0 {
var opts cors.Options
opts.AllowedMethods = []string{"POST"}
- opts.AllowedOrigins = []string{config.CorsDomain}
+ opts.AllowedOrigins = strings.Split(config.CorsDomain, " ")
c := cors.New(opts)
handler = newStoppableHandler(c.Handler(JSONRPC(pipe)), l.stop)
diff --git a/tests/block_test.go b/tests/block_test.go
index 0ba0aefa2..d17cab477 100644
--- a/tests/block_test.go
+++ b/tests/block_test.go
@@ -48,6 +48,10 @@ func TestBcTotalDifficulty(t *testing.T) {
runBlockTestsInFile("files/BlockTests/bcTotalDifficultyTest.json", []string{}, t)
}
+func TestBcWallet(t *testing.T) {
+ runBlockTestsInFile("files/BlockTests/bcWalletTest.json", []string{}, t)
+}
+
func runBlockTestsInFile(filepath string, snafus []string, t *testing.T) {
bt, err := LoadBlockTests(filepath)
if err != nil {
diff --git a/tests/files/StateTests/stCallCreateCallCodeTest.json b/tests/files/StateTests/stCallCreateCallCodeTest.json
index f295779a4..a86192ede 100644
--- a/tests/files/StateTests/stCallCreateCallCodeTest.json
+++ b/tests/files/StateTests/stCallCreateCallCodeTest.json
@@ -924,6 +924,440 @@
"value" : "0x0186a0"
}
},
+ "createFailBalanceTooLow" : {
+ "env" : {
+ "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+ "currentDifficulty" : "0x0100",
+ "currentGasLimit" : "0x05f5e100",
+ "currentNumber" : "0x00",
+ "currentTimestamp" : "0x01",
+ "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+ },
+ "logs" : [
+ ],
+ "out" : "0x",
+ "post" : {
+ "0000000000000000000000000000000000000000" : {
+ "balance" : "0x0de0b6b3a7640017",
+ "code" : "0x",
+ "nonce" : "0x00",
+ "storage" : {
+ }
+ },
+ "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+ "balance" : "0x715d",
+ "code" : "0x",
+ "nonce" : "0x00",
+ "storage" : {
+ }
+ },
+ "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+ "balance" : "0x0de0b6b3a7638e8c",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ }
+ }
+ },
+ "postStateRoot" : "5833e19631ddedaf4e3c9a766f696c2e59e7524e388eb871be19dc8e0ce37b6e",
+ "pre" : {
+ "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+ "balance" : "0x0de0b6b3a7640000",
+ "code" : "0x605a60005360016000670de0b6b3a7640018f0ff",
+ "nonce" : "0x00",
+ "storage" : {
+ }
+ },
+ "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+ "balance" : "0x0de0b6b3a7640000",
+ "code" : "0x",
+ "nonce" : "0x00",
+ "storage" : {
+ }
+ }
+ },
+ "transaction" : {
+ "data" : "",
+ "gasLimit" : "0xcf1d",
+ "gasPrice" : "0x01",
+ "nonce" : "0x00",
+ "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+ "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+ "value" : "0x17"
+ }
+ },
+ "createInitFailBadJumpDestination" : {
+ "env" : {
+ "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+ "currentDifficulty" : "0x0100",
+ "currentGasLimit" : "0x05f5e100",
+ "currentNumber" : "0x00",
+ "currentTimestamp" : "0x01",
+ "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+ },
+ "logs" : [
+ ],
+ "out" : "0x",
+ "post" : {
+ "0000000000000000000000000000000000000000" : {
+ "balance" : "0x0de0b6b3a76586a0",
+ "code" : "0x",
+ "nonce" : "0x00",
+ "storage" : {
+ }
+ },
+ "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+ "balance" : "0x05f58340",
+ "code" : "0x",
+ "nonce" : "0x00",
+ "storage" : {
+ }
+ },
+ "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+ "balance" : "0x0de0b6b3a16cf620",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ }
+ }
+ },
+ "postStateRoot" : "ccf7765eff3effe22a5f853099f7da88291b8346b689ffbf54b729ba04170e59",
+ "pre" : {
+ "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+ "balance" : "0x0de0b6b3a7640000",
+ "code" : "0x6056600053600160006001f0ff",
+ "nonce" : "0x00",
+ "storage" : {
+ }
+ },
+ "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+ "balance" : "0x0de0b6b3a7640000",
+ "code" : "0x",
+ "nonce" : "0x00",
+ "storage" : {
+ }
+ }
+ },
+ "transaction" : {
+ "data" : "",
+ "gasLimit" : "0x05f5e100",
+ "gasPrice" : "0x01",
+ "nonce" : "0x00",
+ "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+ "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+ "value" : "0x0186a0"
+ }
+ },
+ "createInitFailStackSizeLargerThan1024" : {
+ "env" : {
+ "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+ "currentDifficulty" : "0x0100",
+ "currentGasLimit" : "0x05f5e100",
+ "currentNumber" : "0x00",
+ "currentTimestamp" : "0x01",
+ "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+ },
+ "logs" : [
+ ],
+ "out" : "0x",
+ "post" : {
+ "0000000000000000000000000000000000000000" : {
+ "balance" : "0x0de0b6b3a76586a0",
+ "code" : "0x",
+ "nonce" : "0x00",
+ "storage" : {
+ }
+ },
+ "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+ "balance" : "0x05f58340",
+ "code" : "0x",
+ "nonce" : "0x00",
+ "storage" : {
+ }
+ },
+ "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+ "balance" : "0x0de0b6b3a16cf620",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ }
+ }
+ },
+ "postStateRoot" : "ccf7765eff3effe22a5f853099f7da88291b8346b689ffbf54b729ba04170e59",
+ "pre" : {
+ "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+ "balance" : "0x0de0b6b3a7640000",
+ "code" : "0x7f6103ff6000525b7f0102030405060708090a0102030405060708090a010203046000527f05060708090a0102600160005103600052600051600657000000000000000000602052604060006001f0ff",
+ "nonce" : "0x00",
+ "storage" : {
+ }
+ },
+ "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+ "balance" : "0x0de0b6b3a7640000",
+ "code" : "0x",
+ "nonce" : "0x00",
+ "storage" : {
+ }
+ }
+ },
+ "transaction" : {
+ "data" : "",
+ "gasLimit" : "0x05f5e100",
+ "gasPrice" : "0x01",
+ "nonce" : "0x00",
+ "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+ "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+ "value" : "0x0186a0"
+ }
+ },
+ "createInitFailStackUnderflow" : {
+ "env" : {
+ "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+ "currentDifficulty" : "0x0100",
+ "currentGasLimit" : "0x05f5e100",
+ "currentNumber" : "0x00",
+ "currentTimestamp" : "0x01",
+ "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+ },
+ "logs" : [
+ ],
+ "out" : "0x",
+ "post" : {
+ "0000000000000000000000000000000000000000" : {
+ "balance" : "0x0de0b6b3a76586a0",
+ "code" : "0x",
+ "nonce" : "0x00",
+ "storage" : {
+ }
+ },
+ "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+ "balance" : "0x05f58340",
+ "code" : "0x",
+ "nonce" : "0x00",
+ "storage" : {
+ }
+ },
+ "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+ "balance" : "0x0de0b6b3a16cf620",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ }
+ }
+ },
+ "postStateRoot" : "ccf7765eff3effe22a5f853099f7da88291b8346b689ffbf54b729ba04170e59",
+ "pre" : {
+ "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+ "balance" : "0x0de0b6b3a7640000",
+ "code" : "0x6001600053600160006001f0ff",
+ "nonce" : "0x00",
+ "storage" : {
+ }
+ },
+ "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+ "balance" : "0x0de0b6b3a7640000",
+ "code" : "0x",
+ "nonce" : "0x00",
+ "storage" : {
+ }
+ }
+ },
+ "transaction" : {
+ "data" : "",
+ "gasLimit" : "0x05f5e100",
+ "gasPrice" : "0x01",
+ "nonce" : "0x00",
+ "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+ "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+ "value" : "0x0186a0"
+ }
+ },
+ "createInitFailUndefinedInstruction" : {
+ "env" : {
+ "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+ "currentDifficulty" : "0x0100",
+ "currentGasLimit" : "0x05f5e100",
+ "currentNumber" : "0x00",
+ "currentTimestamp" : "0x01",
+ "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+ },
+ "logs" : [
+ ],
+ "out" : "0x",
+ "post" : {
+ "0000000000000000000000000000000000000000" : {
+ "balance" : "0x0de0b6b3a76586a0",
+ "code" : "0x",
+ "nonce" : "0x00",
+ "storage" : {
+ }
+ },
+ "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+ "balance" : "0x05f58340",
+ "code" : "0x",
+ "nonce" : "0x00",
+ "storage" : {
+ }
+ },
+ "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+ "balance" : "0x0de0b6b3a16cf620",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ }
+ }
+ },
+ "postStateRoot" : "ccf7765eff3effe22a5f853099f7da88291b8346b689ffbf54b729ba04170e59",
+ "pre" : {
+ "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+ "balance" : "0x0de0b6b3a7640000",
+ "code" : "0x60f4600053600160006001f0ff",
+ "nonce" : "0x00",
+ "storage" : {
+ }
+ },
+ "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+ "balance" : "0x0de0b6b3a7640000",
+ "code" : "0x",
+ "nonce" : "0x00",
+ "storage" : {
+ }
+ }
+ },
+ "transaction" : {
+ "data" : "",
+ "gasLimit" : "0x05f5e100",
+ "gasPrice" : "0x01",
+ "nonce" : "0x00",
+ "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+ "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+ "value" : "0x0186a0"
+ }
+ },
+ "createInitFail_OOGduringInit" : {
+ "env" : {
+ "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+ "currentDifficulty" : "0x0100",
+ "currentGasLimit" : "0x05f5e100",
+ "currentNumber" : "0x00",
+ "currentTimestamp" : "0x01",
+ "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+ },
+ "logs" : [
+ ],
+ "out" : "0x",
+ "post" : {
+ "0000000000000000000000000000000000000000" : {
+ "balance" : "0x0de0b6b3a76586a0",
+ "code" : "0x",
+ "nonce" : "0x00",
+ "storage" : {
+ }
+ },
+ "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+ "balance" : "0x715d",
+ "code" : "0x",
+ "nonce" : "0x00",
+ "storage" : {
+ }
+ },
+ "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+ "balance" : "0x0de0b6b3a7620803",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ }
+ }
+ },
+ "postStateRoot" : "297303455494578a5176177ff1b9db0b0a516255a3d062fb960bbc99e60d8eb5",
+ "pre" : {
+ "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+ "balance" : "0x0de0b6b3a7640000",
+ "code" : "0x605a600053600160006001f0ff",
+ "nonce" : "0x00",
+ "storage" : {
+ }
+ },
+ "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+ "balance" : "0x0de0b6b3a7640000",
+ "code" : "0x",
+ "nonce" : "0x00",
+ "storage" : {
+ }
+ }
+ },
+ "transaction" : {
+ "data" : "",
+ "gasLimit" : "0xcf1d",
+ "gasPrice" : "0x01",
+ "nonce" : "0x00",
+ "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+ "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+ "value" : "0x0186a0"
+ }
+ },
+ "createInitOOGforCREATE" : {
+ "env" : {
+ "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+ "currentDifficulty" : "0x0100",
+ "currentGasLimit" : "0x05f5e100",
+ "currentNumber" : "0x00",
+ "currentTimestamp" : "0x01",
+ "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+ },
+ "logs" : [
+ ],
+ "out" : "0x",
+ "post" : {
+ "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+ "balance" : "0x0de0b6b3a7640000",
+ "code" : "0x605a600053600160006001f0ff",
+ "nonce" : "0x00",
+ "storage" : {
+ }
+ },
+ "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+ "balance" : "0xcf1c",
+ "code" : "0x",
+ "nonce" : "0x00",
+ "storage" : {
+ }
+ },
+ "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+ "balance" : "0x0de0b6b3a76330e4",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ }
+ }
+ },
+ "postStateRoot" : "b61e4a95fae40806b0ddef0883479c3db70e79e019ab4260535560827525c00c",
+ "pre" : {
+ "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+ "balance" : "0x0de0b6b3a7640000",
+ "code" : "0x605a600053600160006001f0ff",
+ "nonce" : "0x00",
+ "storage" : {
+ }
+ },
+ "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+ "balance" : "0x0de0b6b3a7640000",
+ "code" : "0x",
+ "nonce" : "0x00",
+ "storage" : {
+ }
+ }
+ },
+ "transaction" : {
+ "data" : "",
+ "gasLimit" : "0xcf1c",
+ "gasPrice" : "0x01",
+ "nonce" : "0x00",
+ "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+ "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+ "value" : "0x0186a0"
+ }
+ },
"createJS_ExampleContract" : {
"env" : {
"currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
diff --git a/tests/files/StateTests/stMemoryStressTest.json b/tests/files/StateTests/stMemoryStressTest.json
index 821d7b31f..a279502b9 100644
--- a/tests/files/StateTests/stMemoryStressTest.json
+++ b/tests/files/StateTests/stMemoryStressTest.json
@@ -266,35 +266,35 @@
},
"logs" : [
],
- "out" : "0x00",
+ "out" : "#4294967295",
"post" : {
"0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
"balance" : "0x0de0b6b3a7640000",
- "code" : "0x6401000000016000f3",
+ "code" : "0x63ffffffff6000f3",
"nonce" : "0x00",
"storage" : {
}
},
"2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
- "balance" : "0x200018085211",
+ "balance" : "0x20001800520e",
"code" : "0x",
"nonce" : "0x00",
"storage" : {
}
},
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
- "balance" : "0x1869ec3b06114f6f",
+ "balance" : "0x1869ec3b06194f72",
"code" : "0x",
"nonce" : "0x01",
"storage" : {
}
}
},
- "postStateRoot" : "8745f6bdec4290420747b8c024382c6ed14e09f4a11718bdc1f0f99e4d04607b",
+ "postStateRoot" : "1716bcf6c106040a46ab1d37c569b7e0841f921b4d252dc5202fb05388308a39",
"pre" : {
"0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
"balance" : "0x0de0b6b3a7640000",
- "code" : "0x6401000000016000f3",
+ "code" : "0x63ffffffff6000f3",
"nonce" : "0x00",
"storage" : {
}
@@ -328,11 +328,11 @@
},
"logs" : [
],
- "out" : "0x",
+ "out" : "#4294967295",
"post" : {
"0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
"balance" : "0x0de0b6b3a7640000",
- "code" : "0x60016000526401000000006000f3",
+ "code" : "0x600160005263ffffffff6000f3",
"nonce" : "0x00",
"storage" : {
}
@@ -352,11 +352,11 @@
}
}
},
- "postStateRoot" : "e6c6c5b997cf7ecbc653c920a5b42d1ddd9f9ca2df2c68fd47059df2a3309b14",
+ "postStateRoot" : "b95676d3103fc4a6bdcfb1c201a6ed49e0fa7a239520a4b8ac034ce3b6c697eb",
"pre" : {
"0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
"balance" : "0x0de0b6b3a7640000",
- "code" : "0x60016000526401000000006000f3",
+ "code" : "0x600160005263ffffffff6000f3",
"nonce" : "0x00",
"storage" : {
}
diff --git a/tests/files/StateTests/stRecursiveCreate.json b/tests/files/StateTests/stRecursiveCreate.json
index 7f07c2c6d..4788f79db 100644
--- a/tests/files/StateTests/stRecursiveCreate.json
+++ b/tests/files/StateTests/stRecursiveCreate.json
@@ -144,5 +144,8260 @@
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
"value" : "0x0186a0"
}
+ },
+ "recursiveCreateReturnValue" : {
+ "env" : {
+ "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+ "currentDifficulty" : "0x0100",
+ "currentGasLimit" : "0x02540be400",
+ "currentNumber" : "0x00",
+ "currentTimestamp" : "0x01",
+ "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+ },
+ "logs" : [
+ ],
+ "out" : "0x",
+ "post" : {
+ "0007318879928543f66b36e58900a870dfa83312" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x141182812579a73e13dd878d8a94bb628143b098"
+ }
+ },
+ "001864a1fbee8126e530b9242353d9cb76b043f9" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xb651decbba52842e8fc86afda1168ac549dea7d7"
+ }
+ },
+ "002b88d7e31f20b1cec3ae31ef8ae3f017820cf7" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x0a1960fde1fc2010660dc9cdc299facac4502364"
+ }
+ },
+ "00ae33b99c24c45ce086aa9a1844fe8ed55ec312" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xf4489af2af8424c6edf0d0adc525680dea208a32"
+ }
+ },
+ "00c3d96a0eaddf7975da5c8718c26d65de0de59b" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xe089f14df5e00aff3b03cac5e1236f5cf5832d60"
+ }
+ },
+ "00eb1775a16c0965c299f06a0873e11825f915e3" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xec5f2ac1947c51c5982eb0ab63d1e6439f45c2e4"
+ }
+ },
+ "00eb67f5e410e28c16861fea7a2ecc1e0011a75f" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x61144e43a08b3852bcd531d13f0485743bd835a4"
+ }
+ },
+ "0116be8937cb591d6db17246c91dc3deb1fd0e1e" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x42bbb8e2c7347e29f3a679e4cc9d1ca75319fbd4"
+ }
+ },
+ "012255fe8647bfe207603a62536ac6ae7a230ca9" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xe24778b9ec00cc9bef91643e31885deee719207f"
+ }
+ },
+ "014337758eb4abf60a8e458a97acbd8b47fa0c31" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xb88173b953f6c1b613b6e878cfdb34899e3339ad"
+ }
+ },
+ "01619145d576c5b3130eeed16f29501f2773c958" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x03b685fb90981f103fde64c3bbb5fd701c84dd0e"
+ }
+ },
+ "016cfb16ce1ab4c15eab782e1ac3b0d7f5bb264b" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x52ff6062b4e65231065d5579f870b7f1472a5854"
+ }
+ },
+ "0177fee01c15eede3b794e761753c1f6d108b7f3" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xfd437bf9d51bac3a2757bf4b8bf38045e78d5adb"
+ }
+ },
+ "018b456893203c6e3a5661e7328b5a858904cdc1" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x4d92228ffbe5ea89389a34a7086e4420d61eb70c"
+ }
+ },
+ "0199dd91369b5ce0467b68d57beaf1d96fdc769a" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x974beeae03d1860c485c0dbb68e5413317770b17"
+ }
+ },
+ "01b26e834122a942828698305a84789ec47c0454" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x9580d4c2c6795fcb1ec84bf6a58b873fb2737789"
+ }
+ },
+ "02391d38c9b4f03e9225ae5b28230284fa397a09" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xe908278cc1515f214049c48c3a8908524f2cc408"
+ }
+ },
+ "029f9045d1904fe6076c4dbe77bd33290f390714" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xdef94fccb1b7dfbe1cf0b3dcaa03a77cf58ae769"
+ }
+ },
+ "02c577c9c1b247c0ea60b1dd50fa895c086e2f2a" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x06c4341ea63b3431260716e2162ba90abd9628c4"
+ }
+ },
+ "02c7efe87a470a521338ba476a0eaf7a535c9c56" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x33c85ce982d0996ff7313c1387ab93348a6777d8"
+ }
+ },
+ "02fa5c7476f2d423f27ac8afa1e357db95f920fd" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x11fde66f162bbb0e19d68f0c774c997d0165fa57"
+ }
+ },
+ "02fee10ca6c1ed23e651f29c97a310b1b4dad13f" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x91c87b19dcd811fc5efc567a022bca52d5e2e253"
+ }
+ },
+ "033b61ab81ffc5adce16d365458629d9f3482129" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xc5a28cdc8c4b089c87ed4938ed4718253c48dd7b"
+ }
+ },
+ "03b685fb90981f103fde64c3bbb5fd701c84dd0d" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xe5baf7303b008f333c57491345e604d52fce0d64"
+ }
+ },
+ "03f3095f9e46a8ac62005c42aaccbc0fcdc3aa32" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xa71525ab6694ead3c1be0aad07bac06e69192525"
+ }
+ },
+ "04110d816c380812a427968ece99b1c963dfbce6" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xa9647f4a0a14042d91dc33c0328030a7157c93af"
+ }
+ },
+ "04308fa2e7af944dd7008a7edbe5221a52e2bc87" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xea186a9a4815581b71403480abae5cc7c57c00bf"
+ }
+ },
+ "0441738f9f0a045afd77a72ef8398475c1111471" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xc82d5a989ed7c8ffdf79ea0724b3c9ba3fb84e58"
+ }
+ },
+ "0462dd089e0519c581654520d17763635011fdff" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xe32bec776748185042cb02d58fad1d5027bbaf00"
+ }
+ },
+ "0473710fb4277459429e0c4a862ad3e4b45692e4" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x6168c5e3b7d7c870e3e7eb53b152fcb920c8e1ec"
+ }
+ },
+ "04929feafa156581a24d8a0bfe8154ffab39fb37" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x51cc4a0bffdbdd8313ed94ebfd5524e8200f4877"
+ }
+ },
+ "04a104904b31f401966da211ef40874d6e97ae46" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x25f81565c6ac2e22d7e320168222450c2cdf4f6e"
+ }
+ },
+ "0581dee4d5420c2f6b1614ca62a4d66bcf383d0e" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x871986919b8ac4032193739eeae09c66765f0f16"
+ }
+ },
+ "059ec3d5a255df8a5b592659ea5fdd963e9bd0c2" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x76ea1b9309253b5c03bbd6e9fca6591b51fb3786"
+ }
+ },
+ "05e29ccc32df8edacbc5bd6fe19fb4ca02928969" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x5b71d8cc27346cf6d64e101aab9c88dfd58d26fd"
+ }
+ },
+ "0602479ffb0636a1ce0fb57bf7949cc978250d2a" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x24ce22b6a7f4227e1e3a6c03c14d07acdb2ec554"
+ }
+ },
+ "060e7bcadd084fcf19db5cc1ea769550bd8f7508" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xbbdb82e2b1ebae617370e1c27542ea087a4fa938"
+ }
+ },
+ "065c627bc67fca3636da49c34994b6efb2adaad0" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x26be5205dce0ce433dca3602886578160e6d52c2"
+ }
+ },
+ "06c4341ea63b3431260716e2162ba90abd9628c3" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x3a9d3ead70f9c3cdf9a64b25b5c1bf765fe09fed"
+ }
+ },
+ "0723789d0c7093f6e97c3fdeb1324a75427ca6e8" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x4f14a61b9f2f99e50b719f1345e76339f7618203"
+ }
+ },
+ "076ad7e168093f590a74f6fdce56b492a23baa2b" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xf5472ede25cb83dc2fe392b01111133b777709ba"
+ }
+ },
+ "0801871b468dfdcc2d3bc0c0d01cb6ee02afe581" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x751c9d6e9b6d91897ab1754b15b72712953de9bf"
+ }
+ },
+ "0802fc1dc1a5dec7fcbf1d50f3d8a944099ad72e" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x7d8e57afa6550a1be621fb6c083aca311a1e229d"
+ }
+ },
+ "080e2ae63ad3891bfba9ec5200f4ba383209ecde" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x93a5ddc7d7b2a2bbb7a61086aa6fd0cc9e202b0e"
+ }
+ },
+ "0891a47ead61f684dc876e12d5261ab614d0fa09" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xd09a49b1cdb208e2504486267ca2418c87152963"
+ }
+ },
+ "08d19f247ca974ee89d4f988cac4becf7a177723" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x4b2c0c38418eb142d686d124ac5fcb363b061fd8"
+ }
+ },
+ "08f86cd9e45cd0f821b6088ce2f1b3c0f70dba07" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xb1691d2608aea9d7a56083dc7dcbfacc93a4287b"
+ }
+ },
+ "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+ "balance" : "0x0132b3a0",
+ "code" : "0x602060006000396001602060006000f001600055",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xd2571607e241ecf590ed94b12d87c94babe36db7"
+ }
+ },
+ "098de34931d0d159e2631aee55524c217624d095" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xa3ad081c8f3b79ad20285e881e0e4d011efc0130"
+ }
+ },
+ "09957f64c3396f36daa03c68fa6c997eb7903df1" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x64134c8f0ed52a13bd0a00ff9fc6db6e0832e39f"
+ }
+ },
+ "09986b78d02ae7c8eaa8b62053a3ee78deba79ab" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xc775193c9d81ed6ee806f6005a874b927e96ff1a"
+ }
+ },
+ "0a1960fde1fc2010660dc9cdc299facac4502363" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x51fd18c9ab9bbb67c27373e8ad754e253e09dbde"
+ }
+ },
+ "0a517d755cebbf66312b30fff713666a9cb917e0" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x95a4d7cccb5204733874fa87285a176fe1e9e241"
+ }
+ },
+ "0a9015286f76ca4fbcc33e74e9c414be9774a67c" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x5e5a0b9c4c36067c8730abecdb29ba97aed877a8"
+ }
+ },
+ "0b4b7f08623d9b3d6514baf529399e4f1c0ad944" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x569e42b9cd8d79ee5c5ea9c68ba948b7b4d8d84f"
+ }
+ },
+ "0b98f3276e76e9982d7f6996878ea5196fda62f1" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x3867a470ae1d99ccc7af287ed95ea4da4fd49e53"
+ }
+ },
+ "0ba7f30a90b699e3f906bff7599b230890bbd56b" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xaeef5b5a721ea3c03ca909bf1f71c122ebcd32b0"
+ }
+ },
+ "0bec2514a2a40586ec75e27442352d1dd2bce537" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x0f065de4c5c4a842f52a30fdf7b0162594df70a4"
+ }
+ },
+ "0c0cd995ac9e488544723e3e8e90a5fed98a6958" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x42f56890357c304762f1c57171cef30f044ea09c"
+ }
+ },
+ "0c1e13b0604290abd900eba3fb6b7560b3401f58" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x295882ddd91b2f92c43bad0a51fd0ef7af61e72a"
+ }
+ },
+ "0d11b1966fa90191f6927943c476d36fa3a31556" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xf2d923a66a9684f2268530094ce8e3f8b8cae52f"
+ }
+ },
+ "0d1e5ab3b0c2d1ad5a562c123b7f01f4145074ce" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x2ed524088290909f92ade6d5f9d9c24071c26663"
+ }
+ },
+ "0e0905211a442bb5838d2d6860f4f21e6b9c6593" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xe134cc9b2be1a15b9e270a9f7baacbda3c8b365a"
+ }
+ },
+ "0e639c40606e9329259d2f945f59dbcc6c5c5cfe" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x83abf69971313b011ee30466e8f703a460400558"
+ }
+ },
+ "0e700a2aba22bd639abf05addbb24c53c3f0f3cb" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x1039c22c55420b0d7e65e6e6e65798f3f4c1e726"
+ }
+ },
+ "0e8dab5716375707d97656230beb5f1445e56309" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x6fc7016fa33af287b3b9cacd092c26bd9a05456a"
+ }
+ },
+ "0eca69ecf3068082cff932c044fe39142ab6268b" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x4fc34bdd654289653ffc904f86ab2f17bad8431e"
+ }
+ },
+ "0f065de4c5c4a842f52a30fdf7b0162594df70a3" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x7ba53872256e6762bbfdbefb1bb80b26f94df9f2"
+ }
+ },
+ "0f0f333b14cae00e0f74e1de336437d5644ae336" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x3dd6e0baadd05402f490e3030ef1970d884a1cb0"
+ }
+ },
+ "0f2fc64833681664e54ca74ea756c7233a05dd85" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x02391d38c9b4f03e9225ae5b28230284fa397a0a"
+ }
+ },
+ "0f8f271215cf51a0646c8a60ed626515b3ddb739" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x8e1f5c577cd5a404507687ef379cd1e41c4a9a9f"
+ }
+ },
+ "1039c22c55420b0d7e65e6e6e65798f3f4c1e725" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x3fde19fb418799c0e1744b322314c17a863a0c9d"
+ }
+ },
+ "104f577c92f14f3684c13eb179b9969c05115604" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x3c7c94fe8e900964a9885a19e09a4ab80213c5c4"
+ }
+ },
+ "1057c6ef671b124fc14b5641c167c6e6756d8cb8" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xc06bd5d93ac2ecab95942d1639b700e3a2cc48b9"
+ }
+ },
+ "1121c3fb4f490140339dabac59a62dd59a9912de" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x61306db8b4ac256266cb379b5f686e25cc117591"
+ }
+ },
+ "11895349d40ea4683803f8eb7ad1d2355ff906d8" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x31e7dce7c8469a6dc612dd8c0a1242846d31c06a"
+ }
+ },
+ "11fde66f162bbb0e19d68f0c774c997d0165fa56" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x36630619f71ccd89ea6fba8b13099d1483187b18"
+ }
+ },
+ "1209046d7bf46e81d8202422e630719c906653da" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xc44e39eed84adf0c399a9d5af8d0053715d0f5fa"
+ }
+ },
+ "120e38f3899a4e2f9f848a82c7afee288d14e7a4" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xf6ee7d8bf313f837bbfed7f10b16fb2f182fd417"
+ }
+ },
+ "1236efbead5ada892f61e7e4e59faa143e3bc01a" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xa20b30a1e7723ce15f80e9706fe9c1ea05170a30"
+ }
+ },
+ "128aabc28c928691ad3415e3c57010c40694cd6e" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xdf5767dc4d8111e8641198f637e4423c62e57e28"
+ }
+ },
+ "12eed250610e4d59e841381dc46deaea3d9305b1" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xe9d157e81c306452f8494f681813037b146660ec"
+ }
+ },
+ "130d08c2381d23796ff403d8f1fbaf204d90e3b8" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x7ee27699bf52e4db7f72b3f2591f48e8ad7972a5"
+ }
+ },
+ "134c36c64db09ad23fde5b43a3a7a92d84dd5300" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xc8732f022b6c57d291b26c830c651b3617c75b2b"
+ }
+ },
+ "13911c90a6ddef5182a772116c1d9e98f27fb1af" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xb31b1fe90a535ed66dfaf1bf9e1062190fbe88a7"
+ }
+ },
+ "141182812579a73e13dd878d8a94bb628143b097" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xb0f8d2e75cd431ef9d818a2552aab19a6a99c1d4"
+ }
+ },
+ "1456fa2cf6376b40069504e491e64aa40484fe3f" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x0602479ffb0636a1ce0fb57bf7949cc978250d2b"
+ }
+ },
+ "1480213270423eae9d6b0a603541e989998453d1" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x689a40b4f540d145f6dc4ba4079e17f84b650f9d"
+ }
+ },
+ "149d393bffe9be2336e7ffd6a109f05318dc798c" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x13911c90a6ddef5182a772116c1d9e98f27fb1b0"
+ }
+ },
+ "14a76e43bc292a0e69bace56681c4eb50d8e52d7" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x54a1706bea8f61e354b5296afa5a9f488f88ba0e"
+ }
+ },
+ "15146e7f5a3d2db1c655ba9d8eaea6c62ca34496" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xaae4f6978a8eb4a7be406a2a787d31dd49cd551f"
+ }
+ },
+ "1555dfd05f003c056dc219415443be1a502fdee1" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xb572b99fc06b16a232d74898e587398d25d7d340"
+ }
+ },
+ "157f8c66dd3cae32485b2d68a51c1dd7923bf91e" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x534d2d9ab80a99d598de600ac2843f751e8bef3b"
+ }
+ },
+ "1588c83de3fa7b22bf6aa67a4e91f303b490cbb8" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xc7e31a320a9a7969a6f4c3cf98bd6d92a6119056"
+ }
+ },
+ "1591af76c716952018e52e54c716e8b2226d494b" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xe365d9256480b1e9d3cc6eafdcad5912b75ad14a"
+ }
+ },
+ "15c4f7ebfc781a41226d61bdc0fcdc98fdd8bf45" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xecd38089d14a75b93afa634276bbe8965f5642dd"
+ }
+ },
+ "15e75e648b604b0b8028f7955647eac6bc850088" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xbb26680f6bb423720c6437fab35913d0a86e2a79"
+ }
+ },
+ "161f83bac94d326e2a8debba84379ab72a14c6d6" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xd65386ce109ffa3570dd27e54f32e2528fe01fc4"
+ }
+ },
+ "1622e5aa3015448c3a7560b15a289d9aacc5370e" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x291cfb4b02976ffde7f1f269a3e7d30940367e56"
+ }
+ },
+ "1660ada72b0a07040df8d063f2f3f3fee891f1d0" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xb8fc89fa4eae09e1b4bbb51f4c1791e589368802"
+ }
+ },
+ "16c5f61453cff59c6b7e2a690cd902b72208427f" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x4cada4d5773385e68f4ff1efd1a23d75dbf1e61d"
+ }
+ },
+ "16cab73035afa73268745a3c2937b551813c4960" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xf8fc32491119dea2b7fda5080ef9cf0027590266"
+ }
+ },
+ "16f5ee37c60dfd70f8281ac16cda47d665ef8789" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xdfc26965c20fea217850a28c08021f1468146102"
+ }
+ },
+ "1756aed6799c904988cc7a1dfabe77fcca058655" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x9606aeadd83c5da2a613b0e132f0a6c13cee43c0"
+ }
+ },
+ "17c7a85a071c3dee708baeaf56c208752c362e56" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x5b4615bc4b0f10948e46f967ca6e64cf91a77540"
+ }
+ },
+ "18500d6a8e3e20ace9aeb507c213b6261b23f5d3" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xb03a2acc80fce6d54bd1db95d7ff24123ed6e107"
+ }
+ },
+ "1872142d84f7023b181766b790a4487f4012527c" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xe28a959abf1b36ad7778737d992690cb73a51a92"
+ }
+ },
+ "18731575d0a6339f6317c2a1b628d8a4c145328e" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xbed1a42fdb56c7d562a773650bb2785737caca3c"
+ }
+ },
+ "187749fd89567f9519f0d50b4a19ad2600440e3a" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x4bdd7615ee906a0c88233acc5816b4fdb4656dfb"
+ }
+ },
+ "187dea0407359c9579adbdf1ba9fad4a92fb358b" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x77d724d278fa787544189c4774f03849be2868f0"
+ }
+ },
+ "188921ab89b5b8bcbe443676626e6012a1ed7dfb" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x0a9015286f76ca4fbcc33e74e9c414be9774a67d"
+ }
+ },
+ "1889f5317912e414fda653c710d2c17b7d5651e2" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xa5ec829bcc187b6d19e825b5b6f12f86f81cc064"
+ }
+ },
+ "18934934c2f7d8b6b645fcc90460a966df3a716f" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x92bbf48cf4a124ffff047cad76c82db1a1889804"
+ }
+ },
+ "18e0cdfc5a23465cfb3566091849c044d2210b55" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x533069310b9741214f30aeec58be9d19f40161ff"
+ }
+ },
+ "1963ac8fc10167891e91b4d3f53e09e0b7c9b55d" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x29f147c366199719adcb2ed1d528c4f34c10dc04"
+ }
+ },
+ "1a6bbe5380998bea238848b7a5927fa87e7b9fe1" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x6b5fe85d1513c1a29fa825a343db7a80558e6de6"
+ }
+ },
+ "1ab2ec9fb4e5d9d8cd15a1ad495ff314b97869c6" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xbccf73dc6498406a51b4183e22c4be57de5c4976"
+ }
+ },
+ "1ac3dd6a958d88e45c2c55d938dba74fa892084e" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x4a635e63aadc395c1801c73640f256250d209b26"
+ }
+ },
+ "1b6ec3b2772285abeba8f53839fd96de995c4bd1" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x15146e7f5a3d2db1c655ba9d8eaea6c62ca34497"
+ }
+ },
+ "1b8a6f09f8fc9743b59ddbb2f105034e32262552" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xcfb86844738d5373ad23eb3185e1e9fc5d517ae7"
+ }
+ },
+ "1bce33a58c2741f74daab60067f759e9fc5f8c40" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x352e4ddc3153285117254b1cc378d297b7a057b6"
+ }
+ },
+ "1c2749b3a6c574b21622761bef7274261597ef2e" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xcaf720d275e228b58bcd8b2686714ed8819cdc2c"
+ }
+ },
+ "1c32901c93008d3e09928bdf3385f32ecff9500e" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x161f83bac94d326e2a8debba84379ab72a14c6d7"
+ }
+ },
+ "1c6c53405b0eb8800a527cc5990fe3b259b50a4a" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xa015c57718562f3839cdabd7d4e9c86f1a321a1c"
+ }
+ },
+ "1c827d36ec915dae96fdc0b164fb7bc1be9467b6" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x8228837a1a7d0ae41b857d852a8dd6b7c6cb3e39"
+ }
+ },
+ "1cd063768378c77cbcb93dab0ba4c345d76bb0fe" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xe857a6c6f502dd2bd0ec341b2d4ed55f2e87e8e8"
+ }
+ },
+ "1cd52bab323ca2180a747d3c8b8405397003feb9" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x9137343457792227d68316f6ac0bc3518a7702e4"
+ }
+ },
+ "1d3289a828d2bb4a86cda52b7772e2d0d508bac9" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x1c6c53405b0eb8800a527cc5990fe3b259b50a4b"
+ }
+ },
+ "1e1505a86f6b0fb5f7a4500cca953462cde929e4" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x77f263b8c785ec73f9f77dd11ab64fb0089cb165"
+ }
+ },
+ "1ea264b74c8f6e50586097e2e7c9a39419fd88de" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x208d07e7177b2e975c6b6d0eb3c5566900b87dfd"
+ }
+ },
+ "1ec05c9f7c0ececff5088a06157f47f3e9dac9c0" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x2ccccc0744051db25927d850055234117778c1fe"
+ }
+ },
+ "1ec26f14651cc567ce691ce83ef09eced6b12a6e" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x284452c049bb65ec77ed7502b19abf699127c21e"
+ }
+ },
+ "1f01dbf8bd02bed14cc0a21831e044faa3f66fca" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xc489e22b54124b98b17b68e7c38676efb81c1863"
+ }
+ },
+ "1f1960aa296fd1f00ff131357138001afcd858a9" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x8c2e2a704d809931e711b89162391f2dba837407"
+ }
+ },
+ "1f323b00b7be1e9c0713b080cadc05f45e5e7ec3" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x52b90967c04ab8adba7c6908b04eabf2c00bcf83"
+ }
+ },
+ "1f5cdfaf598bd8002997b576e9ba849636c8431f" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x965025b3b611003c82c8c9b69b35b4c5444cde6a"
+ }
+ },
+ "1f95c6da6a9e0abe74900ec00388094d32d98a42" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xfcf47e5c1414303d55afc40c75c41cf42079d561"
+ }
+ },
+ "1fce5879444d729719c03b5af6e074b87a49d933" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x08f86cd9e45cd0f821b6088ce2f1b3c0f70dba08"
+ }
+ },
+ "1fdfe5402a88f71bfbaf9c65f6df05b8eb6232c1" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x40e0cce7d94ab21453c5576f30a598cf9fa80e1b"
+ }
+ },
+ "202474905af37a5074cfbc2d2dd0f2f205a099ab" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x333872ba7e8ce9c43e158b12a3d038d06672db7f"
+ }
+ },
+ "2040d98a367ea817f76fcf8574d4df51234eb492" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x188921ab89b5b8bcbe443676626e6012a1ed7dfc"
+ }
+ },
+ "208d07e7177b2e975c6b6d0eb3c5566900b87dfc" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x1ec05c9f7c0ececff5088a06157f47f3e9dac9c1"
+ }
+ },
+ "2099c5bdda1d98ce3b99988d768fa9f812a21f24" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xb021f73dfd1500257934aacddd707e6f67173ee0"
+ }
+ },
+ "21115fe08f7ec434d4ec27e8dcfdf31a6e50aa09" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x38ae3c2e0c1fa2eaec3648a2829fa362b5e01352"
+ }
+ },
+ "21190aebff29feb773919d8572f8cc825bbf7144" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xe026a4835edf27c2705c97f237e5b59b7b5da1f8"
+ }
+ },
+ "21368af8397276e6e4b284fe36f525dd323bd3da" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x4ec674e8eb6b890cbb7df926def8fbbb2a6bba71"
+ }
+ },
+ "22230d8d10e81e01450aa68bdfbee3c20d969de9" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x9cefc7e38d2a714318e5c36c3c21b226b10218e8"
+ }
+ },
+ "22affea985c1a1ab7007a55e77e80c54111708be" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x559bf1337f14e89aee38a9859ec9bf8035e8f6c2"
+ }
+ },
+ "22df73cba33d8fd14fc985fccded670de4041f25" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xcdcc86f0d7e95ea5b2f9f5e802015c8ff855b258"
+ }
+ },
+ "22f2f312befc07db595b5d9fcbc4caa7ee8df51c" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xb2f828407f1a5fcbb1e4ec079c22d791c7fa5479"
+ }
+ },
+ "23138c70217200a44c58dceaa4f5ab06470213a4" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x71a2fa577619a37c2e2336bb6c20fc1af1938610"
+ }
+ },
+ "241b46962af48709f1a19739ffdc7bd3f0d2c7ad" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x310782e2f6d97ef0abd4a4ccb75b401a7d348be7"
+ }
+ },
+ "24248d1242acc87dc331e87f3142951a977a3d2c" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x2e574f7a4c8f0e80964604262ef68b3168fd31f0"
+ }
+ },
+ "24ce22b6a7f4227e1e3a6c03c14d07acdb2ec553" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x080e2ae63ad3891bfba9ec5200f4ba383209ecdf"
+ }
+ },
+ "24cea63a6f0ede9a0fa91907e841ba4174e1cd0c" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x8a2cab44ea3d5c52c704f060f4088e505791a57f"
+ }
+ },
+ "24dd378f51adc67a50e339e8031fe9bd4aafab36" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xa4202b8b8afd5354e3e40a219bdc17f6001bf2d0"
+ }
+ },
+ "253a31b068a402910eb30758704b78c375ea349a" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x5c70cf636b26ffc099fba8ddd5093e95ca8e7783"
+ }
+ },
+ "2559cea11e9d8fd293253a8ffada7558c9c4db86" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xb94d3b46afb9954a375e50a6fede26705800a058"
+ }
+ },
+ "25c0d5ce71eec198760c001497350ad83df55ea8" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x1864a1fbee8126e530b9242353d9cb76b043fa"
+ }
+ },
+ "25f81565c6ac2e22d7e320168222450c2cdf4f6d" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x4e36ffe7590f8dd7fa9c4c03cba3120674814abd"
+ }
+ },
+ "2600b9122847ee06e201ff6a734fdcfa74b2be73" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x3e85699a24243e147ec809e30761d92c0d21392b"
+ }
+ },
+ "2652f49b5ad98503231b3befe7587c231be8a5e8" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x8fb5f5dc4d66ea0233a652230d44299718cb9f9f"
+ }
+ },
+ "269f24e1ae86f63876b0504b7b26e20483fa95f8" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x0e0905211a442bb5838d2d6860f4f21e6b9c6594"
+ }
+ },
+ "26be5205dce0ce433dca3602886578160e6d52c1" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x38813e8d77b07f357888ea1a7805ebf52c59189c"
+ }
+ },
+ "277c19a0f1e4f5e4339de4d0223fa254a6c8a5df" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x98b163f2929e5c92709759e3215879acf32a3a99"
+ }
+ },
+ "27b3a0698a207d5ed960cf71b1ee9fc54c229eb4" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x6e24d18a80aeccbace499b6d26b655633c0bee9a"
+ }
+ },
+ "28313061667479bb25119ca3090cd25c4a99a20f" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x241b46962af48709f1a19739ffdc7bd3f0d2c7ae"
+ }
+ },
+ "284452c049bb65ec77ed7502b19abf699127c21d" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xee21d08004e0b6f2c1cd4bcb2a04ab74f7b7b709"
+ }
+ },
+ "28cd47ab2e86fe040740206eb31fe193df7cbab4" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xefe2a6d8859b14ecc69baf66dcd47f4067df18e6"
+ }
+ },
+ "28ce21f7f28c8a546bca1697ada45cd73473465d" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x7e2a31e29b84cb193202609dbd86ebaf9a83c11a"
+ }
+ },
+ "291cfb4b02976ffde7f1f269a3e7d30940367e55" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x98ae7604effcc8bf6accb109ebf78fb6f5dad01e"
+ }
+ },
+ "293f982d000532a7861ab122bdc4bbfd26bf9030" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x729af7294be595a0efd7d891c9e51f89c07950c8"
+ }
+ },
+ "295882ddd91b2f92c43bad0a51fd0ef7af61e729" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x4fe8f4ad85487cfe365ca212848f7c970c21e136"
+ }
+ },
+ "29799a64a736832cda536d687dd443ef3bc31e57" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x54d1de66a65ecf30d79037a8c8af99c633113517"
+ }
+ },
+ "298b8bde7997684bfe4434cf6d24d50ddabb69b2" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x25c0d5ce71eec198760c001497350ad83df55ea9"
+ }
+ },
+ "299528bfdcf20ff8e19a7a3fbbdfe98eddc2604c" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xe0f04368af17d56c8cdb50f0fd5f1847d9a49cb2"
+ }
+ },
+ "299f80e93d68725830c27cb084265d0e634e4f77" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x939023fa69f246b709a97f16c37367e36267828d"
+ }
+ },
+ "29f147c366199719adcb2ed1d528c4f34c10dc03" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x7c7d893aa4fba1deebfc9a5a14b27e2ae7f66404"
+ }
+ },
+ "2abef5958c8b283eaeec4557844ff1fe194e6cd3" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xffb9bfb24fb671413a3aae05e0f21b870eeb2aba"
+ }
+ },
+ "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
+ "balance" : "0x032e2d4c",
+ "code" : "0x",
+ "nonce" : "0x00",
+ "storage" : {
+ }
+ },
+ "2b5fbc2f7e76f6281861cb4282effb94d609844d" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xc37d1d79868b6a4c25db68301b8575ae4a8336fc"
+ }
+ },
+ "2bab1d9132d47e56f937ef50987cc52c9adddf0b" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x2d960addf6048f155cfaac4ad513f46429bb58f2"
+ }
+ },
+ "2bb175c167599417f2192d9f926a5c648d17de8f" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x799b6226b099fc75d1fc2cf6f833bdfc1fe63e49"
+ }
+ },
+ "2c4a413bc345da77b2d07a17313b6d89aef2c2c1" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x4c0cfb86a402c70e6b110a1237d10c7fc7fe9cd6"
+ }
+ },
+ "2c748f96ae0e6e9b01395e8a73dfc351c46658be" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xccc8cd23dc6755bbb516af6ef2a04cc82a5ce5c8"
+ }
+ },
+ "2ccccc0744051db25927d850055234117778c1fd" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x624a9bd6345be1a95c7fb509ca4bb77d05138adc"
+ }
+ },
+ "2cd26944d7baa6d92eee478960d5778375862e85" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x8b0dfaaf9135721f01f3712572ea9963d70f49c1"
+ }
+ },
+ "2cf5732f017b0cf1b1f13a1478e10239716bf6b5" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xaae4a2e3c51c04606dcb3723456e58f3ed214f46"
+ }
+ },
+ "2d142ccaa1337198d592bc36ce7c5447da73f906" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x18934934c2f7d8b6b645fcc90460a966df3a7170"
+ }
+ },
+ "2d960addf6048f155cfaac4ad513f46429bb58f1" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x5e76969932c5d314142b23c555af4625fa6b9344"
+ }
+ },
+ "2db5e35091789102bd0019b4ee49bcae42524428" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x4d47d935a3a4a4618c67f337a0075d26d9c1f853"
+ }
+ },
+ "2dbc14a87a2b5a8b780e460dbe0083d8260326f4" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x40652c9cf91678111a21c62d7206ffbca3d47c9c"
+ }
+ },
+ "2e070631694c093a9a329ec0b4a1cfa57e20ab77" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x312f80de0869a8fed49c8ba843484411c47dd13f"
+ }
+ },
+ "2e574f7a4c8f0e80964604262ef68b3168fd31ef" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xfe4f48d16a7ec27241b987f3545423291c7cce78"
+ }
+ },
+ "2e83c90e7fa359705ed2138854a83a9145c27a8e" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xc071690916c15657eba376c7c6b4b06d38e815bf"
+ }
+ },
+ "2ea29d9016f2b1141475e4c3c62e031c0a908a07" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x128aabc28c928691ad3415e3c57010c40694cd6f"
+ }
+ },
+ "2eabf4237f49d4cd44ec256436b99ba41828d36c" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x1ab2ec9fb4e5d9d8cd15a1ad495ff314b97869c7"
+ }
+ },
+ "2ed524088290909f92ade6d5f9d9c24071c26662" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xe8373e7e464120da8a84da82c8137872cda65781"
+ }
+ },
+ "2f171d1f2cf19f4a458b7dc4db89fa7cd818dda0" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xe81f08cfb60f7c156cf7dcbee1b8790901a1eadd"
+ }
+ },
+ "2f8ac479ce5baade6a63ecadf9599bfb0ecdecde" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x5d07bd78606705bb5c62fd390123b4e45f7d74d9"
+ }
+ },
+ "305773e25e157761c9d55cb7d9e24fc1b953a8b9" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x462cf0e5071404ef569338a6f0a5b113d64a11a3"
+ }
+ },
+ "30b37f280d6735ee04239de0963b071f83c13a27" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xba3adb3b7ccccb748a65932e0254e52ce092c5b6"
+ }
+ },
+ "30c5bc3861dfc5a70325aca029ab5dcb2d72928f" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x02fee10ca6c1ed23e651f29c97a310b1b4dad140"
+ }
+ },
+ "30f51302b4630ea1b8bdcac380bd97d78c8f60d3" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x22f2f312befc07db595b5d9fcbc4caa7ee8df51d"
+ }
+ },
+ "310782e2f6d97ef0abd4a4ccb75b401a7d348be6" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x39ed2d94ee4aae100b111c773d4f3b78bd4e9292"
+ }
+ },
+ "311f9efa9544b1c8a8277c52e0f1ca47daec8c00" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x6ad37e86c8d4b961b0302ebf0a540ae83f3679ed"
+ }
+ },
+ "312f80de0869a8fed49c8ba843484411c47dd13e" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xe93e7128f80bef53e3217782f21f4bd6a6d19c7d"
+ }
+ },
+ "3174a074366bc04bfb7f2a728a725cb01cd575d3" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xc4170be517e6c67a9e65dddb09220df58e547103"
+ }
+ },
+ "317f31be5e04361b11b97ff2d6fc682030d8cd8d" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x1fdfe5402a88f71bfbaf9c65f6df05b8eb6232c2"
+ }
+ },
+ "317fda8ec45232a8259546a4ca8ebef16338d47b" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x9cb15938a825ff7c17ae775b6454730983522907"
+ }
+ },
+ "31a87a9e67b2728c14767de26753f205b793c5ac" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xe3d08fe78f595bede290f820ec0e878572803a6b"
+ }
+ },
+ "31c640b92c21a1f1465c91070b4b3b4d6854195f" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x98ae76bbf3fe4b779df55df06eb0081ac95d6610"
+ }
+ },
+ "31e7dce7c8469a6dc612dd8c0a1242846d31c069" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xdc1baaa8621b513d62e8aeb02543ce5c7b8020c1"
+ }
+ },
+ "3229e332af8eaf358f44aad3a902a6c47f96983e" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x8b0c28ef1527a918fc7dc134ee6c00f069c7073b"
+ }
+ },
+ "32a48ace80773ad092de1d9bcaa00787353b5fad" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xd3a4f3cc7113eb16572eced68ab395a40ceeda1d"
+ }
+ },
+ "32de9810bbf442f9209f994556bc9a7f7e6da500" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xac0dbbd8aa555e012e1b5fde0b4e1f20e30a057f"
+ }
+ },
+ "32f9418411245a8bc6982ff71436ed2de87e3d96" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x0801871b468dfdcc2d3bc0c0d01cb6ee02afe582"
+ }
+ },
+ "331a1cbbb58594c3636c0e54de517c4a6cedc27b" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x3e0506e272fb9d9369627282cd76a40e4046ee85"
+ }
+ },
+ "33207da78e5ef3dde6fceab85bee1b5bf717e139" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xeca2fc261f07a269c2487e6d1b0539d0950ff793"
+ }
+ },
+ "333872ba7e8ce9c43e158b12a3d038d06672db7e" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x5de8956c0c99e2dc6715201b3a9e1d5fd53b2dd5"
+ }
+ },
+ "33b82c3871bc89d9137c62af099a0c4e5911a047" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x7213c423e1db8af095bd3cefb15e43c6067635ef"
+ }
+ },
+ "33c85ce982d0996ff7313c1387ab93348a6777d7" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x1f5cdfaf598bd8002997b576e9ba849636c84320"
+ }
+ },
+ "3432c3f9f90cb61e79f39d310bdc6cb8dcb3a49a" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x5216a59dcffc6105f9b58a0b397baad604c0dfb7"
+ }
+ },
+ "34c972120d50fbdbb38ba536e4d61bc8f995d19d" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x4b8558347f669cd9b50f70cb501cdbf05f93b576"
+ }
+ },
+ "352e4ddc3153285117254b1cc378d297b7a057b5" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x2040d98a367ea817f76fcf8574d4df51234eb493"
+ }
+ },
+ "3539fe0192009fe1a9d35901b0ba951a59348a97" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x6f3dda610ec5a3722ff4ab49d1f215dd26bd8ad7"
+ }
+ },
+ "36630619f71ccd89ea6fba8b13099d1483187b17" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x11895349d40ea4683803f8eb7ad1d2355ff906d9"
+ }
+ },
+ "3671a99d2a485b30fafa2a65f405b6b03ed32ea9" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x925cdeaf40df0ac82648432e65481350417fd849"
+ }
+ },
+ "36a9d95fe0c701c65370560445c6a80b4e13c8d9" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xcd1171381ba62ff31b56a001b8144e64e365eba2"
+ }
+ },
+ "37609ce3799a1b75ea6090da3d014d59e5e7851c" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x3f8bd9d9410af417dcc6969b64096380e1a6d0b4"
+ }
+ },
+ "379ef6dde2bc54ced45146d4907639ee7cf1c8eb" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xe19f216f6b8b78ff1e705cb56d0cb07db60a05ed"
+ }
+ },
+ "37f998764813b136ddf5a754f34063fd03065e36" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x24dd378f51adc67a50e339e8031fe9bd4aafab37"
+ }
+ },
+ "37fa399a749c121f8a15ce77e3d9f9bec8020d7a" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x04110d816c380812a427968ece99b1c963dfbce7"
+ }
+ },
+ "3820c20f3f8ee1b164dab460b05a979640a41369" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x7642513288c9da66960a6f3df0c156a8e1dcb11a"
+ }
+ },
+ "38450559e7ed9b72c80aa00855b942f9bac1b281" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xc1ab531ecade623c0c908c1fbf104fb8c647a37f"
+ }
+ },
+ "38479ce52243f1a8b358515a084fb41533a723fd" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x636b02091904e5b452d19455f484306b8fe62dd7"
+ }
+ },
+ "3867a470ae1d99ccc7af287ed95ea4da4fd49e52" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xde63eef4b269d8572b6b00574ad8e34c471a07d7"
+ }
+ },
+ "387b1112283308ce33f63062a7531e6fe0f3af16" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x6d9834013a85a25df2e3dead1986d753457d7b68"
+ }
+ },
+ "38813e8d77b07f357888ea1a7805ebf52c59189b" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x891c7f214e32206e8f497fdaa7ee419e2e8f3dde"
+ }
+ },
+ "38ae3c2e0c1fa2eaec3648a2829fa362b5e01351" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x79f2d463ce2404b3e77db5dea5cc19d76ac223dd"
+ }
+ },
+ "38c622aecb7e84ad4fcfc327ae9a1a17e2dbc36e" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x30c5bc3861dfc5a70325aca029ab5dcb2d729290"
+ }
+ },
+ "38fe3b47fed5fa6d060bde66598bf5a773b831eb" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x1057c6ef671b124fc14b5641c167c6e6756d8cb9"
+ }
+ },
+ "3917f5ac4614ab7d126adf2f5b1d578f2b91c370" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x2bab1d9132d47e56f937ef50987cc52c9adddf0c"
+ }
+ },
+ "39457953215cb93e68bc5b351d63a8b7fd16031e" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x0e8dab5716375707d97656230beb5f1445e5630a"
+ }
+ },
+ "39d9b351db53d59af4907116d594ebba910474f2" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x0177fee01c15eede3b794e761753c1f6d108b7f4"
+ }
+ },
+ "39ea196ad4678ac786f9ff4ba12edbb364cd1baf" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x202474905af37a5074cfbc2d2dd0f2f205a099ac"
+ }
+ },
+ "39ed2d94ee4aae100b111c773d4f3b78bd4e9291" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xa6495f085bc30ac47e89a9a700e406e26286c3f9"
+ }
+ },
+ "3a9d3ead70f9c3cdf9a64b25b5c1bf765fe09fec" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xb5f4de69833ef9f1392c74a5ab905c5cd1ab2875"
+ }
+ },
+ "3b7465c98051ca273d8909857047d5dc5b022af7" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x05e29ccc32df8edacbc5bd6fe19fb4ca0292896a"
+ }
+ },
+ "3b7d7653d3a7c2712d08bd29668163cb775c74a9" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x50aada85d21c462d9c2803fd3c22beacc61f496c"
+ }
+ },
+ "3bfd62743dab66288fe0b993d893a41d2dc3fbba" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x3539fe0192009fe1a9d35901b0ba951a59348a98"
+ }
+ },
+ "3c4a4ef39f21e45a8f56e5c8bf8bacfaba78a777" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x8f55e75b453fbb3071e4454119a33477c6028789"
+ }
+ },
+ "3c7c94fe8e900964a9885a19e09a4ab80213c5c3" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x5bf1ac936d2312daf08e481d85e99151cdfdb9e2"
+ }
+ },
+ "3d082c9477c05d23447d1682257a9d0ac1f948be" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x07318879928543f66b36e58900a870dfa83313"
+ }
+ },
+ "3d64e9c7cee7c3d41cfbeed851fff8642bd0200b" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x7c41aaac568600537f36df0e35cb625dfbed75a8"
+ }
+ },
+ "3d7b61ce014d1cb84465f1f908a6a940fd991b39" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x9e8fe9f31e954787e0f9d01b4a7a0c8d3d320615"
+ }
+ },
+ "3da1b91d461c3220510e60c0c5b87be635068740" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xf85aaa082ae886506141245ea3b43ee74babca66"
+ }
+ },
+ "3dd6e0baadd05402f490e3030ef1970d884a1caf" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x317f31be5e04361b11b97ff2d6fc682030d8cd8e"
+ }
+ },
+ "3debce965330c2da68edb1cdd3ac380d5ce67b10" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xfbdc8132551b0ed5c50b6c0f279097592b5c87f0"
+ }
+ },
+ "3dff39a90e67e86536dcc8b4dbfac04da831e0b5" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xc291bf92ff9bdc0e60f049e6a5b143b940658858"
+ }
+ },
+ "3e0506e272fb9d9369627282cd76a40e4046ee84" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xaf3cf705624b239ce07280597a55dc8ca69dd087"
+ }
+ },
+ "3e1b0d3f5819f63c9621ba4d4af623a7b89b99ae" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x401f65fb53496c7746dc6477f6f9d67246965d52"
+ }
+ },
+ "3e3069deb6f503bb8bf155eb2f89801140831f5b" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x94bcc8632137dd2d666003e33d1e7c2fdd6e95e5"
+ }
+ },
+ "3e85699a24243e147ec809e30761d92c0d21392a" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xe3443d812bb8204255a1d249b82aa19508dff5ca"
+ }
+ },
+ "3edca986feba79717853d9b91595ae61d953736e" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x30f51302b4630ea1b8bdcac380bd97d78c8f60d4"
+ }
+ },
+ "3ef5e42a0012b430169dae579f8dac0f6ef5dc38" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x7e44d26c7ef8dc51a45248573f6a8e5a9f91a0af"
+ }
+ },
+ "3f5bf6c71c4fae1a91c1cca72b539dd83762a716" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xb4481bed4acdd11d8f22f535016a762cc87845c3"
+ }
+ },
+ "3f8bd9d9410af417dcc6969b64096380e1a6d0b3" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xc2afed79b83fc6b8d98802f52b1fea6648571ee8"
+ }
+ },
+ "3fabe5e3c3a59fd322cb638dc5295d1e94cbcea3" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xb7b7c5f65fc11a6bee686b9363884811be247c44"
+ }
+ },
+ "3fde19fb418799c0e1744b322314c17a863a0c9c" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xf4e76b020a22e8c1929ba2163e413385fc0cf885"
+ }
+ },
+ "401f65fb53496c7746dc6477f6f9d67246965d51" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x5e0ea0c533298d20ebcd19482a8b1e1854dda426"
+ }
+ },
+ "40652c9cf91678111a21c62d7206ffbca3d47c9b" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xecb643ddbca1cfa6dd22964c20ef57ab47c0fdaa"
+ }
+ },
+ "40e0cce7d94ab21453c5576f30a598cf9fa80e1a" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x93840036a3c19b1e91ba0ea10f95a5041ef61a40"
+ }
+ },
+ "411456908355aa037314aa920e8afef3632503fa" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x0473710fb4277459429e0c4a862ad3e4b45692e5"
+ }
+ },
+ "41493b8488a0ae34cade12733e8df93a87f3ec7f" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xf904cb6a599db50cc635bb70f3c23f056e39914f"
+ }
+ },
+ "41eeae22551bd18167a31036b363bdcec89a7d9c" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x7e15566ad3e90f3c4c12c4d7fdb17e12c24da66c"
+ }
+ },
+ "42bbb8e2c7347e29f3a679e4cc9d1ca75319fbd3" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xbf36bc1d23eebe66f84a0f119552dc7b46fe2403"
+ }
+ },
+ "42ea619ae1a90979837ad2137458d991ea0613be" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x570dce0f67e367a085e51a47d6c93891a82d452c"
+ }
+ },
+ "42f56890357c304762f1c57171cef30f044ea09b" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x49fc4b5136601d856188898008375b9c1bf5897f"
+ }
+ },
+ "42f8c6079f5658fc8dc5629b63684f278acb7648" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x9c89251856283a8e3aed6d801ca965fdc1da4aa8"
+ }
+ },
+ "43b0edac3c2c58f16fa2380089d841c420a14236" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x331a1cbbb58594c3636c0e54de517c4a6cedc27c"
+ }
+ },
+ "43ec9b975f37266d0ff7f044581db559fb9376c4" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x931543d59701f1a123f3850e4c6e4b0ea097ae5b"
+ }
+ },
+ "444e8af4b323407d02a7f96c209b712a65c6aba9" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xfe686acb3b7cc09ec6379af828b4b3b638898131"
+ }
+ },
+ "44b329f4eb8ebaa00d731472964de821f8e53a26" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x2ea29d9016f2b1141475e4c3c62e031c0a908a08"
+ }
+ },
+ "44d13c51fb706efb7394346b00debea9ea46e9f3" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xb008af759b5359810c78d181f0743ed85c286117"
+ }
+ },
+ "44ed3a04032bf3585faf1dfedb9806eeb8345809" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xa301df371257a12c7bc93194ec045d211a2d435a"
+ }
+ },
+ "44f344790e299b22484749266ea59bbcd58e4b0e" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xfdc6c80a86ea555b5de26c3db49a779eea6beb0d"
+ }
+ },
+ "4582048e819b7d55b3c6f47e46ef8dd8fdd12038" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x552e158ca0fbd97f7b3c6208ad3f956a67c8df79"
+ }
+ },
+ "45eb1861d0701efb338468964c2495db8e7e3411" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xb376b876f7137844ef5e2db1e307713885ee5d34"
+ }
+ },
+ "462cf0e5071404ef569338a6f0a5b113d64a11a2" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x4dbe6269722a6063d594dfb65eba1f2a10488964"
+ }
+ },
+ "46aa4a5c336dbecbabd4cdfef3b9fa65a8a12a15" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xf1ba5e0a4a27d8dafcf87f049b178fe83574ac07"
+ }
+ },
+ "479544e8b67a7e82120d3c5d7869b4c55f4a0de3" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x1555dfd05f003c056dc219415443be1a502fdee2"
+ }
+ },
+ "483940025f2d36cb32e93ed80caa41f15487ee7f" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xfafa31e9b477adf7a26b651aa9913f8664e536a5"
+ }
+ },
+ "48e958f074c27f1d190e69ef8c01f86931b278f9" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xa381c1eb58a73d7e7c8b857fcf3a1b50c6116e1c"
+ }
+ },
+ "49a01a2696857efac9ba53c2705ea4ffdeb30419" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x784c21d8eb231135ac99a64dd2ee334b045043ae"
+ }
+ },
+ "49fc4b5136601d856188898008375b9c1bf5897e" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x2c748f96ae0e6e9b01395e8a73dfc351c46658bf"
+ }
+ },
+ "4a0ec2620d55cefe3e80960f83ebc81219ebabcb" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x5b1718e3af89692315a673b5c134361408069b01"
+ }
+ },
+ "4a1edf2110e4ff29c69b835bdd375ac88525dde6" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x1b6ec3b2772285abeba8f53839fd96de995c4bd2"
+ }
+ },
+ "4a466c64765157e1a9dee46e1a26d95ac2664c4f" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xf783f583fc06d2c88e9e0d263a6ab66f8b8a0515"
+ }
+ },
+ "4a635e63aadc395c1801c73640f256250d209b25" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xf07ee5b0729c565f7b57995a108f94e4fcb81559"
+ }
+ },
+ "4aebaa9fbdb040e8037e78fc37785f33dc3cafec" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xef36b064bb706bc0540e4ed2b341ae8a0b7756b8"
+ }
+ },
+ "4af174d239e86ee19d40026eae04486804602061" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x45eb1861d0701efb338468964c2495db8e7e3412"
+ }
+ },
+ "4b2c0c38418eb142d686d124ac5fcb363b061fd7" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xa0ebd1b4fc0821dde34f102f6030fc9c40b29ab1"
+ }
+ },
+ "4b414d48f3871bc957751d5895c96f090b509bbb" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xece9d0b9393f64338ec6ca5b0efbcec2175f19ed"
+ }
+ },
+ "4b6dcb9105adc3ccc34c6c180e9e2212c1789975" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xb9261902783bf36bab49f18323a9c8e4ad8651a0"
+ }
+ },
+ "4b8558347f669cd9b50f70cb501cdbf05f93b575" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x697f8deffc4b33738f1dc02e792b5cb4a37ead07"
+ }
+ },
+ "4bb5fc5d686cfb132c177aee8ef426e5de98cc6b" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x4b6dcb9105adc3ccc34c6c180e9e2212c1789976"
+ }
+ },
+ "4bdd7615ee906a0c88233acc5816b4fdb4656dfa" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xb4429d6274f10ef0b7ba30837c5de603ed4c16f0"
+ }
+ },
+ "4c0cfb86a402c70e6b110a1237d10c7fc7fe9cd5" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x1588c83de3fa7b22bf6aa67a4e91f303b490cbb9"
+ }
+ },
+ "4cada4d5773385e68f4ff1efd1a23d75dbf1e61c" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x43ec9b975f37266d0ff7f044581db559fb9376c5"
+ }
+ },
+ "4cd33b31663c159fbd73cbb32f616eb46f7b18a2" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xea216bc75a65a838ea3d63f7c05588c2840ec1ac"
+ }
+ },
+ "4d47d935a3a4a4618c67f337a0075d26d9c1f852" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xadecbe660a4943fb6feada38775e51259ea15af2"
+ }
+ },
+ "4d4ad735b52df9e88fbebebac2de1ede991f9994" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x6e2da6b24262f419933bd63b03d470ba019350e4"
+ }
+ },
+ "4d7a1e5009218cf5176a313f6922c3ab01d4970d" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x3917f5ac4614ab7d126adf2f5b1d578f2b91c371"
+ }
+ },
+ "4d92228ffbe5ea89389a34a7086e4420d61eb70b" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x985e84916da5ee358e1c119c9b12ff133da52d2a"
+ }
+ },
+ "4dbe6269722a6063d594dfb65eba1f2a10488963" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x36a9d95fe0c701c65370560445c6a80b4e13c8da"
+ }
+ },
+ "4e36ffe7590f8dd7fa9c4c03cba3120674814abc" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xc2a603dfbb0734c098e5b6b7c8a9b64bab11054f"
+ }
+ },
+ "4e4ad0ada6b3beffa2436bef1f6a8054f4476be8" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xdd0eda6e9a3dccc3d430e5dd333c83b759cc7884"
+ }
+ },
+ "4e5cd86dc5f716ebbdf6ef572a369c227986bde4" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xa31b0038c42665206876c410caf02e67405dd000"
+ }
+ },
+ "4e76fc5e619a4200846eecdd5545b39499debb10" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x68ec6ebf20b30a31b09c7a35d847da342e24a3c5"
+ }
+ },
+ "4e86f346747b828937501ebfda05b2b8fa16f87a" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x7d8dde5a13af888557ddd5b931dda20ae59e9e24"
+ }
+ },
+ "4ebc77b7203cce293550d92b2b5587621cf53219" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x24248d1242acc87dc331e87f3142951a977a3d2d"
+ }
+ },
+ "4ec27065c52d294799b93700dcee6e32778f1b18" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x7bfac062ec8fd11810639cc02f02aa8c61c6cfb9"
+ }
+ },
+ "4ec674e8eb6b890cbb7df926def8fbbb2a6bba70" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xc8c3cf855531e1d06c07245e76c5298b4fc90d8b"
+ }
+ },
+ "4f14a61b9f2f99e50b719f1345e76339f7618202" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xa5552ed8dae24eaed9346af3186f634d38ee9ab0"
+ }
+ },
+ "4f36659fa632310b6ec438dea4085b522a2dd077" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xaa6cffe5185732689c18f37a7f86170cb7304c2b"
+ }
+ },
+ "4f5af8eccb582ad30e2702d07577479599461c54" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xaac939ac7c11bbbfb7f4520d14442a2460a51e88"
+ }
+ },
+ "4f5c55986b93d742d196235aa7329df2c8ae5562" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x157f8c66dd3cae32485b2d68a51c1dd7923bf91f"
+ }
+ },
+ "4f86da4fecade6017d7f15e30d8320446306870a" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x49a01a2696857efac9ba53c2705ea4ffdeb3041a"
+ }
+ },
+ "4fc34bdd654289653ffc904f86ab2f17bad8431d" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x029f9045d1904fe6076c4dbe77bd33290f390715"
+ }
+ },
+ "4fe8f4ad85487cfe365ca212848f7c970c21e135" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xa02b80b54ccc306e042c286172ba903dd53fa4c4"
+ }
+ },
+ "5038bd4d6b5b31100c52c85ae3294d525596836c" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xa724835568fb5e3986c1e87331a18b6628b73e26"
+ }
+ },
+ "504ba70fca5091ea426c964ac631082e4ad51672" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x6a22049b6339e13438521842386a7118d6a1a15c"
+ }
+ },
+ "50aada85d21c462d9c2803fd3c22beacc61f496b" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x17c7a85a071c3dee708baeaf56c208752c362e57"
+ }
+ },
+ "50dc3dab5836e25872ec87bb2bb30ab57a35fb0c" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x6afeffe32a56293f23d655a1d1b2bf31d616c2eb"
+ }
+ },
+ "511b33319d0f7df487e07c4f5d149b27cecace46" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x0bec2514a2a40586ec75e27442352d1dd2bce538"
+ }
+ },
+ "5154569b5138f7c1b77d4434860a92ff5707e047" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x32de9810bbf442f9209f994556bc9a7f7e6da501"
+ }
+ },
+ "51a578dc2949f3881535733a5b1a7b5bd308215f" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x311f9efa9544b1c8a8277c52e0f1ca47daec8c01"
+ }
+ },
+ "51cc4a0bffdbdd8313ed94ebfd5524e8200f4876" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x16f5ee37c60dfd70f8281ac16cda47d665ef878a"
+ }
+ },
+ "51fd18c9ab9bbb67c27373e8ad754e253e09dbdd" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xd9860a22b84f982363ab9684d767a347a5c4fb75"
+ }
+ },
+ "5216a59dcffc6105f9b58a0b397baad604c0dfb6" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x0f8f271215cf51a0646c8a60ed626515b3ddb73a"
+ }
+ },
+ "52b774b5fab1f557024bd4a7cbec4cd014b81557" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x4a0ec2620d55cefe3e80960f83ebc81219ebabcc"
+ }
+ },
+ "52b90967c04ab8adba7c6908b04eabf2c00bcf82" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x77f14e248490de6b7afb327c0f013c54ae31d2a7"
+ }
+ },
+ "52f1ef4cc038ef92d0c1f9e7afd3dd3cd0c25b38" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x9cbb5a7f2afe219ffb9b787065cbd94ad44ebd25"
+ }
+ },
+ "52ff6062b4e65231065d5579f870b7f1472a5853" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x1480213270423eae9d6b0a603541e989998453d2"
+ }
+ },
+ "533069310b9741214f30aeec58be9d19f40161fe" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x187749fd89567f9519f0d50b4a19ad2600440e3b"
+ }
+ },
+ "533a4a1adbae2d561beb729c53e46251ab3a407c" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x504ba70fca5091ea426c964ac631082e4ad51673"
+ }
+ },
+ "534d2d9ab80a99d598de600ac2843f751e8bef3a" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xe49d92946422e69977a94d1b4b769f97efcfb8ec"
+ }
+ },
+ "54819bf1efa86437d2f38b4211bdd5229247d9b5" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x9a0fa2b2dd4993b5ac3370b4047f5e4472121675"
+ }
+ },
+ "54a1706bea8f61e354b5296afa5a9f488f88ba0d" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xeb4e97f22f12995949c371f2df690f68f71070ec"
+ }
+ },
+ "54d1de66a65ecf30d79037a8c8af99c633113516" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xa686b20553a38e866228ce003657a71200957c3c"
+ }
+ },
+ "55010017736ad7e8e14327cf0230ba4c6bab0450" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x9e30a8e67c1dc0ddcbcb8c0d957101801fd250cd"
+ }
+ },
+ "5503d35e96e76e02db22c51fd7fd3d5c0667c885" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x15e75e648b604b0b8028f7955647eac6bc850089"
+ }
+ },
+ "552e158ca0fbd97f7b3c6208ad3f956a67c8df78" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x7f3d23738538a34184e3cf16506685cf0884bac6"
+ }
+ },
+ "5555d9bb89b76deec0c8c0cf37dcbf4b9e3449d1" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x87b27e4b436adde9bf724b4889980331dd038d4a"
+ }
+ },
+ "558fb0163d7794abf1b241aa4728390028291ce7" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x6e0a20c94065e338c7715046a320ff4495b4fa85"
+ }
+ },
+ "559bf1337f14e89aee38a9859ec9bf8035e8f6c1" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x4aebaa9fbdb040e8037e78fc37785f33dc3cafed"
+ }
+ },
+ "560d5f4c8933c5ca0c2c1b4f3e8b22958c9d7cda" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x6bd29846f9fdbf3efcd3c5f3beff837ecbe9f4ce"
+ }
+ },
+ "569e42b9cd8d79ee5c5ea9c68ba948b7b4d8d84e" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xc8b331eb5ad444567964f34dc24757bdd3425944"
+ }
+ },
+ "56cb9d29e9be519d3fc1cd21fcae7750aaa8b845" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xe913f5b697154f99bfc159a132c6c253b457ef19"
+ }
+ },
+ "570dce0f67e367a085e51a47d6c93891a82d452b" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x3da1b91d461c3220510e60c0c5b87be635068741"
+ }
+ },
+ "57cb48688d626a12fd4caee130b11e1b06ebaacb" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xba158ff71047c0322b1474461f94c0246d0dfb2f"
+ }
+ },
+ "58cbb2379b1fdac0a036bf75bb598e7d4fa232bb" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x1889f5317912e414fda653c710d2c17b7d5651e3"
+ }
+ },
+ "59ad59b53c0d9bbdf0ee0912732baa43eacaae99" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xd99befc655ecd5df508569aaadd729af7371687f"
+ }
+ },
+ "5a18f1d5e443321d54d1dafb3e3b5b6f2899378d" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x5e89d5dd43fa9fa54381f234d1f7251387a0692d"
+ }
+ },
+ "5a5e4ae2fd570b079f26dd7f8b9c90456d4b11c8" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x1236efbead5ada892f61e7e4e59faa143e3bc01b"
+ }
+ },
+ "5affb7ff218092cf60bc1ba4b32ea65a32cd6844" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x0891a47ead61f684dc876e12d5261ab614d0fa0a"
+ }
+ },
+ "5b1718e3af89692315a673b5c134361408069b00" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x28313061667479bb25119ca3090cd25c4a99a210"
+ }
+ },
+ "5b2ed45c5376c8359479e1b48f8c07437ec78336" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xe5fa8de537f7665e2aed751b8ca7c6b5bf0cdca1"
+ }
+ },
+ "5b4615bc4b0f10948e46f967ca6e64cf91a7753f" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xd10afb219e80a211c9072b18de0ff2317f67e574"
+ }
+ },
+ "5b71d8cc27346cf6d64e101aab9c88dfd58d26fc" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xd743161f0f7beed30155e171b4d577d5ce2a70d4"
+ }
+ },
+ "5bcf5f7ba278df5a31f48a5706e69816727a6e9b" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x6f562b4994dff65756e316febb8d5a5b99e11421"
+ }
+ },
+ "5bd96b317d4163401c9b1a2271c03b9439e73e6e" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x22affea985c1a1ab7007a55e77e80c54111708bf"
+ }
+ },
+ "5bf1ac936d2312daf08e481d85e99151cdfdb9e1" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xfed73d1755549bd523a775e81cf80a1a507eec51"
+ }
+ },
+ "5c0ddde0773ca1b8f9b07ecdad9f47f2705640e1" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x44f344790e299b22484749266ea59bbcd58e4b0f"
+ }
+ },
+ "5c45b1eefac6061c7713919b34f5dcae9d5cfc7b" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x42f8c6079f5658fc8dc5629b63684f278acb7649"
+ }
+ },
+ "5c70cf636b26ffc099fba8ddd5093e95ca8e7782" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x52b774b5fab1f557024bd4a7cbec4cd014b81558"
+ }
+ },
+ "5cf45d08c0b55dd9c34cc4cb718c917333f2e9f9" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x2600b9122847ee06e201ff6a734fdcfa74b2be74"
+ }
+ },
+ "5d07bd78606705bb5c62fd390123b4e45f7d74d8" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xb6367a493bbaed7334456b3646e4541c9e96012f"
+ }
+ },
+ "5d11f35386d10cfa7121b02056d97dd932659943" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x6b0105812868d533882ea4f08bb628e5e9d811dc"
+ }
+ },
+ "5d3292b79851f68d3907a550dc1a0b569d603f66" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xe14b8b08ed9b569d2945b078fe94225924c5987f"
+ }
+ },
+ "5d57e28e16bcf33b37672eeb891b29c481e89120" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x012255fe8647bfe207603a62536ac6ae7a230caa"
+ }
+ },
+ "5de8956c0c99e2dc6715201b3a9e1d5fd53b2dd4" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x9917620c3df2e3cae0f0e690b4da82221bc26eff"
+ }
+ },
+ "5e0ea0c533298d20ebcd19482a8b1e1854dda425" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x59ad59b53c0d9bbdf0ee0912732baa43eacaae9a"
+ }
+ },
+ "5e5a0b9c4c36067c8730abecdb29ba97aed877a7" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x483940025f2d36cb32e93ed80caa41f15487ee80"
+ }
+ },
+ "5e74c3c0f3bc39154407e9a3c55cde944d1ca04a" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x97b61770815f0589776243ec8ffa365b86548b29"
+ }
+ },
+ "5e76969932c5d314142b23c555af4625fa6b9343" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x1ac3dd6a958d88e45c2c55d938dba74fa892084f"
+ }
+ },
+ "5e89d5dd43fa9fa54381f234d1f7251387a0692c" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x8135c9c23bfa97243ea79214772816339552f836"
+ }
+ },
+ "5f1703b93938752face6e4657a90825b77f455da" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x03f3095f9e46a8ac62005c42aaccbc0fcdc3aa33"
+ }
+ },
+ "5f3f9c388dc0c9c01a5fd540bf9eb714a47fc5c1" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x4a1edf2110e4ff29c69b835bdd375ac88525dde7"
+ }
+ },
+ "5ff4d4daf0a832422c4675a77720abbfb5afbba8" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x1c2749b3a6c574b21622761bef7274261597ef2f"
+ }
+ },
+ "5ff4ef866c3ad4102444d020c1d21c3d35a119eb" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x98cf6cec29c58634b6022fd1e8f54f912921eef4"
+ }
+ },
+ "60a2db26238d52510209c569dca17c1f41c9a544" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x7d4e21638e756b9953576f460037cd702d102120"
+ }
+ },
+ "61144e43a08b3852bcd531d13f0485743bd835a3" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xe0e5744863b26418baf12f94f0bdad2ef2546a93"
+ }
+ },
+ "6123d3be4335107712685be2d575958b17501067" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x9cfe89d89bfe28ba95777b6a90ac7ed86b0e2030"
+ }
+ },
+ "61306db8b4ac256266cb379b5f686e25cc117590" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xbb7a0556525b43c750e380a0ac1ca3bb719e601d"
+ }
+ },
+ "614037f9a7be1ab2131d485845f297f2d62d569a" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x55010017736ad7e8e14327cf0230ba4c6bab0451"
+ }
+ },
+ "615a957b818ce70fec123daafe552c482c59c5a8" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xe2982af9c977c39cb4633346b916a3897ffeb6fa"
+ }
+ },
+ "6168c5e3b7d7c870e3e7eb53b152fcb920c8e1eb" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x22230d8d10e81e01450aa68bdfbee3c20d969dea"
+ }
+ },
+ "62123ac69c46a06f7e3644b0dfcfcded535b8727" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x76ca5805dcccf57966da8489d1720fb8c5dc4b82"
+ }
+ },
+ "621ada91fe8f65407ac963de8e75d88d4c388cd3" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x9f42a00ab7bea15357b54e16867383fdc02e7061"
+ }
+ },
+ "624a9bd6345be1a95c7fb509ca4bb77d05138adb" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xf1970ea5af8456fee42cc087e79bd5c6a6efaa88"
+ }
+ },
+ "629fdbc407b70b57eaa1523ab12c5178e81a5d52" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x120e38f3899a4e2f9f848a82c7afee288d14e7a5"
+ }
+ },
+ "62c01474f089b07dae603491675dc5b5748f7049" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x2cf5732f017b0cf1b1f13a1478e10239716bf6b6"
+ }
+ },
+ "62cde2103198f54d31cdb9e9495fd7e1243c2c27" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x7f16eb03b09934c61a424e6a1c4649f193d157fc"
+ }
+ },
+ "62e75c838a732abab87e1846f361721f03e7d973" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xc57abf0b9724f82736bee2a05a9238a45de5512b"
+ }
+ },
+ "636b02091904e5b452d19455f484306b8fe62dd6" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x4f5c55986b93d742d196235aa7329df2c8ae5563"
+ }
+ },
+ "64134c8f0ed52a13bd0a00ff9fc6db6e0832e39e" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x4e86f346747b828937501ebfda05b2b8fa16f87b"
+ }
+ },
+ "6454029b19b69bcda3ba156684d58283636dea40" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x52f1ef4cc038ef92d0c1f9e7afd3dd3cd0c25b39"
+ }
+ },
+ "65e3776618742b90f1d9844c907b276854869abc" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x9d9fcb724db6738e2ed07f6815a0e5d45b3042bc"
+ }
+ },
+ "66e68e1d0f65b4379c2864f5228d98de265c5e30" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x1756aed6799c904988cc7a1dfabe77fcca058656"
+ }
+ },
+ "674840a9e918ae6b7560a4ddfb60b96a32636ba4" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x954933598dcf8e04d6f4ae5b311673409e85c80a"
+ }
+ },
+ "6792d18ead88bff9193e50fa12c02779f2a0f4bd" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xaa839cff1f78242d01a33305e1d9973cd7c66d4e"
+ }
+ },
+ "67a66435543da4130940ccc47e3d9d164db65fd1" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x51a578dc2949f3881535733a5b1a7b5bd3082160"
+ }
+ },
+ "67df3bc5f86456f2bc57f75c99a0389bca7e5850" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xbea830535682332041ad318232044f5e914af084"
+ }
+ },
+ "689a40b4f540d145f6dc4ba4079e17f84b650f9c" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xcce1e6f23dccba1aa1830b1b7714fe985f9f2033"
+ }
+ },
+ "68ec6ebf20b30a31b09c7a35d847da342e24a3c4" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x32f9418411245a8bc6982ff71436ed2de87e3d97"
+ }
+ },
+ "692a1a4da0b418dd701f5133e2b3c5686015a3df" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x3bfd62743dab66288fe0b993d893a41d2dc3fbbb"
+ }
+ },
+ "697f8deffc4b33738f1dc02e792b5cb4a37ead06" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x3229e332af8eaf358f44aad3a902a6c47f96983f"
+ }
+ },
+ "69afd0683057a214d3bb3cc7d438961cf8c8b200" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x558fb0163d7794abf1b241aa4728390028291ce8"
+ }
+ },
+ "69fd2b9233b83e54861436496ad6b9fb28afaf40" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x2db5e35091789102bd0019b4ee49bcae42524429"
+ }
+ },
+ "6a22049b6339e13438521842386a7118d6a1a15b" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x7e9f915d9417cd7bc8220546680fa5eeb73a2193"
+ }
+ },
+ "6a31cc57646f3d9ae3b63e1f604dde04d1ba52b7" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x9985ca2474151f5ab79a388ec3b0d6fbf42da1fb"
+ }
+ },
+ "6ac56f1ceee102b85819d789e6b29308eabc373c" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x24cea63a6f0ede9a0fa91907e841ba4174e1cd0d"
+ }
+ },
+ "6ad37e86c8d4b961b0302ebf0a540ae83f3679ec" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x018b456893203c6e3a5661e7328b5a858904cdc2"
+ }
+ },
+ "6af2602221d2477af828ddb2c1dec8f70a24abe0" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xee6f3914a1e5d955fd62a29562ee0ab776235ff6"
+ }
+ },
+ "6afeffe32a56293f23d655a1d1b2bf31d616c2ea" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xb6bcc464b7b7f0359e87e9a9517d10823a2e0c94"
+ }
+ },
+ "6b0105812868d533882ea4f08bb628e5e9d811db" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x21368af8397276e6e4b284fe36f525dd323bd3db"
+ }
+ },
+ "6b5ced188780878d8a72b3e6f02618db2bb97584" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x8de072b1fc7f48cb2a42e7ee579a462e50e4cd8d"
+ }
+ },
+ "6b5fe85d1513c1a29fa825a343db7a80558e6de5" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xa318ee3c41da839fa1002dba1f9a140274ce59e9"
+ }
+ },
+ "6b6945d5fd5172355825871803b93e57c5040653" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x60a2db26238d52510209c569dca17c1f41c9a545"
+ }
+ },
+ "6bd29846f9fdbf3efcd3c5f3beff837ecbe9f4cd" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x97f0981b0a6cb647dd7b11b52c92bc1a3206d2f6"
+ }
+ },
+ "6bda06aef03a04b8eb3e4c7d1ef001fc806f5f6f" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xdce512ecde5a4c27da464f846e71c8272da4ad81"
+ }
+ },
+ "6bed38b822d8823a2cb71883522f932cdde95b0a" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x39d9b351db53d59af4907116d594ebba910474f3"
+ }
+ },
+ "6c14bbac448312636b86fe713185cf7d8ea6f1be" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x04a104904b31f401966da211ef40874d6e97ae47"
+ }
+ },
+ "6c3bed6efc677ccb136c0d886a6f3fdb375798c1" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x18500d6a8e3e20ace9aeb507c213b6261b23f5d4"
+ }
+ },
+ "6cc6da179301a7ec4290cc0a5860a42ad188399f" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x5503d35e96e76e02db22c51fd7fd3d5c0667c886"
+ }
+ },
+ "6cdf4bc6759fe45be60aae1cb72d3fc2bb7f2d23" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xba70f98f64f041290dd6794e5cbc9e8144c8c915"
+ }
+ },
+ "6d1f3f15f36d76d52d65b1b78a4ac85e91f33d25" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x8e4354916a56d367dd99d3eb120e27a1d8ec6e67"
+ }
+ },
+ "6d27b8cb6b9af8a56fca98f13033d15f10f66da4" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x18e0cdfc5a23465cfb3566091849c044d2210b56"
+ }
+ },
+ "6d33e2eaa419844043bc41073bf3a2bc0a6c1b1e" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x37609ce3799a1b75ea6090da3d014d59e5e7851d"
+ }
+ },
+ "6d9834013a85a25df2e3dead1986d753457d7b67" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x5a5e4ae2fd570b079f26dd7f8b9c90456d4b11c9"
+ }
+ },
+ "6e0a20c94065e338c7715046a320ff4495b4fa84" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x098de34931d0d159e2631aee55524c217624d096"
+ }
+ },
+ "6e24d18a80aeccbace499b6d26b655633c0bee99" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x674840a9e918ae6b7560a4ddfb60b96a32636ba5"
+ }
+ },
+ "6e2da6b24262f419933bd63b03d470ba019350e3" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xb9f7e8e7ea5b1a7f184a152373526ac7acf4477d"
+ }
+ },
+ "6e53f8efbbec77187f733cb053a53a28e14ade81" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xeadf36b1baf942879b0b5c45469fa05add1d61b4"
+ }
+ },
+ "6f257471f06ece199232aaaa082d2b1ae7ddb483" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x18731575d0a6339f6317c2a1b628d8a4c145328f"
+ }
+ },
+ "6f3dda610ec5a3722ff4ab49d1f215dd26bd8ad6" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x5038bd4d6b5b31100c52c85ae3294d525596836d"
+ }
+ },
+ "6f562b4994dff65756e316febb8d5a5b99e11420" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x41493b8488a0ae34cade12733e8df93a87f3ec80"
+ }
+ },
+ "6fc7016fa33af287b3b9cacd092c26bd9a054569" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xfa849bc1ece08222f4bf249ca06a6468b3de5b1b"
+ }
+ },
+ "6ff9622ab3c22e4357e90274d00291c527991d21" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x02fa5c7476f2d423f27ac8afa1e357db95f920fe"
+ }
+ },
+ "702433f6bfbd76274ec1bb641c4a0428298487f1" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xb2da69bc3361eaf80dce81a17d610217ebbc7a18"
+ }
+ },
+ "711b5163728968ec016a924238f743fa04f2d11f" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x9d0e24467eaf9b797b9e3f6a6084958889592ba9"
+ }
+ },
+ "714213a080e1d2988acadbfc5e441df5173f81ba" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xe1f79aa1d6477ffd08d4e5ce185637434147e4f9"
+ }
+ },
+ "7161527e54370ad8fe44bc83d692b10b9f9b877e" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x41eeae22551bd18167a31036b363bdcec89a7d9d"
+ }
+ },
+ "71a2fa577619a37c2e2336bb6c20fc1af193860f" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x28ce21f7f28c8a546bca1697ada45cd73473465e"
+ }
+ },
+ "7213c423e1db8af095bd3cefb15e43c6067635ee" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xa89361425f7403ec9e757b5d1a31993a79189a35"
+ }
+ },
+ "723bce7438e7c70d113e954e9aad5dfb4551dbff" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x15c4f7ebfc781a41226d61bdc0fcdc98fdd8bf46"
+ }
+ },
+ "72969d083705c924922b857922930f2087426ca0" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x2cd26944d7baa6d92eee478960d5778375862e86"
+ }
+ },
+ "729af7294be595a0efd7d891c9e51f89c07950c7" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x0a517d755cebbf66312b30fff713666a9cb917e1"
+ }
+ },
+ "7343c0aaebc045465ffebca00e201c1f554c2eea" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x379ef6dde2bc54ced45146d4907639ee7cf1c8ec"
+ }
+ },
+ "73c85788bca3bc1fb2e9b3056c595a4a7b3d2e46" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xe6df36db61ae2c46d2cda2f6c8d1856ac181e6cd"
+ }
+ },
+ "73f9912db6e86599f256f090dffd915a845a9631" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x67a66435543da4130940ccc47e3d9d164db65fd2"
+ }
+ },
+ "751c9d6e9b6d91897ab1754b15b72712953de9be" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xf49ecf0e4378b1957686d8d0b227f83e48e5523d"
+ }
+ },
+ "7528088649b574b14d14f4b5ba45285eb8a78ffc" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x1ea264b74c8f6e50586097e2e7c9a39419fd88df"
+ }
+ },
+ "752e929cfb45fd739923f562b146db315b8cc4ca" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x5f3f9c388dc0c9c01a5fd540bf9eb714a47fc5c2"
+ }
+ },
+ "754144c0c9b9fe7f9a8e40df23f3c315a7e244bc" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x9ce1b776e1a050af28b1034980a628b7728b0832"
+ }
+ },
+ "7642513288c9da66960a6f3df0c156a8e1dcb119" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x621ada91fe8f65407ac963de8e75d88d4c388cd4"
+ }
+ },
+ "769277251b9d3f0906a338f156238b159bc126dd" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xed1a5e97e3415b484e6bc8b84bd170dbdd879cb4"
+ }
+ },
+ "76ca5805dcccf57966da8489d1720fb8c5dc4b81" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x0e639c40606e9329259d2f945f59dbcc6c5c5cff"
+ }
+ },
+ "76ea1b9309253b5c03bbd6e9fca6591b51fb3785" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xc052f8b19df2c41d807bde1c041a8ba2e87f15d6"
+ }
+ },
+ "7702eec59b0ee531bef08c14d0e6c89e7e43ebac" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xb14b3e0660d147b2603ed92fec4ff337e3c259e0"
+ }
+ },
+ "7797a5c4bb655b5ea51bc966875abb3b19c0d105" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x614037f9a7be1ab2131d485845f297f2d62d569b"
+ }
+ },
+ "77d724d278fa787544189c4774f03849be2868ef" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x29799a64a736832cda536d687dd443ef3bc31e58"
+ }
+ },
+ "77f14e248490de6b7afb327c0f013c54ae31d2a6" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x3820c20f3f8ee1b164dab460b05a979640a4136a"
+ }
+ },
+ "77f263b8c785ec73f9f77dd11ab64fb0089cb164" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x7be1a5856ef5951cf1991b57c00f73939c7030f9"
+ }
+ },
+ "7845e6c6f5d014cabfeffe6d4d9d18c547d00fa7" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x44b329f4eb8ebaa00d731472964de821f8e53a27"
+ }
+ },
+ "784c21d8eb231135ac99a64dd2ee334b045043ad" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xbecf51bad165c4b8544ecc57c7859ee946e610e0"
+ }
+ },
+ "786102f7205ad86bb77b14a1b80d8b26cbf3562b" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x04308fa2e7af944dd7008a7edbe5221a52e2bc88"
+ }
+ },
+ "791812110230af4583a4a6dff7eb425b0b0dfab4" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xdb58d0b35d26edeb0efcb49f7eb627cf49bb3a48"
+ }
+ },
+ "79225179187b35144fe9e8505cce2bcff3986ff9" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x3edca986feba79717853d9b91595ae61d953736f"
+ }
+ },
+ "795d6e09eedae3febc172169c017fb67aa62efbc" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x8faf239455a012d6ef377a83448c8185466f8512"
+ }
+ },
+ "799b6226b099fc75d1fc2cf6f833bdfc1fe63e48" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x6792d18ead88bff9193e50fa12c02779f2a0f4be"
+ }
+ },
+ "799dcaea1d20bf1428807757a84d6792798b74cf" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x1fce5879444d729719c03b5af6e074b87a49d934"
+ }
+ },
+ "79cf9a7b86c0a7adb03ecb8967d70413f21b925e" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x5e74c3c0f3bc39154407e9a3c55cde944d1ca04b"
+ }
+ },
+ "79f2d463ce2404b3e77db5dea5cc19d76ac223dc" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xe75900e645ce8d1abbb97d408989b159b2a50a1d"
+ }
+ },
+ "7a315595e01d6e16134063232a01395187c9650e" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xfac000880bdfdbd780ffa7c4a1d5d8b4a1d87b04"
+ }
+ },
+ "7ab73fe69000d4087d0b9ceedfda0af8c4fe2d2a" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x2e83c90e7fa359705ed2138854a83a9145c27a8f"
+ }
+ },
+ "7ba53872256e6762bbfdbefb1bb80b26f94df9f1" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x0c0cd995ac9e488544723e3e8e90a5fed98a6959"
+ }
+ },
+ "7be1a5856ef5951cf1991b57c00f73939c7030f8" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xe71d6b1facc3de5c246f7d14e35a2b4a2d983c12"
+ }
+ },
+ "7bfac062ec8fd11810639cc02f02aa8c61c6cfb8" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xcb5e208c02a68f2d97601da482c419af989e0980"
+ }
+ },
+ "7c26d9c9b73a75f1a468d06bd69e08f4d316845b" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x5d11f35386d10cfa7121b02056d97dd932659944"
+ }
+ },
+ "7c41aaac568600537f36df0e35cb625dfbed75a7" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x33b82c3871bc89d9137c62af099a0c4e5911a048"
+ }
+ },
+ "7c7d893aa4fba1deebfc9a5a14b27e2ae7f66403" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xffc4569dfb86db2e584a1138a75747dffb794467"
+ }
+ },
+ "7cadcf3f4031ebc2bc85040ea16d1ad26ce1704a" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xe292ba16ee32e94ba88b4b72821bf90fe7b1b846"
+ }
+ },
+ "7d3b079a8306f7cc89f1b9b23319ec904e3ad853" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x2b5fbc2f7e76f6281861cb4282effb94d609844e"
+ }
+ },
+ "7d4e21638e756b9953576f460037cd702d10211f" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x014337758eb4abf60a8e458a97acbd8b47fa0c32"
+ }
+ },
+ "7d699e5ea61a26a7f677478cc79887e2f27ab345" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xc4be49d4dcee6efd96c35ddf346b969db9981092"
+ }
+ },
+ "7d8dde5a13af888557ddd5b931dda20ae59e9e23" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x533a4a1adbae2d561beb729c53e46251ab3a407d"
+ }
+ },
+ "7d8e57afa6550a1be621fb6c083aca311a1e229c" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x1e1505a86f6b0fb5f7a4500cca953462cde929e5"
+ }
+ },
+ "7e15566ad3e90f3c4c12c4d7fdb17e12c24da66b" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xcedbc4eaa94298536ad368e8ac9819c5e7448739"
+ }
+ },
+ "7e2a31e29b84cb193202609dbd86ebaf9a83c119" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x411456908355aa037314aa920e8afef3632503fb"
+ }
+ },
+ "7e2bd10d506af5eaada030590c8073495230f37c" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xda5828cee8e61bd0d8af71ef5da9a7a9019ade14"
+ }
+ },
+ "7e44d26c7ef8dc51a45248573f6a8e5a9f91a0ae" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xcdc1f2aa2853b37723f415aeb181583e11ae7b90"
+ }
+ },
+ "7e9f915d9417cd7bc8220546680fa5eeb73a2192" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x8507d90ee605e59469a35fdc78e844c59894e004"
+ }
+ },
+ "7ebf86bf849b6097c8af6dae10c52438538a0711" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x9fdd9d67e3e2c78c419e3ac9bccc7322041c3b1e"
+ }
+ },
+ "7ee27699bf52e4db7f72b3f2591f48e8ad7972a4" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x38479ce52243f1a8b358515a084fb41533a723fe"
+ }
+ },
+ "7f0506a35713c6a2c68152d15a4bfb1ccaec98a8" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xa3a80c15cc0e13dd1aea5949c48ad5b120a8d832"
+ }
+ },
+ "7f16eb03b09934c61a424e6a1c4649f193d157fb" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xf62f676443b29c513964f01cbb356165ace54b79"
+ }
+ },
+ "7f3d23738538a34184e3cf16506685cf0884bac5" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x2dbc14a87a2b5a8b780e460dbe0083d8260326f5"
+ }
+ },
+ "7f57dd2b577f0d5cb1fad7bbb2cf8f07ec0f0199" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xb0ea2ec7623a1faebead30c8007b260a4c62f9a0"
+ }
+ },
+ "7fe4672c6fd2a05c7a91676e5ae2e75ea197567c" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x0116be8937cb591d6db17246c91dc3deb1fd0e1f"
+ }
+ },
+ "8069a4fb09d35f100d18c98d02ec1bfd997bb893" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x8ff9fb732fc13f492704a9f47c47db4e877f6dc4"
+ }
+ },
+ "80a784f83657ad12a742b94e01c3bbaf3fb2c6bd" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xd3ba8bc2aa219ba0aacc8960b92832c3b0693bad"
+ }
+ },
+ "8135c9c23bfa97243ea79214772816339552f835" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x04929feafa156581a24d8a0bfe8154ffab39fb38"
+ }
+ },
+ "8142cb33b22222bb9e39a66b53af12c6ca0b5375" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xdc280f2887ea315f70692eb247e399b18a07bda9"
+ }
+ },
+ "814a465f554f949e6e2a6878539c705f319c627d" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xf191a9c00fe780f63cf4f68a06e895bd53981255"
+ }
+ },
+ "81b26e12027f5df776edd5539791e683dc2e57f0" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x6e53f8efbbec77187f733cb053a53a28e14ade82"
+ }
+ },
+ "81d6578dc3e3c0fb07a8d62f66c1eaf3b97dc2ae" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x857109cf04811d5273ec3af3f3d3bb56e93d1dfc"
+ }
+ },
+ "8228837a1a7d0ae41b857d852a8dd6b7c6cb3e38" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x5154569b5138f7c1b77d4434860a92ff5707e048"
+ }
+ },
+ "82afbc3f6dba388dba71ee35f56ea772a53033a8" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xd2c8bda3e1481b96b4a3ee0a2e1f3f1aa6299fec"
+ }
+ },
+ "82d03794122107972c0d075f16754791224b507c" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x1622e5aa3015448c3a7560b15a289d9aacc5370f"
+ }
+ },
+ "833bafb51e8a34c93f3100430fffc5ba61ef95c9" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x28cd47ab2e86fe040740206eb31fe193df7cbab5"
+ }
+ },
+ "83602911153c9c176419a17276ada844bb932527" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xae33b99c24c45ce086aa9a1844fe8ed55ec313"
+ }
+ },
+ "83802f999d793e8985b916465ccf6050195c0167" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x754144c0c9b9fe7f9a8e40df23f3c315a7e244bd"
+ }
+ },
+ "83abf69971313b011ee30466e8f703a460400557" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xa40a11c1f943538e64466de3b3bf8c022b883095"
+ }
+ },
+ "83e3e5a16d3b696a0314b30b2534804dd5e11197" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x99b2fcba8120bedd048fe79f5262a6690ed38c3a"
+ }
+ },
+ "83ed885c9759d5524052681a5602616a4d565e87" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x9deb7e973e3567140c51750e92d7c5091174f507"
+ }
+ },
+ "8405a655c77ae3ebef4410c924cba9ef22a57f42" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x1121c3fb4f490140339dabac59a62dd59a9912df"
+ }
+ },
+ "844301835752f15f39550cdf531e07ccef5d133d" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x94cceeb51248e76f0fa711e92986ad36208f6e94"
+ }
+ },
+ "8507d90ee605e59469a35fdc78e844c59894e003" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x39ea196ad4678ac786f9ff4ba12edbb364cd1bb0"
+ }
+ },
+ "857109cf04811d5273ec3af3f3d3bb56e93d1dfb" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x0f2fc64833681664e54ca74ea756c7233a05dd86"
+ }
+ },
+ "8692f270fea1b23b492dea1755f48cdd1dd78534" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xec184f693f222b3e48622f5253c134339e7e2e7e"
+ }
+ },
+ "8703df2417e0d7c59d063caa9583cb10a4d20532" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x37f998764813b136ddf5a754f34063fd03065e37"
+ }
+ },
+ "871986919b8ac4032193739eeae09c66765f0f15" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x7528088649b574b14d14f4b5ba45285eb8a78ffd"
+ }
+ },
+ "8719f47f3dd875955760868a4fb23f761cf7d4ad" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xba56f0f804625c0ff8b7b119bd03af0a10b5886f"
+ }
+ },
+ "87946e396d4fd04d02f117adf25ac427895878b3" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xc07b721215b231d9820dc8d186e3dcabc6c75e67"
+ }
+ },
+ "87b02d6f0e02d90fb05adf14ae74570ea8ca6aeb" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x43b0edac3c2c58f16fa2380089d841c420a14237"
+ }
+ },
+ "87b27e4b436adde9bf724b4889980331dd038d49" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xd758e9a701769fe9e5a80b3a09180e7631866f56"
+ }
+ },
+ "87dbe63fcbb0c90d20021f9c01a03e7d94916b3b" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x299528bfdcf20ff8e19a7a3fbbdfe98eddc2604d"
+ }
+ },
+ "88a16f4f893665cf06d9ad7a7ede8d9cdf833b7a" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xbdb0e729f9136a166efc4ddea366fc3b6bf6bf5d"
+ }
+ },
+ "891c7f214e32206e8f497fdaa7ee419e2e8f3ddd" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x3dff39a90e67e86536dcc8b4dbfac04da831e0b6"
+ }
+ },
+ "897003bcc0313258e7a3517771982e05e4cfce1f" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xe50c29688b2c3dbe6633797d2a200ed7c2cb1cbb"
+ }
+ },
+ "89e81283794cb458b9590002ce69ddba3c976a42" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x799dcaea1d20bf1428807757a84d6792798b74d0"
+ }
+ },
+ "89f02008028773d99248943a6bcb14200f4509a0" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xda3580da73b2986fe0da9b6caebe17818b7b3646"
+ }
+ },
+ "8a05aa8ab787526a0591016c2aee95037b8a478b" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x5bcf5f7ba278df5a31f48a5706e69816727a6e9c"
+ }
+ },
+ "8a2cab44ea3d5c52c704f060f4088e505791a57e" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x016cfb16ce1ab4c15eab782e1ac3b0d7f5bb264c"
+ }
+ },
+ "8b0c28ef1527a918fc7dc134ee6c00f069c7073a" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xfa9c2ac45638e511b06ebe051411ebdc2c4c228b"
+ }
+ },
+ "8b0dfaaf9135721f01f3712572ea9963d70f49c0" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xc101a7eb0ac863e824eea705432530c65aa0c519"
+ }
+ },
+ "8bbe1ac3ee5866589a669dd95744af5ee83e1b72" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xa7aaf603309127956371841badc44b69252d142f"
+ }
+ },
+ "8c25b51ae5745b82c7b489b8fd4a9994b9679a0b" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x5555d9bb89b76deec0c8c0cf37dcbf4b9e3449d2"
+ }
+ },
+ "8c2e2a704d809931e711b89162391f2dba837406" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xfd91b246a065cde3fc10edd6457b9e6c10fb3870"
+ }
+ },
+ "8ce9124341c4ca3c690b29f3575f3cb9833c8c3c" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xb78428568fc511f4a6ed34c2d57c4e104138ca99"
+ }
+ },
+ "8cfda5300d7544327e32aca175840f90860305e7" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x90f8d2eba99d7e50525edae64a61a28526eef895"
+ }
+ },
+ "8d7912a42951e7201c8854b98a36e4203508c3a2" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xa6eab9c538a79d9ffeebc5d4495fed68dccacbd6"
+ }
+ },
+ "8de072b1fc7f48cb2a42e7ee579a462e50e4cd8c" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x7c26d9c9b73a75f1a468d06bd69e08f4d316845c"
+ }
+ },
+ "8dffcd74e5b5923512916c6a64b502689cfa65e1" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x4f36659fa632310b6ec438dea4085b522a2dd078"
+ }
+ },
+ "8e1320b630d8a411819c16dc0edc2cb77ed8049d" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x02c7efe87a470a521338ba476a0eaf7a535c9c57"
+ }
+ },
+ "8e15b61b6735457672c8d4809e30ca7877e9fabd" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x1d3289a828d2bb4a86cda52b7772e2d0d508baca"
+ }
+ },
+ "8e1f5c577cd5a404507687ef379cd1e41c4a9a9e" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xcb0ef5a0d3f9427d66aa2b00d4b25c2445d96cf2"
+ }
+ },
+ "8e4354916a56d367dd99d3eb120e27a1d8ec6e66" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x62cde2103198f54d31cdb9e9495fd7e1243c2c28"
+ }
+ },
+ "8efc24fec9b67ce053a55abaaedcbbcc64e97eaf" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x1963ac8fc10167891e91b4d3f53e09e0b7c9b55e"
+ }
+ },
+ "8f55e75b453fbb3071e4454119a33477c6028788" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xb4c898e7d827a75d991aec0a837c23aa8d9041e3"
+ }
+ },
+ "8f75ec2d8d77fd6a26f4c01f7b0384bd60418874" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x1660ada72b0a07040df8d063f2f3f3fee891f1d1"
+ }
+ },
+ "8faf239455a012d6ef377a83448c8185466f8511" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xa3396b3bca8473c21f9ab1fca8a40ecd580bc626"
+ }
+ },
+ "8fb5af158980be77e5d137ab6f95000407041099" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x8efc24fec9b67ce053a55abaaedcbbcc64e97eb0"
+ }
+ },
+ "8fb5f5dc4d66ea0233a652230d44299718cb9f9e" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x79cf9a7b86c0a7adb03ecb8967d70413f21b925f"
+ }
+ },
+ "8ff9fb732fc13f492704a9f47c47db4e877f6dc3" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xfc70ade160bd76694149f3f439f5d4f78bdc483f"
+ }
+ },
+ "90344e80aead27d6b007ee73dd8fd8169f870f51" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xce7600131bfe22040ad75febed54cd4ad181276e"
+ }
+ },
+ "90f8d2eba99d7e50525edae64a61a28526eef894" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x444e8af4b323407d02a7f96c209b712a65c6abaa"
+ }
+ },
+ "9137343457792227d68316f6ac0bc3518a7702e3" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x2b88d7e31f20b1cec3ae31ef8ae3f017820cf8"
+ }
+ },
+ "91aaa30b2bf342c6bb6a315251ffe5b7e123bfa3" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xb0a10fa71a1c4c621345666be094909ac112ec83"
+ }
+ },
+ "91acc7d4c4cc7affac116157a53f5614959485f9" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xe1954d1413f4f50c7bb3aa0ee368b94dfeae7c1c"
+ }
+ },
+ "91c87b19dcd811fc5efc567a022bca52d5e2e252" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x88a16f4f893665cf06d9ad7a7ede8d9cdf833b7b"
+ }
+ },
+ "925cdeaf40df0ac82648432e65481350417fd848" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xdfeb403cff0aabe20cb07d8451caacfe31260133"
+ }
+ },
+ "92bbf48cf4a124ffff047cad76c82db1a1889803" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x6cdf4bc6759fe45be60aae1cb72d3fc2bb7f2d24"
+ }
+ },
+ "931543d59701f1a123f3850e4c6e4b0ea097ae5a" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xa7f111e1b259c9bbd4beba8ebab4dd6d35bb9ee4"
+ }
+ },
+ "93840036a3c19b1e91ba0ea10f95a5041ef61a3f" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xd19b2ebcfea3994bf30a7e4283b73d4bdd319cbc"
+ }
+ },
+ "939023fa69f246b709a97f16c37367e36267828c" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xdba37eb3483100bc89a7bf11b7f110ad71ecf41d"
+ }
+ },
+ "93a5ddc7d7b2a2bbb7a61086aa6fd0cc9e202b0d" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xaecb52facdff422fd67875967e9278a7b872af33"
+ }
+ },
+ "93beac08e1b6f1ac32c5ee628bc4356feb5e54ea" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xf78ff2d350615b858077a50ff85b3a9e2edcc996"
+ }
+ },
+ "94602cccae39d50fdc504869eff546d1678f0ae2" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xb3b4dcc6ba6c6d8c352684bc69a135cccb2d88ff"
+ }
+ },
+ "94bcc8632137dd2d666003e33d1e7c2fdd6e95e4" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xc8c90ba51e74ac5d9e462ffcafbb6df11795ebe6"
+ }
+ },
+ "94cceeb51248e76f0fa711e92986ad36208f6e93" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xf48270bfa988db4518f9b1db9e78bb398c954551"
+ }
+ },
+ "954933598dcf8e04d6f4ae5b311673409e85c809" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xacbb287ca3f98d4775dce56e40ffce57ce4ba17a"
+ }
+ },
+ "9580d4c2c6795fcb1ec84bf6a58b873fb2737788" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xae17512fd9edf51989081b42962b2fc85de4a2d9"
+ }
+ },
+ "95a4d7cccb5204733874fa87285a176fe1e9e240" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xc37a43e940dfb5baf581a0b82b351d48305fc886"
+ }
+ },
+ "95f36953203283bc9358f396b627dc79480a8ec8" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xe059d3aac9a568120467ddbba3e4d25bbc82dc65"
+ }
+ },
+ "9606aeadd83c5da2a613b0e132f0a6c13cee43bf" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xdddda651d375f5352d2ff488eace1de63b6ffcaa"
+ }
+ },
+ "965025b3b611003c82c8c9b69b35b4c5444cde69" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x89e81283794cb458b9590002ce69ddba3c976a43"
+ }
+ },
+ "9663275f953d54a345f3dd00e2eeb0f156710129" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x897003bcc0313258e7a3517771982e05e4cfce20"
+ }
+ },
+ "96f4278992ff6da5e8e60456279d9bc5d1f7a845" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xf86c50909ddce25f4d4e71e16d78b2f6a244e8cc"
+ }
+ },
+ "970e2fc1f55b1e2b214f84e155ae6a9403f891b3" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x83802f999d793e8985b916465ccf6050195c0168"
+ }
+ },
+ "97316b1fd92c5e6611acffe79899064fd9274c8a" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xa30dcb9cfbd0e8c874e4f919dbe71be3545464a2"
+ }
+ },
+ "9747756fd264dfe7fbb2f46aebb3e9b084ccf45e" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x8069a4fb09d35f100d18c98d02ec1bfd997bb894"
+ }
+ },
+ "974beeae03d1860c485c0dbb68e5413317770b16" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x83602911153c9c176419a17276ada844bb932528"
+ }
+ },
+ "97a3956189161fe3d52554c2a599bb619983be5d" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x00",
+ "storage" : {
+ "0x00" : "0x01"
+ }
+ },
+ "97b61770815f0589776243ec8ffa365b86548b28" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x7f0506a35713c6a2c68152d15a4bfb1ccaec98a9"
+ }
+ },
+ "97c99c7f158206d19196df8d21573126569d918e" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xc8ca05f5e8391cd5004c3c4020e570ed4a520c21"
+ }
+ },
+ "97f0981b0a6cb647dd7b11b52c92bc1a3206d2f5" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x615a957b818ce70fec123daafe552c482c59c5a9"
+ }
+ },
+ "980410833d9ce53a0f944ccc629032fb0e6ae6aa" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x149d393bffe9be2336e7ffd6a109f05318dc798d"
+ }
+ },
+ "9848ce910f5874ffb5cad5fdc3507e8d54fd668a" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x21115fe08f7ec434d4ec27e8dcfdf31a6e50aa0a"
+ }
+ },
+ "985e84916da5ee358e1c119c9b12ff133da52d29" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xd2468d6da54259507d07f74ef0a246f97e52f036"
+ }
+ },
+ "9862b64181c8bf5bd53e51c5f596528ff82bf652" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xc19f48a0a131e8b9f44989bbac80a30ffe2a2e4e"
+ }
+ },
+ "986e30c8512ac023f09da460202322a88e98aa66" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xe6f12dc0baf6536aa75f226bfb0262d8266433d2"
+ }
+ },
+ "987600e63a25755048e018d1976d8ec4657f359d" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x1456fa2cf6376b40069504e491e64aa40484fe40"
+ }
+ },
+ "98ae7604effcc8bf6accb109ebf78fb6f5dad01d" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x9747756fd264dfe7fbb2f46aebb3e9b084ccf45f"
+ }
+ },
+ "98ae76bbf3fe4b779df55df06eb0081ac95d660f" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x4b414d48f3871bc957751d5895c96f090b509bbc"
+ }
+ },
+ "98b163f2929e5c92709759e3215879acf32a3a98" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x3e3069deb6f503bb8bf155eb2f89801140831f5c"
+ }
+ },
+ "98cf6cec29c58634b6022fd1e8f54f912921eef3" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xf4d2d03bf70c2500fe431fdc8fbed2c13437bdca"
+ }
+ },
+ "9917620c3df2e3cae0f0e690b4da82221bc26efe" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x0f0f333b14cae00e0f74e1de336437d5644ae337"
+ }
+ },
+ "9985ca2474151f5ab79a388ec3b0d6fbf42da1fa" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xf619381383c69659fe81a10d695b2663426624d5"
+ }
+ },
+ "99b2fcba8120bedd048fe79f5262a6690ed38c39" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x37fa399a749c121f8a15ce77e3d9f9bec8020d7b"
+ }
+ },
+ "99d6d7fe1a4f0f7d92837486a1f9d7dd500edc11" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xf2d3cbe7357ee858c2b7f6ea28fc95c1af508ca9"
+ }
+ },
+ "9a0ca249b7e4f00f62ba5230a602c3233895cee2" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x5b2ed45c5376c8359479e1b48f8c07437ec78337"
+ }
+ },
+ "9a0fa2b2dd4993b5ac3370b4047f5e4472121674" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x0ba7f30a90b699e3f906bff7599b230890bbd56c"
+ }
+ },
+ "9a2f4d9e7fd12bd7dd8141098bd3363bb644f068" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xa9f73dca799231e385ce5038c826b03eff0d1146"
+ }
+ },
+ "9a45843cf7ed63ab79f7df4d2bf80512d259b0c2" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xcc40f2616fb396bfc25e9b22ba3218b2b217ea3e"
+ }
+ },
+ "9b0a69ce744a08c595426d7cfa5fe5f4dc844a25" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xea2f1211c66cdabf2b618a4dd965ce133592763c"
+ }
+ },
+ "9beadb15fd4fe1f0755ce82dd160e1a798544a1b" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x48e958f074c27f1d190e69ef8c01f86931b278fa"
+ }
+ },
+ "9c5fc050311de43f7b7d9a66e8319ad3c051a252" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x1f323b00b7be1e9c0713b080cadc05f45e5e7ec4"
+ }
+ },
+ "9c89251856283a8e3aed6d801ca965fdc1da4aa7" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xfb04fd4e715c760c91ddc0f30b000b52203f66a5"
+ }
+ },
+ "9cb15938a825ff7c17ae775b6454730983522906" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x987600e63a25755048e018d1976d8ec4657f359e"
+ }
+ },
+ "9cbb5a7f2afe219ffb9b787065cbd94ad44ebd24" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x4f86da4fecade6017d7f15e30d8320446306870b"
+ }
+ },
+ "9ce1b776e1a050af28b1034980a628b7728b0831" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x076ad7e168093f590a74f6fdce56b492a23baa2c"
+ }
+ },
+ "9cefc7e38d2a714318e5c36c3c21b226b10218e7" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xa31be87c0ce167d8e9380a34c7d5004e42f37841"
+ }
+ },
+ "9cfe89d89bfe28ba95777b6a90ac7ed86b0e202f" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xe7b8aae66ff70d59fcc5a8b4de5a246081547147"
+ }
+ },
+ "9d0e24467eaf9b797b9e3f6a6084958889592ba8" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x299f80e93d68725830c27cb084265d0e634e4f78"
+ }
+ },
+ "9d9fcb724db6738e2ed07f6815a0e5d45b3042bb" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xdae44ad9bfab81783c1dd591ebe3409fa8967884"
+ }
+ },
+ "9deb7e973e3567140c51750e92d7c5091174f506" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xec318906ab052a41ef13ea33deee554704a307c2"
+ }
+ },
+ "9e30a8e67c1dc0ddcbcb8c0d957101801fd250cc" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x1f95c6da6a9e0abe74900ec00388094d32d98a43"
+ }
+ },
+ "9e8fe9f31e954787e0f9d01b4a7a0c8d3d320614" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xf78b2d97c8af245b705c0a19601b95f983e9aaf7"
+ }
+ },
+ "9f28528f2db498c3a0e79b15b97d3b3e9357e942" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x104f577c92f14f3684c13eb179b9969c05115605"
+ }
+ },
+ "9f42a00ab7bea15357b54e16867383fdc02e7060" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xb3edb875f0dc5faa556edf77a97e53c9d828d147"
+ }
+ },
+ "9fbf90147bf6ca022818372bf38637738d553552" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xd032f83c65a584f6e47f9fff9bc864d51a164a95"
+ }
+ },
+ "9fdd9d67e3e2c78c419e3ac9bccc7322041c3b1d" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xd111da05d7193bc295a4956543810071fcbe4239"
+ }
+ },
+ "a015c57718562f3839cdabd7d4e9c86f1a321a1b" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xc71abd039da56d4c1d783ed06a48adf0808e9cf0"
+ }
+ },
+ "a02b80b54ccc306e042c286172ba903dd53fa4c3" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xeb1775a16c0965c299f06a0873e11825f915e4"
+ }
+ },
+ "a06ebfd07c3daff1115b82d67be5bf4079ef6ea1" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x9848ce910f5874ffb5cad5fdc3507e8d54fd668b"
+ }
+ },
+ "a086d90b189bda22a2ebf3e9b7092f1782e4fe84" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xe0a1885b4057f65dc75636f4fb0e4b57da82429d"
+ }
+ },
+ "a0ebd1b4fc0821dde34f102f6030fc9c40b29ab0" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x4e4ad0ada6b3beffa2436bef1f6a8054f4476be9"
+ }
+ },
+ "a1230890b4634e4461d6295fef3b4ca6d8899bd4" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xf026ce3f255ef9fc7b93719a3f6926ce4953bfe2"
+ }
+ },
+ "a1ef404093a02445fe14243e853a641c23ecaff7" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x033b61ab81ffc5adce16d365458629d9f348212a"
+ }
+ },
+ "a20b30a1e7723ce15f80e9706fe9c1ea05170a2f" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x9663275f953d54a345f3dd00e2eeb0f15671012a"
+ }
+ },
+ "a24089bde6e39fea0d157ab9aa4173882e62f39f" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x752e929cfb45fd739923f562b146db315b8cc4cb"
+ }
+ },
+ "a2442dd71a4e937fd73ff383067f97ad4c83b4a1" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x1f1960aa296fd1f00ff131357138001afcd858aa"
+ }
+ },
+ "a301df371257a12c7bc93194ec045d211a2d4359" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x3d7b61ce014d1cb84465f1f908a6a940fd991b3a"
+ }
+ },
+ "a30dcb9cfbd0e8c874e4f919dbe71be3545464a1" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xe0fbdd03e0e490770d671965ccce5f5ed42bbb9e"
+ }
+ },
+ "a318ee3c41da839fa1002dba1f9a140274ce59e8" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xd7a36da4e6e26a99b038e34a6eb74d10d422baa0"
+ }
+ },
+ "a31b0038c42665206876c410caf02e67405dcfff" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x96f4278992ff6da5e8e60456279d9bc5d1f7a846"
+ }
+ },
+ "a31be87c0ce167d8e9380a34c7d5004e42f37840" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xc33582140ad3da6d7fde2c3c73d0530cbde93556"
+ }
+ },
+ "a3396b3bca8473c21f9ab1fca8a40ecd580bc625" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xb7650fa902a0ad81e8d48deb557323bfcf32efde"
+ }
+ },
+ "a381c1eb58a73d7e7c8b857fcf3a1b50c6116e1b" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x5c0ddde0773ca1b8f9b07ecdad9f47f2705640e2"
+ }
+ },
+ "a3a80c15cc0e13dd1aea5949c48ad5b120a8d831" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x7a315595e01d6e16134063232a01395187c9650f"
+ }
+ },
+ "a3ad081c8f3b79ad20285e881e0e4d011efc012f" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xa1ef404093a02445fe14243e853a641c23ecaff8"
+ }
+ },
+ "a40a11c1f943538e64466de3b3bf8c022b883094" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xd79995f1fbdf19beff429a94fa9dd184827c68c5"
+ }
+ },
+ "a4202b8b8afd5354e3e40a219bdc17f6001bf2cf" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x8dffcd74e5b5923512916c6a64b502689cfa65e2"
+ }
+ },
+ "a479aac07f3b83ee401944a36812d665f54ca6f7" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x8c25b51ae5745b82c7b489b8fd4a9994b9679a0c"
+ }
+ },
+ "a4a5e07598b0d6a40fe62ca88813b63a1c02710e" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x5a18f1d5e443321d54d1dafb3e3b5b6f2899378e"
+ }
+ },
+ "a4cd6039bfcc6295533a985631a151bf2e0e8b21" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x2d142ccaa1337198d592bc36ce7c5447da73f907"
+ }
+ },
+ "a5303b50e97dc17384209bdc3723ddc6eda7aea0" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x0eca69ecf3068082cff932c044fe39142ab6268c"
+ }
+ },
+ "a5552ed8dae24eaed9346af3186f634d38ee9aaf" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xb96672ac912cc5ad6f75157401ccd9003512ffc4"
+ }
+ },
+ "a5ddf08c7de55ca258e346fd1acb1b71cc2f8829" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x16c5f61453cff59c6b7e2a690cd902b722084280"
+ }
+ },
+ "a5ec829bcc187b6d19e825b5b6f12f86f81cc063" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xec45f260d4d758d6d23ae0297a9516190d935a5c"
+ }
+ },
+ "a60724458ce6cca04016e99826fff8c99c32e3b3" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xe4028c8f2888697e9939562de475f70a841ee714"
+ }
+ },
+ "a6495f085bc30ac47e89a9a700e406e26286c3f8" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x5c45b1eefac6061c7713919b34f5dcae9d5cfc7c"
+ }
+ },
+ "a65929129c13f2405697b704fb1c840987ad36f1" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xf53e504312e2ff787bbb9ba4ea921e9edb7b1900"
+ }
+ },
+ "a65ece83e15c7320aa0ef7ff2d69c2ff61fde661" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x3b7465c98051ca273d8909857047d5dc5b022af8"
+ }
+ },
+ "a686b20553a38e866228ce003657a71200957c3b" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xc0f36c8efba9e6e4e677faab240ccf0cf3e7d03e"
+ }
+ },
+ "a6eab9c538a79d9ffeebc5d4495fed68dccacbd5" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xc20cf04f10caa057314759a2908524925294efb4"
+ }
+ },
+ "a71525ab6694ead3c1be0aad07bac06e69192524" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x34c972120d50fbdbb38ba536e4d61bc8f995d19e"
+ }
+ },
+ "a724835568fb5e3986c1e87331a18b6628b73e25" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xcebebe455b6a15d2e4705ebe51fe5007afda76ec"
+ }
+ },
+ "a7547a96b2c999509ae062509a0d426fa46ade62" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x39457953215cb93e68bc5b351d63a8b7fd16031f"
+ }
+ },
+ "a770dccb354eae253f170825000386233ebed231" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x42ea619ae1a90979837ad2137458d991ea0613bf"
+ }
+ },
+ "a777e559211613e73d9d0cbcdad62c88957d6f25" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x1c827d36ec915dae96fdc0b164fb7bc1be9467b7"
+ }
+ },
+ "a7aaf603309127956371841badc44b69252d142e" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x97a3956189161fe3d52554c2a599bb619983be5e"
+ }
+ },
+ "a7f111e1b259c9bbd4beba8ebab4dd6d35bb9ee3" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x3d082c9477c05d23447d1682257a9d0ac1f948bf"
+ }
+ },
+ "a89361425f7403ec9e757b5d1a31993a79189a34" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x57cb48688d626a12fd4caee130b11e1b06ebaacc"
+ }
+ },
+ "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+ "balance" : "0x0de0b6b3a4344c14",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ }
+ },
+ "a9647f4a0a14042d91dc33c0328030a7157c93ae" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x8703df2417e0d7c59d063caa9583cb10a4d20533"
+ }
+ },
+ "a9ed1d8a969237243d26f8728287cb3eb8730662" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x83ed885c9759d5524052681a5602616a4d565e88"
+ }
+ },
+ "a9f73dca799231e385ce5038c826b03eff0d1145" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x5d57e28e16bcf33b37672eeb891b29c481e89121"
+ }
+ },
+ "aa6cffe5185732689c18f37a7f86170cb7304c2a" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x293f982d000532a7861ab122bdc4bbfd26bf9031"
+ }
+ },
+ "aa839cff1f78242d01a33305e1d9973cd7c66d4d" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xeb9414a32f85461cf4ac7c9c73761f3f1e5ab14f"
+ }
+ },
+ "aac939ac7c11bbbfb7f4520d14442a2460a51e87" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x3e1b0d3f5819f63c9621ba4d4af623a7b89b99af"
+ }
+ },
+ "aae4a2e3c51c04606dcb3723456e58f3ed214f45" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x83e3e5a16d3b696a0314b30b2534804dd5e11198"
+ }
+ },
+ "aae4f6978a8eb4a7be406a2a787d31dd49cd551e" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x44ed3a04032bf3585faf1dfedb9806eeb834580a"
+ }
+ },
+ "ab118214a2227c79eab2680df0a96d0ad67dafd3" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xf9c7db4a48b918ad6e44d2b55e2339fdcde01d27"
+ }
+ },
+ "ab1b93b6a83c275972ec2a6b513c3106dda84f47" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x2abef5958c8b283eaeec4557844ff1fe194e6cd4"
+ }
+ },
+ "abf67dec2d1ec31dd111c2f1135818b6af86c662" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x56cb9d29e9be519d3fc1cd21fcae7750aaa8b846"
+ }
+ },
+ "ac0dbbd8aa555e012e1b5fde0b4e1f20e30a057e" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xb705cdd0dbc620e11fa470f9b4938c5f9f42d84f"
+ }
+ },
+ "acbb287ca3f98d4775dce56e40ffce57ce4ba179" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xd7409d185224a0284e7451923e3d094ec309ef93"
+ }
+ },
+ "ad02a5cab29480ea5b67e354b0da540082500327" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x6ff9622ab3c22e4357e90274d00291c527991d22"
+ }
+ },
+ "adecbe660a4943fb6feada38775e51259ea15af1" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x277c19a0f1e4f5e4339de4d0223fa254a6c8a5e0"
+ }
+ },
+ "ae17512fd9edf51989081b42962b2fc85de4a2d8" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x0723789d0c7093f6e97c3fdeb1324a75427ca6e9"
+ }
+ },
+ "ae5837876e23fcefa0f204d7b6433966ebb854b3" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xf8e4de2f36fa5e9861fe3af86d05db4cae1bb1a5"
+ }
+ },
+ "aecb52facdff422fd67875967e9278a7b872af32" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x7cadcf3f4031ebc2bc85040ea16d1ad26ce1704b"
+ }
+ },
+ "aeef5b5a721ea3c03ca909bf1f71c122ebcd32af" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xa5303b50e97dc17384209bdc3723ddc6eda7aea1"
+ }
+ },
+ "af3cf705624b239ce07280597a55dc8ca69dd086" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xceee86e99b04198c09fc8ebf3e2f45253bddeed6"
+ }
+ },
+ "afbd8818fe046adfa468ea58a217b83f7d5e75a0" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xdceb9854f220556f595bd655bf6c023457341e4b"
+ }
+ },
+ "b008af759b5359810c78d181f0743ed85c286116" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xdddb23bf0a55d0197810e062a5a24a1503705ae6"
+ }
+ },
+ "b021f73dfd1500257934aacddd707e6f67173edf" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x23138c70217200a44c58dceaa4f5ab06470213a5"
+ }
+ },
+ "b03a2acc80fce6d54bd1db95d7ff24123ed6e106" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x060e7bcadd084fcf19db5cc1ea769550bd8f7509"
+ }
+ },
+ "b0a10fa71a1c4c621345666be094909ac112ec82" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x0581dee4d5420c2f6b1614ca62a4d66bcf383d0f"
+ }
+ },
+ "b0a9ac49b7fc9a45c9e7b358cc2e9e09dfe361d1" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x89f02008028773d99248943a6bcb14200f4509a1"
+ }
+ },
+ "b0ea2ec7623a1faebead30c8007b260a4c62f99f" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x2bb175c167599417f2192d9f926a5c648d17de90"
+ }
+ },
+ "b0f8d2e75cd431ef9d818a2552aab19a6a99c1d3" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x8e15b61b6735457672c8d4809e30ca7877e9fabe"
+ }
+ },
+ "b14b3e0660d147b2603ed92fec4ff337e3c259df" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xc5c5d6ad672b24a2ddedbd2418c4c131c212cb10"
+ }
+ },
+ "b15c7770a476be2c77c3bd50d60ea6b2cde3186d" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xb7c425948402f9382208346ff48ef6ac4667baac"
+ }
+ },
+ "b1691d2608aea9d7a56083dc7dcbfacc93a4287a" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xdb06ebb361ef006c17f89ad92165185a38f6e631"
+ }
+ },
+ "b1ec052c576186de285bbd31164de3b19a844dc1" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xc694bd4edd4e806b9c7d4ad742a3be423391470c"
+ }
+ },
+ "b2c10a1979ac6236e586ed704cf9dcecb034b8b7" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x1b8a6f09f8fc9743b59ddbb2f105034e32262553"
+ }
+ },
+ "b2da69bc3361eaf80dce81a17d610217ebbc7a17" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x2e070631694c093a9a329ec0b4a1cfa57e20ab78"
+ }
+ },
+ "b2f828407f1a5fcbb1e4ec079c22d791c7fa5478" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x9c5fc050311de43f7b7d9a66e8319ad3c051a253"
+ }
+ },
+ "b31b1fe90a535ed66dfaf1bf9e1062190fbe88a6" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x7161527e54370ad8fe44bc83d692b10b9f9b877f"
+ }
+ },
+ "b376b876f7137844ef5e2db1e307713885ee5d33" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x269f24e1ae86f63876b0504b7b26e20483fa95f9"
+ }
+ },
+ "b39c43369a4ec5e4b2dfa8b3dbb3a12bad630b30" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x6454029b19b69bcda3ba156684d58283636dea41"
+ }
+ },
+ "b39c8c3ee619a2946cf540cbf16720a881110f83" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x5bd96b317d4163401c9b1a2271c03b9439e73e6f"
+ }
+ },
+ "b3b4dcc6ba6c6d8c352684bc69a135cccb2d88fe" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xd49daab5099319cdda477f5ba715ae685c031db8"
+ }
+ },
+ "b3edb875f0dc5faa556edf77a97e53c9d828d146" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x7702eec59b0ee531bef08c14d0e6c89e7e43ebad"
+ }
+ },
+ "b4429d6274f10ef0b7ba30837c5de603ed4c16ef" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x560d5f4c8933c5ca0c2c1b4f3e8b22958c9d7cdb"
+ }
+ },
+ "b4481bed4acdd11d8f22f535016a762cc87845c2" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x8e1320b630d8a411819c16dc0edc2cb77ed8049e"
+ }
+ },
+ "b4c315d98fa6cbed10c6331e2a5e4688ed0b7f7d" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xbdd290243af494ef27e986a3cc432ba3f873758e"
+ }
+ },
+ "b4c898e7d827a75d991aec0a837c23aa8d9041e2" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xddfb1c855ea2b2f198d2b6c7dc8ea0ee16d7319b"
+ }
+ },
+ "b572b99fc06b16a232d74898e587398d25d7d33f" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x9b0a69ce744a08c595426d7cfa5fe5f4dc844a26"
+ }
+ },
+ "b5f4de69833ef9f1392c74a5ab905c5cd1ab2874" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xe74299a026e8a481c1db07e6065ca30af9858cbd"
+ }
+ },
+ "b6367a493bbaed7334456b3646e4541c9e96012e" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x3174a074366bc04bfb7f2a728a725cb01cd575d4"
+ }
+ },
+ "b651decbba52842e8fc86afda1168ac549dea7d6" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xd9dd1aa8519580888c402dd4fae66ca68b4a7b48"
+ }
+ },
+ "b678cef4a4ba3f3642fa128daef4ed6d50ba1a0f" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x33207da78e5ef3dde6fceab85bee1b5bf717e13a"
+ }
+ },
+ "b6bcc464b7b7f0359e87e9a9517d10823a2e0c93" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xb7fbcbcd3389df89233f8bf6bfa8acf892958a34"
+ }
+ },
+ "b705cdd0dbc620e11fa470f9b4938c5f9f42d84e" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x02c577c9c1b247c0ea60b1dd50fa895c086e2f2b"
+ }
+ },
+ "b7650fa902a0ad81e8d48deb557323bfcf32efdd" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x7343c0aaebc045465ffebca00e201c1f554c2eeb"
+ }
+ },
+ "b78428568fc511f4a6ed34c2d57c4e104138ca98" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xb678cef4a4ba3f3642fa128daef4ed6d50ba1a10"
+ }
+ },
+ "b7b7c5f65fc11a6bee686b9363884811be247c43" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x72969d083705c924922b857922930f2087426ca1"
+ }
+ },
+ "b7c425948402f9382208346ff48ef6ac4667baab" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x73c85788bca3bc1fb2e9b3056c595a4a7b3d2e47"
+ }
+ },
+ "b7fbcbcd3389df89233f8bf6bfa8acf892958a33" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xd80ba0ac6edb71367c1634ae5bf72970e596a99d"
+ }
+ },
+ "b88173b953f6c1b613b6e878cfdb34899e3339ac" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xb2c10a1979ac6236e586ed704cf9dcecb034b8b8"
+ }
+ },
+ "b8fc89fa4eae09e1b4bbb51f4c1791e589368801" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xa5ddf08c7de55ca258e346fd1acb1b71cc2f882a"
+ }
+ },
+ "b9261902783bf36bab49f18323a9c8e4ad86519f" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x130d08c2381d23796ff403d8f1fbaf204d90e3b9"
+ }
+ },
+ "b94d3b46afb9954a375e50a6fede26705800a057" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x94602cccae39d50fdc504869eff546d1678f0ae3"
+ }
+ },
+ "b96672ac912cc5ad6f75157401ccd9003512ffc3" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x986e30c8512ac023f09da460202322a88e98aa67"
+ }
+ },
+ "b96982fae6a70aff19c2d99c3b2adc57b151d784" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xa770dccb354eae253f170825000386233ebed232"
+ }
+ },
+ "b9f7e8e7ea5b1a7f184a152373526ac7acf4477c" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x7d3b079a8306f7cc89f1b9b23319ec904e3ad854"
+ }
+ },
+ "ba158ff71047c0322b1474461f94c0246d0dfb2e" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x7f57dd2b577f0d5cb1fad7bbb2cf8f07ec0f019a"
+ }
+ },
+ "ba3adb3b7ccccb748a65932e0254e52ce092c5b5" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xd25b7ae72c049f91091a4abedc4d618e5a05e1e1"
+ }
+ },
+ "ba56f0f804625c0ff8b7b119bd03af0a10b5886e" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xc0cbd80b185007c05f50e6f2fbb03e8d6b2ed653"
+ }
+ },
+ "ba70f98f64f041290dd6794e5cbc9e8144c8c914" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x134c36c64db09ad23fde5b43a3a7a92d84dd5301"
+ }
+ },
+ "baf332c908b38d0c5e825b41a500525fa990b0cc" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x69afd0683057a214d3bb3cc7d438961cf8c8b201"
+ }
+ },
+ "bb26680f6bb423720c6437fab35913d0a86e2a78" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x4ebc77b7203cce293550d92b2b5587621cf5321a"
+ }
+ },
+ "bb7a0556525b43c750e380a0ac1ca3bb719e601c" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x5cf45d08c0b55dd9c34cc4cb718c917333f2e9fa"
+ }
+ },
+ "bbdb82e2b1ebae617370e1c27542ea087a4fa937" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x711b5163728968ec016a924238f743fa04f2d120"
+ }
+ },
+ "bc2929a7819bb70f10676f4bc004fff40ce5a52b" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xfabaccc45975d14c53b830fd4fa0576da541d22f"
+ }
+ },
+ "bc843b0159d8f7cf6fa1bda55e3ddcf78e1617b2" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xa7547a96b2c999509ae062509a0d426fa46ade63"
+ }
+ },
+ "bc845b8623c7af6b07eda7a5363298989cc007db" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x0199dd91369b5ce0467b68d57beaf1d96fdc769b"
+ }
+ },
+ "bccf73dc6498406a51b4183e22c4be57de5c4975" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xd7ae2e59d0776d0ba96fb4b23d1eccb3d57a14ec"
+ }
+ },
+ "bd4f71cc4a8facf8612158e418fa394cabef27b7" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xfd09bf9b58980d6a5776bb391d8c6881bcca2aea"
+ }
+ },
+ "bdb0e729f9136a166efc4ddea366fc3b6bf6bf5c" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xfcdb751de1dc7c5246ce698b4b104016d034cfdc"
+ }
+ },
+ "bdd290243af494ef27e986a3cc432ba3f873758d" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x3c4a4ef39f21e45a8f56e5c8bf8bacfaba78a778"
+ }
+ },
+ "bddd1619fd3c4703733b1648b7db0ffa6dd09a19" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xd0a97217cb0a4211e28a58222c1b038c44a3f212"
+ }
+ },
+ "bea830535682332041ad318232044f5e914af083" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x387b1112283308ce33f63062a7531e6fe0f3af17"
+ }
+ },
+ "becf51bad165c4b8544ecc57c7859ee946e610df" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x2c4a413bc345da77b2d07a17313b6d89aef2c2c2"
+ }
+ },
+ "bed1a42fdb56c7d562a773650bb2785737caca3b" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x1c32901c93008d3e09928bdf3385f32ecff9500f"
+ }
+ },
+ "bf36bc1d23eebe66f84a0f119552dc7b46fe2402" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x1cd52bab323ca2180a747d3c8b8405397003feba"
+ }
+ },
+ "bf574eebdcc7ff3617200fe07c8c7154a8d129f4" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xe355b484879e20943aca2c6655953ec8121b64e9"
+ }
+ },
+ "c052f8b19df2c41d807bde1c041a8ba2e87f15d5" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xc3d826f0bcf2d353afaea99ec55eb9162438e316"
+ }
+ },
+ "c06bd5d93ac2ecab95942d1639b700e3a2cc48b8" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x6af2602221d2477af828ddb2c1dec8f70a24abe1"
+ }
+ },
+ "c071690916c15657eba376c7c6b4b06d38e815be" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x5d3292b79851f68d3907a550dc1a0b569d603f67"
+ }
+ },
+ "c07b721215b231d9820dc8d186e3dcabc6c75e66" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x3671a99d2a485b30fafa2a65f405b6b03ed32eaa"
+ }
+ },
+ "c0cbd80b185007c05f50e6f2fbb03e8d6b2ed652" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xd9d8272a3b205f71494f9009705f4f30dd31c608"
+ }
+ },
+ "c0f36c8efba9e6e4e677faab240ccf0cf3e7d03d" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xd87693ae6d35928467daf90aac749654e9c57645"
+ }
+ },
+ "c101a7eb0ac863e824eea705432530c65aa0c518" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x4af174d239e86ee19d40026eae04486804602062"
+ }
+ },
+ "c19f48a0a131e8b9f44989bbac80a30ffe2a2e4d" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x1a6bbe5380998bea238848b7a5927fa87e7b9fe2"
+ }
+ },
+ "c1ab531ecade623c0c908c1fbf104fb8c647a37e" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x38fe3b47fed5fa6d060bde66598bf5a773b831ec"
+ }
+ },
+ "c1ff6275aeeeacd2c79dc02f8cd5cdb44a81e6be" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xe0b3647d7252d53d397fa6af6d9da4749f4caae0"
+ }
+ },
+ "c20cf04f10caa057314759a2908524925294efb3" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x0b98f3276e76e9982d7f6996878ea5196fda62f2"
+ }
+ },
+ "c291bf92ff9bdc0e60f049e6a5b143b940658857" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x8ce9124341c4ca3c690b29f3575f3cb9833c8c3d"
+ }
+ },
+ "c2a603dfbb0734c098e5b6b7c8a9b64bab11054e" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x44d13c51fb706efb7394346b00debea9ea46e9f4"
+ }
+ },
+ "c2afed79b83fc6b8d98802f52b1fea6648571ee7" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x723bce7438e7c70d113e954e9aad5dfb4551dc00"
+ }
+ },
+ "c30727a70f64c82d0d8837f1b45b931ebf80b106" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xee439948c6dead863ab2ba9105b70916d45f9e7a"
+ }
+ },
+ "c33582140ad3da6d7fde2c3c73d0530cbde93555" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x0b4b7f08623d9b3d6514baf529399e4f1c0ad945"
+ }
+ },
+ "c37a43e940dfb5baf581a0b82b351d48305fc885" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xf735071cbee190d76b704ce68384fc21e389fbe8"
+ }
+ },
+ "c37d1d79868b6a4c25db68301b8575ae4a8336fb" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xfd0dea1a583400fc29051c8192b70022d8d92c49"
+ }
+ },
+ "c3d826f0bcf2d353afaea99ec55eb9162438e315" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xa65929129c13f2405697b704fb1c840987ad36f2"
+ }
+ },
+ "c4170be517e6c67a9e65dddb09220df58e547102" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xdb4ed990c69c3b67a04a96ccf079649facb9c434"
+ }
+ },
+ "c44e39eed84adf0c399a9d5af8d0053715d0f5f9" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xf9d417c0b18ff731a88a17f3b31d9d6ed1e288f2"
+ }
+ },
+ "c489e22b54124b98b17b68e7c38676efb81c1862" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x9f28528f2db498c3a0e79b15b97d3b3e9357e943"
+ }
+ },
+ "c4be49d4dcee6efd96c35ddf346b969db9981091" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x87b02d6f0e02d90fb05adf14ae74570ea8ca6aec"
+ }
+ },
+ "c57abf0b9724f82736bee2a05a9238a45de5512a" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xb39c8c3ee619a2946cf540cbf16720a881110f84"
+ }
+ },
+ "c5a28cdc8c4b089c87ed4938ed4718253c48dd7a" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xeb203eec55c1da2fd38977032c79ada414cc914d"
+ }
+ },
+ "c5c5d6ad672b24a2ddedbd2418c4c131c212cb0f" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x6b6945d5fd5172355825871803b93e57c5040654"
+ }
+ },
+ "c608a6fa0f9f3a6af68270740ed6c998e145eede" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xb1ec052c576186de285bbd31164de3b19a844dc2"
+ }
+ },
+ "c694bd4edd4e806b9c7d4ad742a3be423391470b" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xbddd1619fd3c4703733b1648b7db0ffa6dd09a1a"
+ }
+ },
+ "c71253e1b049c2b5acba1893c74007a26797e111" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xf3b37fd9258f2c883c44e8ddaa90f91bfe9f5d52"
+ }
+ },
+ "c71abd039da56d4c1d783ed06a48adf0808e9cef" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x80a784f83657ad12a742b94e01c3bbaf3fb2c6be"
+ }
+ },
+ "c775193c9d81ed6ee806f6005a874b927e96ff19" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x0802fc1dc1a5dec7fcbf1d50f3d8a944099ad72f"
+ }
+ },
+ "c7e31a320a9a7969a6f4c3cf98bd6d92a6119055" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x6d33e2eaa419844043bc41073bf3a2bc0a6c1b1f"
+ }
+ },
+ "c82d5a989ed7c8ffdf79ea0724b3c9ba3fb84e57" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x27b3a0698a207d5ed960cf71b1ee9fc54c229eb5"
+ }
+ },
+ "c8732f022b6c57d291b26c830c651b3617c75b2a" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x99d6d7fe1a4f0f7d92837486a1f9d7dd500edc12"
+ }
+ },
+ "c8b331eb5ad444567964f34dc24757bdd3425943" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xad02a5cab29480ea5b67e354b0da540082500328"
+ }
+ },
+ "c8c3cf855531e1d06c07245e76c5298b4fc90d8a" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x4ec27065c52d294799b93700dcee6e32778f1b19"
+ }
+ },
+ "c8c90ba51e74ac5d9e462ffcafbb6df11795ebe5" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x65e3776618742b90f1d9844c907b276854869abd"
+ }
+ },
+ "c8ca05f5e8391cd5004c3c4020e570ed4a520c20" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x66e68e1d0f65b4379c2864f5228d98de265c5e31"
+ }
+ },
+ "c9113ae38fc632738ad4722046d8e07ba9363ca7" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xfff1cd2c481ce0fba0c97ef77c79227d3b67832b"
+ }
+ },
+ "c95ee3b530d4b057840c2d9cb542a51e4e3a00cd" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x7d699e5ea61a26a7f677478cc79887e2f27ab346"
+ }
+ },
+ "c98b82b246d3eca7562ae19d8ca605e77cd53a3a" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x4bb5fc5d686cfb132c177aee8ef426e5de98cc6c"
+ }
+ },
+ "caf720d275e228b58bcd8b2686714ed8819cdc2b" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xbd4f71cc4a8facf8612158e418fa394cabef27b8"
+ }
+ },
+ "cb0ef5a0d3f9427d66aa2b00d4b25c2445d96cf1" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x46aa4a5c336dbecbabd4cdfef3b9fa65a8a12a16"
+ }
+ },
+ "cb5e208c02a68f2d97601da482c419af989e097f" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xd5144e55ee02feec18f2ff293f08b8379d1509d4"
+ }
+ },
+ "cc0302264a5d0f269e26ca3ac24d7695b562b4f4" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x1591af76c716952018e52e54c716e8b2226d494c"
+ }
+ },
+ "cc40f2616fb396bfc25e9b22ba3218b2b217ea3d" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x317fda8ec45232a8259546a4ca8ebef16338d47c"
+ }
+ },
+ "cc7c2f8a3070489cfca48f5fa0db9fa2d65e40e4" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xa4a5e07598b0d6a40fe62ca88813b63a1c02710f"
+ }
+ },
+ "ccc8cd23dc6755bbb516af6ef2a04cc82a5ce5c7" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x9fbf90147bf6ca022818372bf38637738d553553"
+ }
+ },
+ "ccce4f34ac3a550c95747823a00fecce349734f7" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xe21b2668bb1e9cf057606c44d49648f1c140aa77"
+ }
+ },
+ "cce1e6f23dccba1aa1830b1b7714fe985f9f2032" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x2f171d1f2cf19f4a458b7dc4db89fa7cd818dda1"
+ }
+ },
+ "cd1171381ba62ff31b56a001b8144e64e365eba1" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x38450559e7ed9b72c80aa00855b942f9bac1b282"
+ }
+ },
+ "cd2910fb9ae3395ed149b28a1ce7c3cc58bc5481" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x62e75c838a732abab87e1846f361721f03e7d974"
+ }
+ },
+ "cd5fca46bbc468b84b493f7b52ff50386b174d40" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xdd8317eb76e8949315e601fa8a6959e2ffd277c2"
+ }
+ },
+ "cdc1f2aa2853b37723f415aeb181583e11ae7b8f" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xd2be9413f150b2eaf2666b42ee719fc66e5066f2"
+ }
+ },
+ "cdcc86f0d7e95ea5b2f9f5e802015c8ff855b257" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xc71253e1b049c2b5acba1893c74007a26797e112"
+ }
+ },
+ "ce20ac750c9549b466d48c90352a255f6b7c8294" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x3ef5e42a0012b430169dae579f8dac0f6ef5dc39"
+ }
+ },
+ "ce7600131bfe22040ad75febed54cd4ad181276d" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x786102f7205ad86bb77b14a1b80d8b26cbf3562c"
+ }
+ },
+ "cebebe455b6a15d2e4705ebe51fe5007afda76eb" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x4f5af8eccb582ad30e2702d07577479599461c55"
+ }
+ },
+ "cedbc4eaa94298536ad368e8ac9819c5e7448738" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x7ebf86bf849b6097c8af6dae10c52438538a0712"
+ }
+ },
+ "ceee86e99b04198c09fc8ebf3e2f45253bddeed5" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xf4a32ec7fde64e7d3ceb53fcc00511ffe13ff5d5"
+ }
+ },
+ "cf3f58bfe41401084fd1e997e8e36dfb35e363cc" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xe703236fc6d1dcc955b9abf34f490e2bf5057fde"
+ }
+ },
+ "cfb0d9c00c0b7ad292f221584394a3ae7d30e0ab" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xc9113ae38fc632738ad4722046d8e07ba9363ca8"
+ }
+ },
+ "cfb86844738d5373ad23eb3185e1e9fc5d517ae6" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x6c14bbac448312636b86fe713185cf7d8ea6f1bf"
+ }
+ },
+ "d032f83c65a584f6e47f9fff9bc864d51a164a94" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xf94e8e9f1511f8cede3bfd8e1be0db35085e8e6e"
+ }
+ },
+ "d09a49b1cdb208e2504486267ca2418c87152962" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x5f1703b93938752face6e4657a90825b77f455db"
+ }
+ },
+ "d0a97217cb0a4211e28a58222c1b038c44a3f211" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xfc86915f4e8884b49adeb6f23a8f69e643d9db7c"
+ }
+ },
+ "d10afb219e80a211c9072b18de0ff2317f67e573" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x9a45843cf7ed63ab79f7df4d2bf80512d259b0c3"
+ }
+ },
+ "d111da05d7193bc295a4956543810071fcbe4238" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x0d11b1966fa90191f6927943c476d36fa3a31557"
+ }
+ },
+ "d19b2ebcfea3994bf30a7e4283b73d4bdd319cbb" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xdf50b2ca876e4174d276dac0c64e644cb1b5a119"
+ }
+ },
+ "d2468d6da54259507d07f74ef0a246f97e52f035" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x6cc6da179301a7ec4290cc0a5860a42ad18839a0"
+ }
+ },
+ "d2571607e241ecf590ed94b12d87c94babe36db6" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x62c01474f089b07dae603491675dc5b5748f704a"
+ }
+ },
+ "d25b7ae72c049f91091a4abedc4d618e5a05e1e0" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xdc19c28fa6124ee9d0688d0e2879f1269b4b7fc6"
+ }
+ },
+ "d269786262f853ed769ef3ea9a7e5b98db3bfb32" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x1ec26f14651cc567ce691ce83ef09eced6b12a6f"
+ }
+ },
+ "d2a0b130c0834eb0ad2717ad13233242280a6fd0" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x97c99c7f158206d19196df8d21573126569d918f"
+ }
+ },
+ "d2be9413f150b2eaf2666b42ee719fc66e5066f1" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x9862b64181c8bf5bd53e51c5f596528ff82bf653"
+ }
+ },
+ "d2c8bda3e1481b96b4a3ee0a2e1f3f1aa6299feb" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x2eabf4237f49d4cd44ec256436b99ba41828d36d"
+ }
+ },
+ "d2e450aa145ce97dc054b1bcf391407fbf202bd5" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xda1849a4f9df2e58d30c94732ff5f3aea19ccd8e"
+ }
+ },
+ "d3a4f3cc7113eb16572eced68ab395a40ceeda1c" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x87dbe63fcbb0c90d20021f9c01a03e7d94916b3c"
+ }
+ },
+ "d3ba8bc2aa219ba0aacc8960b92832c3b0693bac" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x30b37f280d6735ee04239de0963b071f83c13a28"
+ }
+ },
+ "d3c1c3359ed1906851379272964b7d96e2977654" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x6c3bed6efc677ccb136c0d886a6f3fdb375798c2"
+ }
+ },
+ "d49825eca3314ad0c5918472615055010cf4a4fa" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xfd5b134edd8931ca2102693d88070dd49fc13351"
+ }
+ },
+ "d49daab5099319cdda477f5ba715ae685c031db7" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xa777e559211613e73d9d0cbcdad62c88957d6f26"
+ }
+ },
+ "d5144e55ee02feec18f2ff293f08b8379d1509d3" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x7797a5c4bb655b5ea51bc966875abb3b19c0d106"
+ }
+ },
+ "d577d44f2748e151afdb1ded254c942ca9933b0b" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x3f5bf6c71c4fae1a91c1cca72b539dd83762a717"
+ }
+ },
+ "d65386ce109ffa3570dd27e54f32e2528fe01fc3" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x8405a655c77ae3ebef4410c924cba9ef22a57f43"
+ }
+ },
+ "d7409d185224a0284e7451923e3d094ec309ef92" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x81b26e12027f5df776edd5539791e683dc2e57f1"
+ }
+ },
+ "d743161f0f7beed30155e171b4d577d5ce2a70d3" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x4d4ad735b52df9e88fbebebac2de1ede991f9995"
+ }
+ },
+ "d758e9a701769fe9e5a80b3a09180e7631866f55" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xbc843b0159d8f7cf6fa1bda55e3ddcf78e1617b3"
+ }
+ },
+ "d79995f1fbdf19beff429a94fa9dd184827c68c4" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xeb5ad2481a57a6b7ede3a16ad8bfe2991eef3ad8"
+ }
+ },
+ "d7a36da4e6e26a99b038e34a6eb74d10d422ba9f" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xf74f956ea3d122e47f4aa0066b5e3605c80d0283"
+ }
+ },
+ "d7ae2e59d0776d0ba96fb4b23d1eccb3d57a14eb" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x01b26e834122a942828698305a84789ec47c0455"
+ }
+ },
+ "d80ba0ac6edb71367c1634ae5bf72970e596a99c" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xeb67f5e410e28c16861fea7a2ecc1e0011a760"
+ }
+ },
+ "d87693ae6d35928467daf90aac749654e9c57644" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x833bafb51e8a34c93f3100430fffc5ba61ef95ca"
+ }
+ },
+ "d9860a22b84f982363ab9684d767a347a5c4fb74" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xcfb0d9c00c0b7ad292f221584394a3ae7d30e0ac"
+ }
+ },
+ "d99befc655ecd5df508569aaadd729af7371687e" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x844301835752f15f39550cdf531e07ccef5d133e"
+ }
+ },
+ "d9d8272a3b205f71494f9009705f4f30dd31c607" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xc98b82b246d3eca7562ae19d8ca605e77cd53a3b"
+ }
+ },
+ "d9dd1aa8519580888c402dd4fae66ca68b4a7b47" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x8bbe1ac3ee5866589a669dd95744af5ee83e1b73"
+ }
+ },
+ "da1849a4f9df2e58d30c94732ff5f3aea19ccd8d" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xfd096ec4540dacfebbabf2dd6ffd3493a09cc390"
+ }
+ },
+ "da3580da73b2986fe0da9b6caebe17818b7b3645" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x9a2f4d9e7fd12bd7dd8141098bd3363bb644f069"
+ }
+ },
+ "da5828cee8e61bd0d8af71ef5da9a7a9019ade13" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xe475b2b441a9b1cdf24e0ea992dfaecedd58d6d1"
+ }
+ },
+ "da7555a43e7a3790290cd20a19ec19032e28a6dd" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x0c1e13b0604290abd900eba3fb6b7560b3401f59"
+ }
+ },
+ "dae44ad9bfab81783c1dd591ebe3409fa8967883" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xebff1a1539630b2f7b5260a93ea602372e539367"
+ }
+ },
+ "db06ebb361ef006c17f89ad92165185a38f6e630" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x980410833d9ce53a0f944ccc629032fb0e6ae6ab"
+ }
+ },
+ "db4ed990c69c3b67a04a96ccf079649facb9c433" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xcc0302264a5d0f269e26ca3ac24d7695b562b4f5"
+ }
+ },
+ "db58d0b35d26edeb0efcb49f7eb627cf49bb3a47" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x6a31cc57646f3d9ae3b63e1f604dde04d1ba52b8"
+ }
+ },
+ "dba37eb3483100bc89a7bf11b7f110ad71ecf41c" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x9beadb15fd4fe1f0755ce82dd160e1a798544a1c"
+ }
+ },
+ "dc19c28fa6124ee9d0688d0e2879f1269b4b7fc5" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xa65ece83e15c7320aa0ef7ff2d69c2ff61fde662"
+ }
+ },
+ "dc1baaa8621b513d62e8aeb02543ce5c7b8020c0" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xe326d4acceedb3e572b98d4a45a6f1e37ee42502"
+ }
+ },
+ "dc280f2887ea315f70692eb247e399b18a07bda8" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xe0e8eb511c8a93cbc42dec4e3c0b8492ca1d81f5"
+ }
+ },
+ "dce512ecde5a4c27da464f846e71c8272da4ad80" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x91acc7d4c4cc7affac116157a53f5614959485fa"
+ }
+ },
+ "dceb9854f220556f595bd655bf6c023457341e4a" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xbf574eebdcc7ff3617200fe07c8c7154a8d129f5"
+ }
+ },
+ "dd0eda6e9a3dccc3d430e5dd333c83b759cc7883" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x32a48ace80773ad092de1d9bcaa00787353b5fae"
+ }
+ },
+ "dd8317eb76e8949315e601fa8a6959e2ffd277c1" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xf475a28a9649aa00ab8a40af393f1961587c2276"
+ }
+ },
+ "ddb6aeb5e1bb4cdb44ca3a9b979996c529d9fa3c" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x1209046d7bf46e81d8202422e630719c906653db"
+ }
+ },
+ "dddb23bf0a55d0197810e062a5a24a1503705ae5" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xf134cf7fd6ed2e962db26c4b3d99ee5884102c86"
+ }
+ },
+ "dddda651d375f5352d2ff488eace1de63b6ffca9" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x5ff4ef866c3ad4102444d020c1d21c3d35a119ec"
+ }
+ },
+ "dde0b1e9b9ecc980c5614012f9afae25cb1a1c16" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x3fabe5e3c3a59fd322cb638dc5295d1e94cbcea4"
+ }
+ },
+ "ddfb1c855ea2b2f198d2b6c7dc8ea0ee16d7319a" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x253a31b068a402910eb30758704b78c375ea349b"
+ }
+ },
+ "de63eef4b269d8572b6b00574ad8e34c471a07d6" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xce20ac750c9549b466d48c90352a255f6b7c8295"
+ }
+ },
+ "def94fccb1b7dfbe1cf0b3dcaa03a77cf58ae768" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xa06ebfd07c3daff1115b82d67be5bf4079ef6ea2"
+ }
+ },
+ "df50b2ca876e4174d276dac0c64e644cb1b5a118" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x4e5cd86dc5f716ebbdf6ef572a369c227986bde5"
+ }
+ },
+ "df5767dc4d8111e8641198f637e4423c62e57e27" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xbc845b8623c7af6b07eda7a5363298989cc007dc"
+ }
+ },
+ "dfc26965c20fea217850a28c08021f1468146101" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x1cd063768378c77cbcb93dab0ba4c345d76bb0ff"
+ }
+ },
+ "dfeb403cff0aabe20cb07d8451caacfe31260132" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x82afbc3f6dba388dba71ee35f56ea772a53033a9"
+ }
+ },
+ "e026a4835edf27c2705c97f237e5b59b7b5da1f7" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x12eed250610e4d59e841381dc46deaea3d9305b2"
+ }
+ },
+ "e059d3aac9a568120467ddbba3e4d25bbc82dc64" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x21190aebff29feb773919d8572f8cc825bbf7145"
+ }
+ },
+ "e089f14df5e00aff3b03cac5e1236f5cf5832d5f" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x970e2fc1f55b1e2b214f84e155ae6a9403f891b4"
+ }
+ },
+ "e0a1885b4057f65dc75636f4fb0e4b57da82429c" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xa24089bde6e39fea0d157ab9aa4173882e62f3a0"
+ }
+ },
+ "e0b3647d7252d53d397fa6af6d9da4749f4caadf" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xbc2929a7819bb70f10676f4bc004fff40ce5a52c"
+ }
+ },
+ "e0e5744863b26418baf12f94f0bdad2ef2546a92" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x791812110230af4583a4a6dff7eb425b0b0dfab5"
+ }
+ },
+ "e0e8eb511c8a93cbc42dec4e3c0b8492ca1d81f4" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x795d6e09eedae3febc172169c017fb67aa62efbd"
+ }
+ },
+ "e0f04368af17d56c8cdb50f0fd5f1847d9a49cb1" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x8142cb33b22222bb9e39a66b53af12c6ca0b5376"
+ }
+ },
+ "e0fbdd03e0e490770d671965ccce5f5ed42bbb9d" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x8d7912a42951e7201c8854b98a36e4203508c3a3"
+ }
+ },
+ "e134cc9b2be1a15b9e270a9f7baacbda3c8b3659" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x4cd33b31663c159fbd73cbb32f616eb46f7b18a3"
+ }
+ },
+ "e14b8b08ed9b569d2945b078fe94225924c5987e" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x2559cea11e9d8fd293253a8ffada7558c9c4db87"
+ }
+ },
+ "e1954d1413f4f50c7bb3aa0ee368b94dfeae7c1b" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x629fdbc407b70b57eaa1523ab12c5178e81a5d53"
+ }
+ },
+ "e19f216f6b8b78ff1e705cb56d0cb07db60a05ec" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x8cfda5300d7544327e32aca175840f90860305e8"
+ }
+ },
+ "e1e31732ce0075070c8d7e2ef7a44b93949493d0" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x0441738f9f0a045afd77a72ef8398475c1111472"
+ }
+ },
+ "e1f79aa1d6477ffd08d4e5ce185637434147e4f8" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xa479aac07f3b83ee401944a36812d665f54ca6f8"
+ }
+ },
+ "e21b2668bb1e9cf057606c44d49648f1c140aa76" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xa4cd6039bfcc6295533a985631a151bf2e0e8b22"
+ }
+ },
+ "e24778b9ec00cc9bef91643e31885deee719207e" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x1bce33a58c2741f74daab60067f759e9fc5f8c41"
+ }
+ },
+ "e28a959abf1b36ad7778737d992690cb73a51a91" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x6d1f3f15f36d76d52d65b1b78a4ac85e91f33d26"
+ }
+ },
+ "e292ba16ee32e94ba88b4b72821bf90fe7b1b845" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xe1e31732ce0075070c8d7e2ef7a44b93949493d1"
+ }
+ },
+ "e2982af9c977c39cb4633346b916a3897ffeb6f9" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x09957f64c3396f36daa03c68fa6c997eb7903df2"
+ }
+ },
+ "e326d4acceedb3e572b98d4a45a6f1e37ee42501" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x62123ac69c46a06f7e3644b0dfcfcded535b8728"
+ }
+ },
+ "e32bec776748185042cb02d58fad1d5027bbaeff" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x3debce965330c2da68edb1cdd3ac380d5ce67b11"
+ }
+ },
+ "e3443d812bb8204255a1d249b82aa19508dff5c9" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x6bda06aef03a04b8eb3e4c7d1ef001fc806f5f70"
+ }
+ },
+ "e355b484879e20943aca2c6655953ec8121b64e8" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x22df73cba33d8fd14fc985fccded670de4041f26"
+ }
+ },
+ "e365d9256480b1e9d3cc6eafdcad5912b75ad149" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x5affb7ff218092cf60bc1ba4b32ea65a32cd6845"
+ }
+ },
+ "e3d08fe78f595bede290f820ec0e878572803a6a" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xf25da1517af0e2fce2b9d75fd964e8827cc0cb73"
+ }
+ },
+ "e4028c8f2888697e9939562de475f70a841ee713" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x6123d3be4335107712685be2d575958b17501068"
+ }
+ },
+ "e475b2b441a9b1cdf24e0ea992dfaecedd58d6d0" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x01619145d576c5b3130eeed16f29501f2773c959"
+ }
+ },
+ "e49d92946422e69977a94d1b4b769f97efcfb8eb" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x7845e6c6f5d014cabfeffe6d4d9d18c547d00fa8"
+ }
+ },
+ "e50c29688b2c3dbe6633797d2a200ed7c2cb1cba" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xcc7c2f8a3070489cfca48f5fa0db9fa2d65e40e5"
+ }
+ },
+ "e59b406835db0d4c63ae28072c64c664da637557" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xa086d90b189bda22a2ebf3e9b7092f1782e4fe85"
+ }
+ },
+ "e5baf7303b008f333c57491345e604d52fce0d63" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x87946e396d4fd04d02f117adf25ac427895878b4"
+ }
+ },
+ "e5fa8de537f7665e2aed751b8ca7c6b5bf0cdca0" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x0d1e5ab3b0c2d1ad5a562c123b7f01f4145074cf"
+ }
+ },
+ "e635349c1e038d62f774f4201cbda082b8af403c" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xabf67dec2d1ec31dd111c2f1135818b6af86c663"
+ }
+ },
+ "e64dff0ba3f0eb9e054a638d4d5f6f0cb47e1e98" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x0462dd089e0519c581654520d17763635011fe00"
+ }
+ },
+ "e6df36db61ae2c46d2cda2f6c8d1856ac181e6cc" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x73f9912db6e86599f256f090dffd915a845a9632"
+ }
+ },
+ "e6f12dc0baf6536aa75f226bfb0262d8266433d1" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xdde0b1e9b9ecc980c5614012f9afae25cb1a1c17"
+ }
+ },
+ "e703236fc6d1dcc955b9abf34f490e2bf5057fdd" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x8719f47f3dd875955760868a4fb23f761cf7d4ae"
+ }
+ },
+ "e71d6b1facc3de5c246f7d14e35a2b4a2d983c11" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x4e76fc5e619a4200846eecdd5545b39499debb11"
+ }
+ },
+ "e74299a026e8a481c1db07e6065ca30af9858cbc" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xbaf332c908b38d0c5e825b41a500525fa990b0cd"
+ }
+ },
+ "e75900e645ce8d1abbb97d408989b159b2a50a1c" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xb0a9ac49b7fc9a45c9e7b358cc2e9e09dfe361d2"
+ }
+ },
+ "e7b8aae66ff70d59fcc5a8b4de5a246081547146" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x08d19f247ca974ee89d4f988cac4becf7a177724"
+ }
+ },
+ "e81f08cfb60f7c156cf7dcbee1b8790901a1eadc" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x298b8bde7997684bfe4434cf6d24d50ddabb69b3"
+ }
+ },
+ "e8373e7e464120da8a84da82c8137872cda65780" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x7e2bd10d506af5eaada030590c8073495230f37d"
+ }
+ },
+ "e857a6c6f502dd2bd0ec341b2d4ed55f2e87e8e7" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xab1b93b6a83c275972ec2a6b513c3106dda84f48"
+ }
+ },
+ "e908278cc1515f214049c48c3a8908524f2cc407" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xf12be871bc1a1f3ca254eb027786085dd79494c6"
+ }
+ },
+ "e913f5b697154f99bfc159a132c6c253b457ef18" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x5ff4d4daf0a832422c4675a77720abbfb5afbba9"
+ }
+ },
+ "e93e7128f80bef53e3217782f21f4bd6a6d19c7c" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x54819bf1efa86437d2f38b4211bdd5229247d9b6"
+ }
+ },
+ "e9d157e81c306452f8494f681813037b146660eb" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x0e700a2aba22bd639abf05addbb24c53c3f0f3cc"
+ }
+ },
+ "ea186a9a4815581b71403480abae5cc7c57c00be" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x09986b78d02ae7c8eaa8b62053a3ee78deba79ac"
+ }
+ },
+ "ea216bc75a65a838ea3d63f7c05588c2840ec1ab" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x305773e25e157761c9d55cb7d9e24fc1b953a8ba"
+ }
+ },
+ "ea2f1211c66cdabf2b618a4dd965ce133592763b" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x1872142d84f7023b181766b790a4487f4012527d"
+ }
+ },
+ "eadf36b1baf942879b0b5c45469fa05add1d61b3" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xc30727a70f64c82d0d8837f1b45b931ebf80b107"
+ }
+ },
+ "eb203eec55c1da2fd38977032c79ada414cc914c" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xc95ee3b530d4b057840c2d9cb542a51e4e3a00ce"
+ }
+ },
+ "eb4e97f22f12995949c371f2df690f68f71070eb" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xfc55e6958f11444ae56c09af726f2ec57525db59"
+ }
+ },
+ "eb5ad2481a57a6b7ede3a16ad8bfe2991eef3ad7" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xc3d96a0eaddf7975da5c8718c26d65de0de59c"
+ }
+ },
+ "eb9414a32f85461cf4ac7c9c73761f3f1e5ab14e" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x16cab73035afa73268745a3c2937b551813c4961"
+ }
+ },
+ "ebff1a1539630b2f7b5260a93ea602372e539366" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x81d6578dc3e3c0fb07a8d62f66c1eaf3b97dc2af"
+ }
+ },
+ "ec184f693f222b3e48622f5253c134339e7e2e7d" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x1f01dbf8bd02bed14cc0a21831e044faa3f66fcb"
+ }
+ },
+ "ec318906ab052a41ef13ea33deee554704a307c1" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x14a76e43bc292a0e69bace56681c4eb50d8e52d8"
+ }
+ },
+ "ec45f260d4d758d6d23ae0297a9516190d935a5b" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xa1230890b4634e4461d6295fef3b4ca6d8899bd5"
+ }
+ },
+ "ec5f2ac1947c51c5982eb0ab63d1e6439f45c2e3" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x6f257471f06ece199232aaaa082d2b1ae7ddb484"
+ }
+ },
+ "eca2fc261f07a269c2487e6d1b0539d0950ff792" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xa60724458ce6cca04016e99826fff8c99c32e3b4"
+ }
+ },
+ "ecb643ddbca1cfa6dd22964c20ef57ab47c0fda9" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xe635349c1e038d62f774f4201cbda082b8af403d"
+ }
+ },
+ "ecd38089d14a75b93afa634276bbe8965f5642dc" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xf00d30ecf763691115d2314d14ea1e11f61ad875"
+ }
+ },
+ "ece9d0b9393f64338ec6ca5b0efbcec2175f19ec" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xd49825eca3314ad0c5918472615055010cf4a4fb"
+ }
+ },
+ "ed1a5e97e3415b484e6bc8b84bd170dbdd879cb3" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x059ec3d5a255df8a5b592659ea5fdd963e9bd0c3"
+ }
+ },
+ "ee21d08004e0b6f2c1cd4bcb2a04ab74f7b7b708" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x511b33319d0f7df487e07c4f5d149b27cecace47"
+ }
+ },
+ "ee439948c6dead863ab2ba9105b70916d45f9e79" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x6bed38b822d8823a2cb71883522f932cdde95b0b"
+ }
+ },
+ "ee6f3914a1e5d955fd62a29562ee0ab776235ff5" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x97316b1fd92c5e6611acffe79899064fd9274c8b"
+ }
+ },
+ "ef36b064bb706bc0540e4ed2b341ae8a0b7756b7" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xafbd8818fe046adfa468ea58a217b83f7d5e75a1"
+ }
+ },
+ "efe2a6d8859b14ecc69baf66dcd47f4067df18e5" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xcd5fca46bbc468b84b493f7b52ff50386b174d41"
+ }
+ },
+ "f00d30ecf763691115d2314d14ea1e11f61ad874" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x69fd2b9233b83e54861436496ad6b9fb28afaf41"
+ }
+ },
+ "f026ce3f255ef9fc7b93719a3f6926ce4953bfe1" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x7fe4672c6fd2a05c7a91676e5ae2e75ea197567d"
+ }
+ },
+ "f07ee5b0729c565f7b57995a108f94e4fcb81558" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xcd2910fb9ae3395ed149b28a1ce7c3cc58bc5482"
+ }
+ },
+ "f0dc197380bc632e5078f75f5ef0b814b7eb2ec6" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x814a465f554f949e6e2a6878539c705f319c627e"
+ }
+ },
+ "f12be871bc1a1f3ca254eb027786085dd79494c5" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x3b7d7653d3a7c2712d08bd29668163cb775c74aa"
+ }
+ },
+ "f134cf7fd6ed2e962db26c4b3d99ee5884102c85" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xd269786262f853ed769ef3ea9a7e5b98db3bfb33"
+ }
+ },
+ "f191a9c00fe780f63cf4f68a06e895bd53981254" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x8a05aa8ab787526a0591016c2aee95037b8a478c"
+ }
+ },
+ "f1970ea5af8456fee42cc087e79bd5c6a6efaa87" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x9a0ca249b7e4f00f62ba5230a602c3233895cee3"
+ }
+ },
+ "f1ba5e0a4a27d8dafcf87f049b178fe83574ac06" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x4a466c64765157e1a9dee46e1a26d95ac2664c50"
+ }
+ },
+ "f25da1517af0e2fce2b9d75fd964e8827cc0cb72" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xa2442dd71a4e937fd73ff383067f97ad4c83b4a2"
+ }
+ },
+ "f2866fb67103c69f10edaed228d2dd64b7e6df83" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x2f8ac479ce5baade6a63ecadf9599bfb0ecdecdf"
+ }
+ },
+ "f2d3cbe7357ee858c2b7f6ea28fc95c1af508ca8" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xfb5d7c75f272b07450867579978314661c3e1207"
+ }
+ },
+ "f2d923a66a9684f2268530094ce8e3f8b8cae52e" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xf2866fb67103c69f10edaed228d2dd64b7e6df84"
+ }
+ },
+ "f3b37fd9258f2c883c44e8ddaa90f91bfe9f5d51" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x38c622aecb7e84ad4fcfc327ae9a1a17e2dbc36f"
+ }
+ },
+ "f3c5a341248911dda9d694ee74bf997365941dbf" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x82d03794122107972c0d075f16754791224b507d"
+ }
+ },
+ "f4489af2af8424c6edf0d0adc525680dea208a31" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x6d27b8cb6b9af8a56fca98f13033d15f10f66da5"
+ }
+ },
+ "f475a28a9649aa00ab8a40af393f1961587c2275" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x702433f6bfbd76274ec1bb641c4a0428298487f2"
+ }
+ },
+ "f48270bfa988db4518f9b1db9e78bb398c954550" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xcf3f58bfe41401084fd1e997e8e36dfb35e363cd"
+ }
+ },
+ "f49ecf0e4378b1957686d8d0b227f83e48e5523c" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x6ac56f1ceee102b85819d789e6b29308eabc373d"
+ }
+ },
+ "f4a32ec7fde64e7d3ceb53fcc00511ffe13ff5d4" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xfe8d768de7a723c23583162dbef207b6dcb4fb59"
+ }
+ },
+ "f4d2d03bf70c2500fe431fdc8fbed2c13437bdc9" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x6b5ced188780878d8a72b3e6f02618db2bb97585"
+ }
+ },
+ "f4e76b020a22e8c1929ba2163e413385fc0cf884" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xf0dc197380bc632e5078f75f5ef0b814b7eb2ec7"
+ }
+ },
+ "f53e504312e2ff787bbb9ba4ea921e9edb7b18ff" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x58cbb2379b1fdac0a036bf75bb598e7d4fa232bc"
+ }
+ },
+ "f5472ede25cb83dc2fe392b01111133b777709b9" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xd3c1c3359ed1906851379272964b7d96e2977655"
+ }
+ },
+ "f619381383c69659fe81a10d695b2663426624d4" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x79225179187b35144fe9e8505cce2bcff3986ffa"
+ }
+ },
+ "f62f676443b29c513964f01cbb356165ace54b78" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xc608a6fa0f9f3a6af68270740ed6c998e145eedf"
+ }
+ },
+ "f6ee7d8bf313f837bbfed7f10b16fb2f182fd416" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xd2a0b130c0834eb0ad2717ad13233242280a6fd1"
+ }
+ },
+ "f735071cbee190d76b704ce68384fc21e389fbe7" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x31c640b92c21a1f1465c91070b4b3b4d68541960"
+ }
+ },
+ "f74f956ea3d122e47f4aa0066b5e3605c80d0282" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x479544e8b67a7e82120d3c5d7869b4c55f4a0de4"
+ }
+ },
+ "f783f583fc06d2c88e9e0d263a6ab66f8b8a0514" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xab118214a2227c79eab2680df0a96d0ad67dafd4"
+ }
+ },
+ "f78b2d97c8af245b705c0a19601b95f983e9aaf6" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xccce4f34ac3a550c95747823a00fecce349734f8"
+ }
+ },
+ "f78ff2d350615b858077a50ff85b3a9e2edcc995" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x8f75ec2d8d77fd6a26f4c01f7b0384bd60418875"
+ }
+ },
+ "f85aaa082ae886506141245ea3b43ee74babca65" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xb39c43369a4ec5e4b2dfa8b3dbb3a12bad630b31"
+ }
+ },
+ "f86c50909ddce25f4d4e71e16d78b2f6a244e8cb" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x90344e80aead27d6b007ee73dd8fd8169f870f52"
+ }
+ },
+ "f8e4de2f36fa5e9861fe3af86d05db4cae1bb1a4" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x4d7a1e5009218cf5176a313f6922c3ab01d4970e"
+ }
+ },
+ "f8fc32491119dea2b7fda5080ef9cf0027590265" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xe59b406835db0d4c63ae28072c64c664da637558"
+ }
+ },
+ "f904cb6a599db50cc635bb70f3c23f056e39914e" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xa9ed1d8a969237243d26f8728287cb3eb8730663"
+ }
+ },
+ "f94e8e9f1511f8cede3bfd8e1be0db35085e8e6d" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x91aaa30b2bf342c6bb6a315251ffe5b7e123bfa4"
+ }
+ },
+ "f9c7db4a48b918ad6e44d2b55e2339fdcde01d26" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x714213a080e1d2988acadbfc5e441df5173f81bb"
+ }
+ },
+ "f9d417c0b18ff731a88a17f3b31d9d6ed1e288f1" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x065c627bc67fca3636da49c34994b6efb2adaad1"
+ }
+ },
+ "fa849bc1ece08222f4bf249ca06a6468b3de5b1a" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xb4c315d98fa6cbed10c6331e2a5e4688ed0b7f7e"
+ }
+ },
+ "fa9c2ac45638e511b06ebe051411ebdc2c4c228a" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x187dea0407359c9579adbdf1ba9fad4a92fb358c"
+ }
+ },
+ "fabaccc45975d14c53b830fd4fa0576da541d22e" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xae5837876e23fcefa0f204d7b6433966ebb854b4"
+ }
+ },
+ "fac000880bdfdbd780ffa7c4a1d5d8b4a1d87b03" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x7ab73fe69000d4087d0b9ceedfda0af8c4fe2d2b"
+ }
+ },
+ "fafa31e9b477adf7a26b651aa9913f8664e536a4" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x2652f49b5ad98503231b3befe7587c231be8a5e9"
+ }
+ },
+ "fb04fd4e715c760c91ddc0f30b000b52203f66a4" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x8692f270fea1b23b492dea1755f48cdd1dd78535"
+ }
+ },
+ "fb5d7c75f272b07450867579978314661c3e1206" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xd2e450aa145ce97dc054b1bcf391407fbf202bd6"
+ }
+ },
+ "fbdc8132551b0ed5c50b6c0f279097592b5c87ef" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x95f36953203283bc9358f396b627dc79480a8ec9"
+ }
+ },
+ "fc55e6958f11444ae56c09af726f2ec57525db58" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x692a1a4da0b418dd701f5133e2b3c5686015a3e0"
+ }
+ },
+ "fc70ade160bd76694149f3f439f5d4f78bdc483e" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x50dc3dab5836e25872ec87bb2bb30ab57a35fb0d"
+ }
+ },
+ "fc86915f4e8884b49adeb6f23a8f69e643d9db7b" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x93beac08e1b6f1ac32c5ee628bc4356feb5e54eb"
+ }
+ },
+ "fcdb751de1dc7c5246ce698b4b104016d034cfdb" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x769277251b9d3f0906a338f156238b159bc126de"
+ }
+ },
+ "fcf47e5c1414303d55afc40c75c41cf42079d560" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x2099c5bdda1d98ce3b99988d768fa9f812a21f25"
+ }
+ },
+ "fd096ec4540dacfebbabf2dd6ffd3493a09cc38f" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xd577d44f2748e151afdb1ded254c942ca9933b0c"
+ }
+ },
+ "fd09bf9b58980d6a5776bb391d8c6881bcca2ae9" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x67df3bc5f86456f2bc57f75c99a0389bca7e5851"
+ }
+ },
+ "fd0dea1a583400fc29051c8192b70022d8d92c48" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xe64dff0ba3f0eb9e054a638d4d5f6f0cb47e1e99"
+ }
+ },
+ "fd437bf9d51bac3a2757bf4b8bf38045e78d5ada" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x8fb5af158980be77e5d137ab6f9500040704109a"
+ }
+ },
+ "fd5b134edd8931ca2102693d88070dd49fc13350" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xddb6aeb5e1bb4cdb44ca3a9b979996c529d9fa3d"
+ }
+ },
+ "fd91b246a065cde3fc10edd6457b9e6c10fb386f" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xb15c7770a476be2c77c3bd50d60ea6b2cde3186e"
+ }
+ },
+ "fdc6c80a86ea555b5de26c3db49a779eea6beb0c" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xf3c5a341248911dda9d694ee74bf997365941dc0"
+ }
+ },
+ "fe4f48d16a7ec27241b987f3545423291c7cce77" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xc1ff6275aeeeacd2c79dc02f8cd5cdb44a81e6bf"
+ }
+ },
+ "fe686acb3b7cc09ec6379af828b4b3b638898130" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x31a87a9e67b2728c14767de26753f205b793c5ad"
+ }
+ },
+ "fe8d768de7a723c23583162dbef207b6dcb4fb58" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x4582048e819b7d55b3c6f47e46ef8dd8fdd12039"
+ }
+ },
+ "fed73d1755549bd523a775e81cf80a1a507eec50" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xda7555a43e7a3790290cd20a19ec19032e28a6de"
+ }
+ },
+ "ffb9bfb24fb671413a3aae05e0f21b870eeb2ab9" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x3432c3f9f90cb61e79f39d310bdc6cb8dcb3a49b"
+ }
+ },
+ "ffc4569dfb86db2e584a1138a75747dffb794466" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0x3d64e9c7cee7c3d41cfbeed851fff8642bd0200c"
+ }
+ },
+ "fff1cd2c481ce0fba0c97ef77c79227d3b67832a" : {
+ "balance" : "0x00",
+ "code" : "0x",
+ "nonce" : "0x01",
+ "storage" : {
+ "0x00" : "0xb96982fae6a70aff19c2d99c3b2adc57b151d785"
+ }
+ }
+ },
+ "postStateRoot" : "5c22bc6ec2ea240c8170de424002a2b5c93bfd2b3ac1c2cf8cb92cb5f549b17d",
+ "pre" : {
+ "095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
+ "balance" : "0x01312d00",
+ "code" : "0x602060006000396001602060006000f001600055",
+ "nonce" : "0x00",
+ "storage" : {
+ }
+ },
+ "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
+ "balance" : "0x0de0b6b3a7640000",
+ "code" : "0x",
+ "nonce" : "0x00",
+ "storage" : {
+ }
+ }
+ },
+ "transaction" : {
+ "data" : "",
+ "gasLimit" : "0x3b9aca00",
+ "gasPrice" : "0x01",
+ "nonce" : "0x00",
+ "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
+ "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
+ "value" : "0x0186a0"
+ }
}
} \ No newline at end of file
diff --git a/tests/files/StateTests/stSolidityTest.json b/tests/files/StateTests/stSolidityTest.json
index 8a2cb1bd5..c64073b5f 100644
--- a/tests/files/StateTests/stSolidityTest.json
+++ b/tests/files/StateTests/stSolidityTest.json
@@ -268,42 +268,50 @@
},
"logs" : [
],
- "out" : "0x0000000000000000000000000000000000000000000000000000000000000000",
+ "out" : "0x0000000000000000000000000000000000000000000000000000000000000001",
"post" : {
- "0000000000000000000000000000000000000000" : {
- "balance" : "0x00",
- "code" : "0x",
- "nonce" : "0x00",
- "storage" : {
- }
- },
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
"balance" : "0x0186a0",
- "code" : "0x6000357c0100000000000000000000000000000000000000000000000000000000900480633e0bca3b1461003a578063c04062261461004c57005b610042610099565b8060005260206000f35b61005461005e565b8060005260206000f35b6000610068610099565b600060006101000a81548160ff02191690830217905550600060009054906101000a900460ff169050610096565b90565b60006000600060019250825060018273ffffffffffffffffffffffffffffffffffffffff166381bda09b60206000827c010000000000000000000000000000000000000000000000000000000002600052600460006000866161da5a03f16100fd57005b505060005163ffffffff1614156101135761011c565b60009250610194565b60028173ffffffffffffffffffffffffffffffffffffffff166381bda09b60206000827c010000000000000000000000000000000000000000000000000000000002600052600460006000866161da5a03f161017457005b505060005163ffffffff16141561018a57610193565b60009250610194565b5b50509056",
- "nonce" : "0x00",
+ "code" : "0x7c010000000000000000000000000000000000000000000000000000000060003504633e0bca3b8114610039578063c0406226146100a857005b6100b55b600160008060456101ec8339604560006000f091508173ffffffffffffffffffffffffffffffffffffffff166381bda09b60206000827c010000000000000000000000000000000000000000000000000000000002600052600460006000866161da5a03f161011957005b6100bf60006100c961003d565b8060005260206000f35b8060005260206000f35b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016919091179081905560ff16919050565b505060005163ffffffff166002141561019d575b5b505090565b505060005163ffffffff1660011415610194575b60456101a7600039604560006000f090508073ffffffffffffffffffffffffffffffffffffffff166381bda09b60206000827c010000000000000000000000000000000000000000000000000000000002600052600460006000866161da5a03f16100ff57005b60009250610114565b600092506101145600603980600c6000396000f3007c0100000000000000000000000000000000000000000000000000000000600035046381bda09b8114602d57005b60026000818152602090f3603980600c6000396000f3007c0100000000000000000000000000000000000000000000000000000000600035046381bda09b8114602d57005b60016000818152602090f3",
+ "nonce" : "0x02",
"storage" : {
+ "0x00" : "0x01"
}
},
"2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
- "balance" : "0xca69",
+ "balance" : "0x01f758",
"code" : "0x",
"nonce" : "0x00",
"storage" : {
}
},
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
- "balance" : "0x02fa2617",
+ "balance" : "0x02f8f928",
"code" : "0x",
"nonce" : "0x01",
"storage" : {
}
+ },
+ "b88de88b35ecbf3c141e3caae2baf35834d18f63" : {
+ "balance" : "0x00",
+ "code" : "0x7c0100000000000000000000000000000000000000000000000000000000600035046381bda09b8114602d57005b60026000818152602090f3",
+ "nonce" : "0x00",
+ "storage" : {
+ }
+ },
+ "d2571607e241ecf590ed94b12d87c94babe36db6" : {
+ "balance" : "0x00",
+ "code" : "0x7c0100000000000000000000000000000000000000000000000000000000600035046381bda09b8114602d57005b60016000818152602090f3",
+ "nonce" : "0x00",
+ "storage" : {
+ }
}
},
- "postStateRoot" : "ed06b00015d227623175bd12a5d960281781493ea1d9fed79d6c40a20e2c6ef7",
+ "postStateRoot" : "e7f84d674881d1cfd115be59e3e390271435c0b3474a482f7add54c3fe429d85",
"pre" : {
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
"balance" : "0x0186a0",
- "code" : "0x6000357c0100000000000000000000000000000000000000000000000000000000900480633e0bca3b1461003a578063c04062261461004c57005b610042610099565b8060005260206000f35b61005461005e565b8060005260206000f35b6000610068610099565b600060006101000a81548160ff02191690830217905550600060009054906101000a900460ff169050610096565b90565b60006000600060019250825060018273ffffffffffffffffffffffffffffffffffffffff166381bda09b60206000827c010000000000000000000000000000000000000000000000000000000002600052600460006000866161da5a03f16100fd57005b505060005163ffffffff1614156101135761011c565b60009250610194565b60028173ffffffffffffffffffffffffffffffffffffffff166381bda09b60206000827c010000000000000000000000000000000000000000000000000000000002600052600460006000866161da5a03f161017457005b505060005163ffffffff16141561018a57610193565b60009250610194565b5b50509056",
+ "code" : "0x7c010000000000000000000000000000000000000000000000000000000060003504633e0bca3b8114610039578063c0406226146100a857005b6100b55b600160008060456101ec8339604560006000f091508173ffffffffffffffffffffffffffffffffffffffff166381bda09b60206000827c010000000000000000000000000000000000000000000000000000000002600052600460006000866161da5a03f161011957005b6100bf60006100c961003d565b8060005260206000f35b8060005260206000f35b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016919091179081905560ff16919050565b505060005163ffffffff166002141561019d575b5b505090565b505060005163ffffffff1660011415610194575b60456101a7600039604560006000f090508073ffffffffffffffffffffffffffffffffffffffff166381bda09b60206000827c010000000000000000000000000000000000000000000000000000000002600052600460006000866161da5a03f16100ff57005b60009250610114565b600092506101145600603980600c6000396000f3007c0100000000000000000000000000000000000000000000000000000000600035046381bda09b8114602d57005b60026000818152602090f3603980600c6000396000f3007c0100000000000000000000000000000000000000000000000000000000600035046381bda09b8114602d57005b60016000818152602090f3",
"nonce" : "0x00",
"storage" : {
}
diff --git a/tests/files/VMTests/vmArithmeticTest.json b/tests/files/VMTests/vmArithmeticTest.json
index 7c82c9d4d..88d3c1e5b 100644
--- a/tests/files/VMTests/vmArithmeticTest.json
+++ b/tests/files/VMTests/vmArithmeticTest.json
@@ -356,6 +356,8 @@
}
},
"addmod1_overflow3" : {
+ "callcreates" : [
+ ],
"env" : {
"currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
"currentDifficulty" : "0x0100",
@@ -369,11 +371,25 @@
"caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
"code" : "0x60056001600160000308600055",
"data" : "0x",
- "gas" : "0x2710",
+ "gas" : "0x0f4240",
"gasPrice" : "0x5af3107a4000",
"origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
"value" : "0x0de0b6b3a7640000"
},
+ "gas" : "0x0ef406",
+ "logs" : [
+ ],
+ "out" : "0x",
+ "post" : {
+ "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+ "balance" : "0x0de0b6b3a7640000",
+ "code" : "0x60056001600160000308600055",
+ "nonce" : "0x00",
+ "storage" : {
+ "0x00" : "0x01"
+ }
+ }
+ },
"pre" : {
"0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
"balance" : "0x0de0b6b3a7640000",
@@ -385,6 +401,8 @@
}
},
"addmod1_overflow4" : {
+ "callcreates" : [
+ ],
"env" : {
"currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
"currentDifficulty" : "0x0100",
@@ -398,11 +416,25 @@
"caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
"code" : "0x60056002600160000308600055",
"data" : "0x",
- "gas" : "0x2710",
+ "gas" : "0x0f4240",
"gasPrice" : "0x5af3107a4000",
"origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
"value" : "0x0de0b6b3a7640000"
},
+ "gas" : "0x0ef406",
+ "logs" : [
+ ],
+ "out" : "0x",
+ "post" : {
+ "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+ "balance" : "0x0de0b6b3a7640000",
+ "code" : "0x60056002600160000308600055",
+ "nonce" : "0x00",
+ "storage" : {
+ "0x00" : "0x02"
+ }
+ }
+ },
"pre" : {
"0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
"balance" : "0x0de0b6b3a7640000",
@@ -414,6 +446,8 @@
}
},
"addmod1_overflowDiff" : {
+ "callcreates" : [
+ ],
"env" : {
"currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
"currentDifficulty" : "0x0100",
@@ -427,11 +461,25 @@
"caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
"code" : "0x60056002600003600160000308600055",
"data" : "0x",
- "gas" : "0x2710",
+ "gas" : "0x0f4240",
"gasPrice" : "0x5af3107a4000",
"origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
"value" : "0x0de0b6b3a7640000"
},
+ "gas" : "0x0ef400",
+ "logs" : [
+ ],
+ "out" : "0x",
+ "post" : {
+ "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+ "balance" : "0x0de0b6b3a7640000",
+ "code" : "0x60056002600003600160000308600055",
+ "nonce" : "0x00",
+ "storage" : {
+ "0x00" : "0x04"
+ }
+ }
+ },
"pre" : {
"0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
"balance" : "0x0de0b6b3a7640000",
@@ -842,6 +890,51 @@
}
}
},
+ "addmodDivByZero3" : {
+ "callcreates" : [
+ ],
+ "env" : {
+ "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+ "currentDifficulty" : "0x0100",
+ "currentGasLimit" : "0x0f4240",
+ "currentNumber" : "0x00",
+ "currentTimestamp" : "0x01",
+ "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+ },
+ "exec" : {
+ "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+ "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+ "code" : "0x60016000600060000803600055",
+ "data" : "0x",
+ "gas" : "0x0186a0",
+ "gasPrice" : "0x5af3107a4000",
+ "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+ "value" : "0x0de0b6b3a7640000"
+ },
+ "gas" : "0x013866",
+ "logs" : [
+ ],
+ "out" : "0x",
+ "post" : {
+ "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+ "balance" : "0x0de0b6b3a7640000",
+ "code" : "0x60016000600060000803600055",
+ "nonce" : "0x00",
+ "storage" : {
+ "0x00" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
+ }
+ }
+ },
+ "pre" : {
+ "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+ "balance" : "0x0de0b6b3a7640000",
+ "code" : "0x60016000600060000803600055",
+ "nonce" : "0x00",
+ "storage" : {
+ }
+ }
+ }
+ },
"arith1" : {
"callcreates" : [
],
@@ -1152,6 +1245,51 @@
}
}
},
+ "divByZero_2" : {
+ "callcreates" : [
+ ],
+ "env" : {
+ "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+ "currentDifficulty" : "0x0100",
+ "currentGasLimit" : "0x0f4240",
+ "currentNumber" : "0x00",
+ "currentTimestamp" : "0x01",
+ "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+ },
+ "exec" : {
+ "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+ "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+ "code" : "0x60076000600d0401600055",
+ "data" : "0x",
+ "gas" : "0x0186a0",
+ "gasPrice" : "0x5af3107a4000",
+ "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+ "value" : "0x0de0b6b3a7640000"
+ },
+ "gas" : "0x01386c",
+ "logs" : [
+ ],
+ "out" : "0x",
+ "post" : {
+ "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+ "balance" : "0x0de0b6b3a7640000",
+ "code" : "0x60076000600d0401600055",
+ "nonce" : "0x00",
+ "storage" : {
+ "0x00" : "0x07"
+ }
+ }
+ },
+ "pre" : {
+ "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+ "balance" : "0x0de0b6b3a7640000",
+ "code" : "0x60076000600d0401600055",
+ "nonce" : "0x00",
+ "storage" : {
+ }
+ }
+ }
+ },
"exp0" : {
"callcreates" : [
],
@@ -5498,6 +5636,51 @@
}
}
},
+ "modByZero" : {
+ "callcreates" : [
+ ],
+ "env" : {
+ "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+ "currentDifficulty" : "0x0100",
+ "currentGasLimit" : "0x0f4240",
+ "currentNumber" : "0x00",
+ "currentTimestamp" : "0x01",
+ "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+ },
+ "exec" : {
+ "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+ "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+ "code" : "0x6001600060030603600055",
+ "data" : "0x",
+ "gas" : "0x0186a0",
+ "gasPrice" : "0x5af3107a4000",
+ "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+ "value" : "0x0de0b6b3a7640000"
+ },
+ "gas" : "0x01386c",
+ "logs" : [
+ ],
+ "out" : "0x",
+ "post" : {
+ "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+ "balance" : "0x0de0b6b3a7640000",
+ "code" : "0x6001600060030603600055",
+ "nonce" : "0x00",
+ "storage" : {
+ "0x00" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
+ }
+ }
+ },
+ "pre" : {
+ "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+ "balance" : "0x0de0b6b3a7640000",
+ "code" : "0x6001600060030603600055",
+ "nonce" : "0x00",
+ "storage" : {
+ }
+ }
+ }
+ },
"mul0" : {
"callcreates" : [
],
@@ -6017,6 +6200,8 @@
}
},
"mulmod1_overflow2" : {
+ "callcreates" : [
+ ],
"env" : {
"currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
"currentDifficulty" : "0x0100",
@@ -6030,11 +6215,25 @@
"caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
"code" : "0x600560027f800000000000000000000000000000000000000000000000000000000000000009600055",
"data" : "0x",
- "gas" : "0x2710",
+ "gas" : "0x0f4240",
"gasPrice" : "0x5af3107a4000",
"origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
"value" : "0x0de0b6b3a7640000"
},
+ "gas" : "0x0ef40c",
+ "logs" : [
+ ],
+ "out" : "0x",
+ "post" : {
+ "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+ "balance" : "0x0de0b6b3a7640000",
+ "code" : "0x600560027f800000000000000000000000000000000000000000000000000000000000000009600055",
+ "nonce" : "0x00",
+ "storage" : {
+ "0x00" : "0x01"
+ }
+ }
+ },
"pre" : {
"0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
"balance" : "0x0de0b6b3a7640000",
@@ -6046,6 +6245,8 @@
}
},
"mulmod1_overflow3" : {
+ "callcreates" : [
+ ],
"env" : {
"currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
"currentDifficulty" : "0x0100",
@@ -6059,11 +6260,25 @@
"caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
"code" : "0x600560027f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff09600055",
"data" : "0x",
- "gas" : "0x2710",
+ "gas" : "0x0f4240",
"gasPrice" : "0x5af3107a4000",
"origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
"value" : "0x0de0b6b3a7640000"
},
+ "gas" : "0x0ef40c",
+ "logs" : [
+ ],
+ "out" : "0x",
+ "post" : {
+ "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+ "balance" : "0x0de0b6b3a7640000",
+ "code" : "0x600560027f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff09600055",
+ "nonce" : "0x00",
+ "storage" : {
+ "0x00" : "0x04"
+ }
+ }
+ },
"pre" : {
"0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
"balance" : "0x0de0b6b3a7640000",
@@ -6075,6 +6290,8 @@
}
},
"mulmod1_overflow4" : {
+ "callcreates" : [
+ ],
"env" : {
"currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
"currentDifficulty" : "0x0100",
@@ -6088,11 +6305,25 @@
"caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
"code" : "0x600560027f800000000000000000000000000000000000000000000000000000000000000109600055",
"data" : "0x",
- "gas" : "0x2710",
+ "gas" : "0x0f4240",
"gasPrice" : "0x5af3107a4000",
"origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
"value" : "0x0de0b6b3a7640000"
},
+ "gas" : "0x0ef40c",
+ "logs" : [
+ ],
+ "out" : "0x",
+ "post" : {
+ "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+ "balance" : "0x0de0b6b3a7640000",
+ "code" : "0x600560027f800000000000000000000000000000000000000000000000000000000000000109600055",
+ "nonce" : "0x00",
+ "storage" : {
+ "0x00" : "0x03"
+ }
+ }
+ },
"pre" : {
"0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
"balance" : "0x0de0b6b3a7640000",
@@ -6502,6 +6733,51 @@
}
}
},
+ "mulmoddivByZero3" : {
+ "callcreates" : [
+ ],
+ "env" : {
+ "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+ "currentDifficulty" : "0x0100",
+ "currentGasLimit" : "0x0f4240",
+ "currentNumber" : "0x00",
+ "currentTimestamp" : "0x01",
+ "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+ },
+ "exec" : {
+ "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+ "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+ "code" : "0x60006000600009600103600055",
+ "data" : "0x",
+ "gas" : "0x0186a0",
+ "gasPrice" : "0x5af3107a4000",
+ "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+ "value" : "0x0de0b6b3a7640000"
+ },
+ "gas" : "0x013866",
+ "logs" : [
+ ],
+ "out" : "0x",
+ "post" : {
+ "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+ "balance" : "0x0de0b6b3a7640000",
+ "code" : "0x60006000600009600103600055",
+ "nonce" : "0x00",
+ "storage" : {
+ "0x00" : "0x01"
+ }
+ }
+ },
+ "pre" : {
+ "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+ "balance" : "0x0de0b6b3a7640000",
+ "code" : "0x60006000600009600103600055",
+ "nonce" : "0x00",
+ "storage" : {
+ }
+ }
+ }
+ },
"not1" : {
"callcreates" : [
],
@@ -7081,6 +7357,51 @@
}
}
},
+ "sdivByZero2" : {
+ "callcreates" : [
+ ],
+ "env" : {
+ "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+ "currentDifficulty" : "0x0100",
+ "currentGasLimit" : "0x0f4240",
+ "currentNumber" : "0x00",
+ "currentTimestamp" : "0x01",
+ "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+ },
+ "exec" : {
+ "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+ "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+ "code" : "0x600160007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffcf923bdff6000030501600055",
+ "data" : "0x",
+ "gas" : "0x0186a0",
+ "gasPrice" : "0x5af3107a4000",
+ "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+ "value" : "0x0de0b6b3a7640000"
+ },
+ "gas" : "0x013866",
+ "logs" : [
+ ],
+ "out" : "0x",
+ "post" : {
+ "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+ "balance" : "0x0de0b6b3a7640000",
+ "code" : "0x600160007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffcf923bdff6000030501600055",
+ "nonce" : "0x00",
+ "storage" : {
+ "0x00" : "0x01"
+ }
+ }
+ },
+ "pre" : {
+ "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+ "balance" : "0x0de0b6b3a7640000",
+ "code" : "0x600160007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffcf923bdff6000030501600055",
+ "nonce" : "0x00",
+ "storage" : {
+ }
+ }
+ }
+ },
"sdiv_dejavu" : {
"callcreates" : [
],
@@ -8109,6 +8430,8 @@
}
},
"smod6" : {
+ "callcreates" : [
+ ],
"env" : {
"currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
"currentDifficulty" : "0x0100",
@@ -8122,11 +8445,25 @@
"caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
"code" : "0x7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60000307600055",
"data" : "0x",
- "gas" : "0x2710",
+ "gas" : "0x0186a0",
"gasPrice" : "0x5af3107a4000",
"origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
"value" : "0x0de0b6b3a7640000"
},
+ "gas" : "0x01386c",
+ "logs" : [
+ ],
+ "out" : "0x",
+ "post" : {
+ "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+ "balance" : "0x0de0b6b3a7640000",
+ "code" : "0x7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60000307600055",
+ "nonce" : "0x00",
+ "storage" : {
+ "0x00" : "0x01"
+ }
+ }
+ },
"pre" : {
"0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
"balance" : "0x0de0b6b3a7640000",
@@ -8181,6 +8518,140 @@
}
}
},
+ "smod8_byZero" : {
+ "callcreates" : [
+ ],
+ "env" : {
+ "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+ "currentDifficulty" : "0x0100",
+ "currentGasLimit" : "0x0f4240",
+ "currentNumber" : "0x00",
+ "currentTimestamp" : "0x01",
+ "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+ },
+ "exec" : {
+ "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+ "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+ "code" : "0x600d600060c86000030703600055",
+ "data" : "0x",
+ "gas" : "0x0186a0",
+ "gasPrice" : "0x5af3107a4000",
+ "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+ "value" : "0x0de0b6b3a7640000"
+ },
+ "gas" : "0x013866",
+ "logs" : [
+ ],
+ "out" : "0x",
+ "post" : {
+ "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+ "balance" : "0x0de0b6b3a7640000",
+ "code" : "0x600d600060c86000030703600055",
+ "nonce" : "0x00",
+ "storage" : {
+ "0x00" : "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3"
+ }
+ }
+ },
+ "pre" : {
+ "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+ "balance" : "0x0de0b6b3a7640000",
+ "code" : "0x600d600060c86000030703600055",
+ "nonce" : "0x00",
+ "storage" : {
+ }
+ }
+ }
+ },
+ "smod_i256min1" : {
+ "callcreates" : [
+ ],
+ "env" : {
+ "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+ "currentDifficulty" : "0x0100",
+ "currentGasLimit" : "0x0f4240",
+ "currentNumber" : "0x00",
+ "currentTimestamp" : "0x01",
+ "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+ },
+ "exec" : {
+ "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+ "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+ "code" : "0x60016000037f800000000000000000000000000000000000000000000000000000000000000060000307600055",
+ "data" : "0x",
+ "gas" : "0x0186a0",
+ "gasPrice" : "0x5af3107a4000",
+ "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+ "value" : "0x0de0b6b3a7640000"
+ },
+ "gas" : "0x0172fe",
+ "logs" : [
+ ],
+ "out" : "0x",
+ "post" : {
+ "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+ "balance" : "0x0de0b6b3a7640000",
+ "code" : "0x60016000037f800000000000000000000000000000000000000000000000000000000000000060000307600055",
+ "nonce" : "0x00",
+ "storage" : {
+ }
+ }
+ },
+ "pre" : {
+ "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+ "balance" : "0x0de0b6b3a7640000",
+ "code" : "0x60016000037f800000000000000000000000000000000000000000000000000000000000000060000307600055",
+ "nonce" : "0x00",
+ "storage" : {
+ }
+ }
+ }
+ },
+ "smod_i256min2" : {
+ "callcreates" : [
+ ],
+ "env" : {
+ "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
+ "currentDifficulty" : "0x0100",
+ "currentGasLimit" : "0x0f4240",
+ "currentNumber" : "0x00",
+ "currentTimestamp" : "0x01",
+ "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
+ },
+ "exec" : {
+ "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6",
+ "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+ "code" : "0x600160016000037f80000000000000000000000000000000000000000000000000000000000000006000030703600055",
+ "data" : "0x",
+ "gas" : "0x0186a0",
+ "gasPrice" : "0x5af3107a4000",
+ "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681",
+ "value" : "0x0de0b6b3a7640000"
+ },
+ "gas" : "0x013860",
+ "logs" : [
+ ],
+ "out" : "0x",
+ "post" : {
+ "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+ "balance" : "0x0de0b6b3a7640000",
+ "code" : "0x600160016000037f80000000000000000000000000000000000000000000000000000000000000006000030703600055",
+ "nonce" : "0x00",
+ "storage" : {
+ "0x00" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
+ }
+ }
+ },
+ "pre" : {
+ "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
+ "balance" : "0x0de0b6b3a7640000",
+ "code" : "0x600160016000037f80000000000000000000000000000000000000000000000000000000000000006000030703600055",
+ "nonce" : "0x00",
+ "storage" : {
+ }
+ }
+ }
+ },
"stop" : {
"callcreates" : [
],
diff --git a/tests/vm/gh_test.go b/tests/vm/gh_test.go
index 838050fa1..68eb4cb45 100644
--- a/tests/vm/gh_test.go
+++ b/tests/vm/gh_test.go
@@ -4,6 +4,7 @@ import (
"bytes"
"io/ioutil"
"math/big"
+ "os"
"path/filepath"
"strconv"
"testing"
@@ -87,7 +88,7 @@ func RunVmTest(p string, t *testing.T) {
vm.Debug = true
glog.SetV(4)
glog.SetToStderr(true)
- if name != "stackLimitPush32_1024" {
+ if name != "Call50000_sha256" {
continue
}
*/
@@ -128,9 +129,15 @@ func RunVmTest(p string, t *testing.T) {
ret, logs, gas, err = helper.RunState(statedb, env, test.Transaction)
}
- rexp := helper.FromHex(test.Out)
- if bytes.Compare(rexp, ret) != 0 {
- t.Errorf("%s's return failed. Expected %x, got %x\n", name, rexp, ret)
+ switch name {
+ // the memory required for these tests (4294967297 bytes) would take too much time.
+ // on 19 May 2015 decided to skip these tests their output.
+ case "mload32bitBound_return", "mload32bitBound_return2":
+ default:
+ rexp := helper.FromHex(test.Out)
+ if bytes.Compare(rexp, ret) != 0 {
+ t.Errorf("%s's return failed. Expected %x, got %x\n", name, rexp, ret)
+ }
}
if isVmTest {
@@ -246,8 +253,7 @@ func TestLogTest(t *testing.T) {
}
func TestPerformance(t *testing.T) {
- t.Skip()
- const fn = "../files/VMTests/vmPerformance.json"
+ const fn = "../files/VMTests/vmPerformanceTest.json"
RunVmTest(fn, t)
}
@@ -281,13 +287,13 @@ func TestInputLimitsLight(t *testing.T) {
RunVmTest(fn, t)
}
-func TestStateExample(t *testing.T) {
- const fn = "../files/StateTests/stExample.json"
+func TestStateSystemOperations(t *testing.T) {
+ const fn = "../files/StateTests/stSystemOperationsTest.json"
RunVmTest(fn, t)
}
-func TestStateSystemOperations(t *testing.T) {
- const fn = "../files/StateTests/stSystemOperationsTest.json"
+func TestStateExample(t *testing.T) {
+ const fn = "../files/StateTests/stExample.json"
RunVmTest(fn, t)
}
@@ -342,13 +348,17 @@ func TestMemory(t *testing.T) {
}
func TestMemoryStress(t *testing.T) {
- t.Skip("Skipped due to...consuming too much memory :D")
+ if os.Getenv("TEST_VM_COMPLEX") == "" {
+ t.Skip()
+ }
const fn = "../files/StateTests/stMemoryStressTest.json"
RunVmTest(fn, t)
}
func TestQuadraticComplexity(t *testing.T) {
- t.Skip() // takes too long
+ if os.Getenv("TEST_VM_COMPLEX") == "" {
+ t.Skip()
+ }
const fn = "../files/StateTests/stQuadraticComplexityTest.json"
RunVmTest(fn, t)
}
diff --git a/xeth/xeth.go b/xeth/xeth.go
index 88cd30afc..157fe76c7 100644
--- a/xeth/xeth.go
+++ b/xeth/xeth.go
@@ -28,6 +28,7 @@ var (
filterTickerTime = 5 * time.Minute
defaultGasPrice = big.NewInt(10000000000000) //150000000000
defaultGas = big.NewInt(90000) //500000
+ dappStorePre = []byte("dapp-")
)
// byte will be inferred
@@ -66,12 +67,16 @@ type XEth struct {
// regmut sync.Mutex
// register map[string][]*interface{} // TODO improve return type
- solcPath string
- solc *compiler.Solidity
-
agent *miner.RemoteAgent
}
+func NewTest(eth *eth.Ethereum, frontend Frontend) *XEth {
+ return &XEth{
+ backend: eth,
+ frontend: frontend,
+ }
+}
+
// New creates an XEth that uses the given frontend.
// If a nil Frontend is provided, a default frontend which
// confirms all transactions will be used.
@@ -304,6 +309,8 @@ func (self *XEth) EthBlockByHash(strHash string) *types.Block {
}
func (self *XEth) EthTransactionByHash(hash string) (tx *types.Transaction, blhash common.Hash, blnum *big.Int, txi uint64) {
+ // Due to increasing return params and need to determine if this is from transaction pool or
+ // some chain, this probably needs to be refactored for more expressiveness
data, _ := self.backend.ExtraDb().Get(common.FromHex(hash))
if len(data) != 0 {
tx = types.NewTransactionFromBytes(data)
@@ -348,6 +355,24 @@ func (self *XEth) CurrentBlock() *types.Block {
return self.backend.ChainManager().CurrentBlock()
}
+func (self *XEth) GetBlockReceipts(bhash common.Hash) (receipts types.Receipts, err error) {
+ return self.backend.BlockProcessor().GetBlockReceipts(bhash)
+}
+
+func (self *XEth) GetTxReceipt(txhash common.Hash) (receipt *types.Receipt, err error) {
+ _, bhash, _, txi := self.EthTransactionByHash(common.ToHex(txhash[:]))
+ var receipts types.Receipts
+ receipts, err = self.backend.BlockProcessor().GetBlockReceipts(bhash)
+ if err == nil {
+ if txi < uint64(len(receipts)) {
+ receipt = receipts[txi]
+ } else {
+ err = fmt.Errorf("Invalid tx index")
+ }
+ }
+ return
+}
+
func (self *XEth) GasLimit() *big.Int {
return self.backend.ChainManager().GasLimit()
}
@@ -357,7 +382,7 @@ func (self *XEth) Block(v interface{}) *Block {
return self.BlockByNumber(int64(n))
} else if str, ok := v.(string); ok {
return self.BlockByHash(str)
- } else if f, ok := v.(float64); ok { // Don't ask ...
+ } else if f, ok := v.(float64); ok { // JSON numbers are represented as float64
return self.BlockByNumber(int64(f))
}
@@ -377,27 +402,24 @@ func (self *XEth) Accounts() []string {
// accessor for solidity compiler.
// memoized if available, retried on-demand if not
func (self *XEth) Solc() (*compiler.Solidity, error) {
- var err error
- if self.solc == nil {
- self.solc, err = compiler.New(self.solcPath)
- }
- return self.solc, err
+ return self.backend.Solc()
}
// set in js console via admin interface or wrapper from cli flags
func (self *XEth) SetSolc(solcPath string) (*compiler.Solidity, error) {
- self.solcPath = solcPath
- self.solc = nil
+ self.backend.SetSolc(solcPath)
return self.Solc()
}
+// store DApp value in extra database
func (self *XEth) DbPut(key, val []byte) bool {
- self.backend.ExtraDb().Put(key, val)
+ self.backend.ExtraDb().Put(append(dappStorePre, key...), val)
return true
}
+// retrieve DApp value from extra database
func (self *XEth) DbGet(key []byte) ([]byte, error) {
- val, err := self.backend.ExtraDb().Get(key)
+ val, err := self.backend.ExtraDb().Get(append(dappStorePre, key...))
return val, err
}
@@ -778,7 +800,7 @@ func (self *XEth) PushTx(encodedTx string) (string, error) {
}
func (self *XEth) Call(fromStr, toStr, valueStr, gasStr, gasPriceStr, dataStr string) (string, string, error) {
- statedb := self.State().State().Copy() //self.eth.ChainManager().TransState()
+ statedb := self.State().State().Copy()
var from *state.StateObject
if len(fromStr) == 0 {
accounts, err := self.backend.AccountManager().Accounts()
@@ -862,13 +884,14 @@ func (self *XEth) Transact(fromStr, toStr, nonceStr, valueStr, gasStr, gasPriceS
var (
from = common.HexToAddress(fromStr)
to = common.HexToAddress(toStr)
- value = common.NewValue(valueStr)
+ value = common.Big(valueStr)
gas = common.Big(gasStr)
price = common.Big(gasPriceStr)
data []byte
contractCreation bool
)
+ // 2015-05-18 Is this still needed?
// TODO if no_private_key then
//if _, exists := p.register[args.From]; exists {
// p.register[args.From] = append(p.register[args.From], args)
@@ -908,9 +931,9 @@ func (self *XEth) Transact(fromStr, toStr, nonceStr, valueStr, gasStr, gasPriceS
var tx *types.Transaction
if contractCreation {
- tx = types.NewContractCreationTx(value.BigInt(), gas, price, data)
+ tx = types.NewContractCreationTx(value, gas, price, data)
} else {
- tx = types.NewTransactionMessage(to, value.BigInt(), gas, price, data)
+ tx = types.NewTransactionMessage(to, value, gas, price, data)
}
state := self.backend.ChainManager().TxState()
@@ -924,9 +947,11 @@ func (self *XEth) Transact(fromStr, toStr, nonceStr, valueStr, gasStr, gasPriceS
tx.SetNonce(nonce)
if err := self.sign(tx, from, false); err != nil {
+ state.RemoveNonce(from, tx.Nonce())
return "", err
}
if err := self.backend.TxPool().Add(tx); err != nil {
+ state.RemoveNonce(from, tx.Nonce())
return "", err
}