From 73c4ca3a6fcf948f4bc637f5c1b55277cf64c06f Mon Sep 17 00:00:00 2001 From: obscuren Date: Thu, 4 Dec 2014 15:31:48 +0100 Subject: [PATCH 01/79] Upped protocol version --- block_pool.go | 5 ++--- cmd/ethereum/main.go | 2 +- cmd/mist/main.go | 2 +- peer.go | 1 - 4 files changed, 4 insertions(+), 6 deletions(-) diff --git a/block_pool.go b/block_pool.go index 95c766e53..d1be70187 100644 --- a/block_pool.go +++ b/block_pool.go @@ -88,7 +88,7 @@ func (self *BlockPool) FetchHashes(peer *Peer) bool { if (self.peer == nil && peer.td.Cmp(highestTd) >= 0) || (self.peer != nil && peer.td.Cmp(self.peer.td) > 0) || self.peer == peer { if self.peer != peer { - poollogger.Debugf("Found better suitable peer (%v vs %v)\n", self.td, peer.td) + poollogger.Infof("Found better suitable peer (%v vs %v)\n", self.td, peer.td) if self.peer != nil { self.peer.doneFetchingHashes = true @@ -99,8 +99,7 @@ func (self *BlockPool) FetchHashes(peer *Peer) bool { self.td = peer.td if !self.HasLatestHash() { - peer.doneFetchingHashes = false - + peer.doneFetchingHashes = fInfo const amount = 256 peerlogger.Debugf("Fetching hashes (%d) %x...\n", amount, peer.lastReceivedHash[0:4]) peer.QueueMessage(wire.NewMessage(wire.MsgGetBlockHashesTy, []interface{}{peer.lastReceivedHash, uint32(amount)})) diff --git a/cmd/ethereum/main.go b/cmd/ethereum/main.go index c39f904fb..14921bf10 100644 --- a/cmd/ethereum/main.go +++ b/cmd/ethereum/main.go @@ -30,7 +30,7 @@ import ( const ( ClientIdentifier = "Ethereum(G)" - Version = "0.7.7" + Version = "0.7.8" ) var clilogger = logger.NewLogger("CLI") diff --git a/cmd/mist/main.go b/cmd/mist/main.go index 8c46de6d9..5503097f2 100644 --- a/cmd/mist/main.go +++ b/cmd/mist/main.go @@ -31,7 +31,7 @@ import ( const ( ClientIdentifier = "Mist" - Version = "0.7.7" + Version = "0.7.8" ) var ethereum *eth.Ethereum diff --git a/peer.go b/peer.go index bf84f6e35..3b39e45c7 100644 --- a/peer.go +++ b/peer.go @@ -756,7 +756,6 @@ func (p *Peer) handleHandshake(msg *wire.Msg) { // Check correctness of p2p protocol version if p2pVersion != P2PVersion { - fmt.Println(p) peerlogger.Debugf("Invalid P2P version. Require protocol %d, received %d\n", P2PVersion, p2pVersion) p.Stop() return From 73123bf257934e95e08311d4af9b3382f3dcdb39 Mon Sep 17 00:00:00 2001 From: obscuren Date: Thu, 4 Dec 2014 15:35:21 +0100 Subject: [PATCH 02/79] Only set TD if it's actually higher --- core/chain_manager.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/core/chain_manager.go b/core/chain_manager.go index 7acd171ec..7d4aeaab6 100644 --- a/core/chain_manager.go +++ b/core/chain_manager.go @@ -267,7 +267,10 @@ func (self *ChainManager) InsertChain(chain types.Blocks) error { } self.add(block) - self.SetTotalDifficulty(td) + if td.Cmp(self.TD) > 0 { + self.SetTotalDifficulty(td) + } + self.eventMux.Post(NewBlockEvent{block}) self.eventMux.Post(messages) } From 565389815040d518529b973d4a6fc38c08e43e5a Mon Sep 17 00:00:00 2001 From: obscuren Date: Thu, 4 Dec 2014 15:38:41 +0100 Subject: [PATCH 03/79] vim error :S --- block_pool.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/block_pool.go b/block_pool.go index d1be70187..595400c79 100644 --- a/block_pool.go +++ b/block_pool.go @@ -99,7 +99,8 @@ func (self *BlockPool) FetchHashes(peer *Peer) bool { self.td = peer.td if !self.HasLatestHash() { - peer.doneFetchingHashes = fInfo + peer.doneFetchingHashes = false + const amount = 256 peerlogger.Debugf("Fetching hashes (%d) %x...\n", amount, peer.lastReceivedHash[0:4]) peer.QueueMessage(wire.NewMessage(wire.MsgGetBlockHashesTy, []interface{}{peer.lastReceivedHash, uint32(amount)})) From 8c7e4b290fbdfe2c0da451aef03b94bec3c95e4c Mon Sep 17 00:00:00 2001 From: obscuren Date: Thu, 4 Dec 2014 16:44:14 +0100 Subject: [PATCH 04/79] Added pre processing of transaction on the transient state --- xeth/pipe.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/xeth/pipe.go b/xeth/pipe.go index 6da92cd23..2ca8134ce 100644 --- a/xeth/pipe.go +++ b/xeth/pipe.go @@ -136,11 +136,17 @@ func (self *XEth) Transact(key *crypto.KeyPair, to []byte, value, gas, price *et tx.Nonce = nonce tx.Sign(key.PrivateKey) + + // Do some pre processing for our "pre" events and hooks + block := self.blockChain.NewBlock(key.Address()) + coinbase := state.GetStateObject(key.Address()) + coinbase.SetGasPool(block.GasLimit) + self.blockManager.ApplyTransactions(coinbase, state, block, types.Transactions{tx}, true) + err := self.obj.TxPool().Add(tx) if err != nil { return nil, err } - state.SetNonce(key.Address(), nonce+1) if contractCreation { From a5b27bbc10d6a145152fc2629043c46ef4a9ca71 Mon Sep 17 00:00:00 2001 From: obscuren Date: Thu, 4 Dec 2014 16:44:43 +0100 Subject: [PATCH 05/79] Improved and simplified wallet functions and behaviour --- cmd/mist/assets/qml/views/wallet.qml | 17 ++++++++++++---- cmd/mist/gui.go | 29 +++++++--------------------- core/block_manager.go | 10 ++++++---- core/transaction_pool.go | 2 +- miner/miner.go | 2 +- 5 files changed, 28 insertions(+), 32 deletions(-) diff --git a/cmd/mist/assets/qml/views/wallet.qml b/cmd/mist/assets/qml/views/wallet.qml index 9ffb1024d..ad7a11047 100644 --- a/cmd/mist/assets/qml/views/wallet.qml +++ b/cmd/mist/assets/qml/views/wallet.qml @@ -155,10 +155,14 @@ Rectangle { model: ListModel { id: txModel Component.onCompleted: { - var filter = ethx.watch({latest: -1, from: eth.key().address}); - filter.changed(addTxs) + var me = eth.key().address; + var filterTo = ethx.watch({latest: -1, to: me}); + var filterFrom = ethx.watch({latest: -1, from: me}); + filterTo.changed(addTxs) + filterFrom.changed(addTxs) - addTxs(filter.messages()) + addTxs(filterTo.messages()) + addTxs(filterFrom.messages()) } function addTxs(messages) { @@ -167,7 +171,12 @@ Rectangle { for(var i = 0; i < messages.length; i++) { var message = messages.get(i); var to = eth.lookupName(message.to); - var from = eth.lookupName(message.from); + var from; + if(message.from.length == 0) { + from = "- MINED -"; + } else { + from = eth.lookupName(message.from); + } txModel.insert(0, {num: txModel.count, from: from, to: to, value: eth.numberToHuman(message.value)}) } } diff --git a/cmd/mist/gui.go b/cmd/mist/gui.go index e58e349d1..6a28b48f9 100644 --- a/cmd/mist/gui.go +++ b/cmd/mist/gui.go @@ -404,7 +404,6 @@ func (gui *Gui) update() { state := gui.eth.BlockManager().TransState() - unconfirmedFunds := new(big.Int) gui.win.Root().Call("setWalletValue", fmt.Sprintf("%v", ethutil.CurrencyToString(state.GetAccount(gui.address()).Balance()))) lastBlockLabel := gui.getObjectByName("lastBlockLabel") @@ -438,15 +437,15 @@ func (gui *Gui) update() { case core.TxPreEvent: tx := ev.Tx - object := state.GetAccount(gui.address()) - if bytes.Compare(tx.Sender(), gui.address()) == 0 { - unconfirmedFunds.Sub(unconfirmedFunds, tx.Value) - } else if bytes.Compare(tx.Recipient, gui.address()) == 0 { - unconfirmedFunds.Add(unconfirmedFunds, tx.Value) - } + tstate := gui.eth.BlockManager().TransState() + cstate := gui.eth.BlockManager().CurrentState() - gui.setWalletValue(object.Balance(), unconfirmedFunds) + taccount := tstate.GetAccount(gui.address()) + caccount := cstate.GetAccount(gui.address()) + unconfirmedFunds := new(big.Int).Sub(taccount.Balance(), caccount.Balance()) + + gui.setWalletValue(taccount.Balance(), unconfirmedFunds) gui.insertTransaction("pre", tx) case core.TxPostEvent: @@ -456,32 +455,18 @@ func (gui *Gui) update() { if bytes.Compare(tx.Sender(), gui.address()) == 0 { object.SubAmount(tx.Value) - //gui.getObjectByName("transactionView").Call("addTx", xeth.NewJSTx(tx), "send") gui.txDb.Put(tx.Hash(), tx.RlpEncode()) } else if bytes.Compare(tx.Recipient, gui.address()) == 0 { object.AddAmount(tx.Value) - //gui.getObjectByName("transactionView").Call("addTx", xeth.NewJSTx(tx), "recv") gui.txDb.Put(tx.Hash(), tx.RlpEncode()) } gui.setWalletValue(object.Balance(), nil) state.UpdateStateObject(object) - // case object: - // gui.loadAddressBook() - case eth.PeerListEvent: gui.setPeerInfo() - - /* - case miner.Event: - if ev.Type == miner.Started { - gui.miner = ev.Miner - } else { - gui.miner = nil - } - */ } case <-peerUpdateTicker.C: diff --git a/core/block_manager.go b/core/block_manager.go index c2ffc7ae0..b648166ec 100644 --- a/core/block_manager.go +++ b/core/block_manager.go @@ -123,7 +123,7 @@ func (sm *BlockManager) TransitionState(statedb *state.StateDB, parent, block *t coinbase.SetGasPool(block.CalcGasLimit(parent)) // Process the transactions on to current block - receipts, _, _, _, err = sm.ProcessTransactions(coinbase, statedb, block, parent, block.Transactions()) + receipts, _, _, _, err = sm.ApplyTransactions(coinbase, statedb, block, block.Transactions(), false) if err != nil { return nil, err } @@ -131,7 +131,7 @@ func (sm *BlockManager) TransitionState(statedb *state.StateDB, parent, block *t return receipts, nil } -func (self *BlockManager) ProcessTransactions(coinbase *state.StateObject, state *state.StateDB, block, parent *types.Block, txs types.Transactions) (types.Receipts, types.Transactions, types.Transactions, types.Transactions, error) { +func (self *BlockManager) ApplyTransactions(coinbase *state.StateObject, state *state.StateDB, block *types.Block, txs types.Transactions, transientProcess bool) (types.Receipts, types.Transactions, types.Transactions, types.Transactions, error) { var ( receipts types.Receipts handled, unhandled types.Transactions @@ -180,7 +180,9 @@ done: receipt.Bloom = types.CreateBloom(types.Receipts{receipt}) // Notify all subscribers - go self.eth.EventMux().Post(TxPostEvent{tx}) + if !transientProcess { + go self.eth.EventMux().Post(TxPostEvent{tx}) + } receipts = append(receipts, receipt) handled = append(handled, tx) @@ -378,7 +380,7 @@ func (sm *BlockManager) AccumelateRewards(statedb *state.StateDB, block, parent account.AddAmount(reward) statedb.Manifest().AddMessage(&state.Message{ - To: block.Coinbase, From: block.Coinbase, + To: block.Coinbase, Input: nil, Origin: nil, Block: block.Hash(), Timestamp: block.Time, Coinbase: block.Coinbase, Number: block.Number, diff --git a/core/transaction_pool.go b/core/transaction_pool.go index abacb14f1..c48d3d8a4 100644 --- a/core/transaction_pool.go +++ b/core/transaction_pool.go @@ -164,7 +164,7 @@ func (self *TxPool) Add(tx *types.Transaction) error { txplogger.Debugf("(t) %x => %x (%v) %x\n", tx.Sender()[:4], tmp, tx.Value, tx.Hash()) // Notify the subscribers - self.Ethereum.EventMux().Post(TxPreEvent{tx}) + go self.Ethereum.EventMux().Post(TxPreEvent{tx}) return nil } diff --git a/miner/miner.go b/miner/miner.go index 589144c0c..f9b8a9c22 100644 --- a/miner/miner.go +++ b/miner/miner.go @@ -192,7 +192,7 @@ func (self *Miner) mine() { // Accumulate all valid transactions and apply them to the new state // Error may be ignored. It's not important during mining - receipts, txs, _, erroneous, err := blockManager.ProcessTransactions(coinbase, block.State(), block, block, transactions) + receipts, txs, _, erroneous, err := blockManager.ApplyTransactions(coinbase, block.State(), block, transactions, true) if err != nil { minerlogger.Debugln(err) } From 085f604b27c8b3fbd82f2aa9d02a4251df0d5db5 Mon Sep 17 00:00:00 2001 From: obscuren Date: Thu, 4 Dec 2014 17:09:47 +0100 Subject: [PATCH 06/79] Show newly created private key during startup. Closes #126 --- cmd/mist/assets/qml/views/wallet.qml | 4 ++-- cmd/utils/cmd.go | 2 +- crypto/key_manager.go | 4 ++++ 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/cmd/mist/assets/qml/views/wallet.qml b/cmd/mist/assets/qml/views/wallet.qml index ad7a11047..9727ef35c 100644 --- a/cmd/mist/assets/qml/views/wallet.qml +++ b/cmd/mist/assets/qml/views/wallet.qml @@ -148,8 +148,8 @@ Rectangle { id: txTableView anchors.fill : parent TableViewColumn{ role: "num" ; title: "#" ; width: 30 } - TableViewColumn{ role: "from" ; title: "From" ; width: 280 } - TableViewColumn{ role: "to" ; title: "To" ; width: 280 } + TableViewColumn{ role: "from" ; title: "From" ; width: 340 } + TableViewColumn{ role: "to" ; title: "To" ; width: 340 } TableViewColumn{ role: "value" ; title: "Amount" ; width: 100 } model: ListModel { diff --git a/cmd/utils/cmd.go b/cmd/utils/cmd.go index d9b26c701..db7bcd35e 100644 --- a/cmd/utils/cmd.go +++ b/cmd/utils/cmd.go @@ -145,7 +145,6 @@ func NewDatabase() ethutil.Database { } func NewClientIdentity(clientIdentifier, version, customIdentifier string) *wire.SimpleClientIdentity { - clilogger.Infoln("identity created") return wire.NewSimpleClientIdentity(clientIdentifier, version, customIdentifier) } @@ -240,6 +239,7 @@ func KeyTasks(keyManager *crypto.KeyManager, KeyRing string, GenAddr bool, Secre exit(err) } } + clilogger.Infof("Main address %x\n", keyManager.Address()) } func StartRpc(ethereum *eth.Ethereum, RpcPort int) { diff --git a/crypto/key_manager.go b/crypto/key_manager.go index cc2b9ff90..326e559e0 100644 --- a/crypto/key_manager.go +++ b/crypto/key_manager.go @@ -5,8 +5,11 @@ import ( "sync" "github.com/ethereum/go-ethereum/ethutil" + "github.com/ethereum/go-ethereum/logger" ) +var keylogger = logger.NewLogger("KEY") + type KeyManager struct { keyRing *KeyRing session string @@ -104,6 +107,7 @@ func (k *KeyManager) Init(session string, cursor int, force bool) error { } if keyRing == nil { keyRing = NewGeneratedKeyRing(1) + keylogger.Infof("Created keypair. Private key: %x\n", keyRing.keys[0].PrivateKey) } return k.reset(session, cursor, keyRing) } From 3db9c8007086e0735695a6477c21056737519db9 Mon Sep 17 00:00:00 2001 From: obscuren Date: Thu, 4 Dec 2014 17:13:23 +0100 Subject: [PATCH 07/79] Removed mutan. Closes #183 --- ethutil/script_unix.go | 42 ++++++--------------------------------- ethutil/script_windows.go | 23 +-------------------- vm/vm_test.go | 15 ++++---------- 3 files changed, 11 insertions(+), 69 deletions(-) diff --git a/ethutil/script_unix.go b/ethutil/script_unix.go index 6827d4e2f..9250dda57 100644 --- a/ethutil/script_unix.go +++ b/ethutil/script_unix.go @@ -2,47 +2,17 @@ package ethutil -import ( - "fmt" - "strings" - - "github.com/ethereum/serpent-go" - "github.com/obscuren/mutan" - "github.com/obscuren/mutan/backends" -) +import "github.com/ethereum/serpent-go" // General compile function func Compile(script string, silent bool) (ret []byte, err error) { if len(script) > 2 { - line := strings.Split(script, "\n")[0] - - if len(line) > 1 && line[0:2] == "#!" { - switch line { - case "#!serpent": - byteCode, err := serpent.Compile(script) - if err != nil { - return nil, err - } - - return byteCode, nil - } - } else { - - compiler := mutan.NewCompiler(backend.NewEthereumBackend()) - compiler.Silent = silent - byteCode, errors := compiler.Compile(strings.NewReader(script)) - if len(errors) > 0 { - var errs string - for _, er := range errors { - if er != nil { - errs += er.Error() - } - } - return nil, fmt.Errorf("%v", errs) - } - - return byteCode, nil + byteCode, err := serpent.Compile(script) + if err != nil { + return nil, err } + + return byteCode, nil } return nil, nil diff --git a/ethutil/script_windows.go b/ethutil/script_windows.go index ef239cd51..1dedc5f60 100644 --- a/ethutil/script_windows.go +++ b/ethutil/script_windows.go @@ -2,31 +2,10 @@ package ethutil -import ( - "fmt" - "strings" - - "github.com/obscuren/mutan" - "github.com/obscuren/mutan/backends" -) - // General compile function func Compile(script string, silent bool) (ret []byte, err error) { if len(script) > 2 { - compiler := mutan.NewCompiler(backend.NewEthereumBackend()) - compiler.Silent = silent - byteCode, errors := compiler.Compile(strings.NewReader(script)) - if len(errors) > 0 { - var errs string - for _, er := range errors { - if er != nil { - errs += er.Error() - } - } - return nil, fmt.Errorf("%v", errs) - } - - return byteCode, nil + return nil, nil } return nil, nil diff --git a/vm/vm_test.go b/vm/vm_test.go index 19aa171a6..84ebf378f 100644 --- a/vm/vm_test.go +++ b/vm/vm_test.go @@ -13,7 +13,6 @@ import ( "github.com/ethereum/go-ethereum/state" "github.com/ethereum/go-ethereum/trie" checker "gopkg.in/check.v1" - // "github.com/obscuren/mutan" ) type VmSuite struct{} @@ -68,24 +67,18 @@ func setup(level logger.LogLevel, typ Type) (*Closure, VirtualMachine) { } func (s *VmSuite) TestDebugVm(c *checker.C) { - // if mutan.Version < "0.6" { - // t.Skip("skipping for mutan version", mutan.Version, " < 0.6") - // } closure, vm := setup(logger.DebugLevel, DebugVmTy) ret, _, e := closure.Call(vm, nil) c.Assert(e, checker.NotNil) - c.Skip("Depends on mutan") + c.Skip("Depends on mutan. Requires serpent implementation") c.Assert(ret, checker.DeepEquals, big9) } func (s *VmSuite) TestVm(c *checker.C) { - // if mutan.Version < "0.6" { - // t.Skip("skipping for mutan version", mutan.Version, " < 0.6") - // } closure, vm := setup(logger.DebugLevel, StandardVmTy) ret, _, e := closure.Call(vm, nil) c.Assert(e, checker.NotNil) - c.Skip("Depends on mutan") + c.Skip("Depends on mutan. Requires serpent implementation") c.Assert(ret, checker.DeepEquals, big9) } @@ -142,7 +135,7 @@ func (s *VmSuite) TestBuildInSha256(c *checker.C) { `, DebugVmTy) exp := crypto.Sha256(ethutil.LeftPadBytes([]byte{42}, 32)) - c.Skip("Depends on mutan") + c.Skip("Depends on mutan. Requires serpent implementation") c.Assert(ret, checker.DeepEquals, exp) } @@ -157,7 +150,7 @@ func (s *VmSuite) TestBuildInRipemd(c *checker.C) { `, DebugVmTy) exp := ethutil.RightPadBytes(crypto.Ripemd160(ethutil.LeftPadBytes([]byte{42}, 32)), 32) - c.Skip("Depends on mutan") + c.Skip("Depends on mutan. Requires serpent implementation") c.Assert(ret, checker.DeepEquals, exp) } From 8dbca75d85553f2d9451ee563a919850f05ea1dd Mon Sep 17 00:00:00 2001 From: obscuren Date: Thu, 4 Dec 2014 23:54:07 +0100 Subject: [PATCH 08/79] Skip mining on transactions that don't meet the min accepted gas price --- core/block_manager.go | 28 ++++++++++++---------------- core/transaction_pool.go | 8 ++++---- miner/miner.go | 22 ++++++++++++++++------ 3 files changed, 32 insertions(+), 26 deletions(-) diff --git a/core/block_manager.go b/core/block_manager.go index b648166ec..909f26a1b 100644 --- a/core/block_manager.go +++ b/core/block_manager.go @@ -231,7 +231,7 @@ func (sm *BlockManager) ProcessWithParent(block, parent *types.Block) (td *big.I return } - _, err = sm.TransitionState(state, parent, block) + receipts, err := sm.TransitionState(state, parent, block) if err != nil { return } @@ -242,26 +242,22 @@ func (sm *BlockManager) ProcessWithParent(block, parent *types.Block) (td *big.I return } - /* - receiptSha := types.DeriveSha(receipts) - if bytes.Compare(receiptSha, block.ReceiptSha) != 0 { - err = fmt.Errorf("validating receipt root. received=%x got=%x", block.ReceiptSha, receiptSha) - return - } - */ + receiptSha := types.DeriveSha(receipts) + if bytes.Compare(receiptSha, block.ReceiptSha) != 0 { + err = fmt.Errorf("validating receipt root. received=%x got=%x", block.ReceiptSha, receiptSha) + return + } if err = sm.AccumelateRewards(state, block, parent); err != nil { return } - /* - //block.receipts = receipts // although this isn't necessary it be in the future - rbloom := types.CreateBloom(receipts) - if bytes.Compare(rbloom, block.LogsBloom) != 0 { - err = fmt.Errorf("unable to replicate block's bloom=%x", rbloom) - return - } - */ + //block.receipts = receipts // although this isn't necessary it be in the future + rbloom := types.CreateBloom(receipts) + if bytes.Compare(rbloom, block.LogsBloom) != 0 { + err = fmt.Errorf("unable to replicate block's bloom=%x", rbloom) + return + } state.Update(ethutil.Big0) diff --git a/core/transaction_pool.go b/core/transaction_pool.go index c48d3d8a4..1d1f478e4 100644 --- a/core/transaction_pool.go +++ b/core/transaction_pool.go @@ -115,10 +115,6 @@ func (pool *TxPool) ValidateTransaction(tx *types.Transaction) error { return fmt.Errorf("tx.v != (28 || 27)") } - if tx.GasPrice.Cmp(MinGasPrice) < 0 { - return fmt.Errorf("Gas price to low. Require %v > Got %v", MinGasPrice, tx.GasPrice) - } - // Get the sender sender := pool.Ethereum.BlockManager().CurrentState().GetAccount(tx.Sender()) @@ -169,6 +165,10 @@ func (self *TxPool) Add(tx *types.Transaction) error { return nil } +func (self *TxPool) Size() int { + return self.pool.Len() +} + func (pool *TxPool) CurrentTransactions() []*types.Transaction { pool.mutex.Lock() defer pool.mutex.Unlock() diff --git a/miner/miner.go b/miner/miner.go index f9b8a9c22..c350eb1a8 100644 --- a/miner/miner.go +++ b/miner/miner.go @@ -228,23 +228,33 @@ func (self *Miner) mine() { func (self *Miner) finiliseTxs() types.Transactions { // Sort the transactions by nonce in case of odd network propagation - var txs types.Transactions + actualSize := len(self.localTxs) // See copy below + txs := make(types.Transactions, actualSize+self.eth.TxPool().Size()) state := self.eth.BlockManager().TransState() // XXX This has to change. Coinbase is, for new, same as key. key := self.eth.KeyManager() - for _, ltx := range self.localTxs { + for i, ltx := range self.localTxs { tx := types.NewTransactionMessage(ltx.To, ethutil.Big(ltx.Value), ethutil.Big(ltx.Gas), ethutil.Big(ltx.GasPrice), ltx.Data) tx.Nonce = state.GetNonce(self.Coinbase) state.SetNonce(self.Coinbase, tx.Nonce+1) tx.Sign(key.PrivateKey()) - txs = append(txs, tx) + txs[i] = tx } - txs = append(txs, self.eth.TxPool().CurrentTransactions()...) - sort.Sort(types.TxByNonce{txs}) + // Faster than append + for _, tx := range self.eth.TxPool().CurrentTransactions() { + if tx.GasPrice.Cmp(self.MinAcceptedGasPrice) >= 0 { + txs[actualSize] = tx + actualSize++ + } + } - return txs + newTransactions := make(types.Transactions, actualSize) + copy(newTransactions, txs[:actualSize]) + sort.Sort(types.TxByNonce{newTransactions}) + + return newTransactions } From d80f8bda940a8ae8f6dab1502a46054c06cee5cc Mon Sep 17 00:00:00 2001 From: obscuren Date: Fri, 5 Dec 2014 12:32:47 +0100 Subject: [PATCH 09/79] Fixed issue in VM where LOG didn't pop anything of the stack --- block_pool.go | 23 ++++++++++++++++++----- core/block_manager.go | 13 ++++++------- core/types/bloom9.go | 12 +++++------- core/types/receipt.go | 13 +++++++++++++ peer.go | 39 ++++++++++++--------------------------- vm/vm_debug.go | 4 ++-- 6 files changed, 56 insertions(+), 48 deletions(-) diff --git a/block_pool.go b/block_pool.go index 595400c79..02eb65d47 100644 --- a/block_pool.go +++ b/block_pool.go @@ -99,11 +99,7 @@ func (self *BlockPool) FetchHashes(peer *Peer) bool { self.td = peer.td if !self.HasLatestHash() { - peer.doneFetchingHashes = false - - const amount = 256 - peerlogger.Debugf("Fetching hashes (%d) %x...\n", amount, peer.lastReceivedHash[0:4]) - peer.QueueMessage(wire.NewMessage(wire.MsgGetBlockHashesTy, []interface{}{peer.lastReceivedHash, uint32(amount)})) + self.fetchHashes() } return true @@ -112,6 +108,16 @@ func (self *BlockPool) FetchHashes(peer *Peer) bool { return false } +func (self *BlockPool) fetchHashes() { + peer := self.peer + + peer.doneFetchingHashes = false + + const amount = 256 + peerlogger.Debugf("Fetching hashes (%d) %x...\n", amount, peer.lastReceivedHash[0:4]) + peer.QueueMessage(wire.NewMessage(wire.MsgGetBlockHashesTy, []interface{}{peer.lastReceivedHash, uint32(amount)})) +} + func (self *BlockPool) AddHash(hash []byte, peer *Peer) { self.mut.Lock() defer self.mut.Unlock() @@ -259,6 +265,13 @@ out: self.ChainLength = len(self.hashes) } + if self.peer != nil && + !self.peer.doneFetchingHashes && + time.Since(self.peer.lastHashAt) > 10*time.Second && + time.Since(self.peer.lastHashRequestedAt) > 5*time.Second { + self.fetchHashes() + } + /* if !self.fetchingHashes { blocks := self.Blocks() diff --git a/core/block_manager.go b/core/block_manager.go index 909f26a1b..4c1cea35a 100644 --- a/core/block_manager.go +++ b/core/block_manager.go @@ -236,6 +236,12 @@ func (sm *BlockManager) ProcessWithParent(block, parent *types.Block) (td *big.I return } + rbloom := types.CreateBloom(receipts) + if bytes.Compare(rbloom, block.LogsBloom) != 0 { + err = fmt.Errorf("unable to replicate block's bloom=%x", rbloom) + return + } + txSha := types.DeriveSha(block.Transactions()) if bytes.Compare(txSha, block.TxSha) != 0 { err = fmt.Errorf("validating transaction root. received=%x got=%x", block.TxSha, txSha) @@ -252,13 +258,6 @@ func (sm *BlockManager) ProcessWithParent(block, parent *types.Block) (td *big.I return } - //block.receipts = receipts // although this isn't necessary it be in the future - rbloom := types.CreateBloom(receipts) - if bytes.Compare(rbloom, block.LogsBloom) != 0 { - err = fmt.Errorf("unable to replicate block's bloom=%x", rbloom) - return - } - state.Update(ethutil.Big0) if !block.State().Cmp(state) { diff --git a/core/types/bloom9.go b/core/types/bloom9.go index d04656b0d..c1841e553 100644 --- a/core/types/bloom9.go +++ b/core/types/bloom9.go @@ -20,18 +20,16 @@ func CreateBloom(receipts Receipts) []byte { func LogsBloom(logs state.Logs) *big.Int { bin := new(big.Int) for _, log := range logs { - data := [][]byte{log.Address()} - for _, topic := range log.Topics() { - data = append(data, topic) + data := make([][]byte, len(log.Topics())+1) + data[0] = log.Address() + + for i, topic := range log.Topics() { + data[i+1] = topic } for _, b := range data { bin.Or(bin, ethutil.BigD(bloom9(crypto.Sha3(b)).Bytes())) } - - //if log.Data != nil { - // data = append(data, log.Data) - //} } return bin diff --git a/core/types/receipt.go b/core/types/receipt.go index 25fa8fb07..bac64e41d 100644 --- a/core/types/receipt.go +++ b/core/types/receipt.go @@ -64,5 +64,18 @@ func (self *Receipt) String() string { type Receipts []*Receipt +func (self Receipts) RlpData() interface{} { + data := make([]interface{}, len(self)) + for i, receipt := range self { + data[i] = receipt.RlpData() + } + + return data +} + +func (self Receipts) RlpEncode() []byte { + return ethutil.Encode(self.RlpData()) +} + func (self Receipts) Len() int { return len(self) } func (self Receipts) GetRlp(i int) []byte { return ethutil.Rlp(self[i]) } diff --git a/peer.go b/peer.go index 3b39e45c7..46ac65247 100644 --- a/peer.go +++ b/peer.go @@ -24,7 +24,7 @@ const ( // The size of the output buffer for writing messages outputBufferSize = 50 // Current protocol version - ProtocolVersion = 47 + ProtocolVersion = 48 // Current P2P version P2PVersion = 2 // Ethereum network version @@ -129,9 +129,11 @@ type Peer struct { statusKnown bool // Last received pong message - lastPong int64 - lastBlockReceived time.Time - doneFetchingHashes bool + lastPong int64 + lastBlockReceived time.Time + doneFetchingHashes bool + lastHashAt time.Time + lastHashRequestedAt time.Time host []byte port uint16 @@ -327,19 +329,16 @@ out: } } + switch msg.Type { + case wire.MsgGetBlockHashesTy: + p.lastHashRequestedAt = time.Now() + } + p.writeMessage(msg) p.lastSend = time.Now() // Ping timer case <-pingTimer.C: - /* - timeSince := time.Since(time.Unix(p.lastPong, 0)) - if !p.pingStartTime.IsZero() && p.lastPong != 0 && timeSince > (pingPongTimer+30*time.Second) { - peerlogger.Infof("Peer did not respond to latest pong fast enough, it took %s, disconnecting.\n", timeSince) - p.Stop() - return - } - */ p.writeMessage(wire.NewMessage(wire.MsgPingTy, "")) p.pingStartTime = time.Now() @@ -462,18 +461,6 @@ func (p *Peer) HandleInbound() { // TMP if p.statusKnown { switch msg.Type { - /* - case wire.MsgGetTxsTy: - // Get the current transactions of the pool - txs := p.ethereum.TxPool().CurrentTransactions() - // Get the RlpData values from the txs - txsInterface := make([]interface{}, len(txs)) - for i, tx := range txs { - txsInterface[i] = tx.RlpData() - } - // Broadcast it back to the peer - p.QueueMessage(wire.NewMessage(wire.MsgTxTy, txsInterface)) - */ case wire.MsgGetBlockHashesTy: if msg.Data.Len() < 2 { @@ -508,6 +495,7 @@ func (p *Peer) HandleInbound() { blockPool := p.ethereum.blockPool foundCommonHash := false + p.lastHashAt = time.Now() it := msg.Data.NewIterator() for it.Next() { @@ -524,9 +512,6 @@ func (p *Peer) HandleInbound() { } if !foundCommonHash { - //if !p.FetchHashes() { - // p.doneFetchingHashes = true - //} p.FetchHashes() } else { peerlogger.Infof("Found common hash (%x...)\n", p.lastReceivedHash[0:4]) diff --git a/vm/vm_debug.go b/vm/vm_debug.go index 0a541a769..956a16da2 100644 --- a/vm/vm_debug.go +++ b/vm/vm_debug.go @@ -744,12 +744,12 @@ func (self *DebugVm) Run(me, caller ClosureRef, code []byte, value, gas, price * case LOG0, LOG1, LOG2, LOG3, LOG4: n := int(op - LOG0) topics := make([][]byte, n) - mSize, mStart := stack.Pop().Int64(), stack.Pop().Int64() - data := mem.Geti(mStart, mSize) + mSize, mStart := stack.Popn() for i := 0; i < n; i++ { topics[i] = ethutil.LeftPadBytes(stack.Pop().Bytes(), 32) } + data := mem.Geti(mStart.Int64(), mSize.Int64()) log := &Log{closure.Address(), topics, data} self.env.AddLog(log) From 095cb976758e942b7beba8231686a7738a283e19 Mon Sep 17 00:00:00 2001 From: obscuren Date: Fri, 5 Dec 2014 14:52:36 +0100 Subject: [PATCH 10/79] EXP simplified --- vm/vm_debug.go | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/vm/vm_debug.go b/vm/vm_debug.go index 956a16da2..be1c59339 100644 --- a/vm/vm_debug.go +++ b/vm/vm_debug.go @@ -166,13 +166,7 @@ func (self *DebugVm) Run(me, caller ClosureRef, code []byte, value, gas, price * case EXP: require(2) - exp := new(big.Int).Set(stack.data[stack.Len()-2]) - nbytes := 0 - for exp.Cmp(ethutil.Big0) > 0 { - nbytes += 1 - exp.Rsh(exp, 8) - } - gas.Set(big.NewInt(int64(nbytes + 1))) + gas.Set(big.NewInt(int64(len(stack.data[stack.Len()-2].Bytes()) + 1))) // Gas only case STOP: gas.Set(ethutil.Big0) From 9925916851c00323336e213fc18c83da5fceee94 Mon Sep 17 00:00:00 2001 From: obscuren Date: Fri, 5 Dec 2014 16:26:39 +0100 Subject: [PATCH 11/79] upped proto version and modified block pool --- block_pool.go | 2 +- cmd/ethereum/main.go | 2 +- cmd/mist/gui.go | 4 ---- cmd/mist/main.go | 2 +- core/chain_manager.go | 24 +++++++++++++++--------- miner/miner.go | 1 - 6 files changed, 18 insertions(+), 17 deletions(-) diff --git a/block_pool.go b/block_pool.go index 02eb65d47..803927f21 100644 --- a/block_pool.go +++ b/block_pool.go @@ -154,7 +154,7 @@ func (self *BlockPool) addBlock(b *types.Block, peer *Peer, newBlock bool) { fmt.Println("1.", !self.eth.ChainManager().HasBlock(b.PrevHash), ethutil.Bytes2Hex(b.Hash()[0:4]), ethutil.Bytes2Hex(b.PrevHash[0:4])) fmt.Println("2.", self.pool[string(b.PrevHash)] == nil) fmt.Println("3.", !self.fetchingHashes) - if !self.eth.ChainManager().HasBlock(b.PrevHash) && self.pool[string(b.PrevHash)] == nil && !self.fetchingHashes { + if !self.eth.ChainManager().HasBlock(b.PrevHash) /*&& self.pool[string(b.PrevHash)] == nil*/ && !self.fetchingHashes { poollogger.Infof("Unknown chain, requesting (%x...)\n", b.PrevHash[0:4]) peer.QueueMessage(wire.NewMessage(wire.MsgGetBlockHashesTy, []interface{}{b.Hash(), uint32(256)})) } diff --git a/cmd/ethereum/main.go b/cmd/ethereum/main.go index 14921bf10..43551fb3a 100644 --- a/cmd/ethereum/main.go +++ b/cmd/ethereum/main.go @@ -30,7 +30,7 @@ import ( const ( ClientIdentifier = "Ethereum(G)" - Version = "0.7.8" + Version = "0.7.9" ) var clilogger = logger.NewLogger("CLI") diff --git a/cmd/mist/gui.go b/cmd/mist/gui.go index 6a28b48f9..0b03cdc1b 100644 --- a/cmd/mist/gui.go +++ b/cmd/mist/gui.go @@ -389,7 +389,6 @@ func (gui *Gui) update() { gui.loadAddressBook() gui.loadMergedMiningOptions() gui.setPeerInfo() - //gui.readPreviousTransactions() }() for _, plugin := range gui.plugins { @@ -417,9 +416,6 @@ func (gui *Gui) update() { core.TxPostEvent{}, ) - // nameReg := gui.pipe.World().Config().Get("NameReg") - // mux.Subscribe("object:"+string(nameReg.Address()), objectChan) - go func() { defer events.Unsubscribe() for { diff --git a/cmd/mist/main.go b/cmd/mist/main.go index 5503097f2..14336b4e8 100644 --- a/cmd/mist/main.go +++ b/cmd/mist/main.go @@ -31,7 +31,7 @@ import ( const ( ClientIdentifier = "Mist" - Version = "0.7.8" + Version = "0.7.9" ) var ethereum *eth.Ethereum diff --git a/core/chain_manager.go b/core/chain_manager.go index 7d4aeaab6..150139def 100644 --- a/core/chain_manager.go +++ b/core/chain_manager.go @@ -125,7 +125,8 @@ func (bc *ChainManager) Reset() { bc.genesisBlock.Trie().Sync() // Prepare the genesis block - bc.add(bc.genesisBlock) + bc.write(bc.genesisBlock) + bc.insert(bc.genesisBlock) bc.CurrentBlock = bc.genesisBlock bc.SetTotalDifficulty(ethutil.Big("0")) @@ -134,18 +135,18 @@ func (bc *ChainManager) Reset() { bc.TD = ethutil.BigD(ethutil.Config.Db.LastKnownTD()) } -// Add a block to the chain and record addition information -func (bc *ChainManager) add(block *types.Block) { - bc.writeBlockInfo(block) - +func (bc *ChainManager) insert(block *types.Block) { + encodedBlock := block.RlpEncode() + ethutil.Config.Db.Put([]byte("LastBlock"), encodedBlock) bc.CurrentBlock = block bc.LastBlockHash = block.Hash() +} + +func (bc *ChainManager) write(block *types.Block) { + bc.writeBlockInfo(block) encodedBlock := block.RlpEncode() ethutil.Config.Db.Put(block.Hash(), encodedBlock) - ethutil.Config.Db.Put([]byte("LastBlock"), encodedBlock) - - //chainlogger.Infof("Imported block #%d (%x...)\n", block.Number, block.Hash()[0:4]) } // Accessors @@ -266,9 +267,14 @@ func (self *ChainManager) InsertChain(chain types.Blocks) error { return err } - self.add(block) + self.write(block) if td.Cmp(self.TD) > 0 { + if block.Number.Cmp(new(big.Int).Add(self.CurrentBlock.Number, ethutil.Big1)) < 0 { + chainlogger.Infof("Split detected. New head #%v (%x), was #%v (%x)\n", block.Number, block.Hash()[:4], self.CurrentBlock.Number, self.CurrentBlock.Hash()[:4]) + } + self.SetTotalDifficulty(td) + self.insert(block) } self.eventMux.Post(NewBlockEvent{block}) diff --git a/miner/miner.go b/miner/miner.go index c350eb1a8..4f677cbef 100644 --- a/miner/miner.go +++ b/miner/miner.go @@ -167,7 +167,6 @@ out: } func (self *Miner) reset() { - println("reset") close(self.powQuitCh) self.powQuitCh = make(chan struct{}) } From ebe2d9d872c5482e02508f1d3e9c3a56e8a41d44 Mon Sep 17 00:00:00 2001 From: obscuren Date: Mon, 8 Dec 2014 12:43:33 +0100 Subject: [PATCH 12/79] First draft of Whisper messages relaying --- whisper/envelope.go | 96 ++++++++++++++++++++++++++ whisper/main.go | 46 +++++++++++++ whisper/message.go | 15 +++++ whisper/peer.go | 114 +++++++++++++++++++++++++++++++ whisper/sort.go | 25 +++++++ whisper/sort_test.go | 19 ++++++ whisper/whisper.go | 157 +++++++++++++++++++++++++++++++++++++++++++ 7 files changed, 472 insertions(+) create mode 100644 whisper/envelope.go create mode 100644 whisper/main.go create mode 100644 whisper/message.go create mode 100644 whisper/peer.go create mode 100644 whisper/sort.go create mode 100644 whisper/sort_test.go create mode 100644 whisper/whisper.go diff --git a/whisper/envelope.go b/whisper/envelope.go new file mode 100644 index 000000000..f9254843c --- /dev/null +++ b/whisper/envelope.go @@ -0,0 +1,96 @@ +package whisper + +import ( + "bytes" + "encoding/binary" + "io" + "time" + + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/ethutil" + "github.com/ethereum/go-ethereum/rlp" +) + +const ( + DefaultTtl = 50 * time.Second +) + +type Envelope struct { + Expiry int32 // Whisper protocol specifies int32, really should be int64 + Ttl int32 // ^^^^^^ + Topics [][]byte + Data []byte + Nonce uint32 + + hash Hash +} + +func NewEnvelopeFromReader(reader io.Reader) (*Envelope, error) { + var envelope Envelope + + buf := new(bytes.Buffer) + buf.ReadFrom(reader) + + h := H(crypto.Sha3(buf.Bytes())) + if err := rlp.Decode(buf, &envelope); err != nil { + return nil, err + } + + envelope.hash = h + + return &envelope, nil +} + +func (self *Envelope) Hash() Hash { + if self.hash == EmptyHash { + self.hash = H(crypto.Sha3(ethutil.Encode(self))) + } + + return self.hash +} + +func NewEnvelope(ttl time.Duration, topics [][]byte, data *Message) *Envelope { + exp := time.Now().Add(ttl) + + return &Envelope{int32(exp.Unix()), int32(ttl.Seconds()), topics, data.Bytes(), 0, Hash{}} +} + +func (self *Envelope) Seal() { + self.proveWork(DefaultTtl) +} + +func (self *Envelope) proveWork(dura time.Duration) { + var bestBit int + d := make([]byte, 64) + copy(d[:32], ethutil.Encode(self.withoutNonce())) + + then := time.Now().Add(dura).UnixNano() + for n := uint32(0); time.Now().UnixNano() < then; { + for i := 0; i < 1024; i++ { + binary.BigEndian.PutUint32(d[60:], n) + + fbs := ethutil.FirstBitSet(ethutil.BigD(crypto.Sha3(d))) + if fbs > bestBit { + bestBit = fbs + self.Nonce = n + } + + n++ + } + } +} + +func (self *Envelope) valid() bool { + d := make([]byte, 64) + copy(d[:32], ethutil.Encode(self.withoutNonce())) + binary.BigEndian.PutUint32(d[60:], self.Nonce) + return ethutil.FirstBitSet(ethutil.BigD(crypto.Sha3(d))) > 0 +} + +func (self *Envelope) withoutNonce() interface{} { + return []interface{}{self.Expiry, self.Ttl, ethutil.ByteSliceToInterface(self.Topics), self.Data} +} + +func (self *Envelope) RlpData() interface{} { + return []interface{}{self.Expiry, self.Ttl, ethutil.ByteSliceToInterface(self.Topics), self.Data, self.Nonce} +} diff --git a/whisper/main.go b/whisper/main.go new file mode 100644 index 000000000..3868f604f --- /dev/null +++ b/whisper/main.go @@ -0,0 +1,46 @@ +// +build none + +package main + +import ( + "fmt" + "log" + "net" + "os" + + "github.com/ethereum/go-ethereum/logger" + "github.com/ethereum/go-ethereum/p2p" + "github.com/ethereum/go-ethereum/whisper" + "github.com/obscuren/secp256k1-go" +) + +func main() { + logger.AddLogSystem(logger.NewStdLogSystem(os.Stdout, log.LstdFlags, logger.InfoLevel)) + + pub, sec := secp256k1.GenerateKeyPair() + + whisper := whisper.New(pub, sec) + + srv := p2p.Server{ + MaxPeers: 10, + Identity: p2p.NewSimpleClientIdentity("whisper-go", "1.0", "", string(pub)), + ListenAddr: ":30303", + NAT: p2p.UPNP(), + + Protocols: []p2p.Protocol{whisper.Protocol()}, + } + if err := srv.Start(); err != nil { + fmt.Println("could not start server:", err) + os.Exit(1) + } + + // add seed peers + seed, err := net.ResolveTCPAddr("tcp", "poc-7.ethdev.com:30300") + if err != nil { + fmt.Println("couldn't resolve:", err) + os.Exit(1) + } + srv.SuggestPeer(seed.IP, seed.Port, nil) + + select {} +} diff --git a/whisper/message.go b/whisper/message.go new file mode 100644 index 000000000..21cf163e6 --- /dev/null +++ b/whisper/message.go @@ -0,0 +1,15 @@ +package whisper + +type Message struct { + Flags byte + Signature []byte + Payload []byte +} + +func NewMessage(payload []byte) *Message { + return &Message{Flags: 0, Payload: payload} +} + +func (self *Message) Bytes() []byte { + return append([]byte{self.Flags}, append(self.Signature, self.Payload...)...) +} diff --git a/whisper/peer.go b/whisper/peer.go new file mode 100644 index 000000000..5fe50ba59 --- /dev/null +++ b/whisper/peer.go @@ -0,0 +1,114 @@ +package whisper + +import ( + "fmt" + "io/ioutil" + "time" + + "github.com/ethereum/go-ethereum/p2p" + "gopkg.in/fatih/set.v0" +) + +const ( + protocolVersion = 0x02 +) + +type peer struct { + host *Whisper + peer *p2p.Peer + ws p2p.MsgReadWriter + + // XXX Eventually this is going to reach exceptional large space. We need an expiry here + known *set.Set + + quit chan struct{} +} + +func NewPeer(host *Whisper, p *p2p.Peer, ws p2p.MsgReadWriter) *peer { + return &peer{host, p, ws, set.New(), make(chan struct{})} +} + +func (self *peer) init() error { + if err := self.handleStatus(); err != nil { + return err + } + + return nil +} + +func (self *peer) start() { + go self.update() +} + +func (self *peer) update() { + relay := time.NewTicker(300 * time.Millisecond) +out: + for { + select { + case <-relay.C: + err := self.broadcast(self.host.envelopes()) + if err != nil { + self.peer.Infoln(err) + break out + } + + case <-self.quit: + break out + } + } +} + +func (self *peer) broadcast(envelopes []*Envelope) error { + envs := make([]interface{}, len(envelopes)) + i := 0 + for _, envelope := range envelopes { + if !self.known.Has(envelope.Hash()) { + envs[i] = envelope + self.known.Add(envelope.Hash()) + i++ + } + } + + msg := p2p.NewMsg(envelopesMsg, envs[:i]...) + if err := self.ws.WriteMsg(msg); err != nil { + return err + } + + return nil +} + +func (self *peer) handleStatus() error { + ws := self.ws + + if err := ws.WriteMsg(self.statusMsg()); err != nil { + return err + } + + msg, err := ws.ReadMsg() + if err != nil { + return err + } + + if msg.Code != statusMsg { + return fmt.Errorf("peer send %x before status msg", msg.Code) + } + + data, err := ioutil.ReadAll(msg.Payload) + if err != nil { + return err + } + + if len(data) == 0 { + return fmt.Errorf("malformed status. data len = 0") + } + + if pv := data[0]; pv != protocolVersion { + return fmt.Errorf("protocol version mismatch %d != %d", pv, protocolVersion) + } + + return nil +} + +func (self *peer) statusMsg() p2p.Msg { + return p2p.NewMsg(statusMsg, protocolVersion) +} diff --git a/whisper/sort.go b/whisper/sort.go new file mode 100644 index 000000000..8c5b46e9e --- /dev/null +++ b/whisper/sort.go @@ -0,0 +1,25 @@ +package whisper + +import "sort" + +type sortedKeys struct { + k []int32 +} + +func (self *sortedKeys) Len() int { return len(self.k) } +func (self *sortedKeys) Less(i, j int) bool { return self.k[i] < self.k[j] } +func (self *sortedKeys) Swap(i, j int) { self.k[i], self.k[j] = self.k[j], self.k[i] } + +func sortKeys(m map[int32]Hash) []int32 { + sorted := new(sortedKeys) + sorted.k = make([]int32, len(m)) + i := 0 + for key, _ := range m { + sorted.k[i] = key + i++ + } + + sort.Sort(sorted) + + return sorted.k +} diff --git a/whisper/sort_test.go b/whisper/sort_test.go new file mode 100644 index 000000000..5d8177d41 --- /dev/null +++ b/whisper/sort_test.go @@ -0,0 +1,19 @@ +package whisper + +import "testing" + +func TestSorting(t *testing.T) { + m := map[int32]Hash{ + 1: HS("1"), + 3: HS("3"), + 2: HS("2"), + 5: HS("5"), + } + exp := []int32{1, 2, 3, 5} + res := sortKeys(m) + for i, k := range res { + if k != exp[i] { + t.Error(k, "failed. Expected", exp[i]) + } + } +} diff --git a/whisper/whisper.go b/whisper/whisper.go new file mode 100644 index 000000000..692e6bc2c --- /dev/null +++ b/whisper/whisper.go @@ -0,0 +1,157 @@ +package whisper + +import ( + "fmt" + "sync" + "time" + + "github.com/ethereum/go-ethereum/p2p" + "gopkg.in/fatih/set.v0" +) + +// MOVE ME +type Hash struct { + hash string +} + +var EmptyHash Hash + +func H(hash []byte) Hash { + return Hash{string(hash)} +} +func HS(hash string) Hash { + return Hash{hash} +} + +// MOVE ME END + +const ( + statusMsg = 0x0 + envelopesMsg = 0x01 +) + +type Whisper struct { + pub, sec []byte + protocol p2p.Protocol + + mmu sync.RWMutex + messages map[Hash]*Envelope + expiry map[int32]*set.SetNonTS + + quit chan struct{} +} + +func New(pub, sec []byte) *Whisper { + whisper := &Whisper{ + pub: pub, + sec: sec, + messages: make(map[Hash]*Envelope), + expiry: make(map[int32]*set.SetNonTS), + quit: make(chan struct{}), + } + go whisper.update() + + // p2p whisper sub protocol handler + whisper.protocol = p2p.Protocol{ + Name: "shh", + Version: 2, + Length: 2, + Run: whisper.msgHandler, + } + + return whisper +} + +func (self *Whisper) Stop() { + close(self.quit) +} + +func (self *Whisper) Send(ttl time.Duration, topics [][]byte, data *Message) { + envelope := NewEnvelope(ttl, topics, data) + envelope.Seal() + + self.add(envelope) +} + +func (self *Whisper) msgHandler(peer *p2p.Peer, ws p2p.MsgReadWriter) error { + wpeer := NewPeer(self, peer, ws) + if err := wpeer.init(); err != nil { + return err + } + go wpeer.start() + + for { + msg, err := ws.ReadMsg() + if err != nil { + return err + } + + envelope, err := NewEnvelopeFromReader(msg.Payload) + if err != nil { + peer.Infoln(err) + continue + } + + self.add(envelope) + } +} + +func (self *Whisper) add(envelope *Envelope) { + self.mmu.Lock() + defer self.mmu.Unlock() + + fmt.Println("received envelope", envelope) + self.messages[envelope.Hash()] = envelope + if self.expiry[envelope.Expiry] == nil { + self.expiry[envelope.Expiry] = set.NewNonTS() + } + self.expiry[envelope.Expiry].Add(envelope.Hash()) +} + +func (self *Whisper) update() { + expire := time.NewTicker(800 * time.Millisecond) +out: + for { + select { + case <-expire.C: + self.expire() + case <-self.quit: + break out + } + } +} +func (self *Whisper) expire() { + self.mmu.Lock() + defer self.mmu.Unlock() + + now := int32(time.Now().Unix()) + for then, hashSet := range self.expiry { + if then > now { + continue + } + + hashSet.Each(func(v interface{}) bool { + delete(self.messages, v.(Hash)) + return true + }) + self.expiry[then].Clear() + } +} + +func (self *Whisper) envelopes() (envelopes []*Envelope) { + self.mmu.RLock() + defer self.mmu.RUnlock() + + envelopes = make([]*Envelope, len(self.messages)) + i := 0 + for _, envelope := range self.messages { + envelopes[i] = envelope + i++ + } + + return +} + +func (self *Whisper) Protocol() p2p.Protocol { + return self.protocol +} From e3a8412df3fe75fe498a3fce64fd2fd691a18183 Mon Sep 17 00:00:00 2001 From: obscuren Date: Mon, 8 Dec 2014 13:16:50 +0100 Subject: [PATCH 13/79] Proper start/stoping wpeers --- whisper/peer.go | 15 ++++++++++++--- whisper/whisper.go | 14 ++++++++++++-- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/whisper/peer.go b/whisper/peer.go index 5fe50ba59..3471ddb2f 100644 --- a/whisper/peer.go +++ b/whisper/peer.go @@ -38,6 +38,13 @@ func (self *peer) init() error { func (self *peer) start() { go self.update() + self.peer.Infoln("whisper started") +} + +func (self *peer) stop() { + self.peer.Infoln("whisper stopped") + + close(self.quit) } func (self *peer) update() { @@ -69,9 +76,11 @@ func (self *peer) broadcast(envelopes []*Envelope) error { } } - msg := p2p.NewMsg(envelopesMsg, envs[:i]...) - if err := self.ws.WriteMsg(msg); err != nil { - return err + if i > 0 { + msg := p2p.NewMsg(envelopesMsg, envs[:i]...) + if err := self.ws.WriteMsg(msg); err != nil { + return err + } } return nil diff --git a/whisper/whisper.go b/whisper/whisper.go index 692e6bc2c..255bd2152 100644 --- a/whisper/whisper.go +++ b/whisper/whisper.go @@ -1,7 +1,7 @@ package whisper import ( - "fmt" + "bytes" "sync" "time" @@ -23,6 +23,10 @@ func HS(hash string) Hash { return Hash{hash} } +func (self Hash) Compare(other Hash) int { + return bytes.Compare([]byte(self.hash), []byte(other.hash)) +} + // MOVE ME END const ( @@ -73,13 +77,18 @@ func (self *Whisper) Send(ttl time.Duration, topics [][]byte, data *Message) { self.add(envelope) } +// Main handler for passing whisper messages to whisper peer objects func (self *Whisper) msgHandler(peer *p2p.Peer, ws p2p.MsgReadWriter) error { wpeer := NewPeer(self, peer, ws) + // init whisper peer (handshake/status) if err := wpeer.init(); err != nil { return err } + // kick of the main handler for broadcasting/managing envelopes go wpeer.start() + defer wpeer.stop() + // Main *read* loop. Writing is done by the peer it self. for { msg, err := ws.ReadMsg() if err != nil { @@ -96,11 +105,11 @@ func (self *Whisper) msgHandler(peer *p2p.Peer, ws p2p.MsgReadWriter) error { } } +// takes care of adding envelopes to the messages pool. At this moment no sanity checks are being performed. func (self *Whisper) add(envelope *Envelope) { self.mmu.Lock() defer self.mmu.Unlock() - fmt.Println("received envelope", envelope) self.messages[envelope.Hash()] = envelope if self.expiry[envelope.Expiry] == nil { self.expiry[envelope.Expiry] = set.NewNonTS() @@ -120,6 +129,7 @@ out: } } } + func (self *Whisper) expire() { self.mmu.Lock() defer self.mmu.Unlock() From 76842b0df8b5605682362bd57fbd6eb315bcaf1f Mon Sep 17 00:00:00 2001 From: obscuren Date: Mon, 8 Dec 2014 14:25:52 +0100 Subject: [PATCH 14/79] Additional checks and debug output --- whisper/envelope.go | 4 ++-- whisper/peer.go | 5 +++++ whisper/whisper.go | 7 +++++++ 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/whisper/envelope.go b/whisper/envelope.go index f9254843c..8e66a7bbb 100644 --- a/whisper/envelope.go +++ b/whisper/envelope.go @@ -12,7 +12,7 @@ import ( ) const ( - DefaultTtl = 50 * time.Second + DefaultPow = 50 * time.Millisecond ) type Envelope struct { @@ -56,7 +56,7 @@ func NewEnvelope(ttl time.Duration, topics [][]byte, data *Message) *Envelope { } func (self *Envelope) Seal() { - self.proveWork(DefaultTtl) + self.proveWork(DefaultPow) } func (self *Envelope) proveWork(dura time.Duration) { diff --git a/whisper/peer.go b/whisper/peer.go index 3471ddb2f..d42b374b5 100644 --- a/whisper/peer.go +++ b/whisper/peer.go @@ -81,11 +81,16 @@ func (self *peer) broadcast(envelopes []*Envelope) error { if err := self.ws.WriteMsg(msg); err != nil { return err } + self.peer.Infoln("broadcasted", i, "message(s)") } return nil } +func (self *peer) addKnown(envelope *Envelope) { + self.known.Add(envelope.Hash()) +} + func (self *peer) handleStatus() error { ws := self.ws diff --git a/whisper/whisper.go b/whisper/whisper.go index 255bd2152..78e4d4848 100644 --- a/whisper/whisper.go +++ b/whisper/whisper.go @@ -2,6 +2,7 @@ package whisper import ( "bytes" + "fmt" "sync" "time" @@ -34,6 +35,8 @@ const ( envelopesMsg = 0x01 ) +const defaultTtl = 50 * time.Second + type Whisper struct { pub, sec []byte protocol p2p.Protocol @@ -55,6 +58,8 @@ func New(pub, sec []byte) *Whisper { } go whisper.update() + whisper.Send(defaultTtl, nil, NewMessage([]byte("Hello world. This is whisper-go"))) + // p2p whisper sub protocol handler whisper.protocol = p2p.Protocol{ Name: "shh", @@ -102,6 +107,7 @@ func (self *Whisper) msgHandler(peer *p2p.Peer, ws p2p.MsgReadWriter) error { } self.add(envelope) + wpeer.addKnown(envelope) } } @@ -110,6 +116,7 @@ func (self *Whisper) add(envelope *Envelope) { self.mmu.Lock() defer self.mmu.Unlock() + fmt.Println("add", envelope) self.messages[envelope.Hash()] = envelope if self.expiry[envelope.Expiry] == nil { self.expiry[envelope.Expiry] = set.NewNonTS() From 4f12f0697e645a567fac9f13ed8cdb25e1218b84 Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Tue, 9 Dec 2014 10:39:39 +0100 Subject: [PATCH 15/79] rlp: move decoder type switch to decode.go --- rlp/decode.go | 33 +++++++++++++++++++++++++++++++++ rlp/typecache.go | 35 +++-------------------------------- 2 files changed, 36 insertions(+), 32 deletions(-) diff --git a/rlp/decode.go b/rlp/decode.go index 7d95af02b..7acbbfa0d 100644 --- a/rlp/decode.go +++ b/rlp/decode.go @@ -81,6 +81,39 @@ func (err decodeError) Error() string { return fmt.Sprintf("rlp: %s for %v", err.msg, err.typ) } +var ( + decoderInterface = reflect.TypeOf(new(Decoder)).Elem() + bigInt = reflect.TypeOf(big.Int{}) +) + +func makeDecoder(typ reflect.Type) (dec decoder, err error) { + kind := typ.Kind() + switch { + case typ.Implements(decoderInterface): + return decodeDecoder, nil + case kind != reflect.Ptr && reflect.PtrTo(typ).Implements(decoderInterface): + return decodeDecoderNoPtr, nil + case typ.AssignableTo(reflect.PtrTo(bigInt)): + return decodeBigInt, nil + case typ.AssignableTo(bigInt): + return decodeBigIntNoPtr, nil + case isInteger(kind): + return makeNumDecoder(typ), nil + case kind == reflect.String: + return decodeString, nil + case kind == reflect.Slice || kind == reflect.Array: + return makeListDecoder(typ) + case kind == reflect.Struct: + return makeStructDecoder(typ) + case kind == reflect.Ptr: + return makePtrDecoder(typ) + case kind == reflect.Interface && typ.NumMethod() == 0: + return decodeInterface, nil + default: + return nil, fmt.Errorf("rlp: type %v is not RLP-serializable", typ) + } +} + func makeNumDecoder(typ reflect.Type) decoder { kind := typ.Kind() switch { diff --git a/rlp/typecache.go b/rlp/typecache.go index 75dbb43c2..f2595dac8 100644 --- a/rlp/typecache.go +++ b/rlp/typecache.go @@ -1,8 +1,6 @@ package rlp import ( - "fmt" - "math/big" "reflect" "sync" ) @@ -51,39 +49,12 @@ func cachedTypeInfo1(typ reflect.Type) (*typeinfo, error) { return typeCache[typ], err } -var ( - decoderInterface = reflect.TypeOf(new(Decoder)).Elem() - bigInt = reflect.TypeOf(big.Int{}) -) - func genTypeInfo(typ reflect.Type) (info *typeinfo, err error) { info = new(typeinfo) - kind := typ.Kind() - switch { - case typ.Implements(decoderInterface): - info.decoder = decodeDecoder - case kind != reflect.Ptr && reflect.PtrTo(typ).Implements(decoderInterface): - info.decoder = decodeDecoderNoPtr - case typ.AssignableTo(reflect.PtrTo(bigInt)): - info.decoder = decodeBigInt - case typ.AssignableTo(bigInt): - info.decoder = decodeBigIntNoPtr - case isInteger(kind): - info.decoder = makeNumDecoder(typ) - case kind == reflect.String: - info.decoder = decodeString - case kind == reflect.Slice || kind == reflect.Array: - info.decoder, err = makeListDecoder(typ) - case kind == reflect.Struct: - info.decoder, err = makeStructDecoder(typ) - case kind == reflect.Ptr: - info.decoder, err = makePtrDecoder(typ) - case kind == reflect.Interface && typ.NumMethod() == 0: - info.decoder = decodeInterface - default: - err = fmt.Errorf("rlp: type %v is not RLP-serializable", typ) + if info.decoder, err = makeDecoder(typ); err != nil { + return nil, err } - return info, err + return info, nil } func isInteger(k reflect.Kind) bool { From 93e858f88ef9a9a572c2dabd4aef8bbbd678dd97 Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Tue, 9 Dec 2014 10:41:47 +0100 Subject: [PATCH 16/79] rlp: remove support for signed integer types There is no agreement on how to encode negative integers across implementations. cpp-ethereum doesn't support them either. --- rlp/decode.go | 35 ++++++----------------------------- rlp/decode_test.go | 42 +++++++++++++++++++++--------------------- rlp/typecache.go | 4 ++-- 3 files changed, 29 insertions(+), 52 deletions(-) diff --git a/rlp/decode.go b/rlp/decode.go index 7acbbfa0d..31485ee70 100644 --- a/rlp/decode.go +++ b/rlp/decode.go @@ -54,7 +54,7 @@ type Decoder interface { // To decode into a Go string, the input must be an RLP string. The // bytes are taken as-is and will not necessarily be valid UTF-8. // -// To decode into an integer type, the input must also be an RLP +// To decode into an unsigned integer type, the input must also be an RLP // string. The bytes are interpreted as a big endian representation of // the integer. If the RLP string is larger than the bit size of the // type, Decode will return an error. Decode also supports *big.Int. @@ -66,8 +66,9 @@ type Decoder interface { // []interface{}, for RLP lists // []byte, for RLP strings // -// Non-empty interface types are not supported, nor are bool, float32, -// float64, maps, channel types and functions. +// Non-empty interface types are not supported, nor are booleans, +// signed integers, floating point numbers, maps, channels and +// functions. func Decode(r io.Reader, val interface{}) error { return NewStream(r).Decode(val) } @@ -97,8 +98,8 @@ func makeDecoder(typ reflect.Type) (dec decoder, err error) { return decodeBigInt, nil case typ.AssignableTo(bigInt): return decodeBigIntNoPtr, nil - case isInteger(kind): - return makeNumDecoder(typ), nil + case isUint(kind): + return decodeUint, nil case kind == reflect.String: return decodeString, nil case kind == reflect.Slice || kind == reflect.Array: @@ -114,30 +115,6 @@ func makeDecoder(typ reflect.Type) (dec decoder, err error) { } } -func makeNumDecoder(typ reflect.Type) decoder { - kind := typ.Kind() - switch { - case kind <= reflect.Int64: - return decodeInt - case kind <= reflect.Uint64: - return decodeUint - default: - panic("fallthrough") - } -} - -func decodeInt(s *Stream, val reflect.Value) error { - typ := val.Type() - num, err := s.uint(typ.Bits()) - if err == errUintOverflow { - return decodeError{"input string too long", typ} - } else if err != nil { - return err - } - val.SetInt(int64(num)) - return nil -} - func decodeUint(s *Stream, val reflect.Value) error { typ := val.Type() num, err := s.uint(typ.Bits()) diff --git a/rlp/decode_test.go b/rlp/decode_test.go index 3b60234dd..4c030e24d 100644 --- a/rlp/decode_test.go +++ b/rlp/decode_test.go @@ -171,7 +171,7 @@ func TestDecodeErrors(t *testing.T) { t.Errorf("Decode(r, new(chan bool)) error mismatch, got %q, want %q", err, expectErr) } - if err := Decode(r, new(int)); err != io.EOF { + if err := Decode(r, new(uint)); err != io.EOF { t.Errorf("Decode(r, new(int)) error mismatch, got %q, want %q", err, io.EOF) } } @@ -184,12 +184,12 @@ type decodeTest struct { } type simplestruct struct { - A int + A uint B string } type recstruct struct { - I int + I uint Child *recstruct } @@ -202,7 +202,7 @@ var ( var ( sharedByteArray [5]byte - sharedPtr = new(*int) + sharedPtr = new(*uint) ) var decodeTests = []decodeTest{ @@ -217,13 +217,13 @@ var decodeTests = []decodeTest{ {input: "C0", ptr: new(uint32), error: ErrExpectedString.Error()}, // slices - {input: "C0", ptr: new([]int), value: []int{}}, - {input: "C80102030405060708", ptr: new([]int), value: []int{1, 2, 3, 4, 5, 6, 7, 8}}, + {input: "C0", ptr: new([]uint), value: []uint{}}, + {input: "C80102030405060708", ptr: new([]uint), value: []uint{1, 2, 3, 4, 5, 6, 7, 8}}, // arrays - {input: "C0", ptr: new([5]int), value: [5]int{}}, - {input: "C50102030405", ptr: new([5]int), value: [5]int{1, 2, 3, 4, 5}}, - {input: "C6010203040506", ptr: new([5]int), error: "rlp: input list has too many elements for [5]int"}, + {input: "C0", ptr: new([5]uint), value: [5]uint{}}, + {input: "C50102030405", ptr: new([5]uint), value: [5]uint{1, 2, 3, 4, 5}}, + {input: "C6010203040506", ptr: new([5]uint), error: "rlp: input list has too many elements for [5]uint"}, // byte slices {input: "01", ptr: new([]byte), value: []byte{1}}, @@ -280,17 +280,17 @@ var decodeTests = []decodeTest{ }, // pointers - {input: "00", ptr: new(*int), value: (*int)(nil)}, - {input: "80", ptr: new(*int), value: (*int)(nil)}, - {input: "C0", ptr: new(*int), value: (*int)(nil)}, - {input: "07", ptr: new(*int), value: intp(7)}, - {input: "8108", ptr: new(*int), value: intp(8)}, - {input: "C109", ptr: new(*[]int), value: &[]int{9}}, + {input: "00", ptr: new(*uint), value: (*uint)(nil)}, + {input: "80", ptr: new(*uint), value: (*uint)(nil)}, + {input: "C0", ptr: new(*uint), value: (*uint)(nil)}, + {input: "07", ptr: new(*uint), value: uintp(7)}, + {input: "8108", ptr: new(*uint), value: uintp(8)}, + {input: "C109", ptr: new(*[]uint), value: &[]uint{9}}, {input: "C58403030303", ptr: new(*[][]byte), value: &[][]byte{{3, 3, 3, 3}}}, // pointer should be reset to nil - {input: "05", ptr: sharedPtr, value: intp(5)}, - {input: "80", ptr: sharedPtr, value: (*int)(nil)}, + {input: "05", ptr: sharedPtr, value: uintp(5)}, + {input: "80", ptr: sharedPtr, value: (*uint)(nil)}, // interface{} {input: "00", ptr: new(interface{}), value: []byte{0}}, @@ -301,7 +301,7 @@ var decodeTests = []decodeTest{ {input: "C50183040404", ptr: new(interface{}), value: []interface{}{[]byte{1}, []byte{4, 4, 4}}}, } -func intp(i int) *int { return &i } +func uintp(i uint) *uint { return &i } func runTests(t *testing.T, decode func([]byte, interface{}) error) { for i, test := range decodeTests { @@ -434,8 +434,8 @@ func ExampleDecode() { input, _ := hex.DecodeString("C90A1486666F6F626172") type example struct { - A, B int - private int // private fields are ignored + A, B uint + private uint // private fields are ignored String string } @@ -447,7 +447,7 @@ func ExampleDecode() { fmt.Printf("Decoded value: %#v\n", s) } // Output: - // Decoded value: rlp.example{A:10, B:20, private:0, String:"foobar"} + // Decoded value: rlp.example{A:0xa, B:0x14, private:0x0, String:"foobar"} } func ExampleStream() { diff --git a/rlp/typecache.go b/rlp/typecache.go index f2595dac8..52e68a3c5 100644 --- a/rlp/typecache.go +++ b/rlp/typecache.go @@ -57,6 +57,6 @@ func genTypeInfo(typ reflect.Type) (info *typeinfo, err error) { return info, nil } -func isInteger(k reflect.Kind) bool { - return k >= reflect.Int && k <= reflect.Uintptr +func isUint(k reflect.Kind) bool { + return k >= reflect.Uint && k <= reflect.Uintptr } From c084a7daa58117f1864eac5130ccf3290372fd4c Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Tue, 9 Dec 2014 10:44:48 +0100 Subject: [PATCH 17/79] rlp: fix panic in decodeList on go 1.4+ The documentation for reflect.Value.Index states that it will panic for out-of-bounds indices. Since go 1.4, it actually panics. --- rlp/decode.go | 109 ++++++++++++++++++++++++++++---------------------- 1 file changed, 61 insertions(+), 48 deletions(-) diff --git a/rlp/decode.go b/rlp/decode.go index 31485ee70..66830b89c 100644 --- a/rlp/decode.go +++ b/rlp/decode.go @@ -154,8 +154,6 @@ func decodeBigInt(s *Stream, val reflect.Value) error { return nil } -const maxInt = int(^uint(0) >> 1) - func makeListDecoder(typ reflect.Type) (decoder, error) { etype := typ.Elem() if etype.Kind() == reflect.Uint8 && !reflect.PtrTo(etype).Implements(decoderInterface) { @@ -169,55 +167,41 @@ func makeListDecoder(typ reflect.Type) (decoder, error) { if err != nil { return nil, err } - var maxLen = maxInt + if typ.Kind() == reflect.Array { - maxLen = typ.Len() + return func(s *Stream, val reflect.Value) error { + return decodeListArray(s, val, etypeinfo.decoder) + }, nil } - dec := func(s *Stream, val reflect.Value) error { - return decodeList(s, val, etypeinfo.decoder, maxLen) - } - return dec, nil + return func(s *Stream, val reflect.Value) error { + return decodeListSlice(s, val, etypeinfo.decoder) + }, nil } -// decodeList decodes RLP list elements into slices and arrays. -// -// The approach here is stolen from package json, although we differ -// in the semantics for arrays. package json discards remaining -// elements that would not fit into the array. We generate an error in -// this case because we'd be losing information. -func decodeList(s *Stream, val reflect.Value, elemdec decoder, maxelem int) error { +func decodeListSlice(s *Stream, val reflect.Value, elemdec decoder) error { size, err := s.List() if err != nil { return err } if size == 0 { - if val.Kind() == reflect.Slice { - val.Set(reflect.MakeSlice(val.Type(), 0, 0)) - } else { - zero(val, 0) - } + val.Set(reflect.MakeSlice(val.Type(), 0, 0)) return s.ListEnd() } i := 0 - for { - if i > maxelem { - return decodeError{"input list has too many elements", val.Type()} + for ; ; i++ { + // grow slice if necessary + if i >= val.Cap() { + newcap := val.Cap() + val.Cap()/2 + if newcap < 4 { + newcap = 4 + } + newv := reflect.MakeSlice(val.Type(), val.Len(), newcap) + reflect.Copy(newv, val) + val.Set(newv) } - if val.Kind() == reflect.Slice { - // grow slice if necessary - if i >= val.Cap() { - newcap := val.Cap() + val.Cap()/2 - if newcap < 4 { - newcap = 4 - } - newv := reflect.MakeSlice(val.Type(), val.Len(), newcap) - reflect.Copy(newv, val) - val.Set(newv) - } - if i >= val.Len() { - val.SetLen(i + 1) - } + if i >= val.Len() { + val.SetLen(i + 1) } // decode into element if err := elemdec(s, val.Index(i)); err == EOL { @@ -225,26 +209,54 @@ func decodeList(s *Stream, val reflect.Value, elemdec decoder, maxelem int) erro } else if err != nil { return err } - i++ } if i < val.Len() { - if val.Kind() == reflect.Array { - // zero the rest of the array. - zero(val, i) - } else { - val.SetLen(i) - } + val.SetLen(i) } return s.ListEnd() } +func decodeListArray(s *Stream, val reflect.Value, elemdec decoder) error { + size, err := s.List() + if err != nil { + return err + } + if size == 0 { + zero(val, 0) + return s.ListEnd() + } + + // The approach here is stolen from package json, although we differ + // in the semantics for arrays. package json discards remaining + // elements that would not fit into the array. We generate an error in + // this case because we'd be losing information. + vlen := val.Len() + i := 0 + for ; i < vlen; i++ { + if err := elemdec(s, val.Index(i)); err == EOL { + break + } else if err != nil { + return err + } + if i == vlen { + } + } + if i < vlen { + zero(val, i) + } + if err = s.ListEnd(); err == errNotAtEOL { + return decodeError{"input list has too many elements", val.Type()} + } + return err +} + func decodeByteSlice(s *Stream, val reflect.Value) error { kind, _, err := s.Kind() if err != nil { return err } if kind == List { - return decodeList(s, val, decodeUint, maxInt) + return decodeListSlice(s, val, decodeUint) } b, err := s.Bytes() if err == nil { @@ -276,14 +288,15 @@ func decodeByteArray(s *Stream, val reflect.Value) error { } zero(val, int(size)) case List: - return decodeList(s, val, decodeUint, val.Len()) + return decodeListArray(s, val, decodeUint) } return nil } func zero(val reflect.Value, start int) { z := reflect.Zero(val.Type().Elem()) - for i := start; i < val.Len(); i++ { + end := val.Len() + for i := start; i < end; i++ { val.Index(i).Set(z) } } @@ -358,7 +371,7 @@ func decodeInterface(s *Stream, val reflect.Value) error { } if kind == List { slice := reflect.New(ifsliceType).Elem() - if err := decodeList(s, slice, decodeInterface, maxInt); err != nil { + if err := decodeListSlice(s, slice, decodeInterface); err != nil { return err } val.Set(slice) From 829730dec419112a8e870e1bf0ea20736ab0d02a Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Tue, 9 Dec 2014 12:49:20 +0100 Subject: [PATCH 18/79] rlp: remove dead code --- rlp/decode.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/rlp/decode.go b/rlp/decode.go index 66830b89c..06786eae7 100644 --- a/rlp/decode.go +++ b/rlp/decode.go @@ -238,8 +238,6 @@ func decodeListArray(s *Stream, val reflect.Value, elemdec decoder) error { } else if err != nil { return err } - if i == vlen { - } } if i < vlen { zero(val, i) From acf4b5753fd473f048176a12c42e1b8209035b57 Mon Sep 17 00:00:00 2001 From: obscuren Date: Tue, 9 Dec 2014 20:27:57 +0100 Subject: [PATCH 19/79] Core changes * Code = '' if gas < len(D) * 5 * Sha3 gas 10 + 10 * len(D), rounding up 32 bytes * Sha256 gas 50 + 50 * len(D), rounding up 32 bytes * Ripmed gas 50 + 50 * len(D), rounding up 32 bytes * Accounts and value transfers no longer reverted --- core/execution.go | 16 ++++++++-------- vm/address.go | 18 ++++++++++++++---- vm/common.go | 7 +++++++ vm/vm_debug.go | 14 +++++++++++--- 4 files changed, 40 insertions(+), 15 deletions(-) diff --git a/core/execution.go b/core/execution.go index 9f9d9a5d9..5176f7351 100644 --- a/core/execution.go +++ b/core/execution.go @@ -34,8 +34,14 @@ func (self *Execution) Call(codeAddr []byte, caller vm.ClosureRef) ([]byte, erro func (self *Execution) exec(code, caddr []byte, caller vm.ClosureRef) (ret []byte, err error) { env := self.vm.Env() - chainlogger.Debugf("pre state %x\n", env.State().Root()) + + from, to := env.State().GetStateObject(caller.Address()), env.State().GetOrNewStateObject(self.address) + // Skipping transfer is used on testing for the initial call + if !self.SkipTransfer { + err = env.Transfer(from, to, self.value) + } + snapshot := env.State().Copy() defer func() { if vm.IsDepthErr(err) || vm.IsOOGErr(err) { @@ -44,12 +50,6 @@ func (self *Execution) exec(code, caddr []byte, caller vm.ClosureRef) (ret []byt chainlogger.Debugf("post state %x\n", env.State().Root()) }() - from, to := env.State().GetStateObject(caller.Address()), env.State().GetOrNewStateObject(self.address) - // Skipping transfer is used on testing for the initial call - if !self.SkipTransfer { - err = env.Transfer(from, to, self.value) - } - if err != nil { caller.ReturnGas(self.Gas, self.price) @@ -59,7 +59,7 @@ func (self *Execution) exec(code, caddr []byte, caller vm.ClosureRef) (ret []byt // Pre-compiled contracts (address.go) 1, 2 & 3. naddr := ethutil.BigD(caddr).Uint64() if p := vm.Precompiled[naddr]; p != nil { - if self.Gas.Cmp(p.Gas) >= 0 { + if self.Gas.Cmp(p.Gas(len(self.input))) >= 0 { ret = p.Call(self.input) self.vm.Printf("NATIVE_FUNC(%x) => %x", naddr, ret) self.vm.Endl() diff --git a/vm/address.go b/vm/address.go index 06bd35f6b..be8921a3b 100644 --- a/vm/address.go +++ b/vm/address.go @@ -12,7 +12,7 @@ type Address interface { } type PrecompiledAddress struct { - Gas *big.Int + Gas func(l int) *big.Int fn func(in []byte) []byte } @@ -21,9 +21,19 @@ func (self PrecompiledAddress) Call(in []byte) []byte { } var Precompiled = map[uint64]*PrecompiledAddress{ - 1: &PrecompiledAddress{big.NewInt(500), ecrecoverFunc}, - 2: &PrecompiledAddress{big.NewInt(100), sha256Func}, - 3: &PrecompiledAddress{big.NewInt(100), ripemd160Func}, + 1: &PrecompiledAddress{func(l int) *big.Int { + return GasEcrecover + }, ecrecoverFunc}, + 2: &PrecompiledAddress{func(l int) *big.Int { + n := big.NewInt(int64(l+31)/32 + 1) + n.Mul(n, GasSha256) + return n + }, sha256Func}, + 3: &PrecompiledAddress{func(l int) *big.Int { + n := big.NewInt(int64(l+31)/32 + 1) + n.Mul(n, GasRipemd) + return n + }, ripemd160Func}, } func sha256Func(in []byte) []byte { diff --git a/vm/common.go b/vm/common.go index 9514ff6d3..5fd512687 100644 --- a/vm/common.go +++ b/vm/common.go @@ -27,10 +27,17 @@ var ( GasBalance = big.NewInt(20) GasCreate = big.NewInt(100) GasCall = big.NewInt(20) + GasCreateByte = big.NewInt(5) + GasSha3Byte = big.NewInt(10) + GasSha256Byte = big.NewInt(50) + GasRipemdByte = big.NewInt(50) GasMemory = big.NewInt(1) GasData = big.NewInt(5) GasTx = big.NewInt(500) GasLog = big.NewInt(32) + GasSha256 = big.NewInt(50) + GasRipemd = big.NewInt(50) + GasEcrecover = big.NewInt(100) Pow256 = ethutil.BigPow(2, 256) diff --git a/vm/vm_debug.go b/vm/vm_debug.go index be1c59339..c0a2d6d98 100644 --- a/vm/vm_debug.go +++ b/vm/vm_debug.go @@ -254,9 +254,12 @@ func (self *DebugVm) Run(me, caller ClosureRef, code []byte, value, gas, price * newMemSize.Mul(newMemSize, u256(32)) switch op { - // Additional gas usage on *CODPY case CALLDATACOPY, CODECOPY, EXTCODECOPY: addStepGasUsage(new(big.Int).Div(newMemSize, u256(32))) + case SHA3: + g := new(big.Int).Div(newMemSize, u256(32)) + g.Mul(g, GasSha3Byte) + addStepGasUsage(g) } if newMemSize.Cmp(u256(int64(mem.Len()))) > 0 { @@ -833,8 +836,13 @@ func (self *DebugVm) Run(me, caller ClosureRef, code []byte, value, gas, price * self.Printf("CREATE err %v", err) } else { - ref.SetCode(ret) - msg.Output = ret + // gas < len(ret) * CreateDataGas == NO_CODE + dataGas := big.NewInt(int64(len(ret))) + dataGas.Mul(dataGas, GasCreateByte) + if closure.UseGas(dataGas) { + ref.SetCode(ret) + msg.Output = ret + } stack.Push(ethutil.BigD(addr)) } From df5157c0b0be0feb5366070f7f5d0c6321513bf4 Mon Sep 17 00:00:00 2001 From: obscuren Date: Tue, 9 Dec 2014 20:28:36 +0100 Subject: [PATCH 20/79] PV49 --- peer.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/peer.go b/peer.go index 46ac65247..331e9de37 100644 --- a/peer.go +++ b/peer.go @@ -24,7 +24,7 @@ const ( // The size of the output buffer for writing messages outputBufferSize = 50 // Current protocol version - ProtocolVersion = 48 + ProtocolVersion = 49 // Current P2P version P2PVersion = 2 // Ethereum network version From 6cf4e0329c05174da7450f38dcba457c9ffea417 Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Tue, 9 Dec 2014 13:55:47 +0100 Subject: [PATCH 21/79] rlp: display decoder target type in more error messages Decode error messages now say "expected input list for foo.MyStruct" instead of just "expected List". --- rlp/decode.go | 42 ++++++++++++++++++++++++------------------ rlp/decode_test.go | 18 +++++++++--------- 2 files changed, 33 insertions(+), 27 deletions(-) diff --git a/rlp/decode.go b/rlp/decode.go index 06786eae7..712d9fcf1 100644 --- a/rlp/decode.go +++ b/rlp/decode.go @@ -82,6 +82,20 @@ func (err decodeError) Error() string { return fmt.Sprintf("rlp: %s for %v", err.msg, err.typ) } +func wrapStreamError(err error, typ reflect.Type) error { + switch err { + case ErrExpectedList: + return decodeError{"expected input list", typ} + case ErrExpectedString: + return decodeError{"expected input string or byte", typ} + case errUintOverflow: + return decodeError{"input string too long", typ} + case errNotAtEOL: + return decodeError{"input list has too many elements", typ} + } + return err +} + var ( decoderInterface = reflect.TypeOf(new(Decoder)).Elem() bigInt = reflect.TypeOf(big.Int{}) @@ -118,10 +132,8 @@ func makeDecoder(typ reflect.Type) (dec decoder, err error) { func decodeUint(s *Stream, val reflect.Value) error { typ := val.Type() num, err := s.uint(typ.Bits()) - if err == errUintOverflow { - return decodeError{"input string too big", typ} - } else if err != nil { - return err + if err != nil { + return wrapStreamError(err, val.Type()) } val.SetUint(num) return nil @@ -130,7 +142,7 @@ func decodeUint(s *Stream, val reflect.Value) error { func decodeString(s *Stream, val reflect.Value) error { b, err := s.Bytes() if err != nil { - return err + return wrapStreamError(err, val.Type()) } val.SetString(string(b)) return nil @@ -143,7 +155,7 @@ func decodeBigIntNoPtr(s *Stream, val reflect.Value) error { func decodeBigInt(s *Stream, val reflect.Value) error { b, err := s.Bytes() if err != nil { - return err + return wrapStreamError(err, val.Type()) } i := val.Interface().(*big.Int) if i == nil { @@ -181,7 +193,7 @@ func makeListDecoder(typ reflect.Type) (decoder, error) { func decodeListSlice(s *Stream, val reflect.Value, elemdec decoder) error { size, err := s.List() if err != nil { - return err + return wrapStreamError(err, val.Type()) } if size == 0 { val.Set(reflect.MakeSlice(val.Type(), 0, 0)) @@ -242,10 +254,7 @@ func decodeListArray(s *Stream, val reflect.Value, elemdec decoder) error { if i < vlen { zero(val, i) } - if err = s.ListEnd(); err == errNotAtEOL { - return decodeError{"input list has too many elements", val.Type()} - } - return err + return wrapStreamError(s.ListEnd(), val.Type()) } func decodeByteSlice(s *Stream, val reflect.Value) error { @@ -271,14 +280,14 @@ func decodeByteArray(s *Stream, val reflect.Value) error { switch kind { case Byte: if val.Len() == 0 { - return decodeError{"input string too big", val.Type()} + return decodeError{"input string too long", val.Type()} } bv, _ := s.Uint() val.Index(0).SetUint(bv) zero(val, 1) case String: if uint64(val.Len()) < size { - return decodeError{"input string too big", val.Type()} + return decodeError{"input string too long", val.Type()} } slice := val.Slice(0, int(size)).Interface().([]byte) if err := s.readFull(slice); err != nil { @@ -317,7 +326,7 @@ func makeStructDecoder(typ reflect.Type) (decoder, error) { } dec := func(s *Stream, val reflect.Value) (err error) { if _, err = s.List(); err != nil { - return err + return wrapStreamError(err, typ) } for _, f := range fields { err = f.info.decoder(s, val.Field(f.index)) @@ -328,10 +337,7 @@ func makeStructDecoder(typ reflect.Type) (decoder, error) { return err } } - if err = s.ListEnd(); err == errNotAtEOL { - err = decodeError{"input list has too many elements", typ} - } - return err + return wrapStreamError(s.ListEnd(), typ) } return dec, nil } diff --git a/rlp/decode_test.go b/rlp/decode_test.go index 4c030e24d..7a1743937 100644 --- a/rlp/decode_test.go +++ b/rlp/decode_test.go @@ -213,8 +213,8 @@ var decodeTests = []decodeTest{ {input: "820505", ptr: new(uint32), value: uint32(0x0505)}, {input: "83050505", ptr: new(uint32), value: uint32(0x050505)}, {input: "8405050505", ptr: new(uint32), value: uint32(0x05050505)}, - {input: "850505050505", ptr: new(uint32), error: "rlp: input string too big for uint32"}, - {input: "C0", ptr: new(uint32), error: ErrExpectedString.Error()}, + {input: "850505050505", ptr: new(uint32), error: "rlp: input string too long for uint32"}, + {input: "C0", ptr: new(uint32), error: "rlp: expected input string or byte for uint32"}, // slices {input: "C0", ptr: new([]uint), value: []uint{}}, @@ -231,7 +231,7 @@ var decodeTests = []decodeTest{ {input: "8D6162636465666768696A6B6C6D", ptr: new([]byte), value: []byte("abcdefghijklm")}, {input: "C0", ptr: new([]byte), value: []byte{}}, {input: "C3010203", ptr: new([]byte), value: []byte{1, 2, 3}}, - {input: "C3820102", ptr: new([]byte), error: "rlp: input string too big for uint8"}, + {input: "C3820102", ptr: new([]byte), error: "rlp: input string too long for uint8"}, // byte arrays {input: "01", ptr: new([5]byte), value: [5]byte{1}}, @@ -239,8 +239,8 @@ var decodeTests = []decodeTest{ {input: "850102030405", ptr: new([5]byte), value: [5]byte{1, 2, 3, 4, 5}}, {input: "C0", ptr: new([5]byte), value: [5]byte{}}, {input: "C3010203", ptr: new([5]byte), value: [5]byte{1, 2, 3, 0, 0}}, - {input: "C3820102", ptr: new([5]byte), error: "rlp: input string too big for uint8"}, - {input: "86010203040506", ptr: new([5]byte), error: "rlp: input string too big for [5]uint8"}, + {input: "C3820102", ptr: new([5]byte), error: "rlp: input string too long for uint8"}, + {input: "86010203040506", ptr: new([5]byte), error: "rlp: input string too long for [5]uint8"}, {input: "850101", ptr: new([5]byte), error: io.ErrUnexpectedEOF.Error()}, // byte array reuse (should be zeroed) @@ -254,19 +254,19 @@ var decodeTests = []decodeTest{ // zero sized byte arrays {input: "80", ptr: new([0]byte), value: [0]byte{}}, {input: "C0", ptr: new([0]byte), value: [0]byte{}}, - {input: "01", ptr: new([0]byte), error: "rlp: input string too big for [0]uint8"}, - {input: "8101", ptr: new([0]byte), error: "rlp: input string too big for [0]uint8"}, + {input: "01", ptr: new([0]byte), error: "rlp: input string too long for [0]uint8"}, + {input: "8101", ptr: new([0]byte), error: "rlp: input string too long for [0]uint8"}, // strings {input: "00", ptr: new(string), value: "\000"}, {input: "8D6162636465666768696A6B6C6D", ptr: new(string), value: "abcdefghijklm"}, - {input: "C0", ptr: new(string), error: ErrExpectedString.Error()}, + {input: "C0", ptr: new(string), error: "rlp: expected input string or byte for string"}, // big ints {input: "01", ptr: new(*big.Int), value: big.NewInt(1)}, {input: "89FFFFFFFFFFFFFFFFFF", ptr: new(*big.Int), value: veryBigInt}, {input: "10", ptr: new(big.Int), value: *big.NewInt(16)}, // non-pointer also works - {input: "C0", ptr: new(*big.Int), error: ErrExpectedString.Error()}, + {input: "C0", ptr: new(*big.Int), error: "rlp: expected input string or byte for *big.Int"}, // structs {input: "C0", ptr: new(simplestruct), value: simplestruct{0, ""}}, From c24018e273e5457f7c5bf6af1b541bb55b19ec8d Mon Sep 17 00:00:00 2001 From: obscuren Date: Wed, 10 Dec 2014 00:02:43 +0100 Subject: [PATCH 22/79] Added S256 curve --- crypto/curve.go | 363 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 363 insertions(+) create mode 100644 crypto/curve.go diff --git a/crypto/curve.go b/crypto/curve.go new file mode 100644 index 000000000..131a0dd2f --- /dev/null +++ b/crypto/curve.go @@ -0,0 +1,363 @@ +package crypto + +// Copyright 2010 The Go Authors. All rights reserved. +// Copyright 2011 ThePiachu. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package bitelliptic implements several Koblitz elliptic curves over prime +// fields. + +// This package operates, internally, on Jacobian coordinates. For a given +// (x, y) position on the curve, the Jacobian coordinates are (x1, y1, z1) +// where x = x1/z1² and y = y1/z1³. The greatest speedups come when the whole +// calculation can be performed within the transform (as in ScalarMult and +// ScalarBaseMult). But even for Add and Double, it's faster to apply and +// reverse the transform than to operate in affine coordinates. + +import ( + "crypto/elliptic" + "io" + "math/big" + "sync" +) + +// A BitCurve represents a Koblitz Curve with a=0. +// See http://www.hyperelliptic.org/EFD/g1p/auto-shortw.html +type BitCurve struct { + P *big.Int // the order of the underlying field + N *big.Int // the order of the base point + B *big.Int // the constant of the BitCurve equation + Gx, Gy *big.Int // (x,y) of the base point + BitSize int // the size of the underlying field +} + +func (BitCurve *BitCurve) Params() *elliptic.CurveParams { + return &elliptic.CurveParams{BitCurve.P, BitCurve.N, BitCurve.B, BitCurve.Gx, BitCurve.Gy, BitCurve.BitSize} +} + +// IsOnBitCurve returns true if the given (x,y) lies on the BitCurve. +func (BitCurve *BitCurve) IsOnCurve(x, y *big.Int) bool { + // y² = x³ + b + y2 := new(big.Int).Mul(y, y) //y² + y2.Mod(y2, BitCurve.P) //y²%P + + x3 := new(big.Int).Mul(x, x) //x² + x3.Mul(x3, x) //x³ + + x3.Add(x3, BitCurve.B) //x³+B + x3.Mod(x3, BitCurve.P) //(x³+B)%P + + return x3.Cmp(y2) == 0 +} + +//TODO: double check if the function is okay +// affineFromJacobian reverses the Jacobian transform. See the comment at the +// top of the file. +func (BitCurve *BitCurve) affineFromJacobian(x, y, z *big.Int) (xOut, yOut *big.Int) { + zinv := new(big.Int).ModInverse(z, BitCurve.P) + zinvsq := new(big.Int).Mul(zinv, zinv) + + xOut = new(big.Int).Mul(x, zinvsq) + xOut.Mod(xOut, BitCurve.P) + zinvsq.Mul(zinvsq, zinv) + yOut = new(big.Int).Mul(y, zinvsq) + yOut.Mod(yOut, BitCurve.P) + return +} + +// Add returns the sum of (x1,y1) and (x2,y2) +func (BitCurve *BitCurve) Add(x1, y1, x2, y2 *big.Int) (*big.Int, *big.Int) { + z := new(big.Int).SetInt64(1) + return BitCurve.affineFromJacobian(BitCurve.addJacobian(x1, y1, z, x2, y2, z)) +} + +// addJacobian takes two points in Jacobian coordinates, (x1, y1, z1) and +// (x2, y2, z2) and returns their sum, also in Jacobian form. +func (BitCurve *BitCurve) addJacobian(x1, y1, z1, x2, y2, z2 *big.Int) (*big.Int, *big.Int, *big.Int) { + // See http://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#addition-add-2007-bl + z1z1 := new(big.Int).Mul(z1, z1) + z1z1.Mod(z1z1, BitCurve.P) + z2z2 := new(big.Int).Mul(z2, z2) + z2z2.Mod(z2z2, BitCurve.P) + + u1 := new(big.Int).Mul(x1, z2z2) + u1.Mod(u1, BitCurve.P) + u2 := new(big.Int).Mul(x2, z1z1) + u2.Mod(u2, BitCurve.P) + h := new(big.Int).Sub(u2, u1) + if h.Sign() == -1 { + h.Add(h, BitCurve.P) + } + i := new(big.Int).Lsh(h, 1) + i.Mul(i, i) + j := new(big.Int).Mul(h, i) + + s1 := new(big.Int).Mul(y1, z2) + s1.Mul(s1, z2z2) + s1.Mod(s1, BitCurve.P) + s2 := new(big.Int).Mul(y2, z1) + s2.Mul(s2, z1z1) + s2.Mod(s2, BitCurve.P) + r := new(big.Int).Sub(s2, s1) + if r.Sign() == -1 { + r.Add(r, BitCurve.P) + } + r.Lsh(r, 1) + v := new(big.Int).Mul(u1, i) + + x3 := new(big.Int).Set(r) + x3.Mul(x3, x3) + x3.Sub(x3, j) + x3.Sub(x3, v) + x3.Sub(x3, v) + x3.Mod(x3, BitCurve.P) + + y3 := new(big.Int).Set(r) + v.Sub(v, x3) + y3.Mul(y3, v) + s1.Mul(s1, j) + s1.Lsh(s1, 1) + y3.Sub(y3, s1) + y3.Mod(y3, BitCurve.P) + + z3 := new(big.Int).Add(z1, z2) + z3.Mul(z3, z3) + z3.Sub(z3, z1z1) + if z3.Sign() == -1 { + z3.Add(z3, BitCurve.P) + } + z3.Sub(z3, z2z2) + if z3.Sign() == -1 { + z3.Add(z3, BitCurve.P) + } + z3.Mul(z3, h) + z3.Mod(z3, BitCurve.P) + + return x3, y3, z3 +} + +// Double returns 2*(x,y) +func (BitCurve *BitCurve) Double(x1, y1 *big.Int) (*big.Int, *big.Int) { + z1 := new(big.Int).SetInt64(1) + return BitCurve.affineFromJacobian(BitCurve.doubleJacobian(x1, y1, z1)) +} + +// doubleJacobian takes a point in Jacobian coordinates, (x, y, z), and +// returns its double, also in Jacobian form. +func (BitCurve *BitCurve) doubleJacobian(x, y, z *big.Int) (*big.Int, *big.Int, *big.Int) { + // See http://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#doubling-dbl-2009-l + + a := new(big.Int).Mul(x, x) //X1² + b := new(big.Int).Mul(y, y) //Y1² + c := new(big.Int).Mul(b, b) //B² + + d := new(big.Int).Add(x, b) //X1+B + d.Mul(d, d) //(X1+B)² + d.Sub(d, a) //(X1+B)²-A + d.Sub(d, c) //(X1+B)²-A-C + d.Mul(d, big.NewInt(2)) //2*((X1+B)²-A-C) + + e := new(big.Int).Mul(big.NewInt(3), a) //3*A + f := new(big.Int).Mul(e, e) //E² + + x3 := new(big.Int).Mul(big.NewInt(2), d) //2*D + x3.Sub(f, x3) //F-2*D + x3.Mod(x3, BitCurve.P) + + y3 := new(big.Int).Sub(d, x3) //D-X3 + y3.Mul(e, y3) //E*(D-X3) + y3.Sub(y3, new(big.Int).Mul(big.NewInt(8), c)) //E*(D-X3)-8*C + y3.Mod(y3, BitCurve.P) + + z3 := new(big.Int).Mul(y, z) //Y1*Z1 + z3.Mul(big.NewInt(2), z3) //3*Y1*Z1 + z3.Mod(z3, BitCurve.P) + + return x3, y3, z3 +} + +//TODO: double check if it is okay +// ScalarMult returns k*(Bx,By) where k is a number in big-endian form. +func (BitCurve *BitCurve) ScalarMult(Bx, By *big.Int, k []byte) (*big.Int, *big.Int) { + // We have a slight problem in that the identity of the group (the + // point at infinity) cannot be represented in (x, y) form on a finite + // machine. Thus the standard add/double algorithm has to be tweaked + // slightly: our initial state is not the identity, but x, and we + // ignore the first true bit in |k|. If we don't find any true bits in + // |k|, then we return nil, nil, because we cannot return the identity + // element. + + Bz := new(big.Int).SetInt64(1) + x := Bx + y := By + z := Bz + + seenFirstTrue := false + for _, byte := range k { + for bitNum := 0; bitNum < 8; bitNum++ { + if seenFirstTrue { + x, y, z = BitCurve.doubleJacobian(x, y, z) + } + if byte&0x80 == 0x80 { + if !seenFirstTrue { + seenFirstTrue = true + } else { + x, y, z = BitCurve.addJacobian(Bx, By, Bz, x, y, z) + } + } + byte <<= 1 + } + } + + if !seenFirstTrue { + return nil, nil + } + + return BitCurve.affineFromJacobian(x, y, z) +} + +// ScalarBaseMult returns k*G, where G is the base point of the group and k is +// an integer in big-endian form. +func (BitCurve *BitCurve) ScalarBaseMult(k []byte) (*big.Int, *big.Int) { + return BitCurve.ScalarMult(BitCurve.Gx, BitCurve.Gy, k) +} + +var mask = []byte{0xff, 0x1, 0x3, 0x7, 0xf, 0x1f, 0x3f, 0x7f} + +//TODO: double check if it is okay +// GenerateKey returns a public/private key pair. The private key is generated +// using the given reader, which must return random data. +func (BitCurve *BitCurve) GenerateKey(rand io.Reader) (priv []byte, x, y *big.Int, err error) { + byteLen := (BitCurve.BitSize + 7) >> 3 + priv = make([]byte, byteLen) + + for x == nil { + _, err = io.ReadFull(rand, priv) + if err != nil { + return + } + // We have to mask off any excess bits in the case that the size of the + // underlying field is not a whole number of bytes. + priv[0] &= mask[BitCurve.BitSize%8] + // This is because, in tests, rand will return all zeros and we don't + // want to get the point at infinity and loop forever. + priv[1] ^= 0x42 + x, y = BitCurve.ScalarBaseMult(priv) + } + return +} + +// Marshal converts a point into the form specified in section 4.3.6 of ANSI +// X9.62. +func (BitCurve *BitCurve) Marshal(x, y *big.Int) []byte { + byteLen := (BitCurve.BitSize + 7) >> 3 + + ret := make([]byte, 1+2*byteLen) + ret[0] = 4 // uncompressed point + + xBytes := x.Bytes() + copy(ret[1+byteLen-len(xBytes):], xBytes) + yBytes := y.Bytes() + copy(ret[1+2*byteLen-len(yBytes):], yBytes) + return ret +} + +// Unmarshal converts a point, serialised by Marshal, into an x, y pair. On +// error, x = nil. +func (BitCurve *BitCurve) Unmarshal(data []byte) (x, y *big.Int) { + byteLen := (BitCurve.BitSize + 7) >> 3 + if len(data) != 1+2*byteLen { + return + } + if data[0] != 4 { // uncompressed form + return + } + x = new(big.Int).SetBytes(data[1 : 1+byteLen]) + y = new(big.Int).SetBytes(data[1+byteLen:]) + return +} + +//curve parameters taken from: +//http://www.secg.org/collateral/sec2_final.pdf + +var initonce sync.Once +var ecp160k1 *BitCurve +var ecp192k1 *BitCurve +var ecp224k1 *BitCurve +var ecp256k1 *BitCurve + +func initAll() { + initS160() + initS192() + initS224() + initS256() +} + +func initS160() { + // See SEC 2 section 2.4.1 + ecp160k1 = new(BitCurve) + ecp160k1.P, _ = new(big.Int).SetString("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFAC73", 16) + ecp160k1.N, _ = new(big.Int).SetString("0100000000000000000001B8FA16DFAB9ACA16B6B3", 16) + ecp160k1.B, _ = new(big.Int).SetString("0000000000000000000000000000000000000007", 16) + ecp160k1.Gx, _ = new(big.Int).SetString("3B4C382CE37AA192A4019E763036F4F5DD4D7EBB", 16) + ecp160k1.Gy, _ = new(big.Int).SetString("938CF935318FDCED6BC28286531733C3F03C4FEE", 16) + ecp160k1.BitSize = 160 +} + +func initS192() { + // See SEC 2 section 2.5.1 + ecp192k1 = new(BitCurve) + ecp192k1.P, _ = new(big.Int).SetString("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFEE37", 16) + ecp192k1.N, _ = new(big.Int).SetString("FFFFFFFFFFFFFFFFFFFFFFFE26F2FC170F69466A74DEFD8D", 16) + ecp192k1.B, _ = new(big.Int).SetString("000000000000000000000000000000000000000000000003", 16) + ecp192k1.Gx, _ = new(big.Int).SetString("DB4FF10EC057E9AE26B07D0280B7F4341DA5D1B1EAE06C7D", 16) + ecp192k1.Gy, _ = new(big.Int).SetString("9B2F2F6D9C5628A7844163D015BE86344082AA88D95E2F9D", 16) + ecp192k1.BitSize = 192 +} + +func initS224() { + // See SEC 2 section 2.6.1 + ecp224k1 = new(BitCurve) + ecp224k1.P, _ = new(big.Int).SetString("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFE56D", 16) + ecp224k1.N, _ = new(big.Int).SetString("010000000000000000000000000001DCE8D2EC6184CAF0A971769FB1F7", 16) + ecp224k1.B, _ = new(big.Int).SetString("00000000000000000000000000000000000000000000000000000005", 16) + ecp224k1.Gx, _ = new(big.Int).SetString("A1455B334DF099DF30FC28A169A467E9E47075A90F7E650EB6B7A45C", 16) + ecp224k1.Gy, _ = new(big.Int).SetString("7E089FED7FBA344282CAFBD6F7E319F7C0B0BD59E2CA4BDB556D61A5", 16) + ecp224k1.BitSize = 224 +} + +func initS256() { + // See SEC 2 section 2.7.1 + ecp256k1 = new(BitCurve) + ecp256k1.P, _ = new(big.Int).SetString("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F", 16) + ecp256k1.N, _ = new(big.Int).SetString("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141", 16) + ecp256k1.B, _ = new(big.Int).SetString("0000000000000000000000000000000000000000000000000000000000000007", 16) + ecp256k1.Gx, _ = new(big.Int).SetString("79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798", 16) + ecp256k1.Gy, _ = new(big.Int).SetString("483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8", 16) + ecp256k1.BitSize = 256 +} + +// S160 returns a BitCurve which implements secp160k1 (see SEC 2 section 2.4.1) +func S160() *BitCurve { + initonce.Do(initAll) + return ecp160k1 +} + +// S192 returns a BitCurve which implements secp192k1 (see SEC 2 section 2.5.1) +func S192() *BitCurve { + initonce.Do(initAll) + return ecp192k1 +} + +// S224 returns a BitCurve which implements secp224k1 (see SEC 2 section 2.6.1) +func S224() *BitCurve { + initonce.Do(initAll) + return ecp224k1 +} + +// S256 returns a BitCurve which implements secp256k1 (see SEC 2 section 2.7.1) +func S256() *BitCurve { + initonce.Do(initAll) + return ecp256k1 +} From 87adff7e189ee0a1fd50a3ef30ba22482e60f314 Mon Sep 17 00:00:00 2001 From: obscuren Date: Wed, 10 Dec 2014 00:03:21 +0100 Subject: [PATCH 23/79] Added Encrypt & Decrypt using the ECIES w/ tests --- crypto/crypto.go | 42 ++++++++++++++++++++++++++++++++++ crypto/encrypt_decrypt_test.go | 40 ++++++++++++++++++++++++++++++++ 2 files changed, 82 insertions(+) create mode 100644 crypto/encrypt_decrypt_test.go diff --git a/crypto/crypto.go b/crypto/crypto.go index e10a9e81f..87dd72dc7 100644 --- a/crypto/crypto.go +++ b/crypto/crypto.go @@ -1,14 +1,35 @@ package crypto import ( + "crypto/ecdsa" + "crypto/elliptic" + "crypto/rand" "crypto/sha256" "code.google.com/p/go.crypto/ripemd160" "github.com/ethereum/go-ethereum/ethutil" + "github.com/obscuren/ecies" "github.com/obscuren/secp256k1-go" "github.com/obscuren/sha3" ) +func init() { + // specify the params for the s256 curve + ecies.AddParamsForCurve(S256(), ecies.ECIES_AES128_SHA256) +} + +func ToECDSA(prv []byte) *ecdsa.PrivateKey { + priv := new(ecdsa.PrivateKey) + priv.PublicKey.Curve = S256() + priv.D = ethutil.BigD(prv) + priv.PublicKey.X, priv.PublicKey.Y = S256().ScalarBaseMult(prv) + return priv +} + +func FromECDSA(prv *ecdsa.PrivateKey) []byte { + return prv.D.Bytes() +} + // TODO refactor, remove (bin) func Sha3(data []byte) []byte { d := sha3.NewKeccak256() @@ -45,3 +66,24 @@ func Ecrecover(data []byte) []byte { return r } + +func SigToPub(hash, sig []byte) []byte { + return Ecrecover(append(hash, sig...)) +} + +func Sign(hash, prv []byte) (sig []byte, err error) { + sig, err = secp256k1.Sign(hash, prv) + return +} + +func Encrypt(pub, message []byte) ([]byte, error) { + x, y := elliptic.Unmarshal(S256(), pub) + epub := &ecdsa.PublicKey{S256(), x, y} + + return ecies.Encrypt(rand.Reader, ecies.ImportECDSAPublic(epub), message, nil, nil) +} + +func Decrypt(prv, ct []byte) ([]byte, error) { + key := ecies.ImportECDSA(ToECDSA(prv)) + return key.Decrypt(rand.Reader, ct, nil, nil) +} diff --git a/crypto/encrypt_decrypt_test.go b/crypto/encrypt_decrypt_test.go new file mode 100644 index 000000000..44bb26f47 --- /dev/null +++ b/crypto/encrypt_decrypt_test.go @@ -0,0 +1,40 @@ +package crypto + +import ( + "bytes" + "fmt" + "testing" + + "github.com/ethereum/go-ethereum/ethutil" +) + +func TestBox(t *testing.T) { + prv1 := ethutil.Hex2Bytes("4b50fa71f5c3eeb8fdc452224b2395af2fcc3d125e06c32c82e048c0559db03f") + prv2 := ethutil.Hex2Bytes("d0b043b4c5d657670778242d82d68a29d25d7d711127d17b8e299f156dad361a") + pub2 := ethutil.Hex2Bytes("04bd27a63c91fe3233c5777e6d3d7b39204d398c8f92655947eb5a373d46e1688f022a1632d264725cbc7dc43ee1cfebde42fa0a86d08b55d2acfbb5e9b3b48dc5") + + message := []byte("Hello, world.") + ct, err := Encrypt(pub2, message) + if err != nil { + fmt.Println(err.Error()) + t.FailNow() + } + + pt, err := Decrypt(prv2, ct) + if err != nil { + fmt.Println(err.Error()) + t.FailNow() + } + + if !bytes.Equal(pt, message) { + fmt.Println("ecies: plaintext doesn't match message") + t.FailNow() + } + + _, err = Decrypt(prv1, pt) + if err == nil { + fmt.Println("ecies: encryption should not have succeeded") + t.FailNow() + } + +} From 984c7e6689f720e0b60a462e00793364de397909 Mon Sep 17 00:00:00 2001 From: obscuren Date: Wed, 10 Dec 2014 00:03:50 +0100 Subject: [PATCH 24/79] Added encryption for messages better API for sealing messages --- whisper/envelope.go | 10 ++++----- whisper/message.go | 49 +++++++++++++++++++++++++++++++++++++++++++ whisper/whisper.go | 51 +++++++++++++++++++++++++++++++-------------- wire/messaging.go | 3 +-- 4 files changed, 90 insertions(+), 23 deletions(-) diff --git a/whisper/envelope.go b/whisper/envelope.go index 8e66a7bbb..eb80098ad 100644 --- a/whisper/envelope.go +++ b/whisper/envelope.go @@ -16,8 +16,8 @@ const ( ) type Envelope struct { - Expiry int32 // Whisper protocol specifies int32, really should be int64 - Ttl int32 // ^^^^^^ + Expiry uint32 // Whisper protocol specifies int32, really should be int64 + Ttl uint32 // ^^^^^^ Topics [][]byte Data []byte Nonce uint32 @@ -52,11 +52,11 @@ func (self *Envelope) Hash() Hash { func NewEnvelope(ttl time.Duration, topics [][]byte, data *Message) *Envelope { exp := time.Now().Add(ttl) - return &Envelope{int32(exp.Unix()), int32(ttl.Seconds()), topics, data.Bytes(), 0, Hash{}} + return &Envelope{uint32(exp.Unix()), uint32(ttl.Seconds()), topics, data.Bytes(), 0, Hash{}} } -func (self *Envelope) Seal() { - self.proveWork(DefaultPow) +func (self *Envelope) Seal(pow time.Duration) { + self.proveWork(pow) } func (self *Envelope) proveWork(dura time.Duration) { diff --git a/whisper/message.go b/whisper/message.go index 21cf163e6..408b9f7df 100644 --- a/whisper/message.go +++ b/whisper/message.go @@ -1,5 +1,11 @@ package whisper +import ( + "time" + + "github.com/ethereum/go-ethereum/crypto" +) + type Message struct { Flags byte Signature []byte @@ -10,6 +16,49 @@ func NewMessage(payload []byte) *Message { return &Message{Flags: 0, Payload: payload} } +func (self *Message) hash() []byte { + return crypto.Sha3(append([]byte{self.Flags}, self.Payload...)) +} + +func (self *Message) sign(key []byte) (err error) { + self.Flags = 1 + self.Signature, err = crypto.Sign(self.hash(), key) + return +} + +func (self *Message) Encrypt(from, to []byte) (err error) { + err = self.sign(from) + if err != nil { + return err + } + + self.Payload, err = crypto.Encrypt(to, self.Payload) + if err != nil { + return err + } + + return nil +} + func (self *Message) Bytes() []byte { return append([]byte{self.Flags}, append(self.Signature, self.Payload...)...) } + +type Opts struct { + From, To []byte // private(sender), public(receiver) key + Ttl time.Duration + Topics [][]byte +} + +func (self *Message) Seal(pow time.Duration, opts Opts) (*Envelope, error) { + if len(opts.To) > 0 && len(opts.From) > 0 { + if err := self.Encrypt(opts.From, opts.To); err != nil { + return nil, err + } + } + + envelope := NewEnvelope(DefaultTtl, opts.Topics, self) + envelope.Seal(pow) + + return envelope, nil +} diff --git a/whisper/whisper.go b/whisper/whisper.go index 78e4d4848..b4e37b959 100644 --- a/whisper/whisper.go +++ b/whisper/whisper.go @@ -2,6 +2,7 @@ package whisper import ( "bytes" + "errors" "fmt" "sync" "time" @@ -35,7 +36,7 @@ const ( envelopesMsg = 0x01 ) -const defaultTtl = 50 * time.Second +const DefaultTtl = 50 * time.Second type Whisper struct { pub, sec []byte @@ -43,7 +44,7 @@ type Whisper struct { mmu sync.RWMutex messages map[Hash]*Envelope - expiry map[int32]*set.SetNonTS + expiry map[uint32]*set.SetNonTS quit chan struct{} } @@ -53,12 +54,18 @@ func New(pub, sec []byte) *Whisper { pub: pub, sec: sec, messages: make(map[Hash]*Envelope), - expiry: make(map[int32]*set.SetNonTS), + expiry: make(map[uint32]*set.SetNonTS), quit: make(chan struct{}), } go whisper.update() - whisper.Send(defaultTtl, nil, NewMessage([]byte("Hello world. This is whisper-go"))) + msg := NewMessage([]byte(fmt.Sprintf("Hello world. This is whisper-go. Incase you're wondering; the time is %v", time.Now()))) + envelope, _ := msg.Seal(DefaultPow, Opts{ + Ttl: DefaultTtl, + }) + if err := whisper.Send(envelope); err != nil { + fmt.Println(err) + } // p2p whisper sub protocol handler whisper.protocol = p2p.Protocol{ @@ -75,17 +82,14 @@ func (self *Whisper) Stop() { close(self.quit) } -func (self *Whisper) Send(ttl time.Duration, topics [][]byte, data *Message) { - envelope := NewEnvelope(ttl, topics, data) - envelope.Seal() - - self.add(envelope) +func (self *Whisper) Send(envelope *Envelope) error { + return self.add(envelope) } // Main handler for passing whisper messages to whisper peer objects func (self *Whisper) msgHandler(peer *p2p.Peer, ws p2p.MsgReadWriter) error { wpeer := NewPeer(self, peer, ws) - // init whisper peer (handshake/status) + // initialise whisper peer (handshake/status) if err := wpeer.init(); err != nil { return err } @@ -106,22 +110,37 @@ func (self *Whisper) msgHandler(peer *p2p.Peer, ws p2p.MsgReadWriter) error { continue } - self.add(envelope) + if err := self.add(envelope); err != nil { + // TODO Punish peer here. Invalid envelope. + peer.Infoln(err) + } wpeer.addKnown(envelope) } } // takes care of adding envelopes to the messages pool. At this moment no sanity checks are being performed. -func (self *Whisper) add(envelope *Envelope) { +func (self *Whisper) add(envelope *Envelope) error { + if !envelope.valid() { + return errors.New("invalid pow for envelope") + } + self.mmu.Lock() defer self.mmu.Unlock() - fmt.Println("add", envelope) - self.messages[envelope.Hash()] = envelope + hash := envelope.Hash() + self.messages[hash] = envelope if self.expiry[envelope.Expiry] == nil { self.expiry[envelope.Expiry] = set.NewNonTS() } - self.expiry[envelope.Expiry].Add(envelope.Hash()) + + if !self.expiry[envelope.Expiry].Has(hash) { + self.expiry[envelope.Expiry].Add(hash) + // TODO notify listeners (given that we had any ...) + } + + fmt.Println("add", envelope) + + return nil } func (self *Whisper) update() { @@ -141,7 +160,7 @@ func (self *Whisper) expire() { self.mmu.Lock() defer self.mmu.Unlock() - now := int32(time.Now().Unix()) + now := uint32(time.Now().Unix()) for then, hashSet := range self.expiry { if then > now { continue diff --git a/wire/messaging.go b/wire/messaging.go index b919aa0f4..9c6cb5944 100644 --- a/wire/messaging.go +++ b/wire/messaging.go @@ -33,8 +33,7 @@ const ( MsgGetPeersTy = 0x04 MsgPeersTy = 0x05 - MsgStatusTy = 0x10 - //MsgGetTxsTy = 0x11 + MsgStatusTy = 0x10 MsgTxTy = 0x12 MsgGetBlockHashesTy = 0x13 MsgBlockHashesTy = 0x14 From 3308491c92ea819826f7606e7a38224e3d2f214a Mon Sep 17 00:00:00 2001 From: obscuren Date: Wed, 10 Dec 2014 00:09:32 +0100 Subject: [PATCH 25/79] Removed tests because they've become obsolete --- core/chain_manager_test.go | 115 ------------------------------------- 1 file changed, 115 deletions(-) diff --git a/core/chain_manager_test.go b/core/chain_manager_test.go index ab43c511d..9a8bc9592 100644 --- a/core/chain_manager_test.go +++ b/core/chain_manager_test.go @@ -1,116 +1 @@ package core - -import ( - "fmt" - "math/big" - "testing" - "time" - - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/ethdb" - "github.com/ethereum/go-ethereum/ethutil" - "github.com/ethereum/go-ethereum/state" -) - -var TD *big.Int - -func init() { - ethutil.ReadConfig(".ethtest", "/tmp/ethtest", "") - ethutil.Config.Db, _ = ethdb.NewMemDatabase() -} - -type fakeproc struct { -} - -func (self fakeproc) ProcessWithParent(a, b *types.Block) (*big.Int, state.Messages, error) { - TD = new(big.Int).Add(TD, big.NewInt(1)) - return TD, nil, nil -} - -func makechain(cman *ChainManager, max int) *BlockChain { - blocks := make(types.Blocks, max) - for i := 0; i < max; i++ { - addr := ethutil.LeftPadBytes([]byte{byte(i)}, 20) - block := cman.NewBlock(addr) - if i != 0 { - cman.CurrentBlock = blocks[i-1] - } - blocks[i] = block - } - return NewChain(blocks) -} - -func TestLongerFork(t *testing.T) { - cman := NewChainManager() - cman.SetProcessor(fakeproc{}) - - TD = big.NewInt(1) - chainA := makechain(cman, 5) - - TD = big.NewInt(1) - chainB := makechain(cman, 10) - - td, err := cman.TestChain(chainA) - if err != nil { - t.Error("unable to create new TD from chainA:", err) - } - cman.TD = td - - _, err = cman.TestChain(chainB) - if err != nil { - t.Error("expected chainB not to give errors:", err) - } -} - -func TestEqualFork(t *testing.T) { - cman := NewChainManager() - cman.SetProcessor(fakeproc{}) - - TD = big.NewInt(1) - chainA := makechain(cman, 5) - - TD = big.NewInt(2) - chainB := makechain(cman, 5) - - td, err := cman.TestChain(chainA) - if err != nil { - t.Error("unable to create new TD from chainA:", err) - } - cman.TD = td - - _, err = cman.TestChain(chainB) - if err != nil { - t.Error("expected chainB not to give errors:", err) - } -} - -func TestBrokenChain(t *testing.T) { - cman := NewChainManager() - cman.SetProcessor(fakeproc{}) - - TD = big.NewInt(1) - chain := makechain(cman, 5) - chain.Remove(chain.Front()) - - _, err := cman.TestChain(chain) - if err == nil { - t.Error("expected broken chain to return error") - } -} - -func BenchmarkChainTesting(b *testing.B) { - const chainlen = 1000 - - ethutil.ReadConfig(".ethtest", "/tmp/ethtest", "") - ethutil.Config.Db, _ = ethdb.NewMemDatabase() - - cman := NewChainManager() - cman.SetProcessor(fakeproc{}) - - TD = big.NewInt(1) - chain := makechain(cman, chainlen) - - stime := time.Now() - cman.TestChain(chain) - fmt.Println(chainlen, "took", time.Since(stime)) -} From 1fb84d3c5f486ef0d42a21f3cd8416d6ef211604 Mon Sep 17 00:00:00 2001 From: obscuren Date: Wed, 10 Dec 2014 10:57:19 +0100 Subject: [PATCH 26/79] Fixed tests --- cmd/evm/main.go | 2 +- p2p/message_test.go | 2 +- state/state_test.go | 2 +- vm/vm_test.go | 173 +------------------------------------------- 4 files changed, 4 insertions(+), 175 deletions(-) diff --git a/cmd/evm/main.go b/cmd/evm/main.go index 1e6c807b1..c6c986a04 100644 --- a/cmd/evm/main.go +++ b/cmd/evm/main.go @@ -133,7 +133,7 @@ func (self *VMEnv) Value() *big.Int { return self.value } func (self *VMEnv) GasLimit() *big.Int { return big.NewInt(1000000000) } func (self *VMEnv) Depth() int { return 0 } func (self *VMEnv) SetDepth(i int) { self.depth = i } -func (self *VMEnv) AddLog(log *state.Log) { +func (self *VMEnv) AddLog(log state.Log) { self.state.AddLog(log) } func (self *VMEnv) Transfer(from, to vm.Account, amount *big.Int) error { diff --git a/p2p/message_test.go b/p2p/message_test.go index 7b39b061d..557bfed26 100644 --- a/p2p/message_test.go +++ b/p2p/message_test.go @@ -43,7 +43,7 @@ func TestEncodeDecodeMsg(t *testing.T) { } var data struct { - I int + I uint S string } if err := decmsg.Decode(&data); err != nil { diff --git a/state/state_test.go b/state/state_test.go index 825d21fcc..28e4fc5da 100644 --- a/state/state_test.go +++ b/state/state_test.go @@ -9,7 +9,7 @@ import ( ) type StateSuite struct { - state *State + state *StateDB } var _ = checker.Suite(&StateSuite{}) diff --git a/vm/vm_test.go b/vm/vm_test.go index 84ebf378f..9bd147a72 100644 --- a/vm/vm_test.go +++ b/vm/vm_test.go @@ -1,174 +1,3 @@ package vm -import ( - "fmt" - "io/ioutil" - "log" - "math/big" - "os" - - "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/ethutil" - "github.com/ethereum/go-ethereum/logger" - "github.com/ethereum/go-ethereum/state" - "github.com/ethereum/go-ethereum/trie" - checker "gopkg.in/check.v1" -) - -type VmSuite struct{} - -var _ = checker.Suite(&VmSuite{}) -var big9 = ethutil.Hex2Bytes("0000000000000000000000000000000000000000000000000000000000000009") - -const mutcode = ` -var x = 0; -for i := 0; i < 10; i++ { - x = i -} - -return x` - -type TestEnv struct{} - -func (TestEnv) Origin() []byte { return nil } -func (TestEnv) BlockNumber() *big.Int { return nil } -func (TestEnv) BlockHash() []byte { return nil } -func (TestEnv) PrevHash() []byte { return nil } -func (TestEnv) Coinbase() []byte { return nil } -func (TestEnv) Time() int64 { return 0 } -func (TestEnv) GasLimit() *big.Int { return nil } -func (TestEnv) Difficulty() *big.Int { return nil } -func (TestEnv) Value() *big.Int { return nil } -func (TestEnv) AddLog(*state.Log) {} -func (TestEnv) Transfer(from, to Account, amount *big.Int) error { - return nil -} - -// This is likely to fail if anything ever gets looked up in the state trie :-) -func (TestEnv) State() *state.State { - return state.New(trie.New(nil, "")) -} - -func setup(level logger.LogLevel, typ Type) (*Closure, VirtualMachine) { - code, err := ethutil.Compile(mutcode, true) - if err != nil { - log.Fatal(err) - } - - // Pipe output to /dev/null - logger.AddLogSystem(logger.NewStdLogSystem(ioutil.Discard, log.LstdFlags, level)) - - ethutil.ReadConfig(".ethtest", "/tmp/ethtest", "") - - stateObject := state.NewStateObject([]byte{'j', 'e', 'f', 'f'}) - callerClosure := NewClosure(nil, stateObject, stateObject, code, big.NewInt(1000000), big.NewInt(0)) - - return callerClosure, New(TestEnv{}, typ) -} - -func (s *VmSuite) TestDebugVm(c *checker.C) { - closure, vm := setup(logger.DebugLevel, DebugVmTy) - ret, _, e := closure.Call(vm, nil) - c.Assert(e, checker.NotNil) - c.Skip("Depends on mutan. Requires serpent implementation") - c.Assert(ret, checker.DeepEquals, big9) -} - -func (s *VmSuite) TestVm(c *checker.C) { - closure, vm := setup(logger.DebugLevel, StandardVmTy) - ret, _, e := closure.Call(vm, nil) - c.Assert(e, checker.NotNil) - c.Skip("Depends on mutan. Requires serpent implementation") - c.Assert(ret, checker.DeepEquals, big9) -} - -func (s *VmSuite) BenchmarkDebugVm(c *checker.C) { - closure, vm := setup(logger.InfoLevel, StandardVmTy) - - c.ResetTimer() - - for i := 0; i < c.N; i++ { - closure.Call(vm, nil) - } -} - -func (s *VmSuite) BenchmarkVm(c *checker.C) { - closure, vm := setup(logger.InfoLevel, DebugVmTy) - - c.ResetTimer() - - for i := 0; i < c.N; i++ { - closure.Call(vm, nil) - } -} - -func RunCode(mutCode string, typ Type) []byte { - code, err := ethutil.Compile(mutCode, true) - if err != nil { - log.Fatal(err) - } - - logger.AddLogSystem(logger.NewStdLogSystem(os.Stdout, log.LstdFlags, logger.InfoLevel)) - - ethutil.ReadConfig(".ethtest", "/tmp/ethtest", "") - - stateObject := state.NewStateObject([]byte{'j', 'e', 'f', 'f'}) - closure := NewClosure(nil, stateObject, stateObject, code, big.NewInt(1000000), big.NewInt(0)) - - vm := New(TestEnv{}, typ) - ret, _, e := closure.Call(vm, nil) - if e != nil { - fmt.Println(e) - } - - return ret -} - -func (s *VmSuite) TestBuildInSha256(c *checker.C) { - ret := RunCode(` - var in = 42 - var out = 0 - - call(0x2, 0, 10000, in, out) - - return out - `, DebugVmTy) - - exp := crypto.Sha256(ethutil.LeftPadBytes([]byte{42}, 32)) - c.Skip("Depends on mutan. Requires serpent implementation") - c.Assert(ret, checker.DeepEquals, exp) -} - -func (s *VmSuite) TestBuildInRipemd(c *checker.C) { - ret := RunCode(` - var in = 42 - var out = 0 - - call(0x3, 0, 10000, in, out) - - return out - `, DebugVmTy) - - exp := ethutil.RightPadBytes(crypto.Ripemd160(ethutil.LeftPadBytes([]byte{42}, 32)), 32) - c.Skip("Depends on mutan. Requires serpent implementation") - c.Assert(ret, checker.DeepEquals, exp) -} - -func (s *VmSuite) TestOog(c *checker.C) { - // This tests takes a long time and will eventually run out of gas - // t.Skip() - c.Skip("This tests takes a long time and will eventually run out of gas") - - logger.AddLogSystem(logger.NewStdLogSystem(os.Stdout, log.LstdFlags, logger.InfoLevel)) - - ethutil.ReadConfig(".ethtest", "/tmp/ethtest", "") - - stateObject := state.NewStateObject([]byte{'j', 'e', 'f', 'f'}) - closure := NewClosure(nil, stateObject, stateObject, ethutil.Hex2Bytes("60ff60ff600057"), big.NewInt(1000000), big.NewInt(0)) - - vm := New(TestEnv{}, DebugVmTy) - _, _, e := closure.Call(vm, nil) - if e != nil { - fmt.Println(e) - } -} +// Tests have been removed in favour of general tests. If anything implementation specific needs testing, put it here From 4f1ef89cb21345f3273417ec989164670e880dee Mon Sep 17 00:00:00 2001 From: obscuren Date: Wed, 10 Dec 2014 11:04:21 +0100 Subject: [PATCH 27/79] updated tests --- tests/files/StateTests/stExample.json | 4 +- tests/files/StateTests/stLogTests.json | 3712 +++++++++++++++++ .../StateTests/stPreCompiledContracts.json | 163 +- tests/files/StateTests/stSpecialTest.json | 4 +- .../StateTests/stSystemOperationsTest.json | 3614 +++++++++++++++- tests/files/VMTests/vmArithmeticTest.json | 292 +- .../VMTests/vmBitwiseLogicOperationTest.json | 240 +- tests/files/VMTests/vmBlockInfoTest.json | 24 +- .../VMTests/vmEnvironmentalInfoTest.json | 320 +- .../VMTests/vmIOandFlowOperationsTest.json | 120 +- tests/files/VMTests/vmLogTest.json | 338 +- tests/files/VMTests/vmPushDupSwapTest.json | 268 +- tests/files/VMTests/vmSha3Test.json | 12 +- tests/files/VMTests/vmtests.json | 16 +- 14 files changed, 8344 insertions(+), 783 deletions(-) create mode 100644 tests/files/StateTests/stLogTests.json diff --git a/tests/files/StateTests/stExample.json b/tests/files/StateTests/stExample.json index bab82e395..34bb4dd8e 100644 --- a/tests/files/StateTests/stExample.json +++ b/tests/files/StateTests/stExample.json @@ -8,8 +8,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { diff --git a/tests/files/StateTests/stLogTests.json b/tests/files/StateTests/stLogTests.json new file mode 100644 index 000000000..888f6c5bb --- /dev/null +++ b/tests/files/StateTests/stLogTests.json @@ -0,0 +1,3712 @@ +{ + "log0_emptyMem" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "bloom" : "00000000000000000000800000000000000000000000000000000880000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x", + "topics" : [ + ] + } + ], + "out" : "0x", + "post" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000099977", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + "0x" : "0x01" + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000023", + "code" : "0x60006000a0", + "nonce" : "0", + "storage" : { + } + }, + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "862", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "999999999999899138", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + } + }, + "pre" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000000000", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x60006000a0", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "1000000000000000000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "", + "gasLimit" : "10000", + "gasPrice" : "1", + "nonce" : "0", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", + "value" : "100000" + } + }, + "log0_logMemStartTooHigh" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + ], + "out" : "0x", + "post" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000099977", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000023", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0", + "nonce" : "0", + "storage" : { + } + }, + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "1628", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "999999999999898372", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + } + }, + "pre" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000000000", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "1000000000000000000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "", + "gasLimit" : "10000", + "gasPrice" : "1", + "nonce" : "0", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", + "value" : "100000" + } + }, + "log0_logMemsizeTooHigh" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + ], + "out" : "0x", + "post" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000099977", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000023", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001a0", + "nonce" : "0", + "storage" : { + } + }, + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "1628", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "999999999999898372", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + } + }, + "pre" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000000000", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001a0", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "1000000000000000000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "", + "gasLimit" : "10000", + "gasPrice" : "1", + "nonce" : "0", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", + "value" : "100000" + } + }, + "log0_logMemsizeZero" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "bloom" : "00000000000000000000800000000000000000000000000000000880000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x", + "topics" : [ + ] + } + ], + "out" : "0x", + "post" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000099977", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + "0x" : "0x01" + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000023", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006001a0", + "nonce" : "0", + "storage" : { + } + }, + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "866", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "999999999999899134", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + } + }, + "pre" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000000000", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006001a0", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "1000000000000000000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "", + "gasLimit" : "10000", + "gasPrice" : "1", + "nonce" : "0", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", + "value" : "100000" + } + }, + "log0_nonEmptyMem" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "bloom" : "00000000000000000000800000000000000000000000000000000880000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + } + ], + "out" : "0x", + "post" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000099977", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + "0x" : "0x01" + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000023", + "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60005260206000a0", + "nonce" : "0", + "storage" : { + } + }, + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "898", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "999999999999899102", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + } + }, + "pre" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000000000", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60005260206000a0", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "1000000000000000000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "", + "gasLimit" : "10000", + "gasPrice" : "1", + "nonce" : "0", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", + "value" : "100000" + } + }, + "log0_nonEmptyMem_logMemSize1" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "bloom" : "00000000000000000000800000000000000000000000000000000880000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xaa", + "topics" : [ + ] + } + ], + "out" : "0x", + "post" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000099977", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + "0x" : "0x01" + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000023", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260016000a0", + "nonce" : "0", + "storage" : { + } + }, + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "867", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "999999999999899133", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + } + }, + "pre" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000000000", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260016000a0", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "1000000000000000000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "", + "gasLimit" : "10000", + "gasPrice" : "1", + "nonce" : "0", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", + "value" : "100000" + } + }, + "log0_nonEmptyMem_logMemSize1_logMemStart31" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "bloom" : "00000000000000000000800000000000000000000000000000000880000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xdd", + "topics" : [ + ] + } + ], + "out" : "0x", + "post" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000099977", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + "0x" : "0x01" + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000023", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000526001601fa0", + "nonce" : "0", + "storage" : { + } + }, + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "867", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "999999999999899133", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + } + }, + "pre" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000000000", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000526001601fa0", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "1000000000000000000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "", + "gasLimit" : "10000", + "gasPrice" : "1", + "nonce" : "0", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", + "value" : "100000" + } + }, + "log1_Caller" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "bloom" : "00000000000000000000800000000000000000000000000000002880000000000000000000010000004000000000000000000000000000000000000000000000", + "data" : "0xff00000000000000000000000000000000000000000000000000000000000000", + "topics" : [ + "000000000000000000000000095e7baea6a6c7c4c2dfeb977efac326af552d87" + ] + } + ], + "out" : "0x", + "post" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000099977", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + "0x" : "0x01" + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000023", + "code" : "0x60ff6000533360206000a1", + "nonce" : "0", + "storage" : { + } + }, + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "931", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "999999999999899069", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + } + }, + "pre" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000000000", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x60ff6000533360206000a1", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "1000000000000000000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "", + "gasLimit" : "10000", + "gasPrice" : "1", + "nonce" : "0", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", + "value" : "100000" + } + }, + "log1_MaxTopic" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "bloom" : "00000000000000200000800000000000000000000000000000000880000000000000000000000000000000000000000000000010000000000000000000000020", + "data" : "0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd", + "topics" : [ + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + ] + } + ], + "out" : "0x", + "post" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000099977", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + "0x" : "0x01" + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000023", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60206000a1", + "nonce" : "0", + "storage" : { + } + }, + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "931", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "999999999999899069", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + } + }, + "pre" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000000000", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60206000a1", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "1000000000000000000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "", + "gasLimit" : "10000", + "gasPrice" : "1", + "nonce" : "0", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", + "value" : "100000" + } + }, + "log1_emptyMem" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000", + "data" : "0x", + "topics" : [ + "0000000000000000000000000000000000000000000000000000000000000000" + ] + } + ], + "out" : "0x", + "post" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000099977", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + "0x" : "0x01" + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000023", + "code" : "0x600060006000a1", + "nonce" : "0", + "storage" : { + } + }, + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "895", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "999999999999899105", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + } + }, + "pre" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000000000", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x600060006000a1", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "1000000000000000000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "", + "gasLimit" : "10000", + "gasPrice" : "1", + "nonce" : "0", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", + "value" : "100000" + } + }, + "log1_logMemStartTooHigh" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + ], + "out" : "0x", + "post" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000099977", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000023", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1", + "nonce" : "0", + "storage" : { + } + }, + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "1628", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "999999999999898372", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + } + }, + "pre" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000000000", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "1000000000000000000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "", + "gasLimit" : "10000", + "gasPrice" : "1", + "nonce" : "0", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", + "value" : "100000" + } + }, + "log1_logMemsizeTooHigh" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + ], + "out" : "0x", + "post" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000099977", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000023", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001a1", + "nonce" : "0", + "storage" : { + } + }, + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "1628", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "999999999999898372", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + } + }, + "pre" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000000000", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001a1", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "1000000000000000000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "", + "gasLimit" : "10000", + "gasPrice" : "1", + "nonce" : "0", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", + "value" : "100000" + } + }, + "log1_logMemsizeZero" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000", + "data" : "0x", + "topics" : [ + "0000000000000000000000000000000000000000000000000000000000000000" + ] + } + ], + "out" : "0x", + "post" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000099977", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + "0x" : "0x01" + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000023", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060006001a1", + "nonce" : "0", + "storage" : { + } + }, + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "899", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "999999999999899101", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + } + }, + "pre" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000000000", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060006001a1", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "1000000000000000000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "", + "gasLimit" : "10000", + "gasPrice" : "1", + "nonce" : "0", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", + "value" : "100000" + } + }, + "log1_nonEmptyMem" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + "0000000000000000000000000000000000000000000000000000000000000000" + ] + } + ], + "out" : "0x", + "post" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000099977", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + "0x" : "0x01" + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000023", + "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600052600060206000a1", + "nonce" : "0", + "storage" : { + } + }, + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "931", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "999999999999899069", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + } + }, + "pre" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000000000", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600052600060206000a1", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "1000000000000000000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "", + "gasLimit" : "10000", + "gasPrice" : "1", + "nonce" : "0", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", + "value" : "100000" + } + }, + "log1_nonEmptyMem_logMemSize1" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000", + "data" : "0xaa", + "topics" : [ + "0000000000000000000000000000000000000000000000000000000000000000" + ] + } + ], + "out" : "0x", + "post" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000099977", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + "0x" : "0x01" + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000023", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060016000a1", + "nonce" : "0", + "storage" : { + } + }, + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "900", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "999999999999899100", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + } + }, + "pre" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000000000", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060016000a1", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "1000000000000000000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "", + "gasLimit" : "10000", + "gasPrice" : "1", + "nonce" : "0", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", + "value" : "100000" + } + }, + "log1_nonEmptyMem_logMemSize1_logMemStart31" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000", + "data" : "0xdd", + "topics" : [ + "0000000000000000000000000000000000000000000000000000000000000000" + ] + } + ], + "out" : "0x", + "post" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000099977", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + "0x" : "0x01" + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000023", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006001601fa1", + "nonce" : "0", + "storage" : { + } + }, + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "900", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "999999999999899100", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + } + }, + "pre" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000000000", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006001601fa1", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "1000000000000000000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "", + "gasLimit" : "10000", + "gasPrice" : "1", + "nonce" : "0", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", + "value" : "100000" + } + }, + "log2_Caller" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "bloom" : "00000000000000000000800000000000000000000000000000002880000020000000000002010000004000000000080000000000000000000000000000000000", + "data" : "0xff00000000000000000000000000000000000000000000000000000000000000", + "topics" : [ + "0000000000000000000000000000000000000000000000000000000000000000", + "000000000000000000000000095e7baea6a6c7c4c2dfeb977efac326af552d87" + ] + } + ], + "out" : "0x", + "post" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000099977", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + "0x" : "0x01" + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000023", + "code" : "0x60ff60005333600060206000a2", + "nonce" : "0", + "storage" : { + } + }, + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "964", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "999999999999899036", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + } + }, + "pre" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000000000", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x60ff60005333600060206000a2", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "1000000000000000000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "", + "gasLimit" : "10000", + "gasPrice" : "1", + "nonce" : "0", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", + "value" : "100000" + } + }, + "log2_MaxTopic" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "bloom" : "00000000000000200000800000000000000000000000000000000880000000000000000000000000000000000000000000000010000000000000000000000020", + "data" : "0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd", + "topics" : [ + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + ] + } + ], + "out" : "0x", + "post" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000099977", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + "0x" : "0x01" + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000023", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60206000a2", + "nonce" : "0", + "storage" : { + } + }, + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "964", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "999999999999899036", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + } + }, + "pre" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000000000", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60206000a2", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "1000000000000000000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "", + "gasLimit" : "10000", + "gasPrice" : "1", + "nonce" : "0", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", + "value" : "100000" + } + }, + "log2_emptyMem" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000", + "data" : "0x", + "topics" : [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000" + ] + } + ], + "out" : "0x", + "post" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000099977", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + "0x" : "0x01" + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000023", + "code" : "0x6000600060006000a2", + "nonce" : "0", + "storage" : { + } + }, + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "928", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "999999999999899072", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + } + }, + "pre" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000000000", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x6000600060006000a2", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "1000000000000000000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "", + "gasLimit" : "10000", + "gasPrice" : "1", + "nonce" : "0", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", + "value" : "100000" + } + }, + "log2_logMemStartTooHigh" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + ], + "out" : "0x", + "post" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000099977", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000023", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000526000600060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa2", + "nonce" : "0", + "storage" : { + } + }, + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "1628", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "999999999999898372", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + } + }, + "pre" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000000000", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000526000600060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa2", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "1000000000000000000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "", + "gasLimit" : "10000", + "gasPrice" : "1", + "nonce" : "0", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", + "value" : "100000" + } + }, + "log2_logMemsizeTooHigh" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + ], + "out" : "0x", + "post" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000099977", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000023", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001a2", + "nonce" : "0", + "storage" : { + } + }, + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "1628", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "999999999999898372", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + } + }, + "pre" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000000000", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001a2", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "1000000000000000000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "", + "gasLimit" : "10000", + "gasPrice" : "1", + "nonce" : "0", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", + "value" : "100000" + } + }, + "log2_logMemsizeZero" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000", + "data" : "0x", + "topics" : [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000" + ] + } + ], + "out" : "0x", + "post" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000099977", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + "0x" : "0x01" + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000023", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000526000600060006001a2", + "nonce" : "0", + "storage" : { + } + }, + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "932", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "999999999999899068", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + } + }, + "pre" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000000000", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000526000600060006001a2", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "1000000000000000000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "", + "gasLimit" : "10000", + "gasPrice" : "1", + "nonce" : "0", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", + "value" : "100000" + } + }, + "log2_nonEmptyMem" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000" + ] + } + ], + "out" : "0x", + "post" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000099977", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + "0x" : "0x01" + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000023", + "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000526000600060206000a2", + "nonce" : "0", + "storage" : { + } + }, + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "964", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "999999999999899036", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + } + }, + "pre" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000000000", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000526000600060206000a2", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "1000000000000000000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "", + "gasLimit" : "10000", + "gasPrice" : "1", + "nonce" : "0", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", + "value" : "100000" + } + }, + "log2_nonEmptyMem_logMemSize1" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000", + "data" : "0xaa", + "topics" : [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000" + ] + } + ], + "out" : "0x", + "post" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000099977", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + "0x" : "0x01" + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000023", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000526000600060016000a2", + "nonce" : "0", + "storage" : { + } + }, + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "933", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "999999999999899067", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + } + }, + "pre" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000000000", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000526000600060016000a2", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "1000000000000000000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "", + "gasLimit" : "10000", + "gasPrice" : "1", + "nonce" : "0", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", + "value" : "100000" + } + }, + "log2_nonEmptyMem_logMemSize1_logMemStart31" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000", + "data" : "0xdd", + "topics" : [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000" + ] + } + ], + "out" : "0x", + "post" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000099977", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + "0x" : "0x01" + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000023", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060006001601fa2", + "nonce" : "0", + "storage" : { + } + }, + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "933", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "999999999999899067", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + } + }, + "pre" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000000000", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060006001601fa2", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "1000000000000000000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "", + "gasLimit" : "10000", + "gasPrice" : "1", + "nonce" : "0", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", + "value" : "100000" + } + }, + "log3_Caller" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "bloom" : "00000000000000000000800000000000000000000000000000002880000020000000000002010000004000000000080000000000000000000000000000000000", + "data" : "0xff00000000000000000000000000000000000000000000000000000000000000", + "topics" : [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "000000000000000000000000095e7baea6a6c7c4c2dfeb977efac326af552d87" + ] + } + ], + "out" : "0x", + "post" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000099977", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + "0x" : "0x01" + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000023", + "code" : "0x60ff600053336000600060206000a3", + "nonce" : "0", + "storage" : { + } + }, + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "997", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "999999999999899003", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + } + }, + "pre" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000000000", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x60ff600053336000600060206000a3", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "1000000000000000000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "", + "gasLimit" : "10000", + "gasPrice" : "1", + "nonce" : "0", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", + "value" : "100000" + } + }, + "log3_MaxTopic" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "bloom" : "00000000000000200000800000000000000000000000000000000880000000000000000000000000000000000000000000000010000000000000000000000020", + "data" : "0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd", + "topics" : [ + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + ] + } + ], + "out" : "0x", + "post" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000099977", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + "0x" : "0x01" + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000023", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60206000a3", + "nonce" : "0", + "storage" : { + } + }, + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "997", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "999999999999899003", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + } + }, + "pre" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000000000", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60206000a3", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "1000000000000000000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "", + "gasLimit" : "10000", + "gasPrice" : "1", + "nonce" : "0", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", + "value" : "100000" + } + }, + "log3_PC" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "bloom" : "00003004000000000000800000000010000008000000000000000980000000000000000000000000000000000000000000001000000400000000000800000000", + "data" : "0xff00000000000000000000000000000000000000000000000000000000000000", + "topics" : [ + "0000000000000000000000000000000000000000000000000000000000000007", + "0000000000000000000000000000000000000000000000000000000000000006", + "0000000000000000000000000000000000000000000000000000000000000005" + ] + } + ], + "out" : "0x", + "post" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000099977", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + "0x" : "0x01" + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000023", + "code" : "0x60ff60005358585860206000a3", + "nonce" : "0", + "storage" : { + } + }, + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "997", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "999999999999899003", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + } + }, + "pre" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000000000", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x60ff60005358585860206000a3", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "1000000000000000000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "", + "gasLimit" : "10000", + "gasPrice" : "1", + "nonce" : "0", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", + "value" : "100000" + } + }, + "log3_emptyMem" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000", + "data" : "0x", + "topics" : [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000" + ] + } + ], + "out" : "0x", + "post" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000099977", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + "0x" : "0x01" + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000023", + "code" : "0x60006000600060006000a3", + "nonce" : "0", + "storage" : { + } + }, + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "961", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "999999999999899039", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + } + }, + "pre" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000000000", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x60006000600060006000a3", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "1000000000000000000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "", + "gasLimit" : "10000", + "gasPrice" : "1", + "nonce" : "0", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", + "value" : "100000" + } + }, + "log3_logMemStartTooHigh" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + ], + "out" : "0x", + "post" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000099977", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000023", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006000600060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa3", + "nonce" : "0", + "storage" : { + } + }, + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "1628", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "999999999999898372", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + } + }, + "pre" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000000000", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006000600060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa3", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "1000000000000000000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "", + "gasLimit" : "10000", + "gasPrice" : "1", + "nonce" : "0", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", + "value" : "100000" + } + }, + "log3_logMemsizeTooHigh" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + ], + "out" : "0x", + "post" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000099977", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000023", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000526000600060007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001a3", + "nonce" : "0", + "storage" : { + } + }, + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "1628", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "999999999999898372", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + } + }, + "pre" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000000000", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000526000600060007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001a3", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "1000000000000000000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "", + "gasLimit" : "10000", + "gasPrice" : "1", + "nonce" : "0", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", + "value" : "100000" + } + }, + "log3_logMemsizeZero" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000", + "data" : "0x", + "topics" : [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000" + ] + } + ], + "out" : "0x", + "post" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000099977", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + "0x" : "0x01" + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000023", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006000600060006001a3", + "nonce" : "0", + "storage" : { + } + }, + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "965", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "999999999999899035", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + } + }, + "pre" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000000000", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006000600060006001a3", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "1000000000000000000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "", + "gasLimit" : "10000", + "gasPrice" : "1", + "nonce" : "0", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", + "value" : "100000" + } + }, + "log3_nonEmptyMem" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000" + ] + } + ], + "out" : "0x", + "post" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000099977", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + "0x" : "0x01" + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000023", + "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60005260006000600060206000a3", + "nonce" : "0", + "storage" : { + } + }, + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "997", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "999999999999899003", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + } + }, + "pre" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000000000", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60005260006000600060206000a3", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "1000000000000000000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "", + "gasLimit" : "10000", + "gasPrice" : "1", + "nonce" : "0", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", + "value" : "100000" + } + }, + "log3_nonEmptyMem_logMemSize1" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000", + "data" : "0xaa", + "topics" : [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000" + ] + } + ], + "out" : "0x", + "post" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000099977", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + "0x" : "0x01" + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000023", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006000600060016000a3", + "nonce" : "0", + "storage" : { + } + }, + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "966", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "999999999999899034", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + } + }, + "pre" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000000000", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006000600060016000a3", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "1000000000000000000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "", + "gasLimit" : "10000", + "gasPrice" : "1", + "nonce" : "0", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", + "value" : "100000" + } + }, + "log3_nonEmptyMem_logMemSize1_logMemStart31" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000", + "data" : "0xdd", + "topics" : [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000" + ] + } + ], + "out" : "0x", + "post" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000099977", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + "0x" : "0x01" + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000023", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000526000600060006001601fa3", + "nonce" : "0", + "storage" : { + } + }, + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "966", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "999999999999899034", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + } + }, + "pre" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000000000", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000526000600060006001601fa3", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "1000000000000000000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "", + "gasLimit" : "10000", + "gasPrice" : "1", + "nonce" : "0", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", + "value" : "100000" + } + }, + "log4_Caller" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + ], + "out" : "0x", + "post" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000099977", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + "0x" : "0x01" + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000023", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "828", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "999999999999899172", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + } + }, + "pre" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000000000", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "1000000000000000000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "", + "gasLimit" : "10000", + "gasPrice" : "1", + "nonce" : "0", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", + "value" : "100000" + } + }, + "log4_MaxTopic" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "bloom" : "00000000000000200000800000000000000000000000000000000880000000000000000000000000000000000000000000000010000000000000000000000020", + "data" : "0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd", + "topics" : [ + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + ] + } + ], + "out" : "0x", + "post" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000099977", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + "0x" : "0x01" + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000023", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60206000a4", + "nonce" : "0", + "storage" : { + } + }, + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "1030", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "999999999999898970", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + } + }, + "pre" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000000000", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60206000a4", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "1000000000000000000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "", + "gasLimit" : "10000", + "gasPrice" : "1", + "nonce" : "0", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", + "value" : "100000" + } + }, + "log4_PC" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + ], + "out" : "0x", + "post" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000099977", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + "0x" : "0x01" + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000023", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "828", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "999999999999899172", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + } + }, + "pre" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000000000", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "1000000000000000000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "", + "gasLimit" : "10000", + "gasPrice" : "1", + "nonce" : "0", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", + "value" : "100000" + } + }, + "log4_emptyMem" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000", + "data" : "0x", + "topics" : [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000" + ] + } + ], + "out" : "0x", + "post" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000099977", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + "0x" : "0x01" + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000023", + "code" : "0x600060006000600060006000a4", + "nonce" : "0", + "storage" : { + } + }, + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "994", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "999999999999899006", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + } + }, + "pre" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000000000", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x600060006000600060006000a4", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "1000000000000000000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "", + "gasLimit" : "10000", + "gasPrice" : "1", + "nonce" : "0", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", + "value" : "100000" + } + }, + "log4_logMemStartTooHigh" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + ], + "out" : "0x", + "post" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000099977", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000023", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060006000600060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa4", + "nonce" : "0", + "storage" : { + } + }, + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "1628", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "999999999999898372", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + } + }, + "pre" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000000000", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060006000600060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa4", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "1000000000000000000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "", + "gasLimit" : "10000", + "gasPrice" : "1", + "nonce" : "0", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", + "value" : "100000" + } + }, + "log4_logMemsizeTooHigh" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + ], + "out" : "0x", + "post" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000099977", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000023", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006000600060007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001a4", + "nonce" : "0", + "storage" : { + } + }, + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "1628", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "999999999999898372", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + } + }, + "pre" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000000000", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006000600060007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001a4", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "1000000000000000000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "", + "gasLimit" : "10000", + "gasPrice" : "1", + "nonce" : "0", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", + "value" : "100000" + } + }, + "log4_logMemsizeZero" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000", + "data" : "0x", + "topics" : [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000" + ] + } + ], + "out" : "0x", + "post" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000099977", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + "0x" : "0x01" + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000023", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060006000600060006001a4", + "nonce" : "0", + "storage" : { + } + }, + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "998", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "999999999999899002", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + } + }, + "pre" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000000000", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060006000600060006001a4", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "1000000000000000000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "", + "gasLimit" : "10000", + "gasPrice" : "1", + "nonce" : "0", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", + "value" : "100000" + } + }, + "log4_nonEmptyMem" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000" + ] + } + ], + "out" : "0x", + "post" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000099977", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + "0x" : "0x01" + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000023", + "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600052600060006000600060206000a4", + "nonce" : "0", + "storage" : { + } + }, + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "1030", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "999999999999898970", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + } + }, + "pre" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000000000", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600052600060006000600060206000a4", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "1000000000000000000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "", + "gasLimit" : "10000", + "gasPrice" : "1", + "nonce" : "0", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", + "value" : "100000" + } + }, + "log4_nonEmptyMem_logMemSize1" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000", + "data" : "0xaa", + "topics" : [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000" + ] + } + ], + "out" : "0x", + "post" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000099977", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + "0x" : "0x01" + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000023", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060006000600060016000a4", + "nonce" : "0", + "storage" : { + } + }, + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "999", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "999999999999899001", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + } + }, + "pre" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000000000", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060006000600060016000a4", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "1000000000000000000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "", + "gasLimit" : "10000", + "gasPrice" : "1", + "nonce" : "0", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", + "value" : "100000" + } + }, + "log4_nonEmptyMem_logMemSize1_logMemStart31" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000", + "data" : "0xdd", + "topics" : [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000" + ] + } + ], + "out" : "0x", + "post" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000099977", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + "0x" : "0x01" + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000023", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006000600060006001601fa4", + "nonce" : "0", + "storage" : { + } + }, + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "999", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "999999999999899001", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + } + }, + "pre" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000000000", + "code" : "0x60006000600060006017730f572e5295c57f15886f9b263e2f6d2d6c7b5ec66103e8f1600055", + "nonce" : "0", + "storage" : { + } + }, + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006000600060006001601fa4", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "1000000000000000000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "", + "gasLimit" : "10000", + "gasPrice" : "1", + "nonce" : "0", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", + "value" : "100000" + } + } +} \ No newline at end of file diff --git a/tests/files/StateTests/stPreCompiledContracts.json b/tests/files/StateTests/stPreCompiledContracts.json index 22d66529a..5830ecafc 100644 --- a/tests/files/StateTests/stPreCompiledContracts.json +++ b/tests/files/StateTests/stPreCompiledContracts.json @@ -8,8 +8,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0000000000000000000000000000000000000001" : { @@ -79,8 +79,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0000000000000000000000000000000000000001" : { @@ -148,8 +148,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0000000000000000000000000000000000000001" : { @@ -216,8 +216,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0000000000000000000000000000000000000001" : { @@ -286,8 +286,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0000000000000000000000000000000000000001" : { @@ -348,6 +348,77 @@ "value" : "100000" } }, + "CallEcrecover0_overlappingInputOutput" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "10000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + ], + "out" : "0x", + "post" : { + "0000000000000000000000000000000000000001" : { + "balance" : "0", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "20100000", + "code" : "0x7f18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c600052601c6020527f73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f6040527feeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c45496060526020604060806000600060016103e8f160025560a060020a604051066000556000543214600155", + "nonce" : "0", + "storage" : { + "0x" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "0x01" : "0x01", + "0x02" : "0x01" + } + }, + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "1976", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "999999999999898024", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + } + }, + "pre" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "20000000", + "code" : "0x7f18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c600052601c6020527f73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f6040527feeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c45496060526020604060806000600060016103e8f160025560a060020a604051066000556000543214600155", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "1000000000000000000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "", + "gasLimit" : "365224", + "gasPrice" : "1", + "nonce" : "0", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", + "value" : "100000" + } + }, "CallEcrecover1" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", @@ -357,8 +428,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0000000000000000000000000000000000000001" : { @@ -426,8 +497,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0000000000000000000000000000000000000001" : { @@ -495,8 +566,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0000000000000000000000000000000000000001" : { @@ -565,8 +636,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0000000000000000000000000000000000000003" : { @@ -634,8 +705,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0000000000000000000000000000000000000003" : { @@ -704,8 +775,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0000000000000000000000000000000000000003" : { @@ -774,8 +845,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0000000000000000000000000000000000000003" : { @@ -844,8 +915,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0000000000000000000000000000000000000003" : { @@ -914,8 +985,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0000000000000000000000000000000000000003" : { @@ -983,8 +1054,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0000000000000000000000000000000000000003" : { @@ -1053,8 +1124,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0000000000000000000000000000000000000002" : { @@ -1122,8 +1193,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0000000000000000000000000000000000000002" : { @@ -1192,8 +1263,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0000000000000000000000000000000000000002" : { @@ -1262,8 +1333,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0000000000000000000000000000000000000002" : { @@ -1332,8 +1403,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0000000000000000000000000000000000000002" : { @@ -1402,8 +1473,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0000000000000000000000000000000000000002" : { @@ -1472,8 +1543,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0000000000000000000000000000000000000002" : { @@ -1541,8 +1612,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0000000000000000000000000000000000000002" : { diff --git a/tests/files/StateTests/stSpecialTest.json b/tests/files/StateTests/stSpecialTest.json index 5009c701a..91b51fdb0 100644 --- a/tests/files/StateTests/stSpecialTest.json +++ b/tests/files/StateTests/stSpecialTest.json @@ -8,8 +8,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { diff --git a/tests/files/StateTests/stSystemOperationsTest.json b/tests/files/StateTests/stSystemOperationsTest.json index 8c0e8dde4..64915bead 100644 --- a/tests/files/StateTests/stSystemOperationsTest.json +++ b/tests/files/StateTests/stSystemOperationsTest.json @@ -8,8 +8,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { @@ -85,8 +85,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { @@ -162,8 +162,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { @@ -239,8 +239,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { @@ -316,8 +316,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { @@ -385,8 +385,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { @@ -461,8 +461,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { @@ -538,8 +538,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { @@ -601,8 +601,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { @@ -664,8 +664,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { @@ -718,6 +718,3436 @@ "value" : "100000" } }, + "CallRecursiveBombLog" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "10000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + } + ], + "out" : "0x", + "post" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "20099977", + "code" : "0x6000600060006000601773945304eb96065b2a98b57a48a06ae28d285a71b5620186a0f1", + "nonce" : "0", + "storage" : { + } + }, + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "76859", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "945304eb96065b2a98b57a48a06ae28d285a71b5" : { + "balance" : "1000000000000000023", + "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60005260206000a0600160005401600055600060006000600060003060e05a03f1600155", + "nonce" : "0", + "storage" : { + "0x" : "0xea", + "0x01" : "0x01" + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "999999999999823141", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + } + }, + "pre" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "20000000", + "code" : "0x6000600060006000601773945304eb96065b2a98b57a48a06ae28d285a71b5620186a0f1", + "nonce" : "0", + "storage" : { + } + }, + "945304eb96065b2a98b57a48a06ae28d285a71b5" : { + "balance" : "1000000000000000000", + "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60005260206000a0600160005401600055600060006000600060003060e05a03f1600155", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "1000000000000000000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "", + "gasLimit" : "1000000", + "gasPrice" : "1", + "nonce" : "0", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", + "value" : "100000" + } + }, + "CallRecursiveBombLog2" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "10000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000001869f", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000001842d", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000018283", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x00000000000000000000000000000000000000000000000000000000000180d9", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000017f2f", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000017d85", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000017bdb", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000017a31", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000017887", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x00000000000000000000000000000000000000000000000000000000000176dd", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000017533", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000017389", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x00000000000000000000000000000000000000000000000000000000000171df", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000017035", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000016e8b", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000016ce1", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000016b37", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000001698d", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x00000000000000000000000000000000000000000000000000000000000167e3", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000016639", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000001648f", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x00000000000000000000000000000000000000000000000000000000000162e5", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000001613b", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000015f91", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000015de7", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000015c3d", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000015a93", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x00000000000000000000000000000000000000000000000000000000000158e9", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000001573f", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000015595", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x00000000000000000000000000000000000000000000000000000000000153eb", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000015241", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000015097", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000014eed", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000014d43", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000014b99", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x00000000000000000000000000000000000000000000000000000000000149ef", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000014845", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000001469b", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x00000000000000000000000000000000000000000000000000000000000144f1", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000014347", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000001419d", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000013ff3", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000013e49", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000013c9f", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000013af5", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000001394b", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x00000000000000000000000000000000000000000000000000000000000137a1", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x00000000000000000000000000000000000000000000000000000000000135f7", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000001344d", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x00000000000000000000000000000000000000000000000000000000000132a3", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x00000000000000000000000000000000000000000000000000000000000130f9", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000012f4f", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000012da5", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000012bfb", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000012a51", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x00000000000000000000000000000000000000000000000000000000000128a7", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x00000000000000000000000000000000000000000000000000000000000126fd", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000012553", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x00000000000000000000000000000000000000000000000000000000000123a9", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x00000000000000000000000000000000000000000000000000000000000121ff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000012055", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000011eab", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000011d01", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000011b57", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x00000000000000000000000000000000000000000000000000000000000119ad", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000011803", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000011659", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x00000000000000000000000000000000000000000000000000000000000114af", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000011305", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000001115b", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000010fb1", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000010e07", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000010c5d", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000010ab3", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000010909", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000001075f", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x00000000000000000000000000000000000000000000000000000000000105b5", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000001040b", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000010261", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x00000000000000000000000000000000000000000000000000000000000100b7", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000ff0d", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000fd63", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000fbb9", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000fa0f", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000f865", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000f6bb", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000f511", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000f367", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000f1bd", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000f013", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000ee69", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000ecbf", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000eb15", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000e96b", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000e7c1", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000e617", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000e46d", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000e2c3", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000e119", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000df6f", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000ddc5", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000dc1b", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000da71", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000d8c7", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000d71d", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000d573", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000d3c9", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000d21f", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000d075", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000cecb", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000cd21", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000cb77", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000c9cd", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000c823", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000c679", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000c4cf", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000c325", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000c17b", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000bfd1", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000be27", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000bc7d", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000bad3", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000b929", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000b77f", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000b5d5", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000b42b", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000b281", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000b0d7", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000af2d", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000ad83", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000abd9", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000aa2f", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000a885", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000a6db", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000a531", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000a387", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000a1dd", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000a033", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000009e89", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000009cdf", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000009b35", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000998b", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x00000000000000000000000000000000000000000000000000000000000097e1", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000009637", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000948d", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x00000000000000000000000000000000000000000000000000000000000092e3", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000009139", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000008f8f", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000008de5", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000008c3b", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000008a91", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x00000000000000000000000000000000000000000000000000000000000088e7", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000873d", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000008593", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x00000000000000000000000000000000000000000000000000000000000083e9", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000823f", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000008095", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000007eeb", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000007d41", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000007b97", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x00000000000000000000000000000000000000000000000000000000000079ed", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000007843", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000007699", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x00000000000000000000000000000000000000000000000000000000000074ef", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000007345", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000719b", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000006ff1", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000006e47", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000006c9d", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000006af3", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000006949", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000679f", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x00000000000000000000000000000000000000000000000000000000000065f5", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000644b", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x00000000000000000000000000000000000000000000000000000000000062a1", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x00000000000000000000000000000000000000000000000000000000000060f7", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000005f4d", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000005da3", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000005bf9", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000005a4f", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x00000000000000000000000000000000000000000000000000000000000058a5", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x00000000000000000000000000000000000000000000000000000000000056fb", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000005551", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x00000000000000000000000000000000000000000000000000000000000053a7", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x00000000000000000000000000000000000000000000000000000000000051fd", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000005053", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000004ea9", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000004cff", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000004b55", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x00000000000000000000000000000000000000000000000000000000000049ab", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000004801", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000004657", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x00000000000000000000000000000000000000000000000000000000000044ad", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000004303", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000004159", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000003faf", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000003e05", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000003c5b", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000003ab1", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000003907", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000375d", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x00000000000000000000000000000000000000000000000000000000000035b3", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000003409", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000325f", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x00000000000000000000000000000000000000000000000000000000000030b5", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000002f0b", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000002d61", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000002bb7", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000002a0d", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000002863", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x00000000000000000000000000000000000000000000000000000000000026b9", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000250f", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000002365", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x00000000000000000000000000000000000000000000000000000000000021bb", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000002011", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000001e67", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000001cbd", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000001b13", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000001969", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x00000000000000000000000000000000000000000000000000000000000017bf", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000001615", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000146b", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x00000000000000000000000000000000000000000000000000000000000012c1", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000001117", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000000f6d", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000000dc3", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000000c19", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000000a6f", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x00000000000000000000000000000000000000000000000000000000000008c5", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000071b", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x0000000000000000000000000000000000000000000000000000000000000571", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x00000000000000000000000000000000000000000000000000000000000003c7", + "topics" : [ + ] + }, + { + "address" : "945304eb96065b2a98b57a48a06ae28d285a71b5", + "bloom" : "00000000000000040000000000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0x000000000000000000000000000000000000000000000000000000000000021d", + "topics" : [ + ] + } + ], + "out" : "0x", + "post" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "20099977", + "code" : "0x6000600060006000601773945304eb96065b2a98b57a48a06ae28d285a71b5620186a0f1", + "nonce" : "0", + "storage" : { + } + }, + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "76859", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "945304eb96065b2a98b57a48a06ae28d285a71b5" : { + "balance" : "1000000000000000023", + "code" : "0x5a60005260206000a0600160005401600055600060006000600060003060e05a03f1600155", + "nonce" : "0", + "storage" : { + "0x" : "0xea", + "0x01" : "0x01" + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "999999999999823141", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + } + }, + "pre" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "20000000", + "code" : "0x6000600060006000601773945304eb96065b2a98b57a48a06ae28d285a71b5620186a0f1", + "nonce" : "0", + "storage" : { + } + }, + "945304eb96065b2a98b57a48a06ae28d285a71b5" : { + "balance" : "1000000000000000000", + "code" : "0x5a60005260206000a0600160005401600055600060006000600060003060e05a03f1600155", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "1000000000000000000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "", + "gasLimit" : "1000000", + "gasPrice" : "1", + "nonce" : "0", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", + "value" : "100000" + } + }, "CallToNameRegistrator0" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", @@ -727,8 +4157,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { @@ -804,8 +4234,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { @@ -881,8 +4311,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { @@ -957,8 +4387,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { @@ -1032,8 +4462,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { @@ -1107,8 +4537,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { @@ -1182,8 +4612,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { @@ -1257,8 +4687,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { @@ -1278,7 +4708,7 @@ }, "945304eb96065b2a98b57a48a06ae28d285a71b5" : { "balance" : "46", - "code" : "0x6001600155603760005360026000f2", + "code" : "0x6001600155603760005360026000f3", "nonce" : "0", "storage" : { "0x01" : "0x01" @@ -1302,7 +4732,7 @@ }, "945304eb96065b2a98b57a48a06ae28d285a71b5" : { "balance" : "23", - "code" : "0x6001600155603760005360026000f2", + "code" : "0x6001600155603760005360026000f3", "nonce" : "0", "storage" : { } @@ -1334,8 +4764,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { @@ -1409,8 +4839,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { @@ -1471,13 +4901,13 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "1000000000000100000", - "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000527faaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa6020526000604060406000601773945304eb96065b2a98b57a48a06ae28d285a71b56103e8f3600055", + "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000527faaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa6020526000604060406000601773945304eb96065b2a98b57a48a06ae28d285a71b56103e8f2600055", "nonce" : "0", "storage" : { "0x" : "0x01", @@ -1509,7 +4939,7 @@ "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "1000000000000000000", - "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000527faaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa6020526000604060406000601773945304eb96065b2a98b57a48a06ae28d285a71b56103e8f3600055", + "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000527faaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa6020526000604060406000601773945304eb96065b2a98b57a48a06ae28d285a71b56103e8f2600055", "nonce" : "0", "storage" : { } @@ -1548,13 +4978,13 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "1000000000000100000", - "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000527faaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa6020526002600060406000601773945304eb96065b2a98b57a48a06ae28d285a71b56101f4f3600055", + "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000527faaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa6020526002600060406000601773945304eb96065b2a98b57a48a06ae28d285a71b56101f4f2600055", "nonce" : "0", "storage" : { "0x" : "0x01", @@ -1570,7 +5000,7 @@ }, "945304eb96065b2a98b57a48a06ae28d285a71b5" : { "balance" : "23", - "code" : "0x6001600155603760005360026000f2", + "code" : "0x6001600155603760005360026000f3", "nonce" : "0", "storage" : { } @@ -1586,14 +5016,14 @@ "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "1000000000000000000", - "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000527faaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa6020526002600060406000601773945304eb96065b2a98b57a48a06ae28d285a71b56101f4f3600055", + "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000527faaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa6020526002600060406000601773945304eb96065b2a98b57a48a06ae28d285a71b56101f4f2600055", "nonce" : "0", "storage" : { } }, "945304eb96065b2a98b57a48a06ae28d285a71b5" : { "balance" : "23", - "code" : "0x6001600155603760005360026000f2", + "code" : "0x6001600155603760005360026000f3", "nonce" : "0", "storage" : { } @@ -1625,8 +5055,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { @@ -1701,13 +5131,13 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "1000000000000099977", - "code" : "0x7b601080600c6000396000f20060003554156009570060203560003555600052601c60046017f0600055", + "code" : "0x7b601080600c6000396000f30060003554156009570060203560003555600052601c60046017f0600055", "nonce" : "1", "storage" : { "0x" : "0xd2571607e241ecf590ed94b12d87c94babe36db6" @@ -1738,7 +5168,7 @@ "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "1000000000000000000", - "code" : "0x7b601080600c6000396000f20060003554156009570060203560003555600052601c60046017f0600055", + "code" : "0x7b601080600c6000396000f30060003554156009570060203560003555600052601c60046017f0600055", "nonce" : "0", "storage" : { } @@ -1770,13 +5200,13 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "1000000000000100000", - "code" : "0x7b601080600c6000396000f20060003554156009570060203560003555600052601c650fffffffffff6017f0600055", + "code" : "0x7b601080600c6000396000f30060003554156009570060203560003555600052601c650fffffffffff6017f0600055", "nonce" : "0", "storage" : { } @@ -1799,7 +5229,7 @@ "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "1000000000000000000", - "code" : "0x7b601080600c6000396000f20060003554156009570060203560003555600052601c650fffffffffff6017f0600055", + "code" : "0x7b601080600c6000396000f30060003554156009570060203560003555600052601c650fffffffffff6017f0600055", "nonce" : "0", "storage" : { } @@ -1831,13 +5261,13 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "1000000000000100000", - "code" : "0x7b601080600c6000396000f20060003554156009570060203560003555600052650fffffffffff60046017f0600055", + "code" : "0x7b601080600c6000396000f30060003554156009570060203560003555600052650fffffffffff60046017f0600055", "nonce" : "0", "storage" : { } @@ -1860,7 +5290,7 @@ "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "1000000000000000000", - "code" : "0x7b601080600c6000396000f20060003554156009570060203560003555600052650fffffffffff60046017f0600055", + "code" : "0x7b601080600c6000396000f30060003554156009570060203560003555600052650fffffffffff60046017f0600055", "nonce" : "0", "storage" : { } @@ -1892,13 +5322,13 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "1000000000000000000", - "code" : "0x7b601080600c6000396000f20060003554156009570060203560003555600052601c60046103e8f0600055", + "code" : "0x7b601080600c6000396000f30060003554156009570060203560003555600052601c60046103e8f0600055", "nonce" : "0", "storage" : { } @@ -1914,7 +5344,7 @@ "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "1000000000000000000", - "code" : "0x7b601080600c6000396000f20060003554156009570060203560003555600052601c60046103e8f0600055", + "code" : "0x7b601080600c6000396000f30060003554156009570060203560003555600052601c60046103e8f0600055", "nonce" : "0", "storage" : { } @@ -1946,13 +5376,13 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "logs" : { - }, + "logs" : [ + ], "out" : "0x37", "post" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "100023", - "code" : "0x603760005360016000f2", + "code" : "0x603760005360016000f3", "nonce" : "0", "storage" : { } @@ -1975,7 +5405,7 @@ "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "23", - "code" : "0x603760005360016000f2", + "code" : "0x603760005360016000f3", "nonce" : "0", "storage" : { } @@ -2007,13 +5437,13 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "logs" : { - }, + "logs" : [ + ], "out" : "0x3700", "post" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "100023", - "code" : "0x603760005360026000f2", + "code" : "0x603760005360026000f3", "nonce" : "0", "storage" : { } @@ -2036,7 +5466,7 @@ "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "23", - "code" : "0x603760005360026000f2", + "code" : "0x603760005360026000f3", "nonce" : "0", "storage" : { } @@ -2068,13 +5498,13 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "logs" : { - }, + "logs" : [ + ], "out" : "0x370000000000000000000000000000000000000000000000000000000000000000", "post" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "100023", - "code" : "0x603760005360216000f2", + "code" : "0x603760005360216000f3", "nonce" : "0", "storage" : { } @@ -2097,7 +5527,7 @@ "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "23", - "code" : "0x603760005360216000f2", + "code" : "0x603760005360216000f3", "nonce" : "0", "storage" : { } @@ -2129,8 +5559,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { @@ -2183,8 +5613,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { @@ -2237,8 +5667,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { @@ -2298,8 +5728,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { @@ -2352,8 +5782,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { diff --git a/tests/files/VMTests/vmArithmeticTest.json b/tests/files/VMTests/vmArithmeticTest.json index 2ba56f4bc..2cc165f5d 100644 --- a/tests/files/VMTests/vmArithmeticTest.json +++ b/tests/files/VMTests/vmArithmeticTest.json @@ -21,8 +21,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -66,8 +66,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -111,8 +111,8 @@ "value" : "1000000000000000000" }, "gas" : "10000", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -155,8 +155,8 @@ "value" : "1000000000000000000" }, "gas" : "9896", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -199,8 +199,8 @@ "value" : "1000000000000000000" }, "gas" : "9896", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -243,8 +243,8 @@ "value" : "1000000000000000000" }, "gas" : "9695", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -288,8 +288,8 @@ "value" : "1000000000000000000" }, "gas" : "9691", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -333,8 +333,8 @@ "value" : "1000000000000000000" }, "gas" : "9693", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -378,8 +378,8 @@ "value" : "1000000000000000000" }, "gas" : "9887", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -422,8 +422,8 @@ "value" : "1000000000000000000" }, "gas" : "9687", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -467,8 +467,8 @@ "value" : "1000000000000000000" }, "gas" : "9693", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -512,8 +512,8 @@ "value" : "1000000000000000000" }, "gas" : "9891", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -556,8 +556,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -601,8 +601,8 @@ "value" : "1000000000000000000" }, "gas" : "9896", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -645,8 +645,8 @@ "value" : "1000000000000000000" }, "gas" : "9896", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -689,8 +689,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -734,8 +734,8 @@ "value" : "1000000000000000000" }, "gas" : "9896", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -778,8 +778,8 @@ "value" : "1000000000000000000" }, "gas" : "9695", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -823,8 +823,8 @@ "value" : "1000000000000000000" }, "gas" : "9664", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -868,8 +868,8 @@ "value" : "1000000000000000000" }, "gas" : "9692", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -913,8 +913,8 @@ "value" : "1000000000000000000" }, "gas" : "9892", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -957,8 +957,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1002,8 +1002,8 @@ "value" : "1000000000000000000" }, "gas" : "9695", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1047,8 +1047,8 @@ "value" : "1000000000000000000" }, "gas" : "9694", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1092,8 +1092,8 @@ "value" : "1000000000000000000" }, "gas" : "9894", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1136,8 +1136,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1181,8 +1181,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1226,8 +1226,8 @@ "value" : "1000000000000000000" }, "gas" : "9896", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1270,8 +1270,8 @@ "value" : "1000000000000000000" }, "gas" : "9896", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1314,8 +1314,8 @@ "value" : "1000000000000000000" }, "gas" : "9694", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1359,8 +1359,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1404,8 +1404,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1449,8 +1449,8 @@ "value" : "1000000000000000000" }, "gas" : "9896", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1493,8 +1493,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1538,8 +1538,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1583,8 +1583,8 @@ "value" : "1000000000000000000" }, "gas" : "9896", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1627,8 +1627,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1672,8 +1672,8 @@ "value" : "1000000000000000000" }, "gas" : "9895", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1716,8 +1716,8 @@ "value" : "1000000000000000000" }, "gas" : "9891", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1760,8 +1760,8 @@ "value" : "1000000000000000000" }, "gas" : "9693", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1805,8 +1805,8 @@ "value" : "1000000000000000000" }, "gas" : "9887", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1849,8 +1849,8 @@ "value" : "1000000000000000000" }, "gas" : "9687", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1894,8 +1894,8 @@ "value" : "1000000000000000000" }, "gas" : "9693", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1939,8 +1939,8 @@ "value" : "1000000000000000000" }, "gas" : "9891", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1983,8 +1983,8 @@ "value" : "1000000000000000000" }, "gas" : "9694", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2028,8 +2028,8 @@ "value" : "1000000000000000000" }, "gas" : "9694", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2073,8 +2073,8 @@ "value" : "1000000000000000000" }, "gas" : "9892", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2117,8 +2117,8 @@ "value" : "1000000000000000000" }, "gas" : "9694", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2162,8 +2162,8 @@ "value" : "1000000000000000000" }, "gas" : "9892", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2206,8 +2206,8 @@ "value" : "1000000000000000000" }, "gas" : "9894", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2250,8 +2250,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2295,8 +2295,8 @@ "value" : "1000000000000000000" }, "gas" : "9896", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2339,8 +2339,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2384,8 +2384,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2429,8 +2429,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2474,8 +2474,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2519,8 +2519,8 @@ "value" : "1000000000000000000" }, "gas" : "9896", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2563,8 +2563,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2608,8 +2608,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2653,8 +2653,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2698,8 +2698,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2743,8 +2743,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2788,8 +2788,8 @@ "value" : "1000000000000000000" }, "gas" : "9692", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2833,8 +2833,8 @@ "value" : "1000000000000000000" }, "gas" : "9694", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2878,8 +2878,8 @@ "value" : "1000000000000000000" }, "gas" : "9694", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2923,8 +2923,8 @@ "value" : "1000000000000000000" }, "gas" : "9894", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2967,8 +2967,8 @@ "value" : "1000000000000000000" }, "gas" : "9894", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -3011,8 +3011,8 @@ "value" : "1000000000000000000" }, "gas" : "10000", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -3055,8 +3055,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -3100,8 +3100,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -3145,8 +3145,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -3190,8 +3190,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -3235,8 +3235,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { diff --git a/tests/files/VMTests/vmBitwiseLogicOperationTest.json b/tests/files/VMTests/vmBitwiseLogicOperationTest.json index 2dd7fec2c..f72711995 100644 --- a/tests/files/VMTests/vmBitwiseLogicOperationTest.json +++ b/tests/files/VMTests/vmBitwiseLogicOperationTest.json @@ -21,8 +21,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -66,8 +66,8 @@ "value" : "1000000000000000000" }, "gas" : "9896", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -110,8 +110,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -155,8 +155,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -200,8 +200,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -245,8 +245,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -290,8 +290,8 @@ "value" : "1000000000000000000" }, "gas" : "9694", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -335,8 +335,8 @@ "value" : "1000000000000000000" }, "gas" : "9694", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -380,8 +380,8 @@ "value" : "1000000000000000000" }, "gas" : "9896", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -424,8 +424,8 @@ "value" : "1000000000000000000" }, "gas" : "9896", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -468,8 +468,8 @@ "value" : "1000000000000000000" }, "gas" : "9694", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -513,8 +513,8 @@ "value" : "1000000000000000000" }, "gas" : "9694", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -558,8 +558,8 @@ "value" : "1000000000000000000" }, "gas" : "9694", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -603,8 +603,8 @@ "value" : "1000000000000000000" }, "gas" : "9694", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -648,8 +648,8 @@ "value" : "1000000000000000000" }, "gas" : "9694", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -693,8 +693,8 @@ "value" : "1000000000000000000" }, "gas" : "9694", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -738,8 +738,8 @@ "value" : "1000000000000000000" }, "gas" : "9894", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -782,8 +782,8 @@ "value" : "1000000000000000000" }, "gas" : "9894", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -826,8 +826,8 @@ "value" : "1000000000000000000" }, "gas" : "9892", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -870,8 +870,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -915,8 +915,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -960,8 +960,8 @@ "value" : "1000000000000000000" }, "gas" : "9694", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1005,8 +1005,8 @@ "value" : "1000000000000000000" }, "gas" : "9894", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1049,8 +1049,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1094,8 +1094,8 @@ "value" : "1000000000000000000" }, "gas" : "9896", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1138,8 +1138,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1183,8 +1183,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1228,8 +1228,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1273,8 +1273,8 @@ "value" : "1000000000000000000" }, "gas" : "9894", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1317,8 +1317,8 @@ "value" : "1000000000000000000" }, "gas" : "9694", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1362,8 +1362,8 @@ "value" : "1000000000000000000" }, "gas" : "9896", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1406,8 +1406,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1451,8 +1451,8 @@ "value" : "1000000000000000000" }, "gas" : "9697", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1496,8 +1496,8 @@ "value" : "1000000000000000000" }, "gas" : "9897", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1540,8 +1540,8 @@ "value" : "1000000000000000000" }, "gas" : "9897", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1584,8 +1584,8 @@ "value" : "1000000000000000000" }, "gas" : "9895", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1628,8 +1628,8 @@ "value" : "1000000000000000000" }, "gas" : "9895", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1672,8 +1672,8 @@ "value" : "1000000000000000000" }, "gas" : "9695", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1717,8 +1717,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1762,8 +1762,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1807,8 +1807,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1852,8 +1852,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1897,8 +1897,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1942,8 +1942,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1987,8 +1987,8 @@ "value" : "1000000000000000000" }, "gas" : "9894", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2031,8 +2031,8 @@ "value" : "1000000000000000000" }, "gas" : "9694", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2076,8 +2076,8 @@ "value" : "1000000000000000000" }, "gas" : "9896", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2120,8 +2120,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2165,8 +2165,8 @@ "value" : "1000000000000000000" }, "gas" : "9892", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2209,8 +2209,8 @@ "value" : "1000000000000000000" }, "gas" : "9694", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2254,8 +2254,8 @@ "value" : "1000000000000000000" }, "gas" : "9894", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2298,8 +2298,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2343,8 +2343,8 @@ "value" : "1000000000000000000" }, "gas" : "9896", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2387,8 +2387,8 @@ "value" : "1000000000000000000" }, "gas" : "9692", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2432,8 +2432,8 @@ "value" : "1000000000000000000" }, "gas" : "9896", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2476,8 +2476,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2521,8 +2521,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2566,8 +2566,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2611,8 +2611,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2656,8 +2656,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { diff --git a/tests/files/VMTests/vmBlockInfoTest.json b/tests/files/VMTests/vmBlockInfoTest.json index 127c00abb..90fa77a3d 100644 --- a/tests/files/VMTests/vmBlockInfoTest.json +++ b/tests/files/VMTests/vmBlockInfoTest.json @@ -21,8 +21,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -66,8 +66,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -111,8 +111,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -156,8 +156,8 @@ "value" : "1000000000000000000" }, "gas" : "9898", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -200,8 +200,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -245,8 +245,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { diff --git a/tests/files/VMTests/vmEnvironmentalInfoTest.json b/tests/files/VMTests/vmEnvironmentalInfoTest.json index b7d6ca7bb..37563707b 100644 --- a/tests/files/VMTests/vmEnvironmentalInfoTest.json +++ b/tests/files/VMTests/vmEnvironmentalInfoTest.json @@ -21,8 +21,8 @@ "value" : "1000000000000000000" }, "gas" : "99999999698", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -66,8 +66,8 @@ "value" : "1000000000000000000" }, "gas" : "99999999698", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "cd1722f3947def4cf144679da39c4c32bdc35681" : { @@ -111,8 +111,8 @@ "value" : "1000000000000000000" }, "gas" : "99999999878", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -162,8 +162,8 @@ "value" : "1000000000000000000" }, "gas" : "99999999678", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -207,8 +207,8 @@ "value" : "1000000000000000000" }, "gas" : "99999999656", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -252,8 +252,8 @@ "value" : "1000000000000000000" }, "gas" : "99999999656", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -304,8 +304,8 @@ "value" : "1000000000000000000" }, "gas" : "99999999691", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -349,8 +349,8 @@ "value" : "1000000000000000000" }, "gas" : "99999999691", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -394,8 +394,8 @@ "value" : "1000000000000000000" }, "gas" : "99999999892", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -416,6 +416,94 @@ } } }, + "calldatacopy_DataIndexTooHigh" : { + "callcreates" : [ + ], + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : "1", + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "exec" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "code" : "0x60ff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa600037600051600055", + "data" : "0x01234567890abcdef01234567890abcdef", + "gas" : "100000000000", + "gasPrice" : "1000000000", + "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "value" : "1000000000000000000" + }, + "gas" : "99999999877", + "logs" : [ + ], + "out" : "0x", + "post" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x60ff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa600037600051600055", + "nonce" : "0", + "storage" : { + } + } + }, + "pre" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x60ff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa600037600051600055", + "nonce" : "0", + "storage" : { + } + } + } + }, + "calldatacopy_DataIndexTooHigh2" : { + "callcreates" : [ + ], + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : "1", + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "exec" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "code" : "0x60097ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa600037600051600055", + "data" : "0x01234567890abcdef01234567890abcdef", + "gas" : "100000000000", + "gasPrice" : "1000000000", + "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "value" : "1000000000000000000" + }, + "gas" : "99999999891", + "logs" : [ + ], + "out" : "0x", + "post" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x60097ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa600037600051600055", + "nonce" : "0", + "storage" : { + } + } + }, + "pre" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x60097ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa600037600051600055", + "nonce" : "0", + "storage" : { + } + } + } + }, "calldataload0" : { "callcreates" : [ ], @@ -438,8 +526,8 @@ "value" : "1000000000000000000" }, "gas" : "99999999697", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -483,8 +571,8 @@ "value" : "1000000000000000000" }, "gas" : "99999999697", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -528,8 +616,8 @@ "value" : "1000000000000000000" }, "gas" : "99999999697", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -551,6 +639,50 @@ } } }, + "calldataloadSizeTooHigh" : { + "callcreates" : [ + ], + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : "1", + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "exec" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "code" : "0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa35600055", + "data" : "0x0123456789abcdef0000000000000000000000000000000000000000000000000024", + "gas" : "100000000000", + "gasPrice" : "1000000000", + "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "value" : "1000000000000000000" + }, + "gas" : "99999999897", + "logs" : [ + ], + "out" : "0x", + "post" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa35600055", + "nonce" : "0", + "storage" : { + } + } + }, + "pre" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa35600055", + "nonce" : "0", + "storage" : { + } + } + } + }, "calldatasize0" : { "callcreates" : [ ], @@ -573,8 +705,8 @@ "value" : "1000000000000000000" }, "gas" : "99999999698", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -618,8 +750,8 @@ "value" : "1000000000000000000" }, "gas" : "99999999698", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -663,8 +795,8 @@ "value" : "1000000000000000000" }, "gas" : "99999999698", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -708,8 +840,8 @@ "value" : "1000000000000000000" }, "gas" : "99999999698", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -753,8 +885,8 @@ "value" : "1000000000000000000" }, "gas" : "99999999698", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -798,8 +930,8 @@ "value" : "1000000000000000000" }, "gas" : "99999999691", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -843,8 +975,8 @@ "value" : "1000000000000000000" }, "gas" : "99999999691", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -866,6 +998,50 @@ } } }, + "codecopy_DataIndexTooHigh" : { + "callcreates" : [ + ], + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : "1", + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "exec" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "code" : "0x60087ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa600039600051600055", + "data" : "0x01234567890abcdef01234567890abcdef", + "gas" : "100000000000", + "gasPrice" : "1000000000", + "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "value" : "1000000000000000000" + }, + "gas" : "99999999891", + "logs" : [ + ], + "out" : "0x", + "post" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x60087ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa600039600051600055", + "nonce" : "0", + "storage" : { + } + } + }, + "pre" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x60087ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa600039600051600055", + "nonce" : "0", + "storage" : { + } + } + } + }, "codesize" : { "callcreates" : [ ], @@ -888,8 +1064,8 @@ "value" : "1000000000000000000" }, "gas" : "99999999698", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -933,8 +1109,8 @@ "value" : "1000000000000000000" }, "gas" : "99999999689", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -970,6 +1146,50 @@ } } }, + "extcodecopy_DataIndexTooHigh" : { + "callcreates" : [ + ], + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : "1", + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "exec" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "code" : "0x60087ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa6000303c600051600055", + "data" : "0x01234567890abcdef01234567890abcdef", + "gas" : "100000000000", + "gasPrice" : "1000000000", + "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "value" : "1000000000000000000" + }, + "gas" : "99999999890", + "logs" : [ + ], + "out" : "0x", + "post" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x60087ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa6000303c600051600055", + "nonce" : "0", + "storage" : { + } + } + }, + "pre" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x60087ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa6000303c600051600055", + "nonce" : "0", + "storage" : { + } + } + } + }, "extcodesize0" : { "callcreates" : [ ], @@ -992,8 +1212,8 @@ "value" : "1000000000000000000" }, "gas" : "99999999695", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1051,8 +1271,8 @@ "value" : "1000000000000000000" }, "gas" : "99999999697", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1110,8 +1330,8 @@ "value" : "1000000000000000000" }, "gas" : "99999999698", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1155,8 +1375,8 @@ "value" : "1000000000000000000" }, "gas" : "99999999698", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { diff --git a/tests/files/VMTests/vmIOandFlowOperationsTest.json b/tests/files/VMTests/vmIOandFlowOperationsTest.json index 8542a7dba..120977086 100644 --- a/tests/files/VMTests/vmIOandFlowOperationsTest.json +++ b/tests/files/VMTests/vmIOandFlowOperationsTest.json @@ -21,8 +21,8 @@ "value" : "1000000000000000000" }, "gas" : "9695", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -66,8 +66,8 @@ "value" : "1000000000000000000" }, "gas" : "9688", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -111,8 +111,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -156,8 +156,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -230,8 +230,8 @@ "value" : "1000000000000000000" }, "gas" : "9695", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -275,8 +275,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -320,8 +320,8 @@ "value" : "1000000000000000000" }, "gas" : "9693", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -423,8 +423,8 @@ "value" : "1000000000000000000" }, "gas" : "9695", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -468,8 +468,8 @@ "value" : "1000000000000000000" }, "gas" : "9694", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -513,8 +513,8 @@ "value" : "1000000000000000000" }, "gas" : "9695", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -558,8 +558,8 @@ "value" : "1000000000000000000" }, "gas" : "9997", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -602,8 +602,8 @@ "value" : "1000000000000000000" }, "gas" : "9896", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -646,8 +646,8 @@ "value" : "1000000000000000000" }, "gas" : "9892", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -719,8 +719,8 @@ "value" : "1000000000000000000" }, "gas" : "9694", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -764,8 +764,8 @@ "value" : "1000000000000000000" }, "gas" : "9694", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -809,8 +809,8 @@ "value" : "1000000000000000000" }, "gas" : "9690", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -854,8 +854,8 @@ "value" : "1000000000000000000" }, "gas" : "9688", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -899,8 +899,8 @@ "value" : "1000000000000000000" }, "gas" : "9692", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -944,8 +944,8 @@ "value" : "1000000000000000000" }, "gas" : "9690", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -989,8 +989,8 @@ "value" : "1000000000000000000" }, "gas" : "10000", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1033,8 +1033,8 @@ "value" : "1000000000000000000" }, "gas" : "9692", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1078,8 +1078,8 @@ "value" : "1000000000000000000" }, "gas" : "9690", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1123,8 +1123,8 @@ "value" : "1000000000000000000" }, "gas" : "10000", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1167,8 +1167,8 @@ "value" : "1000000000000000000" }, "gas" : "9693", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1212,8 +1212,8 @@ "value" : "1000000000000000000" }, "gas" : "9898", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1256,8 +1256,8 @@ "value" : "1000000000000000000" }, "gas" : "9596", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1301,8 +1301,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1375,8 +1375,8 @@ "value" : "1000000000000000000" }, "gas" : "9074", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1422,8 +1422,8 @@ "value" : "1000000000000000000" }, "gas" : "9274", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1468,8 +1468,8 @@ "value" : "1000000000000000000" }, "gas" : "8450", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { diff --git a/tests/files/VMTests/vmLogTest.json b/tests/files/VMTests/vmLogTest.json index 8a1b6e703..48e20ac63 100644 --- a/tests/files/VMTests/vmLogTest.json +++ b/tests/files/VMTests/vmLogTest.json @@ -21,14 +21,15 @@ "value" : "1000000000000000000" }, "gas" : "9966", - "logs" : { - "00000000000000000000800000000000000000000000000000000880000000000000000000000000000000000000000000000000000000000000000000000000" : { + "logs" : [ + { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "bloom" : "00000000000000000000800000000000000000000000000000000880000000000000000000000000000000000000000000000000000000000000000000000000", "data" : "0x", "topics" : [ ] } - }, + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -129,14 +130,15 @@ "value" : "1000000000000000000" }, "gas" : "9962", - "logs" : { - "00000000000000000000800000000000000000000000000000000880000000000000000000000000000000000000000000000000000000000000000000000000" : { + "logs" : [ + { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "bloom" : "00000000000000000000800000000000000000000000000000000880000000000000000000000000000000000000000000000000000000000000000000000000", "data" : "0x", "topics" : [ ] } - }, + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -179,14 +181,15 @@ "value" : "1000000000000000000" }, "gas" : "9930", - "logs" : { - "00000000000000000000800000000000000000000000000000000880000000000000000000000000000000000000000000000000000000000000000000000000" : { + "logs" : [ + { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "bloom" : "00000000000000000000800000000000000000000000000000000880000000000000000000000000000000000000000000000000000000000000000000000000", "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "topics" : [ ] } - }, + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -229,14 +232,15 @@ "value" : "1000000000000000000" }, "gas" : "9961", - "logs" : { - "00000000000000000000800000000000000000000000000000000880000000000000000000000000000000000000000000000000000000000000000000000000" : { + "logs" : [ + { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "bloom" : "00000000000000000000800000000000000000000000000000000880000000000000000000000000000000000000000000000000000000000000000000000000", "data" : "0xaa", "topics" : [ ] } - }, + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -279,14 +283,15 @@ "value" : "1000000000000000000" }, "gas" : "9961", - "logs" : { - "00000000000000000000800000000000000000000000000000000880000000000000000000000000000000000000000000000000000000000000000000000000" : { + "logs" : [ + { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "bloom" : "00000000000000000000800000000000000000000000000000000880000000000000000000000000000000000000000000000000000000000000000000000000", "data" : "0xdd", "topics" : [ ] } - }, + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -329,15 +334,16 @@ "value" : "1000000000000000000" }, "gas" : "9897", - "logs" : { - "00000000000008000000808100000000000000000000000000000880000000000000000000000000000000000000000000000000000000000000000000000000" : { + "logs" : [ + { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "bloom" : "00000000000008000000808100000000000000000000000000000880000000000000000000000000000000000000000000000000000000000000000000000000", "data" : "0xff00000000000000000000000000000000000000000000000000000000000000", "topics" : [ "000000000000000000000000cd1722f3947def4cf144679da39c4c32bdc35681" ] } - }, + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -380,15 +386,16 @@ "value" : "1000000000000000000" }, "gas" : "9897", - "logs" : { - "00000000000000200000800000000000000000000000000000000880000000000000000000000000000000000000000000000010000000000000000000000020" : { + "logs" : [ + { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "bloom" : "00000000000000200000800000000000000000000000000000000880000000000000000000000000000000000000000000000010000000000000000000000020", "data" : "0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd", "topics" : [ "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" ] } - }, + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -431,15 +438,16 @@ "value" : "1000000000000000000" }, "gas" : "9933", - "logs" : { - "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000" : { + "logs" : [ + { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000", "data" : "0x", "topics" : [ "0000000000000000000000000000000000000000000000000000000000000000" ] } - }, + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -540,15 +548,16 @@ "value" : "1000000000000000000" }, "gas" : "9929", - "logs" : { - "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000" : { + "logs" : [ + { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000", "data" : "0x", "topics" : [ "0000000000000000000000000000000000000000000000000000000000000000" ] } - }, + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -591,15 +600,16 @@ "value" : "1000000000000000000" }, "gas" : "9897", - "logs" : { - "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000" : { + "logs" : [ + { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000", "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "topics" : [ "0000000000000000000000000000000000000000000000000000000000000000" ] } - }, + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -642,15 +652,16 @@ "value" : "1000000000000000000" }, "gas" : "9928", - "logs" : { - "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000" : { + "logs" : [ + { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000", "data" : "0xaa", "topics" : [ "0000000000000000000000000000000000000000000000000000000000000000" ] } - }, + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -693,15 +704,16 @@ "value" : "1000000000000000000" }, "gas" : "9928", - "logs" : { - "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000" : { + "logs" : [ + { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000", "data" : "0xdd", "topics" : [ "0000000000000000000000000000000000000000000000000000000000000000" ] } - }, + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -744,16 +756,17 @@ "value" : "1000000000000000000" }, "gas" : "9864", - "logs" : { - "00000000000008000000808100000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000" : { + "logs" : [ + { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "bloom" : "00000000000008000000808100000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000", "data" : "0xff00000000000000000000000000000000000000000000000000000000000000", "topics" : [ "0000000000000000000000000000000000000000000000000000000000000000", "000000000000000000000000cd1722f3947def4cf144679da39c4c32bdc35681" ] } - }, + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -796,15 +809,17 @@ "value" : "1000000000000000000" }, "gas" : "9864", - "logs" : { - "00000000000000200000800000000000000000000000000000000880000000000000000000000000000000000000000000000010000000000000000000000020" : { + "logs" : [ + { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "bloom" : "00000000000000200000800000000000000000000000000000000880000000000000000000000000000000000000000000000010000000000000000000000020", "data" : "0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd", "topics" : [ + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" ] } - }, + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -847,15 +862,17 @@ "value" : "1000000000000000000" }, "gas" : "9900", - "logs" : { - "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000" : { + "logs" : [ + { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000", "data" : "0x", "topics" : [ + "0000000000000000000000000000000000000000000000000000000000000000", "0000000000000000000000000000000000000000000000000000000000000000" ] } - }, + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -956,15 +973,17 @@ "value" : "1000000000000000000" }, "gas" : "9896", - "logs" : { - "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000" : { + "logs" : [ + { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000", "data" : "0x", "topics" : [ + "0000000000000000000000000000000000000000000000000000000000000000", "0000000000000000000000000000000000000000000000000000000000000000" ] } - }, + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1007,15 +1026,17 @@ "value" : "1000000000000000000" }, "gas" : "9864", - "logs" : { - "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000" : { + "logs" : [ + { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000", "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "topics" : [ + "0000000000000000000000000000000000000000000000000000000000000000", "0000000000000000000000000000000000000000000000000000000000000000" ] } - }, + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1058,15 +1079,17 @@ "value" : "1000000000000000000" }, "gas" : "9895", - "logs" : { - "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000" : { + "logs" : [ + { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000", "data" : "0xaa", "topics" : [ + "0000000000000000000000000000000000000000000000000000000000000000", "0000000000000000000000000000000000000000000000000000000000000000" ] } - }, + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1109,15 +1132,17 @@ "value" : "1000000000000000000" }, "gas" : "9895", - "logs" : { - "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000" : { + "logs" : [ + { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000", "data" : "0xdd", "topics" : [ + "0000000000000000000000000000000000000000000000000000000000000000", "0000000000000000000000000000000000000000000000000000000000000000" ] } - }, + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1160,16 +1185,18 @@ "value" : "1000000000000000000" }, "gas" : "9831", - "logs" : { - "00000000000008000000808100000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000" : { + "logs" : [ + { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "bloom" : "00000000000008000000808100000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000", "data" : "0xff00000000000000000000000000000000000000000000000000000000000000", "topics" : [ + "0000000000000000000000000000000000000000000000000000000000000000", "0000000000000000000000000000000000000000000000000000000000000000", "000000000000000000000000cd1722f3947def4cf144679da39c4c32bdc35681" ] } - }, + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1212,15 +1239,18 @@ "value" : "1000000000000000000" }, "gas" : "9831", - "logs" : { - "00000000000000200000800000000000000000000000000000000880000000000000000000000000000000000000000000000010000000000000000000000020" : { + "logs" : [ + { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "bloom" : "00000000000000200000800000000000000000000000000000000880000000000000000000000000000000000000000000000010000000000000000000000020", "data" : "0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd", "topics" : [ + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" ] } - }, + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1263,17 +1293,18 @@ "value" : "1000000000000000000" }, "gas" : "9831", - "logs" : { - "00003004000000000000800000000010000008000000000000000980000000000000000000000000000000000000000000001000000400000000000800000000" : { + "logs" : [ + { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "bloom" : "00003004000000000000800000000010000008000000000000000980000000000000000000000000000000000000000000001000000400000000000800000000", "data" : "0xff00000000000000000000000000000000000000000000000000000000000000", "topics" : [ - "0000000000000000000000000000000000000000000000000000000000000005", + "0000000000000000000000000000000000000000000000000000000000000007", "0000000000000000000000000000000000000000000000000000000000000006", - "0000000000000000000000000000000000000000000000000000000000000007" + "0000000000000000000000000000000000000000000000000000000000000005" ] } - }, + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1316,15 +1347,18 @@ "value" : "1000000000000000000" }, "gas" : "9867", - "logs" : { - "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000" : { + "logs" : [ + { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000", "data" : "0x", "topics" : [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", "0000000000000000000000000000000000000000000000000000000000000000" ] } - }, + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1425,15 +1459,18 @@ "value" : "1000000000000000000" }, "gas" : "9863", - "logs" : { - "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000" : { + "logs" : [ + { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000", "data" : "0x", "topics" : [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", "0000000000000000000000000000000000000000000000000000000000000000" ] } - }, + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1476,15 +1513,18 @@ "value" : "1000000000000000000" }, "gas" : "9831", - "logs" : { - "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000" : { + "logs" : [ + { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000", "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "topics" : [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", "0000000000000000000000000000000000000000000000000000000000000000" ] } - }, + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1527,15 +1567,18 @@ "value" : "1000000000000000000" }, "gas" : "9862", - "logs" : { - "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000" : { + "logs" : [ + { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000", "data" : "0xaa", "topics" : [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", "0000000000000000000000000000000000000000000000000000000000000000" ] } - }, + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1578,15 +1621,18 @@ "value" : "1000000000000000000" }, "gas" : "9862", - "logs" : { - "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000" : { + "logs" : [ + { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000", "data" : "0xdd", "topics" : [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", "0000000000000000000000000000000000000000000000000000000000000000" ] } - }, + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1629,8 +1675,8 @@ "value" : "1000000000000000000" }, "gas" : "10000", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1673,15 +1719,19 @@ "value" : "1000000000000000000" }, "gas" : "9798", - "logs" : { - "00000000000000200000800000000000000000000000000000000880000000000000000000000000000000000000000000000010000000000000000000000020" : { + "logs" : [ + { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "bloom" : "00000000000000200000800000000000000000000000000000000880000000000000000000000000000000000000000000000010000000000000000000000020", "data" : "0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd", "topics" : [ + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" ] } - }, + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1724,8 +1774,8 @@ "value" : "1000000000000000000" }, "gas" : "10000", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1768,15 +1818,19 @@ "value" : "1000000000000000000" }, "gas" : "9834", - "logs" : { - "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000" : { + "logs" : [ + { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000", "data" : "0x", "topics" : [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", "0000000000000000000000000000000000000000000000000000000000000000" ] } - }, + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1877,15 +1931,19 @@ "value" : "1000000000000000000" }, "gas" : "9830", - "logs" : { - "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000" : { + "logs" : [ + { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000", "data" : "0x", "topics" : [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", "0000000000000000000000000000000000000000000000000000000000000000" ] } - }, + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1928,15 +1986,19 @@ "value" : "1000000000000000000" }, "gas" : "9798", - "logs" : { - "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000" : { + "logs" : [ + { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000", "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "topics" : [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", "0000000000000000000000000000000000000000000000000000000000000000" ] } - }, + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1979,15 +2041,19 @@ "value" : "1000000000000000000" }, "gas" : "9829", - "logs" : { - "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000" : { + "logs" : [ + { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000", "data" : "0xaa", "topics" : [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", "0000000000000000000000000000000000000000000000000000000000000000" ] } - }, + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2030,15 +2096,19 @@ "value" : "1000000000000000000" }, "gas" : "9829", - "logs" : { - "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000" : { + "logs" : [ + { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "bloom" : "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000", "data" : "0xdd", "topics" : [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", "0000000000000000000000000000000000000000000000000000000000000000" ] } - }, + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2058,5 +2128,63 @@ } } } + }, + "log_2logs" : { + "callcreates" : [ + ], + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : "1", + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "exec" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60005260206000a060106002a0", + "data" : "0x", + "gas" : "10000", + "gasPrice" : "100000000000000", + "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "value" : "1000000000000000000" + }, + "gas" : "9880", + "logs" : [ + { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "bloom" : "00000000000000000000800000000000000000000000000000000880000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + }, + { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "bloom" : "00000000000000000000800000000000000000000000000000000880000000000000000000000000000000000000000000000000000000000000000000000000", + "data" : "0xffffffffffffffffffffffffffffffff", + "topics" : [ + ] + } + ], + "out" : "0x", + "post" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60005260206000a060106002a0", + "nonce" : "0", + "storage" : { + } + } + }, + "pre" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60005260206000a060106002a0", + "nonce" : "0", + "storage" : { + } + } + } } } \ No newline at end of file diff --git a/tests/files/VMTests/vmPushDupSwapTest.json b/tests/files/VMTests/vmPushDupSwapTest.json index e9f89e230..9c69aed80 100644 --- a/tests/files/VMTests/vmPushDupSwapTest.json +++ b/tests/files/VMTests/vmPushDupSwapTest.json @@ -21,8 +21,8 @@ "value" : "1000000000000000000" }, "gas" : "9697", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -66,8 +66,8 @@ "value" : "1000000000000000000" }, "gas" : "9688", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -111,8 +111,8 @@ "value" : "1000000000000000000" }, "gas" : "9687", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -156,8 +156,8 @@ "value" : "1000000000000000000" }, "gas" : "9686", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -201,8 +201,8 @@ "value" : "1000000000000000000" }, "gas" : "9685", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -246,8 +246,8 @@ "value" : "1000000000000000000" }, "gas" : "9684", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -291,8 +291,8 @@ "value" : "1000000000000000000" }, "gas" : "9683", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -336,8 +336,8 @@ "value" : "1000000000000000000" }, "gas" : "9682", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -381,8 +381,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -455,8 +455,8 @@ "value" : "1000000000000000000" }, "gas" : "9695", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -500,8 +500,8 @@ "value" : "1000000000000000000" }, "gas" : "9694", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -545,8 +545,8 @@ "value" : "1000000000000000000" }, "gas" : "9693", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -590,8 +590,8 @@ "value" : "1000000000000000000" }, "gas" : "9692", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -635,8 +635,8 @@ "value" : "1000000000000000000" }, "gas" : "9691", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -680,8 +680,8 @@ "value" : "1000000000000000000" }, "gas" : "9690", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -725,8 +725,8 @@ "value" : "1000000000000000000" }, "gas" : "9689", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -770,8 +770,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -815,8 +815,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -860,8 +860,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -905,8 +905,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -950,8 +950,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -995,8 +995,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1040,8 +1040,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1085,8 +1085,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1130,8 +1130,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1175,8 +1175,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1220,8 +1220,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1265,8 +1265,8 @@ "value" : "1000000000000000000" }, "gas" : "9999", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1309,8 +1309,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1354,8 +1354,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1399,8 +1399,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1444,8 +1444,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1489,8 +1489,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1534,8 +1534,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1579,8 +1579,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1624,8 +1624,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1669,8 +1669,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1714,8 +1714,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1759,8 +1759,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1804,8 +1804,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1849,8 +1849,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1894,8 +1894,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1939,8 +1939,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1984,8 +1984,8 @@ "value" : "1000000000000000000" }, "gas" : "9999", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "bbccddeeff00112233445566778899aabbccddee" : { @@ -2028,8 +2028,8 @@ "value" : "1000000000000000000" }, "gas" : "9999", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2072,8 +2072,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2117,8 +2117,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2162,8 +2162,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2207,8 +2207,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2252,8 +2252,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2297,8 +2297,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2342,8 +2342,8 @@ "value" : "1000000000000000000" }, "gas" : "9697", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2387,8 +2387,8 @@ "value" : "1000000000000000000" }, "gas" : "9688", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2432,8 +2432,8 @@ "value" : "1000000000000000000" }, "gas" : "9687", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2477,8 +2477,8 @@ "value" : "1000000000000000000" }, "gas" : "9686", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2522,8 +2522,8 @@ "value" : "1000000000000000000" }, "gas" : "9685", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2567,8 +2567,8 @@ "value" : "1000000000000000000" }, "gas" : "9684", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2612,8 +2612,8 @@ "value" : "1000000000000000000" }, "gas" : "9683", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2657,8 +2657,8 @@ "value" : "1000000000000000000" }, "gas" : "9682", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2702,8 +2702,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2776,8 +2776,8 @@ "value" : "1000000000000000000" }, "gas" : "9695", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2821,8 +2821,8 @@ "value" : "1000000000000000000" }, "gas" : "9694", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2866,8 +2866,8 @@ "value" : "1000000000000000000" }, "gas" : "9693", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2911,8 +2911,8 @@ "value" : "1000000000000000000" }, "gas" : "9692", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2956,8 +2956,8 @@ "value" : "1000000000000000000" }, "gas" : "9691", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -3001,8 +3001,8 @@ "value" : "1000000000000000000" }, "gas" : "9690", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -3046,8 +3046,8 @@ "value" : "1000000000000000000" }, "gas" : "9689", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { diff --git a/tests/files/VMTests/vmSha3Test.json b/tests/files/VMTests/vmSha3Test.json index 55aeb3b84..bd430ec9d 100644 --- a/tests/files/VMTests/vmSha3Test.json +++ b/tests/files/VMTests/vmSha3Test.json @@ -21,8 +21,8 @@ "value" : "1000000000000000000" }, "gas" : "99999999677", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -66,8 +66,8 @@ "value" : "1000000000000000000" }, "gas" : "9676", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -111,8 +111,8 @@ "value" : "1000000000000000000" }, "gas" : "9676", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { diff --git a/tests/files/VMTests/vmtests.json b/tests/files/VMTests/vmtests.json index bd2fa6fa2..e1d73ee5d 100644 --- a/tests/files/VMTests/vmtests.json +++ b/tests/files/VMTests/vmtests.json @@ -27,8 +27,8 @@ "value" : "1000000000000000000" }, "gas" : "9949", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -95,8 +95,8 @@ "value" : "1000000000000000000" }, "gas" : "9824", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -145,8 +145,8 @@ "value" : "1000000000000000000" }, "gas" : "9971", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -189,8 +189,8 @@ "value" : "1000000000000000000" }, "gas" : "9999", - "logs" : { - }, + "logs" : [ + ], "out" : "0x", "post" : { "cd1722f3947def4cf144679da39c4c32bdc35681" : { From 186948da22feeca138ffb976fbf96033045ad350 Mon Sep 17 00:00:00 2001 From: obscuren Date: Wed, 10 Dec 2014 11:27:10 +0100 Subject: [PATCH 28/79] changed to unsigned integers --- tests/vm/gh_test.go | 26 +++++++++++++++++++------- vm/stack.go | 4 ++-- vm/vm_debug.go | 22 +++++++++++----------- 3 files changed, 32 insertions(+), 20 deletions(-) diff --git a/tests/vm/gh_test.go b/tests/vm/gh_test.go index 3da37cd3a..da5a41251 100644 --- a/tests/vm/gh_test.go +++ b/tests/vm/gh_test.go @@ -20,9 +20,21 @@ type Account struct { } type Log struct { - Address string - Data string - Topics []string + AddressF string `json:"address"` + DataF string `json:"data"` + TopicsF []string `json:"topics"` + BloomF string `json:"bloom"` +} + +func (self Log) Address() []byte { return ethutil.Hex2Bytes(self.AddressF) } +func (self Log) Data() []byte { return ethutil.Hex2Bytes(self.DataF) } +func (self Log) RlpData() interface{} { return nil } +func (self Log) Topics() [][]byte { + t := make([][]byte, len(self.TopicsF)) + for i, topic := range self.TopicsF { + t[i] = ethutil.Hex2Bytes(topic) + } + return t } func StateObjectFromAccount(addr string, account Account) *state.StateObject { @@ -53,7 +65,7 @@ type VmTest struct { Env Env Exec map[string]string Transaction map[string]string - Logs map[string]Log + Logs []Log Gas string Out string Post map[string]Account @@ -128,10 +140,10 @@ func RunVmTest(p string, t *testing.T) { } if len(test.Logs) > 0 { - genBloom := ethutil.LeftPadBytes(types.LogsBloom(logs).Bytes(), 64) // Logs within the test itself aren't correct, missing empty fields (32 0s) - for bloom /*logs*/, _ := range test.Logs { - if !bytes.Equal(genBloom, ethutil.Hex2Bytes(bloom)) { + for i, log := range test.Logs { + genBloom := ethutil.LeftPadBytes(types.LogsBloom(state.Logs{logs[i]}).Bytes(), 64) + if !bytes.Equal(genBloom, ethutil.Hex2Bytes(log.BloomF)) { t.Errorf("bloom mismatch") } } diff --git a/vm/stack.go b/vm/stack.go index 98795cc03..6091479cb 100644 --- a/vm/stack.go +++ b/vm/stack.go @@ -111,10 +111,10 @@ func NewMemory() *Memory { return &Memory{nil} } -func (m *Memory) Set(offset, size int64, value []byte) { +func (m *Memory) Set(offset, size uint64, value []byte) { if len(value) > 0 { totSize := offset + size - lenSize := int64(len(m.store) - 1) + lenSize := uint64(len(m.store) - 1) if totSize > lenSize { // Calculate the diff between the sizes diff := totSize - lenSize diff --git a/vm/vm_debug.go b/vm/vm_debug.go index c0a2d6d98..5b7258cc5 100644 --- a/vm/vm_debug.go +++ b/vm/vm_debug.go @@ -98,7 +98,7 @@ func (self *DebugVm) Run(me, caller ClosureRef, code []byte, value, gas, price * } else { nop := OpCode(closure.GetOp(p)) if !(nop == JUMPDEST || destinations[from] != nil) { - panic(fmt.Sprintf("JUMP missed JUMPDEST (%v) %v", nop, p)) + panic(fmt.Sprintf("invalid jump destination (%v) %v", nop, p)) } else if nop == JUMP || nop == JUMPI { panic(fmt.Sprintf("not allowed to JUMP(I) in to JUMP")) } @@ -611,10 +611,10 @@ func (self *DebugVm) Run(me, caller ClosureRef, code []byte, value, gas, price * self.Printf(" => %d", l) case CALLDATACOPY: var ( - size = int64(len(callData)) - mOff = stack.Pop().Int64() - cOff = stack.Pop().Int64() - l = stack.Pop().Int64() + size = uint64(len(callData)) + mOff = stack.Pop().Uint64() + cOff = stack.Pop().Uint64() + l = stack.Pop().Uint64() ) if cOff > size { @@ -654,10 +654,10 @@ func (self *DebugVm) Run(me, caller ClosureRef, code []byte, value, gas, price * } var ( - size = int64(len(code)) - mOff = stack.Pop().Int64() - cOff = stack.Pop().Int64() - l = stack.Pop().Int64() + size = uint64(len(code)) + mOff = stack.Pop().Uint64() + cOff = stack.Pop().Uint64() + l = stack.Pop().Uint64() ) if cOff > size { @@ -760,7 +760,7 @@ func (self *DebugVm) Run(me, caller ClosureRef, code []byte, value, gas, price * case MSTORE: // Store the value at stack top-1 in to memory at location stack top // Pop value of the stack val, mStart := stack.Popn() - mem.Set(mStart.Int64(), 32, ethutil.BigToBytes(val, 256)) + mem.Set(mStart.Uint64(), 32, ethutil.BigToBytes(val, 256)) self.Printf(" => 0x%x", val) case MSTORE8: @@ -883,7 +883,7 @@ func (self *DebugVm) Run(me, caller ClosureRef, code []byte, value, gas, price * stack.Push(ethutil.BigTrue) msg.Output = ret - mem.Set(retOffset.Int64(), retSize.Int64(), ret) + mem.Set(retOffset.Uint64(), retSize.Uint64(), ret) } self.Printf("resume %x", closure.Address()) From 0f5c6c5e2daa9fbf3a0bb753debd8989a872823c Mon Sep 17 00:00:00 2001 From: obscuren Date: Wed, 10 Dec 2014 14:17:10 +0100 Subject: [PATCH 29/79] Changed new methods to use ecdsa package for pub prv keys --- crypto/crypto.go | 57 ++++++++++++++++++++-------------- crypto/encrypt_decrypt_test.go | 6 ++-- 2 files changed, 36 insertions(+), 27 deletions(-) diff --git a/crypto/crypto.go b/crypto/crypto.go index 87dd72dc7..d70a5a4db 100644 --- a/crypto/crypto.go +++ b/crypto/crypto.go @@ -18,19 +18,6 @@ func init() { ecies.AddParamsForCurve(S256(), ecies.ECIES_AES128_SHA256) } -func ToECDSA(prv []byte) *ecdsa.PrivateKey { - priv := new(ecdsa.PrivateKey) - priv.PublicKey.Curve = S256() - priv.D = ethutil.BigD(prv) - priv.PublicKey.X, priv.PublicKey.Y = S256().ScalarBaseMult(prv) - return priv -} - -func FromECDSA(prv *ecdsa.PrivateKey) []byte { - return prv.D.Bytes() -} - -// TODO refactor, remove (bin) func Sha3(data []byte) []byte { d := sha3.NewKeccak256() d.Write(data) @@ -67,23 +54,45 @@ func Ecrecover(data []byte) []byte { return r } -func SigToPub(hash, sig []byte) []byte { - return Ecrecover(append(hash, sig...)) +// New methods using proper ecdsa keys from the stdlib +func ToECDSA(prv []byte) *ecdsa.PrivateKey { + priv := new(ecdsa.PrivateKey) + priv.PublicKey.Curve = S256() + priv.D = ethutil.BigD(prv) + priv.PublicKey.X, priv.PublicKey.Y = S256().ScalarBaseMult(prv) + return priv } -func Sign(hash, prv []byte) (sig []byte, err error) { - sig, err = secp256k1.Sign(hash, prv) +func FromECDSA(prv *ecdsa.PrivateKey) []byte { + return prv.D.Bytes() +} + +func PubToECDSA(pub []byte) *ecdsa.PublicKey { + x, y := elliptic.Unmarshal(S256(), pub) + return &ecdsa.PublicKey{S256(), x, y} +} + +func GenerateKey() (*ecdsa.PrivateKey, error) { + return ecdsa.GenerateKey(S256(), rand.Reader) +} + +func SigToPub(hash, sig []byte) *ecdsa.PublicKey { + s := Ecrecover(append(hash, sig...)) + x, y := elliptic.Unmarshal(S256(), s) + + return &ecdsa.PublicKey{S256(), x, y} +} + +func Sign(hash []byte, prv *ecdsa.PrivateKey) (sig []byte, err error) { + sig, err = secp256k1.Sign(hash, prv.D.Bytes()) return } -func Encrypt(pub, message []byte) ([]byte, error) { - x, y := elliptic.Unmarshal(S256(), pub) - epub := &ecdsa.PublicKey{S256(), x, y} - - return ecies.Encrypt(rand.Reader, ecies.ImportECDSAPublic(epub), message, nil, nil) +func Encrypt(pub *ecdsa.PublicKey, message []byte) ([]byte, error) { + return ecies.Encrypt(rand.Reader, ecies.ImportECDSAPublic(pub), message, nil, nil) } -func Decrypt(prv, ct []byte) ([]byte, error) { - key := ecies.ImportECDSA(ToECDSA(prv)) +func Decrypt(prv *ecdsa.PrivateKey, ct []byte) ([]byte, error) { + key := ecies.ImportECDSA(prv) return key.Decrypt(rand.Reader, ct, nil, nil) } diff --git a/crypto/encrypt_decrypt_test.go b/crypto/encrypt_decrypt_test.go index 44bb26f47..850fa94e4 100644 --- a/crypto/encrypt_decrypt_test.go +++ b/crypto/encrypt_decrypt_test.go @@ -9,9 +9,9 @@ import ( ) func TestBox(t *testing.T) { - prv1 := ethutil.Hex2Bytes("4b50fa71f5c3eeb8fdc452224b2395af2fcc3d125e06c32c82e048c0559db03f") - prv2 := ethutil.Hex2Bytes("d0b043b4c5d657670778242d82d68a29d25d7d711127d17b8e299f156dad361a") - pub2 := ethutil.Hex2Bytes("04bd27a63c91fe3233c5777e6d3d7b39204d398c8f92655947eb5a373d46e1688f022a1632d264725cbc7dc43ee1cfebde42fa0a86d08b55d2acfbb5e9b3b48dc5") + prv1 := ToECDSA(ethutil.Hex2Bytes("4b50fa71f5c3eeb8fdc452224b2395af2fcc3d125e06c32c82e048c0559db03f")) + prv2 := ToECDSA(ethutil.Hex2Bytes("d0b043b4c5d657670778242d82d68a29d25d7d711127d17b8e299f156dad361a")) + pub2 := PubToECDSA(ethutil.Hex2Bytes("04bd27a63c91fe3233c5777e6d3d7b39204d398c8f92655947eb5a373d46e1688f022a1632d264725cbc7dc43ee1cfebde42fa0a86d08b55d2acfbb5e9b3b48dc5")) message := []byte("Hello, world.") ct, err := Encrypt(pub2, message) From dda778eda7ad9b94acf14c3c91c1c29e711e170f Mon Sep 17 00:00:00 2001 From: obscuren Date: Wed, 10 Dec 2014 14:17:32 +0100 Subject: [PATCH 30/79] Updated whisper messages to new crypto api + added tests --- whisper/envelope.go | 20 ++++++++++++++++ whisper/main.go | 2 +- whisper/message.go | 18 +++++++++----- whisper/messages_test.go | 51 ++++++++++++++++++++++++++++++++++++++++ whisper/whisper.go | 9 +++---- 5 files changed, 89 insertions(+), 11 deletions(-) create mode 100644 whisper/messages_test.go diff --git a/whisper/envelope.go b/whisper/envelope.go index eb80098ad..359fa1568 100644 --- a/whisper/envelope.go +++ b/whisper/envelope.go @@ -2,7 +2,9 @@ package whisper import ( "bytes" + "crypto/ecdsa" "encoding/binary" + "fmt" "io" "time" @@ -59,6 +61,24 @@ func (self *Envelope) Seal(pow time.Duration) { self.proveWork(pow) } +func (self *Envelope) Open(prv *ecdsa.PrivateKey) (*Message, error) { + data := self.Data + if data[0] > 0 && len(data) < 66 { + return nil, fmt.Errorf("unable to open envelope. First bit set but len(data) < 66") + } + + if data[0] > 0 { + payload, err := crypto.Decrypt(prv, data[66:]) + if err != nil { + return nil, fmt.Errorf("unable to open envelope. Decrypt failed: %v", err) + } + + return NewMessage(payload), nil + } + + return NewMessage(data[1:]), nil +} + func (self *Envelope) proveWork(dura time.Duration) { var bestBit int d := make([]byte, 64) diff --git a/whisper/main.go b/whisper/main.go index 3868f604f..80050d899 100644 --- a/whisper/main.go +++ b/whisper/main.go @@ -19,7 +19,7 @@ func main() { pub, sec := secp256k1.GenerateKeyPair() - whisper := whisper.New(pub, sec) + whisper := whisper.New(sec) srv := p2p.Server{ MaxPeers: 10, diff --git a/whisper/message.go b/whisper/message.go index 408b9f7df..8ce5d880b 100644 --- a/whisper/message.go +++ b/whisper/message.go @@ -1,6 +1,7 @@ package whisper import ( + "crypto/ecdsa" "time" "github.com/ethereum/go-ethereum/crypto" @@ -20,13 +21,17 @@ func (self *Message) hash() []byte { return crypto.Sha3(append([]byte{self.Flags}, self.Payload...)) } -func (self *Message) sign(key []byte) (err error) { +func (self *Message) sign(key *ecdsa.PrivateKey) (err error) { self.Flags = 1 self.Signature, err = crypto.Sign(self.hash(), key) return } -func (self *Message) Encrypt(from, to []byte) (err error) { +func (self *Message) Recover() *ecdsa.PublicKey { + return crypto.SigToPub(self.hash(), self.Signature) +} + +func (self *Message) Encrypt(from *ecdsa.PrivateKey, to *ecdsa.PublicKey) (err error) { err = self.sign(from) if err != nil { return err @@ -45,13 +50,14 @@ func (self *Message) Bytes() []byte { } type Opts struct { - From, To []byte // private(sender), public(receiver) key - Ttl time.Duration - Topics [][]byte + From *ecdsa.PrivateKey + To *ecdsa.PublicKey + Ttl time.Duration + Topics [][]byte } func (self *Message) Seal(pow time.Duration, opts Opts) (*Envelope, error) { - if len(opts.To) > 0 && len(opts.From) > 0 { + if opts.To != nil && opts.From != nil { if err := self.Encrypt(opts.From, opts.To); err != nil { return nil, err } diff --git a/whisper/messages_test.go b/whisper/messages_test.go new file mode 100644 index 000000000..cba103011 --- /dev/null +++ b/whisper/messages_test.go @@ -0,0 +1,51 @@ +package whisper + +import ( + "bytes" + "crypto/elliptic" + "fmt" + "testing" + + "github.com/ethereum/go-ethereum/crypto" +) + +func TestSign(t *testing.T) { + prv, _ := crypto.GenerateKey() + msg := NewMessage([]byte("hello world")) + msg.sign(prv) + + pubKey := msg.Recover() + p1 := elliptic.Marshal(crypto.S256(), prv.PublicKey.X, prv.PublicKey.Y) + p2 := elliptic.Marshal(crypto.S256(), pubKey.X, pubKey.Y) + + if !bytes.Equal(p1, p2) { + t.Error("recovered pub key did not match") + } +} + +func TestMessageEncryptDecrypt(t *testing.T) { + prv1, _ := crypto.GenerateKey() + prv2, _ := crypto.GenerateKey() + + data := []byte("hello world") + msg := NewMessage(data) + envelope, err := msg.Seal(DefaultPow, Opts{ + From: prv1, + To: &prv2.PublicKey, + }) + if err != nil { + fmt.Println(err) + t.FailNow() + } + + msg1, err := envelope.Open(prv2) + if err != nil { + fmt.Println(err) + t.FailNow() + } + + if !bytes.Equal(msg1.Payload, data) { + fmt.Println("encryption error. data did not match") + t.FailNow() + } +} diff --git a/whisper/whisper.go b/whisper/whisper.go index b4e37b959..4d7a2a23e 100644 --- a/whisper/whisper.go +++ b/whisper/whisper.go @@ -2,11 +2,13 @@ package whisper import ( "bytes" + "crypto/ecdsa" "errors" "fmt" "sync" "time" + "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/p2p" "gopkg.in/fatih/set.v0" ) @@ -39,7 +41,7 @@ const ( const DefaultTtl = 50 * time.Second type Whisper struct { - pub, sec []byte + key *ecdsa.PrivateKey protocol p2p.Protocol mmu sync.RWMutex @@ -49,10 +51,9 @@ type Whisper struct { quit chan struct{} } -func New(pub, sec []byte) *Whisper { +func New(sec []byte) *Whisper { whisper := &Whisper{ - pub: pub, - sec: sec, + key: crypto.ToECDSA(sec), messages: make(map[Hash]*Envelope), expiry: make(map[uint32]*set.SetNonTS), quit: make(chan struct{}), From 4082c8b61d1e9cc57d9da9b9da5c36ff84895d74 Mon Sep 17 00:00:00 2001 From: obscuren Date: Wed, 10 Dec 2014 15:29:22 +0100 Subject: [PATCH 31/79] added simple peer server --- cmd/peerserver/main.go | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 cmd/peerserver/main.go diff --git a/cmd/peerserver/main.go b/cmd/peerserver/main.go new file mode 100644 index 000000000..0fa7a9b44 --- /dev/null +++ b/cmd/peerserver/main.go @@ -0,0 +1,40 @@ +package main + +import ( + "crypto/elliptic" + "fmt" + "log" + "net" + "os" + + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/logger" + "github.com/ethereum/go-ethereum/p2p" +) + +func main() { + logger.AddLogSystem(logger.NewStdLogSystem(os.Stdout, log.LstdFlags, logger.InfoLevel)) + key, _ := crypto.GenerateKey() + marshaled := elliptic.Marshal(crypto.S256(), key.PublicKey.X, key.PublicKey.Y) + + srv := p2p.Server{ + MaxPeers: 10, + Identity: p2p.NewSimpleClientIdentity("Ethereum(G)", "0.1", "Peer Server Two", string(marshaled)), + ListenAddr: ":30301", + NAT: p2p.UPNP(), + } + if err := srv.Start(); err != nil { + fmt.Println("could not start server:", err) + os.Exit(1) + } + + // add seed peers + seed, err := net.ResolveTCPAddr("tcp", "poc-7.ethdev.com:30300") + if err != nil { + fmt.Println("couldn't resolve:", err) + os.Exit(1) + } + srv.SuggestPeer(seed.IP, seed.Port, nil) + + select {} +} From 1b98cbbfa4f587107fa15fccde7d22102ea4b1c0 Mon Sep 17 00:00:00 2001 From: obscuren Date: Wed, 10 Dec 2014 16:45:16 +0100 Subject: [PATCH 32/79] Moved pow --- core/block_manager.go | 8 ++-- core/dagger.go | 85 ----------------------------------------- core/simple_pow.go | 1 + core/types/block.go | 3 ++ miner/miner.go | 8 ++-- pow/block.go | 9 +++++ pow/ezp/pow.go | 89 +++++++++++++++++++++++++++++++++++++++++++ pow/pow.go | 8 ++++ 8 files changed, 120 insertions(+), 91 deletions(-) create mode 100644 core/simple_pow.go create mode 100644 pow/block.go create mode 100644 pow/ezp/pow.go create mode 100644 pow/pow.go diff --git a/core/block_manager.go b/core/block_manager.go index 4c1cea35a..6f952f9f8 100644 --- a/core/block_manager.go +++ b/core/block_manager.go @@ -14,6 +14,8 @@ import ( "github.com/ethereum/go-ethereum/ethutil" "github.com/ethereum/go-ethereum/event" "github.com/ethereum/go-ethereum/logger" + "github.com/ethereum/go-ethereum/pow" + "github.com/ethereum/go-ethereum/pow/ezp" "github.com/ethereum/go-ethereum/state" "github.com/ethereum/go-ethereum/wire" ) @@ -55,7 +57,7 @@ type BlockManager struct { // non-persistent key/value memory storage mem map[string]*big.Int // Proof of work used for validating - Pow PoW + Pow pow.PoW // The ethereum manager interface eth EthManager // The managed states @@ -78,7 +80,7 @@ type BlockManager struct { func NewBlockManager(ethereum EthManager) *BlockManager { sm := &BlockManager{ mem: make(map[string]*big.Int), - Pow: &EasyPow{}, + Pow: ezp.New(), eth: ethereum, bc: ethereum.ChainManager(), } @@ -327,7 +329,7 @@ func (sm *BlockManager) ValidateBlock(block, parent *types.Block) error { */ // Verify the nonce of the block. Return an error if it's not valid - if !sm.Pow.Verify(block.HashNoNonce(), block.Difficulty, block.Nonce) { + if !sm.Pow.Verify(block /*block.HashNoNonce(), block.Difficulty, block.Nonce*/) { return ValidationError("Block's nonce is invalid (= %v)", ethutil.Bytes2Hex(block.Nonce)) } diff --git a/core/dagger.go b/core/dagger.go index 8a042b34f..3039d8995 100644 --- a/core/dagger.go +++ b/core/dagger.go @@ -6,8 +6,6 @@ import ( "math/rand" "time" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/ethutil" "github.com/ethereum/go-ethereum/logger" "github.com/obscuren/sha3" @@ -15,89 +13,6 @@ import ( var powlogger = logger.NewLogger("POW") -type PoW interface { - Search(block *types.Block, stop <-chan struct{}) []byte - Verify(hash []byte, diff *big.Int, nonce []byte) bool - GetHashrate() int64 - Turbo(bool) -} - -type EasyPow struct { - hash *big.Int - HashRate int64 - turbo bool -} - -func (pow *EasyPow) GetHashrate() int64 { - return pow.HashRate -} - -func (pow *EasyPow) Turbo(on bool) { - pow.turbo = on -} - -func (pow *EasyPow) Search(block *types.Block, stop <-chan struct{}) []byte { - r := rand.New(rand.NewSource(time.Now().UnixNano())) - hash := block.HashNoNonce() - diff := block.Difficulty - i := int64(0) - start := time.Now().UnixNano() - t := time.Now() - - for { - select { - case <-stop: - powlogger.Infoln("Breaking from mining") - pow.HashRate = 0 - return nil - default: - i++ - - if time.Since(t) > (1 * time.Second) { - elapsed := time.Now().UnixNano() - start - hashes := ((float64(1e9) / float64(elapsed)) * float64(i)) / 1000 - pow.HashRate = int64(hashes) - powlogger.Infoln("Hashing @", pow.HashRate, "khash") - - t = time.Now() - } - - sha := crypto.Sha3(big.NewInt(r.Int63()).Bytes()) - if pow.Verify(hash, diff, sha) { - return sha - } - } - - if !pow.turbo { - time.Sleep(20 * time.Microsecond) - } - } - - return nil -} - -func (pow *EasyPow) Verify(hash []byte, diff *big.Int, nonce []byte) bool { - sha := sha3.NewKeccak256() - - d := append(hash, nonce...) - sha.Write(d) - - verification := new(big.Int).Div(ethutil.BigPow(2, 256), diff) - res := ethutil.U256(ethutil.BigD(sha.Sum(nil))) - - /* - fmt.Printf("hash w/o nonce %x\n", hash) - fmt.Printf("2**256 / %v = %v\n", diff, verification) - fmt.Printf("%v <= %v\n", res, verification) - fmt.Printf("vlen: %d rlen: %d\n", len(verification.Bytes()), len(res.Bytes())) - */ - - return res.Cmp(verification) <= 0 -} - -func (pow *EasyPow) SetHash(hash *big.Int) { -} - type Dagger struct { hash *big.Int xn *big.Int diff --git a/core/simple_pow.go b/core/simple_pow.go new file mode 100644 index 000000000..9a8bc9592 --- /dev/null +++ b/core/simple_pow.go @@ -0,0 +1 @@ +package core diff --git a/core/types/block.go b/core/types/block.go index 55ce1fb9b..0108bd586 100644 --- a/core/types/block.go +++ b/core/types/block.go @@ -411,3 +411,6 @@ func (self *Block) Size() ethutil.StorageSize { func (self *Block) RlpData() interface{} { return self.Value().Val } + +// Implement pow.Block +func (self *Block) N() []byte { return self.Nonce } diff --git a/miner/miner.go b/miner/miner.go index 4f677cbef..82a92cc20 100644 --- a/miner/miner.go +++ b/miner/miner.go @@ -29,6 +29,8 @@ import ( "github.com/ethereum/go-ethereum" "github.com/ethereum/go-ethereum/ethutil" + "github.com/ethereum/go-ethereum/pow" + "github.com/ethereum/go-ethereum/pow/ezp" "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/types" @@ -59,7 +61,7 @@ type Miner struct { localTxs map[int]*LocalTx localTxId int - pow core.PoW + pow pow.PoW quitCh chan struct{} powQuitCh chan struct{} @@ -74,7 +76,7 @@ func New(coinbase []byte, eth *eth.Ethereum) *Miner { return &Miner{ eth: eth, powQuitCh: make(chan struct{}), - pow: &core.EasyPow{}, + pow: ezp.New(), mining: false, localTxs: make(map[int]*LocalTx), MinAcceptedGasPrice: big.NewInt(10000000000000), @@ -82,7 +84,7 @@ func New(coinbase []byte, eth *eth.Ethereum) *Miner { } } -func (self *Miner) GetPow() core.PoW { +func (self *Miner) GetPow() pow.PoW { return self.pow } diff --git a/pow/block.go b/pow/block.go new file mode 100644 index 000000000..4759e19fb --- /dev/null +++ b/pow/block.go @@ -0,0 +1,9 @@ +package pow + +import "math/big" + +type Block interface { + Diff() *big.Int + HashNoNonce() []byte + N() []byte +} diff --git a/pow/ezp/pow.go b/pow/ezp/pow.go new file mode 100644 index 000000000..cdf89950f --- /dev/null +++ b/pow/ezp/pow.go @@ -0,0 +1,89 @@ +package ezp + +import ( + "math/big" + "math/rand" + "time" + + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/ethutil" + "github.com/ethereum/go-ethereum/logger" + "github.com/ethereum/go-ethereum/pow" + "github.com/obscuren/sha3" +) + +var powlogger = logger.NewLogger("POW") + +type EasyPow struct { + hash *big.Int + HashRate int64 + turbo bool +} + +func New() *EasyPow { + return &EasyPow{} +} + +func (pow *EasyPow) GetHashrate() int64 { + return pow.HashRate +} + +func (pow *EasyPow) Turbo(on bool) { + pow.turbo = on +} + +func (pow *EasyPow) Search(block pow.Block, stop <-chan struct{}) []byte { + r := rand.New(rand.NewSource(time.Now().UnixNano())) + hash := block.HashNoNonce() + diff := block.Diff() + i := int64(0) + start := time.Now().UnixNano() + t := time.Now() + + for { + select { + case <-stop: + powlogger.Infoln("Breaking from mining") + pow.HashRate = 0 + return nil + default: + i++ + + if time.Since(t) > (1 * time.Second) { + elapsed := time.Now().UnixNano() - start + hashes := ((float64(1e9) / float64(elapsed)) * float64(i)) / 1000 + pow.HashRate = int64(hashes) + powlogger.Infoln("Hashing @", pow.HashRate, "khash") + + t = time.Now() + } + + sha := crypto.Sha3(big.NewInt(r.Int63()).Bytes()) + if pow.verify(hash, diff, sha) { + return sha + } + } + + if !pow.turbo { + time.Sleep(20 * time.Microsecond) + } + } + + return nil +} + +func (pow *EasyPow) verify(hash []byte, diff *big.Int, nonce []byte) bool { + sha := sha3.NewKeccak256() + + d := append(hash, nonce...) + sha.Write(d) + + verification := new(big.Int).Div(ethutil.BigPow(2, 256), diff) + res := ethutil.U256(ethutil.BigD(sha.Sum(nil))) + + return res.Cmp(verification) <= 0 +} + +func (pow *EasyPow) Verify(block pow.Block) bool { + return pow.verify(block.HashNoNonce(), block.Diff(), block.N()) +} diff --git a/pow/pow.go b/pow/pow.go new file mode 100644 index 000000000..c94ee40ba --- /dev/null +++ b/pow/pow.go @@ -0,0 +1,8 @@ +package pow + +type PoW interface { + Search(block Block, stop <-chan struct{}) []byte + Verify(block Block) bool + GetHashrate() int64 + Turbo(bool) +} From af6afbaa56efa15abe6a03665c6674b0e2f591c8 Mon Sep 17 00:00:00 2001 From: obscuren Date: Wed, 10 Dec 2014 16:48:39 +0100 Subject: [PATCH 33/79] Removed start/stop methods --- core/block_manager.go | 22 ---------------------- ethereum.go | 2 -- 2 files changed, 24 deletions(-) diff --git a/core/block_manager.go b/core/block_manager.go index 6f952f9f8..80b2542b5 100644 --- a/core/block_manager.go +++ b/core/block_manager.go @@ -90,14 +90,6 @@ func NewBlockManager(ethereum EthManager) *BlockManager { return sm } -func (self *BlockManager) Start() { - statelogger.Debugln("Starting block manager") -} - -func (self *BlockManager) Stop() { - statelogger.Debugln("Stopping state manager") -} - func (sm *BlockManager) CurrentState() *state.StateDB { return sm.eth.ChainManager().CurrentBlock.State() } @@ -106,20 +98,6 @@ func (sm *BlockManager) TransState() *state.StateDB { return sm.transState } -func (sm *BlockManager) MiningState() *state.StateDB { - return sm.miningState -} - -func (sm *BlockManager) NewMiningState() *state.StateDB { - sm.miningState = sm.eth.ChainManager().CurrentBlock.State().Copy() - - return sm.miningState -} - -func (sm *BlockManager) ChainManager() *ChainManager { - return sm.bc -} - func (sm *BlockManager) TransitionState(statedb *state.StateDB, parent, block *types.Block) (receipts types.Receipts, err error) { coinbase := statedb.GetOrNewStateObject(block.Coinbase) coinbase.SetGasPool(block.CalcGasLimit(parent)) diff --git a/ethereum.go b/ethereum.go index 94e46b556..e8b1a9500 100644 --- a/ethereum.go +++ b/ethereum.go @@ -393,7 +393,6 @@ func (s *Ethereum) reapDeadPeerHandler() { // Start the ethereum func (s *Ethereum) Start(seed bool) { s.blockPool.Start() - s.blockManager.Start() // Bind to addr and port ln, err := net.Listen("tcp", ":"+s.Port) @@ -517,7 +516,6 @@ func (s *Ethereum) Stop() { s.RpcServer.Stop() } s.txPool.Stop() - s.blockManager.Stop() s.blockPool.Stop() loggerger.Infoln("Server stopped") From 5553e5aaed5c3f4e303b7d6671d2c92a45aa487e Mon Sep 17 00:00:00 2001 From: obscuren Date: Wed, 10 Dec 2014 19:59:12 +0100 Subject: [PATCH 34/79] states moved to chain --- cmd/mist/bindings.go | 2 +- cmd/mist/debugger.go | 4 ++-- cmd/mist/gui.go | 8 ++++---- cmd/mist/ui_lib.go | 2 +- core/block_manager.go | 10 ---------- core/chain_manager.go | 13 +++++++++++++ core/transaction_pool.go | 2 +- javascript/javascript_runtime.go | 2 +- miner/miner.go | 2 +- xeth/pipe.go | 12 ++++++------ xeth/world.go | 2 +- 11 files changed, 31 insertions(+), 28 deletions(-) diff --git a/cmd/mist/bindings.go b/cmd/mist/bindings.go index 6dbcc3f1d..6d2342c87 100644 --- a/cmd/mist/bindings.go +++ b/cmd/mist/bindings.go @@ -103,7 +103,7 @@ func (self *Gui) DumpState(hash, path string) { var stateDump []byte if len(hash) == 0 { - stateDump = self.eth.BlockManager().CurrentState().Dump() + stateDump = self.eth.ChainManager().State().Dump() } else { var block *types.Block if hash[0] == '#' { diff --git a/cmd/mist/debugger.go b/cmd/mist/debugger.go index ca3ff5af2..d7c584eab 100644 --- a/cmd/mist/debugger.go +++ b/cmd/mist/debugger.go @@ -141,8 +141,8 @@ func (self *DebuggerWindow) Debug(valueStr, gasStr, gasPriceStr, scriptStr, data keyPair = self.lib.eth.KeyManager().KeyPair() ) - statedb := self.lib.eth.BlockManager().TransState() - account := self.lib.eth.BlockManager().TransState().GetAccount(keyPair.Address()) + statedb := self.lib.eth.ChainManager().TransState() + account := self.lib.eth.ChainManager().TransState().GetAccount(keyPair.Address()) contract := statedb.NewStateObject([]byte{0}) contract.SetCode(script) contract.SetBalance(value) diff --git a/cmd/mist/gui.go b/cmd/mist/gui.go index 0b03cdc1b..fe066e994 100644 --- a/cmd/mist/gui.go +++ b/cmd/mist/gui.go @@ -401,7 +401,7 @@ func (gui *Gui) update() { generalUpdateTicker := time.NewTicker(500 * time.Millisecond) statsUpdateTicker := time.NewTicker(5 * time.Second) - state := gui.eth.BlockManager().TransState() + state := gui.eth.ChainManager().TransState() gui.win.Root().Call("setWalletValue", fmt.Sprintf("%v", ethutil.CurrencyToString(state.GetAccount(gui.address()).Balance()))) @@ -428,14 +428,14 @@ func (gui *Gui) update() { case core.NewBlockEvent: gui.processBlock(ev.Block, false) if bytes.Compare(ev.Block.Coinbase, gui.address()) == 0 { - gui.setWalletValue(gui.eth.BlockManager().CurrentState().GetAccount(gui.address()).Balance(), nil) + gui.setWalletValue(gui.eth.ChainManager().State().GetBalance(gui.address()), nil) } case core.TxPreEvent: tx := ev.Tx - tstate := gui.eth.BlockManager().TransState() - cstate := gui.eth.BlockManager().CurrentState() + tstate := gui.eth.ChainManager().TransState() + cstate := gui.eth.ChainManager().State() taccount := tstate.GetAccount(gui.address()) caccount := cstate.GetAccount(gui.address()) diff --git a/cmd/mist/ui_lib.go b/cmd/mist/ui_lib.go index 2b5e56646..fdbde50fd 100644 --- a/cmd/mist/ui_lib.go +++ b/cmd/mist/ui_lib.go @@ -200,7 +200,7 @@ func (ui *UiLib) AssetPath(p string) string { func (self *UiLib) StartDbWithContractAndData(contractHash, data string) { dbWindow := NewDebuggerWindow(self) - object := self.eth.BlockManager().CurrentState().GetStateObject(ethutil.Hex2Bytes(contractHash)) + object := self.eth.ChainManager().State().GetStateObject(ethutil.Hex2Bytes(contractHash)) if len(object.Code) > 0 { dbWindow.SetCode("0x" + ethutil.Bytes2Hex(object.Code)) } diff --git a/core/block_manager.go b/core/block_manager.go index 80b2542b5..7227c6f95 100644 --- a/core/block_manager.go +++ b/core/block_manager.go @@ -84,20 +84,10 @@ func NewBlockManager(ethereum EthManager) *BlockManager { eth: ethereum, bc: ethereum.ChainManager(), } - sm.transState = ethereum.ChainManager().CurrentBlock.State().Copy() - sm.miningState = ethereum.ChainManager().CurrentBlock.State().Copy() return sm } -func (sm *BlockManager) CurrentState() *state.StateDB { - return sm.eth.ChainManager().CurrentBlock.State() -} - -func (sm *BlockManager) TransState() *state.StateDB { - return sm.transState -} - func (sm *BlockManager) TransitionState(statedb *state.StateDB, parent, block *types.Block) (receipts types.Receipts, err error) { coinbase := statedb.GetOrNewStateObject(block.Coinbase) coinbase.SetGasPool(block.CalcGasLimit(parent)) diff --git a/core/chain_manager.go b/core/chain_manager.go index 150139def..0322edaa5 100644 --- a/core/chain_manager.go +++ b/core/chain_manager.go @@ -8,6 +8,7 @@ import ( "github.com/ethereum/go-ethereum/ethutil" "github.com/ethereum/go-ethereum/event" "github.com/ethereum/go-ethereum/logger" + "github.com/ethereum/go-ethereum/state" ) var chainlogger = logger.NewLogger("CHAIN") @@ -55,6 +56,8 @@ type ChainManager struct { CurrentBlock *types.Block LastBlockHash []byte + + transState *state.StateDB } func NewChainManager(mux *event.TypeMux) *ChainManager { @@ -64,6 +67,8 @@ func NewChainManager(mux *event.TypeMux) *ChainManager { bc.setLastBlock() + bc.transState = bc.State().Copy() + return bc } @@ -71,6 +76,14 @@ func (self *ChainManager) SetProcessor(proc types.BlockProcessor) { self.processor = proc } +func (self *ChainManager) State() *state.StateDB { + return self.CurrentBlock.State() +} + +func (self *ChainManager) TransState() *state.StateDB { + return self.transState +} + func (bc *ChainManager) setLastBlock() { data, _ := ethutil.Config.Db.Get([]byte("LastBlock")) if len(data) != 0 { diff --git a/core/transaction_pool.go b/core/transaction_pool.go index 1d1f478e4..7166d35e8 100644 --- a/core/transaction_pool.go +++ b/core/transaction_pool.go @@ -116,7 +116,7 @@ func (pool *TxPool) ValidateTransaction(tx *types.Transaction) error { } // Get the sender - sender := pool.Ethereum.BlockManager().CurrentState().GetAccount(tx.Sender()) + sender := pool.Ethereum.ChainManager().State().GetAccount(tx.Sender()) totAmount := new(big.Int).Set(tx.Value) // Make sure there's enough in the sender's account. Having insufficient diff --git a/javascript/javascript_runtime.go b/javascript/javascript_runtime.go index a5b929a34..84d61d405 100644 --- a/javascript/javascript_runtime.go +++ b/javascript/javascript_runtime.go @@ -150,7 +150,7 @@ func (self *JSRE) dump(call otto.FunctionCall) otto.Value { state = block.State() } else { - state = self.ethereum.BlockManager().CurrentState() + state = self.ethereum.ChainManager().State() } v, _ := self.Vm.ToValue(state.Dump()) diff --git a/miner/miner.go b/miner/miner.go index 82a92cc20..dc69dddc0 100644 --- a/miner/miner.go +++ b/miner/miner.go @@ -232,7 +232,7 @@ func (self *Miner) finiliseTxs() types.Transactions { actualSize := len(self.localTxs) // See copy below txs := make(types.Transactions, actualSize+self.eth.TxPool().Size()) - state := self.eth.BlockManager().TransState() + state := self.eth.ChainManager().TransState() // XXX This has to change. Coinbase is, for new, same as key. key := self.eth.KeyManager() for i, ltx := range self.localTxs { diff --git a/xeth/pipe.go b/xeth/pipe.go index 2ca8134ce..a8d8ed999 100644 --- a/xeth/pipe.go +++ b/xeth/pipe.go @@ -22,7 +22,7 @@ type VmVars struct { type XEth struct { obj core.EthManager blockManager *core.BlockManager - blockChain *core.ChainManager + chainManager *core.ChainManager world *World Vm VmVars @@ -32,7 +32,7 @@ func New(obj core.EthManager) *XEth { pipe := &XEth{ obj: obj, blockManager: obj.BlockManager(), - blockChain: obj.ChainManager(), + chainManager: obj.ChainManager(), } pipe.world = NewWorld(pipe) @@ -51,7 +51,7 @@ func (self *XEth) Nonce(addr []byte) uint64 { } func (self *XEth) Block(hash []byte) *types.Block { - return self.blockChain.GetBlock(hash) + return self.chainManager.GetBlock(hash) } func (self *XEth) Storage(addr, storageAddr []byte) *ethutil.Value { @@ -82,7 +82,7 @@ func (self *XEth) Execute(addr []byte, data []byte, value, gas, price *ethutil.V func (self *XEth) ExecuteObject(object *Object, data []byte, value, gas, price *ethutil.Value) ([]byte, error) { var ( initiator = state.NewStateObject(self.obj.KeyManager().KeyPair().Address()) - block = self.blockChain.CurrentBlock + block = self.chainManager.CurrentBlock ) self.Vm.State = self.World().State().Copy() @@ -131,14 +131,14 @@ func (self *XEth) Transact(key *crypto.KeyPair, to []byte, value, gas, price *et tx = types.NewTransactionMessage(hash, value.BigInt(), gas.BigInt(), price.BigInt(), data) } - state := self.blockManager.TransState() + state := self.chainManager.TransState() nonce := state.GetNonce(key.Address()) tx.Nonce = nonce tx.Sign(key.PrivateKey) // Do some pre processing for our "pre" events and hooks - block := self.blockChain.NewBlock(key.Address()) + block := self.chainManager.NewBlock(key.Address()) coinbase := state.GetStateObject(key.Address()) coinbase.SetGasPool(block.GasLimit) self.blockManager.ApplyTransactions(coinbase, state, block, types.Transactions{tx}, true) diff --git a/xeth/world.go b/xeth/world.go index c5c20c224..956ef1e15 100644 --- a/xeth/world.go +++ b/xeth/world.go @@ -23,7 +23,7 @@ func (self *XEth) World() *World { } func (self *World) State() *state.StateDB { - return self.pipe.blockManager.CurrentState() + return self.pipe.chainManager.State() } func (self *World) Get(addr []byte) *Object { From 2b5fcb464262a7bdd766861b513b2a23706f8b13 Mon Sep 17 00:00:00 2001 From: obscuren Date: Wed, 10 Dec 2014 20:26:55 +0100 Subject: [PATCH 35/79] moved interfaces --- core/block_manager.go | 23 ++++++++--------------- core/chain_manager.go | 2 ++ 2 files changed, 10 insertions(+), 15 deletions(-) diff --git a/core/block_manager.go b/core/block_manager.go index 7227c6f95..f6c73bc2c 100644 --- a/core/block_manager.go +++ b/core/block_manager.go @@ -60,14 +60,6 @@ type BlockManager struct { Pow pow.PoW // The ethereum manager interface eth EthManager - // The managed states - // Transiently state. The trans state isn't ever saved, validated and - // it could be used for setting account nonces without effecting - // the main states. - transState *state.StateDB - // Mining state. The mining state is used purely and solely by the mining - // operation. - miningState *state.StateDB // The last attempted block is mainly used for debugging purposes // This does not have to be a valid block and will be set during @@ -75,14 +67,17 @@ type BlockManager struct { lastAttemptedBlock *types.Block events event.Subscription + + eventMux *event.TypeMux } func NewBlockManager(ethereum EthManager) *BlockManager { sm := &BlockManager{ - mem: make(map[string]*big.Int), - Pow: ezp.New(), - eth: ethereum, - bc: ethereum.ChainManager(), + mem: make(map[string]*big.Int), + Pow: ezp.New(), + eth: ethereum, + bc: ethereum.ChainManager(), + eventMux: ethereum.EventMux(), } return sm @@ -151,7 +146,7 @@ done: // Notify all subscribers if !transientProcess { - go self.eth.EventMux().Post(TxPostEvent{tx}) + go self.eventMux.Post(TxPostEvent{tx}) } receipts = append(receipts, receipt) @@ -245,8 +240,6 @@ func (sm *BlockManager) ProcessWithParent(block, parent *types.Block) (td *big.I chainlogger.Infof("Processed block #%d (%x...)\n", block.Number, block.Hash()[0:4]) - sm.transState = state.Copy() - sm.eth.TxPool().RemoveSet(block.Transactions()) return td, messages, nil diff --git a/core/chain_manager.go b/core/chain_manager.go index 0322edaa5..edf50e715 100644 --- a/core/chain_manager.go +++ b/core/chain_manager.go @@ -288,6 +288,8 @@ func (self *ChainManager) InsertChain(chain types.Blocks) error { self.SetTotalDifficulty(td) self.insert(block) + self.transState = self.State().Copy() + //sm.eth.TxPool().RemoveSet(block.Transactions()) } self.eventMux.Post(NewBlockEvent{block}) From 0d57ca486a4db9f2488df5f6be47eb9b09df2004 Mon Sep 17 00:00:00 2001 From: obscuren Date: Fri, 12 Dec 2014 11:34:27 +0100 Subject: [PATCH 36/79] Squashed commit of the following: commit 779f25d36c770fcc0bdf135c8baf13be9b0a77b9 Author: CJentzsch Date: Thu Dec 11 22:59:56 2014 +0100 first random test commit 68175386c0606a824686606e992c2544775ef6c9 Author: CJentzsch Date: Thu Dec 11 21:34:50 2014 +0100 update gas prices commit ad322fbb58e87ee5175cfaf4b8f9650675660e08 Author: CJentzsch Date: Mon Dec 8 06:01:17 2014 +0100 Log as array commit f989f42618ffdaeb004c2c99007189b4739c8fad Author: CJentzsch Date: Fri Dec 5 15:12:12 2014 +0100 state log tests commit 4bc65d1129efa36eae3c83fa8f11bb7df9bcaea5 Author: CJentzsch Date: Thu Dec 4 18:18:49 2014 +0100 add calldataload, codecopy, extcodecopy tests commit 12cfae18e3e5250cca9af0932bd4178cf190b794 Author: CJentzsch Date: Thu Dec 4 15:57:56 2014 +0100 add calldataload test commit 086caf37011478ec847c7a9071f057832ad3be3e Author: CJentzsch Date: Wed Dec 3 08:31:03 2014 +0100 protocol update (CALLCODE <-> RETURN), topics in log are arrays not sets commit e6c92673b9cee6146a89e0eb28894620fe5ac035 Author: CJentzsch Date: Mon Dec 1 21:14:08 2014 +0100 update state tests with logs commit 4089b809fb9b5daea24ab88ad3e3e3947b3ff6d7 Author: CJentzsch Date: Mon Dec 1 18:19:40 2014 +0100 update gas costs commit cfdca6227716b66bd64b64c6aab864fde69336d3 Merge: 2e5175e f59f89d Author: Christoph Jentzsch Date: Mon Dec 1 18:04:51 2014 +0100 Merge pull request #42 from negedzuregal/fix vmTest fix commit f59f89d876c0e44d88b3daa4f0d26e6764ccbe0b Author: alon muroch Date: Mon Dec 1 16:18:12 2014 +0100 vmEnvironmentalInfoTest CALLDATACOPY, CODECOPY, EXTCODECOPY fix commit 68da13fe3e2efe85898e8a4ffeb99e2a8f8c103d Author: alon muroch Date: Mon Dec 1 11:10:57 2014 +0100 vmArithmeticTest exp fix commit 2e5175e818d817cda4607f9e731632393e2eb93e Author: ethers Date: Sun Nov 30 19:55:51 2014 +0100 add vmLogTest commit b5b9408e641031ded31a87792c4ec613c8afabbf Author: Heiko Heiko Date: Sun Nov 30 16:27:27 2014 +0100 updated genesis to new header w/o min_gas_price commit 8e69fbfa98d95116734f2349f6d90fbd479b694a Author: ethers Date: Fri Nov 21 17:42:05 2014 -0800 add special tests commit 90f4f942e68f38e833a727214d5810be3f8f6cf5 Author: ethers Date: Thu Nov 20 19:01:09 2014 -0800 typo commit c5e5228e0d47ec237ef6a28e696dda47a4a3a85e Author: Christoph Jentzsch Date: Thu Nov 20 17:04:06 2014 +0100 Removed log,post,out,gas,callcreates if exception occured commit 9c0232a2b995bd608f5f541e6f607d373797641d Author: Christoph Jentzsch Date: Wed Nov 19 18:19:05 2014 +0100 MakeMoney test commit 3ba0007e868e9cfc802443d6f5d42ba35a4209cb Author: Christoph Jentzsch Date: Wed Nov 19 16:23:04 2014 +0100 Added log sections in all vmtests + log tests commit d84be4fe07bb240c1ae56f63580e0e4655611e62 Merge: c8497ab 76d2542 Author: Christoph Jentzsch Date: Wed Nov 19 10:00:24 2014 +0100 Merge remote-tracking branch 'origin/develop' into develop commit c8497ab25724bb6aed40fcd0462f3789380848a1 Author: Christoph Jentzsch Date: Wed Nov 19 10:00:02 2014 +0100 new push32 test and renaming commit 76d25420e153e18c667aa4991dcacf12e8f4fb5c Author: ethers Date: Mon Nov 17 18:59:30 2014 -0800 adding test commit 0be275e757744de496a80525ad8aa153def89fd3 Merge: 1d42d1d d90868c Author: Christoph Jentzsch Date: Mon Nov 17 22:47:34 2014 +0100 Merge remote-tracking branch 'origin/develop' into develop commit 1d42d1d7c620fb3e6d0e284697d5041226567af9 Author: Christoph Jentzsch Date: Mon Nov 17 22:46:51 2014 +0100 fix ecrecover2 commit d90868c3070624bc38668a0f3ceef3e3806d9f00 Merge: 1f38c8c 6dbcf6b Author: Christoph Jentzsch Date: Mon Nov 17 20:26:59 2014 +0100 Merge pull request #39 from wanderer/develop added test for max call depth on creation commit 6dbcf6b0d6bb68ceaa743e18a52ac815f495d408 Author: wanderer Date: Mon Nov 17 14:06:43 2014 -0500 spelling fix commit 6fc07a7f81408308e56db105afcad191f81c43bc Author: wanderer Date: Sat Nov 15 21:39:16 2014 -0500 added test for max call depth on creation commit 1f38c8c0a2e306fa95e8332c03a02e72fe26f9be Merge: 279b284 cd85ca1 Author: martin becze Date: Fri Nov 14 20:10:21 2014 -0500 Merge pull request #38 from wanderer/develop updated test 'jeff' in trietest.json commit cd85ca17edd314b3744c46573f1d5093e9be2db3 Author: martin becze Date: Fri Nov 14 19:59:34 2014 -0500 Update trietest.json commit 279b284c0d03737360ae36ce2c0da06d70e91c2c Merge: 89675a7 6cae937 Author: martin becze Date: Fri Nov 14 17:43:49 2014 -0500 Merge pull request #37 from wanderer/develop Update trietest.json commit 6cae937e5eee1c904b636440653b6157359c0963 Author: martin becze Date: Fri Nov 14 17:20:03 2014 -0500 Update trietest.json 'emptyValues' should have the same root as 'puppy' commit 89675a71537e6a386f97a9190db40276b388d692 Merge: f1de1cc 32f0c47 Author: Christoph Jentzsch Date: Thu Nov 13 23:17:49 2014 +0100 Merge remote-tracking branch 'origin/develop' into develop commit f1de1cc97a556adad8a4a864267150c39bef4d85 Author: Christoph Jentzsch Date: Thu Nov 13 23:17:13 2014 +0100 Fix CallRecursiveBomb2 commit 32f0c47c6801974c210c3b93792105a9183f9e7b Merge: ab50e76 3da90d0 Author: martin becze Date: Thu Nov 13 15:26:49 2014 -0500 Merge pull request #36 from wanderer/develop converted back to arrary format commit ab50e766521ca31febe21677909a665043937488 Merge: d06b792 78f1e4a Author: Christoph Jentzsch Date: Thu Nov 13 07:52:35 2014 +0100 Merge pull request #35 from ethers/delOld rename tests since they are valid opcodes that exist commit 3da90d01f6f9e79190ebcd3a6513f481eacbbae2 Author: wanderer Date: Wed Nov 12 22:22:47 2014 -0500 converted back to arrary format commit 78f1e4a9452566f5645a7f5ade6aad79901d5f98 Author: ethers Date: Wed Nov 12 19:11:06 2014 -0800 rename tests since they are valid opcodes that exist commit d06b792cd0c80d48aa206dd9126b515e4fb1d606 Author: Christoph Jentzsch Date: Wed Nov 12 07:00:17 2014 +0100 minor change in CallSha256_1_nonzeroValue test commit d434ecdcc37af4bb53058a43884df8085c5efe73 Author: Christoph Jentzsch Date: Wed Nov 12 06:56:31 2014 +0100 Added CallSha256_1_nonzeroValue test commit 2c06f34cc00e6c41dc0c68d3e99825731e0603ab Author: Christoph Jentzsch Date: Tue Nov 11 18:10:26 2014 +0100 Store return value of call to precompiled contracts commit 4b0c3b29ae5b8807d7d244340a625c6144320df0 Author: Christoph Jentzsch Date: Tue Nov 11 17:51:14 2014 +0100 Fix gas cost for OOG calls commit 63bcca7604dce4f912776f4e2e9954ceca02dfcf Author: Heiko Heiko Date: Tue Nov 11 08:59:19 2014 +0100 fix: genesis test commit 6e0310c1ea7b0f8af7a337df93b3b83591a6e647 Merge: 30c266c 2927763 Author: Christoph Jentzsch Date: Tue Nov 11 08:34:36 2014 +0100 Merge remote-tracking branch 'origin/develop' into develop commit 30c266caff8c253438e542a81501a313c3c06eaf Author: Christoph Jentzsch Date: Tue Nov 11 08:33:59 2014 +0100 jump to position outside code stops execution commit 2927763d68df91c16a4a463a3fbb91a2e67e22e9 Author: ethers Date: Mon Nov 10 14:10:22 2014 -0800 RandomTests were removed commit a0fa91b2b82c2a4b97e08d7e9b32abc1188d0ce0 Merge: 6092484 fcba866 Author: Christoph Jentzsch Date: Mon Nov 10 22:22:05 2014 +0100 Merge branch 'develop' of https://github.com/ethereum/tests into develop commit 60924843f07f394c8e95782ab52d56ef27d5e642 Author: Christoph Jentzsch Date: Mon Nov 10 22:21:37 2014 +0100 Unintended Exceptions work like OOG commit fcba86672193d6bd19ab2104432348eff3f353f2 Author: ethers Date: Thu Nov 6 14:19:59 2014 -0800 add StateTests commit a441074ba4b057e2918735f7427841b92aa3c16e Author: Christoph Jentzsch Date: Thu Nov 6 17:54:36 2014 +0100 Updated precompiled contracts test commit 0afa72c82be2f4996d1662dfbf9e019c5267c6b1 Author: Christoph Jentzsch Date: Thu Nov 6 15:27:45 2014 +0100 Added precompiledContracts tests commit 6be83dd5a185048cfdb8ec29659f14abaeab0c42 Author: Christoph Jentzsch Date: Thu Nov 6 13:31:34 2014 +0100 Update gas cost for PoC7 commit c18b8ab2d3462e813b731e525afc9ea414d8d136 Merge: 66c2e1f 9a93258 Author: Christoph Jentzsch Date: Thu Nov 6 09:19:53 2014 +0100 Merge remote-tracking branch 'origin/develop' into develop commit 66c2e1f642a7b37d9f3631e4573100b0cdc36cef Author: Christoph Jentzsch Date: Thu Nov 6 09:19:22 2014 +0100 Updated SIGNEXTEND tests commit 9a9325822e756dafce8d7418bd4fda63acf84d2d Author: ethers Date: Wed Nov 5 16:20:26 2014 -0800 part of 9b4e768 - Delete vmNamecoin.json commit e229374f467452bf82fd0cc86b18f224dabfadfa Merge: 189527e 9b4e768 Author: Christoph Jentzsch Date: Wed Nov 5 20:59:49 2014 +0100 Merge remote-tracking branch 'origin/develop' into develop commit 189527e563a6e7a39654a9544a2b0d873be7176f Author: Christoph Jentzsch Date: Wed Nov 5 20:59:20 2014 +0100 added dynamic jump out of code commit 9b4e7689951e50c7de3bd945784b92242ed8fd63 Author: Christoph Jentzsch Date: Wed Nov 5 20:41:54 2014 +0100 Delete vmNamecoin.json commit 4669b5694b9dc7bdf9e6f527323dff612b65634d Merge: a567fed aaba185 Author: Christoph Jentzsch Date: Wed Nov 5 15:00:12 2014 +0100 Merge remote-tracking branch 'origin/develop' into develop commit a567fedaa7f8ff8904bd90447fc4b68685bf2af9 Author: Christoph Jentzsch Date: Wed Nov 5 14:59:08 2014 +0100 added state systemOperationsTest commit aaba185ceb0e4c37151134f3e1ded9714d6b7685 Merge: 79d7cbf fa782ae Author: ethers Date: Tue Nov 4 12:15:40 2014 -0800 Merge pull request #32 from ethers/indexjs updates needed per restructure commit fa782aed93934eb51347d08facea838bb4262b1b Author: ethers Date: Tue Nov 4 11:28:56 2014 -0800 updates needed per restructure commit 79d7cbfc4a9cf3d70ae01dea8ee76c770af33211 Merge: 9120274 1c1ba8d Author: Christoph Jentzsch Date: Tue Nov 4 13:32:11 2014 +0100 Merge remote-tracking branch 'origin/develop' into develop commit 9120274a46d696cda6d595b2ec5acc2947eb2b46 Author: Christoph Jentzsch Date: Tue Nov 4 13:31:27 2014 +0100 Update tests to latest protocol changes (PoC7) commit 1c1ba8d161817b391ea296391ad3ede3e71c0aa1 Merge: 014d370 3aebe53 Author: Christoph Jentzsch Date: Tue Nov 4 13:30:52 2014 +0100 Merge pull request #31 from CJentzsch/develop Restructered tests in folders in accordance to test suites commit 3aebe532e536eb6f6766ccac456c07023ab822e1 Author: Christoph Jentzsch Date: Mon Nov 3 13:58:21 2014 +0100 Updated vmNamecoin.json to new sstore prices commit 8a0be21839cf8bb7d3d80a2b61c8433b5d3a8bfd Author: Christoph Jentzsch Date: Mon Nov 3 13:53:00 2014 +0100 Added example state test commit 83643addbc3d50c6a79611a5d8700aad5fb1df16 Author: Christoph Jentzsch Date: Mon Nov 3 13:36:25 2014 +0100 removed systemoperationstests commit 3930ca3a9a377107d5792b3e7202f79c688f1a67 Author: Christoph Jentzsch Date: Mon Nov 3 13:22:15 2014 +0100 Restructered tests in folders in accordance to test suites commit 014d370b5d5d0a807cc31a2fc3a8c5313ccd7ea4 Author: Christoph Jentzsch Date: Wed Oct 29 21:23:56 2014 +0100 New SIGNEXTEND tets commit 155d449be206f5276f689770006ecbbb203dd6ad Author: Christoph Jentzsch Date: Wed Oct 29 20:59:05 2014 +0100 New tests for BNOT and SIGNEXTEND commit c9eae764b8921a5d6c929b8544cb9acdb920453c Author: Christoph Jentzsch Date: Tue Oct 28 12:58:27 2014 +0100 Update SSTORE gas cost and BNOT instead of NEG commit ad2a75ac58ddcb06316f68d0fdaa8e80828a990c Author: Christoph Jentzsch Date: Thu Oct 23 16:05:49 2014 +0200 Added new recursive bombs commit 834c52af6406b9af429104408ca7bcbc525efe5c Author: Christoph Jentzsch Date: Thu Oct 23 12:01:05 2014 +0200 Changing gas cost to zero at stackunderflow commit c73a8a89d23cbdaf80875667437d57c3ee32f08a Author: Jeffrey Wilcke Date: Wed Oct 22 13:04:45 2014 +0200 Reverted back to original value. commit b9a8c924227996ef281d44ccfcc72c7618027f91 Author: martin becze Date: Tue Oct 21 17:02:52 2014 -0400 fix spelling error commit b48ae74af441c00cdce487416be448b0df3d4323 Author: Christoph Jentzsch Date: Tue Oct 21 17:26:26 2014 +0200 Added failing random tests commit bee0a4100c69cabfa361e36831ec0f64187188f3 Merge: 5050d20 b315da6 Author: Christoph Jentzsch Date: Tue Oct 21 17:15:05 2014 +0200 Merge remote-tracking branch 'origin/master' into develop commit 5050d20b4d0321e3e4ea2f118781c7bb96a3d7b5 Merge: 7516685 ba35362 Author: Christoph Jentzsch Date: Mon Oct 20 20:18:20 2014 +0200 Merge pull request #26 from wanderer/develop Add a package.json for node.js commit ba35362876caa03b11c7ce777d959b99accbcfb0 Author: wanderer Date: Sun Oct 19 23:59:47 2014 -0400 turned tests into a node module commit 751668571e390e6bceb515d082222aa31b5e5b14 Author: ethers Date: Thu Oct 16 17:08:20 2014 -0700 json was invalid and missing quotes commit 0e687cee479acfd82861e13d2022ad430fc78d78 Author: Jeffrey Wilcke Date: Thu Oct 16 17:13:24 2014 +0200 Update vmEnvironmentalInfoTest.json commit 78a78e2e6cffb9357f2281070d83bf869ab8b2f4 Author: Christoph Jentzsch Date: Wed Oct 15 14:19:11 2014 +0200 updated genesis_hash commit b315da618b55b581ba8e87f83b2ab5175841392e Merge: 7a7e198 0a76a3a Author: Christoph Jentzsch Date: Tue Oct 14 10:33:26 2014 +0200 Merge pull request #23 from ethers/fix22 numbers should be strings #22 commit 0a76a3a312951e852509e2b378b2b5b3f87135b0 Author: ethers Date: Mon Oct 13 14:45:30 2014 -0700 numbers should be strings #22 commit 1f67385f130422588f92341fe82c2435b160fe84 Author: Christoph Jentzsch Date: Sat Oct 11 13:18:00 2014 +0200 Added some MUL tests commit 7a7e198395f776d0a95d252ddc3b30492b9d3cff Author: Christoph Jentzsch Date: Sat Oct 11 13:11:59 2014 +0200 Added some MUL tests commit 46eb6283ae6c147f7efa910dadc18a504b6725ed Author: Christoph Jentzsch Date: Sat Oct 11 12:18:13 2014 +0200 tested new opcodes (JUMPDEST,CALLCODE) and created test for CALL/CREATE depth commit 8d38d62d1053ed7552211105e26b2e248a3db747 Author: Nick Savers Date: Fri Oct 10 18:09:41 2014 +0200 INVALID stops the operation and doesn't cost gas commit ed6eba7c8ebc0cbb65ccd45b047823f9acc1471b Author: Christoph Jentzsch Date: Wed Oct 8 19:08:48 2014 +0200 Update + ABA recursive bomb which needs maximum recursion limit of 1024 commit 2d72050db1c67d9d6912ce6ade80dbe5685749ff Author: Christoph Jentzsch Date: Wed Oct 8 14:37:18 2014 +0200 Applied recent protocol changes (PoC7) to existin tests commit dfe66cab3fb533003ddaec7250d8fffbf3fbad65 Merge: 4513623 1a67a96 Author: Christoph Jentzsch Date: Wed Oct 8 11:05:51 2014 +0200 Merge remote-tracking branch 'origin/develop' Conflicts: genesishashestest.json commit 1a67a96cff2fba02e57a82d65007cec99dcc313c Merge: a4f5f45 ffd6bc9 Author: vbuterin Date: Tue Oct 7 15:10:23 2014 +0100 Merge pull request #18 from CJentzsch/develop CallToNameRegistratorOutOfGas balance correction commit ffd6bc97adfbc83b6e0c50cdf072fd58f94ace69 Merge: a4f5f45 9779d67 Author: Christoph Jentzsch Date: Tue Oct 7 15:47:34 2014 +0200 Merge remote-tracking branch 'origin/develop' into develop commit 9779d67b8cdf4e99818a5eeadbc3aebd7527b1a9 Author: Christoph Jentzsch Date: Tue Oct 7 15:45:53 2014 +0200 CallToNameRegistratorOutOfGas balance correction Even if execution fails, the value gets transferred. commit a4f5f45228b6f3ebf8ea77c47515149a3df2bc24 Merge: 49a9f47 b6d7cba Author: vbuterin Date: Tue Oct 7 14:13:12 2014 +0100 Merge pull request #17 from CJentzsch/develop Added A calls B calls A contracts commit b6d7cba49914362297c0fcac48d868ffe3bdf06a Merge: 865cb40 49a9f47 Author: Christoph Jentzsch Date: Tue Oct 7 15:02:51 2014 +0200 Merge remote-tracking branch 'upstream/develop' into develop commit 865cb4083d33de2a9115ee39c73aea56b0c34fe8 Author: Christoph Jentzsch Date: Tue Oct 7 15:02:36 2014 +0200 Added A calls B calls A contracts commit 49a9f47aec2dbd6e321298947929b3d0b5abc280 Merge: 3b0ec43 94a493b Author: Jeffrey Wilcke Date: Tue Oct 7 10:56:17 2014 +0200 Merge pull request #16 from CJentzsch/develop corrected amount of used gas for CallToNameRegistratorOutOfGas commit 94a493b0d94163e3de96e1c4bb389ef745756f30 Merge: 72853c4 3b0ec43 Author: Christoph Jentzsch Date: Tue Oct 7 10:51:32 2014 +0200 Merge remote-tracking branch 'upstream/develop' into develop commit 72853c4382fa1b51e384223da34427d3579fe48a Author: Christoph Jentzsch Date: Tue Oct 7 10:51:07 2014 +0200 corrected amount of used gas for CallToNameRegistratorOutOfGas commit 3b0ec436e4c6808f98f1bc5bb5c66b4d2be4b4be Merge: aec3252 222068b Author: vbuterin Date: Tue Oct 7 05:52:43 2014 +0100 Merge pull request #15 from CJentzsch/develop corrected tests and different style for storage commit 222068b9bac6c386e499cb6b0fc2af562fcd309e Merge: c169653 aec3252 Author: Christoph Jentzsch Date: Mon Oct 6 21:17:28 2014 +0200 Merge remote-tracking branch 'upstream/develop' into develop commit c1696531a646309b2b286abb7552eb05f1278cd1 Author: Christoph Jentzsch Date: Mon Oct 6 21:17:09 2014 +0200 corrected tests and different style for storage commit aec3252b8e9f6d37b5cf3dbe0c1678e08929d291 Merge: 25f9fd5 e17a909 Author: vbuterin Date: Mon Oct 6 09:39:46 2014 +0100 Merge pull request #14 from CJentzsch/develop corrected gas limit in vmSystemOperationsTest commit e17a909f70af18fbfc0216c061a663e8778e7d5c Merge: 33fcab5 25f9fd5 Author: Christoph Jentzsch Date: Mon Oct 6 10:31:51 2014 +0200 Merge remote-tracking branch 'upstream/develop' into develop commit 33fcab57273731f449e9504d15c5d22cbe773e2a Author: Christoph Jentzsch Date: Mon Oct 6 10:30:04 2014 +0200 Bug fix, corrected gasLimit in vmSystemOperationsTest commit 25f9fd542a4ab27a5a66668a72b84d4bf7c292e6 Author: Vitalik Buterin Date: Sat Oct 4 15:47:00 2014 -0400 one more vm test commit 2d561a5373faf392e51f8c579c936549db2966d3 Author: Vitalik Buterin Date: Sat Oct 4 15:15:37 2014 -0400 separated out vmtests commit b0c48fa8d69ae02e01931a5675fc58ff9e84aba3 Merge: cb8261a 6cae166 Author: vbuterin Date: Sat Oct 4 17:18:02 2014 +0100 Merge pull request #13 from CJentzsch/develop Added comprehensive EVM test suite. All commands are tested. commit 6cae166f6f1e3f4eaaef6a9036c597b6064b263a Author: Christoph Jentzsch Date: Wed Oct 1 15:34:23 2014 +0200 Delete tmp.json commit 4ff906fbc271ee3aee3eb5db135e591eb187793a Author: Christoph Jentzsch Date: Wed Oct 1 14:06:32 2014 +0200 corrected CALLSTATELESS tests commit 5b3fee6806a69545e572725add73c297e9473eee Author: Christoph Jentzsch Date: Mon Sep 29 13:08:44 2014 +0200 Completed vm tests. Added ADDMOD, MULMOD, POST, CALLSTATELESS commit 9cdd2180833d98cf967929e07cab6638c2e933d0 Author: Christoph Jentzsch Date: Sat Sep 27 21:48:09 2014 +0200 Added IOandFlowOperation-, PushDupSwap- and SystemOperations- tests. Removed empty storage from adresses. commit 28ed968b46590bd8f3e5bb25606e8f83e0ee9b9e Author: Christoph Jentzsch Date: Tue Sep 23 15:49:22 2014 +0200 Added blockInfoTest commit ffbd5a35b597d2908fa0fa37d9b2aeaf30aee155 Author: Christoph Jentzsch Date: Tue Sep 23 15:37:52 2014 +0200 Added environmentalInfo- and sha3- test commit 54c14f1ff3f7ec66d755181be32a13e0404110d9 Author: Christoph Jentzsch Date: Mon Sep 22 13:06:57 2014 +0200 Added bitwise logic operation test commit d0af113aab3991fecbde29933f4a77884fafdf60 Author: Christoph Jentzsch Date: Sat Sep 20 01:42:51 2014 +0200 Added vm arithmetic test commit cb8261a78b56197e421bce5ac2afb7147f5acb45 Author: Jeffrey Wilcke Date: Fri Sep 19 13:15:44 2014 +0200 Update genesishashestest.json commit 4513623da1110e74a236abf0357ad00ff7a38126 Author: Maran Date: Tue Jul 22 12:24:46 2014 +0200 Update keyaddrtest to be valid JSON commit e8cb5c221d4763c8c26ac73f99609b64a595f4b3 Author: Vitalik Buterin Date: Mon Jul 21 23:30:33 2014 -0400 Added next/prev trie test commit 98823c04b30ef0be478c69a11edc3f9f6dff567e Author: Vitalik Buterin Date: Mon Jul 14 02:51:31 2014 -0400 Replaced with deterministic test commit 357eb21e4d5d9d6713ba7c63a76bd597a57d6a0e Author: Vitalik Buterin Date: Sun Jul 13 16:12:56 2014 -0400 Added my own random and namecoin tests (pyethereum) commit 00cd0cce8f0fc0ca8aa2c8ca424954d4932672f2 Author: Gav Wood Date: Sat Jul 12 21:20:04 2014 +0200 Output hex strings. commit ddfa3af45da9d5d81da38745ae23ee93ce390c2b Author: Gav Wood Date: Thu Jul 10 11:28:35 2014 +0100 Everything a string. commit d659f469a9ddcdd144a332da64b826908b0f7872 Author: Gav Wood Date: Thu Jul 10 10:16:25 2014 +0100 Code fixes. commit 5e83ea82283f042df384d7ff20183ba51760d893 Author: Gav Wood Date: Sun Jul 6 16:17:12 2014 +0200 Prettier VM tests. commit a09aae0efe9a1cb94be3e0386532c532262956ec Author: Gav Wood Date: Sun Jul 6 15:46:01 2014 +0200 Fix VM tests. commit ec9a044a17779f0b3814bffa8c058b4091d6d13d Merge: 4bb6461 5e0123f Author: Jeffrey Wilcke Date: Fri Jul 4 15:56:52 2014 +0200 Merge pull request #10 from romanman/patch-1 Update vmtests.json commit 5e0123fbe1573dcf8157995f3ef2f7ce625235a4 Author: romanman Date: Fri Jul 4 10:23:04 2014 +0100 Update vmtests.json commit 2b6da2f5f21b60ebca44a5866888b00f736f92b2 Author: romanman Date: Thu Jul 3 17:45:04 2014 +0100 Update vmtests.json arith testcase updated commit 4bb646117d0034fb459c07e6955b1c9cca802fa9 Merge: bba3898 a33b309 Author: Gav Wood Date: Wed Jul 2 19:43:22 2014 +0200 Merge branch 'develop' of github.com:/ethereum/tests into develop commit bba38980bdfa6ba6fddf0419479ad2405a3cb079 Author: Gav Wood Date: Wed Jul 2 19:43:06 2014 +0200 New tests. commit a33b309d99b36c4c57083d5e77422c3f2bba4bbe Author: Vitalik Buterin Date: Wed Jul 2 10:14:05 2014 -0400 Testing submodules commit 50318217ca875d23147eddfa7cc0326242db90bf Author: Vitalik Buterin Date: Wed Jul 2 10:10:46 2014 -0400 Testing submodules commit 57fa655522fc9696adcc7a6a25b64afd569b0758 Author: Vitalik Buterin Date: Wed Jul 2 10:09:08 2014 -0400 Testing submodules commit ea0eb0a8c82521322bd0359d1c42fc013c433d2e Author: Gav Wood Date: Tue Jul 1 15:19:34 2014 +0200 Latest genesis block. commit 25bb76b69c90ebd44a271d7c180a4a4b86845018 Author: Jeffrey Wilcke Date: Mon Jun 30 13:25:04 2014 +0200 Reset commit 74c6d8424e7d91ccd592c179794bc74e63c0d8c0 Author: Jeffrey Wilcke Date: Mon Jun 30 12:10:06 2014 +0200 Updated wrong test commit 9ea3a60291f2ca68a54198d53e4c40fffb09f6b3 Author: Jeffrey Wilcke Date: Sat Jun 28 18:48:28 2014 +0200 Fixed roots commit 5fc3ac0e925cdfe95632024f574fb945558491b8 Author: Gav Wood Date: Sat Jun 28 18:40:06 2014 +0200 Simple hex test. commit edd3a00c2a8d78867d8bb1557697455729a03027 Author: Gav Wood Date: Sat Jun 28 18:22:18 2014 +0200 Additional test for jeff. Now use the 0x... notation. commit 5021e0dd83bdb8b23ca3dcc72293c6737e8165a8 Author: Gav Wood Date: Fri Jun 27 21:35:26 2014 +0200 VM test framework updated. commit c818d132022c228c5b04ab82871f5971049b0c6d Author: Gav Wood Date: Fri Jun 27 18:18:24 2014 +0200 Removed arrays from Trie tests JSON as per conformance guide and changed vocabulary to match other tests. VM test updates. commit 714770ffb3bb037e2daeaa37a6f4f4066387abe3 Author: Gav Wood Date: Wed Jun 11 11:32:42 2014 +0100 Added Gav's new address. commit 9345bc13d40e6d288c37b650ace1db0c41a89d84 Merge: a2257f3 78576dd Author: Gav Wood Date: Fri May 30 17:50:38 2014 +0200 Merge branch 'master' of github.com:ethereum/tests into develop commit a2257f3471dd4b472bc156be4575ea0f26a8a046 Author: Gav Wood Date: Fri May 30 17:50:18 2014 +0200 VM tests. commit 78576dd3d3d4bf46af19d703affdd42f221e49c9 Author: Heiko Heiko Date: Fri May 30 17:19:09 2014 +0200 changes based on new account structure nonce, balance, storage, code commit 125839e84833ec25e0fdd4fbd545772ba706fe6b Merge: 42e14ec 356a329 Author: Jeffrey Wilcke Date: Thu May 22 09:58:45 2014 +0200 Merge pull request #5 from bkirwi/master Fix invalid JSON (removed trailing comma) and add test names commit 356a3296bc7eeac8b1b65aa843b5856cd786c4cf Author: Ben Kirwin Date: Thu May 22 00:20:48 2014 -0400 Add some arbitrary test names This should now conform to the format specified in the README. commit 42e14ec54fa57c2373625d21e5b47f597c748bf5 Author: Chen Houwu Date: Wed May 21 23:27:40 2014 +0800 revert to correct data commit 4300197a748de29cc5c93fd77f13cae029dad49e Author: Chen Houwu Date: Wed May 21 22:42:23 2014 +0800 fix: wrong sha3 hash because of the wrong rlp hex commit a0d01b1a0b59555e38ea694ff864f2aa25a0d953 Author: Chen Houwu Date: Wed May 21 22:29:53 2014 +0800 fix: wrong rlp hex commit 6bc2fc74054a418e7cfca9cf9144237a5e4fa65f Merge: 66bc366 c31a93c Author: Jeffrey Wilcke Date: Wed May 21 14:11:37 2014 +0200 Merge pull request #4 from ethers/master fix file name that seems to have been a typo commit c31a93c27a9048df92fcf53a2201c6e3737a40fd Author: ethers Date: Tue May 20 15:42:39 2014 -0700 fix file name that seems to have been a typo commit 66bc3665c17e1eec309e5a40b2a9c74273fb639a Author: Heiko Heiko Date: Tue May 20 17:36:35 2014 +0200 fix: represent integers as strings commit ede5499da624d95db1cad63939be56f7bdaa6389 Author: Heiko Heiko Date: Tue May 20 17:21:09 2014 +0200 add: current initial alloc and genesis hashes commit 5131429abbe6d2636064e17b45c99827a904c345 Author: Ben Kirwin Date: Mon May 19 11:18:31 2014 -0400 Delete a comma This should now be parseable as JSON. commit f44a85933110dd3ef362090f512678e99ae80256 Author: Chen Houwu Date: Sun May 18 15:04:42 2014 +0800 add: case when value is long, ensure it's not get rlp encoded as node commit e1ae4ad4495dd13fba6346274971a8871cb32607 Author: Gav Wood Date: Mon May 12 14:40:47 2014 +0100 PoC-5 VM tests. commit 2b6c136dda0d55a0ebd228bff029d97411c9cec6 Author: Vitalik Buterin Date: Sun May 11 21:42:41 2014 -0400 Moved txt to json commit cbccbf977ca7bde15a661a4b453ea062e62ac856 Merge: edbb8d4 45a0974 Author: Vitalik Buterin Date: Thu May 8 21:54:48 2014 -0400 New commit commit edbb8d407ecfbcbb6504659cbd9bdabdb93369e3 Author: Vitalik Buterin Date: Tue May 6 16:53:43 2014 -0400 Removed unneeded test, added new tests commit 45a0974f6f32511119e40a27042fdd571fe47a16 Merge: 15dd8fd 5fd2a98 Author: Gav Wood Date: Sun Apr 27 12:53:47 2014 +0100 Merge pull request #3 from autolycus/develop Fixed formatting and added test cases commit 5fd2a98fcb4f6a648160204d1b20b0f980d55b9d Author: Carl Allendorph Date: Sat Apr 19 13:26:14 2014 -0700 Added some new test cases for the rlp encoding. commit 4ba150954ef8ac72416a35f06fdad9c6d7ed461d Author: Carl Allendorph Date: Sat Apr 19 12:48:42 2014 -0700 Converted spaces to tabs to be compliant with the coding standards defined in cpp-ethereum commit 15dd8fd794a0dc305ef7696d0c2a68e032bc9759 Author: Gav Wood Date: Fri Feb 28 12:54:47 2014 +0000 RLP tests and Trie updates. commit 33f80fef211c2d51162c1856e50448be3d90c214 Author: Gav Wood Date: Fri Feb 28 11:39:35 2014 +0000 Hex encode tests done. commit e1f5e12abb38f8cedb4a589b1347fb01c3da902a Author: Gav Wood Date: Fri Feb 28 11:22:49 2014 +0000 Fix RLP tests. commit f87ce15ad201a6d97e2654e5dc5a3181873d1719 Author: Gav Wood Date: Thu Feb 27 13:28:11 2014 +0000 Fix empty string. commit c006ed4ffd7d00124dbcb44d4e7ca05d6d9ddc12 Author: Gav Wood Date: Mon Feb 24 10:24:39 2014 +0000 Tests fix. commit 510ff563639e71224306d9af0e50a28a9d624b8f Author: Gav Wood Date: Fri Feb 21 18:54:08 2014 +0000 Updated the tests. commit a0ec84383218ea80b4c0b99e09710fae182a2379 Author: Gav Wood Date: Fri Feb 21 18:49:24 2014 +0000 Moved over to new format, but RLP tests still need updating. commit 660cd26f31b3979149950c1fdea995b85a774c1c Author: Gav Wood Date: Fri Feb 21 18:35:51 2014 +0000 More docs. commit 6ad14c1a157e707fd15c87816e8ad872f69790db Author: Gav Wood Date: Fri Feb 21 18:33:39 2014 +0000 Added VM test suite. Added TODO. Renamed old files. commit f91ad7b3857ec9157e7df7f315d942afb7594da0 Author: Vitalik Buterin Date: Wed Jan 8 11:26:58 2014 -0500 update trie algorithm commit 6da295446203889ac5a4a365b397bb45766c9ad8 Merge: cc42246 131c610 Author: Vitalik Buterin Date: Wed Jan 8 08:15:38 2014 -0500 merge commit cc4224675f1f70242f91ee7d2d1295bed6f0dc01 Author: Vitalik Buterin Date: Tue Jan 7 14:35:26 2014 -0500 Updated trie test commit 131c610da66203f708391485aa42fc7a81f01ef7 Merge: 121632b 7613302 Author: vbuterin Date: Wed Jan 1 06:40:54 2014 -0800 Merge pull request #1 from obscuren/master Update trietest.txt commit 7613302b491b3f6406b1ea3c8292adf6d41860d0 Author: obscuren Date: Wed Jan 1 15:25:21 2014 +0100 Update trietest.txt New proposed explanatory format commit 121632bedd1c84a0af847b923aa4b803556722c0 Author: Vitalik Buterin Date: Wed Jan 1 08:26:18 2014 -0500 Added obscure's tests commit ef6c5506c3fcdecf779184ad81d92db9315c2488 Author: Vitalik Buterin Date: Tue Dec 31 19:04:48 2013 -0500 Fixed tests a bit commit 345e4bcfefb45a66a09b1761570405a03c67b9d2 Merge: 2c81698 e4bbea4 Author: Vitalik Buterin Date: Tue Dec 31 15:52:46 2013 -0500 Merge branch 'master' of github.com:ethereum/tests commit 2c81698f31e7e579335a2ab8706f96397a68f018 Author: Vitalik Buterin Date: Mon Dec 30 21:09:40 2013 -0500 Added first three tests commit e4bbea400f7df275faf47ea643256d68495b35aa Author: vbuterin Date: Mon Dec 30 18:09:03 2013 -0800 Initial commit --- core/execution.go | 4 +- .../StateTests/stPreCompiledContracts.json | 42 ++++++++--------- .../StateTests/stSystemOperationsTest.json | 16 +++---- .../files/VMTests/RandomTests/randomTest.json | 46 +++++++++++++++++++ tests/files/VMTests/vmSha3Test.json | 2 +- vm/common.go | 2 +- vm/virtual_machine.go | 1 - vm/vm_debug.go | 19 +++----- 8 files changed, 85 insertions(+), 47 deletions(-) create mode 100644 tests/files/VMTests/RandomTests/randomTest.json diff --git a/core/execution.go b/core/execution.go index 5176f7351..a464abc66 100644 --- a/core/execution.go +++ b/core/execution.go @@ -32,7 +32,7 @@ func (self *Execution) Call(codeAddr []byte, caller vm.ClosureRef) ([]byte, erro return self.exec(code, codeAddr, caller) } -func (self *Execution) exec(code, caddr []byte, caller vm.ClosureRef) (ret []byte, err error) { +func (self *Execution) exec(code, contextAddr []byte, caller vm.ClosureRef) (ret []byte, err error) { env := self.vm.Env() chainlogger.Debugf("pre state %x\n", env.State().Root()) @@ -57,7 +57,7 @@ func (self *Execution) exec(code, caddr []byte, caller vm.ClosureRef) (ret []byt } else { self.object = to // Pre-compiled contracts (address.go) 1, 2 & 3. - naddr := ethutil.BigD(caddr).Uint64() + naddr := ethutil.BigD(contextAddr).Uint64() if p := vm.Precompiled[naddr]; p != nil { if self.Gas.Cmp(p.Gas(len(self.input))) >= 0 { ret = p.Call(self.input) diff --git a/tests/files/StateTests/stPreCompiledContracts.json b/tests/files/StateTests/stPreCompiledContracts.json index 5830ecafc..0f1db1275 100644 --- a/tests/files/StateTests/stPreCompiledContracts.json +++ b/tests/files/StateTests/stPreCompiledContracts.json @@ -726,14 +726,14 @@ } }, "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { - "balance" : "1232", + "balance" : "1182", "code" : "0x", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "999999999999898768", + "balance" : "999999999999898818", "code" : "0x", "nonce" : "1", "storage" : { @@ -796,14 +796,14 @@ } }, "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { - "balance" : "1236", + "balance" : "1286", "code" : "0x", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "999999999999898764", + "balance" : "999999999999898714", "code" : "0x", "nonce" : "1", "storage" : { @@ -866,14 +866,14 @@ } }, "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { - "balance" : "1236", + "balance" : "1286", "code" : "0x", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "999999999999898764", + "balance" : "999999999999898714", "code" : "0x", "nonce" : "1", "storage" : { @@ -1070,19 +1070,18 @@ "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60005260206000620f42406000600060036101f4f1600255600051600055", "nonce" : "0", "storage" : { - "0x" : "0x953450193f7389363135b31dc0f371f22f3947db", - "0x02" : "0x01" + "0x" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } }, "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { - "balance" : "32484", + "balance" : "32684", "code" : "0x", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "999999999999867516", + "balance" : "999999999999867316", "code" : "0x", "nonce" : "1", "storage" : { @@ -1214,14 +1213,14 @@ } }, "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { - "balance" : "1232", + "balance" : "1182", "code" : "0x", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "999999999999898768", + "balance" : "999999999999898818", "code" : "0x", "nonce" : "1", "storage" : { @@ -1284,14 +1283,14 @@ } }, "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { - "balance" : "1232", + "balance" : "1182", "code" : "0x", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "999999999999898768", + "balance" : "999999999999898818", "code" : "0x", "nonce" : "1", "storage" : { @@ -1354,14 +1353,14 @@ } }, "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { - "balance" : "1236", + "balance" : "1286", "code" : "0x", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "999999999999898764", + "balance" : "999999999999898714", "code" : "0x", "nonce" : "1", "storage" : { @@ -1424,14 +1423,14 @@ } }, "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { - "balance" : "1236", + "balance" : "1286", "code" : "0x", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "999999999999898764", + "balance" : "999999999999898714", "code" : "0x", "nonce" : "1", "storage" : { @@ -1628,19 +1627,18 @@ "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60005260206000620f42406000600060026101f4f1600255600051600055", "nonce" : "0", "storage" : { - "0x" : "0x739d5000bbe364e92a2fe28d62c17a6dfd4f32105420c30b97ec0180300a2dae", - "0x02" : "0x01" + "0x" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } }, "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { - "balance" : "32484", + "balance" : "32684", "code" : "0x", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "999999999999867516", + "balance" : "999999999999867316", "code" : "0x", "nonce" : "1", "storage" : { diff --git a/tests/files/StateTests/stSystemOperationsTest.json b/tests/files/StateTests/stSystemOperationsTest.json index 64915bead..8a7e0e6c3 100644 --- a/tests/files/StateTests/stSystemOperationsTest.json +++ b/tests/files/StateTests/stSystemOperationsTest.json @@ -5144,14 +5144,14 @@ } }, "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { - "balance" : "917", + "balance" : "997", "code" : "0x", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "999999999999899083", + "balance" : "999999999999899003", "code" : "0x", "nonce" : "1", "storage" : { @@ -5388,14 +5388,14 @@ } }, "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { - "balance" : "507", + "balance" : "512", "code" : "0x", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "999999999999899493", + "balance" : "999999999999899488", "code" : "0x", "nonce" : "1", "storage" : { @@ -5449,14 +5449,14 @@ } }, "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { - "balance" : "507", + "balance" : "517", "code" : "0x", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "999999999999899493", + "balance" : "999999999999899483", "code" : "0x", "nonce" : "1", "storage" : { @@ -5510,14 +5510,14 @@ } }, "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { - "balance" : "508", + "balance" : "673", "code" : "0x", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "999999999999899492", + "balance" : "999999999999899327", "code" : "0x", "nonce" : "1", "storage" : { diff --git a/tests/files/VMTests/RandomTests/randomTest.json b/tests/files/VMTests/RandomTests/randomTest.json new file mode 100644 index 000000000..dad2ee4a2 --- /dev/null +++ b/tests/files/VMTests/RandomTests/randomTest.json @@ -0,0 +1,46 @@ +{ + "randomVMtest" : { + "callcreates" : [ + ], + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : "1", + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "exec" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "code" : "0x675545", + "data" : "0x", + "gas" : "10000", + "gasPrice" : "100000000000000", + "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "value" : "1000000000000000000" + }, + "gas" : "9999", + "logs" : [ + ], + "out" : "0x", + "post" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x675545", + "nonce" : "0", + "storage" : { + } + } + }, + "pre" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x675545", + "nonce" : "0", + "storage" : { + } + } + } + } +} \ No newline at end of file diff --git a/tests/files/VMTests/vmSha3Test.json b/tests/files/VMTests/vmSha3Test.json index bd430ec9d..b9e6b46a1 100644 --- a/tests/files/VMTests/vmSha3Test.json +++ b/tests/files/VMTests/vmSha3Test.json @@ -20,7 +20,7 @@ "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, - "gas" : "99999999677", + "gas" : "99999999687", "logs" : [ ], "out" : "0x", diff --git a/vm/common.go b/vm/common.go index 5fd512687..592d44ccd 100644 --- a/vm/common.go +++ b/vm/common.go @@ -20,7 +20,7 @@ const ( var ( GasStep = big.NewInt(1) - GasSha = big.NewInt(20) + GasSha = big.NewInt(10) GasSLoad = big.NewInt(20) GasSStore = big.NewInt(100) GasSStoreRefund = big.NewInt(100) diff --git a/vm/virtual_machine.go b/vm/virtual_machine.go index 5738075fb..3b6f98ab2 100644 --- a/vm/virtual_machine.go +++ b/vm/virtual_machine.go @@ -5,7 +5,6 @@ import "math/big" type VirtualMachine interface { Env() Environment Run(me, caller ClosureRef, code []byte, value, gas, price *big.Int, data []byte) ([]byte, error) - Depth() int Printf(string, ...interface{}) VirtualMachine Endl() VirtualMachine } diff --git a/vm/vm_debug.go b/vm/vm_debug.go index 5b7258cc5..e9139ae19 100644 --- a/vm/vm_debug.go +++ b/vm/vm_debug.go @@ -25,8 +25,6 @@ type DebugVm struct { Fn string Recoverable bool - - depth int } func NewDebugVm(env Environment) *DebugVm { @@ -116,7 +114,7 @@ func (self *DebugVm) Run(me, caller ClosureRef, code []byte, value, gas, price * return closure.Return(nil), nil } - vmlogger.Debugf("(%d) %x gas: %v (d) %x\n", self.depth, closure.Address(), closure.Gas, callData) + vmlogger.Debugf("(%d) %x gas: %v (d) %x\n", self.env.Depth(), closure.Address(), closure.Gas, callData) for { prevStep = step @@ -867,14 +865,16 @@ func (self *DebugVm) Run(me, caller ClosureRef, code []byte, value, gas, price * // Get the arguments from the memory args := mem.Get(inOffset.Int64(), inSize.Int64()) - var executeAddr []byte + var ( + ret []byte + err error + ) if op == CALLCODE { - executeAddr = closure.Address() + ret, err = self.env.CallCode(closure, addr.Bytes(), args, gas, price, value) } else { - executeAddr = addr.Bytes() + ret, err = self.env.Call(closure, addr.Bytes(), args, gas, price, value) } - ret, err := self.env.Call(closure, executeAddr, args, gas, price, value) if err != nil { stack.Push(ethutil.BigFalse) @@ -914,7 +914,6 @@ func (self *DebugVm) Run(me, caller ClosureRef, code []byte, value, gas, price * default: vmlogger.Debugf("(pc) %-3v Invalid opcode %x\n", pc, op) - //panic(fmt.Sprintf("Invalid opcode %x", op)) closure.ReturnGas(big.NewInt(1), nil) return closure.Return(nil), fmt.Errorf("Invalid opcode %x", op) @@ -963,7 +962,3 @@ func (self *DebugVm) Endl() VirtualMachine { func (self *DebugVm) Env() Environment { return self.env } - -func (self *DebugVm) Depth() int { - return self.depth -} From 9423401d73562b2a55398559a9d21af75210d955 Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Tue, 9 Dec 2014 13:39:56 +0100 Subject: [PATCH 37/79] p2p: fix decoding of disconnect reason (fixes #200) --- p2p/protocol.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/p2p/protocol.go b/p2p/protocol.go index 28eab87cd..5af586f13 100644 --- a/p2p/protocol.go +++ b/p2p/protocol.go @@ -154,11 +154,11 @@ func (bp *baseProtocol) handle(rw MsgReadWriter) error { return newPeerError(errProtocolBreach, "extra handshake received") case discMsg: - var reason DiscReason + var reason [1]DiscReason if err := msg.Decode(&reason); err != nil { return err } - bp.peer.Disconnect(reason) + bp.peer.Disconnect(reason[0]) return nil case pingMsg: From e28c60caf9a31669451124a9add2b9036bec1e73 Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Fri, 12 Dec 2014 11:38:42 +0100 Subject: [PATCH 38/79] p2p: improve and test eofSignal --- p2p/peer.go | 17 ++++++++++----- p2p/peer_test.go | 56 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+), 5 deletions(-) diff --git a/p2p/peer.go b/p2p/peer.go index 893ba86d7..86c4d7ab5 100644 --- a/p2p/peer.go +++ b/p2p/peer.go @@ -300,7 +300,7 @@ func (p *Peer) dispatch(msg Msg, protoDone chan struct{}) (wait bool, err error) proto.in <- msg } else { wait = true - pr := &eofSignal{msg.Payload, protoDone} + pr := &eofSignal{msg.Payload, int64(msg.Size), protoDone} msg.Payload = pr proto.in <- msg } @@ -438,18 +438,25 @@ func (rw *proto) ReadMsg() (Msg, error) { return msg, nil } -// eofSignal wraps a reader with eof signaling. -// the eof channel is closed when the wrapped reader -// reaches EOF. +// eofSignal wraps a reader with eof signaling. the eof channel is +// closed when the wrapped reader returns an error or when count bytes +// have been read. +// type eofSignal struct { wrapped io.Reader + count int64 eof chan<- struct{} } +// note: when using eofSignal to detect whether a message payload +// has been read, Read might not be called for zero sized messages. + func (r *eofSignal) Read(buf []byte) (int, error) { n, err := r.wrapped.Read(buf) - if err != nil { + r.count -= int64(n) + if (err != nil || r.count <= 0) && r.eof != nil { r.eof <- struct{}{} // tell Peer that msg has been consumed + r.eof = nil } return n, err } diff --git a/p2p/peer_test.go b/p2p/peer_test.go index d9640292f..f7759786e 100644 --- a/p2p/peer_test.go +++ b/p2p/peer_test.go @@ -4,6 +4,7 @@ import ( "bufio" "bytes" "encoding/hex" + "io" "io/ioutil" "net" "reflect" @@ -237,3 +238,58 @@ func TestNewPeer(t *testing.T) { // Should not hang. p.Disconnect(DiscAlreadyConnected) } + +func TestEOFSignal(t *testing.T) { + rb := make([]byte, 10) + + // empty reader + eof := make(chan struct{}, 1) + sig := &eofSignal{new(bytes.Buffer), 0, eof} + if n, err := sig.Read(rb); n != 0 || err != io.EOF { + t.Errorf("Read returned unexpected values: (%v, %v)", n, err) + } + select { + case <-eof: + default: + t.Error("EOF chan not signaled") + } + + // count before error + eof = make(chan struct{}, 1) + sig = &eofSignal{bytes.NewBufferString("aaaaaaaa"), 4, eof} + if n, err := sig.Read(rb); n != 8 || err != nil { + t.Errorf("Read returned unexpected values: (%v, %v)", n, err) + } + select { + case <-eof: + default: + t.Error("EOF chan not signaled") + } + + // error before count + eof = make(chan struct{}, 1) + sig = &eofSignal{bytes.NewBufferString("aaaa"), 999, eof} + if n, err := sig.Read(rb); n != 4 || err != nil { + t.Errorf("Read returned unexpected values: (%v, %v)", n, err) + } + if n, err := sig.Read(rb); n != 0 || err != io.EOF { + t.Errorf("Read returned unexpected values: (%v, %v)", n, err) + } + select { + case <-eof: + default: + t.Error("EOF chan not signaled") + } + + // no signal if neither occurs + eof = make(chan struct{}, 1) + sig = &eofSignal{bytes.NewBufferString("aaaaaaaaaaaaaaaaaaaaa"), 999, eof} + if n, err := sig.Read(rb); n != 10 || err != nil { + t.Errorf("Read returned unexpected values: (%v, %v)", n, err) + } + select { + case <-eof: + t.Error("unexpected EOF signal") + default: + } +} From 05fd1dafe2c90d2acec4c2ea8619d8f656934a77 Mon Sep 17 00:00:00 2001 From: obscuren Date: Fri, 12 Dec 2014 13:26:01 +0100 Subject: [PATCH 39/79] additional log --- vm/common.go | 2 +- vm/vm_debug.go | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/vm/common.go b/vm/common.go index 592d44ccd..3d6d377ca 100644 --- a/vm/common.go +++ b/vm/common.go @@ -48,7 +48,7 @@ var ( S256 = ethutil.S256 ) -const MaxCallDepth = 1025 +const MaxCallDepth = 1024 func calcMemSize(off, l *big.Int) *big.Int { if l.Cmp(ethutil.Big0) == 0 { diff --git a/vm/vm_debug.go b/vm/vm_debug.go index e9139ae19..8af1979b1 100644 --- a/vm/vm_debug.go +++ b/vm/vm_debug.go @@ -49,8 +49,7 @@ func (self *DebugVm) Run(me, caller ClosureRef, code []byte, value, gas, price * closure := NewClosure(msg, caller, me, code, gas, price) if self.env.Depth() == MaxCallDepth { - closure.UseGas(gas) - + //closure.UseGas(gas) return closure.Return(nil), DepthError{} } @@ -885,7 +884,7 @@ func (self *DebugVm) Run(me, caller ClosureRef, code []byte, value, gas, price * mem.Set(retOffset.Uint64(), retSize.Uint64(), ret) } - self.Printf("resume %x", closure.Address()) + self.Printf("resume %x (%v)", closure.Address(), closure.Gas) // Debug hook if self.Dbg != nil { From 25cf0c440c5659c27474bc7b87aebcdcca1e4f48 Mon Sep 17 00:00:00 2001 From: obscuren Date: Fri, 12 Dec 2014 15:25:21 +0100 Subject: [PATCH 40/79] Accidentally changed max depth during testing & committed --- vm/common.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vm/common.go b/vm/common.go index 3d6d377ca..592d44ccd 100644 --- a/vm/common.go +++ b/vm/common.go @@ -48,7 +48,7 @@ var ( S256 = ethutil.S256 ) -const MaxCallDepth = 1024 +const MaxCallDepth = 1025 func calcMemSize(off, l *big.Int) *big.Int { if l.Cmp(ethutil.Big0) == 0 { From 9e1689df9cdb5e0043a7e3ed104d9aa77fe44229 Mon Sep 17 00:00:00 2001 From: obscuren Date: Fri, 12 Dec 2014 21:42:21 +0100 Subject: [PATCH 41/79] Generic filter interface --- filter/filter.go | 70 ++++++++++++++++++++++++++++++++++++++++ filter/filter_test.go | 34 +++++++++++++++++++ filter/generic_filter.go | 22 +++++++++++++ 3 files changed, 126 insertions(+) create mode 100644 filter/filter.go create mode 100644 filter/filter_test.go create mode 100644 filter/generic_filter.go diff --git a/filter/filter.go b/filter/filter.go new file mode 100644 index 000000000..9817d5782 --- /dev/null +++ b/filter/filter.go @@ -0,0 +1,70 @@ +package filter + +import "reflect" + +type Filter interface { + Compare(Filter) bool + Trigger(data interface{}) +} + +type FilterEvent struct { + filter Filter + data interface{} +} + +type Filters struct { + id int + watchers map[int]Filter + ch chan FilterEvent + + quit chan struct{} +} + +func New() *Filters { + return &Filters{ + ch: make(chan FilterEvent), + watchers: make(map[int]Filter), + quit: make(chan struct{}), + } +} + +func (self *Filters) Start() { + go self.loop() +} + +func (self *Filters) Stop() { + close(self.quit) +} + +func (self *Filters) Notify(filter Filter, data interface{}) { + self.ch <- FilterEvent{filter, data} +} + +func (self *Filters) Install(watcher Filter) int { + self.watchers[self.id] = watcher + self.id++ + + return self.id - 1 +} + +func (self *Filters) Uninstall(id int) { + delete(self.watchers, id) +} + +func (self *Filters) loop() { +out: + for { + select { + case <-self.quit: + break out + case event := <-self.ch: + for _, watcher := range self.watchers { + if reflect.TypeOf(watcher) == reflect.TypeOf(event.filter) { + if watcher.Compare(event.filter) { + watcher.Trigger(event.data) + } + } + } + } + } +} diff --git a/filter/filter_test.go b/filter/filter_test.go new file mode 100644 index 000000000..815deb63a --- /dev/null +++ b/filter/filter_test.go @@ -0,0 +1,34 @@ +package filter + +import "testing" + +func TestFilters(t *testing.T) { + var success bool + var failure bool + + fm := New() + fm.Start() + fm.Install(Generic{ + Str1: "hello", + Fn: func(data interface{}) { + success = data.(bool) + }, + }) + fm.Install(Generic{ + Str1: "hello1", + Str2: "hello", + Fn: func(data interface{}) { + failure = true + }, + }) + fm.Notify(Generic{Str1: "hello"}, true) + fm.Stop() + + if !success { + t.Error("expected 'hello' to be posted") + } + + if failure { + t.Error("hello1 was triggered") + } +} diff --git a/filter/generic_filter.go b/filter/generic_filter.go new file mode 100644 index 000000000..b04b4801e --- /dev/null +++ b/filter/generic_filter.go @@ -0,0 +1,22 @@ +package filter + +type Generic struct { + Str1, Str2, Str3 string + + Fn func(data interface{}) +} + +func (self Generic) Compare(f Filter) bool { + filter := f.(Generic) + if (len(self.Str1) == 0 || filter.Str1 == self.Str1) && + (len(self.Str2) == 0 || filter.Str2 == self.Str2) && + (len(self.Str3) == 0 || filter.Str3 == self.Str3) { + return true + } + + return false +} + +func (self Generic) Trigger(data interface{}) { + self.Fn(data) +} From ed1538248f2e7a44680d22a052a234a31b736624 Mon Sep 17 00:00:00 2001 From: obscuren Date: Fri, 12 Dec 2014 22:19:39 +0100 Subject: [PATCH 42/79] Moved filter to events --- event/filter/filter.go | 70 ++++++++++++++++++++++++++++++++++ event/filter/filter_test.go | 34 +++++++++++++++++ event/filter/generic_filter.go | 22 +++++++++++ 3 files changed, 126 insertions(+) create mode 100644 event/filter/filter.go create mode 100644 event/filter/filter_test.go create mode 100644 event/filter/generic_filter.go diff --git a/event/filter/filter.go b/event/filter/filter.go new file mode 100644 index 000000000..9817d5782 --- /dev/null +++ b/event/filter/filter.go @@ -0,0 +1,70 @@ +package filter + +import "reflect" + +type Filter interface { + Compare(Filter) bool + Trigger(data interface{}) +} + +type FilterEvent struct { + filter Filter + data interface{} +} + +type Filters struct { + id int + watchers map[int]Filter + ch chan FilterEvent + + quit chan struct{} +} + +func New() *Filters { + return &Filters{ + ch: make(chan FilterEvent), + watchers: make(map[int]Filter), + quit: make(chan struct{}), + } +} + +func (self *Filters) Start() { + go self.loop() +} + +func (self *Filters) Stop() { + close(self.quit) +} + +func (self *Filters) Notify(filter Filter, data interface{}) { + self.ch <- FilterEvent{filter, data} +} + +func (self *Filters) Install(watcher Filter) int { + self.watchers[self.id] = watcher + self.id++ + + return self.id - 1 +} + +func (self *Filters) Uninstall(id int) { + delete(self.watchers, id) +} + +func (self *Filters) loop() { +out: + for { + select { + case <-self.quit: + break out + case event := <-self.ch: + for _, watcher := range self.watchers { + if reflect.TypeOf(watcher) == reflect.TypeOf(event.filter) { + if watcher.Compare(event.filter) { + watcher.Trigger(event.data) + } + } + } + } + } +} diff --git a/event/filter/filter_test.go b/event/filter/filter_test.go new file mode 100644 index 000000000..815deb63a --- /dev/null +++ b/event/filter/filter_test.go @@ -0,0 +1,34 @@ +package filter + +import "testing" + +func TestFilters(t *testing.T) { + var success bool + var failure bool + + fm := New() + fm.Start() + fm.Install(Generic{ + Str1: "hello", + Fn: func(data interface{}) { + success = data.(bool) + }, + }) + fm.Install(Generic{ + Str1: "hello1", + Str2: "hello", + Fn: func(data interface{}) { + failure = true + }, + }) + fm.Notify(Generic{Str1: "hello"}, true) + fm.Stop() + + if !success { + t.Error("expected 'hello' to be posted") + } + + if failure { + t.Error("hello1 was triggered") + } +} diff --git a/event/filter/generic_filter.go b/event/filter/generic_filter.go new file mode 100644 index 000000000..b04b4801e --- /dev/null +++ b/event/filter/generic_filter.go @@ -0,0 +1,22 @@ +package filter + +type Generic struct { + Str1, Str2, Str3 string + + Fn func(data interface{}) +} + +func (self Generic) Compare(f Filter) bool { + filter := f.(Generic) + if (len(self.Str1) == 0 || filter.Str1 == self.Str1) && + (len(self.Str2) == 0 || filter.Str2 == self.Str2) && + (len(self.Str3) == 0 || filter.Str3 == self.Str3) { + return true + } + + return false +} + +func (self Generic) Trigger(data interface{}) { + self.Fn(data) +} From a17a1f9208f858601f6660dbd7f1b77dd9a3f3d9 Mon Sep 17 00:00:00 2001 From: obscuren Date: Fri, 12 Dec 2014 22:23:42 +0100 Subject: [PATCH 43/79] Implemented watching using filter package * Added filters / watches * Removed event dep --- whisper/envelope.go | 23 ++++++++------ whisper/filter.go | 10 +++++++ whisper/main.go | 5 ++-- whisper/message.go | 20 ++++++++----- whisper/whisper.go | 66 ++++++++++++++++++++++++++++++++++++----- whisper/whisper_test.go | 47 +++++++++++++++++++++++++++++ 6 files changed, 145 insertions(+), 26 deletions(-) create mode 100644 whisper/filter.go create mode 100644 whisper/whisper_test.go diff --git a/whisper/envelope.go b/whisper/envelope.go index 359fa1568..683e88128 100644 --- a/whisper/envelope.go +++ b/whisper/envelope.go @@ -61,22 +61,27 @@ func (self *Envelope) Seal(pow time.Duration) { self.proveWork(pow) } -func (self *Envelope) Open(prv *ecdsa.PrivateKey) (*Message, error) { +func (self *Envelope) Open(prv *ecdsa.PrivateKey) (msg *Message, err error) { data := self.Data - if data[0] > 0 && len(data) < 66 { - return nil, fmt.Errorf("unable to open envelope. First bit set but len(data) < 66") - } - + var message Message + dataStart := 1 if data[0] > 0 { - payload, err := crypto.Decrypt(prv, data[66:]) + if len(data) < 66 { + return nil, fmt.Errorf("unable to open envelope. First bit set but len(data) < 66") + } + dataStart = 66 + message.Flags = data[0] + message.Signature = data[1:66] + } + message.Payload = data[dataStart:] + if prv != nil { + message.Payload, err = crypto.Decrypt(prv, message.Payload) if err != nil { return nil, fmt.Errorf("unable to open envelope. Decrypt failed: %v", err) } - - return NewMessage(payload), nil } - return NewMessage(data[1:]), nil + return &message, nil } func (self *Envelope) proveWork(dura time.Duration) { diff --git a/whisper/filter.go b/whisper/filter.go new file mode 100644 index 000000000..4315aa556 --- /dev/null +++ b/whisper/filter.go @@ -0,0 +1,10 @@ +package whisper + +import "crypto/ecdsa" + +type Filter struct { + To *ecdsa.PrivateKey + From *ecdsa.PublicKey + Topics [][]byte + Fn func(*Message) +} diff --git a/whisper/main.go b/whisper/main.go index 80050d899..2ee2f3ff1 100644 --- a/whisper/main.go +++ b/whisper/main.go @@ -8,6 +8,7 @@ import ( "net" "os" + "github.com/ethereum/go-ethereum/event" "github.com/ethereum/go-ethereum/logger" "github.com/ethereum/go-ethereum/p2p" "github.com/ethereum/go-ethereum/whisper" @@ -17,9 +18,9 @@ import ( func main() { logger.AddLogSystem(logger.NewStdLogSystem(os.Stdout, log.LstdFlags, logger.InfoLevel)) - pub, sec := secp256k1.GenerateKeyPair() + pub, _ := secp256k1.GenerateKeyPair() - whisper := whisper.New(sec) + whisper := whisper.New(&event.TypeMux{}) srv := p2p.Server{ MaxPeers: 10, diff --git a/whisper/message.go b/whisper/message.go index 8ce5d880b..db0110b4a 100644 --- a/whisper/message.go +++ b/whisper/message.go @@ -28,15 +28,11 @@ func (self *Message) sign(key *ecdsa.PrivateKey) (err error) { } func (self *Message) Recover() *ecdsa.PublicKey { + defer func() { recover() }() // in case of invalid sig return crypto.SigToPub(self.hash(), self.Signature) } -func (self *Message) Encrypt(from *ecdsa.PrivateKey, to *ecdsa.PublicKey) (err error) { - err = self.sign(from) - if err != nil { - return err - } - +func (self *Message) Encrypt(to *ecdsa.PublicKey) (err error) { self.Payload, err = crypto.Encrypt(to, self.Payload) if err != nil { return err @@ -57,8 +53,16 @@ type Opts struct { } func (self *Message) Seal(pow time.Duration, opts Opts) (*Envelope, error) { - if opts.To != nil && opts.From != nil { - if err := self.Encrypt(opts.From, opts.To); err != nil { + if opts.From != nil { + err := self.sign(opts.From) + if err != nil { + return nil, err + } + } + + if opts.To != nil { + err := self.Encrypt(opts.To) + if err != nil { return nil, err } } diff --git a/whisper/whisper.go b/whisper/whisper.go index 4d7a2a23e..356debd1c 100644 --- a/whisper/whisper.go +++ b/whisper/whisper.go @@ -9,6 +9,7 @@ import ( "time" "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/event/filter" "github.com/ethereum/go-ethereum/p2p" "gopkg.in/fatih/set.v0" ) @@ -38,28 +39,38 @@ const ( envelopesMsg = 0x01 ) +type MessageEvent struct { + To *ecdsa.PrivateKey + From *ecdsa.PublicKey + Message *Message +} + const DefaultTtl = 50 * time.Second type Whisper struct { - key *ecdsa.PrivateKey protocol p2p.Protocol + filters *filter.Filters mmu sync.RWMutex messages map[Hash]*Envelope expiry map[uint32]*set.SetNonTS quit chan struct{} + + keys []*ecdsa.PrivateKey } -func New(sec []byte) *Whisper { +func New() *Whisper { whisper := &Whisper{ - key: crypto.ToECDSA(sec), messages: make(map[Hash]*Envelope), + filters: filter.New(), expiry: make(map[uint32]*set.SetNonTS), quit: make(chan struct{}), } + whisper.filters.Start() go whisper.update() + // XXX TODO REMOVE TESTING CODE msg := NewMessage([]byte(fmt.Sprintf("Hello world. This is whisper-go. Incase you're wondering; the time is %v", time.Now()))) envelope, _ := msg.Seal(DefaultPow, Opts{ Ttl: DefaultTtl, @@ -67,6 +78,7 @@ func New(sec []byte) *Whisper { if err := whisper.Send(envelope); err != nil { fmt.Println(err) } + // XXX TODO REMOVE TESTING CODE // p2p whisper sub protocol handler whisper.protocol = p2p.Protocol{ @@ -87,6 +99,35 @@ func (self *Whisper) Send(envelope *Envelope) error { return self.add(envelope) } +func (self *Whisper) NewIdentity() *ecdsa.PrivateKey { + key, err := crypto.GenerateKey() + if err != nil { + panic(err) + } + self.keys = append(self.keys, key) + + return key +} + +func (self *Whisper) HasIdentity(key *ecdsa.PrivateKey) bool { + for _, key := range self.keys { + if key.D.Cmp(key.D) == 0 { + return true + } + } + return false +} + +func (self *Whisper) Watch(opts Filter) int { + return self.filters.Install(filter.Generic{ + Str1: string(crypto.FromECDSA(opts.To)), + Str2: string(crypto.FromECDSAPub(opts.From)), + Fn: func(data interface{}) { + opts.Fn(data.(*Message)) + }, + }) +} + // Main handler for passing whisper messages to whisper peer objects func (self *Whisper) msgHandler(peer *p2p.Peer, ws p2p.MsgReadWriter) error { wpeer := NewPeer(self, peer, ws) @@ -122,7 +163,7 @@ func (self *Whisper) msgHandler(peer *p2p.Peer, ws p2p.MsgReadWriter) error { // takes care of adding envelopes to the messages pool. At this moment no sanity checks are being performed. func (self *Whisper) add(envelope *Envelope) error { if !envelope.valid() { - return errors.New("invalid pow for envelope") + return errors.New("invalid pow provided for envelope") } self.mmu.Lock() @@ -136,11 +177,9 @@ func (self *Whisper) add(envelope *Envelope) error { if !self.expiry[envelope.Expiry].Has(hash) { self.expiry[envelope.Expiry].Add(hash) - // TODO notify listeners (given that we had any ...) + self.postEvent(envelope) } - fmt.Println("add", envelope) - return nil } @@ -189,6 +228,19 @@ func (self *Whisper) envelopes() (envelopes []*Envelope) { return } +func (self *Whisper) postEvent(envelope *Envelope) { + for _, key := range self.keys { + if message, err := envelope.Open(key); err == nil { + // Create a custom filter? + self.filters.Notify(filter.Generic{ + Str1: string(crypto.FromECDSA(key)), Str2: string(crypto.FromECDSAPub(message.Recover())), + }, message) + } else { + fmt.Println(err) + } + } +} + func (self *Whisper) Protocol() p2p.Protocol { return self.protocol } diff --git a/whisper/whisper_test.go b/whisper/whisper_test.go new file mode 100644 index 000000000..107cb8c97 --- /dev/null +++ b/whisper/whisper_test.go @@ -0,0 +1,47 @@ +package whisper + +import ( + "fmt" + "testing" + "time" +) + +func TestKeyManagement(t *testing.T) { + whisper := New() + + key := whisper.NewIdentity() + if !whisper.HasIdentity(key) { + t.Error("expected whisper to have identify") + } +} + +func TestEvent(t *testing.T) { + res := make(chan *Message, 1) + whisper := New() + id := whisper.NewIdentity() + whisper.Watch(Filter{ + To: id, + Fn: func(msg *Message) { + res <- msg + }, + }) + + msg := NewMessage([]byte(fmt.Sprintf("Hello world. This is whisper-go. Incase you're wondering; the time is %v", time.Now()))) + envelope, err := msg.Seal(DefaultPow, Opts{ + Ttl: DefaultTtl, + From: id, + To: &id.PublicKey, + }) + if err != nil { + fmt.Println(err) + t.FailNow() + } + + tick := time.NewTicker(time.Second) + whisper.postEvent(envelope) + select { + case <-res: + case <-tick.C: + t.Error("did not receive message") + } +} From 1c7fd62e5797be0a6fb79459137152e473f66191 Mon Sep 17 00:00:00 2001 From: obscuren Date: Fri, 12 Dec 2014 22:23:52 +0100 Subject: [PATCH 44/79] Moved --- filter/filter.go | 70 ---------------------------------------- filter/filter_test.go | 34 ------------------- filter/generic_filter.go | 22 ------------- 3 files changed, 126 deletions(-) delete mode 100644 filter/filter.go delete mode 100644 filter/filter_test.go delete mode 100644 filter/generic_filter.go diff --git a/filter/filter.go b/filter/filter.go deleted file mode 100644 index 9817d5782..000000000 --- a/filter/filter.go +++ /dev/null @@ -1,70 +0,0 @@ -package filter - -import "reflect" - -type Filter interface { - Compare(Filter) bool - Trigger(data interface{}) -} - -type FilterEvent struct { - filter Filter - data interface{} -} - -type Filters struct { - id int - watchers map[int]Filter - ch chan FilterEvent - - quit chan struct{} -} - -func New() *Filters { - return &Filters{ - ch: make(chan FilterEvent), - watchers: make(map[int]Filter), - quit: make(chan struct{}), - } -} - -func (self *Filters) Start() { - go self.loop() -} - -func (self *Filters) Stop() { - close(self.quit) -} - -func (self *Filters) Notify(filter Filter, data interface{}) { - self.ch <- FilterEvent{filter, data} -} - -func (self *Filters) Install(watcher Filter) int { - self.watchers[self.id] = watcher - self.id++ - - return self.id - 1 -} - -func (self *Filters) Uninstall(id int) { - delete(self.watchers, id) -} - -func (self *Filters) loop() { -out: - for { - select { - case <-self.quit: - break out - case event := <-self.ch: - for _, watcher := range self.watchers { - if reflect.TypeOf(watcher) == reflect.TypeOf(event.filter) { - if watcher.Compare(event.filter) { - watcher.Trigger(event.data) - } - } - } - } - } -} diff --git a/filter/filter_test.go b/filter/filter_test.go deleted file mode 100644 index 815deb63a..000000000 --- a/filter/filter_test.go +++ /dev/null @@ -1,34 +0,0 @@ -package filter - -import "testing" - -func TestFilters(t *testing.T) { - var success bool - var failure bool - - fm := New() - fm.Start() - fm.Install(Generic{ - Str1: "hello", - Fn: func(data interface{}) { - success = data.(bool) - }, - }) - fm.Install(Generic{ - Str1: "hello1", - Str2: "hello", - Fn: func(data interface{}) { - failure = true - }, - }) - fm.Notify(Generic{Str1: "hello"}, true) - fm.Stop() - - if !success { - t.Error("expected 'hello' to be posted") - } - - if failure { - t.Error("hello1 was triggered") - } -} diff --git a/filter/generic_filter.go b/filter/generic_filter.go deleted file mode 100644 index b04b4801e..000000000 --- a/filter/generic_filter.go +++ /dev/null @@ -1,22 +0,0 @@ -package filter - -type Generic struct { - Str1, Str2, Str3 string - - Fn func(data interface{}) -} - -func (self Generic) Compare(f Filter) bool { - filter := f.(Generic) - if (len(self.Str1) == 0 || filter.Str1 == self.Str1) && - (len(self.Str2) == 0 || filter.Str2 == self.Str2) && - (len(self.Str3) == 0 || filter.Str3 == self.Str3) { - return true - } - - return false -} - -func (self Generic) Trigger(data interface{}) { - self.Fn(data) -} From 06e76422b5848283fac78b80ca7a392591bc58e4 Mon Sep 17 00:00:00 2001 From: obscuren Date: Fri, 12 Dec 2014 22:24:04 +0100 Subject: [PATCH 45/79] Added length checkes --- crypto/crypto.go | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/crypto/crypto.go b/crypto/crypto.go index d70a5a4db..b8fd78fa2 100644 --- a/crypto/crypto.go +++ b/crypto/crypto.go @@ -56,6 +56,10 @@ func Ecrecover(data []byte) []byte { // New methods using proper ecdsa keys from the stdlib func ToECDSA(prv []byte) *ecdsa.PrivateKey { + if len(prv) == 0 { + return nil + } + priv := new(ecdsa.PrivateKey) priv.PublicKey.Curve = S256() priv.D = ethutil.BigD(prv) @@ -64,14 +68,27 @@ func ToECDSA(prv []byte) *ecdsa.PrivateKey { } func FromECDSA(prv *ecdsa.PrivateKey) []byte { + if prv == nil { + return nil + } return prv.D.Bytes() } -func PubToECDSA(pub []byte) *ecdsa.PublicKey { +func ToECDSAPub(pub []byte) *ecdsa.PublicKey { + if len(pub) == 0 { + return nil + } x, y := elliptic.Unmarshal(S256(), pub) return &ecdsa.PublicKey{S256(), x, y} } +func FromECDSAPub(pub *ecdsa.PublicKey) []byte { + if pub == nil { + return nil + } + return elliptic.Marshal(S256(), pub.X, pub.Y) +} + func GenerateKey() (*ecdsa.PrivateKey, error) { return ecdsa.GenerateKey(S256(), rand.Reader) } From 8577e4171ae594c722bad4e034e2b87f15986be3 Mon Sep 17 00:00:00 2001 From: obscuren Date: Fri, 12 Dec 2014 22:24:27 +0100 Subject: [PATCH 46/79] Panic for "Vm" --- vm/vm.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vm/vm.go b/vm/vm.go index 968ca10fa..22172cb3a 100644 --- a/vm/vm.go +++ b/vm/vm.go @@ -21,7 +21,7 @@ func New(env Environment, typ Type) VirtualMachine { } func (self *Vm) Run(me, caller ClosureRef, code []byte, value, gas, price *big.Int, data []byte) (ret []byte, err error) { - return nil, nil + panic("not implemented") } func (self *Vm) Env() Environment { From bf566a657c2de2ab7818ec14003a33d84302aef3 Mon Sep 17 00:00:00 2001 From: obscuren Date: Fri, 12 Dec 2014 22:24:41 +0100 Subject: [PATCH 47/79] Implemented Qt whisper interface --- ui/qt/qwhisper/whisper.go | 70 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 ui/qt/qwhisper/whisper.go diff --git a/ui/qt/qwhisper/whisper.go b/ui/qt/qwhisper/whisper.go new file mode 100644 index 000000000..fd2b62ac2 --- /dev/null +++ b/ui/qt/qwhisper/whisper.go @@ -0,0 +1,70 @@ +package qwhisper + +import ( + "time" + + "github.com/ethereum/eth-go/ethutil" + "github.com/ethereum/go-ethereum/whisper" +) + +func fromHex(s string) []byte { + if len(s) > 1 { + return ethutil.Hex2Bytes(s[2:]) + } + return nil +} +func toHex(b []byte) string { return "0x" + ethutil.Bytes2Hex(b) } + +type Whisper struct { + *whisper.Whisper +} + +func New(w *whisper.Whisper) *Whisper { + return &Whisper{w} +} + +func (self *Whisper) Post(data string, pow, ttl uint32, to, from string) { + msg := whisper.NewMessage(fromHex(data)) + envelope, err := msg.Seal(time.Duration(pow), whisper.Opts{ + Ttl: time.Duration(ttl), + To: crypto.PubTECDSA(fromHex(to)), + From: crypto.ToECDSA(fromHex(from)), + }) + if err != nil { + // handle error + return + } + + if err := self.Whisper.Send(envolpe); err != nil { + // handle error + return + } +} + +func (self *Whisper) NewIdentity() string { + return toHex(self.Whisper.NewIdentity().D.Bytes()) +} + +func (self *Whisper) HasIdentify(key string) bool { + return self.Whisper.HasIdentity(crypto.ToECDSA(fromHex(key))) +} + +func (self *Whisper) Watch(opts map[string]interface{}) { + filter := filterFromMap(opts) + filter.Fn = func(msg *Message) { + // TODO POST TO QT WINDOW + } + self.Watch(filter) +} + +func filterFromMap(opts map[string]interface{}) whisper.Filter { + var f Filter + if to, ok := opts["to"].(string); ok { + f.To = ToECDSA(fromHex(to)) + } + if from, ok := opts["from"].(string); ok { + f.From = ToECDSAPub(fromHex(from)) + } + + return f +} From aec0c0efcb21db544f0e1aa2e199e70c560d6b43 Mon Sep 17 00:00:00 2001 From: obscuren Date: Fri, 12 Dec 2014 22:25:29 +0100 Subject: [PATCH 48/79] updated tests --- tests/files/StateTests/stRecursiveCreate.json | 13421 +++++++++------- .../StateTests/stSystemOperationsTest.json | 14 +- tests/files/TrieTests/trieanyorder.json | 55 + tests/files/TrieTests/trietest.json | 59 +- 4 files changed, 7294 insertions(+), 6255 deletions(-) create mode 100644 tests/files/TrieTests/trieanyorder.json diff --git a/tests/files/StateTests/stRecursiveCreate.json b/tests/files/StateTests/stRecursiveCreate.json index a9daf2abd..983431484 100644 --- a/tests/files/StateTests/stRecursiveCreate.json +++ b/tests/files/StateTests/stRecursiveCreate.json @@ -1,6194 +1,7231 @@ { - "recursiveCreate": { - "env": { - "currentCoinbase": "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", - "currentDifficulty": "256", - "currentGasLimit": "10000000", - "currentNumber": "0", - "currentTimestamp": 1, - "previousHash": "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" - }, - "out": "0x", - "post": { - "0007318879928543f66b36e58900a870dfa83312": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "001864a1fbee8126e530b9242353d9cb76b043f9": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "002b88d7e31f20b1cec3ae31ef8ae3f017820cf7": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "00ae33b99c24c45ce086aa9a1844fe8ed55ec312": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "00c3d96a0eaddf7975da5c8718c26d65de0de59b": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "00eb1775a16c0965c299f06a0873e11825f915e3": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "00eb67f5e410e28c16861fea7a2ecc1e0011a75f": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "0116be8937cb591d6db17246c91dc3deb1fd0e1e": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "012255fe8647bfe207603a62536ac6ae7a230ca9": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "014337758eb4abf60a8e458a97acbd8b47fa0c31": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "01619145d576c5b3130eeed16f29501f2773c958": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "016cfb16ce1ab4c15eab782e1ac3b0d7f5bb264b": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "0177fee01c15eede3b794e761753c1f6d108b7f3": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "018b456893203c6e3a5661e7328b5a858904cdc1": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "0199dd91369b5ce0467b68d57beaf1d96fdc769a": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "01b26e834122a942828698305a84789ec47c0454": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "02391d38c9b4f03e9225ae5b28230284fa397a09": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "029f9045d1904fe6076c4dbe77bd33290f390714": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "02c577c9c1b247c0ea60b1dd50fa895c086e2f2a": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "02c7efe87a470a521338ba476a0eaf7a535c9c56": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "02fa5c7476f2d423f27ac8afa1e357db95f920fd": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "02fee10ca6c1ed23e651f29c97a310b1b4dad13f": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "033b61ab81ffc5adce16d365458629d9f3482129": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "03b685fb90981f103fde64c3bbb5fd701c84dd0d": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "03f3095f9e46a8ac62005c42aaccbc0fcdc3aa32": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "04110d816c380812a427968ece99b1c963dfbce6": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "04308fa2e7af944dd7008a7edbe5221a52e2bc87": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "0441738f9f0a045afd77a72ef8398475c1111471": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "0462dd089e0519c581654520d17763635011fdff": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "0473710fb4277459429e0c4a862ad3e4b45692e4": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "04929feafa156581a24d8a0bfe8154ffab39fb37": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "04a104904b31f401966da211ef40874d6e97ae46": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "0581dee4d5420c2f6b1614ca62a4d66bcf383d0e": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "059ec3d5a255df8a5b592659ea5fdd963e9bd0c2": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "05e29ccc32df8edacbc5bd6fe19fb4ca02928969": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "0602479ffb0636a1ce0fb57bf7949cc978250d2a": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "060e7bcadd084fcf19db5cc1ea769550bd8f7508": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "065c627bc67fca3636da49c34994b6efb2adaad0": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "06c4341ea63b3431260716e2162ba90abd9628c3": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "0723789d0c7093f6e97c3fdeb1324a75427ca6e8": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "076ad7e168093f590a74f6fdce56b492a23baa2b": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "0801871b468dfdcc2d3bc0c0d01cb6ee02afe581": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "0802fc1dc1a5dec7fcbf1d50f3d8a944099ad72e": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "080e2ae63ad3891bfba9ec5200f4ba383209ecde": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "0891a47ead61f684dc876e12d5261ab614d0fa09": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "08d19f247ca974ee89d4f988cac4becf7a177723": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "08f86cd9e45cd0f821b6088ce2f1b3c0f70dba07": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "095e7baea6a6c7c4c2dfeb977efac326af552d87": { - "balance": "20100000", - "code": "0x60206000600039602060006000f0", - "nonce": "1", - "storage": {} - }, - "098de34931d0d159e2631aee55524c217624d095": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "09957f64c3396f36daa03c68fa6c997eb7903df1": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "09986b78d02ae7c8eaa8b62053a3ee78deba79ab": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "0a1960fde1fc2010660dc9cdc299facac4502363": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "0a517d755cebbf66312b30fff713666a9cb917e0": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "0a9015286f76ca4fbcc33e74e9c414be9774a67c": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "0b4b7f08623d9b3d6514baf529399e4f1c0ad944": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "0b98f3276e76e9982d7f6996878ea5196fda62f1": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "0ba7f30a90b699e3f906bff7599b230890bbd56b": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "0bec2514a2a40586ec75e27442352d1dd2bce537": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "0c0cd995ac9e488544723e3e8e90a5fed98a6958": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "0c1e13b0604290abd900eba3fb6b7560b3401f58": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "0d11b1966fa90191f6927943c476d36fa3a31556": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "0d1e5ab3b0c2d1ad5a562c123b7f01f4145074ce": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "0e0905211a442bb5838d2d6860f4f21e6b9c6593": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "0e639c40606e9329259d2f945f59dbcc6c5c5cfe": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "0e700a2aba22bd639abf05addbb24c53c3f0f3cb": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "0e8dab5716375707d97656230beb5f1445e56309": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "0eca69ecf3068082cff932c044fe39142ab6268b": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "0f065de4c5c4a842f52a30fdf7b0162594df70a3": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "0f0f333b14cae00e0f74e1de336437d5644ae336": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "0f2fc64833681664e54ca74ea756c7233a05dd85": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "0f8f271215cf51a0646c8a60ed626515b3ddb739": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "1039c22c55420b0d7e65e6e6e65798f3f4c1e725": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "104f577c92f14f3684c13eb179b9969c05115604": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "1057c6ef671b124fc14b5641c167c6e6756d8cb8": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "1121c3fb4f490140339dabac59a62dd59a9912de": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "11895349d40ea4683803f8eb7ad1d2355ff906d8": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "11fde66f162bbb0e19d68f0c774c997d0165fa56": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "1209046d7bf46e81d8202422e630719c906653da": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "120e38f3899a4e2f9f848a82c7afee288d14e7a4": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "1236efbead5ada892f61e7e4e59faa143e3bc01a": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "128aabc28c928691ad3415e3c57010c40694cd6e": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "12eed250610e4d59e841381dc46deaea3d9305b1": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "130d08c2381d23796ff403d8f1fbaf204d90e3b8": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "134c36c64db09ad23fde5b43a3a7a92d84dd5300": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "13911c90a6ddef5182a772116c1d9e98f27fb1af": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "141182812579a73e13dd878d8a94bb628143b097": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "1456fa2cf6376b40069504e491e64aa40484fe3f": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "1480213270423eae9d6b0a603541e989998453d1": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "149d393bffe9be2336e7ffd6a109f05318dc798c": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "14a76e43bc292a0e69bace56681c4eb50d8e52d7": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "15146e7f5a3d2db1c655ba9d8eaea6c62ca34496": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "1555dfd05f003c056dc219415443be1a502fdee1": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "157f8c66dd3cae32485b2d68a51c1dd7923bf91e": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "1588c83de3fa7b22bf6aa67a4e91f303b490cbb8": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "1591af76c716952018e52e54c716e8b2226d494b": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "15c4f7ebfc781a41226d61bdc0fcdc98fdd8bf45": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "15e75e648b604b0b8028f7955647eac6bc850088": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "161f83bac94d326e2a8debba84379ab72a14c6d6": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "1622e5aa3015448c3a7560b15a289d9aacc5370e": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "1660ada72b0a07040df8d063f2f3f3fee891f1d0": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "16c5f61453cff59c6b7e2a690cd902b72208427f": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "16cab73035afa73268745a3c2937b551813c4960": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "16f5ee37c60dfd70f8281ac16cda47d665ef8789": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "1756aed6799c904988cc7a1dfabe77fcca058655": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "17c7a85a071c3dee708baeaf56c208752c362e56": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "18500d6a8e3e20ace9aeb507c213b6261b23f5d3": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "1872142d84f7023b181766b790a4487f4012527c": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "18731575d0a6339f6317c2a1b628d8a4c145328e": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "187749fd89567f9519f0d50b4a19ad2600440e3a": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "187dea0407359c9579adbdf1ba9fad4a92fb358b": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "188921ab89b5b8bcbe443676626e6012a1ed7dfb": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "1889f5317912e414fda653c710d2c17b7d5651e2": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "18934934c2f7d8b6b645fcc90460a966df3a716f": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "18e0cdfc5a23465cfb3566091849c044d2210b55": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "1963ac8fc10167891e91b4d3f53e09e0b7c9b55d": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "1a6bbe5380998bea238848b7a5927fa87e7b9fe1": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "1ab2ec9fb4e5d9d8cd15a1ad495ff314b97869c6": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "1ac3dd6a958d88e45c2c55d938dba74fa892084e": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "1b6ec3b2772285abeba8f53839fd96de995c4bd1": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "1b8a6f09f8fc9743b59ddbb2f105034e32262552": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "1bce33a58c2741f74daab60067f759e9fc5f8c40": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "1c2749b3a6c574b21622761bef7274261597ef2e": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "1c32901c93008d3e09928bdf3385f32ecff9500e": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "1c6c53405b0eb8800a527cc5990fe3b259b50a4a": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "1c827d36ec915dae96fdc0b164fb7bc1be9467b6": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "1cd063768378c77cbcb93dab0ba4c345d76bb0fe": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "1cd52bab323ca2180a747d3c8b8405397003feb9": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "1d3289a828d2bb4a86cda52b7772e2d0d508bac9": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "1e1505a86f6b0fb5f7a4500cca953462cde929e4": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "1ea264b74c8f6e50586097e2e7c9a39419fd88de": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "1ec05c9f7c0ececff5088a06157f47f3e9dac9c0": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "1ec26f14651cc567ce691ce83ef09eced6b12a6e": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "1f01dbf8bd02bed14cc0a21831e044faa3f66fca": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "1f1960aa296fd1f00ff131357138001afcd858a9": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "1f323b00b7be1e9c0713b080cadc05f45e5e7ec3": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "1f5cdfaf598bd8002997b576e9ba849636c8431f": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "1f95c6da6a9e0abe74900ec00388094d32d98a42": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "1fce5879444d729719c03b5af6e074b87a49d933": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "1fdfe5402a88f71bfbaf9c65f6df05b8eb6232c1": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "202474905af37a5074cfbc2d2dd0f2f205a099ab": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "2040d98a367ea817f76fcf8574d4df51234eb492": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "208d07e7177b2e975c6b6d0eb3c5566900b87dfc": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "2099c5bdda1d98ce3b99988d768fa9f812a21f24": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "21115fe08f7ec434d4ec27e8dcfdf31a6e50aa09": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "21190aebff29feb773919d8572f8cc825bbf7144": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "21368af8397276e6e4b284fe36f525dd323bd3da": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "22230d8d10e81e01450aa68bdfbee3c20d969de9": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "22affea985c1a1ab7007a55e77e80c54111708be": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "22df73cba33d8fd14fc985fccded670de4041f25": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "22f2f312befc07db595b5d9fcbc4caa7ee8df51c": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "23138c70217200a44c58dceaa4f5ab06470213a4": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "241b46962af48709f1a19739ffdc7bd3f0d2c7ad": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "24248d1242acc87dc331e87f3142951a977a3d2c": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "24ce22b6a7f4227e1e3a6c03c14d07acdb2ec553": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "24cea63a6f0ede9a0fa91907e841ba4174e1cd0c": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "24dd378f51adc67a50e339e8031fe9bd4aafab36": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "253a31b068a402910eb30758704b78c375ea349a": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "2559cea11e9d8fd293253a8ffada7558c9c4db86": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "25c0d5ce71eec198760c001497350ad83df55ea8": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "25f81565c6ac2e22d7e320168222450c2cdf4f6d": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "2600b9122847ee06e201ff6a734fdcfa74b2be73": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "2652f49b5ad98503231b3befe7587c231be8a5e8": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "269f24e1ae86f63876b0504b7b26e20483fa95f8": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "26be5205dce0ce433dca3602886578160e6d52c1": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "277c19a0f1e4f5e4339de4d0223fa254a6c8a5df": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "27b3a0698a207d5ed960cf71b1ee9fc54c229eb4": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "28313061667479bb25119ca3090cd25c4a99a20f": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "284452c049bb65ec77ed7502b19abf699127c21d": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "28cd47ab2e86fe040740206eb31fe193df7cbab4": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "28ce21f7f28c8a546bca1697ada45cd73473465d": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "291cfb4b02976ffde7f1f269a3e7d30940367e55": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "293f982d000532a7861ab122bdc4bbfd26bf9030": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "295882ddd91b2f92c43bad0a51fd0ef7af61e729": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "29799a64a736832cda536d687dd443ef3bc31e57": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "298b8bde7997684bfe4434cf6d24d50ddabb69b2": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "299528bfdcf20ff8e19a7a3fbbdfe98eddc2604c": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "299f80e93d68725830c27cb084265d0e634e4f77": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "29f147c366199719adcb2ed1d528c4f34c10dc03": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "2abef5958c8b283eaeec4557844ff1fe194e6cd3": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba": { - "balance": "465224", - "code": "0x", - "nonce": "0", - "storage": {} - }, - "2b5fbc2f7e76f6281861cb4282effb94d609844d": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "2bab1d9132d47e56f937ef50987cc52c9adddf0b": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "2bb175c167599417f2192d9f926a5c648d17de8f": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "2c4a413bc345da77b2d07a17313b6d89aef2c2c1": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "2c748f96ae0e6e9b01395e8a73dfc351c46658be": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "2ccccc0744051db25927d850055234117778c1fd": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "2cd26944d7baa6d92eee478960d5778375862e85": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "2cf5732f017b0cf1b1f13a1478e10239716bf6b5": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "2d142ccaa1337198d592bc36ce7c5447da73f906": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "2d960addf6048f155cfaac4ad513f46429bb58f1": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "2db5e35091789102bd0019b4ee49bcae42524428": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "2dbc14a87a2b5a8b780e460dbe0083d8260326f4": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "2e070631694c093a9a329ec0b4a1cfa57e20ab77": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "2e574f7a4c8f0e80964604262ef68b3168fd31ef": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "2e83c90e7fa359705ed2138854a83a9145c27a8e": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "2ea29d9016f2b1141475e4c3c62e031c0a908a07": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "2eabf4237f49d4cd44ec256436b99ba41828d36c": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "2ed524088290909f92ade6d5f9d9c24071c26662": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "2f171d1f2cf19f4a458b7dc4db89fa7cd818dda0": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "2f8ac479ce5baade6a63ecadf9599bfb0ecdecde": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "305773e25e157761c9d55cb7d9e24fc1b953a8b9": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "30b37f280d6735ee04239de0963b071f83c13a27": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "30c5bc3861dfc5a70325aca029ab5dcb2d72928f": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "30f51302b4630ea1b8bdcac380bd97d78c8f60d3": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "310782e2f6d97ef0abd4a4ccb75b401a7d348be6": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "311f9efa9544b1c8a8277c52e0f1ca47daec8c00": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "312f80de0869a8fed49c8ba843484411c47dd13e": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "3174a074366bc04bfb7f2a728a725cb01cd575d3": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "317f31be5e04361b11b97ff2d6fc682030d8cd8d": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "317fda8ec45232a8259546a4ca8ebef16338d47b": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "31a87a9e67b2728c14767de26753f205b793c5ac": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "31c640b92c21a1f1465c91070b4b3b4d6854195f": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "31e7dce7c8469a6dc612dd8c0a1242846d31c069": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "3229e332af8eaf358f44aad3a902a6c47f96983e": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "32a48ace80773ad092de1d9bcaa00787353b5fad": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "32de9810bbf442f9209f994556bc9a7f7e6da500": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "32f9418411245a8bc6982ff71436ed2de87e3d96": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "331a1cbbb58594c3636c0e54de517c4a6cedc27b": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "33207da78e5ef3dde6fceab85bee1b5bf717e139": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "333872ba7e8ce9c43e158b12a3d038d06672db7e": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "33b82c3871bc89d9137c62af099a0c4e5911a047": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "33c85ce982d0996ff7313c1387ab93348a6777d7": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "3432c3f9f90cb61e79f39d310bdc6cb8dcb3a49a": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "34c972120d50fbdbb38ba536e4d61bc8f995d19d": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "352e4ddc3153285117254b1cc378d297b7a057b5": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "3539fe0192009fe1a9d35901b0ba951a59348a97": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "36630619f71ccd89ea6fba8b13099d1483187b17": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "3671a99d2a485b30fafa2a65f405b6b03ed32ea9": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "36a9d95fe0c701c65370560445c6a80b4e13c8d9": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "37609ce3799a1b75ea6090da3d014d59e5e7851c": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "379ef6dde2bc54ced45146d4907639ee7cf1c8eb": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "37f998764813b136ddf5a754f34063fd03065e36": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "37fa399a749c121f8a15ce77e3d9f9bec8020d7a": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "3820c20f3f8ee1b164dab460b05a979640a41369": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "38450559e7ed9b72c80aa00855b942f9bac1b281": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "38479ce52243f1a8b358515a084fb41533a723fd": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "3867a470ae1d99ccc7af287ed95ea4da4fd49e52": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "387b1112283308ce33f63062a7531e6fe0f3af16": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "38813e8d77b07f357888ea1a7805ebf52c59189b": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "38ae3c2e0c1fa2eaec3648a2829fa362b5e01351": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "38c622aecb7e84ad4fcfc327ae9a1a17e2dbc36e": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "38fe3b47fed5fa6d060bde66598bf5a773b831eb": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "3917f5ac4614ab7d126adf2f5b1d578f2b91c370": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "39457953215cb93e68bc5b351d63a8b7fd16031e": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "39d9b351db53d59af4907116d594ebba910474f2": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "39ea196ad4678ac786f9ff4ba12edbb364cd1baf": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "39ed2d94ee4aae100b111c773d4f3b78bd4e9291": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "3a9d3ead70f9c3cdf9a64b25b5c1bf765fe09fec": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "3b7465c98051ca273d8909857047d5dc5b022af7": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "3b7d7653d3a7c2712d08bd29668163cb775c74a9": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "3bfd62743dab66288fe0b993d893a41d2dc3fbba": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "3c4a4ef39f21e45a8f56e5c8bf8bacfaba78a777": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "3c7c94fe8e900964a9885a19e09a4ab80213c5c3": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "3d082c9477c05d23447d1682257a9d0ac1f948be": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "3d64e9c7cee7c3d41cfbeed851fff8642bd0200b": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "3d7b61ce014d1cb84465f1f908a6a940fd991b39": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "3da1b91d461c3220510e60c0c5b87be635068740": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "3dd6e0baadd05402f490e3030ef1970d884a1caf": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "3debce965330c2da68edb1cdd3ac380d5ce67b10": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "3dff39a90e67e86536dcc8b4dbfac04da831e0b5": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "3e0506e272fb9d9369627282cd76a40e4046ee84": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "3e1b0d3f5819f63c9621ba4d4af623a7b89b99ae": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "3e3069deb6f503bb8bf155eb2f89801140831f5b": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "3e85699a24243e147ec809e30761d92c0d21392a": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "3edca986feba79717853d9b91595ae61d953736e": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "3ef5e42a0012b430169dae579f8dac0f6ef5dc38": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "3f5bf6c71c4fae1a91c1cca72b539dd83762a716": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "3f8bd9d9410af417dcc6969b64096380e1a6d0b3": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "3fabe5e3c3a59fd322cb638dc5295d1e94cbcea3": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "3fde19fb418799c0e1744b322314c17a863a0c9c": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "401f65fb53496c7746dc6477f6f9d67246965d51": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "40652c9cf91678111a21c62d7206ffbca3d47c9b": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "40e0cce7d94ab21453c5576f30a598cf9fa80e1a": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "411456908355aa037314aa920e8afef3632503fa": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "41493b8488a0ae34cade12733e8df93a87f3ec7f": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "41eeae22551bd18167a31036b363bdcec89a7d9c": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "42bbb8e2c7347e29f3a679e4cc9d1ca75319fbd3": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "42ea619ae1a90979837ad2137458d991ea0613be": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "42f56890357c304762f1c57171cef30f044ea09b": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "42f8c6079f5658fc8dc5629b63684f278acb7648": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "43b0edac3c2c58f16fa2380089d841c420a14236": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "43ec9b975f37266d0ff7f044581db559fb9376c4": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "444e8af4b323407d02a7f96c209b712a65c6aba9": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "44b329f4eb8ebaa00d731472964de821f8e53a26": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "44d13c51fb706efb7394346b00debea9ea46e9f3": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "44ed3a04032bf3585faf1dfedb9806eeb8345809": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "44f344790e299b22484749266ea59bbcd58e4b0e": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "4582048e819b7d55b3c6f47e46ef8dd8fdd12038": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "45eb1861d0701efb338468964c2495db8e7e3411": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "462cf0e5071404ef569338a6f0a5b113d64a11a2": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "46aa4a5c336dbecbabd4cdfef3b9fa65a8a12a15": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "479544e8b67a7e82120d3c5d7869b4c55f4a0de3": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "483940025f2d36cb32e93ed80caa41f15487ee7f": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "48e958f074c27f1d190e69ef8c01f86931b278f9": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "49a01a2696857efac9ba53c2705ea4ffdeb30419": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "49fc4b5136601d856188898008375b9c1bf5897e": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "4a0ec2620d55cefe3e80960f83ebc81219ebabcb": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "4a1edf2110e4ff29c69b835bdd375ac88525dde6": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "4a466c64765157e1a9dee46e1a26d95ac2664c4f": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "4a635e63aadc395c1801c73640f256250d209b25": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "4aebaa9fbdb040e8037e78fc37785f33dc3cafec": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "4af174d239e86ee19d40026eae04486804602061": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "4b2c0c38418eb142d686d124ac5fcb363b061fd7": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "4b414d48f3871bc957751d5895c96f090b509bbb": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "4b6dcb9105adc3ccc34c6c180e9e2212c1789975": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "4b8558347f669cd9b50f70cb501cdbf05f93b575": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "4bb5fc5d686cfb132c177aee8ef426e5de98cc6b": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "4bdd7615ee906a0c88233acc5816b4fdb4656dfa": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "4c0cfb86a402c70e6b110a1237d10c7fc7fe9cd5": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "4cada4d5773385e68f4ff1efd1a23d75dbf1e61c": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "4cd33b31663c159fbd73cbb32f616eb46f7b18a2": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "4d47d935a3a4a4618c67f337a0075d26d9c1f852": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "4d4ad735b52df9e88fbebebac2de1ede991f9994": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "4d7a1e5009218cf5176a313f6922c3ab01d4970d": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "4d92228ffbe5ea89389a34a7086e4420d61eb70b": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "4dbe6269722a6063d594dfb65eba1f2a10488963": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "4e36ffe7590f8dd7fa9c4c03cba3120674814abc": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "4e4ad0ada6b3beffa2436bef1f6a8054f4476be8": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "4e5cd86dc5f716ebbdf6ef572a369c227986bde4": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "4e76fc5e619a4200846eecdd5545b39499debb10": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "4e86f346747b828937501ebfda05b2b8fa16f87a": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "4ebc77b7203cce293550d92b2b5587621cf53219": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "4ec27065c52d294799b93700dcee6e32778f1b18": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "4ec674e8eb6b890cbb7df926def8fbbb2a6bba70": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "4f14a61b9f2f99e50b719f1345e76339f7618202": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "4f36659fa632310b6ec438dea4085b522a2dd077": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "4f5af8eccb582ad30e2702d07577479599461c54": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "4f5c55986b93d742d196235aa7329df2c8ae5562": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "4f86da4fecade6017d7f15e30d8320446306870a": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "4fc34bdd654289653ffc904f86ab2f17bad8431d": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "4fe8f4ad85487cfe365ca212848f7c970c21e135": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "5038bd4d6b5b31100c52c85ae3294d525596836c": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "504ba70fca5091ea426c964ac631082e4ad51672": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "50aada85d21c462d9c2803fd3c22beacc61f496b": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "50dc3dab5836e25872ec87bb2bb30ab57a35fb0c": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "511b33319d0f7df487e07c4f5d149b27cecace46": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "5154569b5138f7c1b77d4434860a92ff5707e047": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "51a578dc2949f3881535733a5b1a7b5bd308215f": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "51cc4a0bffdbdd8313ed94ebfd5524e8200f4876": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "51fd18c9ab9bbb67c27373e8ad754e253e09dbdd": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "5216a59dcffc6105f9b58a0b397baad604c0dfb6": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "52b774b5fab1f557024bd4a7cbec4cd014b81557": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "52b90967c04ab8adba7c6908b04eabf2c00bcf82": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "52f1ef4cc038ef92d0c1f9e7afd3dd3cd0c25b38": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "52ff6062b4e65231065d5579f870b7f1472a5853": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "533069310b9741214f30aeec58be9d19f40161fe": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "533a4a1adbae2d561beb729c53e46251ab3a407c": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "534d2d9ab80a99d598de600ac2843f751e8bef3a": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "54819bf1efa86437d2f38b4211bdd5229247d9b5": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "54a1706bea8f61e354b5296afa5a9f488f88ba0d": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "54d1de66a65ecf30d79037a8c8af99c633113516": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "55010017736ad7e8e14327cf0230ba4c6bab0450": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "5503d35e96e76e02db22c51fd7fd3d5c0667c885": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "552e158ca0fbd97f7b3c6208ad3f956a67c8df78": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "5555d9bb89b76deec0c8c0cf37dcbf4b9e3449d1": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "558fb0163d7794abf1b241aa4728390028291ce7": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "559bf1337f14e89aee38a9859ec9bf8035e8f6c1": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "560d5f4c8933c5ca0c2c1b4f3e8b22958c9d7cda": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "569e42b9cd8d79ee5c5ea9c68ba948b7b4d8d84e": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "56cb9d29e9be519d3fc1cd21fcae7750aaa8b845": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "570dce0f67e367a085e51a47d6c93891a82d452b": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "57cb48688d626a12fd4caee130b11e1b06ebaacb": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "58cbb2379b1fdac0a036bf75bb598e7d4fa232bb": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "59ad59b53c0d9bbdf0ee0912732baa43eacaae99": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "5a18f1d5e443321d54d1dafb3e3b5b6f2899378d": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "5a5e4ae2fd570b079f26dd7f8b9c90456d4b11c8": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "5affb7ff218092cf60bc1ba4b32ea65a32cd6844": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "5b1718e3af89692315a673b5c134361408069b00": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "5b2ed45c5376c8359479e1b48f8c07437ec78336": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "5b4615bc4b0f10948e46f967ca6e64cf91a7753f": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "5b71d8cc27346cf6d64e101aab9c88dfd58d26fc": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "5bcf5f7ba278df5a31f48a5706e69816727a6e9b": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "5bd96b317d4163401c9b1a2271c03b9439e73e6e": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "5bf1ac936d2312daf08e481d85e99151cdfdb9e1": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "5c0ddde0773ca1b8f9b07ecdad9f47f2705640e1": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "5c45b1eefac6061c7713919b34f5dcae9d5cfc7b": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "5c70cf636b26ffc099fba8ddd5093e95ca8e7782": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "5cf45d08c0b55dd9c34cc4cb718c917333f2e9f9": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "5d07bd78606705bb5c62fd390123b4e45f7d74d8": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "5d11f35386d10cfa7121b02056d97dd932659943": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "5d3292b79851f68d3907a550dc1a0b569d603f66": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "5d57e28e16bcf33b37672eeb891b29c481e89120": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "5de8956c0c99e2dc6715201b3a9e1d5fd53b2dd4": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "5e0ea0c533298d20ebcd19482a8b1e1854dda425": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "5e5a0b9c4c36067c8730abecdb29ba97aed877a7": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "5e74c3c0f3bc39154407e9a3c55cde944d1ca04a": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "5e76969932c5d314142b23c555af4625fa6b9343": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "5e89d5dd43fa9fa54381f234d1f7251387a0692c": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "5f1703b93938752face6e4657a90825b77f455da": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "5f3f9c388dc0c9c01a5fd540bf9eb714a47fc5c1": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "5ff4d4daf0a832422c4675a77720abbfb5afbba8": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "5ff4ef866c3ad4102444d020c1d21c3d35a119eb": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "60a2db26238d52510209c569dca17c1f41c9a544": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "61144e43a08b3852bcd531d13f0485743bd835a3": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "6123d3be4335107712685be2d575958b17501067": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "61306db8b4ac256266cb379b5f686e25cc117590": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "614037f9a7be1ab2131d485845f297f2d62d569a": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "615a957b818ce70fec123daafe552c482c59c5a8": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "6168c5e3b7d7c870e3e7eb53b152fcb920c8e1eb": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "62123ac69c46a06f7e3644b0dfcfcded535b8727": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "621ada91fe8f65407ac963de8e75d88d4c388cd3": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "624a9bd6345be1a95c7fb509ca4bb77d05138adb": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "629fdbc407b70b57eaa1523ab12c5178e81a5d52": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "62c01474f089b07dae603491675dc5b5748f7049": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "62cde2103198f54d31cdb9e9495fd7e1243c2c27": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "62e75c838a732abab87e1846f361721f03e7d973": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "636b02091904e5b452d19455f484306b8fe62dd6": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "64134c8f0ed52a13bd0a00ff9fc6db6e0832e39e": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "6454029b19b69bcda3ba156684d58283636dea40": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "65e3776618742b90f1d9844c907b276854869abc": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "66e68e1d0f65b4379c2864f5228d98de265c5e30": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "674840a9e918ae6b7560a4ddfb60b96a32636ba4": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "6792d18ead88bff9193e50fa12c02779f2a0f4bd": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "67a66435543da4130940ccc47e3d9d164db65fd1": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "67df3bc5f86456f2bc57f75c99a0389bca7e5850": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "689a40b4f540d145f6dc4ba4079e17f84b650f9c": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "68ec6ebf20b30a31b09c7a35d847da342e24a3c4": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "692a1a4da0b418dd701f5133e2b3c5686015a3df": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "697f8deffc4b33738f1dc02e792b5cb4a37ead06": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "69afd0683057a214d3bb3cc7d438961cf8c8b200": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "69fd2b9233b83e54861436496ad6b9fb28afaf40": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "6a22049b6339e13438521842386a7118d6a1a15b": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "6a31cc57646f3d9ae3b63e1f604dde04d1ba52b7": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "6ac56f1ceee102b85819d789e6b29308eabc373c": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "6ad37e86c8d4b961b0302ebf0a540ae83f3679ec": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "6af2602221d2477af828ddb2c1dec8f70a24abe0": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "6afeffe32a56293f23d655a1d1b2bf31d616c2ea": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "6b0105812868d533882ea4f08bb628e5e9d811db": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "6b5ced188780878d8a72b3e6f02618db2bb97584": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "6b5fe85d1513c1a29fa825a343db7a80558e6de5": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "6b6945d5fd5172355825871803b93e57c5040653": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "6bd29846f9fdbf3efcd3c5f3beff837ecbe9f4cd": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "6bda06aef03a04b8eb3e4c7d1ef001fc806f5f6f": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "6bed38b822d8823a2cb71883522f932cdde95b0a": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "6c14bbac448312636b86fe713185cf7d8ea6f1be": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "6c3bed6efc677ccb136c0d886a6f3fdb375798c1": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "6cc6da179301a7ec4290cc0a5860a42ad188399f": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "6cdf4bc6759fe45be60aae1cb72d3fc2bb7f2d23": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "6d1f3f15f36d76d52d65b1b78a4ac85e91f33d25": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "6d27b8cb6b9af8a56fca98f13033d15f10f66da4": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "6d33e2eaa419844043bc41073bf3a2bc0a6c1b1e": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "6d9834013a85a25df2e3dead1986d753457d7b67": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "6e0a20c94065e338c7715046a320ff4495b4fa84": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "6e24d18a80aeccbace499b6d26b655633c0bee99": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "6e2da6b24262f419933bd63b03d470ba019350e3": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "6e53f8efbbec77187f733cb053a53a28e14ade81": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "6f257471f06ece199232aaaa082d2b1ae7ddb483": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "6f3dda610ec5a3722ff4ab49d1f215dd26bd8ad6": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "6f562b4994dff65756e316febb8d5a5b99e11420": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "6fc7016fa33af287b3b9cacd092c26bd9a054569": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "6ff9622ab3c22e4357e90274d00291c527991d21": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "702433f6bfbd76274ec1bb641c4a0428298487f1": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "711b5163728968ec016a924238f743fa04f2d11f": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "714213a080e1d2988acadbfc5e441df5173f81ba": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "7161527e54370ad8fe44bc83d692b10b9f9b877e": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "71a2fa577619a37c2e2336bb6c20fc1af193860f": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "7213c423e1db8af095bd3cefb15e43c6067635ee": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "723bce7438e7c70d113e954e9aad5dfb4551dbff": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "72969d083705c924922b857922930f2087426ca0": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "729af7294be595a0efd7d891c9e51f89c07950c7": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "7343c0aaebc045465ffebca00e201c1f554c2eea": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "73c85788bca3bc1fb2e9b3056c595a4a7b3d2e46": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "73f9912db6e86599f256f090dffd915a845a9631": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "751c9d6e9b6d91897ab1754b15b72712953de9be": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "7528088649b574b14d14f4b5ba45285eb8a78ffc": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "752e929cfb45fd739923f562b146db315b8cc4ca": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "754144c0c9b9fe7f9a8e40df23f3c315a7e244bc": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "7642513288c9da66960a6f3df0c156a8e1dcb119": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "769277251b9d3f0906a338f156238b159bc126dd": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "76ca5805dcccf57966da8489d1720fb8c5dc4b81": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "76ea1b9309253b5c03bbd6e9fca6591b51fb3785": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "7702eec59b0ee531bef08c14d0e6c89e7e43ebac": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "7797a5c4bb655b5ea51bc966875abb3b19c0d105": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "77d724d278fa787544189c4774f03849be2868ef": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "77f14e248490de6b7afb327c0f013c54ae31d2a6": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "77f263b8c785ec73f9f77dd11ab64fb0089cb164": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "7845e6c6f5d014cabfeffe6d4d9d18c547d00fa7": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "784c21d8eb231135ac99a64dd2ee334b045043ad": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "786102f7205ad86bb77b14a1b80d8b26cbf3562b": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "791812110230af4583a4a6dff7eb425b0b0dfab4": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "79225179187b35144fe9e8505cce2bcff3986ff9": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "795d6e09eedae3febc172169c017fb67aa62efbc": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "799b6226b099fc75d1fc2cf6f833bdfc1fe63e48": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "799dcaea1d20bf1428807757a84d6792798b74cf": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "79cf9a7b86c0a7adb03ecb8967d70413f21b925e": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "79f2d463ce2404b3e77db5dea5cc19d76ac223dc": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "7a315595e01d6e16134063232a01395187c9650e": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "7ab73fe69000d4087d0b9ceedfda0af8c4fe2d2a": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "7ba53872256e6762bbfdbefb1bb80b26f94df9f1": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "7be1a5856ef5951cf1991b57c00f73939c7030f8": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "7bfac062ec8fd11810639cc02f02aa8c61c6cfb8": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "7c26d9c9b73a75f1a468d06bd69e08f4d316845b": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "7c41aaac568600537f36df0e35cb625dfbed75a7": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "7c7d893aa4fba1deebfc9a5a14b27e2ae7f66403": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "7cadcf3f4031ebc2bc85040ea16d1ad26ce1704a": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "7d3b079a8306f7cc89f1b9b23319ec904e3ad853": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "7d4e21638e756b9953576f460037cd702d10211f": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "7d699e5ea61a26a7f677478cc79887e2f27ab345": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "7d8dde5a13af888557ddd5b931dda20ae59e9e23": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "7d8e57afa6550a1be621fb6c083aca311a1e229c": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "7e15566ad3e90f3c4c12c4d7fdb17e12c24da66b": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "7e2a31e29b84cb193202609dbd86ebaf9a83c119": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "7e2bd10d506af5eaada030590c8073495230f37c": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "7e44d26c7ef8dc51a45248573f6a8e5a9f91a0ae": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "7e9f915d9417cd7bc8220546680fa5eeb73a2192": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "7ebf86bf849b6097c8af6dae10c52438538a0711": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "7ee27699bf52e4db7f72b3f2591f48e8ad7972a4": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "7f0506a35713c6a2c68152d15a4bfb1ccaec98a8": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "7f16eb03b09934c61a424e6a1c4649f193d157fb": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "7f3d23738538a34184e3cf16506685cf0884bac5": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "7f57dd2b577f0d5cb1fad7bbb2cf8f07ec0f0199": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "7fe4672c6fd2a05c7a91676e5ae2e75ea197567c": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "8069a4fb09d35f100d18c98d02ec1bfd997bb893": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "80a784f83657ad12a742b94e01c3bbaf3fb2c6bd": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "8135c9c23bfa97243ea79214772816339552f835": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "8142cb33b22222bb9e39a66b53af12c6ca0b5375": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "814a465f554f949e6e2a6878539c705f319c627d": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "81b26e12027f5df776edd5539791e683dc2e57f0": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "81d6578dc3e3c0fb07a8d62f66c1eaf3b97dc2ae": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "8228837a1a7d0ae41b857d852a8dd6b7c6cb3e38": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "82afbc3f6dba388dba71ee35f56ea772a53033a8": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "82d03794122107972c0d075f16754791224b507c": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "833bafb51e8a34c93f3100430fffc5ba61ef95c9": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "83602911153c9c176419a17276ada844bb932527": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "83802f999d793e8985b916465ccf6050195c0167": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "83abf69971313b011ee30466e8f703a460400557": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "83e3e5a16d3b696a0314b30b2534804dd5e11197": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "83ed885c9759d5524052681a5602616a4d565e87": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "8405a655c77ae3ebef4410c924cba9ef22a57f42": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "844301835752f15f39550cdf531e07ccef5d133d": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "8507d90ee605e59469a35fdc78e844c59894e003": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "857109cf04811d5273ec3af3f3d3bb56e93d1dfb": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "8692f270fea1b23b492dea1755f48cdd1dd78534": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "8703df2417e0d7c59d063caa9583cb10a4d20532": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "871986919b8ac4032193739eeae09c66765f0f15": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "8719f47f3dd875955760868a4fb23f761cf7d4ad": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "87946e396d4fd04d02f117adf25ac427895878b3": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "87b02d6f0e02d90fb05adf14ae74570ea8ca6aeb": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "87b27e4b436adde9bf724b4889980331dd038d49": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "87dbe63fcbb0c90d20021f9c01a03e7d94916b3b": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "88a16f4f893665cf06d9ad7a7ede8d9cdf833b7a": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "891c7f214e32206e8f497fdaa7ee419e2e8f3ddd": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "897003bcc0313258e7a3517771982e05e4cfce1f": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "89e81283794cb458b9590002ce69ddba3c976a42": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "89f02008028773d99248943a6bcb14200f4509a0": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "8a05aa8ab787526a0591016c2aee95037b8a478b": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "8a2cab44ea3d5c52c704f060f4088e505791a57e": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "8b0c28ef1527a918fc7dc134ee6c00f069c7073a": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "8b0dfaaf9135721f01f3712572ea9963d70f49c0": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "8bbe1ac3ee5866589a669dd95744af5ee83e1b72": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "8c25b51ae5745b82c7b489b8fd4a9994b9679a0b": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "8c2e2a704d809931e711b89162391f2dba837406": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "8ce9124341c4ca3c690b29f3575f3cb9833c8c3c": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "8cfda5300d7544327e32aca175840f90860305e7": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "8d7912a42951e7201c8854b98a36e4203508c3a2": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "8de072b1fc7f48cb2a42e7ee579a462e50e4cd8c": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "8dffcd74e5b5923512916c6a64b502689cfa65e1": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "8e1320b630d8a411819c16dc0edc2cb77ed8049d": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "8e15b61b6735457672c8d4809e30ca7877e9fabd": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "8e1f5c577cd5a404507687ef379cd1e41c4a9a9e": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "8e4354916a56d367dd99d3eb120e27a1d8ec6e66": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "8efc24fec9b67ce053a55abaaedcbbcc64e97eaf": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "8f55e75b453fbb3071e4454119a33477c6028788": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "8f75ec2d8d77fd6a26f4c01f7b0384bd60418874": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "8faf239455a012d6ef377a83448c8185466f8511": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "8fb5af158980be77e5d137ab6f95000407041099": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "8fb5f5dc4d66ea0233a652230d44299718cb9f9e": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "8ff9fb732fc13f492704a9f47c47db4e877f6dc3": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "90344e80aead27d6b007ee73dd8fd8169f870f51": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "90f8d2eba99d7e50525edae64a61a28526eef894": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "9137343457792227d68316f6ac0bc3518a7702e3": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "91aaa30b2bf342c6bb6a315251ffe5b7e123bfa3": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "91acc7d4c4cc7affac116157a53f5614959485f9": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "91c87b19dcd811fc5efc567a022bca52d5e2e252": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "925cdeaf40df0ac82648432e65481350417fd848": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "92bbf48cf4a124ffff047cad76c82db1a1889803": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "931543d59701f1a123f3850e4c6e4b0ea097ae5a": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "93840036a3c19b1e91ba0ea10f95a5041ef61a3f": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "939023fa69f246b709a97f16c37367e36267828c": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "93a5ddc7d7b2a2bbb7a61086aa6fd0cc9e202b0d": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "93beac08e1b6f1ac32c5ee628bc4356feb5e54ea": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "94602cccae39d50fdc504869eff546d1678f0ae2": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "94bcc8632137dd2d666003e33d1e7c2fdd6e95e4": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "94cceeb51248e76f0fa711e92986ad36208f6e93": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "954933598dcf8e04d6f4ae5b311673409e85c809": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "9580d4c2c6795fcb1ec84bf6a58b873fb2737788": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "95a4d7cccb5204733874fa87285a176fe1e9e240": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "95f36953203283bc9358f396b627dc79480a8ec8": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "9606aeadd83c5da2a613b0e132f0a6c13cee43bf": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "965025b3b611003c82c8c9b69b35b4c5444cde69": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "9663275f953d54a345f3dd00e2eeb0f156710129": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "96f4278992ff6da5e8e60456279d9bc5d1f7a845": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "970e2fc1f55b1e2b214f84e155ae6a9403f891b3": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "97316b1fd92c5e6611acffe79899064fd9274c8a": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "9747756fd264dfe7fbb2f46aebb3e9b084ccf45e": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "974beeae03d1860c485c0dbb68e5413317770b16": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "97b61770815f0589776243ec8ffa365b86548b28": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "97c99c7f158206d19196df8d21573126569d918e": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "97f0981b0a6cb647dd7b11b52c92bc1a3206d2f5": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "980410833d9ce53a0f944ccc629032fb0e6ae6aa": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "9848ce910f5874ffb5cad5fdc3507e8d54fd668a": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "985e84916da5ee358e1c119c9b12ff133da52d29": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "9862b64181c8bf5bd53e51c5f596528ff82bf652": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "986e30c8512ac023f09da460202322a88e98aa66": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "987600e63a25755048e018d1976d8ec4657f359d": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "98ae7604effcc8bf6accb109ebf78fb6f5dad01d": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "98ae76bbf3fe4b779df55df06eb0081ac95d660f": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "98b163f2929e5c92709759e3215879acf32a3a98": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "98cf6cec29c58634b6022fd1e8f54f912921eef3": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "9917620c3df2e3cae0f0e690b4da82221bc26efe": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "9985ca2474151f5ab79a388ec3b0d6fbf42da1fa": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "99b2fcba8120bedd048fe79f5262a6690ed38c39": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "99d6d7fe1a4f0f7d92837486a1f9d7dd500edc11": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "9a0ca249b7e4f00f62ba5230a602c3233895cee2": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "9a0fa2b2dd4993b5ac3370b4047f5e4472121674": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "9a2f4d9e7fd12bd7dd8141098bd3363bb644f068": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "9a45843cf7ed63ab79f7df4d2bf80512d259b0c2": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "9b0a69ce744a08c595426d7cfa5fe5f4dc844a25": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "9beadb15fd4fe1f0755ce82dd160e1a798544a1b": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "9c5fc050311de43f7b7d9a66e8319ad3c051a252": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "9c89251856283a8e3aed6d801ca965fdc1da4aa7": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "9cb15938a825ff7c17ae775b6454730983522906": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "9cbb5a7f2afe219ffb9b787065cbd94ad44ebd24": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "9ce1b776e1a050af28b1034980a628b7728b0831": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "9cefc7e38d2a714318e5c36c3c21b226b10218e7": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "9cfe89d89bfe28ba95777b6a90ac7ed86b0e202f": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "9d0e24467eaf9b797b9e3f6a6084958889592ba8": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "9d9fcb724db6738e2ed07f6815a0e5d45b3042bb": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "9deb7e973e3567140c51750e92d7c5091174f506": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "9e30a8e67c1dc0ddcbcb8c0d957101801fd250cc": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "9e8fe9f31e954787e0f9d01b4a7a0c8d3d320614": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "9f28528f2db498c3a0e79b15b97d3b3e9357e942": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "9f42a00ab7bea15357b54e16867383fdc02e7060": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "9fbf90147bf6ca022818372bf38637738d553552": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "9fdd9d67e3e2c78c419e3ac9bccc7322041c3b1d": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "a015c57718562f3839cdabd7d4e9c86f1a321a1b": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "a02b80b54ccc306e042c286172ba903dd53fa4c3": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "a06ebfd07c3daff1115b82d67be5bf4079ef6ea1": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "a086d90b189bda22a2ebf3e9b7092f1782e4fe84": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "a0ebd1b4fc0821dde34f102f6030fc9c40b29ab0": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "a1230890b4634e4461d6295fef3b4ca6d8899bd4": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "a1ef404093a02445fe14243e853a641c23ecaff7": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "a20b30a1e7723ce15f80e9706fe9c1ea05170a2f": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "a24089bde6e39fea0d157ab9aa4173882e62f39f": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "a2442dd71a4e937fd73ff383067f97ad4c83b4a1": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "a301df371257a12c7bc93194ec045d211a2d4359": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "a30dcb9cfbd0e8c874e4f919dbe71be3545464a1": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "a318ee3c41da839fa1002dba1f9a140274ce59e8": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "a31b0038c42665206876c410caf02e67405dcfff": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "a31be87c0ce167d8e9380a34c7d5004e42f37840": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "a3396b3bca8473c21f9ab1fca8a40ecd580bc625": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "a381c1eb58a73d7e7c8b857fcf3a1b50c6116e1b": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "a3a80c15cc0e13dd1aea5949c48ad5b120a8d831": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "a3ad081c8f3b79ad20285e881e0e4d011efc012f": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "a40a11c1f943538e64466de3b3bf8c022b883094": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "a4202b8b8afd5354e3e40a219bdc17f6001bf2cf": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "a479aac07f3b83ee401944a36812d665f54ca6f7": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "a4a5e07598b0d6a40fe62ca88813b63a1c02710e": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "a4cd6039bfcc6295533a985631a151bf2e0e8b21": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "a5303b50e97dc17384209bdc3723ddc6eda7aea0": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "a5552ed8dae24eaed9346af3186f634d38ee9aaf": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "a5ddf08c7de55ca258e346fd1acb1b71cc2f8829": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "a5ec829bcc187b6d19e825b5b6f12f86f81cc063": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "a60724458ce6cca04016e99826fff8c99c32e3b3": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "a6495f085bc30ac47e89a9a700e406e26286c3f8": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "a65929129c13f2405697b704fb1c840987ad36f1": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "a65ece83e15c7320aa0ef7ff2d69c2ff61fde661": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "a686b20553a38e866228ce003657a71200957c3b": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "a6eab9c538a79d9ffeebc5d4495fed68dccacbd5": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "a71525ab6694ead3c1be0aad07bac06e69192524": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "a724835568fb5e3986c1e87331a18b6628b73e25": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "a7547a96b2c999509ae062509a0d426fa46ade62": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "a770dccb354eae253f170825000386233ebed231": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "a777e559211613e73d9d0cbcdad62c88957d6f25": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "a7aaf603309127956371841badc44b69252d142e": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "a7f111e1b259c9bbd4beba8ebab4dd6d35bb9ee3": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "a89361425f7403ec9e757b5d1a31993a79189a34": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "a94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "balance": "999999999999434776", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "a9647f4a0a14042d91dc33c0328030a7157c93ae": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "a9ed1d8a969237243d26f8728287cb3eb8730662": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "a9f73dca799231e385ce5038c826b03eff0d1145": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "aa6cffe5185732689c18f37a7f86170cb7304c2a": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "aa839cff1f78242d01a33305e1d9973cd7c66d4d": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "aac939ac7c11bbbfb7f4520d14442a2460a51e87": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "aae4a2e3c51c04606dcb3723456e58f3ed214f45": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "aae4f6978a8eb4a7be406a2a787d31dd49cd551e": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "ab118214a2227c79eab2680df0a96d0ad67dafd3": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "ab1b93b6a83c275972ec2a6b513c3106dda84f47": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "abf67dec2d1ec31dd111c2f1135818b6af86c662": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "ac0dbbd8aa555e012e1b5fde0b4e1f20e30a057e": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "acbb287ca3f98d4775dce56e40ffce57ce4ba179": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "ad02a5cab29480ea5b67e354b0da540082500327": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "adecbe660a4943fb6feada38775e51259ea15af1": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "ae17512fd9edf51989081b42962b2fc85de4a2d8": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "ae5837876e23fcefa0f204d7b6433966ebb854b3": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "aecb52facdff422fd67875967e9278a7b872af32": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "aeef5b5a721ea3c03ca909bf1f71c122ebcd32af": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "af3cf705624b239ce07280597a55dc8ca69dd086": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "afbd8818fe046adfa468ea58a217b83f7d5e75a0": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "b008af759b5359810c78d181f0743ed85c286116": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "b021f73dfd1500257934aacddd707e6f67173edf": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "b03a2acc80fce6d54bd1db95d7ff24123ed6e106": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "b0a10fa71a1c4c621345666be094909ac112ec82": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "b0a9ac49b7fc9a45c9e7b358cc2e9e09dfe361d1": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "b0ea2ec7623a1faebead30c8007b260a4c62f99f": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "b0f8d2e75cd431ef9d818a2552aab19a6a99c1d3": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "b14b3e0660d147b2603ed92fec4ff337e3c259df": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "b15c7770a476be2c77c3bd50d60ea6b2cde3186d": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "b1691d2608aea9d7a56083dc7dcbfacc93a4287a": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "b1ec052c576186de285bbd31164de3b19a844dc1": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "b2c10a1979ac6236e586ed704cf9dcecb034b8b7": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "b2da69bc3361eaf80dce81a17d610217ebbc7a17": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "b2f828407f1a5fcbb1e4ec079c22d791c7fa5478": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "b31b1fe90a535ed66dfaf1bf9e1062190fbe88a6": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "b376b876f7137844ef5e2db1e307713885ee5d33": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "b39c43369a4ec5e4b2dfa8b3dbb3a12bad630b30": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "b39c8c3ee619a2946cf540cbf16720a881110f83": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "b3b4dcc6ba6c6d8c352684bc69a135cccb2d88fe": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "b3edb875f0dc5faa556edf77a97e53c9d828d146": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "b4429d6274f10ef0b7ba30837c5de603ed4c16ef": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "b4481bed4acdd11d8f22f535016a762cc87845c2": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "b4c315d98fa6cbed10c6331e2a5e4688ed0b7f7d": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "b4c898e7d827a75d991aec0a837c23aa8d9041e2": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "b572b99fc06b16a232d74898e587398d25d7d33f": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "b5f4de69833ef9f1392c74a5ab905c5cd1ab2874": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "b6367a493bbaed7334456b3646e4541c9e96012e": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "b651decbba52842e8fc86afda1168ac549dea7d6": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "b678cef4a4ba3f3642fa128daef4ed6d50ba1a0f": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "b6bcc464b7b7f0359e87e9a9517d10823a2e0c93": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "b705cdd0dbc620e11fa470f9b4938c5f9f42d84e": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "b7650fa902a0ad81e8d48deb557323bfcf32efdd": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "b78428568fc511f4a6ed34c2d57c4e104138ca98": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "b7b7c5f65fc11a6bee686b9363884811be247c43": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "b7c425948402f9382208346ff48ef6ac4667baab": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "b7fbcbcd3389df89233f8bf6bfa8acf892958a33": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "b88173b953f6c1b613b6e878cfdb34899e3339ac": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "b8fc89fa4eae09e1b4bbb51f4c1791e589368801": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "b9261902783bf36bab49f18323a9c8e4ad86519f": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "b94d3b46afb9954a375e50a6fede26705800a057": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "b96672ac912cc5ad6f75157401ccd9003512ffc3": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "b96982fae6a70aff19c2d99c3b2adc57b151d784": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "b9f7e8e7ea5b1a7f184a152373526ac7acf4477c": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "ba158ff71047c0322b1474461f94c0246d0dfb2e": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "ba3adb3b7ccccb748a65932e0254e52ce092c5b5": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "ba56f0f804625c0ff8b7b119bd03af0a10b5886e": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "ba70f98f64f041290dd6794e5cbc9e8144c8c914": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "baf332c908b38d0c5e825b41a500525fa990b0cc": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "bb26680f6bb423720c6437fab35913d0a86e2a78": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "bb7a0556525b43c750e380a0ac1ca3bb719e601c": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "bbdb82e2b1ebae617370e1c27542ea087a4fa937": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "bc2929a7819bb70f10676f4bc004fff40ce5a52b": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "bc843b0159d8f7cf6fa1bda55e3ddcf78e1617b2": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "bc845b8623c7af6b07eda7a5363298989cc007db": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "bccf73dc6498406a51b4183e22c4be57de5c4975": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "bd4f71cc4a8facf8612158e418fa394cabef27b7": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "bdb0e729f9136a166efc4ddea366fc3b6bf6bf5c": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "bdd290243af494ef27e986a3cc432ba3f873758d": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "bddd1619fd3c4703733b1648b7db0ffa6dd09a19": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "bea830535682332041ad318232044f5e914af083": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "becf51bad165c4b8544ecc57c7859ee946e610df": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "bed1a42fdb56c7d562a773650bb2785737caca3b": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "bf36bc1d23eebe66f84a0f119552dc7b46fe2402": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "bf574eebdcc7ff3617200fe07c8c7154a8d129f4": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "c052f8b19df2c41d807bde1c041a8ba2e87f15d5": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "c06bd5d93ac2ecab95942d1639b700e3a2cc48b8": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "c071690916c15657eba376c7c6b4b06d38e815be": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "c07b721215b231d9820dc8d186e3dcabc6c75e66": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "c0cbd80b185007c05f50e6f2fbb03e8d6b2ed652": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "c0f36c8efba9e6e4e677faab240ccf0cf3e7d03d": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "c101a7eb0ac863e824eea705432530c65aa0c518": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "c19f48a0a131e8b9f44989bbac80a30ffe2a2e4d": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "c1ab531ecade623c0c908c1fbf104fb8c647a37e": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "c1ff6275aeeeacd2c79dc02f8cd5cdb44a81e6be": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "c20cf04f10caa057314759a2908524925294efb3": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "c291bf92ff9bdc0e60f049e6a5b143b940658857": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "c2a603dfbb0734c098e5b6b7c8a9b64bab11054e": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "c2afed79b83fc6b8d98802f52b1fea6648571ee7": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "c30727a70f64c82d0d8837f1b45b931ebf80b106": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "c33582140ad3da6d7fde2c3c73d0530cbde93555": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "c37a43e940dfb5baf581a0b82b351d48305fc885": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "c37d1d79868b6a4c25db68301b8575ae4a8336fb": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "c3d826f0bcf2d353afaea99ec55eb9162438e315": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "c4170be517e6c67a9e65dddb09220df58e547102": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "c44e39eed84adf0c399a9d5af8d0053715d0f5f9": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "c489e22b54124b98b17b68e7c38676efb81c1862": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "c4be49d4dcee6efd96c35ddf346b969db9981091": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "c57abf0b9724f82736bee2a05a9238a45de5512a": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "c5a28cdc8c4b089c87ed4938ed4718253c48dd7a": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "c5c5d6ad672b24a2ddedbd2418c4c131c212cb0f": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "c608a6fa0f9f3a6af68270740ed6c998e145eede": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "c694bd4edd4e806b9c7d4ad742a3be423391470b": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "c71253e1b049c2b5acba1893c74007a26797e111": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "c71abd039da56d4c1d783ed06a48adf0808e9cef": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "c775193c9d81ed6ee806f6005a874b927e96ff19": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "c7e31a320a9a7969a6f4c3cf98bd6d92a6119055": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "c82d5a989ed7c8ffdf79ea0724b3c9ba3fb84e57": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "c8732f022b6c57d291b26c830c651b3617c75b2a": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "c8b331eb5ad444567964f34dc24757bdd3425943": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "c8c3cf855531e1d06c07245e76c5298b4fc90d8a": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "c8c90ba51e74ac5d9e462ffcafbb6df11795ebe5": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "c8ca05f5e8391cd5004c3c4020e570ed4a520c20": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "c9113ae38fc632738ad4722046d8e07ba9363ca7": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "c95ee3b530d4b057840c2d9cb542a51e4e3a00cd": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "c98b82b246d3eca7562ae19d8ca605e77cd53a3a": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "caf720d275e228b58bcd8b2686714ed8819cdc2b": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "cb0ef5a0d3f9427d66aa2b00d4b25c2445d96cf1": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "cb5e208c02a68f2d97601da482c419af989e097f": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "cc0302264a5d0f269e26ca3ac24d7695b562b4f4": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "cc40f2616fb396bfc25e9b22ba3218b2b217ea3d": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "cc7c2f8a3070489cfca48f5fa0db9fa2d65e40e4": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "ccc8cd23dc6755bbb516af6ef2a04cc82a5ce5c7": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "ccce4f34ac3a550c95747823a00fecce349734f7": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "cce1e6f23dccba1aa1830b1b7714fe985f9f2032": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "cd1171381ba62ff31b56a001b8144e64e365eba1": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "cd2910fb9ae3395ed149b28a1ce7c3cc58bc5481": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "cd5fca46bbc468b84b493f7b52ff50386b174d40": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "cdc1f2aa2853b37723f415aeb181583e11ae7b8f": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "cdcc86f0d7e95ea5b2f9f5e802015c8ff855b257": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "ce20ac750c9549b466d48c90352a255f6b7c8294": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "ce7600131bfe22040ad75febed54cd4ad181276d": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "cebebe455b6a15d2e4705ebe51fe5007afda76eb": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "cedbc4eaa94298536ad368e8ac9819c5e7448738": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "ceee86e99b04198c09fc8ebf3e2f45253bddeed5": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "cf3f58bfe41401084fd1e997e8e36dfb35e363cc": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "cfb0d9c00c0b7ad292f221584394a3ae7d30e0ab": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "cfb86844738d5373ad23eb3185e1e9fc5d517ae6": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "d032f83c65a584f6e47f9fff9bc864d51a164a94": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "d09a49b1cdb208e2504486267ca2418c87152962": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "d0a97217cb0a4211e28a58222c1b038c44a3f211": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "d10afb219e80a211c9072b18de0ff2317f67e573": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "d111da05d7193bc295a4956543810071fcbe4238": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "d19b2ebcfea3994bf30a7e4283b73d4bdd319cbb": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "d2468d6da54259507d07f74ef0a246f97e52f035": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "d2571607e241ecf590ed94b12d87c94babe36db6": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "d25b7ae72c049f91091a4abedc4d618e5a05e1e0": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "d269786262f853ed769ef3ea9a7e5b98db3bfb32": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "d2a0b130c0834eb0ad2717ad13233242280a6fd0": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "d2be9413f150b2eaf2666b42ee719fc66e5066f1": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "d2c8bda3e1481b96b4a3ee0a2e1f3f1aa6299feb": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "d2e450aa145ce97dc054b1bcf391407fbf202bd5": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "d3a4f3cc7113eb16572eced68ab395a40ceeda1c": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "d3ba8bc2aa219ba0aacc8960b92832c3b0693bac": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "d3c1c3359ed1906851379272964b7d96e2977654": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "d49825eca3314ad0c5918472615055010cf4a4fa": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "d49daab5099319cdda477f5ba715ae685c031db7": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "d5144e55ee02feec18f2ff293f08b8379d1509d3": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "d577d44f2748e151afdb1ded254c942ca9933b0b": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "d65386ce109ffa3570dd27e54f32e2528fe01fc3": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "d7409d185224a0284e7451923e3d094ec309ef92": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "d743161f0f7beed30155e171b4d577d5ce2a70d3": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "d758e9a701769fe9e5a80b3a09180e7631866f55": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "d79995f1fbdf19beff429a94fa9dd184827c68c4": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "d7a36da4e6e26a99b038e34a6eb74d10d422ba9f": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "d7ae2e59d0776d0ba96fb4b23d1eccb3d57a14eb": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "d80ba0ac6edb71367c1634ae5bf72970e596a99c": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "d87693ae6d35928467daf90aac749654e9c57644": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "d9860a22b84f982363ab9684d767a347a5c4fb74": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "d99befc655ecd5df508569aaadd729af7371687e": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "d9d8272a3b205f71494f9009705f4f30dd31c607": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "d9dd1aa8519580888c402dd4fae66ca68b4a7b47": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "da1849a4f9df2e58d30c94732ff5f3aea19ccd8d": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "da3580da73b2986fe0da9b6caebe17818b7b3645": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "da5828cee8e61bd0d8af71ef5da9a7a9019ade13": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "da7555a43e7a3790290cd20a19ec19032e28a6dd": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "dae44ad9bfab81783c1dd591ebe3409fa8967883": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "db06ebb361ef006c17f89ad92165185a38f6e630": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "db4ed990c69c3b67a04a96ccf079649facb9c433": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "db58d0b35d26edeb0efcb49f7eb627cf49bb3a47": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "dba37eb3483100bc89a7bf11b7f110ad71ecf41c": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "dc19c28fa6124ee9d0688d0e2879f1269b4b7fc5": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "dc1baaa8621b513d62e8aeb02543ce5c7b8020c0": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "dc280f2887ea315f70692eb247e399b18a07bda8": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "dce512ecde5a4c27da464f846e71c8272da4ad80": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "dceb9854f220556f595bd655bf6c023457341e4a": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "dd0eda6e9a3dccc3d430e5dd333c83b759cc7883": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "dd8317eb76e8949315e601fa8a6959e2ffd277c1": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "ddb6aeb5e1bb4cdb44ca3a9b979996c529d9fa3c": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "dddb23bf0a55d0197810e062a5a24a1503705ae5": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "dddda651d375f5352d2ff488eace1de63b6ffca9": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "dde0b1e9b9ecc980c5614012f9afae25cb1a1c16": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "ddfb1c855ea2b2f198d2b6c7dc8ea0ee16d7319a": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "de63eef4b269d8572b6b00574ad8e34c471a07d6": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "def94fccb1b7dfbe1cf0b3dcaa03a77cf58ae768": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "df50b2ca876e4174d276dac0c64e644cb1b5a118": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "df5767dc4d8111e8641198f637e4423c62e57e27": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "dfc26965c20fea217850a28c08021f1468146101": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "dfeb403cff0aabe20cb07d8451caacfe31260132": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "e026a4835edf27c2705c97f237e5b59b7b5da1f7": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "e059d3aac9a568120467ddbba3e4d25bbc82dc64": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "e089f14df5e00aff3b03cac5e1236f5cf5832d5f": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "e0a1885b4057f65dc75636f4fb0e4b57da82429c": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "e0b3647d7252d53d397fa6af6d9da4749f4caadf": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "e0e5744863b26418baf12f94f0bdad2ef2546a92": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "e0e8eb511c8a93cbc42dec4e3c0b8492ca1d81f4": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "e0f04368af17d56c8cdb50f0fd5f1847d9a49cb1": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "e0fbdd03e0e490770d671965ccce5f5ed42bbb9d": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "e134cc9b2be1a15b9e270a9f7baacbda3c8b3659": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "e14b8b08ed9b569d2945b078fe94225924c5987e": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "e1954d1413f4f50c7bb3aa0ee368b94dfeae7c1b": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "e19f216f6b8b78ff1e705cb56d0cb07db60a05ec": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "e1e31732ce0075070c8d7e2ef7a44b93949493d0": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "e1f79aa1d6477ffd08d4e5ce185637434147e4f8": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "e21b2668bb1e9cf057606c44d49648f1c140aa76": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "e24778b9ec00cc9bef91643e31885deee719207e": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "e28a959abf1b36ad7778737d992690cb73a51a91": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "e292ba16ee32e94ba88b4b72821bf90fe7b1b845": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "e2982af9c977c39cb4633346b916a3897ffeb6f9": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "e326d4acceedb3e572b98d4a45a6f1e37ee42501": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "e32bec776748185042cb02d58fad1d5027bbaeff": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "e3443d812bb8204255a1d249b82aa19508dff5c9": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "e355b484879e20943aca2c6655953ec8121b64e8": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "e365d9256480b1e9d3cc6eafdcad5912b75ad149": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "e3d08fe78f595bede290f820ec0e878572803a6a": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "e4028c8f2888697e9939562de475f70a841ee713": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "e475b2b441a9b1cdf24e0ea992dfaecedd58d6d0": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "e49d92946422e69977a94d1b4b769f97efcfb8eb": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "e50c29688b2c3dbe6633797d2a200ed7c2cb1cba": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "e59b406835db0d4c63ae28072c64c664da637557": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "e5baf7303b008f333c57491345e604d52fce0d63": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "e5fa8de537f7665e2aed751b8ca7c6b5bf0cdca0": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "e635349c1e038d62f774f4201cbda082b8af403c": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "e64dff0ba3f0eb9e054a638d4d5f6f0cb47e1e98": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "e6df36db61ae2c46d2cda2f6c8d1856ac181e6cc": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "e6f12dc0baf6536aa75f226bfb0262d8266433d1": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "e703236fc6d1dcc955b9abf34f490e2bf5057fdd": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "e71d6b1facc3de5c246f7d14e35a2b4a2d983c11": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "e74299a026e8a481c1db07e6065ca30af9858cbc": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "e75900e645ce8d1abbb97d408989b159b2a50a1c": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "e7b8aae66ff70d59fcc5a8b4de5a246081547146": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "e81f08cfb60f7c156cf7dcbee1b8790901a1eadc": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "e8373e7e464120da8a84da82c8137872cda65780": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "e857a6c6f502dd2bd0ec341b2d4ed55f2e87e8e7": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "e908278cc1515f214049c48c3a8908524f2cc407": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "e913f5b697154f99bfc159a132c6c253b457ef18": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "e93e7128f80bef53e3217782f21f4bd6a6d19c7c": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "e9d157e81c306452f8494f681813037b146660eb": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "ea186a9a4815581b71403480abae5cc7c57c00be": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "ea216bc75a65a838ea3d63f7c05588c2840ec1ab": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "ea2f1211c66cdabf2b618a4dd965ce133592763b": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "eadf36b1baf942879b0b5c45469fa05add1d61b3": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "eb203eec55c1da2fd38977032c79ada414cc914c": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "eb4e97f22f12995949c371f2df690f68f71070eb": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "eb5ad2481a57a6b7ede3a16ad8bfe2991eef3ad7": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "eb9414a32f85461cf4ac7c9c73761f3f1e5ab14e": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "ebff1a1539630b2f7b5260a93ea602372e539366": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "ec184f693f222b3e48622f5253c134339e7e2e7d": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "ec318906ab052a41ef13ea33deee554704a307c1": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "ec45f260d4d758d6d23ae0297a9516190d935a5b": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "ec5f2ac1947c51c5982eb0ab63d1e6439f45c2e3": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "eca2fc261f07a269c2487e6d1b0539d0950ff792": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "ecb643ddbca1cfa6dd22964c20ef57ab47c0fda9": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "ecd38089d14a75b93afa634276bbe8965f5642dc": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "ece9d0b9393f64338ec6ca5b0efbcec2175f19ec": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "ed1a5e97e3415b484e6bc8b84bd170dbdd879cb3": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "ee21d08004e0b6f2c1cd4bcb2a04ab74f7b7b708": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "ee439948c6dead863ab2ba9105b70916d45f9e79": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "ee6f3914a1e5d955fd62a29562ee0ab776235ff5": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "ef36b064bb706bc0540e4ed2b341ae8a0b7756b7": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "efe2a6d8859b14ecc69baf66dcd47f4067df18e5": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "f00d30ecf763691115d2314d14ea1e11f61ad874": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "f026ce3f255ef9fc7b93719a3f6926ce4953bfe1": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "f07ee5b0729c565f7b57995a108f94e4fcb81558": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "f0dc197380bc632e5078f75f5ef0b814b7eb2ec6": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "f12be871bc1a1f3ca254eb027786085dd79494c5": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "f134cf7fd6ed2e962db26c4b3d99ee5884102c85": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "f191a9c00fe780f63cf4f68a06e895bd53981254": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "f1970ea5af8456fee42cc087e79bd5c6a6efaa87": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "f1ba5e0a4a27d8dafcf87f049b178fe83574ac06": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "f25da1517af0e2fce2b9d75fd964e8827cc0cb72": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "f2866fb67103c69f10edaed228d2dd64b7e6df83": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "f2d3cbe7357ee858c2b7f6ea28fc95c1af508ca8": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "f2d923a66a9684f2268530094ce8e3f8b8cae52e": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "f3b37fd9258f2c883c44e8ddaa90f91bfe9f5d51": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "f3c5a341248911dda9d694ee74bf997365941dbf": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "f4489af2af8424c6edf0d0adc525680dea208a31": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "f475a28a9649aa00ab8a40af393f1961587c2275": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "f48270bfa988db4518f9b1db9e78bb398c954550": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "f49ecf0e4378b1957686d8d0b227f83e48e5523c": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "f4a32ec7fde64e7d3ceb53fcc00511ffe13ff5d4": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "f4d2d03bf70c2500fe431fdc8fbed2c13437bdc9": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "f4e76b020a22e8c1929ba2163e413385fc0cf884": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "f53e504312e2ff787bbb9ba4ea921e9edb7b18ff": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "f5472ede25cb83dc2fe392b01111133b777709b9": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "f619381383c69659fe81a10d695b2663426624d4": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "f62f676443b29c513964f01cbb356165ace54b78": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "f6ee7d8bf313f837bbfed7f10b16fb2f182fd416": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "f735071cbee190d76b704ce68384fc21e389fbe7": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "f74f956ea3d122e47f4aa0066b5e3605c80d0282": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "f783f583fc06d2c88e9e0d263a6ab66f8b8a0514": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "f78b2d97c8af245b705c0a19601b95f983e9aaf6": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "f78ff2d350615b858077a50ff85b3a9e2edcc995": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "f85aaa082ae886506141245ea3b43ee74babca65": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "f86c50909ddce25f4d4e71e16d78b2f6a244e8cb": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "f8e4de2f36fa5e9861fe3af86d05db4cae1bb1a4": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "f8fc32491119dea2b7fda5080ef9cf0027590265": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "f904cb6a599db50cc635bb70f3c23f056e39914e": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "f94e8e9f1511f8cede3bfd8e1be0db35085e8e6d": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "f9c7db4a48b918ad6e44d2b55e2339fdcde01d26": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "f9d417c0b18ff731a88a17f3b31d9d6ed1e288f1": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "fa849bc1ece08222f4bf249ca06a6468b3de5b1a": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "fa9c2ac45638e511b06ebe051411ebdc2c4c228a": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "fabaccc45975d14c53b830fd4fa0576da541d22e": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "fac000880bdfdbd780ffa7c4a1d5d8b4a1d87b03": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "fafa31e9b477adf7a26b651aa9913f8664e536a4": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "fb04fd4e715c760c91ddc0f30b000b52203f66a4": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "fb5d7c75f272b07450867579978314661c3e1206": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "fbdc8132551b0ed5c50b6c0f279097592b5c87ef": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "fc55e6958f11444ae56c09af726f2ec57525db58": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "fc70ade160bd76694149f3f439f5d4f78bdc483e": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "fc86915f4e8884b49adeb6f23a8f69e643d9db7b": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "fcdb751de1dc7c5246ce698b4b104016d034cfdb": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "fcf47e5c1414303d55afc40c75c41cf42079d560": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "fd096ec4540dacfebbabf2dd6ffd3493a09cc38f": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "fd09bf9b58980d6a5776bb391d8c6881bcca2ae9": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "fd0dea1a583400fc29051c8192b70022d8d92c48": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "fd437bf9d51bac3a2757bf4b8bf38045e78d5ada": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "fd5b134edd8931ca2102693d88070dd49fc13350": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "fd91b246a065cde3fc10edd6457b9e6c10fb386f": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "fdc6c80a86ea555b5de26c3db49a779eea6beb0c": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "fe4f48d16a7ec27241b987f3545423291c7cce77": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "fe686acb3b7cc09ec6379af828b4b3b638898130": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "fe8d768de7a723c23583162dbef207b6dcb4fb58": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "fed73d1755549bd523a775e81cf80a1a507eec50": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "ffb9bfb24fb671413a3aae05e0f21b870eeb2ab9": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "ffc4569dfb86db2e584a1138a75747dffb794466": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - }, - "fff1cd2c481ce0fba0c97ef77c79227d3b67832a": { - "balance": "0", - "code": "0x", - "nonce": "1", - "storage": {} - } - }, - "pre": { - "095e7baea6a6c7c4c2dfeb977efac326af552d87": { - "balance": "20000000", - "code": "0x60206000600039602060006000f0", - "nonce": "0", - "storage": {} - }, - "a94f5374fce5edbc8e2a8697c15331677e6ebf0b": { - "balance": "1000000000000000000", - "code": "0x", - "nonce": "0", - "storage": {} - } - }, - "transaction": { - "data": "", - "gasLimit": "465224", - "gasPrice": "1", - "nonce": "0", - "secretKey": "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", - "to": "095e7baea6a6c7c4c2dfeb977efac326af552d87", - "value": "100000" + "recursiveCreate" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "10000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + ], + "out" : "0x", + "post" : { + "0007318879928543f66b36e58900a870dfa83312" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "001864a1fbee8126e530b9242353d9cb76b043f9" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "002b88d7e31f20b1cec3ae31ef8ae3f017820cf7" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "00ae33b99c24c45ce086aa9a1844fe8ed55ec312" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "00c3d96a0eaddf7975da5c8718c26d65de0de59b" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "00eb1775a16c0965c299f06a0873e11825f915e3" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "00eb67f5e410e28c16861fea7a2ecc1e0011a75f" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "0116be8937cb591d6db17246c91dc3deb1fd0e1e" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "012255fe8647bfe207603a62536ac6ae7a230ca9" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "014337758eb4abf60a8e458a97acbd8b47fa0c31" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "01619145d576c5b3130eeed16f29501f2773c958" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "016cfb16ce1ab4c15eab782e1ac3b0d7f5bb264b" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "0177fee01c15eede3b794e761753c1f6d108b7f3" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "018b456893203c6e3a5661e7328b5a858904cdc1" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "0199dd91369b5ce0467b68d57beaf1d96fdc769a" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "01b26e834122a942828698305a84789ec47c0454" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "02391d38c9b4f03e9225ae5b28230284fa397a09" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "029f9045d1904fe6076c4dbe77bd33290f390714" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "02c577c9c1b247c0ea60b1dd50fa895c086e2f2a" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "02c7efe87a470a521338ba476a0eaf7a535c9c56" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "02fa5c7476f2d423f27ac8afa1e357db95f920fd" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "02fee10ca6c1ed23e651f29c97a310b1b4dad13f" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "033b61ab81ffc5adce16d365458629d9f3482129" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "03b685fb90981f103fde64c3bbb5fd701c84dd0d" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "03f3095f9e46a8ac62005c42aaccbc0fcdc3aa32" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "04110d816c380812a427968ece99b1c963dfbce6" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "04308fa2e7af944dd7008a7edbe5221a52e2bc87" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "0441738f9f0a045afd77a72ef8398475c1111471" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "0462dd089e0519c581654520d17763635011fdff" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "0473710fb4277459429e0c4a862ad3e4b45692e4" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "04929feafa156581a24d8a0bfe8154ffab39fb37" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "04a104904b31f401966da211ef40874d6e97ae46" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "0581dee4d5420c2f6b1614ca62a4d66bcf383d0e" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "059ec3d5a255df8a5b592659ea5fdd963e9bd0c2" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "05e29ccc32df8edacbc5bd6fe19fb4ca02928969" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "0602479ffb0636a1ce0fb57bf7949cc978250d2a" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "060e7bcadd084fcf19db5cc1ea769550bd8f7508" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "065c627bc67fca3636da49c34994b6efb2adaad0" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "06c4341ea63b3431260716e2162ba90abd9628c3" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "0723789d0c7093f6e97c3fdeb1324a75427ca6e8" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "076ad7e168093f590a74f6fdce56b492a23baa2b" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "0801871b468dfdcc2d3bc0c0d01cb6ee02afe581" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "0802fc1dc1a5dec7fcbf1d50f3d8a944099ad72e" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "080e2ae63ad3891bfba9ec5200f4ba383209ecde" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "0891a47ead61f684dc876e12d5261ab614d0fa09" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "08d19f247ca974ee89d4f988cac4becf7a177723" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "08f86cd9e45cd0f821b6088ce2f1b3c0f70dba07" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "20100000", + "code" : "0x60206000600039602060006000f0", + "nonce" : "1", + "storage" : { + } + }, + "098de34931d0d159e2631aee55524c217624d095" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "09957f64c3396f36daa03c68fa6c997eb7903df1" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "09986b78d02ae7c8eaa8b62053a3ee78deba79ab" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "0a1960fde1fc2010660dc9cdc299facac4502363" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "0a517d755cebbf66312b30fff713666a9cb917e0" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "0a9015286f76ca4fbcc33e74e9c414be9774a67c" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "0b4b7f08623d9b3d6514baf529399e4f1c0ad944" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "0b98f3276e76e9982d7f6996878ea5196fda62f1" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "0ba7f30a90b699e3f906bff7599b230890bbd56b" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "0bec2514a2a40586ec75e27442352d1dd2bce537" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "0c0cd995ac9e488544723e3e8e90a5fed98a6958" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "0c1e13b0604290abd900eba3fb6b7560b3401f58" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "0d11b1966fa90191f6927943c476d36fa3a31556" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "0d1e5ab3b0c2d1ad5a562c123b7f01f4145074ce" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "0e0905211a442bb5838d2d6860f4f21e6b9c6593" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "0e639c40606e9329259d2f945f59dbcc6c5c5cfe" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "0e700a2aba22bd639abf05addbb24c53c3f0f3cb" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "0e8dab5716375707d97656230beb5f1445e56309" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "0eca69ecf3068082cff932c044fe39142ab6268b" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "0f065de4c5c4a842f52a30fdf7b0162594df70a3" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "0f0f333b14cae00e0f74e1de336437d5644ae336" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "0f2fc64833681664e54ca74ea756c7233a05dd85" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "0f8f271215cf51a0646c8a60ed626515b3ddb739" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "1039c22c55420b0d7e65e6e6e65798f3f4c1e725" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "104f577c92f14f3684c13eb179b9969c05115604" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "1057c6ef671b124fc14b5641c167c6e6756d8cb8" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "1121c3fb4f490140339dabac59a62dd59a9912de" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "11895349d40ea4683803f8eb7ad1d2355ff906d8" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "11fde66f162bbb0e19d68f0c774c997d0165fa56" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "1209046d7bf46e81d8202422e630719c906653da" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "120e38f3899a4e2f9f848a82c7afee288d14e7a4" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "1236efbead5ada892f61e7e4e59faa143e3bc01a" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "128aabc28c928691ad3415e3c57010c40694cd6e" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "12eed250610e4d59e841381dc46deaea3d9305b1" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "130d08c2381d23796ff403d8f1fbaf204d90e3b8" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "134c36c64db09ad23fde5b43a3a7a92d84dd5300" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "13911c90a6ddef5182a772116c1d9e98f27fb1af" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "141182812579a73e13dd878d8a94bb628143b097" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "1456fa2cf6376b40069504e491e64aa40484fe3f" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "1480213270423eae9d6b0a603541e989998453d1" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "149d393bffe9be2336e7ffd6a109f05318dc798c" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "14a76e43bc292a0e69bace56681c4eb50d8e52d7" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "15146e7f5a3d2db1c655ba9d8eaea6c62ca34496" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "1555dfd05f003c056dc219415443be1a502fdee1" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "157f8c66dd3cae32485b2d68a51c1dd7923bf91e" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "1588c83de3fa7b22bf6aa67a4e91f303b490cbb8" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "1591af76c716952018e52e54c716e8b2226d494b" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "15c4f7ebfc781a41226d61bdc0fcdc98fdd8bf45" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "15e75e648b604b0b8028f7955647eac6bc850088" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "161f83bac94d326e2a8debba84379ab72a14c6d6" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "1622e5aa3015448c3a7560b15a289d9aacc5370e" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "1660ada72b0a07040df8d063f2f3f3fee891f1d0" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "16c5f61453cff59c6b7e2a690cd902b72208427f" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "16cab73035afa73268745a3c2937b551813c4960" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "16f5ee37c60dfd70f8281ac16cda47d665ef8789" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "1756aed6799c904988cc7a1dfabe77fcca058655" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "17c7a85a071c3dee708baeaf56c208752c362e56" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "18500d6a8e3e20ace9aeb507c213b6261b23f5d3" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "1872142d84f7023b181766b790a4487f4012527c" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "18731575d0a6339f6317c2a1b628d8a4c145328e" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "187749fd89567f9519f0d50b4a19ad2600440e3a" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "187dea0407359c9579adbdf1ba9fad4a92fb358b" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "188921ab89b5b8bcbe443676626e6012a1ed7dfb" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "1889f5317912e414fda653c710d2c17b7d5651e2" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "18934934c2f7d8b6b645fcc90460a966df3a716f" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "18e0cdfc5a23465cfb3566091849c044d2210b55" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "1963ac8fc10167891e91b4d3f53e09e0b7c9b55d" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "1a6bbe5380998bea238848b7a5927fa87e7b9fe1" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "1ab2ec9fb4e5d9d8cd15a1ad495ff314b97869c6" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "1ac3dd6a958d88e45c2c55d938dba74fa892084e" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "1b6ec3b2772285abeba8f53839fd96de995c4bd1" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "1b8a6f09f8fc9743b59ddbb2f105034e32262552" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "1bce33a58c2741f74daab60067f759e9fc5f8c40" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "1c2749b3a6c574b21622761bef7274261597ef2e" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "1c32901c93008d3e09928bdf3385f32ecff9500e" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "1c6c53405b0eb8800a527cc5990fe3b259b50a4a" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "1c827d36ec915dae96fdc0b164fb7bc1be9467b6" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "1cd063768378c77cbcb93dab0ba4c345d76bb0fe" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "1cd52bab323ca2180a747d3c8b8405397003feb9" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "1d3289a828d2bb4a86cda52b7772e2d0d508bac9" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "1e1505a86f6b0fb5f7a4500cca953462cde929e4" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "1ea264b74c8f6e50586097e2e7c9a39419fd88de" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "1ec05c9f7c0ececff5088a06157f47f3e9dac9c0" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "1ec26f14651cc567ce691ce83ef09eced6b12a6e" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "1f01dbf8bd02bed14cc0a21831e044faa3f66fca" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "1f1960aa296fd1f00ff131357138001afcd858a9" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "1f323b00b7be1e9c0713b080cadc05f45e5e7ec3" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "1f5cdfaf598bd8002997b576e9ba849636c8431f" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "1f95c6da6a9e0abe74900ec00388094d32d98a42" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "1fce5879444d729719c03b5af6e074b87a49d933" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "1fdfe5402a88f71bfbaf9c65f6df05b8eb6232c1" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "202474905af37a5074cfbc2d2dd0f2f205a099ab" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "2040d98a367ea817f76fcf8574d4df51234eb492" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "208d07e7177b2e975c6b6d0eb3c5566900b87dfc" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "2099c5bdda1d98ce3b99988d768fa9f812a21f24" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "21115fe08f7ec434d4ec27e8dcfdf31a6e50aa09" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "21190aebff29feb773919d8572f8cc825bbf7144" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "21368af8397276e6e4b284fe36f525dd323bd3da" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "22230d8d10e81e01450aa68bdfbee3c20d969de9" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "22affea985c1a1ab7007a55e77e80c54111708be" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "22df73cba33d8fd14fc985fccded670de4041f25" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "22f2f312befc07db595b5d9fcbc4caa7ee8df51c" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "23138c70217200a44c58dceaa4f5ab06470213a4" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "241b46962af48709f1a19739ffdc7bd3f0d2c7ad" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "24248d1242acc87dc331e87f3142951a977a3d2c" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "24ce22b6a7f4227e1e3a6c03c14d07acdb2ec553" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "24cea63a6f0ede9a0fa91907e841ba4174e1cd0c" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "24dd378f51adc67a50e339e8031fe9bd4aafab36" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "253a31b068a402910eb30758704b78c375ea349a" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "2559cea11e9d8fd293253a8ffada7558c9c4db86" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "25c0d5ce71eec198760c001497350ad83df55ea8" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "25f81565c6ac2e22d7e320168222450c2cdf4f6d" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "2600b9122847ee06e201ff6a734fdcfa74b2be73" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "2652f49b5ad98503231b3befe7587c231be8a5e8" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "269f24e1ae86f63876b0504b7b26e20483fa95f8" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "26be5205dce0ce433dca3602886578160e6d52c1" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "277c19a0f1e4f5e4339de4d0223fa254a6c8a5df" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "27b3a0698a207d5ed960cf71b1ee9fc54c229eb4" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "28313061667479bb25119ca3090cd25c4a99a20f" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "284452c049bb65ec77ed7502b19abf699127c21d" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "28cd47ab2e86fe040740206eb31fe193df7cbab4" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "28ce21f7f28c8a546bca1697ada45cd73473465d" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "291cfb4b02976ffde7f1f269a3e7d30940367e55" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "293f982d000532a7861ab122bdc4bbfd26bf9030" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "295882ddd91b2f92c43bad0a51fd0ef7af61e729" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "29799a64a736832cda536d687dd443ef3bc31e57" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "298b8bde7997684bfe4434cf6d24d50ddabb69b2" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "299528bfdcf20ff8e19a7a3fbbdfe98eddc2604c" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "299f80e93d68725830c27cb084265d0e634e4f77" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "29f147c366199719adcb2ed1d528c4f34c10dc03" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "2abef5958c8b283eaeec4557844ff1fe194e6cd3" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "465224", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "2b5fbc2f7e76f6281861cb4282effb94d609844d" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "2bab1d9132d47e56f937ef50987cc52c9adddf0b" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "2bb175c167599417f2192d9f926a5c648d17de8f" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "2c4a413bc345da77b2d07a17313b6d89aef2c2c1" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "2c748f96ae0e6e9b01395e8a73dfc351c46658be" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "2ccccc0744051db25927d850055234117778c1fd" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "2cd26944d7baa6d92eee478960d5778375862e85" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "2cf5732f017b0cf1b1f13a1478e10239716bf6b5" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "2d142ccaa1337198d592bc36ce7c5447da73f906" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "2d960addf6048f155cfaac4ad513f46429bb58f1" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "2db5e35091789102bd0019b4ee49bcae42524428" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "2dbc14a87a2b5a8b780e460dbe0083d8260326f4" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "2e070631694c093a9a329ec0b4a1cfa57e20ab77" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "2e574f7a4c8f0e80964604262ef68b3168fd31ef" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "2e83c90e7fa359705ed2138854a83a9145c27a8e" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "2ea29d9016f2b1141475e4c3c62e031c0a908a07" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "2eabf4237f49d4cd44ec256436b99ba41828d36c" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "2ed524088290909f92ade6d5f9d9c24071c26662" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "2f171d1f2cf19f4a458b7dc4db89fa7cd818dda0" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "2f8ac479ce5baade6a63ecadf9599bfb0ecdecde" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "305773e25e157761c9d55cb7d9e24fc1b953a8b9" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "30b37f280d6735ee04239de0963b071f83c13a27" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "30c5bc3861dfc5a70325aca029ab5dcb2d72928f" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "30f51302b4630ea1b8bdcac380bd97d78c8f60d3" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "310782e2f6d97ef0abd4a4ccb75b401a7d348be6" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "311f9efa9544b1c8a8277c52e0f1ca47daec8c00" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "312f80de0869a8fed49c8ba843484411c47dd13e" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "3174a074366bc04bfb7f2a728a725cb01cd575d3" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "317f31be5e04361b11b97ff2d6fc682030d8cd8d" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "317fda8ec45232a8259546a4ca8ebef16338d47b" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "31a87a9e67b2728c14767de26753f205b793c5ac" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "31c640b92c21a1f1465c91070b4b3b4d6854195f" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "31e7dce7c8469a6dc612dd8c0a1242846d31c069" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "3229e332af8eaf358f44aad3a902a6c47f96983e" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "32a48ace80773ad092de1d9bcaa00787353b5fad" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "32de9810bbf442f9209f994556bc9a7f7e6da500" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "32f9418411245a8bc6982ff71436ed2de87e3d96" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "331a1cbbb58594c3636c0e54de517c4a6cedc27b" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "33207da78e5ef3dde6fceab85bee1b5bf717e139" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "333872ba7e8ce9c43e158b12a3d038d06672db7e" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "33b82c3871bc89d9137c62af099a0c4e5911a047" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "33c85ce982d0996ff7313c1387ab93348a6777d7" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "3432c3f9f90cb61e79f39d310bdc6cb8dcb3a49a" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "34c972120d50fbdbb38ba536e4d61bc8f995d19d" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "352e4ddc3153285117254b1cc378d297b7a057b5" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "3539fe0192009fe1a9d35901b0ba951a59348a97" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "36630619f71ccd89ea6fba8b13099d1483187b17" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "3671a99d2a485b30fafa2a65f405b6b03ed32ea9" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "36a9d95fe0c701c65370560445c6a80b4e13c8d9" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "37609ce3799a1b75ea6090da3d014d59e5e7851c" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "379ef6dde2bc54ced45146d4907639ee7cf1c8eb" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "37f998764813b136ddf5a754f34063fd03065e36" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "37fa399a749c121f8a15ce77e3d9f9bec8020d7a" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "3820c20f3f8ee1b164dab460b05a979640a41369" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "38450559e7ed9b72c80aa00855b942f9bac1b281" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "38479ce52243f1a8b358515a084fb41533a723fd" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "3867a470ae1d99ccc7af287ed95ea4da4fd49e52" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "387b1112283308ce33f63062a7531e6fe0f3af16" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "38813e8d77b07f357888ea1a7805ebf52c59189b" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "38ae3c2e0c1fa2eaec3648a2829fa362b5e01351" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "38c622aecb7e84ad4fcfc327ae9a1a17e2dbc36e" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "38fe3b47fed5fa6d060bde66598bf5a773b831eb" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "3917f5ac4614ab7d126adf2f5b1d578f2b91c370" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "39457953215cb93e68bc5b351d63a8b7fd16031e" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "39d9b351db53d59af4907116d594ebba910474f2" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "39ea196ad4678ac786f9ff4ba12edbb364cd1baf" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "39ed2d94ee4aae100b111c773d4f3b78bd4e9291" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "3a9d3ead70f9c3cdf9a64b25b5c1bf765fe09fec" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "3b7465c98051ca273d8909857047d5dc5b022af7" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "3b7d7653d3a7c2712d08bd29668163cb775c74a9" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "3bfd62743dab66288fe0b993d893a41d2dc3fbba" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "3c4a4ef39f21e45a8f56e5c8bf8bacfaba78a777" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "3c7c94fe8e900964a9885a19e09a4ab80213c5c3" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "3d082c9477c05d23447d1682257a9d0ac1f948be" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "3d64e9c7cee7c3d41cfbeed851fff8642bd0200b" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "3d7b61ce014d1cb84465f1f908a6a940fd991b39" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "3da1b91d461c3220510e60c0c5b87be635068740" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "3dd6e0baadd05402f490e3030ef1970d884a1caf" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "3debce965330c2da68edb1cdd3ac380d5ce67b10" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "3dff39a90e67e86536dcc8b4dbfac04da831e0b5" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "3e0506e272fb9d9369627282cd76a40e4046ee84" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "3e1b0d3f5819f63c9621ba4d4af623a7b89b99ae" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "3e3069deb6f503bb8bf155eb2f89801140831f5b" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "3e85699a24243e147ec809e30761d92c0d21392a" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "3edca986feba79717853d9b91595ae61d953736e" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "3ef5e42a0012b430169dae579f8dac0f6ef5dc38" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "3f5bf6c71c4fae1a91c1cca72b539dd83762a716" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "3f8bd9d9410af417dcc6969b64096380e1a6d0b3" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "3fabe5e3c3a59fd322cb638dc5295d1e94cbcea3" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "3fde19fb418799c0e1744b322314c17a863a0c9c" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "401f65fb53496c7746dc6477f6f9d67246965d51" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "40652c9cf91678111a21c62d7206ffbca3d47c9b" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "40e0cce7d94ab21453c5576f30a598cf9fa80e1a" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "411456908355aa037314aa920e8afef3632503fa" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "41493b8488a0ae34cade12733e8df93a87f3ec7f" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "41eeae22551bd18167a31036b363bdcec89a7d9c" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "42bbb8e2c7347e29f3a679e4cc9d1ca75319fbd3" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "42ea619ae1a90979837ad2137458d991ea0613be" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "42f56890357c304762f1c57171cef30f044ea09b" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "42f8c6079f5658fc8dc5629b63684f278acb7648" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "43b0edac3c2c58f16fa2380089d841c420a14236" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "43ec9b975f37266d0ff7f044581db559fb9376c4" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "444e8af4b323407d02a7f96c209b712a65c6aba9" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "44b329f4eb8ebaa00d731472964de821f8e53a26" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "44d13c51fb706efb7394346b00debea9ea46e9f3" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "44ed3a04032bf3585faf1dfedb9806eeb8345809" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "44f344790e299b22484749266ea59bbcd58e4b0e" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "4582048e819b7d55b3c6f47e46ef8dd8fdd12038" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "45eb1861d0701efb338468964c2495db8e7e3411" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "462cf0e5071404ef569338a6f0a5b113d64a11a2" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "46aa4a5c336dbecbabd4cdfef3b9fa65a8a12a15" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "479544e8b67a7e82120d3c5d7869b4c55f4a0de3" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "483940025f2d36cb32e93ed80caa41f15487ee7f" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "48e958f074c27f1d190e69ef8c01f86931b278f9" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "49a01a2696857efac9ba53c2705ea4ffdeb30419" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "49fc4b5136601d856188898008375b9c1bf5897e" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "4a0ec2620d55cefe3e80960f83ebc81219ebabcb" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "4a1edf2110e4ff29c69b835bdd375ac88525dde6" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "4a466c64765157e1a9dee46e1a26d95ac2664c4f" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "4a635e63aadc395c1801c73640f256250d209b25" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "4aebaa9fbdb040e8037e78fc37785f33dc3cafec" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "4af174d239e86ee19d40026eae04486804602061" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "4b2c0c38418eb142d686d124ac5fcb363b061fd7" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "4b414d48f3871bc957751d5895c96f090b509bbb" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "4b6dcb9105adc3ccc34c6c180e9e2212c1789975" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "4b8558347f669cd9b50f70cb501cdbf05f93b575" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "4bb5fc5d686cfb132c177aee8ef426e5de98cc6b" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "4bdd7615ee906a0c88233acc5816b4fdb4656dfa" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "4c0cfb86a402c70e6b110a1237d10c7fc7fe9cd5" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "4cada4d5773385e68f4ff1efd1a23d75dbf1e61c" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "4cd33b31663c159fbd73cbb32f616eb46f7b18a2" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "4d47d935a3a4a4618c67f337a0075d26d9c1f852" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "4d4ad735b52df9e88fbebebac2de1ede991f9994" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "4d7a1e5009218cf5176a313f6922c3ab01d4970d" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "4d92228ffbe5ea89389a34a7086e4420d61eb70b" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "4dbe6269722a6063d594dfb65eba1f2a10488963" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "4e36ffe7590f8dd7fa9c4c03cba3120674814abc" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "4e4ad0ada6b3beffa2436bef1f6a8054f4476be8" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "4e5cd86dc5f716ebbdf6ef572a369c227986bde4" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "4e76fc5e619a4200846eecdd5545b39499debb10" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "4e86f346747b828937501ebfda05b2b8fa16f87a" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "4ebc77b7203cce293550d92b2b5587621cf53219" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "4ec27065c52d294799b93700dcee6e32778f1b18" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "4ec674e8eb6b890cbb7df926def8fbbb2a6bba70" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "4f14a61b9f2f99e50b719f1345e76339f7618202" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "4f36659fa632310b6ec438dea4085b522a2dd077" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "4f5af8eccb582ad30e2702d07577479599461c54" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "4f5c55986b93d742d196235aa7329df2c8ae5562" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "4f86da4fecade6017d7f15e30d8320446306870a" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "4fc34bdd654289653ffc904f86ab2f17bad8431d" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "4fe8f4ad85487cfe365ca212848f7c970c21e135" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "5038bd4d6b5b31100c52c85ae3294d525596836c" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "504ba70fca5091ea426c964ac631082e4ad51672" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "50aada85d21c462d9c2803fd3c22beacc61f496b" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "50dc3dab5836e25872ec87bb2bb30ab57a35fb0c" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "511b33319d0f7df487e07c4f5d149b27cecace46" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "5154569b5138f7c1b77d4434860a92ff5707e047" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "51a578dc2949f3881535733a5b1a7b5bd308215f" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "51cc4a0bffdbdd8313ed94ebfd5524e8200f4876" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "51fd18c9ab9bbb67c27373e8ad754e253e09dbdd" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "5216a59dcffc6105f9b58a0b397baad604c0dfb6" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "52b774b5fab1f557024bd4a7cbec4cd014b81557" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "52b90967c04ab8adba7c6908b04eabf2c00bcf82" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "52f1ef4cc038ef92d0c1f9e7afd3dd3cd0c25b38" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "52ff6062b4e65231065d5579f870b7f1472a5853" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "533069310b9741214f30aeec58be9d19f40161fe" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "533a4a1adbae2d561beb729c53e46251ab3a407c" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "534d2d9ab80a99d598de600ac2843f751e8bef3a" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "54819bf1efa86437d2f38b4211bdd5229247d9b5" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "54a1706bea8f61e354b5296afa5a9f488f88ba0d" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "54d1de66a65ecf30d79037a8c8af99c633113516" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "55010017736ad7e8e14327cf0230ba4c6bab0450" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "5503d35e96e76e02db22c51fd7fd3d5c0667c885" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "552e158ca0fbd97f7b3c6208ad3f956a67c8df78" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "5555d9bb89b76deec0c8c0cf37dcbf4b9e3449d1" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "558fb0163d7794abf1b241aa4728390028291ce7" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "559bf1337f14e89aee38a9859ec9bf8035e8f6c1" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "560d5f4c8933c5ca0c2c1b4f3e8b22958c9d7cda" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "569e42b9cd8d79ee5c5ea9c68ba948b7b4d8d84e" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "56cb9d29e9be519d3fc1cd21fcae7750aaa8b845" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "570dce0f67e367a085e51a47d6c93891a82d452b" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "57cb48688d626a12fd4caee130b11e1b06ebaacb" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "58cbb2379b1fdac0a036bf75bb598e7d4fa232bb" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "59ad59b53c0d9bbdf0ee0912732baa43eacaae99" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "5a18f1d5e443321d54d1dafb3e3b5b6f2899378d" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "5a5e4ae2fd570b079f26dd7f8b9c90456d4b11c8" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "5affb7ff218092cf60bc1ba4b32ea65a32cd6844" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "5b1718e3af89692315a673b5c134361408069b00" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "5b2ed45c5376c8359479e1b48f8c07437ec78336" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "5b4615bc4b0f10948e46f967ca6e64cf91a7753f" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "5b71d8cc27346cf6d64e101aab9c88dfd58d26fc" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "5bcf5f7ba278df5a31f48a5706e69816727a6e9b" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "5bd96b317d4163401c9b1a2271c03b9439e73e6e" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "5bf1ac936d2312daf08e481d85e99151cdfdb9e1" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "5c0ddde0773ca1b8f9b07ecdad9f47f2705640e1" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "5c45b1eefac6061c7713919b34f5dcae9d5cfc7b" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "5c70cf636b26ffc099fba8ddd5093e95ca8e7782" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "5cf45d08c0b55dd9c34cc4cb718c917333f2e9f9" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "5d07bd78606705bb5c62fd390123b4e45f7d74d8" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "5d11f35386d10cfa7121b02056d97dd932659943" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "5d3292b79851f68d3907a550dc1a0b569d603f66" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "5d57e28e16bcf33b37672eeb891b29c481e89120" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "5de8956c0c99e2dc6715201b3a9e1d5fd53b2dd4" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "5e0ea0c533298d20ebcd19482a8b1e1854dda425" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "5e5a0b9c4c36067c8730abecdb29ba97aed877a7" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "5e74c3c0f3bc39154407e9a3c55cde944d1ca04a" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "5e76969932c5d314142b23c555af4625fa6b9343" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "5e89d5dd43fa9fa54381f234d1f7251387a0692c" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "5f1703b93938752face6e4657a90825b77f455da" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "5f3f9c388dc0c9c01a5fd540bf9eb714a47fc5c1" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "5ff4d4daf0a832422c4675a77720abbfb5afbba8" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "5ff4ef866c3ad4102444d020c1d21c3d35a119eb" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "60a2db26238d52510209c569dca17c1f41c9a544" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "61144e43a08b3852bcd531d13f0485743bd835a3" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "6123d3be4335107712685be2d575958b17501067" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "61306db8b4ac256266cb379b5f686e25cc117590" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "614037f9a7be1ab2131d485845f297f2d62d569a" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "615a957b818ce70fec123daafe552c482c59c5a8" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "6168c5e3b7d7c870e3e7eb53b152fcb920c8e1eb" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "62123ac69c46a06f7e3644b0dfcfcded535b8727" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "621ada91fe8f65407ac963de8e75d88d4c388cd3" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "624a9bd6345be1a95c7fb509ca4bb77d05138adb" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "629fdbc407b70b57eaa1523ab12c5178e81a5d52" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "62c01474f089b07dae603491675dc5b5748f7049" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "62cde2103198f54d31cdb9e9495fd7e1243c2c27" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "62e75c838a732abab87e1846f361721f03e7d973" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "636b02091904e5b452d19455f484306b8fe62dd6" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "64134c8f0ed52a13bd0a00ff9fc6db6e0832e39e" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "6454029b19b69bcda3ba156684d58283636dea40" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "65e3776618742b90f1d9844c907b276854869abc" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "66e68e1d0f65b4379c2864f5228d98de265c5e30" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "674840a9e918ae6b7560a4ddfb60b96a32636ba4" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "6792d18ead88bff9193e50fa12c02779f2a0f4bd" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "67a66435543da4130940ccc47e3d9d164db65fd1" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "67df3bc5f86456f2bc57f75c99a0389bca7e5850" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "689a40b4f540d145f6dc4ba4079e17f84b650f9c" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "68ec6ebf20b30a31b09c7a35d847da342e24a3c4" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "692a1a4da0b418dd701f5133e2b3c5686015a3df" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "697f8deffc4b33738f1dc02e792b5cb4a37ead06" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "69afd0683057a214d3bb3cc7d438961cf8c8b200" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "69fd2b9233b83e54861436496ad6b9fb28afaf40" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "6a22049b6339e13438521842386a7118d6a1a15b" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "6a31cc57646f3d9ae3b63e1f604dde04d1ba52b7" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "6ac56f1ceee102b85819d789e6b29308eabc373c" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "6ad37e86c8d4b961b0302ebf0a540ae83f3679ec" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "6af2602221d2477af828ddb2c1dec8f70a24abe0" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "6afeffe32a56293f23d655a1d1b2bf31d616c2ea" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "6b0105812868d533882ea4f08bb628e5e9d811db" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "6b5ced188780878d8a72b3e6f02618db2bb97584" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "6b5fe85d1513c1a29fa825a343db7a80558e6de5" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "6b6945d5fd5172355825871803b93e57c5040653" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "6bd29846f9fdbf3efcd3c5f3beff837ecbe9f4cd" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "6bda06aef03a04b8eb3e4c7d1ef001fc806f5f6f" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "6bed38b822d8823a2cb71883522f932cdde95b0a" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "6c14bbac448312636b86fe713185cf7d8ea6f1be" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "6c3bed6efc677ccb136c0d886a6f3fdb375798c1" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "6cc6da179301a7ec4290cc0a5860a42ad188399f" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "6cdf4bc6759fe45be60aae1cb72d3fc2bb7f2d23" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "6d1f3f15f36d76d52d65b1b78a4ac85e91f33d25" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "6d27b8cb6b9af8a56fca98f13033d15f10f66da4" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "6d33e2eaa419844043bc41073bf3a2bc0a6c1b1e" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "6d9834013a85a25df2e3dead1986d753457d7b67" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "6e0a20c94065e338c7715046a320ff4495b4fa84" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "6e24d18a80aeccbace499b6d26b655633c0bee99" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "6e2da6b24262f419933bd63b03d470ba019350e3" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "6e53f8efbbec77187f733cb053a53a28e14ade81" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "6f257471f06ece199232aaaa082d2b1ae7ddb483" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "6f3dda610ec5a3722ff4ab49d1f215dd26bd8ad6" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "6f562b4994dff65756e316febb8d5a5b99e11420" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "6fc7016fa33af287b3b9cacd092c26bd9a054569" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "6ff9622ab3c22e4357e90274d00291c527991d21" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "702433f6bfbd76274ec1bb641c4a0428298487f1" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "711b5163728968ec016a924238f743fa04f2d11f" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "714213a080e1d2988acadbfc5e441df5173f81ba" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "7161527e54370ad8fe44bc83d692b10b9f9b877e" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "71a2fa577619a37c2e2336bb6c20fc1af193860f" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "7213c423e1db8af095bd3cefb15e43c6067635ee" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "723bce7438e7c70d113e954e9aad5dfb4551dbff" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "72969d083705c924922b857922930f2087426ca0" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "729af7294be595a0efd7d891c9e51f89c07950c7" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "7343c0aaebc045465ffebca00e201c1f554c2eea" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "73c85788bca3bc1fb2e9b3056c595a4a7b3d2e46" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "73f9912db6e86599f256f090dffd915a845a9631" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "751c9d6e9b6d91897ab1754b15b72712953de9be" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "7528088649b574b14d14f4b5ba45285eb8a78ffc" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "752e929cfb45fd739923f562b146db315b8cc4ca" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "754144c0c9b9fe7f9a8e40df23f3c315a7e244bc" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "7642513288c9da66960a6f3df0c156a8e1dcb119" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "769277251b9d3f0906a338f156238b159bc126dd" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "76ca5805dcccf57966da8489d1720fb8c5dc4b81" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "76ea1b9309253b5c03bbd6e9fca6591b51fb3785" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "7702eec59b0ee531bef08c14d0e6c89e7e43ebac" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "7797a5c4bb655b5ea51bc966875abb3b19c0d105" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "77d724d278fa787544189c4774f03849be2868ef" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "77f14e248490de6b7afb327c0f013c54ae31d2a6" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "77f263b8c785ec73f9f77dd11ab64fb0089cb164" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "7845e6c6f5d014cabfeffe6d4d9d18c547d00fa7" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "784c21d8eb231135ac99a64dd2ee334b045043ad" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "786102f7205ad86bb77b14a1b80d8b26cbf3562b" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "791812110230af4583a4a6dff7eb425b0b0dfab4" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "79225179187b35144fe9e8505cce2bcff3986ff9" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "795d6e09eedae3febc172169c017fb67aa62efbc" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "799b6226b099fc75d1fc2cf6f833bdfc1fe63e48" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "799dcaea1d20bf1428807757a84d6792798b74cf" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "79cf9a7b86c0a7adb03ecb8967d70413f21b925e" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "79f2d463ce2404b3e77db5dea5cc19d76ac223dc" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "7a315595e01d6e16134063232a01395187c9650e" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "7ab73fe69000d4087d0b9ceedfda0af8c4fe2d2a" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "7ba53872256e6762bbfdbefb1bb80b26f94df9f1" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "7be1a5856ef5951cf1991b57c00f73939c7030f8" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "7bfac062ec8fd11810639cc02f02aa8c61c6cfb8" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "7c26d9c9b73a75f1a468d06bd69e08f4d316845b" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "7c41aaac568600537f36df0e35cb625dfbed75a7" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "7c7d893aa4fba1deebfc9a5a14b27e2ae7f66403" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "7cadcf3f4031ebc2bc85040ea16d1ad26ce1704a" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "7d3b079a8306f7cc89f1b9b23319ec904e3ad853" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "7d4e21638e756b9953576f460037cd702d10211f" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "7d699e5ea61a26a7f677478cc79887e2f27ab345" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "7d8dde5a13af888557ddd5b931dda20ae59e9e23" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "7d8e57afa6550a1be621fb6c083aca311a1e229c" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "7e15566ad3e90f3c4c12c4d7fdb17e12c24da66b" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "7e2a31e29b84cb193202609dbd86ebaf9a83c119" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "7e2bd10d506af5eaada030590c8073495230f37c" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "7e44d26c7ef8dc51a45248573f6a8e5a9f91a0ae" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "7e9f915d9417cd7bc8220546680fa5eeb73a2192" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "7ebf86bf849b6097c8af6dae10c52438538a0711" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "7ee27699bf52e4db7f72b3f2591f48e8ad7972a4" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "7f0506a35713c6a2c68152d15a4bfb1ccaec98a8" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "7f16eb03b09934c61a424e6a1c4649f193d157fb" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "7f3d23738538a34184e3cf16506685cf0884bac5" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "7f57dd2b577f0d5cb1fad7bbb2cf8f07ec0f0199" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "7fe4672c6fd2a05c7a91676e5ae2e75ea197567c" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "8069a4fb09d35f100d18c98d02ec1bfd997bb893" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "80a784f83657ad12a742b94e01c3bbaf3fb2c6bd" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "8135c9c23bfa97243ea79214772816339552f835" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "8142cb33b22222bb9e39a66b53af12c6ca0b5375" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "814a465f554f949e6e2a6878539c705f319c627d" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "81b26e12027f5df776edd5539791e683dc2e57f0" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "81d6578dc3e3c0fb07a8d62f66c1eaf3b97dc2ae" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "8228837a1a7d0ae41b857d852a8dd6b7c6cb3e38" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "82afbc3f6dba388dba71ee35f56ea772a53033a8" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "82d03794122107972c0d075f16754791224b507c" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "833bafb51e8a34c93f3100430fffc5ba61ef95c9" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "83602911153c9c176419a17276ada844bb932527" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "83802f999d793e8985b916465ccf6050195c0167" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "83abf69971313b011ee30466e8f703a460400557" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "83e3e5a16d3b696a0314b30b2534804dd5e11197" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "83ed885c9759d5524052681a5602616a4d565e87" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "8405a655c77ae3ebef4410c924cba9ef22a57f42" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "844301835752f15f39550cdf531e07ccef5d133d" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "8507d90ee605e59469a35fdc78e844c59894e003" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "857109cf04811d5273ec3af3f3d3bb56e93d1dfb" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "8692f270fea1b23b492dea1755f48cdd1dd78534" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "8703df2417e0d7c59d063caa9583cb10a4d20532" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "871986919b8ac4032193739eeae09c66765f0f15" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "8719f47f3dd875955760868a4fb23f761cf7d4ad" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "87946e396d4fd04d02f117adf25ac427895878b3" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "87b02d6f0e02d90fb05adf14ae74570ea8ca6aeb" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "87b27e4b436adde9bf724b4889980331dd038d49" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "87dbe63fcbb0c90d20021f9c01a03e7d94916b3b" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "88a16f4f893665cf06d9ad7a7ede8d9cdf833b7a" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "891c7f214e32206e8f497fdaa7ee419e2e8f3ddd" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "897003bcc0313258e7a3517771982e05e4cfce1f" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "89e81283794cb458b9590002ce69ddba3c976a42" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "89f02008028773d99248943a6bcb14200f4509a0" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "8a05aa8ab787526a0591016c2aee95037b8a478b" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "8a2cab44ea3d5c52c704f060f4088e505791a57e" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "8b0c28ef1527a918fc7dc134ee6c00f069c7073a" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "8b0dfaaf9135721f01f3712572ea9963d70f49c0" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "8bbe1ac3ee5866589a669dd95744af5ee83e1b72" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "8c25b51ae5745b82c7b489b8fd4a9994b9679a0b" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "8c2e2a704d809931e711b89162391f2dba837406" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "8ce9124341c4ca3c690b29f3575f3cb9833c8c3c" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "8cfda5300d7544327e32aca175840f90860305e7" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "8d7912a42951e7201c8854b98a36e4203508c3a2" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "8de072b1fc7f48cb2a42e7ee579a462e50e4cd8c" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "8dffcd74e5b5923512916c6a64b502689cfa65e1" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "8e1320b630d8a411819c16dc0edc2cb77ed8049d" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "8e15b61b6735457672c8d4809e30ca7877e9fabd" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "8e1f5c577cd5a404507687ef379cd1e41c4a9a9e" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "8e4354916a56d367dd99d3eb120e27a1d8ec6e66" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "8efc24fec9b67ce053a55abaaedcbbcc64e97eaf" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "8f55e75b453fbb3071e4454119a33477c6028788" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "8f75ec2d8d77fd6a26f4c01f7b0384bd60418874" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "8faf239455a012d6ef377a83448c8185466f8511" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "8fb5af158980be77e5d137ab6f95000407041099" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "8fb5f5dc4d66ea0233a652230d44299718cb9f9e" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "8ff9fb732fc13f492704a9f47c47db4e877f6dc3" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "90344e80aead27d6b007ee73dd8fd8169f870f51" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "90f8d2eba99d7e50525edae64a61a28526eef894" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "9137343457792227d68316f6ac0bc3518a7702e3" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "91aaa30b2bf342c6bb6a315251ffe5b7e123bfa3" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "91acc7d4c4cc7affac116157a53f5614959485f9" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "91c87b19dcd811fc5efc567a022bca52d5e2e252" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "925cdeaf40df0ac82648432e65481350417fd848" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "92bbf48cf4a124ffff047cad76c82db1a1889803" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "931543d59701f1a123f3850e4c6e4b0ea097ae5a" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "93840036a3c19b1e91ba0ea10f95a5041ef61a3f" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "939023fa69f246b709a97f16c37367e36267828c" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "93a5ddc7d7b2a2bbb7a61086aa6fd0cc9e202b0d" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "93beac08e1b6f1ac32c5ee628bc4356feb5e54ea" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "94602cccae39d50fdc504869eff546d1678f0ae2" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "94bcc8632137dd2d666003e33d1e7c2fdd6e95e4" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "94cceeb51248e76f0fa711e92986ad36208f6e93" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "954933598dcf8e04d6f4ae5b311673409e85c809" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "9580d4c2c6795fcb1ec84bf6a58b873fb2737788" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "95a4d7cccb5204733874fa87285a176fe1e9e240" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "95f36953203283bc9358f396b627dc79480a8ec8" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "9606aeadd83c5da2a613b0e132f0a6c13cee43bf" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "965025b3b611003c82c8c9b69b35b4c5444cde69" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "9663275f953d54a345f3dd00e2eeb0f156710129" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "96f4278992ff6da5e8e60456279d9bc5d1f7a845" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "970e2fc1f55b1e2b214f84e155ae6a9403f891b3" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "97316b1fd92c5e6611acffe79899064fd9274c8a" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "9747756fd264dfe7fbb2f46aebb3e9b084ccf45e" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "974beeae03d1860c485c0dbb68e5413317770b16" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "97a3956189161fe3d52554c2a599bb619983be5d" : { + "balance" : "0", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "97b61770815f0589776243ec8ffa365b86548b28" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "97c99c7f158206d19196df8d21573126569d918e" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "97f0981b0a6cb647dd7b11b52c92bc1a3206d2f5" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "980410833d9ce53a0f944ccc629032fb0e6ae6aa" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "9848ce910f5874ffb5cad5fdc3507e8d54fd668a" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "985e84916da5ee358e1c119c9b12ff133da52d29" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "9862b64181c8bf5bd53e51c5f596528ff82bf652" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "986e30c8512ac023f09da460202322a88e98aa66" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "987600e63a25755048e018d1976d8ec4657f359d" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "98ae7604effcc8bf6accb109ebf78fb6f5dad01d" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "98ae76bbf3fe4b779df55df06eb0081ac95d660f" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "98b163f2929e5c92709759e3215879acf32a3a98" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "98cf6cec29c58634b6022fd1e8f54f912921eef3" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "9917620c3df2e3cae0f0e690b4da82221bc26efe" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "9985ca2474151f5ab79a388ec3b0d6fbf42da1fa" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "99b2fcba8120bedd048fe79f5262a6690ed38c39" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "99d6d7fe1a4f0f7d92837486a1f9d7dd500edc11" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "9a0ca249b7e4f00f62ba5230a602c3233895cee2" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "9a0fa2b2dd4993b5ac3370b4047f5e4472121674" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "9a2f4d9e7fd12bd7dd8141098bd3363bb644f068" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "9a45843cf7ed63ab79f7df4d2bf80512d259b0c2" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "9b0a69ce744a08c595426d7cfa5fe5f4dc844a25" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "9beadb15fd4fe1f0755ce82dd160e1a798544a1b" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "9c5fc050311de43f7b7d9a66e8319ad3c051a252" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "9c89251856283a8e3aed6d801ca965fdc1da4aa7" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "9cb15938a825ff7c17ae775b6454730983522906" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "9cbb5a7f2afe219ffb9b787065cbd94ad44ebd24" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "9ce1b776e1a050af28b1034980a628b7728b0831" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "9cefc7e38d2a714318e5c36c3c21b226b10218e7" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "9cfe89d89bfe28ba95777b6a90ac7ed86b0e202f" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "9d0e24467eaf9b797b9e3f6a6084958889592ba8" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "9d9fcb724db6738e2ed07f6815a0e5d45b3042bb" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "9deb7e973e3567140c51750e92d7c5091174f506" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "9e30a8e67c1dc0ddcbcb8c0d957101801fd250cc" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "9e8fe9f31e954787e0f9d01b4a7a0c8d3d320614" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "9f28528f2db498c3a0e79b15b97d3b3e9357e942" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "9f42a00ab7bea15357b54e16867383fdc02e7060" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "9fbf90147bf6ca022818372bf38637738d553552" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "9fdd9d67e3e2c78c419e3ac9bccc7322041c3b1d" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "a015c57718562f3839cdabd7d4e9c86f1a321a1b" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "a02b80b54ccc306e042c286172ba903dd53fa4c3" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "a06ebfd07c3daff1115b82d67be5bf4079ef6ea1" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "a086d90b189bda22a2ebf3e9b7092f1782e4fe84" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "a0ebd1b4fc0821dde34f102f6030fc9c40b29ab0" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "a1230890b4634e4461d6295fef3b4ca6d8899bd4" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "a1ef404093a02445fe14243e853a641c23ecaff7" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "a20b30a1e7723ce15f80e9706fe9c1ea05170a2f" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "a24089bde6e39fea0d157ab9aa4173882e62f39f" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "a2442dd71a4e937fd73ff383067f97ad4c83b4a1" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "a301df371257a12c7bc93194ec045d211a2d4359" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "a30dcb9cfbd0e8c874e4f919dbe71be3545464a1" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "a318ee3c41da839fa1002dba1f9a140274ce59e8" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "a31b0038c42665206876c410caf02e67405dcfff" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "a31be87c0ce167d8e9380a34c7d5004e42f37840" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "a3396b3bca8473c21f9ab1fca8a40ecd580bc625" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "a381c1eb58a73d7e7c8b857fcf3a1b50c6116e1b" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "a3a80c15cc0e13dd1aea5949c48ad5b120a8d831" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "a3ad081c8f3b79ad20285e881e0e4d011efc012f" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "a40a11c1f943538e64466de3b3bf8c022b883094" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "a4202b8b8afd5354e3e40a219bdc17f6001bf2cf" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "a479aac07f3b83ee401944a36812d665f54ca6f7" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "a4a5e07598b0d6a40fe62ca88813b63a1c02710e" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "a4cd6039bfcc6295533a985631a151bf2e0e8b21" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "a5303b50e97dc17384209bdc3723ddc6eda7aea0" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "a5552ed8dae24eaed9346af3186f634d38ee9aaf" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "a5ddf08c7de55ca258e346fd1acb1b71cc2f8829" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "a5ec829bcc187b6d19e825b5b6f12f86f81cc063" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "a60724458ce6cca04016e99826fff8c99c32e3b3" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "a6495f085bc30ac47e89a9a700e406e26286c3f8" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "a65929129c13f2405697b704fb1c840987ad36f1" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "a65ece83e15c7320aa0ef7ff2d69c2ff61fde661" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "a686b20553a38e866228ce003657a71200957c3b" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "a6eab9c538a79d9ffeebc5d4495fed68dccacbd5" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "a71525ab6694ead3c1be0aad07bac06e69192524" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "a724835568fb5e3986c1e87331a18b6628b73e25" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "a7547a96b2c999509ae062509a0d426fa46ade62" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "a770dccb354eae253f170825000386233ebed231" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "a777e559211613e73d9d0cbcdad62c88957d6f25" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "a7aaf603309127956371841badc44b69252d142e" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "a7f111e1b259c9bbd4beba8ebab4dd6d35bb9ee3" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "a89361425f7403ec9e757b5d1a31993a79189a34" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "999999999999434776", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "a9647f4a0a14042d91dc33c0328030a7157c93ae" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "a9ed1d8a969237243d26f8728287cb3eb8730662" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "a9f73dca799231e385ce5038c826b03eff0d1145" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "aa6cffe5185732689c18f37a7f86170cb7304c2a" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "aa839cff1f78242d01a33305e1d9973cd7c66d4d" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "aac939ac7c11bbbfb7f4520d14442a2460a51e87" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "aae4a2e3c51c04606dcb3723456e58f3ed214f45" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "aae4f6978a8eb4a7be406a2a787d31dd49cd551e" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "ab118214a2227c79eab2680df0a96d0ad67dafd3" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "ab1b93b6a83c275972ec2a6b513c3106dda84f47" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "abf67dec2d1ec31dd111c2f1135818b6af86c662" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "ac0dbbd8aa555e012e1b5fde0b4e1f20e30a057e" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "acbb287ca3f98d4775dce56e40ffce57ce4ba179" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "ad02a5cab29480ea5b67e354b0da540082500327" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "adecbe660a4943fb6feada38775e51259ea15af1" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "ae17512fd9edf51989081b42962b2fc85de4a2d8" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "ae5837876e23fcefa0f204d7b6433966ebb854b3" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "aecb52facdff422fd67875967e9278a7b872af32" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "aeef5b5a721ea3c03ca909bf1f71c122ebcd32af" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "af3cf705624b239ce07280597a55dc8ca69dd086" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "afbd8818fe046adfa468ea58a217b83f7d5e75a0" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "b008af759b5359810c78d181f0743ed85c286116" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "b021f73dfd1500257934aacddd707e6f67173edf" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "b03a2acc80fce6d54bd1db95d7ff24123ed6e106" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "b0a10fa71a1c4c621345666be094909ac112ec82" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "b0a9ac49b7fc9a45c9e7b358cc2e9e09dfe361d1" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "b0ea2ec7623a1faebead30c8007b260a4c62f99f" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "b0f8d2e75cd431ef9d818a2552aab19a6a99c1d3" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "b14b3e0660d147b2603ed92fec4ff337e3c259df" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "b15c7770a476be2c77c3bd50d60ea6b2cde3186d" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "b1691d2608aea9d7a56083dc7dcbfacc93a4287a" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "b1ec052c576186de285bbd31164de3b19a844dc1" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "b2c10a1979ac6236e586ed704cf9dcecb034b8b7" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "b2da69bc3361eaf80dce81a17d610217ebbc7a17" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "b2f828407f1a5fcbb1e4ec079c22d791c7fa5478" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "b31b1fe90a535ed66dfaf1bf9e1062190fbe88a6" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "b376b876f7137844ef5e2db1e307713885ee5d33" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "b39c43369a4ec5e4b2dfa8b3dbb3a12bad630b30" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "b39c8c3ee619a2946cf540cbf16720a881110f83" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "b3b4dcc6ba6c6d8c352684bc69a135cccb2d88fe" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "b3edb875f0dc5faa556edf77a97e53c9d828d146" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "b4429d6274f10ef0b7ba30837c5de603ed4c16ef" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "b4481bed4acdd11d8f22f535016a762cc87845c2" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "b4c315d98fa6cbed10c6331e2a5e4688ed0b7f7d" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "b4c898e7d827a75d991aec0a837c23aa8d9041e2" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "b572b99fc06b16a232d74898e587398d25d7d33f" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "b5f4de69833ef9f1392c74a5ab905c5cd1ab2874" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "b6367a493bbaed7334456b3646e4541c9e96012e" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "b651decbba52842e8fc86afda1168ac549dea7d6" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "b678cef4a4ba3f3642fa128daef4ed6d50ba1a0f" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "b6bcc464b7b7f0359e87e9a9517d10823a2e0c93" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "b705cdd0dbc620e11fa470f9b4938c5f9f42d84e" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "b7650fa902a0ad81e8d48deb557323bfcf32efdd" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "b78428568fc511f4a6ed34c2d57c4e104138ca98" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "b7b7c5f65fc11a6bee686b9363884811be247c43" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "b7c425948402f9382208346ff48ef6ac4667baab" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "b7fbcbcd3389df89233f8bf6bfa8acf892958a33" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "b88173b953f6c1b613b6e878cfdb34899e3339ac" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "b8fc89fa4eae09e1b4bbb51f4c1791e589368801" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "b9261902783bf36bab49f18323a9c8e4ad86519f" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "b94d3b46afb9954a375e50a6fede26705800a057" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "b96672ac912cc5ad6f75157401ccd9003512ffc3" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "b96982fae6a70aff19c2d99c3b2adc57b151d784" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "b9f7e8e7ea5b1a7f184a152373526ac7acf4477c" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "ba158ff71047c0322b1474461f94c0246d0dfb2e" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "ba3adb3b7ccccb748a65932e0254e52ce092c5b5" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "ba56f0f804625c0ff8b7b119bd03af0a10b5886e" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "ba70f98f64f041290dd6794e5cbc9e8144c8c914" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "baf332c908b38d0c5e825b41a500525fa990b0cc" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "bb26680f6bb423720c6437fab35913d0a86e2a78" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "bb7a0556525b43c750e380a0ac1ca3bb719e601c" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "bbdb82e2b1ebae617370e1c27542ea087a4fa937" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "bc2929a7819bb70f10676f4bc004fff40ce5a52b" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "bc843b0159d8f7cf6fa1bda55e3ddcf78e1617b2" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "bc845b8623c7af6b07eda7a5363298989cc007db" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "bccf73dc6498406a51b4183e22c4be57de5c4975" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "bd4f71cc4a8facf8612158e418fa394cabef27b7" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "bdb0e729f9136a166efc4ddea366fc3b6bf6bf5c" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "bdd290243af494ef27e986a3cc432ba3f873758d" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "bddd1619fd3c4703733b1648b7db0ffa6dd09a19" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "bea830535682332041ad318232044f5e914af083" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "becf51bad165c4b8544ecc57c7859ee946e610df" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "bed1a42fdb56c7d562a773650bb2785737caca3b" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "bf36bc1d23eebe66f84a0f119552dc7b46fe2402" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "bf574eebdcc7ff3617200fe07c8c7154a8d129f4" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "c052f8b19df2c41d807bde1c041a8ba2e87f15d5" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "c06bd5d93ac2ecab95942d1639b700e3a2cc48b8" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "c071690916c15657eba376c7c6b4b06d38e815be" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "c07b721215b231d9820dc8d186e3dcabc6c75e66" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "c0cbd80b185007c05f50e6f2fbb03e8d6b2ed652" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "c0f36c8efba9e6e4e677faab240ccf0cf3e7d03d" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "c101a7eb0ac863e824eea705432530c65aa0c518" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "c19f48a0a131e8b9f44989bbac80a30ffe2a2e4d" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "c1ab531ecade623c0c908c1fbf104fb8c647a37e" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "c1ff6275aeeeacd2c79dc02f8cd5cdb44a81e6be" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "c20cf04f10caa057314759a2908524925294efb3" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "c291bf92ff9bdc0e60f049e6a5b143b940658857" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "c2a603dfbb0734c098e5b6b7c8a9b64bab11054e" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "c2afed79b83fc6b8d98802f52b1fea6648571ee7" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "c30727a70f64c82d0d8837f1b45b931ebf80b106" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "c33582140ad3da6d7fde2c3c73d0530cbde93555" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "c37a43e940dfb5baf581a0b82b351d48305fc885" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "c37d1d79868b6a4c25db68301b8575ae4a8336fb" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "c3d826f0bcf2d353afaea99ec55eb9162438e315" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "c4170be517e6c67a9e65dddb09220df58e547102" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "c44e39eed84adf0c399a9d5af8d0053715d0f5f9" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "c489e22b54124b98b17b68e7c38676efb81c1862" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "c4be49d4dcee6efd96c35ddf346b969db9981091" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "c57abf0b9724f82736bee2a05a9238a45de5512a" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "c5a28cdc8c4b089c87ed4938ed4718253c48dd7a" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "c5c5d6ad672b24a2ddedbd2418c4c131c212cb0f" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "c608a6fa0f9f3a6af68270740ed6c998e145eede" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "c694bd4edd4e806b9c7d4ad742a3be423391470b" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "c71253e1b049c2b5acba1893c74007a26797e111" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "c71abd039da56d4c1d783ed06a48adf0808e9cef" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "c775193c9d81ed6ee806f6005a874b927e96ff19" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "c7e31a320a9a7969a6f4c3cf98bd6d92a6119055" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "c82d5a989ed7c8ffdf79ea0724b3c9ba3fb84e57" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "c8732f022b6c57d291b26c830c651b3617c75b2a" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "c8b331eb5ad444567964f34dc24757bdd3425943" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "c8c3cf855531e1d06c07245e76c5298b4fc90d8a" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "c8c90ba51e74ac5d9e462ffcafbb6df11795ebe5" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "c8ca05f5e8391cd5004c3c4020e570ed4a520c20" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "c9113ae38fc632738ad4722046d8e07ba9363ca7" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "c95ee3b530d4b057840c2d9cb542a51e4e3a00cd" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "c98b82b246d3eca7562ae19d8ca605e77cd53a3a" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "caf720d275e228b58bcd8b2686714ed8819cdc2b" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "cb0ef5a0d3f9427d66aa2b00d4b25c2445d96cf1" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "cb5e208c02a68f2d97601da482c419af989e097f" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "cc0302264a5d0f269e26ca3ac24d7695b562b4f4" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "cc40f2616fb396bfc25e9b22ba3218b2b217ea3d" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "cc7c2f8a3070489cfca48f5fa0db9fa2d65e40e4" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "ccc8cd23dc6755bbb516af6ef2a04cc82a5ce5c7" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "ccce4f34ac3a550c95747823a00fecce349734f7" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "cce1e6f23dccba1aa1830b1b7714fe985f9f2032" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "cd1171381ba62ff31b56a001b8144e64e365eba1" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "cd2910fb9ae3395ed149b28a1ce7c3cc58bc5481" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "cd5fca46bbc468b84b493f7b52ff50386b174d40" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "cdc1f2aa2853b37723f415aeb181583e11ae7b8f" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "cdcc86f0d7e95ea5b2f9f5e802015c8ff855b257" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "ce20ac750c9549b466d48c90352a255f6b7c8294" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "ce7600131bfe22040ad75febed54cd4ad181276d" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "cebebe455b6a15d2e4705ebe51fe5007afda76eb" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "cedbc4eaa94298536ad368e8ac9819c5e7448738" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "ceee86e99b04198c09fc8ebf3e2f45253bddeed5" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "cf3f58bfe41401084fd1e997e8e36dfb35e363cc" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "cfb0d9c00c0b7ad292f221584394a3ae7d30e0ab" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "cfb86844738d5373ad23eb3185e1e9fc5d517ae6" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "d032f83c65a584f6e47f9fff9bc864d51a164a94" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "d09a49b1cdb208e2504486267ca2418c87152962" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "d0a97217cb0a4211e28a58222c1b038c44a3f211" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "d10afb219e80a211c9072b18de0ff2317f67e573" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "d111da05d7193bc295a4956543810071fcbe4238" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "d19b2ebcfea3994bf30a7e4283b73d4bdd319cbb" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "d2468d6da54259507d07f74ef0a246f97e52f035" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "d2571607e241ecf590ed94b12d87c94babe36db6" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "d25b7ae72c049f91091a4abedc4d618e5a05e1e0" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "d269786262f853ed769ef3ea9a7e5b98db3bfb32" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "d2a0b130c0834eb0ad2717ad13233242280a6fd0" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "d2be9413f150b2eaf2666b42ee719fc66e5066f1" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "d2c8bda3e1481b96b4a3ee0a2e1f3f1aa6299feb" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "d2e450aa145ce97dc054b1bcf391407fbf202bd5" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "d3a4f3cc7113eb16572eced68ab395a40ceeda1c" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "d3ba8bc2aa219ba0aacc8960b92832c3b0693bac" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "d3c1c3359ed1906851379272964b7d96e2977654" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "d49825eca3314ad0c5918472615055010cf4a4fa" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "d49daab5099319cdda477f5ba715ae685c031db7" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "d5144e55ee02feec18f2ff293f08b8379d1509d3" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "d577d44f2748e151afdb1ded254c942ca9933b0b" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "d65386ce109ffa3570dd27e54f32e2528fe01fc3" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "d7409d185224a0284e7451923e3d094ec309ef92" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "d743161f0f7beed30155e171b4d577d5ce2a70d3" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "d758e9a701769fe9e5a80b3a09180e7631866f55" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "d79995f1fbdf19beff429a94fa9dd184827c68c4" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "d7a36da4e6e26a99b038e34a6eb74d10d422ba9f" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "d7ae2e59d0776d0ba96fb4b23d1eccb3d57a14eb" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "d80ba0ac6edb71367c1634ae5bf72970e596a99c" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "d87693ae6d35928467daf90aac749654e9c57644" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "d9860a22b84f982363ab9684d767a347a5c4fb74" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "d99befc655ecd5df508569aaadd729af7371687e" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "d9d8272a3b205f71494f9009705f4f30dd31c607" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "d9dd1aa8519580888c402dd4fae66ca68b4a7b47" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "da1849a4f9df2e58d30c94732ff5f3aea19ccd8d" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "da3580da73b2986fe0da9b6caebe17818b7b3645" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "da5828cee8e61bd0d8af71ef5da9a7a9019ade13" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "da7555a43e7a3790290cd20a19ec19032e28a6dd" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "dae44ad9bfab81783c1dd591ebe3409fa8967883" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "db06ebb361ef006c17f89ad92165185a38f6e630" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "db4ed990c69c3b67a04a96ccf079649facb9c433" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "db58d0b35d26edeb0efcb49f7eb627cf49bb3a47" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "dba37eb3483100bc89a7bf11b7f110ad71ecf41c" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "dc19c28fa6124ee9d0688d0e2879f1269b4b7fc5" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "dc1baaa8621b513d62e8aeb02543ce5c7b8020c0" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "dc280f2887ea315f70692eb247e399b18a07bda8" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "dce512ecde5a4c27da464f846e71c8272da4ad80" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "dceb9854f220556f595bd655bf6c023457341e4a" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "dd0eda6e9a3dccc3d430e5dd333c83b759cc7883" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "dd8317eb76e8949315e601fa8a6959e2ffd277c1" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "ddb6aeb5e1bb4cdb44ca3a9b979996c529d9fa3c" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "dddb23bf0a55d0197810e062a5a24a1503705ae5" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "dddda651d375f5352d2ff488eace1de63b6ffca9" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "dde0b1e9b9ecc980c5614012f9afae25cb1a1c16" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "ddfb1c855ea2b2f198d2b6c7dc8ea0ee16d7319a" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "de63eef4b269d8572b6b00574ad8e34c471a07d6" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "def94fccb1b7dfbe1cf0b3dcaa03a77cf58ae768" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "df50b2ca876e4174d276dac0c64e644cb1b5a118" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "df5767dc4d8111e8641198f637e4423c62e57e27" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "dfc26965c20fea217850a28c08021f1468146101" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "dfeb403cff0aabe20cb07d8451caacfe31260132" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "e026a4835edf27c2705c97f237e5b59b7b5da1f7" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "e059d3aac9a568120467ddbba3e4d25bbc82dc64" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "e089f14df5e00aff3b03cac5e1236f5cf5832d5f" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "e0a1885b4057f65dc75636f4fb0e4b57da82429c" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "e0b3647d7252d53d397fa6af6d9da4749f4caadf" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "e0e5744863b26418baf12f94f0bdad2ef2546a92" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "e0e8eb511c8a93cbc42dec4e3c0b8492ca1d81f4" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "e0f04368af17d56c8cdb50f0fd5f1847d9a49cb1" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "e0fbdd03e0e490770d671965ccce5f5ed42bbb9d" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "e134cc9b2be1a15b9e270a9f7baacbda3c8b3659" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "e14b8b08ed9b569d2945b078fe94225924c5987e" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "e1954d1413f4f50c7bb3aa0ee368b94dfeae7c1b" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "e19f216f6b8b78ff1e705cb56d0cb07db60a05ec" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "e1e31732ce0075070c8d7e2ef7a44b93949493d0" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "e1f79aa1d6477ffd08d4e5ce185637434147e4f8" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "e21b2668bb1e9cf057606c44d49648f1c140aa76" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "e24778b9ec00cc9bef91643e31885deee719207e" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "e28a959abf1b36ad7778737d992690cb73a51a91" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "e292ba16ee32e94ba88b4b72821bf90fe7b1b845" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "e2982af9c977c39cb4633346b916a3897ffeb6f9" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "e326d4acceedb3e572b98d4a45a6f1e37ee42501" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "e32bec776748185042cb02d58fad1d5027bbaeff" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "e3443d812bb8204255a1d249b82aa19508dff5c9" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "e355b484879e20943aca2c6655953ec8121b64e8" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "e365d9256480b1e9d3cc6eafdcad5912b75ad149" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "e3d08fe78f595bede290f820ec0e878572803a6a" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "e4028c8f2888697e9939562de475f70a841ee713" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "e475b2b441a9b1cdf24e0ea992dfaecedd58d6d0" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "e49d92946422e69977a94d1b4b769f97efcfb8eb" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "e50c29688b2c3dbe6633797d2a200ed7c2cb1cba" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "e59b406835db0d4c63ae28072c64c664da637557" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "e5baf7303b008f333c57491345e604d52fce0d63" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "e5fa8de537f7665e2aed751b8ca7c6b5bf0cdca0" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "e635349c1e038d62f774f4201cbda082b8af403c" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "e64dff0ba3f0eb9e054a638d4d5f6f0cb47e1e98" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "e6df36db61ae2c46d2cda2f6c8d1856ac181e6cc" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "e6f12dc0baf6536aa75f226bfb0262d8266433d1" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "e703236fc6d1dcc955b9abf34f490e2bf5057fdd" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "e71d6b1facc3de5c246f7d14e35a2b4a2d983c11" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "e74299a026e8a481c1db07e6065ca30af9858cbc" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "e75900e645ce8d1abbb97d408989b159b2a50a1c" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "e7b8aae66ff70d59fcc5a8b4de5a246081547146" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "e81f08cfb60f7c156cf7dcbee1b8790901a1eadc" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "e8373e7e464120da8a84da82c8137872cda65780" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "e857a6c6f502dd2bd0ec341b2d4ed55f2e87e8e7" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "e908278cc1515f214049c48c3a8908524f2cc407" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "e913f5b697154f99bfc159a132c6c253b457ef18" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "e93e7128f80bef53e3217782f21f4bd6a6d19c7c" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "e9d157e81c306452f8494f681813037b146660eb" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "ea186a9a4815581b71403480abae5cc7c57c00be" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "ea216bc75a65a838ea3d63f7c05588c2840ec1ab" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "ea2f1211c66cdabf2b618a4dd965ce133592763b" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "eadf36b1baf942879b0b5c45469fa05add1d61b3" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "eb203eec55c1da2fd38977032c79ada414cc914c" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "eb4e97f22f12995949c371f2df690f68f71070eb" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "eb5ad2481a57a6b7ede3a16ad8bfe2991eef3ad7" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "eb9414a32f85461cf4ac7c9c73761f3f1e5ab14e" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "ebff1a1539630b2f7b5260a93ea602372e539366" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "ec184f693f222b3e48622f5253c134339e7e2e7d" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "ec318906ab052a41ef13ea33deee554704a307c1" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "ec45f260d4d758d6d23ae0297a9516190d935a5b" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "ec5f2ac1947c51c5982eb0ab63d1e6439f45c2e3" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "eca2fc261f07a269c2487e6d1b0539d0950ff792" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "ecb643ddbca1cfa6dd22964c20ef57ab47c0fda9" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "ecd38089d14a75b93afa634276bbe8965f5642dc" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "ece9d0b9393f64338ec6ca5b0efbcec2175f19ec" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "ed1a5e97e3415b484e6bc8b84bd170dbdd879cb3" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "ee21d08004e0b6f2c1cd4bcb2a04ab74f7b7b708" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "ee439948c6dead863ab2ba9105b70916d45f9e79" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "ee6f3914a1e5d955fd62a29562ee0ab776235ff5" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "ef36b064bb706bc0540e4ed2b341ae8a0b7756b7" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "efe2a6d8859b14ecc69baf66dcd47f4067df18e5" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "f00d30ecf763691115d2314d14ea1e11f61ad874" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "f026ce3f255ef9fc7b93719a3f6926ce4953bfe1" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "f07ee5b0729c565f7b57995a108f94e4fcb81558" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "f0dc197380bc632e5078f75f5ef0b814b7eb2ec6" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "f12be871bc1a1f3ca254eb027786085dd79494c5" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "f134cf7fd6ed2e962db26c4b3d99ee5884102c85" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "f191a9c00fe780f63cf4f68a06e895bd53981254" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "f1970ea5af8456fee42cc087e79bd5c6a6efaa87" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "f1ba5e0a4a27d8dafcf87f049b178fe83574ac06" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "f25da1517af0e2fce2b9d75fd964e8827cc0cb72" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "f2866fb67103c69f10edaed228d2dd64b7e6df83" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "f2d3cbe7357ee858c2b7f6ea28fc95c1af508ca8" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "f2d923a66a9684f2268530094ce8e3f8b8cae52e" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "f3b37fd9258f2c883c44e8ddaa90f91bfe9f5d51" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "f3c5a341248911dda9d694ee74bf997365941dbf" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "f4489af2af8424c6edf0d0adc525680dea208a31" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "f475a28a9649aa00ab8a40af393f1961587c2275" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "f48270bfa988db4518f9b1db9e78bb398c954550" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "f49ecf0e4378b1957686d8d0b227f83e48e5523c" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "f4a32ec7fde64e7d3ceb53fcc00511ffe13ff5d4" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "f4d2d03bf70c2500fe431fdc8fbed2c13437bdc9" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "f4e76b020a22e8c1929ba2163e413385fc0cf884" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "f53e504312e2ff787bbb9ba4ea921e9edb7b18ff" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "f5472ede25cb83dc2fe392b01111133b777709b9" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "f619381383c69659fe81a10d695b2663426624d4" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "f62f676443b29c513964f01cbb356165ace54b78" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "f6ee7d8bf313f837bbfed7f10b16fb2f182fd416" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "f735071cbee190d76b704ce68384fc21e389fbe7" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "f74f956ea3d122e47f4aa0066b5e3605c80d0282" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "f783f583fc06d2c88e9e0d263a6ab66f8b8a0514" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "f78b2d97c8af245b705c0a19601b95f983e9aaf6" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "f78ff2d350615b858077a50ff85b3a9e2edcc995" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "f85aaa082ae886506141245ea3b43ee74babca65" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "f86c50909ddce25f4d4e71e16d78b2f6a244e8cb" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "f8e4de2f36fa5e9861fe3af86d05db4cae1bb1a4" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "f8fc32491119dea2b7fda5080ef9cf0027590265" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "f904cb6a599db50cc635bb70f3c23f056e39914e" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "f94e8e9f1511f8cede3bfd8e1be0db35085e8e6d" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "f9c7db4a48b918ad6e44d2b55e2339fdcde01d26" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "f9d417c0b18ff731a88a17f3b31d9d6ed1e288f1" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "fa849bc1ece08222f4bf249ca06a6468b3de5b1a" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "fa9c2ac45638e511b06ebe051411ebdc2c4c228a" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "fabaccc45975d14c53b830fd4fa0576da541d22e" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "fac000880bdfdbd780ffa7c4a1d5d8b4a1d87b03" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "fafa31e9b477adf7a26b651aa9913f8664e536a4" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "fb04fd4e715c760c91ddc0f30b000b52203f66a4" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "fb5d7c75f272b07450867579978314661c3e1206" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "fbdc8132551b0ed5c50b6c0f279097592b5c87ef" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "fc55e6958f11444ae56c09af726f2ec57525db58" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "fc70ade160bd76694149f3f439f5d4f78bdc483e" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "fc86915f4e8884b49adeb6f23a8f69e643d9db7b" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "fcdb751de1dc7c5246ce698b4b104016d034cfdb" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "fcf47e5c1414303d55afc40c75c41cf42079d560" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "fd096ec4540dacfebbabf2dd6ffd3493a09cc38f" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "fd09bf9b58980d6a5776bb391d8c6881bcca2ae9" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "fd0dea1a583400fc29051c8192b70022d8d92c48" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "fd437bf9d51bac3a2757bf4b8bf38045e78d5ada" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "fd5b134edd8931ca2102693d88070dd49fc13350" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "fd91b246a065cde3fc10edd6457b9e6c10fb386f" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "fdc6c80a86ea555b5de26c3db49a779eea6beb0c" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "fe4f48d16a7ec27241b987f3545423291c7cce77" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "fe686acb3b7cc09ec6379af828b4b3b638898130" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "fe8d768de7a723c23583162dbef207b6dcb4fb58" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "fed73d1755549bd523a775e81cf80a1a507eec50" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "ffb9bfb24fb671413a3aae05e0f21b870eeb2ab9" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "ffc4569dfb86db2e584a1138a75747dffb794466" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "fff1cd2c481ce0fba0c97ef77c79227d3b67832a" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + } + }, + "pre" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "20000000", + "code" : "0x60206000600039602060006000f0", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "1000000000000000000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "", + "gasLimit" : "465224", + "gasPrice" : "1", + "nonce" : "0", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", + "value" : "100000" + } } - } -} +} \ No newline at end of file diff --git a/tests/files/StateTests/stSystemOperationsTest.json b/tests/files/StateTests/stSystemOperationsTest.json index 8a7e0e6c3..a74d32ae5 100644 --- a/tests/files/StateTests/stSystemOperationsTest.json +++ b/tests/files/StateTests/stSystemOperationsTest.json @@ -5388,14 +5388,14 @@ } }, "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { - "balance" : "512", + "balance" : "507", "code" : "0x", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "999999999999899488", + "balance" : "999999999999899493", "code" : "0x", "nonce" : "1", "storage" : { @@ -5449,14 +5449,14 @@ } }, "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { - "balance" : "517", + "balance" : "507", "code" : "0x", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "999999999999899483", + "balance" : "999999999999899493", "code" : "0x", "nonce" : "1", "storage" : { @@ -5510,14 +5510,14 @@ } }, "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { - "balance" : "673", + "balance" : "508", "code" : "0x", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "999999999999899327", + "balance" : "999999999999899492", "code" : "0x", "nonce" : "1", "storage" : { @@ -5827,4 +5827,4 @@ "value" : "100000" } } -} \ No newline at end of file +} diff --git a/tests/files/TrieTests/trieanyorder.json b/tests/files/TrieTests/trieanyorder.json new file mode 100644 index 000000000..ebf5fbff0 --- /dev/null +++ b/tests/files/TrieTests/trieanyorder.json @@ -0,0 +1,55 @@ +{ + "singleItem": { + "in": { + "A": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + }, + "root": "0xd23786fb4a010da3ce639d66d5e904a11dbc02746d1ce25029e53290cabf28ab" + }, + "dogs": { + "in": { + "doe": "reindeer", + "dog": "puppy", + "dogglesworth": "cat" + }, + "root": "0x8aad789dff2f538bca5d8ea56e8abe10f4c7ba3a5dea95fea4cd6e7c3a1168d3" + }, + "puppy": { + "in": { + "do": "verb", + "horse": "stallion", + "doge": "coin", + "dog": "puppy" + }, + "root": "0x5991bb8c6514148a29db676a14ac506cd2cd5775ace63c30a4fe457715e9ac84" + }, + "foo": { + "in": { + "foo": "bar", + "food": "bat", + "food": "bass" + }, + "root": "0x17beaa1648bafa633cda809c90c04af50fc8aed3cb40d16efbddee6fdf63c4c3" + }, + "smallValues": { + "in": { + "be": "e", + "dog": "puppy", + "bed": "d" + }, + "root": "0x3f67c7a47520f79faa29255d2d3c084a7a6df0453116ed7232ff10277a8be68b" + }, + "testy": { + "in": { + "test": "test", + "te": "testy" + }, + "root": "0x8452568af70d8d140f58d941338542f645fcca50094b20f3c3d8c3df49337928" + }, + "hex": { + "in": { + "0x0045": "0x0123456789", + "0x4500": "0x9876543210" + }, + "root": "0x285505fcabe84badc8aa310e2aae17eddc7d120aabec8a476902c8184b3a3503" + } +} diff --git a/tests/files/TrieTests/trietest.json b/tests/files/TrieTests/trietest.json index 8d8c35f3b..ce5c2d191 100644 --- a/tests/files/TrieTests/trietest.json +++ b/tests/files/TrieTests/trietest.json @@ -1,27 +1,4 @@ { - "singleItem": { - "in": [ - ["A", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"] - ], - "root": "0xd23786fb4a010da3ce639d66d5e904a11dbc02746d1ce25029e53290cabf28ab" - }, - "dogs": { - "in": [ - ["doe", "reindeer"], - ["dog", "puppy"], - ["dogglesworth", "cat"] - ], - "root": "0x8aad789dff2f538bca5d8ea56e8abe10f4c7ba3a5dea95fea4cd6e7c3a1168d3" - }, - "puppy": { - "in": [ - ["do", "verb"], - ["horse", "stallion"], - ["doge", "coin"], - ["dog", "puppy"] - ], - "root": "0x5991bb8c6514148a29db676a14ac506cd2cd5775ace63c30a4fe457715e9ac84" - }, "emptyValues": { "in": [ ["do", "verb"], @@ -29,42 +6,12 @@ ["horse", "stallion"], ["shaman", "horse"], ["doge", "coin"], - ["ether", ""], + ["ether", null], ["dog", "puppy"], - ["shaman", ""] + ["shaman", null] ], "root": "0x5991bb8c6514148a29db676a14ac506cd2cd5775ace63c30a4fe457715e9ac84" }, - "foo": { - "in": [ - ["foo", "bar"], - ["food", "bat"], - ["food", "bass"] - ], - "root": "0x17beaa1648bafa633cda809c90c04af50fc8aed3cb40d16efbddee6fdf63c4c3" - }, - "smallValues": { - "in": [ - ["be", "e"], - ["dog", "puppy"], - ["bed", "d"] - ], - "root": "0x3f67c7a47520f79faa29255d2d3c084a7a6df0453116ed7232ff10277a8be68b" - }, - "testy": { - "in": [ - ["test", "test"], - ["te", "testy"] - ], - "root": "0x8452568af70d8d140f58d941338542f645fcca50094b20f3c3d8c3df49337928" - }, - "hex": { - "in": [ - ["0x0045", "0x0123456789"], - ["0x4500", "0x9876543210"] - ], - "root": "0x285505fcabe84badc8aa310e2aae17eddc7d120aabec8a476902c8184b3a3503" - }, "jeff": { "in": [ ["0x0000000000000000000000000000000000000000000000000000000000000045", "0x22b224a1420a802ab51d326e29fa98e34c4f24ea"], @@ -75,7 +22,7 @@ ["0x000000000000000000000000ec4f34c97e43fbb2816cfd95e388353c7181dab1", "0x4e616d6552656700000000000000000000000000000000000000000000000000"], ["0x4655474156000000000000000000000000000000000000000000000000000000", "0x7ef9e639e2733cb34e4dfc576d4b23f72db776b2"], ["0x4e616d6552656700000000000000000000000000000000000000000000000000", "0xec4f34c97e43fbb2816cfd95e388353c7181dab1"], - ["0x0000000000000000000000000000000000000000000000000000001234567890", ""], + ["0x0000000000000000000000000000000000000000000000000000001234567890", null], ["0x000000000000000000000000697c7b8c961b56f675d570498424ac8de1a918f6", "0x6f6f6f6820736f2067726561742c207265616c6c6c793f000000000000000000"], ["0x6f6f6f6820736f2067726561742c207265616c6c6c793f000000000000000000", "0x697c7b8c961b56f675d570498424ac8de1a918f6"] ], From 4c84db85c52b586d8c30f270b03671f77c9c2534 Mon Sep 17 00:00:00 2001 From: obscuren Date: Fri, 12 Dec 2014 22:29:29 +0100 Subject: [PATCH 49/79] eth-go packages ended up in whisper --- ui/qt/qwhisper/whisper.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/qt/qwhisper/whisper.go b/ui/qt/qwhisper/whisper.go index fd2b62ac2..d307366c8 100644 --- a/ui/qt/qwhisper/whisper.go +++ b/ui/qt/qwhisper/whisper.go @@ -3,7 +3,7 @@ package qwhisper import ( "time" - "github.com/ethereum/eth-go/ethutil" + "github.com/ethereum/go-ethereum/ethutil" "github.com/ethereum/go-ethereum/whisper" ) From f8061fcba8648593e03ce3d847613d8c8e0f4797 Mon Sep 17 00:00:00 2001 From: obscuren Date: Fri, 12 Dec 2014 22:38:54 +0100 Subject: [PATCH 50/79] fixed tests --- crypto/encrypt_decrypt_test.go | 2 +- ui/qt/qwhisper/whisper.go | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/crypto/encrypt_decrypt_test.go b/crypto/encrypt_decrypt_test.go index 850fa94e4..85b43c406 100644 --- a/crypto/encrypt_decrypt_test.go +++ b/crypto/encrypt_decrypt_test.go @@ -11,7 +11,7 @@ import ( func TestBox(t *testing.T) { prv1 := ToECDSA(ethutil.Hex2Bytes("4b50fa71f5c3eeb8fdc452224b2395af2fcc3d125e06c32c82e048c0559db03f")) prv2 := ToECDSA(ethutil.Hex2Bytes("d0b043b4c5d657670778242d82d68a29d25d7d711127d17b8e299f156dad361a")) - pub2 := PubToECDSA(ethutil.Hex2Bytes("04bd27a63c91fe3233c5777e6d3d7b39204d398c8f92655947eb5a373d46e1688f022a1632d264725cbc7dc43ee1cfebde42fa0a86d08b55d2acfbb5e9b3b48dc5")) + pub2 := ToECDSAPub(ethutil.Hex2Bytes("04bd27a63c91fe3233c5777e6d3d7b39204d398c8f92655947eb5a373d46e1688f022a1632d264725cbc7dc43ee1cfebde42fa0a86d08b55d2acfbb5e9b3b48dc5")) message := []byte("Hello, world.") ct, err := Encrypt(pub2, message) diff --git a/ui/qt/qwhisper/whisper.go b/ui/qt/qwhisper/whisper.go index d307366c8..bed23c8a7 100644 --- a/ui/qt/qwhisper/whisper.go +++ b/ui/qt/qwhisper/whisper.go @@ -3,6 +3,7 @@ package qwhisper import ( "time" + "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/ethutil" "github.com/ethereum/go-ethereum/whisper" ) @@ -27,7 +28,7 @@ func (self *Whisper) Post(data string, pow, ttl uint32, to, from string) { msg := whisper.NewMessage(fromHex(data)) envelope, err := msg.Seal(time.Duration(pow), whisper.Opts{ Ttl: time.Duration(ttl), - To: crypto.PubTECDSA(fromHex(to)), + To: crypto.ToECDSAPub(fromHex(to)), From: crypto.ToECDSA(fromHex(from)), }) if err != nil { @@ -35,7 +36,7 @@ func (self *Whisper) Post(data string, pow, ttl uint32, to, from string) { return } - if err := self.Whisper.Send(envolpe); err != nil { + if err := self.Whisper.Send(envelope); err != nil { // handle error return } @@ -51,20 +52,19 @@ func (self *Whisper) HasIdentify(key string) bool { func (self *Whisper) Watch(opts map[string]interface{}) { filter := filterFromMap(opts) - filter.Fn = func(msg *Message) { + filter.Fn = func(msg *whisper.Message) { // TODO POST TO QT WINDOW } - self.Watch(filter) + self.Whisper.Watch(filter) } -func filterFromMap(opts map[string]interface{}) whisper.Filter { - var f Filter +func filterFromMap(opts map[string]interface{}) (f whisper.Filter) { if to, ok := opts["to"].(string); ok { - f.To = ToECDSA(fromHex(to)) + f.To = crypto.ToECDSA(fromHex(to)) } if from, ok := opts["from"].(string); ok { - f.From = ToECDSAPub(fromHex(from)) + f.From = crypto.ToECDSAPub(fromHex(from)) } - return f + return } From 65e39bf20eecf7f3296fba531efb72ac28dc0124 Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Fri, 12 Dec 2014 11:39:07 +0100 Subject: [PATCH 51/79] p2p: add MsgPipe for protocol testing --- p2p/message.go | 77 +++++++++++++++++++++++++++++++++++++++++++++ p2p/message_test.go | 63 +++++++++++++++++++++++++++++++++++++ 2 files changed, 140 insertions(+) diff --git a/p2p/message.go b/p2p/message.go index d3b8b74d4..f5418ff47 100644 --- a/p2p/message.go +++ b/p2p/message.go @@ -3,9 +3,11 @@ package p2p import ( "bytes" "encoding/binary" + "errors" "io" "io/ioutil" "math/big" + "sync/atomic" "github.com/ethereum/go-ethereum/ethutil" "github.com/ethereum/go-ethereum/rlp" @@ -153,3 +155,78 @@ func (r *postrack) ReadByte() (byte, error) { } return b, err } + +// MsgPipe creates a message pipe. Reads on one end are matched +// with writes on the other. The pipe is full-duplex, both ends +// implement MsgReadWriter. +func MsgPipe() (*MsgPipeRW, *MsgPipeRW) { + var ( + c1, c2 = make(chan Msg), make(chan Msg) + closing = make(chan struct{}) + closed = new(int32) + rw1 = &MsgPipeRW{c1, c2, closing, closed} + rw2 = &MsgPipeRW{c2, c1, closing, closed} + ) + return rw1, rw2 +} + +// ErrPipeClosed is returned from pipe operations after the +// pipe has been closed. +var ErrPipeClosed = errors.New("p2p: read or write on closed message pipe") + +// MsgPipeRW is an endpoint of a MsgReadWriter pipe. +type MsgPipeRW struct { + w chan<- Msg + r <-chan Msg + closing chan struct{} + closed *int32 +} + +// WriteMsg sends a messsage on the pipe. +// It blocks until the receiver has consumed the message payload. +func (p *MsgPipeRW) WriteMsg(msg Msg) error { + if atomic.LoadInt32(p.closed) == 0 { + consumed := make(chan struct{}, 1) + msg.Payload = &eofSignal{msg.Payload, int64(msg.Size), consumed} + select { + case p.w <- msg: + if msg.Size > 0 { + // wait for payload read or discard + <-consumed + } + return nil + case <-p.closing: + } + } + return ErrPipeClosed +} + +// EncodeMsg is a convenient shorthand for sending an RLP-encoded message. +func (p *MsgPipeRW) EncodeMsg(code uint64, data ...interface{}) error { + return p.WriteMsg(NewMsg(code, data...)) +} + +// ReadMsg returns a message sent on the other end of the pipe. +func (p *MsgPipeRW) ReadMsg() (Msg, error) { + if atomic.LoadInt32(p.closed) == 0 { + select { + case msg := <-p.r: + return msg, nil + case <-p.closing: + } + } + return Msg{}, ErrPipeClosed +} + +// Close unblocks any pending ReadMsg and WriteMsg calls on both ends +// of the pipe. They will return ErrPipeClosed. Note that Close does +// not interrupt any reads from a message payload. +func (p *MsgPipeRW) Close() error { + if atomic.AddInt32(p.closed, 1) != 1 { + // someone else is already closing + atomic.StoreInt32(p.closed, 1) // avoid overflow + return nil + } + close(p.closing) + return nil +} diff --git a/p2p/message_test.go b/p2p/message_test.go index 7b39b061d..0fbcfeef0 100644 --- a/p2p/message_test.go +++ b/p2p/message_test.go @@ -2,8 +2,11 @@ package p2p import ( "bytes" + "fmt" "io/ioutil" + "runtime" "testing" + "time" "github.com/ethereum/go-ethereum/ethutil" ) @@ -68,3 +71,63 @@ func TestDecodeRealMsg(t *testing.T) { t.Errorf("incorrect code %d, want %d", msg.Code, 0) } } + +func ExampleMsgPipe() { + rw1, rw2 := MsgPipe() + go func() { + rw1.EncodeMsg(8, []byte{0, 0}) + rw1.EncodeMsg(5, []byte{1, 1}) + rw1.Close() + }() + + for { + msg, err := rw2.ReadMsg() + if err != nil { + break + } + var data [1][]byte + msg.Decode(&data) + fmt.Printf("msg: %d, %x\n", msg.Code, data[0]) + } + // Output: + // msg: 8, 0000 + // msg: 5, 0101 +} + +func TestMsgPipeUnblockWrite(t *testing.T) { +loop: + for i := 0; i < 100; i++ { + rw1, rw2 := MsgPipe() + done := make(chan struct{}) + go func() { + if err := rw1.EncodeMsg(1); err == nil { + t.Error("EncodeMsg returned nil error") + } else if err != ErrPipeClosed { + t.Error("EncodeMsg returned wrong error: got %v, want %v", err, ErrPipeClosed) + } + close(done) + }() + + // this call should ensure that EncodeMsg is waiting to + // deliver sometimes. if this isn't done, Close is likely to + // be executed before EncodeMsg starts and then we won't test + // all the cases. + runtime.Gosched() + + rw2.Close() + select { + case <-done: + case <-time.After(200 * time.Millisecond): + t.Errorf("write didn't unblock") + break loop + } + } +} + +// This test should panic if concurrent close isn't implemented correctly. +func TestMsgPipeConcurrentClose(t *testing.T) { + rw1, _ := MsgPipe() + for i := 0; i < 10; i++ { + go rw1.Close() + } +} From f0f672777866a524c36e767a6c313f93f574dd8c Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Fri, 12 Dec 2014 11:58:39 +0100 Subject: [PATCH 52/79] p2p: use an error type for disconnect requests Test-tastic. --- p2p/peer_error.go | 9 +++++++++ p2p/protocol.go | 3 +-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/p2p/peer_error.go b/p2p/peer_error.go index 88b870fbd..0eb7ec838 100644 --- a/p2p/peer_error.go +++ b/p2p/peer_error.go @@ -100,7 +100,16 @@ func (d DiscReason) String() string { return discReasonToString[d] } +type discRequestedError DiscReason + +func (err discRequestedError) Error() string { + return fmt.Sprintf("disconnect requested: %v", DiscReason(err)) +} + func discReasonForError(err error) DiscReason { + if reason, ok := err.(discRequestedError); ok { + return DiscReason(reason) + } peerError, ok := err.(*peerError) if !ok { return DiscSubprotocolError diff --git a/p2p/protocol.go b/p2p/protocol.go index 5af586f13..3f52205f5 100644 --- a/p2p/protocol.go +++ b/p2p/protocol.go @@ -158,8 +158,7 @@ func (bp *baseProtocol) handle(rw MsgReadWriter) error { if err := msg.Decode(&reason); err != nil { return err } - bp.peer.Disconnect(reason[0]) - return nil + return discRequestedError(reason[0]) case pingMsg: return bp.rw.EncodeMsg(pongMsg) From da900f94358a9b293a286066b0922a6f7b5d571c Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Fri, 12 Dec 2014 11:39:29 +0100 Subject: [PATCH 53/79] p2p: add test for base protocol disconnect --- p2p/protocol_test.go | 58 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 p2p/protocol_test.go diff --git a/p2p/protocol_test.go b/p2p/protocol_test.go new file mode 100644 index 000000000..65f26fb12 --- /dev/null +++ b/p2p/protocol_test.go @@ -0,0 +1,58 @@ +package p2p + +import ( + "fmt" + "testing" +) + +func TestBaseProtocolDisconnect(t *testing.T) { + peer := NewPeer(NewSimpleClientIdentity("p1", "", "", "foo"), nil) + peer.ourID = NewSimpleClientIdentity("p2", "", "", "bar") + peer.pubkeyHook = func(*peerAddr) error { return nil } + + rw1, rw2 := MsgPipe() + done := make(chan struct{}) + go func() { + if err := expectMsg(rw2, handshakeMsg); err != nil { + t.Error(err) + } + err := rw2.EncodeMsg(handshakeMsg, + baseProtocolVersion, + "", + []interface{}{}, + 0, + make([]byte, 64), + ) + if err != nil { + t.Error(err) + } + if err := expectMsg(rw2, getPeersMsg); err != nil { + t.Error(err) + } + if err := rw2.EncodeMsg(discMsg, DiscQuitting); err != nil { + t.Error(err) + } + close(done) + }() + + if err := runBaseProtocol(peer, rw1); err == nil { + t.Errorf("base protocol returned without error") + } else if reason, ok := err.(discRequestedError); !ok || reason != DiscQuitting { + t.Errorf("base protocol returned wrong error: %v", err) + } + <-done +} + +func expectMsg(r MsgReader, code uint64) error { + msg, err := r.ReadMsg() + if err != nil { + return err + } + if err := msg.Discard(); err != nil { + return err + } + if msg.Code != code { + return fmt.Errorf("wrong message code: got %d, expected %d", msg.Code, code) + } + return nil +} From ef4135eabe5cb25f8972371c5681e1611ce0cde9 Mon Sep 17 00:00:00 2001 From: obscuren Date: Mon, 15 Dec 2014 16:12:34 +0100 Subject: [PATCH 54/79] Added topic utility functions to whisper --- whisper/util.go | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 whisper/util.go diff --git a/whisper/util.go b/whisper/util.go new file mode 100644 index 000000000..abef1d667 --- /dev/null +++ b/whisper/util.go @@ -0,0 +1,27 @@ +package whisper + +import "github.com/ethereum/go-ethereum/crypto" + +func hashTopic(topic []byte) []byte { + return crypto.Sha3(topic)[:4] +} + +// NOTE this isn't DRY, but I don't want to iterate twice. + +// Returns a formatted topics byte slice. +// data: unformatted data (e.g., no hashes needed) +func Topics(data [][]byte) [][]byte { + d := make([][]byte, len(data)) + for i, byts := range data { + d[i] = hashTopic(byts) + } + return d +} + +func TopicsFromString(data []string) [][]byte { + d := make([][]byte, len(data)) + for i, str := range data { + d[i] = hashTopic([]byte(str)) + } + return d +} From b1c58b76a9588a90db5a773a997bb70265c378d3 Mon Sep 17 00:00:00 2001 From: obscuren Date: Wed, 17 Dec 2014 12:57:35 +0100 Subject: [PATCH 55/79] moved err check --- core/chain_manager.go | 11 ++++++++++- core/chain_manager_test.go | 18 ++++++++++++++++++ core/execution.go | 32 ++++++++++++++++---------------- ethutil/rlp.go | 30 ++++++++++++++++++++++++++++++ ethutil/rlp_test.go | 10 ++++++++++ javascript/javascript_runtime.go | 18 ++++++++++++++++++ 6 files changed, 102 insertions(+), 17 deletions(-) diff --git a/core/chain_manager.go b/core/chain_manager.go index edf50e715..3e48579b9 100644 --- a/core/chain_manager.go +++ b/core/chain_manager.go @@ -148,6 +148,16 @@ func (bc *ChainManager) Reset() { bc.TD = ethutil.BigD(ethutil.Config.Db.LastKnownTD()) } +func (self *ChainManager) Export() []byte { + chainlogger.Infoln("exporting", self.CurrentBlock.Number, "blocks") + + blocks := make(types.Blocks, int(self.CurrentBlock.Number.Int64())+1) + for block := self.CurrentBlock; block != nil; block = self.GetBlock(block.PrevHash) { + blocks[block.Number.Int64()] = block + } + return ethutil.Encode(blocks) +} + func (bc *ChainManager) insert(block *types.Block) { encodedBlock := block.RlpEncode() ethutil.Config.Db.Put([]byte("LastBlock"), encodedBlock) @@ -181,7 +191,6 @@ func (self *ChainManager) GetChainHashesFromHash(hash []byte, max uint64) (chain // XXX Could be optimised by using a different database which only holds hashes (i.e., linked list) for i := uint64(0); i < max; i++ { - chain = append(chain, block.Hash()) if block.Number.Cmp(ethutil.Big0) <= 0 { diff --git a/core/chain_manager_test.go b/core/chain_manager_test.go index 9a8bc9592..a84e3ff3b 100644 --- a/core/chain_manager_test.go +++ b/core/chain_manager_test.go @@ -1 +1,19 @@ package core + +import ( + "fmt" + "path" + "testing" + + "github.com/ethereum/go-ethereum/ethutil" +) + +func TestChainInsertions(t *testing.T) { + c1, err := ethutil.ReadAllFile(path.Join("..", "_data", "chain1")) + if err != nil { + fmt.Println(err) + t.FailNow() + } + data1, _ := ethutil.Decode([]byte(c1), 0) + fmt.Println(data1) +} diff --git a/core/execution.go b/core/execution.go index a464abc66..58d46c509 100644 --- a/core/execution.go +++ b/core/execution.go @@ -40,6 +40,12 @@ func (self *Execution) exec(code, contextAddr []byte, caller vm.ClosureRef) (ret // Skipping transfer is used on testing for the initial call if !self.SkipTransfer { err = env.Transfer(from, to, self.value) + if err != nil { + caller.ReturnGas(self.Gas, self.price) + + err = fmt.Errorf("Insufficient funds to transfer value. Req %v, has %v", self.value, from.Balance) + return + } } snapshot := env.State().Copy() @@ -50,23 +56,17 @@ func (self *Execution) exec(code, contextAddr []byte, caller vm.ClosureRef) (ret chainlogger.Debugf("post state %x\n", env.State().Root()) }() - if err != nil { - caller.ReturnGas(self.Gas, self.price) - - err = fmt.Errorf("Insufficient funds to transfer value. Req %v, has %v", self.value, from.Balance) - } else { - self.object = to - // Pre-compiled contracts (address.go) 1, 2 & 3. - naddr := ethutil.BigD(contextAddr).Uint64() - if p := vm.Precompiled[naddr]; p != nil { - if self.Gas.Cmp(p.Gas(len(self.input))) >= 0 { - ret = p.Call(self.input) - self.vm.Printf("NATIVE_FUNC(%x) => %x", naddr, ret) - self.vm.Endl() - } - } else { - ret, err = self.vm.Run(to, caller, code, self.value, self.Gas, self.price, self.input) + self.object = to + // Pre-compiled contracts (address.go) 1, 2 & 3. + naddr := ethutil.BigD(contextAddr).Uint64() + if p := vm.Precompiled[naddr]; p != nil { + if self.Gas.Cmp(p.Gas(len(self.input))) >= 0 { + ret = p.Call(self.input) + self.vm.Printf("NATIVE_FUNC(%x) => %x", naddr, ret) + self.vm.Endl() } + } else { + ret, err = self.vm.Run(to, caller, code, self.value, self.Gas, self.price, self.input) } return diff --git a/ethutil/rlp.go b/ethutil/rlp.go index 1fff2b28a..157dd4dd9 100644 --- a/ethutil/rlp.go +++ b/ethutil/rlp.go @@ -2,8 +2,10 @@ package ethutil import ( "bytes" + "encoding/binary" "fmt" "math/big" + "reflect" ) type RlpEncode interface { @@ -97,6 +99,14 @@ var ( zeroRlp = big.NewInt(0x0) ) +func intlen(i int64) (length int) { + for i > 0 { + i = i >> 8 + length++ + } + return +} + func Encode(object interface{}) []byte { var buff bytes.Buffer @@ -168,6 +178,26 @@ func Encode(object interface{}) []byte { } WriteSliceHeader(len(b.Bytes())) buff.Write(b.Bytes()) + default: + // This is how it should have been from the start + // needs refactoring (@fjl) + v := reflect.ValueOf(t) + switch v.Kind() { + case reflect.Slice: + var b bytes.Buffer + for i := 0; i < v.Len(); i++ { + b.Write(Encode(v.Index(i).Interface())) + } + + blen := b.Len() + if blen < 56 { + buff.WriteByte(byte(blen) + 0xc0) + } else { + buff.WriteByte(byte(intlen(int64(blen))) + 0xf7) + binary.Write(&buff, binary.BigEndian, int64(blen)) + } + buff.ReadFrom(&b) + } } } else { // Empty list for nil diff --git a/ethutil/rlp_test.go b/ethutil/rlp_test.go index 90057ab42..ff98d3269 100644 --- a/ethutil/rlp_test.go +++ b/ethutil/rlp_test.go @@ -7,6 +7,16 @@ import ( "testing" ) +func TestNonInterfaceSlice(t *testing.T) { + vala := []string{"value1", "value2", "value3"} + valb := []interface{}{"value1", "value2", "value3"} + resa := Encode(vala) + resb := Encode(valb) + if !bytes.Equal(resa, resb) { + t.Errorf("expected []string & []interface{} to be equal") + } +} + func TestRlpValueEncoding(t *testing.T) { val := EmptyValue() val.AppendList().Append(1).Append(2).Append(3) diff --git a/javascript/javascript_runtime.go b/javascript/javascript_runtime.go index 84d61d405..a26f0154e 100644 --- a/javascript/javascript_runtime.go +++ b/javascript/javascript_runtime.go @@ -121,6 +121,7 @@ func (self *JSRE) initStdFuncs() { eth.Set("startMining", self.startMining) eth.Set("execBlock", self.execBlock) eth.Set("dump", self.dump) + eth.Set("export", self.export) } /* @@ -236,3 +237,20 @@ func (self *JSRE) execBlock(call otto.FunctionCall) otto.Value { return otto.TrueValue() } + +func (self *JSRE) export(call otto.FunctionCall) otto.Value { + fn, err := call.Argument(0).ToString() + if err != nil { + fmt.Println(err) + return otto.FalseValue() + } + + data := self.ethereum.ChainManager().Export() + + if err := ethutil.WriteFile(fn, data); err != nil { + fmt.Println(err) + return otto.FalseValue() + } + + return otto.TrueValue() +} From 4dbdcaecb117d7e1fcaf0869f5d4602312552991 Mon Sep 17 00:00:00 2001 From: obscuren Date: Wed, 17 Dec 2014 23:58:52 +0100 Subject: [PATCH 56/79] Moved pre-compiled, moved depth check * Depth check has been moved to the execution * Pre compiled execution has been moved to the VM * PrecompiledAddress has been renamed to PrecompiledAccount --- core/execution.go | 20 +++++++------------- vm/address.go | 12 ++++++------ vm/common.go | 2 +- vm/vm_debug.go | 24 +++++++++++++++++++++--- 4 files changed, 35 insertions(+), 23 deletions(-) diff --git a/core/execution.go b/core/execution.go index 58d46c509..827e1ee0e 100644 --- a/core/execution.go +++ b/core/execution.go @@ -4,7 +4,6 @@ import ( "fmt" "math/big" - "github.com/ethereum/go-ethereum/ethutil" "github.com/ethereum/go-ethereum/state" "github.com/ethereum/go-ethereum/vm" ) @@ -36,6 +35,11 @@ func (self *Execution) exec(code, contextAddr []byte, caller vm.ClosureRef) (ret env := self.vm.Env() chainlogger.Debugf("pre state %x\n", env.State().Root()) + if self.vm.Env().Depth() == vm.MaxCallDepth { + // Consume all gas (by not returning it) and return a depth error + return nil, vm.DepthError{} + } + from, to := env.State().GetStateObject(caller.Address()), env.State().GetOrNewStateObject(self.address) // Skipping transfer is used on testing for the initial call if !self.SkipTransfer { @@ -50,24 +54,14 @@ func (self *Execution) exec(code, contextAddr []byte, caller vm.ClosureRef) (ret snapshot := env.State().Copy() defer func() { - if vm.IsDepthErr(err) || vm.IsOOGErr(err) { + if /*vm.IsDepthErr(err) ||*/ vm.IsOOGErr(err) { env.State().Set(snapshot) } chainlogger.Debugf("post state %x\n", env.State().Root()) }() self.object = to - // Pre-compiled contracts (address.go) 1, 2 & 3. - naddr := ethutil.BigD(contextAddr).Uint64() - if p := vm.Precompiled[naddr]; p != nil { - if self.Gas.Cmp(p.Gas(len(self.input))) >= 0 { - ret = p.Call(self.input) - self.vm.Printf("NATIVE_FUNC(%x) => %x", naddr, ret) - self.vm.Endl() - } - } else { - ret, err = self.vm.Run(to, caller, code, self.value, self.Gas, self.price, self.input) - } + ret, err = self.vm.Run(to, caller, code, self.value, self.Gas, self.price, self.input) return } diff --git a/vm/address.go b/vm/address.go index be8921a3b..611979c94 100644 --- a/vm/address.go +++ b/vm/address.go @@ -11,25 +11,25 @@ type Address interface { Call(in []byte) []byte } -type PrecompiledAddress struct { +type PrecompiledAccount struct { Gas func(l int) *big.Int fn func(in []byte) []byte } -func (self PrecompiledAddress) Call(in []byte) []byte { +func (self PrecompiledAccount) Call(in []byte) []byte { return self.fn(in) } -var Precompiled = map[uint64]*PrecompiledAddress{ - 1: &PrecompiledAddress{func(l int) *big.Int { +var Precompiled = map[string]*PrecompiledAccount{ + string(ethutil.LeftPadBytes([]byte{1}, 20)): &PrecompiledAccount{func(l int) *big.Int { return GasEcrecover }, ecrecoverFunc}, - 2: &PrecompiledAddress{func(l int) *big.Int { + string(ethutil.LeftPadBytes([]byte{2}, 20)): &PrecompiledAccount{func(l int) *big.Int { n := big.NewInt(int64(l+31)/32 + 1) n.Mul(n, GasSha256) return n }, sha256Func}, - 3: &PrecompiledAddress{func(l int) *big.Int { + string(ethutil.LeftPadBytes([]byte{3}, 20)): &PrecompiledAccount{func(l int) *big.Int { n := big.NewInt(int64(l+31)/32 + 1) n.Mul(n, GasRipemd) return n diff --git a/vm/common.go b/vm/common.go index 592d44ccd..3d6d377ca 100644 --- a/vm/common.go +++ b/vm/common.go @@ -48,7 +48,7 @@ var ( S256 = ethutil.S256 ) -const MaxCallDepth = 1025 +const MaxCallDepth = 1024 func calcMemSize(off, l *big.Int) *big.Int { if l.Cmp(ethutil.Big0) == 0 { diff --git a/vm/vm_debug.go b/vm/vm_debug.go index 8af1979b1..9da832a79 100644 --- a/vm/vm_debug.go +++ b/vm/vm_debug.go @@ -48,9 +48,8 @@ func (self *DebugVm) Run(me, caller ClosureRef, code []byte, value, gas, price * }) closure := NewClosure(msg, caller, me, code, gas, price) - if self.env.Depth() == MaxCallDepth { - //closure.UseGas(gas) - return closure.Return(nil), DepthError{} + if p := Precompiled[string(me.Address())]; p != nil { + return self.RunPrecompiled(p, callData, closure) } if self.Recoverable { @@ -941,6 +940,25 @@ func (self *DebugVm) Run(me, caller ClosureRef, code []byte, value, gas, price * } } +func (self *DebugVm) RunPrecompiled(p *PrecompiledAccount, callData []byte, closure *Closure) (ret []byte, err error) { + gas := p.Gas(len(callData)) + if closure.UseGas(gas) { + ret = p.Call(callData) + self.Printf("NATIVE_FUNC => %x", ret) + self.Endl() + + return closure.Return(ret), nil + } else { + self.Endl() + + tmp := new(big.Int).Set(closure.Gas) + + closure.UseGas(closure.Gas) + + return closure.Return(nil), OOG(gas, tmp) + } +} + func (self *DebugVm) Printf(format string, v ...interface{}) VirtualMachine { if self.logTy == LogTyPretty { self.logStr += fmt.Sprintf(format, v...) From df3366d910c2b1ddab986264bc186ca79ba65c4e Mon Sep 17 00:00:00 2001 From: obscuren Date: Thu, 18 Dec 2014 11:39:24 +0100 Subject: [PATCH 57/79] Rlp shouldn't write null bytes --- ethutil/rlp.go | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/ethutil/rlp.go b/ethutil/rlp.go index 157dd4dd9..1bc1a58a7 100644 --- a/ethutil/rlp.go +++ b/ethutil/rlp.go @@ -2,7 +2,6 @@ package ethutil import ( "bytes" - "encoding/binary" "fmt" "math/big" "reflect" @@ -193,8 +192,13 @@ func Encode(object interface{}) []byte { if blen < 56 { buff.WriteByte(byte(blen) + 0xc0) } else { - buff.WriteByte(byte(intlen(int64(blen))) + 0xf7) - binary.Write(&buff, binary.BigEndian, int64(blen)) + ilen := byte(intlen(int64(blen))) + buff.WriteByte(ilen + 0xf7) + t := make([]byte, ilen) + for i := byte(0); i < ilen; i++ { + t[ilen-i-1] = byte(blen >> (i * 8)) + } + buff.Write(t) } buff.ReadFrom(&b) } From 4b2f1f76282069007f2bc6d91a90924ac29fd238 Mon Sep 17 00:00:00 2001 From: obscuren Date: Thu, 18 Dec 2014 11:55:46 +0100 Subject: [PATCH 58/79] idx should return -1 --- ethutil/value.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ethutil/value.go b/ethutil/value.go index 6417b0008..7d4a7d98c 100644 --- a/ethutil/value.go +++ b/ethutil/value.go @@ -397,5 +397,5 @@ func (it *ValueIterator) Value() *Value { } func (it *ValueIterator) Idx() int { - return it.idx + return it.idx - 1 } From 590aace88dce9922d40fca71e87905383a71d12b Mon Sep 17 00:00:00 2001 From: obscuren Date: Thu, 18 Dec 2014 12:18:19 +0100 Subject: [PATCH 59/79] Removed ethereum as dependency --- core/block_manager.go | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/core/block_manager.go b/core/block_manager.go index f6c73bc2c..98c6d006d 100644 --- a/core/block_manager.go +++ b/core/block_manager.go @@ -58,8 +58,8 @@ type BlockManager struct { mem map[string]*big.Int // Proof of work used for validating Pow pow.PoW - // The ethereum manager interface - eth EthManager + + txpool *TxPool // The last attempted block is mainly used for debugging purposes // This does not have to be a valid block and will be set during @@ -71,13 +71,13 @@ type BlockManager struct { eventMux *event.TypeMux } -func NewBlockManager(ethereum EthManager) *BlockManager { +func NewBlockManager(txpool *TxPool, chainManager *ChainManager, eventMux *event.TypeMux) *BlockManager { sm := &BlockManager{ mem: make(map[string]*big.Int), Pow: ezp.New(), - eth: ethereum, - bc: ethereum.ChainManager(), - eventMux: ethereum.EventMux(), + bc: chainManager, + eventMux: eventMux, + txpool: txpool, } return sm @@ -240,7 +240,7 @@ func (sm *BlockManager) ProcessWithParent(block, parent *types.Block) (td *big.I chainlogger.Infof("Processed block #%d (%x...)\n", block.Number, block.Hash()[0:4]) - sm.eth.TxPool().RemoveSet(block.Transactions()) + sm.txpool.RemoveSet(block.Transactions()) return td, messages, nil } else { From 49e0267fe76cfd13eaf3e5e26caa637b93dbdd29 Mon Sep 17 00:00:00 2001 From: obscuren Date: Thu, 18 Dec 2014 13:12:54 +0100 Subject: [PATCH 60/79] Locks, refactor, tests * Added additional chain tests * Added proper mutex' on chain * Removed ethereum dependencies --- _data/chain1 | Bin 0 -> 175331 bytes _data/chain2 | Bin 0 -> 28118 bytes core/block_manager.go | 6 +- core/chain_manager.go | 115 +++++++++++++++++++++++++------------ core/chain_manager_test.go | 66 +++++++++++++++++++-- core/filter.go | 4 +- core/filter_test.go | 6 -- core/transaction_pool.go | 26 +++++---- core/types/block.go | 2 +- core/types/common.go | 5 ++ ethereum.go | 4 +- pow/ezp/pow.go | 2 +- 12 files changed, 169 insertions(+), 67 deletions(-) create mode 100755 _data/chain1 create mode 100755 _data/chain2 diff --git a/_data/chain1 b/_data/chain1 new file mode 100755 index 0000000000000000000000000000000000000000..ef392e001ebe06696541a637ab993565bda9d485 GIT binary patch literal 175331 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 MZa$GB3Jnea1NmrF+yDRo literal 0 HcmV?d00001 diff --git a/_data/chain2 b/_data/chain2 new file mode 100755 index 0000000000000000000000000000000000000000..48ed4d5ea9e7eb28dffea79a515762c9e457fce4 GIT binary patch literal 28118 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 literal 0 HcmV?d00001 diff --git a/core/block_manager.go b/core/block_manager.go index 98c6d006d..794c87f52 100644 --- a/core/block_manager.go +++ b/core/block_manager.go @@ -256,12 +256,12 @@ func (sm *BlockManager) CalculateTD(block *types.Block) (*big.Int, bool) { // TD(genesis_block) = 0 and TD(B) = TD(B.parent) + sum(u.difficulty for u in B.uncles) + B.difficulty td := new(big.Int) - td = td.Add(sm.bc.TD, uncleDiff) + td = td.Add(sm.bc.Td(), uncleDiff) td = td.Add(td, block.Difficulty) // The new TD will only be accepted if the new difficulty is // is greater than the previous. - if td.Cmp(sm.bc.TD) > 0 { + if td.Cmp(sm.bc.Td()) > 0 { return td, true } @@ -279,7 +279,7 @@ func (sm *BlockManager) ValidateBlock(block, parent *types.Block) error { diff := block.Time - parent.Time if diff < 0 { - return ValidationError("Block timestamp less then prev block %v (%v - %v)", diff, block.Time, sm.bc.CurrentBlock.Time) + return ValidationError("Block timestamp less then prev block %v (%v - %v)", diff, block.Time, sm.bc.CurrentBlock().Time) } /* XXX diff --git a/core/chain_manager.go b/core/chain_manager.go index 3e48579b9..c81552b5d 100644 --- a/core/chain_manager.go +++ b/core/chain_manager.go @@ -3,6 +3,7 @@ package core import ( "fmt" "math/big" + "sync" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/ethutil" @@ -50,16 +51,36 @@ type ChainManager struct { eventMux *event.TypeMux genesisBlock *types.Block // Last known total difficulty - TD *big.Int - - LastBlockNumber uint64 - - CurrentBlock *types.Block - LastBlockHash []byte + mu sync.RWMutex + td *big.Int + lastBlockNumber uint64 + currentBlock *types.Block + lastBlockHash []byte transState *state.StateDB } +func (self *ChainManager) Td() *big.Int { + self.mu.RLock() + defer self.mu.RUnlock() + + return self.td +} + +func (self *ChainManager) LastBlockNumber() uint64 { + self.mu.RLock() + defer self.mu.RUnlock() + + return self.lastBlockNumber +} + +func (self *ChainManager) CurrentBlock() *types.Block { + self.mu.RLock() + defer self.mu.RUnlock() + + return self.currentBlock +} + func NewChainManager(mux *event.TypeMux) *ChainManager { bc := &ChainManager{} bc.genesisBlock = types.NewBlockFromBytes(ethutil.Encode(Genesis)) @@ -77,7 +98,7 @@ func (self *ChainManager) SetProcessor(proc types.BlockProcessor) { } func (self *ChainManager) State() *state.StateDB { - return self.CurrentBlock.State() + return self.CurrentBlock().State() } func (self *ChainManager) TransState() *state.StateDB { @@ -91,27 +112,30 @@ func (bc *ChainManager) setLastBlock() { AddTestNetFunds(bc.genesisBlock) block := types.NewBlockFromBytes(data) - bc.CurrentBlock = block - bc.LastBlockHash = block.Hash() - bc.LastBlockNumber = block.Number.Uint64() + bc.currentBlock = block + bc.lastBlockHash = block.Hash() + bc.lastBlockNumber = block.Number.Uint64() // Set the last know difficulty (might be 0x0 as initial value, Genesis) - bc.TD = ethutil.BigD(ethutil.Config.Db.LastKnownTD()) + bc.td = ethutil.BigD(ethutil.Config.Db.LastKnownTD()) } else { bc.Reset() } - chainlogger.Infof("Last block (#%d) %x\n", bc.LastBlockNumber, bc.CurrentBlock.Hash()) + chainlogger.Infof("Last block (#%d) %x\n", bc.lastBlockNumber, bc.currentBlock.Hash()) } // Block creation & chain handling func (bc *ChainManager) NewBlock(coinbase []byte) *types.Block { + bc.mu.RLock() + defer bc.mu.RUnlock() + var root interface{} hash := ZeroHash256 if bc.CurrentBlock != nil { - root = bc.CurrentBlock.Root() - hash = bc.LastBlockHash + root = bc.currentBlock.Root() + hash = bc.lastBlockHash } block := types.CreateBlock( @@ -122,11 +146,11 @@ func (bc *ChainManager) NewBlock(coinbase []byte) *types.Block { nil, "") - parent := bc.CurrentBlock + parent := bc.currentBlock if parent != nil { block.Difficulty = CalcDifficulty(block, parent) - block.Number = new(big.Int).Add(bc.CurrentBlock.Number, ethutil.Big1) - block.GasLimit = block.CalcGasLimit(bc.CurrentBlock) + block.Number = new(big.Int).Add(bc.currentBlock.Number, ethutil.Big1) + block.GasLimit = block.CalcGasLimit(bc.currentBlock) } @@ -134,35 +158,42 @@ func (bc *ChainManager) NewBlock(coinbase []byte) *types.Block { } func (bc *ChainManager) Reset() { + bc.mu.Lock() + defer bc.mu.Unlock() + AddTestNetFunds(bc.genesisBlock) bc.genesisBlock.Trie().Sync() // Prepare the genesis block bc.write(bc.genesisBlock) bc.insert(bc.genesisBlock) - bc.CurrentBlock = bc.genesisBlock + bc.currentBlock = bc.genesisBlock - bc.SetTotalDifficulty(ethutil.Big("0")) + bc.setTotalDifficulty(ethutil.Big("0")) // Set the last know difficulty (might be 0x0 as initial value, Genesis) - bc.TD = ethutil.BigD(ethutil.Config.Db.LastKnownTD()) + bc.td = ethutil.BigD(ethutil.Config.Db.LastKnownTD()) } func (self *ChainManager) Export() []byte { - chainlogger.Infoln("exporting", self.CurrentBlock.Number, "blocks") + self.mu.RLock() + defer self.mu.RUnlock() - blocks := make(types.Blocks, int(self.CurrentBlock.Number.Int64())+1) - for block := self.CurrentBlock; block != nil; block = self.GetBlock(block.PrevHash) { + chainlogger.Infof("exporting %v blocks...\n", self.currentBlock.Number) + + blocks := make([]*types.Block, int(self.currentBlock.Number.Int64())+1) + for block := self.currentBlock; block != nil; block = self.GetBlock(block.PrevHash) { blocks[block.Number.Int64()] = block } + return ethutil.Encode(blocks) } func (bc *ChainManager) insert(block *types.Block) { encodedBlock := block.RlpEncode() ethutil.Config.Db.Put([]byte("LastBlock"), encodedBlock) - bc.CurrentBlock = block - bc.LastBlockHash = block.Hash() + bc.currentBlock = block + bc.lastBlockHash = block.Hash() } func (bc *ChainManager) write(block *types.Block) { @@ -213,7 +244,10 @@ func (self *ChainManager) GetBlock(hash []byte) *types.Block { } func (self *ChainManager) GetBlockByNumber(num uint64) *types.Block { - block := self.CurrentBlock + self.mu.RLock() + defer self.mu.RUnlock() + + block := self.currentBlock for ; block != nil; block = self.GetBlock(block.PrevHash) { if block.Number.Uint64() == num { break @@ -227,9 +261,9 @@ func (self *ChainManager) GetBlockByNumber(num uint64) *types.Block { return block } -func (bc *ChainManager) SetTotalDifficulty(td *big.Int) { +func (bc *ChainManager) setTotalDifficulty(td *big.Int) { ethutil.Config.Db.Put([]byte("LTD"), td.Bytes()) - bc.TD = td + bc.td = td } func (self *ChainManager) CalcTotalDiff(block *types.Block) (*big.Int, error) { @@ -262,8 +296,8 @@ func (bc *ChainManager) BlockInfo(block *types.Block) types.BlockInfo { // Unexported method for writing extra non-essential block info to the db func (bc *ChainManager) writeBlockInfo(block *types.Block) { - bc.LastBlockNumber++ - bi := types.BlockInfo{Number: bc.LastBlockNumber, Hash: block.Hash(), Parent: block.PrevHash, TD: bc.TD} + bc.lastBlockNumber++ + bi := types.BlockInfo{Number: bc.lastBlockNumber, Hash: block.Hash(), Parent: block.PrevHash, TD: bc.td} // For now we use the block hash with the words "info" appended as key ethutil.Config.Db.Put(append(block.Hash(), []byte("Info")...), bi.RlpEncode()) @@ -289,17 +323,22 @@ func (self *ChainManager) InsertChain(chain types.Blocks) error { return err } - self.write(block) - if td.Cmp(self.TD) > 0 { - if block.Number.Cmp(new(big.Int).Add(self.CurrentBlock.Number, ethutil.Big1)) < 0 { - chainlogger.Infof("Split detected. New head #%v (%x), was #%v (%x)\n", block.Number, block.Hash()[:4], self.CurrentBlock.Number, self.CurrentBlock.Hash()[:4]) + self.mu.Lock() + { + + self.write(block) + if td.Cmp(self.td) > 0 { + if block.Number.Cmp(new(big.Int).Add(self.currentBlock.Number, ethutil.Big1)) < 0 { + chainlogger.Infof("Split detected. New head #%v (%x), was #%v (%x)\n", block.Number, block.Hash()[:4], self.currentBlock.Number, self.currentBlock.Hash()[:4]) + } + + self.setTotalDifficulty(td) + self.insert(block) + self.transState = self.currentBlock.State().Copy() } - self.SetTotalDifficulty(td) - self.insert(block) - self.transState = self.State().Copy() - //sm.eth.TxPool().RemoveSet(block.Transactions()) } + self.mu.Unlock() self.eventMux.Post(NewBlockEvent{block}) self.eventMux.Post(messages) diff --git a/core/chain_manager_test.go b/core/chain_manager_test.go index a84e3ff3b..52be8b0ea 100644 --- a/core/chain_manager_test.go +++ b/core/chain_manager_test.go @@ -3,17 +3,75 @@ package core import ( "fmt" "path" + "runtime" "testing" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/ethutil" + "github.com/ethereum/go-ethereum/event" + //logpkg "github.com/ethereum/go-ethereum/logger" ) -func TestChainInsertions(t *testing.T) { - c1, err := ethutil.ReadAllFile(path.Join("..", "_data", "chain1")) +//var Logger logpkg.LogSystem +//var Log = logpkg.NewLogger("TEST") + +func init() { + runtime.GOMAXPROCS(runtime.NumCPU()) + //Logger = logpkg.NewStdLogSystem(os.Stdout, log.LstdFlags, logpkg.InfoLevel) + //logpkg.AddLogSystem(Logger) + + ethutil.ReadConfig("/tmp/ethtest", "/tmp/ethtest", "ETH") + + db, err := ethdb.NewMemDatabase() + if err != nil { + panic("Could not create mem-db, failing") + } + ethutil.Config.Db = db +} + +func loadChain(fn string, t *testing.T) types.Blocks { + c1, err := ethutil.ReadAllFile(path.Join("..", "_data", fn)) if err != nil { fmt.Println(err) t.FailNow() } - data1, _ := ethutil.Decode([]byte(c1), 0) - fmt.Println(data1) + value := ethutil.NewValueFromBytes([]byte(c1)) + blocks := make(types.Blocks, value.Len()) + it := value.NewIterator() + for it.Next() { + blocks[it.Idx()] = types.NewBlockFromRlpValue(it.Value()) + } + + return blocks +} + +func insertChain(done chan bool, chainMan *ChainManager, chain types.Blocks, t *testing.T) { + err := chainMan.InsertChain(chain) + if err != nil { + fmt.Println(err) + t.FailNow() + } + done <- true +} + +func TestChainInsertions(t *testing.T) { + chain1 := loadChain("chain1", t) + chain2 := loadChain("chain2", t) + var eventMux event.TypeMux + chainMan := NewChainManager(&eventMux) + txPool := NewTxPool(chainMan, nil, &eventMux) + blockMan := NewBlockManager(txPool, chainMan, &eventMux) + chainMan.SetProcessor(blockMan) + + const max = 2 + done := make(chan bool, max) + + go insertChain(done, chainMan, chain1, t) + go insertChain(done, chainMan, chain2, t) + + for i := 0; i < max; i++ { + <-done + } + fmt.Println(chainMan.CurrentBlock()) } diff --git a/core/filter.go b/core/filter.go index fe3665bf3..fb992782d 100644 --- a/core/filter.go +++ b/core/filter.go @@ -78,11 +78,11 @@ func (self *Filter) SetSkip(skip int) { func (self *Filter) Find() []*state.Message { var earliestBlockNo uint64 = uint64(self.earliest) if self.earliest == -1 { - earliestBlockNo = self.eth.ChainManager().CurrentBlock.Number.Uint64() + earliestBlockNo = self.eth.ChainManager().CurrentBlock().Number.Uint64() } var latestBlockNo uint64 = uint64(self.latest) if self.latest == -1 { - latestBlockNo = self.eth.ChainManager().CurrentBlock.Number.Uint64() + latestBlockNo = self.eth.ChainManager().CurrentBlock().Number.Uint64() } var ( diff --git a/core/filter_test.go b/core/filter_test.go index d53b835b7..9a8bc9592 100644 --- a/core/filter_test.go +++ b/core/filter_test.go @@ -1,7 +1 @@ package core - -// import "testing" - -// func TestFilter(t *testing.T) { -// NewFilter(NewTestManager()) -// } diff --git a/core/transaction_pool.go b/core/transaction_pool.go index 7166d35e8..36b0beb28 100644 --- a/core/transaction_pool.go +++ b/core/transaction_pool.go @@ -8,6 +8,7 @@ import ( "sync" "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" "github.com/ethereum/go-ethereum/logger" "github.com/ethereum/go-ethereum/state" "github.com/ethereum/go-ethereum/wire" @@ -61,7 +62,6 @@ type TxProcessor interface { // pool is being drained or synced for whatever reason the transactions // will simple queue up and handled when the mutex is freed. type TxPool struct { - Ethereum EthManager // The mutex for accessing the Tx pool. mutex sync.Mutex // Queueing channel for reading and writing incoming @@ -75,14 +75,20 @@ type TxPool struct { SecondaryProcessor TxProcessor subscribers []chan TxMsg + + broadcaster types.Broadcaster + chainManager *ChainManager + eventMux *event.TypeMux } -func NewTxPool(ethereum EthManager) *TxPool { +func NewTxPool(chainManager *ChainManager, broadcaster types.Broadcaster, eventMux *event.TypeMux) *TxPool { return &TxPool{ - pool: list.New(), - queueChan: make(chan *types.Transaction, txPoolQueueSize), - quit: make(chan bool), - Ethereum: ethereum, + pool: list.New(), + queueChan: make(chan *types.Transaction, txPoolQueueSize), + quit: make(chan bool), + chainManager: chainManager, + eventMux: eventMux, + broadcaster: broadcaster, } } @@ -94,13 +100,13 @@ func (pool *TxPool) addTransaction(tx *types.Transaction) { pool.pool.PushBack(tx) // Broadcast the transaction to the rest of the peers - pool.Ethereum.Broadcast(wire.MsgTxTy, []interface{}{tx.RlpData()}) + pool.broadcaster.Broadcast(wire.MsgTxTy, []interface{}{tx.RlpData()}) } func (pool *TxPool) ValidateTransaction(tx *types.Transaction) error { // Get the last block so we can retrieve the sender and receiver from // the merkle trie - block := pool.Ethereum.ChainManager().CurrentBlock + block := pool.chainManager.CurrentBlock // Something has gone horribly wrong if this happens if block == nil { return fmt.Errorf("No last block on the block chain") @@ -116,7 +122,7 @@ func (pool *TxPool) ValidateTransaction(tx *types.Transaction) error { } // Get the sender - sender := pool.Ethereum.ChainManager().State().GetAccount(tx.Sender()) + sender := pool.chainManager.State().GetAccount(tx.Sender()) totAmount := new(big.Int).Set(tx.Value) // Make sure there's enough in the sender's account. Having insufficient @@ -160,7 +166,7 @@ func (self *TxPool) Add(tx *types.Transaction) error { txplogger.Debugf("(t) %x => %x (%v) %x\n", tx.Sender()[:4], tmp, tx.Value, tx.Hash()) // Notify the subscribers - go self.Ethereum.EventMux().Post(TxPreEvent{tx}) + go self.eventMux.Post(TxPreEvent{tx}) return nil } diff --git a/core/types/block.go b/core/types/block.go index 0108bd586..2d889f35f 100644 --- a/core/types/block.go +++ b/core/types/block.go @@ -409,7 +409,7 @@ func (self *Block) Size() ethutil.StorageSize { // Implement RlpEncodable func (self *Block) RlpData() interface{} { - return self.Value().Val + return []interface{}{self.header(), self.transactions, self.rlpUncles()} } // Implement pow.Block diff --git a/core/types/common.go b/core/types/common.go index ba88b77e1..89cb5f498 100644 --- a/core/types/common.go +++ b/core/types/common.go @@ -4,8 +4,13 @@ import ( "math/big" "github.com/ethereum/go-ethereum/state" + "github.com/ethereum/go-ethereum/wire" ) type BlockProcessor interface { Process(*Block) (*big.Int, state.Messages, error) } + +type Broadcaster interface { + Broadcast(wire.MsgType, []interface{}) +} diff --git a/ethereum.go b/ethereum.go index e8b1a9500..5d74e28e9 100644 --- a/ethereum.go +++ b/ethereum.go @@ -128,9 +128,9 @@ func New(db ethutil.Database, clientIdentity wire.ClientIdentity, keyManager *cr } ethereum.blockPool = NewBlockPool(ethereum) - ethereum.txPool = core.NewTxPool(ethereum) ethereum.blockChain = core.NewChainManager(ethereum.EventMux()) - ethereum.blockManager = core.NewBlockManager(ethereum) + ethereum.txPool = core.NewTxPool(ethereum.blockChain, ethereum, ethereum.EventMux()) + ethereum.blockManager = core.NewBlockManager(ethereum.txPool, ethereum.blockChain, ethereum.EventMux()) ethereum.blockChain.SetProcessor(ethereum.blockManager) // Start the tx pool diff --git a/pow/ezp/pow.go b/pow/ezp/pow.go index cdf89950f..bfe3ea098 100644 --- a/pow/ezp/pow.go +++ b/pow/ezp/pow.go @@ -21,7 +21,7 @@ type EasyPow struct { } func New() *EasyPow { - return &EasyPow{} + return &EasyPow{turbo: true} } func (pow *EasyPow) GetHashrate() int64 { From 2d09e67713757e2a80eb614562c97f962af36cf7 Mon Sep 17 00:00:00 2001 From: obscuren Date: Thu, 18 Dec 2014 13:17:24 +0100 Subject: [PATCH 61/79] Updated to new methods --- block_pool.go | 2 +- cmd/ethereum/main.go | 2 +- cmd/mist/debugger.go | 2 +- cmd/mist/gui.go | 4 ++-- core/chain_manager.go | 7 +++++++ peer.go | 4 ++-- xeth/hexface.go | 2 +- xeth/pipe.go | 2 +- 8 files changed, 16 insertions(+), 9 deletions(-) diff --git a/block_pool.go b/block_pool.go index 803927f21..c618f6993 100644 --- a/block_pool.go +++ b/block_pool.go @@ -66,7 +66,7 @@ func (self *BlockPool) HasLatestHash() bool { self.mut.Lock() defer self.mut.Unlock() - return self.pool[string(self.eth.ChainManager().CurrentBlock.Hash())] != nil + return self.pool[string(self.eth.ChainManager().CurrentBlock().Hash())] != nil } func (self *BlockPool) HasCommonHash(hash []byte) bool { diff --git a/cmd/ethereum/main.go b/cmd/ethereum/main.go index 43551fb3a..9efc8e9dc 100644 --- a/cmd/ethereum/main.go +++ b/cmd/ethereum/main.go @@ -77,7 +77,7 @@ func main() { var block *types.Block if len(DumpHash) == 0 && DumpNumber == -1 { - block = ethereum.ChainManager().CurrentBlock + block = ethereum.ChainManager().CurrentBlock() } else if len(DumpHash) > 0 { block = ethereum.ChainManager().GetBlock(ethutil.Hex2Bytes(DumpHash)) } else { diff --git a/cmd/mist/debugger.go b/cmd/mist/debugger.go index d7c584eab..a7a286e23 100644 --- a/cmd/mist/debugger.go +++ b/cmd/mist/debugger.go @@ -149,7 +149,7 @@ func (self *DebuggerWindow) Debug(valueStr, gasStr, gasPriceStr, scriptStr, data self.SetAsm(script) - block := self.lib.eth.ChainManager().CurrentBlock + block := self.lib.eth.ChainManager().CurrentBlock() env := utils.NewEnv(statedb, block, account.Address(), value) diff --git a/cmd/mist/gui.go b/cmd/mist/gui.go index fe066e994..773688ffc 100644 --- a/cmd/mist/gui.go +++ b/cmd/mist/gui.go @@ -246,7 +246,7 @@ func (gui *Gui) CreateAndSetPrivKey() (string, string, string, string) { } func (gui *Gui) setInitialChain(ancientBlocks bool) { - sBlk := gui.eth.ChainManager().LastBlockHash + sBlk := gui.eth.ChainManager().LastBlockHash() blk := gui.eth.ChainManager().GetBlock(sBlk) for ; blk != nil; blk = gui.eth.ChainManager().GetBlock(sBlk) { sBlk = blk.PrevHash @@ -468,7 +468,7 @@ func (gui *Gui) update() { case <-peerUpdateTicker.C: gui.setPeerInfo() case <-generalUpdateTicker.C: - statusText := "#" + gui.eth.ChainManager().CurrentBlock.Number.String() + statusText := "#" + gui.eth.ChainManager().CurrentBlock().Number.String() lastBlockLabel.Set("text", statusText) miningLabel.Set("text", "Mining @ "+strconv.FormatInt(gui.uiLib.miner.GetPow().GetHashrate(), 10)+"Khash") diff --git a/core/chain_manager.go b/core/chain_manager.go index c81552b5d..794ae0011 100644 --- a/core/chain_manager.go +++ b/core/chain_manager.go @@ -74,6 +74,13 @@ func (self *ChainManager) LastBlockNumber() uint64 { return self.lastBlockNumber } +func (self *ChainManager) LastBlockHash() []byte { + self.mu.RLock() + defer self.mu.RUnlock() + + return self.lastBlockHash +} + func (self *ChainManager) CurrentBlock() *types.Block { self.mu.RLock() defer self.mu.RUnlock() diff --git a/peer.go b/peer.go index 331e9de37..13f0239d4 100644 --- a/peer.go +++ b/peer.go @@ -666,8 +666,8 @@ func (self *Peer) pushStatus() { msg := wire.NewMessage(wire.MsgStatusTy, []interface{}{ uint32(ProtocolVersion), uint32(NetVersion), - self.ethereum.ChainManager().TD, - self.ethereum.ChainManager().CurrentBlock.Hash(), + self.ethereum.ChainManager().Td(), + self.ethereum.ChainManager().CurrentBlock().Hash(), self.ethereum.ChainManager().Genesis().Hash(), }) diff --git a/xeth/hexface.go b/xeth/hexface.go index c1f49453d..75ec5f43d 100644 --- a/xeth/hexface.go +++ b/xeth/hexface.go @@ -29,7 +29,7 @@ func (self *JSXEth) BlockByHash(strHash string) *JSBlock { func (self *JSXEth) BlockByNumber(num int32) *JSBlock { if num == -1 { - return NewJSBlock(self.obj.ChainManager().CurrentBlock) + return NewJSBlock(self.obj.ChainManager().CurrentBlock()) } return NewJSBlock(self.obj.ChainManager().GetBlockByNumber(uint64(num))) diff --git a/xeth/pipe.go b/xeth/pipe.go index a8d8ed999..1e4d0ec60 100644 --- a/xeth/pipe.go +++ b/xeth/pipe.go @@ -82,7 +82,7 @@ func (self *XEth) Execute(addr []byte, data []byte, value, gas, price *ethutil.V func (self *XEth) ExecuteObject(object *Object, data []byte, value, gas, price *ethutil.Value) ([]byte, error) { var ( initiator = state.NewStateObject(self.obj.KeyManager().KeyPair().Address()) - block = self.chainManager.CurrentBlock + block = self.chainManager.CurrentBlock() ) self.Vm.State = self.World().State().Copy() From 9e286e1c337319f47b2b04e9e1022ac05470a296 Mon Sep 17 00:00:00 2001 From: obscuren Date: Thu, 18 Dec 2014 13:32:47 +0100 Subject: [PATCH 62/79] updated tests --- tests/files/StateTests/stInitCodeTest.json | 870 ++++++++++++++++++ tests/files/StateTests/stRefundTest.json | 252 +++++ .../StateTests/stSystemOperationsTest.json | 2 +- tests/files/StateTests/stTransactionTest.json | 277 ++++++ tests/files/VMTests/vmArithmeticTest.json | 294 +++--- 5 files changed, 1547 insertions(+), 148 deletions(-) create mode 100644 tests/files/StateTests/stInitCodeTest.json create mode 100644 tests/files/StateTests/stRefundTest.json create mode 100644 tests/files/StateTests/stTransactionTest.json diff --git a/tests/files/StateTests/stInitCodeTest.json b/tests/files/StateTests/stInitCodeTest.json new file mode 100644 index 000000000..67aa42853 --- /dev/null +++ b/tests/files/StateTests/stInitCodeTest.json @@ -0,0 +1,870 @@ +{ + "CallRecursiveContract" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "45678256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + ], + "out" : "0x", + "post" : { + "04110d816c380812a427968ece99b1c963dfbce6" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + "0x02" : "0x04110d816c380812a427968ece99b1c963dfbce6" + } + }, + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1", + "code" : "0x3060025560206000600039602060006000f0", + "nonce" : "1", + "storage" : { + "0x02" : "0x095e7baea6a6c7c4c2dfeb977efac326af552d87" + } + }, + "0a517d755cebbf66312b30fff713666a9cb917e0" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + "0x02" : "0x0a517d755cebbf66312b30fff713666a9cb917e0" + } + }, + "24dd378f51adc67a50e339e8031fe9bd4aafab36" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + "0x02" : "0x24dd378f51adc67a50e339e8031fe9bd4aafab36" + } + }, + "293f982d000532a7861ab122bdc4bbfd26bf9030" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + "0x02" : "0x293f982d000532a7861ab122bdc4bbfd26bf9030" + } + }, + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "10000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "2cf5732f017b0cf1b1f13a1478e10239716bf6b5" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + "0x02" : "0x2cf5732f017b0cf1b1f13a1478e10239716bf6b5" + } + }, + "31c640b92c21a1f1465c91070b4b3b4d6854195f" : { + "balance" : "0", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "37f998764813b136ddf5a754f34063fd03065e36" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + "0x02" : "0x37f998764813b136ddf5a754f34063fd03065e36" + } + }, + "37fa399a749c121f8a15ce77e3d9f9bec8020d7a" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + "0x02" : "0x37fa399a749c121f8a15ce77e3d9f9bec8020d7a" + } + }, + "4f36659fa632310b6ec438dea4085b522a2dd077" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + "0x02" : "0x4f36659fa632310b6ec438dea4085b522a2dd077" + } + }, + "62c01474f089b07dae603491675dc5b5748f7049" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + "0x02" : "0x62c01474f089b07dae603491675dc5b5748f7049" + } + }, + "729af7294be595a0efd7d891c9e51f89c07950c7" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + "0x02" : "0x729af7294be595a0efd7d891c9e51f89c07950c7" + } + }, + "83e3e5a16d3b696a0314b30b2534804dd5e11197" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + "0x02" : "0x83e3e5a16d3b696a0314b30b2534804dd5e11197" + } + }, + "8703df2417e0d7c59d063caa9583cb10a4d20532" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + "0x02" : "0x8703df2417e0d7c59d063caa9583cb10a4d20532" + } + }, + "8dffcd74e5b5923512916c6a64b502689cfa65e1" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + "0x02" : "0x8dffcd74e5b5923512916c6a64b502689cfa65e1" + } + }, + "95a4d7cccb5204733874fa87285a176fe1e9e240" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + "0x02" : "0x95a4d7cccb5204733874fa87285a176fe1e9e240" + } + }, + "99b2fcba8120bedd048fe79f5262a6690ed38c39" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + "0x02" : "0x99b2fcba8120bedd048fe79f5262a6690ed38c39" + } + }, + "a4202b8b8afd5354e3e40a219bdc17f6001bf2cf" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + "0x02" : "0xa4202b8b8afd5354e3e40a219bdc17f6001bf2cf" + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "89999", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "a9647f4a0a14042d91dc33c0328030a7157c93ae" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + "0x02" : "0xa9647f4a0a14042d91dc33c0328030a7157c93ae" + } + }, + "aa6cffe5185732689c18f37a7f86170cb7304c2a" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + "0x02" : "0xaa6cffe5185732689c18f37a7f86170cb7304c2a" + } + }, + "aae4a2e3c51c04606dcb3723456e58f3ed214f45" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + "0x02" : "0xaae4a2e3c51c04606dcb3723456e58f3ed214f45" + } + }, + "c37a43e940dfb5baf581a0b82b351d48305fc885" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + "0x02" : "0xc37a43e940dfb5baf581a0b82b351d48305fc885" + } + }, + "d2571607e241ecf590ed94b12d87c94babe36db6" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + "0x02" : "0xd2571607e241ecf590ed94b12d87c94babe36db6" + } + }, + "f735071cbee190d76b704ce68384fc21e389fbe7" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + "0x02" : "0xf735071cbee190d76b704ce68384fc21e389fbe7" + } + } + }, + "pre" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "0", + "code" : "0x3060025560206000600039602060006000f0", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "100000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "0x00", + "gasLimit" : "10000", + "gasPrice" : "1", + "nonce" : "0", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", + "value" : "1" + } + }, + "CallTheContractToCreateContractWithInitCode" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "45678256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + ], + "out" : "0x", + "post" : { + "04110d816c380812a427968ece99b1c963dfbce6" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + "0x02" : "0x04110d816c380812a427968ece99b1c963dfbce6" + } + }, + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "10001", + "code" : "0x3060025560206000600039602060006000f0", + "nonce" : "1", + "storage" : { + "0x02" : "0x095e7baea6a6c7c4c2dfeb977efac326af552d87" + } + }, + "0a517d755cebbf66312b30fff713666a9cb917e0" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + "0x02" : "0x0a517d755cebbf66312b30fff713666a9cb917e0" + } + }, + "24dd378f51adc67a50e339e8031fe9bd4aafab36" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + "0x02" : "0x24dd378f51adc67a50e339e8031fe9bd4aafab36" + } + }, + "293f982d000532a7861ab122bdc4bbfd26bf9030" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + "0x02" : "0x293f982d000532a7861ab122bdc4bbfd26bf9030" + } + }, + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "10000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "2cf5732f017b0cf1b1f13a1478e10239716bf6b5" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + "0x02" : "0x2cf5732f017b0cf1b1f13a1478e10239716bf6b5" + } + }, + "31c640b92c21a1f1465c91070b4b3b4d6854195f" : { + "balance" : "0", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "37f998764813b136ddf5a754f34063fd03065e36" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + "0x02" : "0x37f998764813b136ddf5a754f34063fd03065e36" + } + }, + "37fa399a749c121f8a15ce77e3d9f9bec8020d7a" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + "0x02" : "0x37fa399a749c121f8a15ce77e3d9f9bec8020d7a" + } + }, + "4f36659fa632310b6ec438dea4085b522a2dd077" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + "0x02" : "0x4f36659fa632310b6ec438dea4085b522a2dd077" + } + }, + "62c01474f089b07dae603491675dc5b5748f7049" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + "0x02" : "0x62c01474f089b07dae603491675dc5b5748f7049" + } + }, + "729af7294be595a0efd7d891c9e51f89c07950c7" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + "0x02" : "0x729af7294be595a0efd7d891c9e51f89c07950c7" + } + }, + "83e3e5a16d3b696a0314b30b2534804dd5e11197" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + "0x02" : "0x83e3e5a16d3b696a0314b30b2534804dd5e11197" + } + }, + "8703df2417e0d7c59d063caa9583cb10a4d20532" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + "0x02" : "0x8703df2417e0d7c59d063caa9583cb10a4d20532" + } + }, + "8dffcd74e5b5923512916c6a64b502689cfa65e1" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + "0x02" : "0x8dffcd74e5b5923512916c6a64b502689cfa65e1" + } + }, + "95a4d7cccb5204733874fa87285a176fe1e9e240" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + "0x02" : "0x95a4d7cccb5204733874fa87285a176fe1e9e240" + } + }, + "99b2fcba8120bedd048fe79f5262a6690ed38c39" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + "0x02" : "0x99b2fcba8120bedd048fe79f5262a6690ed38c39" + } + }, + "a4202b8b8afd5354e3e40a219bdc17f6001bf2cf" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + "0x02" : "0xa4202b8b8afd5354e3e40a219bdc17f6001bf2cf" + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "89999", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "a9647f4a0a14042d91dc33c0328030a7157c93ae" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + "0x02" : "0xa9647f4a0a14042d91dc33c0328030a7157c93ae" + } + }, + "aa6cffe5185732689c18f37a7f86170cb7304c2a" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + "0x02" : "0xaa6cffe5185732689c18f37a7f86170cb7304c2a" + } + }, + "aae4a2e3c51c04606dcb3723456e58f3ed214f45" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + "0x02" : "0xaae4a2e3c51c04606dcb3723456e58f3ed214f45" + } + }, + "c37a43e940dfb5baf581a0b82b351d48305fc885" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + "0x02" : "0xc37a43e940dfb5baf581a0b82b351d48305fc885" + } + }, + "d2571607e241ecf590ed94b12d87c94babe36db6" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + "0x02" : "0xd2571607e241ecf590ed94b12d87c94babe36db6" + } + }, + "f735071cbee190d76b704ce68384fc21e389fbe7" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + "0x02" : "0xf735071cbee190d76b704ce68384fc21e389fbe7" + } + } + }, + "pre" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "10000", + "code" : "0x3060025560206000600039602060006000f0", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "100000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "0x00", + "gasLimit" : "10000", + "gasPrice" : "1", + "nonce" : "0", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", + "value" : "1" + } + }, + "CallTheContractToCreateEmptyContract" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "45678256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + ], + "out" : "0x", + "post" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1", + "code" : "0x602060006000f0", + "nonce" : "1", + "storage" : { + } + }, + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "605", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "99394", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "d2571607e241ecf590ed94b12d87c94babe36db6" : { + "balance" : "0", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "pre" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "0", + "code" : "0x602060006000f0", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "100000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "0x00", + "gasLimit" : "10000", + "gasPrice" : "1", + "nonce" : "0", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", + "value" : "1" + } + }, + "NotEnoughCashContractCreation" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "45678256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + ], + "out" : "0x", + "post" : { + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "2", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "pre" : { + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "2", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "0x600a80600c6000396000f200600160008035811a8100", + "gasLimit" : "599", + "gasPrice" : "1", + "nonce" : "0", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "", + "value" : "1" + } + }, + "OutOfGasContractCreation" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "45678256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + ], + "out" : "0x", + "post" : { + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "1770", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { + "balance" : "1", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "8229", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + } + }, + "pre" : { + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "10000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "0x600a80600c6000396000f200600160008035811a8100", + "gasLimit" : "590", + "gasPrice" : "3", + "nonce" : "0", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "", + "value" : "1" + } + }, + "TransactionContractCreation" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "45678256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + ], + "out" : "0x", + "post" : { + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "599", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { + "balance" : "1", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "99400", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + } + }, + "pre" : { + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "100000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "0x600a80600c6000396000f200600160008035811a8100", + "gasLimit" : "599", + "gasPrice" : "1", + "nonce" : "0", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "", + "value" : "1" + } + }, + "TransactionCreateSuicideContract" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "45678256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + ], + "out" : "0x", + "post" : { + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "1000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { + "balance" : "1", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "8999", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + } + }, + "pre" : { + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "10000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "0x600a80600c6000396000f200ff600160008035811a81", + "gasLimit" : "1000", + "gasPrice" : "1", + "nonce" : "0", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "", + "value" : "1" + } + }, + "TransactionStopInitCode" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "45678256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + ], + "out" : "0x", + "post" : { + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "599", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { + "balance" : "1", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "9400", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + } + }, + "pre" : { + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "10000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "0x600a80600c600039600000f20000600160008035811a81", + "gasLimit" : "1000", + "gasPrice" : "1", + "nonce" : "0", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "", + "value" : "1" + } + }, + "TransactionSuicideInitCode" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "45678256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + ], + "out" : "0x", + "post" : { + "0000000000000000000000000000000000000000" : { + "balance" : "1", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "611", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "9388", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + } + }, + "pre" : { + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "10000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "0x600a80600c6000396000fff2ffff600160008035811a81", + "gasLimit" : "1000", + "gasPrice" : "1", + "nonce" : "0", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "", + "value" : "1" + } + } +} \ No newline at end of file diff --git a/tests/files/StateTests/stRefundTest.json b/tests/files/StateTests/stRefundTest.json new file mode 100644 index 000000000..c558a2292 --- /dev/null +++ b/tests/files/StateTests/stRefundTest.json @@ -0,0 +1,252 @@ +{ + "refund_NoOOG_1" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + ], + "out" : "0x", + "post" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000000000", + "code" : "0x6000600155", + "nonce" : "0", + "storage" : { + } + }, + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "402", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "100", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + } + }, + "pre" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000000000", + "code" : "0x6000600155", + "nonce" : "0", + "storage" : { + "0x01" : "0x01" + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "502", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "", + "gasLimit" : "502", + "gasPrice" : "1", + "nonce" : "0", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", + "value" : "0" + } + }, + "refund_OOG" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + ], + "out" : "0x", + "post" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000000000", + "code" : "0x6000600155", + "nonce" : "0", + "storage" : { + "0x01" : "0x01" + } + }, + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "500", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "0", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + } + }, + "pre" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000000000", + "code" : "0x6000600155", + "nonce" : "0", + "storage" : { + "0x01" : "0x01" + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "500", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "", + "gasLimit" : "500", + "gasPrice" : "1", + "nonce" : "0", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", + "value" : "0" + } + }, + "refund_changeNonZeroStorage" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + ], + "out" : "0x", + "post" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000000010", + "code" : "0x6017600155", + "nonce" : "0", + "storage" : { + "0x01" : "0x17" + } + }, + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "602", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "388", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + } + }, + "pre" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000000000", + "code" : "0x6017600155", + "nonce" : "0", + "storage" : { + "0x01" : "0x01" + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "1000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "", + "gasLimit" : "850", + "gasPrice" : "1", + "nonce" : "0", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", + "value" : "10" + } + }, + "refund_getEtherBack" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + ], + "out" : "0x", + "post" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000000010", + "code" : "0x6000600155", + "nonce" : "0", + "storage" : { + } + }, + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "402", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "588", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + } + }, + "pre" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000000000", + "code" : "0x6000600155", + "nonce" : "0", + "storage" : { + "0x01" : "0x01" + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "1000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "", + "gasLimit" : "850", + "gasPrice" : "1", + "nonce" : "0", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", + "value" : "10" + } + } +} \ No newline at end of file diff --git a/tests/files/StateTests/stSystemOperationsTest.json b/tests/files/StateTests/stSystemOperationsTest.json index a74d32ae5..612331ae3 100644 --- a/tests/files/StateTests/stSystemOperationsTest.json +++ b/tests/files/StateTests/stSystemOperationsTest.json @@ -5827,4 +5827,4 @@ "value" : "100000" } } -} +} \ No newline at end of file diff --git a/tests/files/StateTests/stTransactionTest.json b/tests/files/StateTests/stTransactionTest.json new file mode 100644 index 000000000..0de850797 --- /dev/null +++ b/tests/files/StateTests/stTransactionTest.json @@ -0,0 +1,277 @@ +{ + "EmptyTransaction" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "45678256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + ], + "out" : "0x", + "post" : { + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "100000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "pre" : { + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "100000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "", + "gasLimit" : "", + "gasPrice" : "", + "nonce" : "", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "", + "value" : "" + } + }, + "TransactionFromCoinbaseNotEnoughFounds" : { + "env" : { + "currentCoinbase" : "a94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "currentDifficulty" : "45678256", + "currentGasLimit" : "1100", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + ], + "out" : "0x", + "post" : { + "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "1000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "pre" : { + "b94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "1000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "", + "gasLimit" : "600", + "gasPrice" : "1", + "nonce" : "", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value" : "502" + } + }, + "TransactionSendingToEmpty" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "45678256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + ], + "out" : "0x", + "post" : { + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "500", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "6295ee1b4f6dd65047762f924ecd367c17eabf8f" : { + "balance" : "0", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "99500", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + } + }, + "pre" : { + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "100000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "", + "gasLimit" : "500", + "gasPrice" : "1", + "nonce" : "", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "", + "value" : "" + } + }, + "TransactionSendingToZero" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "45678256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + ], + "out" : "0x", + "post" : { + "0000000000000000000000000000000000000000" : { + "balance" : "1", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "500", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "99499", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + } + }, + "pre" : { + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "100000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "", + "gasLimit" : "5000", + "gasPrice" : "1", + "nonce" : "", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "0000000000000000000000000000000000000000", + "value" : "1" + } + }, + "TransactionToItself" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "45678256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + ], + "out" : "0x", + "post" : { + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "500", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "99500", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + } + }, + "pre" : { + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "100000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "", + "gasLimit" : "5000", + "gasPrice" : "1", + "nonce" : "", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "a94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value" : "1" + } + }, + "TransactionToItselfNotEnoughFounds" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "45678256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + ], + "out" : "0x", + "post" : { + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "1101", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "pre" : { + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "1101", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "", + "gasLimit" : "600", + "gasPrice" : "1", + "nonce" : "", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "a94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "value" : "502" + } + } +} \ No newline at end of file diff --git a/tests/files/VMTests/vmArithmeticTest.json b/tests/files/VMTests/vmArithmeticTest.json index 2cc165f5d..88d209dfa 100644 --- a/tests/files/VMTests/vmArithmeticTest.json +++ b/tests/files/VMTests/vmArithmeticTest.json @@ -12,12 +12,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9696", @@ -57,12 +57,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x60047fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9696", @@ -102,12 +102,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "10000", @@ -146,12 +146,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x6000600001600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9896", @@ -190,12 +190,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600101600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9896", @@ -234,12 +234,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x60026002600108600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9695", @@ -279,12 +279,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x60026002600003600160000308600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9691", @@ -324,12 +324,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x60036001600660000308600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9693", @@ -369,12 +369,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x60036001600660000308600360056000030714600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9887", @@ -413,12 +413,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x60036001600660000308600360056000030614600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9687", @@ -458,12 +458,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x60036000036001600408600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9693", @@ -503,12 +503,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x60026003600003600160040814600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9891", @@ -547,12 +547,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x6002600504600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9696", @@ -592,12 +592,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x6018601704600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9896", @@ -636,12 +636,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x6018600004600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9896", @@ -680,12 +680,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x6001600104600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9696", @@ -725,12 +725,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x6000600204600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9896", @@ -769,12 +769,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x600260020a600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9695", @@ -814,12 +814,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0a600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9664", @@ -859,12 +859,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x637fffffff637fffffff0a600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9692", @@ -904,12 +904,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x637fffffff60000a600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9892", @@ -948,12 +948,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x6000637fffffff0a600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9696", @@ -993,12 +993,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x60016101010a600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9695", @@ -1038,12 +1038,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x61010160010a600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9694", @@ -1083,12 +1083,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x61010160020a600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9894", @@ -1127,12 +1127,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x6003600206600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9696", @@ -1172,12 +1172,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff06600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9696", @@ -1217,12 +1217,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600006600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9896", @@ -1261,12 +1261,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x6000600306600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9896", @@ -1305,12 +1305,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x6003600260000306600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9694", @@ -1350,12 +1350,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x6003600202600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9696", @@ -1395,12 +1395,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff02600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9696", @@ -1440,12 +1440,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x6017600002600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9896", @@ -1484,12 +1484,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x6001601702600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9696", @@ -1529,12 +1529,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f800000000000000000000000000000000000000000000000000000000000000002600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9696", @@ -1574,12 +1574,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x7f80000000000000000000000000000000000000000000000000000000000000007f800000000000000000000000000000000000000000000000000000000000000002600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9896", @@ -1618,12 +1618,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff02600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9696", @@ -1663,12 +1663,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x60026002600109600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9895", @@ -1707,12 +1707,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x60036002600003600160000309600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9891", @@ -1751,12 +1751,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x60036001600560000309600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9693", @@ -1796,12 +1796,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x60036001600560000309600360056000030714600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9887", @@ -1840,12 +1840,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x60036001600560000309600360056000030614600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9687", @@ -1885,12 +1885,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x60036000036001600509600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9693", @@ -1930,12 +1930,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x60026003600003600160050914600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9891", @@ -1974,12 +1974,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60000305600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9694", @@ -2019,12 +2019,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff05600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9694", @@ -2064,12 +2064,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x6004600003600260000305600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9892", @@ -2108,12 +2108,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x6002600003600405600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9694", @@ -2153,12 +2153,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x6000600003600360000305600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9892", @@ -2197,12 +2197,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60000305600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9894", @@ -2241,12 +2241,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x62126af460500b600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9696", @@ -2286,12 +2286,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x600060000b600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9896", @@ -2330,12 +2330,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60000b600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9696", @@ -2375,12 +2375,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0b600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9696", @@ -2420,12 +2420,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0b600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9696", @@ -2465,12 +2465,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x60ff68f000000000000000010b600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9696", @@ -2510,12 +2510,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0b600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9896", @@ -2554,12 +2554,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x62122f6a60000b600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9696", @@ -2599,12 +2599,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x62126af460010b600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9696", @@ -2644,12 +2644,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x6212faf460010b600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9696", @@ -2689,12 +2689,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x66f000000000000161ffff0b600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9696", @@ -2734,12 +2734,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x62122ff460000b600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9696", @@ -2779,12 +2779,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x6003600003600560000307600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9692", @@ -2824,12 +2824,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x6003600003600507600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9694", @@ -2869,12 +2869,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x6003600560000307600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9694", @@ -2914,12 +2914,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600260000307600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9894", @@ -2958,12 +2958,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x6000600260000307600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9894", @@ -3002,12 +3002,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x00", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "10000", @@ -3046,12 +3046,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x6001601703600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9696", @@ -3091,12 +3091,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x6003600203600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9696", @@ -3136,12 +3136,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x6017600003600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9696", @@ -3181,12 +3181,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600003600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9696", @@ -3226,12 +3226,12 @@ }, "exec" : { "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", - "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "caller" : "cd1722f2947def4cf144679da39c4c32bdc35681", "code" : "0x60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03600055", "data" : "0x", "gas" : "10000", "gasPrice" : "100000000000000", - "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "origin" : "cd1722f2947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, "gas" : "9696", @@ -3258,4 +3258,4 @@ } } } -} \ No newline at end of file +} From db494170dc819b1eb0d267b6e1ab36c6cfb63569 Mon Sep 17 00:00:00 2001 From: obscuren Date: Thu, 18 Dec 2014 15:18:13 +0100 Subject: [PATCH 63/79] Created generic message (easy for testing) --- cmd/mist/gui.go | 16 +++---- core/block_manager.go | 4 +- core/state_transition.go | 98 ++++++++++++++++++++++++++------------- core/transaction_pool.go | 17 +++---- core/types/transaction.go | 88 ++++++++++++++++++++++------------- core/vm_env.go | 10 ++-- miner/miner.go | 6 +-- xeth/hexface.go | 4 +- xeth/js_types.go | 10 ++-- xeth/pipe.go | 8 ++-- 10 files changed, 159 insertions(+), 102 deletions(-) diff --git a/cmd/mist/gui.go b/cmd/mist/gui.go index 773688ffc..46f264f35 100644 --- a/cmd/mist/gui.go +++ b/cmd/mist/gui.go @@ -305,13 +305,13 @@ func (gui *Gui) insertTransaction(window string, tx *types.Transaction) { var ( ptx = xeth.NewJSTx(tx, pipe.World().State()) - send = nameReg.Storage(tx.Sender()) - rec = nameReg.Storage(tx.Recipient) + send = nameReg.Storage(tx.From()) + rec = nameReg.Storage(tx.To()) s, r string ) if tx.CreatesContract() { - rec = nameReg.Storage(tx.CreationAddress(pipe.World().State())) + rec = nameReg.Storage(core.AddressFromMessage(tx)) } if send.Len() != 0 { @@ -323,9 +323,9 @@ func (gui *Gui) insertTransaction(window string, tx *types.Transaction) { r = strings.Trim(rec.Str(), "\x00") } else { if tx.CreatesContract() { - r = ethutil.Bytes2Hex(tx.CreationAddress(pipe.World().State())) + r = ethutil.Bytes2Hex(core.AddressFromMessage(tx)) } else { - r = ethutil.Bytes2Hex(tx.Recipient) + r = ethutil.Bytes2Hex(tx.To()) } } ptx.Sender = s @@ -449,11 +449,11 @@ func (gui *Gui) update() { object := state.GetAccount(gui.address()) if bytes.Compare(tx.Sender(), gui.address()) == 0 { - object.SubAmount(tx.Value) + object.SubAmount(tx.Value()) gui.txDb.Put(tx.Hash(), tx.RlpEncode()) - } else if bytes.Compare(tx.Recipient, gui.address()) == 0 { - object.AddAmount(tx.Value) + } else if bytes.Compare(tx.To(), gui.address()) == 0 { + object.AddAmount(tx.Value()) gui.txDb.Put(tx.Hash(), tx.RlpEncode()) } diff --git a/core/block_manager.go b/core/block_manager.go index 794c87f52..aa845a007 100644 --- a/core/block_manager.go +++ b/core/block_manager.go @@ -111,7 +111,7 @@ done: // If we are mining this block and validating we want to set the logs back to 0 state.EmptyLogs() - txGas := new(big.Int).Set(tx.Gas) + txGas := new(big.Int).Set(tx.Gas()) cb := state.GetStateObject(coinbase.Address()) st := NewStateTransition(cb, tx, state, block) @@ -134,7 +134,7 @@ done: } txGas.Sub(txGas, st.gas) - cumulativeSum.Add(cumulativeSum, new(big.Int).Mul(txGas, tx.GasPrice)) + cumulativeSum.Add(cumulativeSum, new(big.Int).Mul(txGas, tx.GasPrice())) // Update the state with pending changes state.Update(txGas) diff --git a/core/state_transition.go b/core/state_transition.go index 820ba66e6..a6b654842 100644 --- a/core/state_transition.go +++ b/core/state_transition.go @@ -5,6 +5,8 @@ import ( "math/big" "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/ethutil" "github.com/ethereum/go-ethereum/state" "github.com/ethereum/go-ethereum/vm" ) @@ -27,7 +29,7 @@ import ( */ type StateTransition struct { coinbase, receiver []byte - tx *types.Transaction + msg Message gas, gasPrice *big.Int value *big.Int data []byte @@ -35,10 +37,42 @@ type StateTransition struct { block *types.Block cb, rec, sen *state.StateObject + + Env vm.Environment } -func NewStateTransition(coinbase *state.StateObject, tx *types.Transaction, state *state.StateDB, block *types.Block) *StateTransition { - return &StateTransition{coinbase.Address(), tx.Recipient, tx, new(big.Int), new(big.Int).Set(tx.GasPrice), tx.Value, tx.Data, state, block, coinbase, nil, nil} +type Message interface { + Hash() []byte + + CreatesContract() bool + + From() []byte + To() []byte + + GasValue() *big.Int + GasPrice() *big.Int + Gas() *big.Int + Value() *big.Int + + Nonce() uint64 + Data() []byte +} + +func AddressFromMessage(msg Message) []byte { + // Generate a new address + return crypto.Sha3(ethutil.NewValue([]interface{}{msg.From(), msg.Nonce()}).Encode())[12:] +} + +func NewStateTransition(coinbase *state.StateObject, msg Message, state *state.StateDB, block *types.Block) *StateTransition { + return &StateTransition{coinbase.Address(), msg.To(), msg, new(big.Int), new(big.Int).Set(msg.GasPrice()), msg.Value(), msg.Data(), state, block, coinbase, nil, nil, nil} +} + +func (self *StateTransition) VmEnv() vm.Environment { + if self.Env == nil { + self.Env = NewEnv(self.state, self.msg, self.block) + } + + return self.Env } func (self *StateTransition) Coinbase() *state.StateObject { @@ -49,17 +83,17 @@ func (self *StateTransition) Coinbase() *state.StateObject { self.cb = self.state.GetOrNewStateObject(self.coinbase) return self.cb } -func (self *StateTransition) Sender() *state.StateObject { +func (self *StateTransition) From() *state.StateObject { if self.sen != nil { return self.sen } - self.sen = self.state.GetOrNewStateObject(self.tx.Sender()) + self.sen = self.state.GetOrNewStateObject(self.msg.From()) return self.sen } -func (self *StateTransition) Receiver() *state.StateObject { - if self.tx != nil && self.tx.CreatesContract() { +func (self *StateTransition) To() *state.StateObject { + if self.msg != nil && self.msg.CreatesContract() { return nil } @@ -67,7 +101,7 @@ func (self *StateTransition) Receiver() *state.StateObject { return self.rec } - self.rec = self.state.GetOrNewStateObject(self.tx.Recipient) + self.rec = self.state.GetOrNewStateObject(self.msg.To()) return self.rec } @@ -87,41 +121,41 @@ func (self *StateTransition) AddGas(amount *big.Int) { func (self *StateTransition) BuyGas() error { var err error - sender := self.Sender() - if sender.Balance().Cmp(self.tx.GasValue()) < 0 { - return fmt.Errorf("Insufficient funds to pre-pay gas. Req %v, has %v", self.tx.GasValue(), sender.Balance()) + sender := self.From() + if sender.Balance().Cmp(self.msg.GasValue()) < 0 { + return fmt.Errorf("Insufficient funds to pre-pay gas. Req %v, has %v", self.msg.GasValue(), sender.Balance()) } coinbase := self.Coinbase() - err = coinbase.BuyGas(self.tx.Gas, self.tx.GasPrice) + err = coinbase.BuyGas(self.msg.Gas(), self.msg.GasPrice()) if err != nil { return err } - self.AddGas(self.tx.Gas) - sender.SubAmount(self.tx.GasValue()) + self.AddGas(self.msg.Gas()) + sender.SubAmount(self.msg.GasValue()) return nil } func (self *StateTransition) RefundGas() { - coinbase, sender := self.Coinbase(), self.Sender() - coinbase.RefundGas(self.gas, self.tx.GasPrice) + coinbase, sender := self.Coinbase(), self.From() + coinbase.RefundGas(self.gas, self.msg.GasPrice()) // Return remaining gas - remaining := new(big.Int).Mul(self.gas, self.tx.GasPrice) + remaining := new(big.Int).Mul(self.gas, self.msg.GasPrice()) sender.AddAmount(remaining) } func (self *StateTransition) preCheck() (err error) { var ( - tx = self.tx - sender = self.Sender() + msg = self.msg + sender = self.From() ) // Make sure this transaction's nonce is correct - if sender.Nonce != tx.Nonce { - return NonceError(tx.Nonce, sender.Nonce) + if sender.Nonce != msg.Nonce() { + return NonceError(msg.Nonce(), sender.Nonce) } // Pre-pay gas / Buy gas of the coinbase account @@ -133,7 +167,7 @@ func (self *StateTransition) preCheck() (err error) { } func (self *StateTransition) TransitionState() (err error) { - statelogger.Debugf("(~) %x\n", self.tx.Hash()) + statelogger.Debugf("(~) %x\n", self.msg.Hash()) // XXX Transactions after this point are considered valid. if err = self.preCheck(); err != nil { @@ -141,8 +175,8 @@ func (self *StateTransition) TransitionState() (err error) { } var ( - tx = self.tx - sender = self.Sender() + msg = self.msg + sender = self.From() ) defer self.RefundGas() @@ -169,15 +203,15 @@ func (self *StateTransition) TransitionState() (err error) { } var ret []byte - vmenv := NewEnv(self.state, self.tx, self.block) + vmenv := self.VmEnv() var ref vm.ClosureRef - if tx.CreatesContract() { - self.rec = MakeContract(tx, self.state) + if msg.CreatesContract() { + self.rec = MakeContract(msg, self.state) - ret, err, ref = vmenv.Create(sender, self.rec.Address(), self.tx.Data, self.gas, self.gasPrice, self.value) + ret, err, ref = vmenv.Create(sender, self.rec.Address(), self.msg.Data(), self.gas, self.gasPrice, self.value) ref.SetCode(ret) } else { - ret, err = vmenv.Call(self.Sender(), self.Receiver().Address(), self.tx.Data, self.gas, self.gasPrice, self.value) + ret, err = vmenv.Call(self.From(), self.To().Address(), self.msg.Data(), self.gas, self.gasPrice, self.value) } if err != nil { statelogger.Debugln(err) @@ -187,11 +221,11 @@ func (self *StateTransition) TransitionState() (err error) { } // Converts an transaction in to a state object -func MakeContract(tx *types.Transaction, state *state.StateDB) *state.StateObject { - addr := tx.CreationAddress(state) +func MakeContract(msg Message, state *state.StateDB) *state.StateObject { + addr := AddressFromMessage(msg) contract := state.GetOrNewStateObject(addr) - contract.InitCode = tx.Data + contract.InitCode = msg.Data() return contract } diff --git a/core/transaction_pool.go b/core/transaction_pool.go index 36b0beb28..da91ec568 100644 --- a/core/transaction_pool.go +++ b/core/transaction_pool.go @@ -112,8 +112,8 @@ func (pool *TxPool) ValidateTransaction(tx *types.Transaction) error { return fmt.Errorf("No last block on the block chain") } - if len(tx.Recipient) != 0 && len(tx.Recipient) != 20 { - return fmt.Errorf("Invalid recipient. len = %d", len(tx.Recipient)) + if len(tx.To()) != 0 && len(tx.To()) != 20 { + return fmt.Errorf("Invalid recipient. len = %d", len(tx.To())) } v, _, _ := tx.Curve() @@ -124,15 +124,15 @@ func (pool *TxPool) ValidateTransaction(tx *types.Transaction) error { // Get the sender sender := pool.chainManager.State().GetAccount(tx.Sender()) - totAmount := new(big.Int).Set(tx.Value) + totAmount := new(big.Int).Set(tx.Value()) // Make sure there's enough in the sender's account. Having insufficient // funds won't invalidate this transaction but simple ignores it. if sender.Balance().Cmp(totAmount) < 0 { - return fmt.Errorf("Insufficient amount in sender's (%x) account", tx.Sender()) + return fmt.Errorf("Insufficient amount in sender's (%x) account", tx.From()) } if tx.IsContract() { - if tx.GasPrice.Cmp(big.NewInt(minGasPrice)) < 0 { + if tx.GasPrice().Cmp(big.NewInt(minGasPrice)) < 0 { return fmt.Errorf("Gasprice too low, %s given should be at least %d.", tx.GasPrice, minGasPrice) } } @@ -160,10 +160,7 @@ func (self *TxPool) Add(tx *types.Transaction) error { self.addTransaction(tx) - tmp := make([]byte, 4) - copy(tmp, tx.Recipient) - - txplogger.Debugf("(t) %x => %x (%v) %x\n", tx.Sender()[:4], tmp, tx.Value, tx.Hash()) + txplogger.Debugf("(t) %x => %x (%v) %x\n", tx.From()[:4], tx.To()[:4], tx.Value, tx.Hash()) // Notify the subscribers go self.eventMux.Post(TxPreEvent{tx}) @@ -200,7 +197,7 @@ func (pool *TxPool) RemoveInvalid(state *state.StateDB) { tx := e.Value.(*types.Transaction) sender := state.GetAccount(tx.Sender()) err := pool.ValidateTransaction(tx) - if err != nil || sender.Nonce >= tx.Nonce { + if err != nil || sender.Nonce >= tx.Nonce() { pool.pool.Remove(e) } } diff --git a/core/types/transaction.go b/core/types/transaction.go index 63edef756..4b75d3abd 100644 --- a/core/types/transaction.go +++ b/core/types/transaction.go @@ -6,7 +6,6 @@ import ( "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/ethutil" - "github.com/ethereum/go-ethereum/state" "github.com/obscuren/secp256k1-go" ) @@ -18,12 +17,12 @@ func IsContractAddr(addr []byte) bool { } type Transaction struct { - Nonce uint64 - Recipient []byte - Value *big.Int - Gas *big.Int - GasPrice *big.Int - Data []byte + nonce uint64 + recipient []byte + value *big.Int + gas *big.Int + gasPrice *big.Int + data []byte v byte r, s []byte @@ -32,11 +31,11 @@ type Transaction struct { } func NewContractCreationTx(value, gas, gasPrice *big.Int, script []byte) *Transaction { - return &Transaction{Recipient: nil, Value: value, Gas: gas, GasPrice: gasPrice, Data: script, contractCreation: true} + return &Transaction{recipient: nil, value: value, gas: gas, gasPrice: gasPrice, data: script, contractCreation: true} } func NewTransactionMessage(to []byte, value, gas, gasPrice *big.Int, data []byte) *Transaction { - return &Transaction{Recipient: to, Value: value, GasPrice: gasPrice, Gas: gas, Data: data, contractCreation: IsContractAddr(to)} + return &Transaction{recipient: to, value: value, gasPrice: gasPrice, gas: gas, data: data, contractCreation: IsContractAddr(to)} } func NewTransactionFromBytes(data []byte) *Transaction { @@ -54,20 +53,52 @@ func NewTransactionFromValue(val *ethutil.Value) *Transaction { } func (self *Transaction) GasValue() *big.Int { - return new(big.Int).Mul(self.Gas, self.GasPrice) + return new(big.Int).Mul(self.gas, self.gasPrice) } func (self *Transaction) TotalValue() *big.Int { v := self.GasValue() - return v.Add(v, self.Value) + return v.Add(v, self.value) } func (tx *Transaction) Hash() []byte { - data := []interface{}{tx.Nonce, tx.GasPrice, tx.Gas, tx.Recipient, tx.Value, tx.Data} + data := []interface{}{tx.Nonce, tx.gasPrice, tx.gas, tx.recipient, tx.Value, tx.Data} return crypto.Sha3(ethutil.NewValue(data).Encode()) } +func (self *Transaction) Data() []byte { + return self.data +} + +func (self *Transaction) Gas() *big.Int { + return self.gas +} + +func (self *Transaction) GasPrice() *big.Int { + return self.gasPrice +} + +func (self *Transaction) Value() *big.Int { + return self.value +} + +func (self *Transaction) Nonce() uint64 { + return self.nonce +} + +func (self *Transaction) SetNonce(nonce uint64) { + self.nonce = nonce +} + +func (self *Transaction) From() []byte { + return self.Sender() +} + +func (self *Transaction) To() []byte { + return self.recipient +} + func (tx *Transaction) CreatesContract() bool { return tx.contractCreation } @@ -77,11 +108,6 @@ func (tx *Transaction) IsContract() bool { return tx.CreatesContract() } -func (tx *Transaction) CreationAddress(state *state.StateDB) []byte { - // Generate a new address - return crypto.Sha3(ethutil.NewValue([]interface{}{tx.Sender(), tx.Nonce}).Encode())[12:] -} - func (tx *Transaction) Curve() (v byte, r []byte, s []byte) { v = tx.v r = ethutil.LeftPadBytes(tx.r, 32) @@ -136,7 +162,7 @@ func (tx *Transaction) Sign(privk []byte) error { } func (tx *Transaction) RlpData() interface{} { - data := []interface{}{tx.Nonce, tx.GasPrice, tx.Gas, tx.Recipient, tx.Value, tx.Data} + data := []interface{}{tx.Nonce, tx.GasPrice, tx.Gas, tx.recipient, tx.Value, tx.Data} // TODO Remove prefixing zero's @@ -156,18 +182,18 @@ func (tx *Transaction) RlpDecode(data []byte) { } func (tx *Transaction) RlpValueDecode(decoder *ethutil.Value) { - tx.Nonce = decoder.Get(0).Uint() - tx.GasPrice = decoder.Get(1).BigInt() - tx.Gas = decoder.Get(2).BigInt() - tx.Recipient = decoder.Get(3).Bytes() - tx.Value = decoder.Get(4).BigInt() - tx.Data = decoder.Get(5).Bytes() + tx.nonce = decoder.Get(0).Uint() + tx.gasPrice = decoder.Get(1).BigInt() + tx.gas = decoder.Get(2).BigInt() + tx.recipient = decoder.Get(3).Bytes() + tx.value = decoder.Get(4).BigInt() + tx.data = decoder.Get(5).Bytes() tx.v = byte(decoder.Get(6).Uint()) tx.r = decoder.Get(7).Bytes() tx.s = decoder.Get(8).Bytes() - if IsContractAddr(tx.Recipient) { + if IsContractAddr(tx.recipient) { tx.contractCreation = true } } @@ -188,12 +214,12 @@ func (tx *Transaction) String() string { S: 0x%x `, tx.Hash(), - len(tx.Recipient) == 0, + len(tx.recipient) == 0, tx.Sender(), - tx.Recipient, - tx.Nonce, - tx.GasPrice, - tx.Gas, + tx.recipient, + tx.nonce, + tx.gasPrice, + tx.gas, tx.Value, tx.Data, tx.v, @@ -221,5 +247,5 @@ func (s Transactions) GetRlp(i int) []byte { return ethutil.Rlp(s[i]) } type TxByNonce struct{ Transactions } func (s TxByNonce) Less(i, j int) bool { - return s.Transactions[i].Nonce < s.Transactions[j].Nonce + return s.Transactions[i].nonce < s.Transactions[j].nonce } diff --git a/core/vm_env.go b/core/vm_env.go index 9e1815188..0b6744972 100644 --- a/core/vm_env.go +++ b/core/vm_env.go @@ -11,26 +11,26 @@ import ( type VMEnv struct { state *state.StateDB block *types.Block - tx *types.Transaction + msg Message depth int } -func NewEnv(state *state.StateDB, tx *types.Transaction, block *types.Block) *VMEnv { +func NewEnv(state *state.StateDB, msg Message, block *types.Block) *VMEnv { return &VMEnv{ state: state, block: block, - tx: tx, + msg: msg, } } -func (self *VMEnv) Origin() []byte { return self.tx.Sender() } +func (self *VMEnv) Origin() []byte { return self.msg.From() } func (self *VMEnv) BlockNumber() *big.Int { return self.block.Number } func (self *VMEnv) PrevHash() []byte { return self.block.PrevHash } func (self *VMEnv) Coinbase() []byte { return self.block.Coinbase } func (self *VMEnv) Time() int64 { return self.block.Time } func (self *VMEnv) Difficulty() *big.Int { return self.block.Difficulty } func (self *VMEnv) BlockHash() []byte { return self.block.Hash() } -func (self *VMEnv) Value() *big.Int { return self.tx.Value } +func (self *VMEnv) Value() *big.Int { return self.msg.Value() } func (self *VMEnv) State() *state.StateDB { return self.state } func (self *VMEnv) GasLimit() *big.Int { return self.block.GasLimit } func (self *VMEnv) Depth() int { return self.depth } diff --git a/miner/miner.go b/miner/miner.go index dc69dddc0..f63096b63 100644 --- a/miner/miner.go +++ b/miner/miner.go @@ -237,8 +237,8 @@ func (self *Miner) finiliseTxs() types.Transactions { key := self.eth.KeyManager() for i, ltx := range self.localTxs { tx := types.NewTransactionMessage(ltx.To, ethutil.Big(ltx.Value), ethutil.Big(ltx.Gas), ethutil.Big(ltx.GasPrice), ltx.Data) - tx.Nonce = state.GetNonce(self.Coinbase) - state.SetNonce(self.Coinbase, tx.Nonce+1) + tx.SetNonce(state.GetNonce(self.Coinbase)) + state.SetNonce(self.Coinbase, tx.Nonce()+1) tx.Sign(key.PrivateKey()) @@ -247,7 +247,7 @@ func (self *Miner) finiliseTxs() types.Transactions { // Faster than append for _, tx := range self.eth.TxPool().CurrentTransactions() { - if tx.GasPrice.Cmp(self.MinAcceptedGasPrice) >= 0 { + if tx.GasPrice().Cmp(self.MinAcceptedGasPrice) >= 0 { txs[actualSize] = tx actualSize++ } diff --git a/xeth/hexface.go b/xeth/hexface.go index 75ec5f43d..8fb42b4db 100644 --- a/xeth/hexface.go +++ b/xeth/hexface.go @@ -216,7 +216,7 @@ func (self *JSXEth) Transact(key, toStr, valueStr, gasStr, gasPriceStr, codeStr return "", err } if types.IsContractAddr(to) { - return ethutil.Bytes2Hex(tx.CreationAddress(nil)), nil + return ethutil.Bytes2Hex(core.AddressFromMessage(tx)), nil } return ethutil.Bytes2Hex(tx.Hash()), nil @@ -229,7 +229,7 @@ func (self *JSXEth) PushTx(txStr string) (*JSReceipt, error) { return nil, err } - return NewJSReciept(tx.CreatesContract(), tx.CreationAddress(self.World().State()), tx.Hash(), tx.Sender()), nil + return NewJSReciept(tx.CreatesContract(), core.AddressFromMessage(tx), tx.Hash(), tx.From()), nil } func (self *JSXEth) CompileMutan(code string) string { diff --git a/xeth/js_types.go b/xeth/js_types.go index da26439cf..2d6ee91bc 100644 --- a/xeth/js_types.go +++ b/xeth/js_types.go @@ -97,21 +97,21 @@ type JSTransaction struct { func NewJSTx(tx *types.Transaction, state *state.StateDB) *JSTransaction { hash := ethutil.Bytes2Hex(tx.Hash()) - receiver := ethutil.Bytes2Hex(tx.Recipient) + receiver := ethutil.Bytes2Hex(tx.To()) if receiver == "0000000000000000000000000000000000000000" { - receiver = ethutil.Bytes2Hex(tx.CreationAddress(state)) + receiver = ethutil.Bytes2Hex(core.AddressFromMessage(tx)) } sender := ethutil.Bytes2Hex(tx.Sender()) createsContract := tx.CreatesContract() var data string if tx.CreatesContract() { - data = strings.Join(core.Disassemble(tx.Data), "\n") + data = strings.Join(core.Disassemble(tx.Data()), "\n") } else { - data = ethutil.Bytes2Hex(tx.Data) + data = ethutil.Bytes2Hex(tx.Data()) } - return &JSTransaction{ref: tx, Hash: hash, Value: ethutil.CurrencyToString(tx.Value), Address: receiver, Contract: tx.CreatesContract(), Gas: tx.Gas.String(), GasPrice: tx.GasPrice.String(), Data: data, Sender: sender, CreatesContract: createsContract, RawData: ethutil.Bytes2Hex(tx.Data)} + return &JSTransaction{ref: tx, Hash: hash, Value: ethutil.CurrencyToString(tx.Value()), Address: receiver, Contract: tx.CreatesContract(), Gas: tx.Gas().String(), GasPrice: tx.GasPrice().String(), Data: data, Sender: sender, CreatesContract: createsContract, RawData: ethutil.Bytes2Hex(tx.Data())} } func (self *JSTransaction) ToString() string { diff --git a/xeth/pipe.go b/xeth/pipe.go index 1e4d0ec60..06820cc86 100644 --- a/xeth/pipe.go +++ b/xeth/pipe.go @@ -134,7 +134,7 @@ func (self *XEth) Transact(key *crypto.KeyPair, to []byte, value, gas, price *et state := self.chainManager.TransState() nonce := state.GetNonce(key.Address()) - tx.Nonce = nonce + tx.SetNonce(nonce) tx.Sign(key.PrivateKey) // Do some pre processing for our "pre" events and hooks @@ -150,7 +150,7 @@ func (self *XEth) Transact(key *crypto.KeyPair, to []byte, value, gas, price *et state.SetNonce(key.Address(), nonce+1) if contractCreation { - addr := tx.CreationAddress(self.World().State()) + addr := core.AddressFromMessage(tx) pipelogger.Infof("Contract addr %x\n", addr) } @@ -163,8 +163,8 @@ func (self *XEth) PushTx(tx *types.Transaction) ([]byte, error) { return nil, err } - if tx.Recipient == nil { - addr := tx.CreationAddress(self.World().State()) + if tx.To() == nil { + addr := core.AddressFromMessage(tx) pipelogger.Infof("Contract addr %x\n", addr) return addr, nil } From 5ad473d7581b92811c3a3e035274a82fc5568f57 Mon Sep 17 00:00:00 2001 From: obscuren Date: Thu, 18 Dec 2014 15:33:22 +0100 Subject: [PATCH 64/79] Moved methods to messages --- cmd/mist/gui.go | 4 ++-- core/state_transition.go | 10 ++++++---- core/transaction_pool.go | 6 ------ core/types/transaction.go | 23 ++--------------------- xeth/hexface.go | 2 +- xeth/js_types.go | 6 +++--- 6 files changed, 14 insertions(+), 37 deletions(-) diff --git a/cmd/mist/gui.go b/cmd/mist/gui.go index 46f264f35..7775889cc 100644 --- a/cmd/mist/gui.go +++ b/cmd/mist/gui.go @@ -310,7 +310,7 @@ func (gui *Gui) insertTransaction(window string, tx *types.Transaction) { s, r string ) - if tx.CreatesContract() { + if core.MessageCreatesContract(tx) { rec = nameReg.Storage(core.AddressFromMessage(tx)) } @@ -322,7 +322,7 @@ func (gui *Gui) insertTransaction(window string, tx *types.Transaction) { if rec.Len() != 0 { r = strings.Trim(rec.Str(), "\x00") } else { - if tx.CreatesContract() { + if core.MessageCreatesContract(tx) { r = ethutil.Bytes2Hex(core.AddressFromMessage(tx)) } else { r = ethutil.Bytes2Hex(tx.To()) diff --git a/core/state_transition.go b/core/state_transition.go index a6b654842..61c9558e3 100644 --- a/core/state_transition.go +++ b/core/state_transition.go @@ -44,8 +44,6 @@ type StateTransition struct { type Message interface { Hash() []byte - CreatesContract() bool - From() []byte To() []byte @@ -63,6 +61,10 @@ func AddressFromMessage(msg Message) []byte { return crypto.Sha3(ethutil.NewValue([]interface{}{msg.From(), msg.Nonce()}).Encode())[12:] } +func MessageCreatesContract(msg Message) bool { + return len(msg.To()) == 0 +} + func NewStateTransition(coinbase *state.StateObject, msg Message, state *state.StateDB, block *types.Block) *StateTransition { return &StateTransition{coinbase.Address(), msg.To(), msg, new(big.Int), new(big.Int).Set(msg.GasPrice()), msg.Value(), msg.Data(), state, block, coinbase, nil, nil, nil} } @@ -93,7 +95,7 @@ func (self *StateTransition) From() *state.StateObject { return self.sen } func (self *StateTransition) To() *state.StateObject { - if self.msg != nil && self.msg.CreatesContract() { + if self.msg != nil && MessageCreatesContract(self.msg) { return nil } @@ -205,7 +207,7 @@ func (self *StateTransition) TransitionState() (err error) { var ret []byte vmenv := self.VmEnv() var ref vm.ClosureRef - if msg.CreatesContract() { + if MessageCreatesContract(msg) { self.rec = MakeContract(msg, self.state) ret, err, ref = vmenv.Create(sender, self.rec.Address(), self.msg.Data(), self.gas, self.gasPrice, self.value) diff --git a/core/transaction_pool.go b/core/transaction_pool.go index da91ec568..58c2255a4 100644 --- a/core/transaction_pool.go +++ b/core/transaction_pool.go @@ -131,12 +131,6 @@ func (pool *TxPool) ValidateTransaction(tx *types.Transaction) error { return fmt.Errorf("Insufficient amount in sender's (%x) account", tx.From()) } - if tx.IsContract() { - if tx.GasPrice().Cmp(big.NewInt(minGasPrice)) < 0 { - return fmt.Errorf("Gasprice too low, %s given should be at least %d.", tx.GasPrice, minGasPrice) - } - } - // Increment the nonce making each tx valid only once to prevent replay // attacks diff --git a/core/types/transaction.go b/core/types/transaction.go index 4b75d3abd..21d455f2e 100644 --- a/core/types/transaction.go +++ b/core/types/transaction.go @@ -9,11 +9,8 @@ import ( "github.com/obscuren/secp256k1-go" ) -var ContractAddr = []byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} - func IsContractAddr(addr []byte) bool { return len(addr) == 0 - //return bytes.Compare(addr, ContractAddr) == 0 } type Transaction struct { @@ -25,17 +22,14 @@ type Transaction struct { data []byte v byte r, s []byte - - // Indicates whether this tx is a contract creation transaction - contractCreation bool } func NewContractCreationTx(value, gas, gasPrice *big.Int, script []byte) *Transaction { - return &Transaction{recipient: nil, value: value, gas: gas, gasPrice: gasPrice, data: script, contractCreation: true} + return &Transaction{recipient: nil, value: value, gas: gas, gasPrice: gasPrice, data: script} } func NewTransactionMessage(to []byte, value, gas, gasPrice *big.Int, data []byte) *Transaction { - return &Transaction{recipient: to, value: value, gasPrice: gasPrice, gas: gas, data: data, contractCreation: IsContractAddr(to)} + return &Transaction{recipient: to, value: value, gasPrice: gasPrice, gas: gas, data: data} } func NewTransactionFromBytes(data []byte) *Transaction { @@ -99,15 +93,6 @@ func (self *Transaction) To() []byte { return self.recipient } -func (tx *Transaction) CreatesContract() bool { - return tx.contractCreation -} - -/* Deprecated */ -func (tx *Transaction) IsContract() bool { - return tx.CreatesContract() -} - func (tx *Transaction) Curve() (v byte, r []byte, s []byte) { v = tx.v r = ethutil.LeftPadBytes(tx.r, 32) @@ -192,10 +177,6 @@ func (tx *Transaction) RlpValueDecode(decoder *ethutil.Value) { tx.r = decoder.Get(7).Bytes() tx.s = decoder.Get(8).Bytes() - - if IsContractAddr(tx.recipient) { - tx.contractCreation = true - } } func (tx *Transaction) String() string { diff --git a/xeth/hexface.go b/xeth/hexface.go index 8fb42b4db..bfd2dddd9 100644 --- a/xeth/hexface.go +++ b/xeth/hexface.go @@ -229,7 +229,7 @@ func (self *JSXEth) PushTx(txStr string) (*JSReceipt, error) { return nil, err } - return NewJSReciept(tx.CreatesContract(), core.AddressFromMessage(tx), tx.Hash(), tx.From()), nil + return NewJSReciept(core.MessageCreatesContract(tx), core.AddressFromMessage(tx), tx.Hash(), tx.From()), nil } func (self *JSXEth) CompileMutan(code string) string { diff --git a/xeth/js_types.go b/xeth/js_types.go index 2d6ee91bc..62867d6a9 100644 --- a/xeth/js_types.go +++ b/xeth/js_types.go @@ -102,16 +102,16 @@ func NewJSTx(tx *types.Transaction, state *state.StateDB) *JSTransaction { receiver = ethutil.Bytes2Hex(core.AddressFromMessage(tx)) } sender := ethutil.Bytes2Hex(tx.Sender()) - createsContract := tx.CreatesContract() + createsContract := core.MessageCreatesContract(tx) var data string - if tx.CreatesContract() { + if createsContract { data = strings.Join(core.Disassemble(tx.Data()), "\n") } else { data = ethutil.Bytes2Hex(tx.Data()) } - return &JSTransaction{ref: tx, Hash: hash, Value: ethutil.CurrencyToString(tx.Value()), Address: receiver, Contract: tx.CreatesContract(), Gas: tx.Gas().String(), GasPrice: tx.GasPrice().String(), Data: data, Sender: sender, CreatesContract: createsContract, RawData: ethutil.Bytes2Hex(tx.Data())} + return &JSTransaction{ref: tx, Hash: hash, Value: ethutil.CurrencyToString(tx.Value()), Address: receiver, Contract: createsContract, Gas: tx.Gas().String(), GasPrice: tx.GasPrice().String(), Data: data, Sender: sender, CreatesContract: createsContract, RawData: ethutil.Bytes2Hex(tx.Data())} } func (self *JSTransaction) ToString() string { From 198cc69357a0f25ae486a041786e1239c6f5ab0f Mon Sep 17 00:00:00 2001 From: obscuren Date: Thu, 18 Dec 2014 21:58:26 +0100 Subject: [PATCH 65/79] Gas corrections and vm fixes --- core/block_manager.go | 2 +- core/state_transition.go | 73 ++++++++++++++++++++------------------- core/types/transaction.go | 9 ----- state/state.go | 30 ++++++---------- tests/helper/vm.go | 37 +++++++++++++++++--- tests/vm/gh_test.go | 26 +++++++++++++- vm/common.go | 2 +- vm/vm_debug.go | 20 +++++------ 8 files changed, 116 insertions(+), 83 deletions(-) diff --git a/core/block_manager.go b/core/block_manager.go index aa845a007..8d319f84e 100644 --- a/core/block_manager.go +++ b/core/block_manager.go @@ -115,7 +115,7 @@ done: cb := state.GetStateObject(coinbase.Address()) st := NewStateTransition(cb, tx, state, block) - err = st.TransitionState() + _, err = st.TransitionState() if err != nil { switch { case IsNonceErr(err): diff --git a/core/state_transition.go b/core/state_transition.go index 61c9558e3..34d8cca74 100644 --- a/core/state_transition.go +++ b/core/state_transition.go @@ -31,6 +31,7 @@ type StateTransition struct { coinbase, receiver []byte msg Message gas, gasPrice *big.Int + initialGas *big.Int value *big.Int data []byte state *state.StateDB @@ -47,7 +48,6 @@ type Message interface { From() []byte To() []byte - GasValue() *big.Int GasPrice() *big.Int Gas() *big.Int Value() *big.Int @@ -65,8 +65,12 @@ func MessageCreatesContract(msg Message) bool { return len(msg.To()) == 0 } +func MessageGasValue(msg Message) *big.Int { + return new(big.Int).Mul(msg.Gas(), msg.GasPrice()) +} + func NewStateTransition(coinbase *state.StateObject, msg Message, state *state.StateDB, block *types.Block) *StateTransition { - return &StateTransition{coinbase.Address(), msg.To(), msg, new(big.Int), new(big.Int).Set(msg.GasPrice()), msg.Value(), msg.Data(), state, block, coinbase, nil, nil, nil} + return &StateTransition{coinbase.Address(), msg.To(), msg, new(big.Int), new(big.Int).Set(msg.GasPrice()), new(big.Int), msg.Value(), msg.Data(), state, block, coinbase, nil, nil, nil} } func (self *StateTransition) VmEnv() vm.Environment { @@ -78,33 +82,16 @@ func (self *StateTransition) VmEnv() vm.Environment { } func (self *StateTransition) Coinbase() *state.StateObject { - if self.cb != nil { - return self.cb - } - - self.cb = self.state.GetOrNewStateObject(self.coinbase) - return self.cb + return self.state.GetOrNewStateObject(self.coinbase) } func (self *StateTransition) From() *state.StateObject { - if self.sen != nil { - return self.sen - } - - self.sen = self.state.GetOrNewStateObject(self.msg.From()) - - return self.sen + return self.state.GetOrNewStateObject(self.msg.From()) } func (self *StateTransition) To() *state.StateObject { if self.msg != nil && MessageCreatesContract(self.msg) { return nil } - - if self.rec != nil { - return self.rec - } - - self.rec = self.state.GetOrNewStateObject(self.msg.To()) - return self.rec + return self.state.GetOrNewStateObject(self.msg.To()) } func (self *StateTransition) UseGas(amount *big.Int) error { @@ -124,8 +111,8 @@ func (self *StateTransition) BuyGas() error { var err error sender := self.From() - if sender.Balance().Cmp(self.msg.GasValue()) < 0 { - return fmt.Errorf("Insufficient funds to pre-pay gas. Req %v, has %v", self.msg.GasValue(), sender.Balance()) + if sender.Balance().Cmp(MessageGasValue(self.msg)) < 0 { + return fmt.Errorf("Insufficient funds to pre-pay gas. Req %v, has %v", MessageGasValue(self.msg), sender.Balance()) } coinbase := self.Coinbase() @@ -135,20 +122,12 @@ func (self *StateTransition) BuyGas() error { } self.AddGas(self.msg.Gas()) - sender.SubAmount(self.msg.GasValue()) + self.initialGas.Set(self.msg.Gas()) + sender.SubAmount(MessageGasValue(self.msg)) return nil } -func (self *StateTransition) RefundGas() { - coinbase, sender := self.Coinbase(), self.From() - coinbase.RefundGas(self.gas, self.msg.GasPrice()) - - // Return remaining gas - remaining := new(big.Int).Mul(self.gas, self.msg.GasPrice()) - sender.AddAmount(remaining) -} - func (self *StateTransition) preCheck() (err error) { var ( msg = self.msg @@ -168,7 +147,7 @@ func (self *StateTransition) preCheck() (err error) { return nil } -func (self *StateTransition) TransitionState() (err error) { +func (self *StateTransition) TransitionState() (ret []byte, err error) { statelogger.Debugf("(~) %x\n", self.msg.Hash()) // XXX Transactions after this point are considered valid. @@ -204,7 +183,6 @@ func (self *StateTransition) TransitionState() (err error) { return } - var ret []byte vmenv := self.VmEnv() var ref vm.ClosureRef if MessageCreatesContract(msg) { @@ -231,3 +209,26 @@ func MakeContract(msg Message, state *state.StateDB) *state.StateObject { return contract } + +func (self *StateTransition) RefundGas() { + coinbaseSub := new(big.Int).Set(self.gas) + uhalf := new(big.Int).Div(self.GasUsed(), ethutil.Big2) + for addr, refs := range self.state.Refunds() { + for _, ref := range refs { + coinbaseSub.Add(self.gas, ref) + refund := ethutil.BigMin(uhalf, ref) + self.state.AddBalance([]byte(addr), refund.Mul(refund, self.msg.GasPrice())) + } + } + + coinbase, sender := self.Coinbase(), self.From() + coinbase.RefundGas(coinbaseSub, self.msg.GasPrice()) + + // Return remaining gas + remaining := new(big.Int).Mul(self.gas, self.msg.GasPrice()) + sender.AddAmount(remaining) +} + +func (self *StateTransition) GasUsed() *big.Int { + return new(big.Int).Sub(self.initialGas, self.gas) +} diff --git a/core/types/transaction.go b/core/types/transaction.go index 21d455f2e..c64fb69f0 100644 --- a/core/types/transaction.go +++ b/core/types/transaction.go @@ -46,15 +46,6 @@ func NewTransactionFromValue(val *ethutil.Value) *Transaction { return tx } -func (self *Transaction) GasValue() *big.Int { - return new(big.Int).Mul(self.gas, self.gasPrice) -} - -func (self *Transaction) TotalValue() *big.Int { - v := self.GasValue() - return v.Add(v, self.value) -} - func (tx *Transaction) Hash() []byte { data := []interface{}{tx.Nonce, tx.gasPrice, tx.gas, tx.recipient, tx.Value, tx.Data} diff --git a/state/state.go b/state/state.go index ca3f2af9c..682e233c1 100644 --- a/state/state.go +++ b/state/state.go @@ -23,14 +23,14 @@ type StateDB struct { manifest *Manifest - refund map[string][]refund + refund map[string][]*big.Int logs Logs } // Create a new state from a given trie func New(trie *trie.Trie) *StateDB { - return &StateDB{Trie: trie, stateObjects: make(map[string]*StateObject), manifest: NewManifest(), refund: make(map[string][]refund)} + return &StateDB{Trie: trie, stateObjects: make(map[string]*StateObject), manifest: NewManifest(), refund: make(map[string][]*big.Int)} } func (self *StateDB) EmptyLogs() { @@ -55,12 +55,8 @@ func (self *StateDB) GetBalance(addr []byte) *big.Int { return ethutil.Big0 } -type refund struct { - gas, price *big.Int -} - -func (self *StateDB) Refund(addr []byte, gas, price *big.Int) { - self.refund[string(addr)] = append(self.refund[string(addr)], refund{gas, price}) +func (self *StateDB) Refund(addr []byte, gas *big.Int) { + self.refund[string(addr)] = append(self.refund[string(addr)], gas) } func (self *StateDB) AddBalance(addr []byte, amount *big.Int) { @@ -273,23 +269,17 @@ func (s *StateDB) Sync() { func (self *StateDB) Empty() { self.stateObjects = make(map[string]*StateObject) - self.refund = make(map[string][]refund) + self.refund = make(map[string][]*big.Int) +} + +func (self *StateDB) Refunds() map[string][]*big.Int { + return self.refund } func (self *StateDB) Update(gasUsed *big.Int) { var deleted bool - // Refund any gas that's left - // XXX THIS WILL CHANGE IN POC8 - uhalf := new(big.Int).Div(gasUsed, ethutil.Big2) - for addr, refs := range self.refund { - for _, ref := range refs { - refund := ethutil.BigMin(uhalf, ref.gas) - - self.GetStateObject([]byte(addr)).AddBalance(refund.Mul(refund, ref.price)) - } - } - self.refund = make(map[string][]refund) + self.refund = make(map[string][]*big.Int) for _, stateObject := range self.stateObjects { if stateObject.remove { diff --git a/tests/helper/vm.go b/tests/helper/vm.go index 0c77e87fb..11bcedc49 100644 --- a/tests/helper/vm.go +++ b/tests/helper/vm.go @@ -44,6 +44,7 @@ func NewEnvFromMap(state *state.StateDB, envValues map[string]string, exeValues env.time = ethutil.Big(envValues["currentTimestamp"]).Int64() env.difficulty = ethutil.Big(envValues["currentDifficulty"]) env.gasLimit = ethutil.Big(envValues["currentGasLimit"]) + env.Gas = new(big.Int) return env } @@ -110,7 +111,7 @@ func RunVm(state *state.StateDB, env, exec map[string]string) ([]byte, state.Log return ret, vmenv.logs, vmenv.Gas, err } -func RunState(state *state.StateDB, env, tx map[string]string) ([]byte, state.Logs, *big.Int, error) { +func RunState(statedb *state.StateDB, env, tx map[string]string) ([]byte, state.Logs, *big.Int, error) { var ( keyPair, _ = crypto.NewKeyPairFromSec([]byte(ethutil.Hex2Bytes(tx["secretKey"]))) to = FromHex(tx["to"]) @@ -118,13 +119,39 @@ func RunState(state *state.StateDB, env, tx map[string]string) ([]byte, state.Lo gas = ethutil.Big(tx["gasLimit"]) price = ethutil.Big(tx["gasPrice"]) value = ethutil.Big(tx["value"]) + caddr = FromHex(env["currentCoinbase"]) ) - caller := state.GetOrNewStateObject(keyPair.Address()) + coinbase := statedb.GetOrNewStateObject(caddr) + coinbase.SetGasPool(ethutil.Big(env["currentGasLimit"])) - vmenv := NewEnvFromMap(state, env, tx) - vmenv.origin = caller.Address() - ret, err := vmenv.Call(caller, to, data, gas, price, value) + message := NewMessage(keyPair.Address(), to, data, value, gas, price) + Log.DebugDetailf("message{ to: %x, from %x, value: %v, gas: %v, price: %v }\n", message.to[:4], message.from[:4], message.value, message.gas, message.price) + st := core.NewStateTransition(coinbase, message, statedb, nil) + vmenv := NewEnvFromMap(statedb, env, tx) + vmenv.origin = keyPair.Address() + st.Env = vmenv + ret, err := st.TransitionState() + statedb.Update(vmenv.Gas) return ret, vmenv.logs, vmenv.Gas, err } + +type Message struct { + from, to []byte + value, gas, price *big.Int + data []byte +} + +func NewMessage(from, to, data []byte, value, gas, price *big.Int) Message { + return Message{from, to, value, gas, price, data} +} + +func (self Message) Hash() []byte { return nil } +func (self Message) From() []byte { return self.from } +func (self Message) To() []byte { return self.to } +func (self Message) GasPrice() *big.Int { return self.price } +func (self Message) Gas() *big.Int { return self.gas } +func (self Message) Value() *big.Int { return self.value } +func (self Message) Nonce() uint64 { return 0 } +func (self Message) Data() []byte { return self.data } diff --git a/tests/vm/gh_test.go b/tests/vm/gh_test.go index da5a41251..42dcc0ae1 100644 --- a/tests/vm/gh_test.go +++ b/tests/vm/gh_test.go @@ -8,6 +8,7 @@ import ( "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/ethutil" + "github.com/ethereum/go-ethereum/logger" "github.com/ethereum/go-ethereum/state" "github.com/ethereum/go-ethereum/tests/helper" ) @@ -76,11 +77,18 @@ func RunVmTest(p string, t *testing.T) { tests := make(map[string]VmTest) helper.CreateFileTests(t, p, &tests) + helper.Logger.SetLogLevel(5) for name, test := range tests { + if name != "ABAcalls1" { + continue + } statedb := state.New(helper.NewTrie()) for addr, account := range test.Pre { obj := StateObjectFromAccount(addr, account) statedb.SetStateObject(obj) + for a, v := range account.Storage { + obj.SetState(helper.FromHex(a), ethutil.NewValue(helper.FromHex(v))) + } } // XXX Yeah, yeah... @@ -129,6 +137,16 @@ func RunVmTest(p string, t *testing.T) { for addr, account := range test.Post { obj := statedb.GetStateObject(helper.FromHex(addr)) + if obj == nil { + continue + } + + if len(test.Exec) == 0 { + if obj.Balance().Cmp(ethutil.Big(account.Balance)) != 0 { + t.Errorf("%s's : (%x) balance failed. Expected %v, got %v => %v\n", name, obj.Address()[:4], account.Balance, obj.Balance(), new(big.Int).Sub(ethutil.Big(account.Balance), obj.Balance())) + } + } + for addr, value := range account.Storage { v := obj.GetState(helper.FromHex(addr)).Bytes() vexp := helper.FromHex(value) @@ -149,6 +167,7 @@ func RunVmTest(p string, t *testing.T) { } } } + logger.Flush() } // I've created a new function for each tests so it's easier to identify where the problem lies if any of them fail. @@ -212,7 +231,12 @@ func TestStateRecursiveCreate(t *testing.T) { RunVmTest(fn, t) } -func TestStateSpecialTest(t *testing.T) { +func TestStateSpecial(t *testing.T) { const fn = "../files/StateTests/stSpecialTest.json" RunVmTest(fn, t) } + +func TestStateRefund(t *testing.T) { + const fn = "../files/StateTests/stRefundTest.json" + RunVmTest(fn, t) +} diff --git a/vm/common.go b/vm/common.go index 3d6d377ca..529bbdeb1 100644 --- a/vm/common.go +++ b/vm/common.go @@ -37,7 +37,7 @@ var ( GasLog = big.NewInt(32) GasSha256 = big.NewInt(50) GasRipemd = big.NewInt(50) - GasEcrecover = big.NewInt(100) + GasEcrecover = big.NewInt(500) Pow256 = ethutil.BigPow(2, 256) diff --git a/vm/vm_debug.go b/vm/vm_debug.go index 9da832a79..d78aff4ce 100644 --- a/vm/vm_debug.go +++ b/vm/vm_debug.go @@ -2,6 +2,7 @@ package vm import ( "fmt" + "math" "math/big" "github.com/ethereum/go-ethereum/crypto" @@ -112,7 +113,7 @@ func (self *DebugVm) Run(me, caller ClosureRef, code []byte, value, gas, price * return closure.Return(nil), nil } - vmlogger.Debugf("(%d) %x gas: %v (d) %x\n", self.env.Depth(), closure.Address(), closure.Gas, callData) + vmlogger.Debugf("(%d) (%x) %x gas: %v (d) %x\n", self.env.Depth(), caller.Address()[:4], closure.Address(), closure.Gas, callData) for { prevStep = step @@ -185,11 +186,11 @@ func (self *DebugVm) Run(me, caller ClosureRef, code []byte, value, gas, price * // 0 => non 0 mult = ethutil.Big3 } else if val.BigInt().Cmp(ethutil.Big0) != 0 && len(y.Bytes()) == 0 { - statedb.Refund(closure.caller.Address(), GasSStoreRefund, closure.Price) + statedb.Refund(caller.Address(), GasSStoreRefund) mult = ethutil.Big0 } else { - // non 0 => non 0 + // non 0 => non 0 (or 0 => 0) mult = ethutil.Big1 } gas.Set(new(big.Int).Mul(mult, GasSStore)) @@ -660,7 +661,7 @@ func (self *DebugVm) Run(me, caller ClosureRef, code []byte, value, gas, price * cOff = 0 l = 0 } else if cOff+l > size { - l = 0 + l = uint64(math.Min(float64(cOff+l), float64(size))) } codeCopy := code[cOff : cOff+l] @@ -776,10 +777,7 @@ func (self *DebugVm) Run(me, caller ClosureRef, code []byte, value, gas, price * val, loc := stack.Popn() statedb.SetState(closure.Address(), loc.Bytes(), val) - // Debug sessions are allowed to run without message - if closure.message != nil { - closure.message.AddStorageChange(loc.Bytes()) - } + closure.message.AddStorageChange(loc.Bytes()) self.Printf(" {0x%x : 0x%x}", loc.Bytes(), val.Bytes()) case JUMP: @@ -898,10 +896,12 @@ func (self *DebugVm) Run(me, caller ClosureRef, code []byte, value, gas, price * return closure.Return(ret), nil case SUICIDE: - receiver := statedb.GetOrNewStateObject(stack.Pop().Bytes()) + balance := statedb.GetBalance(closure.Address()) - receiver.AddAmount(statedb.GetBalance(closure.Address())) + self.Printf(" => (%x) %v", receiver.Address()[:4], balance) + + receiver.AddAmount(balance) statedb.Delete(closure.Address()) fallthrough From f7287c626e31e980d5b164935ae913db3855eb81 Mon Sep 17 00:00:00 2001 From: obscuren Date: Thu, 18 Dec 2014 21:58:53 +0100 Subject: [PATCH 66/79] updated tests --- tests/files/StateTests/stRefundTest.json | 271 +++++++++++++++++++++++ tests/files/index.js | 7 +- 2 files changed, 277 insertions(+), 1 deletion(-) diff --git a/tests/files/StateTests/stRefundTest.json b/tests/files/StateTests/stRefundTest.json index c558a2292..08ae1fac8 100644 --- a/tests/files/StateTests/stRefundTest.json +++ b/tests/files/StateTests/stRefundTest.json @@ -1,4 +1,275 @@ { + "refund500" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + ], + "out" : "0x", + "post" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000000000", + "code" : "0x600154506002545060ff60020a600a553031600b55600060015560006002556000600355600060045560006005556000600655", + "nonce" : "0", + "storage" : { + "0x0a" : "0x8000000000000000000000000000000000000000000000000000000000000000", + "0x0b" : "0x0de0b6b3a7640000" + } + }, + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "592", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "9408", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + } + }, + "pre" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000000000", + "code" : "0x600154506002545060ff60020a600a553031600b55600060015560006002556000600355600060045560006005556000600655", + "nonce" : "0", + "storage" : { + "0x01" : "0x01", + "0x02" : "0x01", + "0x03" : "0x01", + "0x04" : "0x01", + "0x05" : "0x01", + "0x06" : "0x01" + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "10000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "", + "gasLimit" : "10000", + "gasPrice" : "1", + "nonce" : "0", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", + "value" : "0" + } + }, + "refund50_1" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + ], + "out" : "0x", + "post" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000000000", + "code" : "0x60006001556000600255600060035560006004556000600555", + "nonce" : "0", + "storage" : { + } + }, + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "255", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "9745", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + } + }, + "pre" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000000000", + "code" : "0x60006001556000600255600060035560006004556000600555", + "nonce" : "0", + "storage" : { + "0x01" : "0x01", + "0x02" : "0x01", + "0x03" : "0x01", + "0x04" : "0x01", + "0x05" : "0x01" + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "10000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "", + "gasLimit" : "10000", + "gasPrice" : "1", + "nonce" : "0", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", + "value" : "0" + } + }, + "refund50_2" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + ], + "out" : "0x", + "post" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000000000", + "code" : "0x6001600a556001600b5560006001556000600255600060035560006004556000600555", + "nonce" : "0", + "storage" : { + "0x0a" : "0x01", + "0x0b" : "0x01" + } + }, + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "614", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "9386", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + } + }, + "pre" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000000000", + "code" : "0x6001600a556001600b5560006001556000600255600060035560006004556000600555", + "nonce" : "0", + "storage" : { + "0x01" : "0x01", + "0x02" : "0x01", + "0x03" : "0x01", + "0x04" : "0x01", + "0x05" : "0x01" + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "10000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "", + "gasLimit" : "10000", + "gasPrice" : "1", + "nonce" : "0", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", + "value" : "0" + } + }, + "refund600" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : [ + ], + "out" : "0x", + "post" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000000000", + "code" : "0x600154506002545061ffff60020a600a553031600b55600060015560006002556000600355600060045560006005556000600655", + "nonce" : "0", + "storage" : { + "0x0b" : "0x0de0b6b3a7640000" + } + }, + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "492", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "9508", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + } + }, + "pre" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000000000", + "code" : "0x600154506002545061ffff60020a600a553031600b55600060015560006002556000600355600060045560006005556000600655", + "nonce" : "0", + "storage" : { + "0x01" : "0x01", + "0x02" : "0x01", + "0x03" : "0x01", + "0x04" : "0x01", + "0x05" : "0x01", + "0x06" : "0x01" + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "10000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "transaction" : { + "data" : "", + "gasLimit" : "10000", + "gasPrice" : "1", + "nonce" : "0", + "secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8", + "to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87", + "value" : "0" + } + }, "refund_NoOOG_1" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", diff --git a/tests/files/index.js b/tests/files/index.js index 730107a27..34a03d8b2 100644 --- a/tests/files/index.js +++ b/tests/files/index.js @@ -8,12 +8,17 @@ module.exports = { trietestnextprev: require('./TrieTests/trietestnextprev'), txtest: require('./BasicTests/txtest'), StateTests: { + stExample: require('./StateTests/stExample.json'), + stInitCodeTest: require('./StateTests/stInitCodeTest.json'), + stLogTests: require('./StateTests/stLogTests.json'), stPreCompiledContracts: require('./StateTests/stPreCompiledContracts'), stRecursiveCreate: require('./StateTests/stRecursiveCreate'), stSpecial: require('./StateTests/stSpecialTest'), stSystemOperationsTest: require('./StateTests/stSystemOperationsTest'), + stTransactionTest: require('./StateTests/stTransactionTest') }, VMTests: { + vmRandom: require('./VMTests/RandomTests/randomTest'), vmArithmeticTest: require('./VMTests/vmArithmeticTest'), vmBitwiseLogicOperationTest: require('./VMTests/vmBitwiseLogicOperationTest'), vmBlockInfoTest: require('./VMTests/vmBlockInfoTest'), @@ -22,6 +27,6 @@ module.exports = { vmLogTest: require('./VMTests/vmLogTest'), vmPushDupSwapTest: require('./VMTests/vmPushDupSwapTest'), vmSha3Test: require('./VMTests/vmSha3Test'), - vmtests: require('./VMTests/vmtests'), + vmtests: require('./VMTests/vmtests') } }; From 332568379454dce6b1fb3c3e023a53d0c52cded0 Mon Sep 17 00:00:00 2001 From: obscuren Date: Thu, 18 Dec 2014 22:38:51 +0100 Subject: [PATCH 67/79] Fixed refund model --- core/state_transition.go | 10 ++++------ state/state.go | 17 ++++++++++------- tests/vm/gh_test.go | 8 ++++---- 3 files changed, 18 insertions(+), 17 deletions(-) diff --git a/core/state_transition.go b/core/state_transition.go index 34d8cca74..9e81ddf28 100644 --- a/core/state_transition.go +++ b/core/state_transition.go @@ -213,12 +213,10 @@ func MakeContract(msg Message, state *state.StateDB) *state.StateObject { func (self *StateTransition) RefundGas() { coinbaseSub := new(big.Int).Set(self.gas) uhalf := new(big.Int).Div(self.GasUsed(), ethutil.Big2) - for addr, refs := range self.state.Refunds() { - for _, ref := range refs { - coinbaseSub.Add(self.gas, ref) - refund := ethutil.BigMin(uhalf, ref) - self.state.AddBalance([]byte(addr), refund.Mul(refund, self.msg.GasPrice())) - } + for addr, ref := range self.state.Refunds() { + refund := ethutil.BigMin(uhalf, ref) + coinbaseSub.Add(self.gas, refund) + self.state.AddBalance([]byte(addr), refund.Mul(refund, self.msg.GasPrice())) } coinbase, sender := self.Coinbase(), self.From() diff --git a/state/state.go b/state/state.go index 682e233c1..a8d611668 100644 --- a/state/state.go +++ b/state/state.go @@ -23,14 +23,14 @@ type StateDB struct { manifest *Manifest - refund map[string][]*big.Int + refund map[string]*big.Int logs Logs } // Create a new state from a given trie func New(trie *trie.Trie) *StateDB { - return &StateDB{Trie: trie, stateObjects: make(map[string]*StateObject), manifest: NewManifest(), refund: make(map[string][]*big.Int)} + return &StateDB{Trie: trie, stateObjects: make(map[string]*StateObject), manifest: NewManifest(), refund: make(map[string]*big.Int)} } func (self *StateDB) EmptyLogs() { @@ -56,7 +56,10 @@ func (self *StateDB) GetBalance(addr []byte) *big.Int { } func (self *StateDB) Refund(addr []byte, gas *big.Int) { - self.refund[string(addr)] = append(self.refund[string(addr)], gas) + if self.refund[string(addr)] == nil { + self.refund[string(addr)] = new(big.Int) + } + self.refund[string(addr)].Add(self.refund[string(addr)], gas) } func (self *StateDB) AddBalance(addr []byte, amount *big.Int) { @@ -207,7 +210,7 @@ func (self *StateDB) Copy() *StateDB { } for addr, refund := range self.refund { - state.refund[addr] = refund + state.refund[addr] = new(big.Int).Set(refund) } logs := make(Logs, len(self.logs)) @@ -269,17 +272,17 @@ func (s *StateDB) Sync() { func (self *StateDB) Empty() { self.stateObjects = make(map[string]*StateObject) - self.refund = make(map[string][]*big.Int) + self.refund = make(map[string]*big.Int) } -func (self *StateDB) Refunds() map[string][]*big.Int { +func (self *StateDB) Refunds() map[string]*big.Int { return self.refund } func (self *StateDB) Update(gasUsed *big.Int) { var deleted bool - self.refund = make(map[string][]*big.Int) + self.refund = make(map[string]*big.Int) for _, stateObject := range self.stateObjects { if stateObject.remove { diff --git a/tests/vm/gh_test.go b/tests/vm/gh_test.go index 42dcc0ae1..ca63b90d3 100644 --- a/tests/vm/gh_test.go +++ b/tests/vm/gh_test.go @@ -77,11 +77,11 @@ func RunVmTest(p string, t *testing.T) { tests := make(map[string]VmTest) helper.CreateFileTests(t, p, &tests) - helper.Logger.SetLogLevel(5) + //helper.Logger.SetLogLevel(5) for name, test := range tests { - if name != "ABAcalls1" { - continue - } + // if name != "refund50_1" { + // continue + // } statedb := state.New(helper.NewTrie()) for addr, account := range test.Pre { obj := StateObjectFromAccount(addr, account) From 4789084998553befa5db1bfe5a14881aa567cb9e Mon Sep 17 00:00:00 2001 From: obscuren Date: Thu, 18 Dec 2014 23:32:58 +0100 Subject: [PATCH 68/79] updated tests --- tests/vm/gh_test.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/vm/gh_test.go b/tests/vm/gh_test.go index ca63b90d3..10d63897d 100644 --- a/tests/vm/gh_test.go +++ b/tests/vm/gh_test.go @@ -77,11 +77,11 @@ func RunVmTest(p string, t *testing.T) { tests := make(map[string]VmTest) helper.CreateFileTests(t, p, &tests) - //helper.Logger.SetLogLevel(5) + helper.Logger.SetLogLevel(5) for name, test := range tests { - // if name != "refund50_1" { - // continue - // } + if name != "CallRecursiveBomb0" { + continue + } statedb := state.New(helper.NewTrie()) for addr, account := range test.Pre { obj := StateObjectFromAccount(addr, account) From 1e985f986569a68601b052c8949fc6f360e139d9 Mon Sep 17 00:00:00 2001 From: obscuren Date: Thu, 18 Dec 2014 23:59:40 +0100 Subject: [PATCH 69/79] Fixed casting error * big(bytes) == 0 when len(bytes) > 0 --- vm/vm_debug.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/vm/vm_debug.go b/vm/vm_debug.go index d78aff4ce..708aada5b 100644 --- a/vm/vm_debug.go +++ b/vm/vm_debug.go @@ -181,11 +181,12 @@ func (self *DebugVm) Run(me, caller ClosureRef, code []byte, value, gas, price * var mult *big.Int y, x := stack.Peekn() - val := closure.GetStorage(x) - if val.BigInt().Cmp(ethutil.Big0) == 0 && len(y.Bytes()) > 0 { + //val := closure.GetStorage(x) + val := statedb.GetState(closure.Address(), x.Bytes()) + if len(val) == 0 && len(y.Bytes()) > 0 { // 0 => non 0 mult = ethutil.Big3 - } else if val.BigInt().Cmp(ethutil.Big0) != 0 && len(y.Bytes()) == 0 { + } else if len(val) > 0 && len(y.Bytes()) == 0 { statedb.Refund(caller.Address(), GasSStoreRefund) mult = ethutil.Big0 From a7f4ade7114ee962110cb7c140e7ce7bd3f6664f Mon Sep 17 00:00:00 2001 From: obscuren Date: Thu, 18 Dec 2014 23:59:53 +0100 Subject: [PATCH 70/79] Fixed tests --- tests/vm/gh_test.go | 4 ---- 1 file changed, 4 deletions(-) diff --git a/tests/vm/gh_test.go b/tests/vm/gh_test.go index 10d63897d..1efda7fe0 100644 --- a/tests/vm/gh_test.go +++ b/tests/vm/gh_test.go @@ -77,11 +77,7 @@ func RunVmTest(p string, t *testing.T) { tests := make(map[string]VmTest) helper.CreateFileTests(t, p, &tests) - helper.Logger.SetLogLevel(5) for name, test := range tests { - if name != "CallRecursiveBomb0" { - continue - } statedb := state.New(helper.NewTrie()) for addr, account := range test.Pre { obj := StateObjectFromAccount(addr, account) From 59ef6e36931c980ba15babfb3680514635faebf6 Mon Sep 17 00:00:00 2001 From: obscuren Date: Fri, 19 Dec 2014 00:18:52 +0100 Subject: [PATCH 71/79] Cleaned up objects --- cmd/utils/vm_env.go | 4 +--- core/execution.go | 6 ++++-- core/vm_env.go | 4 +--- tests/helper/vm.go | 3 +-- vm/closure.go | 35 +++-------------------------------- vm/vm_debug.go | 6 ++---- xeth/vm_env.go | 4 +--- 7 files changed, 13 insertions(+), 49 deletions(-) diff --git a/cmd/utils/vm_env.go b/cmd/utils/vm_env.go index eb52602c4..461a797c2 100644 --- a/cmd/utils/vm_env.go +++ b/cmd/utils/vm_env.go @@ -49,9 +49,7 @@ func (self *VMEnv) Transfer(from, to vm.Account, amount *big.Int) error { } func (self *VMEnv) vm(addr, data []byte, gas, price, value *big.Int) *core.Execution { - evm := vm.New(self, vm.DebugVmTy) - - return core.NewExecution(evm, addr, data, gas, price, value) + return core.NewExecution(self, addr, data, gas, price, value) } func (self *VMEnv) Call(caller vm.ClosureRef, addr, data []byte, gas, price, value *big.Int) ([]byte, error) { diff --git a/core/execution.go b/core/execution.go index 827e1ee0e..cd98746c4 100644 --- a/core/execution.go +++ b/core/execution.go @@ -16,8 +16,10 @@ type Execution struct { SkipTransfer bool } -func NewExecution(vm vm.VirtualMachine, address, input []byte, gas, gasPrice, value *big.Int) *Execution { - return &Execution{vm: vm, address: address, input: input, Gas: gas, price: gasPrice, value: value} +func NewExecution(env vm.Environment, address, input []byte, gas, gasPrice, value *big.Int) *Execution { + evm := vm.New(env, vm.DebugVmTy) + + return &Execution{vm: evm, address: address, input: input, Gas: gas, price: gasPrice, value: value} } func (self *Execution) Addr() []byte { diff --git a/core/vm_env.go b/core/vm_env.go index 0b6744972..ad63ecf9c 100644 --- a/core/vm_env.go +++ b/core/vm_env.go @@ -43,9 +43,7 @@ func (self *VMEnv) Transfer(from, to vm.Account, amount *big.Int) error { } func (self *VMEnv) vm(addr, data []byte, gas, price, value *big.Int) *Execution { - evm := vm.New(self, vm.DebugVmTy) - - return NewExecution(evm, addr, data, gas, price, value) + return NewExecution(self, addr, data, gas, price, value) } func (self *VMEnv) Call(me vm.ClosureRef, addr, data []byte, gas, price, value *big.Int) ([]byte, error) { diff --git a/tests/helper/vm.go b/tests/helper/vm.go index 11bcedc49..e174e0892 100644 --- a/tests/helper/vm.go +++ b/tests/helper/vm.go @@ -68,8 +68,7 @@ func (self *Env) Transfer(from, to vm.Account, amount *big.Int) error { } func (self *Env) vm(addr, data []byte, gas, price, value *big.Int) *core.Execution { - evm := vm.New(self, vm.DebugVmTy) - exec := core.NewExecution(evm, addr, data, gas, price, value) + exec := core.NewExecution(self, addr, data, gas, price, value) exec.SkipTransfer = self.skipTransfer return exec diff --git a/vm/closure.go b/vm/closure.go index bd5268f96..97b31ada0 100644 --- a/vm/closure.go +++ b/vm/closure.go @@ -3,7 +3,6 @@ package vm import ( "math/big" - "github.com/ethereum/go-ethereum/ethutil" "github.com/ethereum/go-ethereum/state" ) @@ -11,8 +10,6 @@ type ClosureRef interface { ReturnGas(*big.Int, *big.Int) Address() []byte SetCode([]byte) - GetStorage(*big.Int) *ethutil.Value - SetStorage(*big.Int, *ethutil.Value) } type Closure struct { @@ -41,10 +38,6 @@ func NewClosure(msg *state.Message, caller ClosureRef, object ClosureRef, code [ return c } -func (c *Closure) GetValue(x uint64) *ethutil.Value { - return c.GetRangeValue(x, 1) -} - func (c *Closure) GetOp(x uint64) OpCode { return OpCode(c.GetByte(x)) } @@ -65,30 +58,12 @@ func (c *Closure) GetBytes(x, y int) []byte { return c.Code[x : x+y] } -func (c *Closure) GetRangeValue(x, y uint64) *ethutil.Value { +func (c *Closure) GetRangeValue(x, y uint64) []byte { if x >= uint64(len(c.Code)) || y >= uint64(len(c.Code)) { - return ethutil.NewValue(0) + return nil } - partial := c.Code[x : x+y] - - return ethutil.NewValue(partial) -} - -/* - * State storage functions - */ -func (c *Closure) SetStorage(x *big.Int, val *ethutil.Value) { - c.object.SetStorage(x, val) -} - -func (c *Closure) GetStorage(x *big.Int) *ethutil.Value { - m := c.object.GetStorage(x) - if m == nil { - return ethutil.EmptyValue() - } - - return m + return c.Code[x : x+y] } func (c *Closure) Return(ret []byte) []byte { @@ -123,10 +98,6 @@ func (c *Closure) ReturnGas(gas, price *big.Int) { /* * Set / Get */ -func (c *Closure) Caller() ClosureRef { - return c.caller -} - func (c *Closure) Address() []byte { return c.object.Address() } diff --git a/vm/vm_debug.go b/vm/vm_debug.go index 708aada5b..fd16a3895 100644 --- a/vm/vm_debug.go +++ b/vm/vm_debug.go @@ -181,7 +181,6 @@ func (self *DebugVm) Run(me, caller ClosureRef, code []byte, value, gas, price * var mult *big.Int y, x := stack.Peekn() - //val := closure.GetStorage(x) val := statedb.GetState(closure.Address(), x.Bytes()) if len(val) == 0 && len(y.Bytes()) > 0 { // 0 => non 0 @@ -714,8 +713,7 @@ func (self *DebugVm) Run(me, caller ClosureRef, code []byte, value, gas, price * //a := big.NewInt(int64(op) - int64(PUSH1) + 1) a := uint64(op - PUSH1 + 1) //pc.Add(pc, ethutil.Big1) - data := closure.GetRangeValue(pc+1, a) - val := ethutil.BigD(data.Bytes()) + val := ethutil.BigD(closure.GetRangeValue(pc+1, a)) // Push value to stack stack.Push(val) pc += a @@ -723,7 +721,7 @@ func (self *DebugVm) Run(me, caller ClosureRef, code []byte, value, gas, price * step += int(op) - int(PUSH1) + 1 - self.Printf(" => 0x%x", data.Bytes()) + self.Printf(" => 0x%x", val.Bytes()) case POP: stack.Pop() case DUP1, DUP2, DUP3, DUP4, DUP5, DUP6, DUP7, DUP8, DUP9, DUP10, DUP11, DUP12, DUP13, DUP14, DUP15, DUP16: diff --git a/xeth/vm_env.go b/xeth/vm_env.go index ce53e9a30..7fb674a94 100644 --- a/xeth/vm_env.go +++ b/xeth/vm_env.go @@ -47,9 +47,7 @@ func (self *VMEnv) Transfer(from, to vm.Account, amount *big.Int) error { } func (self *VMEnv) vm(addr, data []byte, gas, price, value *big.Int) *core.Execution { - evm := vm.New(self, vm.DebugVmTy) - - return core.NewExecution(evm, addr, data, gas, price, value) + return core.NewExecution(self, addr, data, gas, price, value) } func (self *VMEnv) Call(me vm.ClosureRef, addr, data []byte, gas, price, value *big.Int) ([]byte, error) { From 12671c82eadc367a43502109e5e0237e228da998 Mon Sep 17 00:00:00 2001 From: obscuren Date: Fri, 19 Dec 2014 00:23:00 +0100 Subject: [PATCH 72/79] Moved VM to execution --- core/execution.go | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/core/execution.go b/core/execution.go index cd98746c4..0b5e0558f 100644 --- a/core/execution.go +++ b/core/execution.go @@ -9,7 +9,7 @@ import ( ) type Execution struct { - vm vm.VirtualMachine + env vm.Environment address, input []byte Gas, price, value *big.Int object *state.StateObject @@ -17,9 +17,7 @@ type Execution struct { } func NewExecution(env vm.Environment, address, input []byte, gas, gasPrice, value *big.Int) *Execution { - evm := vm.New(env, vm.DebugVmTy) - - return &Execution{vm: evm, address: address, input: input, Gas: gas, price: gasPrice, value: value} + return &Execution{env: env, address: address, input: input, Gas: gas, price: gasPrice, value: value} } func (self *Execution) Addr() []byte { @@ -28,16 +26,18 @@ func (self *Execution) Addr() []byte { func (self *Execution) Call(codeAddr []byte, caller vm.ClosureRef) ([]byte, error) { // Retrieve the executing code - code := self.vm.Env().State().GetCode(codeAddr) + code := self.env.State().GetCode(codeAddr) return self.exec(code, codeAddr, caller) } func (self *Execution) exec(code, contextAddr []byte, caller vm.ClosureRef) (ret []byte, err error) { - env := self.vm.Env() + env := self.env + evm := vm.New(env, vm.DebugVmTy) + chainlogger.Debugf("pre state %x\n", env.State().Root()) - if self.vm.Env().Depth() == vm.MaxCallDepth { + if env.Depth() == vm.MaxCallDepth { // Consume all gas (by not returning it) and return a depth error return nil, vm.DepthError{} } @@ -56,21 +56,21 @@ func (self *Execution) exec(code, contextAddr []byte, caller vm.ClosureRef) (ret snapshot := env.State().Copy() defer func() { - if /*vm.IsDepthErr(err) ||*/ vm.IsOOGErr(err) { + if vm.IsOOGErr(err) { env.State().Set(snapshot) } chainlogger.Debugf("post state %x\n", env.State().Root()) }() self.object = to - ret, err = self.vm.Run(to, caller, code, self.value, self.Gas, self.price, self.input) + ret, err = evm.Run(to, caller, code, self.value, self.Gas, self.price, self.input) return } func (self *Execution) Create(caller vm.ClosureRef) (ret []byte, err error, account *state.StateObject) { ret, err = self.exec(self.input, nil, caller) - account = self.vm.Env().State().GetStateObject(self.address) + account = self.env.State().GetStateObject(self.address) return } From 88af879f7ae55249ff7a9669184b52a611e4fb20 Mon Sep 17 00:00:00 2001 From: obscuren Date: Fri, 19 Dec 2014 01:18:22 +0100 Subject: [PATCH 73/79] version bump --- cmd/ethereum/main.go | 2 +- cmd/mist/main.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd/ethereum/main.go b/cmd/ethereum/main.go index 9efc8e9dc..2a3c46054 100644 --- a/cmd/ethereum/main.go +++ b/cmd/ethereum/main.go @@ -30,7 +30,7 @@ import ( const ( ClientIdentifier = "Ethereum(G)" - Version = "0.7.9" + Version = "0.7.10" ) var clilogger = logger.NewLogger("CLI") diff --git a/cmd/mist/main.go b/cmd/mist/main.go index 14336b4e8..eaf0af0c7 100644 --- a/cmd/mist/main.go +++ b/cmd/mist/main.go @@ -31,7 +31,7 @@ import ( const ( ClientIdentifier = "Mist" - Version = "0.7.9" + Version = "0.7.10" ) var ethereum *eth.Ethereum From 5da5db5a0a149235c742748aa4b3b94d13d6910f Mon Sep 17 00:00:00 2001 From: obscuren Date: Fri, 19 Dec 2014 13:34:21 +0100 Subject: [PATCH 74/79] Added authors --- cmd/mist/assets/qml/main.qml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/cmd/mist/assets/qml/main.qml b/cmd/mist/assets/qml/main.qml index 9f1f214a6..a08a8b4ef 100644 --- a/cmd/mist/assets/qml/main.qml +++ b/cmd/mist/assets/qml/main.qml @@ -786,8 +786,8 @@ ApplicationWindow { title: "About" minimumWidth: 350 maximumWidth: 350 - maximumHeight: 200 - minimumHeight: 200 + maximumHeight: 280 + minimumHeight: 280 Image { id: aboutIcon @@ -797,7 +797,7 @@ ApplicationWindow { smooth: true source: "../facet.png" x: 10 - y: 10 + y: 30 } Text { @@ -806,7 +806,7 @@ ApplicationWindow { anchors.top: parent.top anchors.topMargin: 30 font.pointSize: 12 - text: "

Mist (0.6.5)

Amalthea


Development

Jeffrey Wilcke
Viktor Trón

Building

Maran Hidskes" + text: "

Mist (0.7.10)


Development

Jeffrey Wilcke
Viktor Trón
Felix Lange
Taylor Gerring
Daniel Nagy

UX

Alex van de Sande
" } } From 0e93b98533968f4a0033ec6214391f5ca647a956 Mon Sep 17 00:00:00 2001 From: obscuren Date: Fri, 19 Dec 2014 13:34:53 +0100 Subject: [PATCH 75/79] Transaction was generating incorrect hash because of var changes --- core/state_transition.go | 2 +- core/types/transaction.go | 19 ++++++++++--------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/core/state_transition.go b/core/state_transition.go index 9e81ddf28..a54246eba 100644 --- a/core/state_transition.go +++ b/core/state_transition.go @@ -112,7 +112,7 @@ func (self *StateTransition) BuyGas() error { sender := self.From() if sender.Balance().Cmp(MessageGasValue(self.msg)) < 0 { - return fmt.Errorf("Insufficient funds to pre-pay gas. Req %v, has %v", MessageGasValue(self.msg), sender.Balance()) + return fmt.Errorf("insufficient ETH for gas (%x). Req %v, has %v", sender.Address()[:4], MessageGasValue(self.msg), sender.Balance()) } coinbase := self.Coinbase() diff --git a/core/types/transaction.go b/core/types/transaction.go index c64fb69f0..f6ad0774b 100644 --- a/core/types/transaction.go +++ b/core/types/transaction.go @@ -47,7 +47,7 @@ func NewTransactionFromValue(val *ethutil.Value) *Transaction { } func (tx *Transaction) Hash() []byte { - data := []interface{}{tx.Nonce, tx.gasPrice, tx.gas, tx.recipient, tx.Value, tx.Data} + data := []interface{}{tx.nonce, tx.gasPrice, tx.gas, tx.recipient, tx.value, tx.data} return crypto.Sha3(ethutil.NewValue(data).Encode()) } @@ -108,8 +108,8 @@ func (tx *Transaction) PublicKey() []byte { sig := append(r, s...) sig = append(sig, v-27) - pubkey := crypto.Ecrecover(append(hash, sig...)) - //pubkey, _ := secp256k1.RecoverPubkey(hash, sig) + //pubkey := crypto.Ecrecover(append(hash, sig...)) + pubkey, _ := secp256k1.RecoverPubkey(hash, sig) return pubkey } @@ -138,9 +138,7 @@ func (tx *Transaction) Sign(privk []byte) error { } func (tx *Transaction) RlpData() interface{} { - data := []interface{}{tx.Nonce, tx.GasPrice, tx.Gas, tx.recipient, tx.Value, tx.Data} - - // TODO Remove prefixing zero's + data := []interface{}{tx.nonce, tx.gasPrice, tx.gas, tx.recipient, tx.value, tx.data} return append(data, tx.v, new(big.Int).SetBytes(tx.r).Bytes(), new(big.Int).SetBytes(tx.s).Bytes()) } @@ -184,6 +182,7 @@ func (tx *Transaction) String() string { V: 0x%x R: 0x%x S: 0x%x + Hex: %x `, tx.Hash(), len(tx.recipient) == 0, @@ -192,11 +191,13 @@ func (tx *Transaction) String() string { tx.nonce, tx.gasPrice, tx.gas, - tx.Value, - tx.Data, + tx.value, + tx.data, tx.v, tx.r, - tx.s) + tx.s, + ethutil.Encode(tx), + ) } // Transaction slice type for basic sorting From f5b8f3d41b533d51eb81e895ed9b6aa31d7aaaef Mon Sep 17 00:00:00 2001 From: obscuren Date: Fri, 19 Dec 2014 13:59:49 +0100 Subject: [PATCH 76/79] Removed OOG check. Revert should always happen. --- core/block_manager.go | 2 +- core/execution.go | 4 +--- core/state_transition.go | 11 +++++++++-- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/core/block_manager.go b/core/block_manager.go index 8d319f84e..20285f8f0 100644 --- a/core/block_manager.go +++ b/core/block_manager.go @@ -129,7 +129,6 @@ done: statelogger.Infoln(err) erroneous = append(erroneous, tx) err = nil - continue } } @@ -215,6 +214,7 @@ func (sm *BlockManager) ProcessWithParent(block, parent *types.Block) (td *big.I receiptSha := types.DeriveSha(receipts) if bytes.Compare(receiptSha, block.ReceiptSha) != 0 { + chainlogger.Debugln(receipts) err = fmt.Errorf("validating receipt root. received=%x got=%x", block.ReceiptSha, receiptSha) return } diff --git a/core/execution.go b/core/execution.go index 0b5e0558f..44dbd3ace 100644 --- a/core/execution.go +++ b/core/execution.go @@ -56,9 +56,7 @@ func (self *Execution) exec(code, contextAddr []byte, caller vm.ClosureRef) (ret snapshot := env.State().Copy() defer func() { - if vm.IsOOGErr(err) { - env.State().Set(snapshot) - } + env.State().Set(snapshot) chainlogger.Debugf("post state %x\n", env.State().Root()) }() diff --git a/core/state_transition.go b/core/state_transition.go index a54246eba..a60f31e3e 100644 --- a/core/state_transition.go +++ b/core/state_transition.go @@ -189,12 +189,19 @@ func (self *StateTransition) TransitionState() (ret []byte, err error) { self.rec = MakeContract(msg, self.state) ret, err, ref = vmenv.Create(sender, self.rec.Address(), self.msg.Data(), self.gas, self.gasPrice, self.value) - ref.SetCode(ret) + if err == nil { + dataGas := big.NewInt(int64(len(ret))) + dataGas.Mul(dataGas, vm.GasCreateByte) + if err = self.UseGas(dataGas); err == nil { + ref.SetCode(ret) + } + } } else { ret, err = vmenv.Call(self.From(), self.To().Address(), self.msg.Data(), self.gas, self.gasPrice, self.value) } + if err != nil { - statelogger.Debugln(err) + self.UseGas(self.gas) } return From 1508a23a6fe3cc50f718bfd6c62caae056534c09 Mon Sep 17 00:00:00 2001 From: obscuren Date: Sat, 20 Dec 2014 02:21:13 +0100 Subject: [PATCH 77/79] Minor updates on gas and removed/refactored old code. --- core/block_manager.go | 4 +++- core/execution.go | 15 ++++++--------- core/state_transition.go | 25 ++++++++++++------------ state/state.go | 7 +++++++ vm/environment.go | 5 +++++ vm/vm_debug.go | 41 +++++++++++++++++++++------------------- 6 files changed, 55 insertions(+), 42 deletions(-) diff --git a/core/block_manager.go b/core/block_manager.go index 20285f8f0..2567e39c4 100644 --- a/core/block_manager.go +++ b/core/block_manager.go @@ -142,6 +142,7 @@ done: receipt := types.NewReceipt(state.Root(), cumulative) receipt.SetLogs(state.Logs()) receipt.Bloom = types.CreateBloom(types.Receipts{receipt}) + chainlogger.Debugln(receipt) // Notify all subscribers if !transientProcess { @@ -214,7 +215,8 @@ func (sm *BlockManager) ProcessWithParent(block, parent *types.Block) (td *big.I receiptSha := types.DeriveSha(receipts) if bytes.Compare(receiptSha, block.ReceiptSha) != 0 { - chainlogger.Debugln(receipts) + //chainlogger.Debugf("validating receipt root. received=%x got=%x", block.ReceiptSha, receiptSha) + fmt.Printf("%x\n", ethutil.Encode(receipts)) err = fmt.Errorf("validating receipt root. received=%x got=%x", block.ReceiptSha, receiptSha) return } diff --git a/core/execution.go b/core/execution.go index 44dbd3ace..b7eead0dd 100644 --- a/core/execution.go +++ b/core/execution.go @@ -3,6 +3,7 @@ package core import ( "fmt" "math/big" + "time" "github.com/ethereum/go-ethereum/state" "github.com/ethereum/go-ethereum/vm" @@ -12,7 +13,6 @@ type Execution struct { env vm.Environment address, input []byte Gas, price, value *big.Int - object *state.StateObject SkipTransfer bool } @@ -35,8 +35,6 @@ func (self *Execution) exec(code, contextAddr []byte, caller vm.ClosureRef) (ret env := self.env evm := vm.New(env, vm.DebugVmTy) - chainlogger.Debugf("pre state %x\n", env.State().Root()) - if env.Depth() == vm.MaxCallDepth { // Consume all gas (by not returning it) and return a depth error return nil, vm.DepthError{} @@ -55,13 +53,12 @@ func (self *Execution) exec(code, contextAddr []byte, caller vm.ClosureRef) (ret } snapshot := env.State().Copy() - defer func() { - env.State().Set(snapshot) - chainlogger.Debugf("post state %x\n", env.State().Root()) - }() - - self.object = to + start := time.Now() ret, err = evm.Run(to, caller, code, self.value, self.Gas, self.price, self.input) + if err != nil { + env.State().Set(snapshot) + } + chainlogger.Debugf("vm took %v\n", time.Since(start)) return } diff --git a/core/state_transition.go b/core/state_transition.go index a60f31e3e..7b7026c29 100644 --- a/core/state_transition.go +++ b/core/state_transition.go @@ -186,13 +186,13 @@ func (self *StateTransition) TransitionState() (ret []byte, err error) { vmenv := self.VmEnv() var ref vm.ClosureRef if MessageCreatesContract(msg) { - self.rec = MakeContract(msg, self.state) - - ret, err, ref = vmenv.Create(sender, self.rec.Address(), self.msg.Data(), self.gas, self.gasPrice, self.value) + contract := MakeContract(msg, self.state) + ret, err, ref = vmenv.Create(sender, contract.Address(), self.msg.Data(), self.gas, self.gasPrice, self.value) if err == nil { dataGas := big.NewInt(int64(len(ret))) dataGas.Mul(dataGas, vm.GasCreateByte) if err = self.UseGas(dataGas); err == nil { + //self.state.SetCode(ref.Address(), ret) ref.SetCode(ret) } } @@ -218,20 +218,19 @@ func MakeContract(msg Message, state *state.StateDB) *state.StateObject { } func (self *StateTransition) RefundGas() { - coinbaseSub := new(big.Int).Set(self.gas) - uhalf := new(big.Int).Div(self.GasUsed(), ethutil.Big2) - for addr, ref := range self.state.Refunds() { - refund := ethutil.BigMin(uhalf, ref) - coinbaseSub.Add(self.gas, refund) - self.state.AddBalance([]byte(addr), refund.Mul(refund, self.msg.GasPrice())) - } - coinbase, sender := self.Coinbase(), self.From() - coinbase.RefundGas(coinbaseSub, self.msg.GasPrice()) - // Return remaining gas remaining := new(big.Int).Mul(self.gas, self.msg.GasPrice()) sender.AddAmount(remaining) + + uhalf := new(big.Int).Div(self.GasUsed(), ethutil.Big2) + for addr, ref := range self.state.Refunds() { + refund := ethutil.BigMin(uhalf, ref) + self.gas.Add(self.gas, refund) + self.state.AddBalance([]byte(addr), refund.Mul(refund, self.msg.GasPrice())) + } + + coinbase.RefundGas(self.gas, self.msg.GasPrice()) } func (self *StateTransition) GasUsed() *big.Int { diff --git a/state/state.go b/state/state.go index a8d611668..f77da72f0 100644 --- a/state/state.go +++ b/state/state.go @@ -94,6 +94,13 @@ func (self *StateDB) GetCode(addr []byte) []byte { return nil } +func (self *StateDB) SetCode(addr, code []byte) { + stateObject := self.GetStateObject(addr) + if stateObject != nil { + stateObject.SetCode(code) + } +} + func (self *StateDB) GetState(a, b []byte) []byte { stateObject := self.GetStateObject(a) if stateObject != nil { diff --git a/vm/environment.go b/vm/environment.go index d77fb1419..969bc5e43 100644 --- a/vm/environment.go +++ b/vm/environment.go @@ -2,6 +2,7 @@ package vm import ( "errors" + "fmt" "math/big" "github.com/ethereum/go-ethereum/ethutil" @@ -74,3 +75,7 @@ func (self *Log) Data() []byte { func (self *Log) RlpData() interface{} { return []interface{}{self.address, ethutil.ByteSliceToInterface(self.topics), self.data} } + +func (self *Log) String() string { + return fmt.Sprintf("[A=%x T=%x D=%x]", self.address, self.topics, self.data) +} diff --git a/vm/vm_debug.go b/vm/vm_debug.go index fd16a3895..aa3291e66 100644 --- a/vm/vm_debug.go +++ b/vm/vm_debug.go @@ -108,13 +108,13 @@ func (self *DebugVm) Run(me, caller ClosureRef, code []byte, value, gas, price * } ) + vmlogger.Debugf("(%d) (%x) %x (code=%d) gas: %v (d) %x\n", self.env.Depth(), caller.Address()[:4], closure.Address(), len(code), closure.Gas, callData) + // Don't bother with the execution if there's no code. if len(code) == 0 { return closure.Return(nil), nil } - vmlogger.Debugf("(%d) (%x) %x gas: %v (d) %x\n", self.env.Depth(), caller.Address()[:4], closure.Address(), closure.Gas, callData) - for { prevStep = step // The base for all big integer arithmetic @@ -134,6 +134,7 @@ func (self *DebugVm) Run(me, caller ClosureRef, code []byte, value, gas, price * addStepGasUsage(GasStep) var newMemSize *big.Int = ethutil.Big0 + var additionalGas *big.Int = new(big.Int) // Stack Check, memory resize & gas phase switch op { // Stack checks only @@ -213,22 +214,24 @@ func (self *DebugVm) Run(me, caller ClosureRef, code []byte, value, gas, price * newMemSize = calcMemSize(stack.Peek(), stack.data[stack.Len()-2]) case SHA3: require(2) - gas.Set(GasSha) - newMemSize = calcMemSize(stack.Peek(), stack.data[stack.Len()-2]) + additionalGas.Set(stack.data[stack.Len()-2]) case CALLDATACOPY: require(2) newMemSize = calcMemSize(stack.Peek(), stack.data[stack.Len()-3]) + additionalGas.Set(stack.data[stack.Len()-3]) case CODECOPY: require(3) newMemSize = calcMemSize(stack.Peek(), stack.data[stack.Len()-3]) + additionalGas.Set(stack.data[stack.Len()-3]) case EXTCODECOPY: require(4) newMemSize = calcMemSize(stack.data[stack.Len()-2], stack.data[stack.Len()-4]) + additionalGas.Set(stack.data[stack.Len()-4]) case CALL, CALLCODE: require(7) gas.Set(GasCall) @@ -245,20 +248,23 @@ func (self *DebugVm) Run(me, caller ClosureRef, code []byte, value, gas, price * newMemSize = calcMemSize(stack.data[stack.Len()-2], stack.data[stack.Len()-3]) } + switch op { + case CALLDATACOPY, CODECOPY, EXTCODECOPY: + additionalGas.Add(additionalGas, u256(31)) + additionalGas.Div(additionalGas, u256(32)) + addStepGasUsage(additionalGas) + case SHA3: + additionalGas.Add(additionalGas, u256(31)) + additionalGas.Div(additionalGas, u256(32)) + additionalGas.Mul(additionalGas, GasSha3Byte) + addStepGasUsage(additionalGas) + } + if newMemSize.Cmp(ethutil.Big0) > 0 { newMemSize.Add(newMemSize, u256(31)) newMemSize.Div(newMemSize, u256(32)) newMemSize.Mul(newMemSize, u256(32)) - switch op { - case CALLDATACOPY, CODECOPY, EXTCODECOPY: - addStepGasUsage(new(big.Int).Div(newMemSize, u256(32))) - case SHA3: - g := new(big.Int).Div(newMemSize, u256(32)) - g.Mul(g, GasSha3Byte) - addStepGasUsage(g) - } - if newMemSize.Cmp(u256(int64(mem.Len()))) > 0 { memGasUsage := new(big.Int).Sub(newMemSize, u256(int64(mem.Len()))) memGasUsage.Mul(GasMemory, memGasUsage) @@ -643,9 +649,7 @@ func (self *DebugVm) Run(me, caller ClosureRef, code []byte, value, gas, price * case CODECOPY, EXTCODECOPY: var code []byte if op == EXTCODECOPY { - addr := stack.Pop().Bytes() - - code = statedb.GetCode(addr) + code = statedb.GetCode(stack.Pop().Bytes()) } else { code = closure.Code } @@ -663,12 +667,11 @@ func (self *DebugVm) Run(me, caller ClosureRef, code []byte, value, gas, price * } else if cOff+l > size { l = uint64(math.Min(float64(cOff+l), float64(size))) } - codeCopy := code[cOff : cOff+l] mem.Set(mOff, l, codeCopy) - self.Printf(" => [%v, %v, %v] %x", mOff, cOff, l, code[cOff:cOff+l]) + self.Printf(" => [%v, %v, %v] %x", mOff, cOff, l, codeCopy) case GASPRICE: stack.Push(closure.Price) @@ -891,7 +894,7 @@ func (self *DebugVm) Run(me, caller ClosureRef, code []byte, value, gas, price * size, offset := stack.Popn() ret := mem.Get(offset.Int64(), size.Int64()) - self.Printf(" => (%d) 0x%x", len(ret), ret).Endl() + self.Printf(" => [%v, %v] (%d) 0x%x", offset, size, len(ret), ret).Endl() return closure.Return(ret), nil case SUICIDE: From 0a9dc1536c5d776844d6947a0090ff7e1a7c6ab4 Mon Sep 17 00:00:00 2001 From: obscuren Date: Sat, 20 Dec 2014 02:33:45 +0100 Subject: [PATCH 78/79] Increased peer from 10 to 30 --- cmd/ethereum/flags.go | 2 +- cmd/mist/flags.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd/ethereum/flags.go b/cmd/ethereum/flags.go index 783944cf2..85aca47c3 100644 --- a/cmd/ethereum/flags.go +++ b/cmd/ethereum/flags.go @@ -85,7 +85,7 @@ func Init() { flag.StringVar(&KeyStore, "keystore", "db", "system to store keyrings: db|file (db)") flag.StringVar(&OutboundPort, "port", "30303", "listening port") flag.BoolVar(&UseUPnP, "upnp", false, "enable UPnP support") - flag.IntVar(&MaxPeer, "maxpeer", 10, "maximum desired peers") + flag.IntVar(&MaxPeer, "maxpeer", 30, "maximum desired peers") flag.IntVar(&RpcPort, "rpcport", 8080, "port to start json-rpc server on") flag.BoolVar(&StartRpc, "rpc", false, "start rpc server") flag.BoolVar(&StartWebSockets, "ws", false, "start websocket server") diff --git a/cmd/mist/flags.go b/cmd/mist/flags.go index 2ae0a0487..e49408181 100644 --- a/cmd/mist/flags.go +++ b/cmd/mist/flags.go @@ -104,7 +104,7 @@ func Init() { flag.StringVar(&KeyStore, "keystore", "db", "system to store keyrings: db|file (db)") flag.StringVar(&OutboundPort, "port", "30303", "listening port") flag.BoolVar(&UseUPnP, "upnp", true, "enable UPnP support") - flag.IntVar(&MaxPeer, "maxpeer", 10, "maximum desired peers") + flag.IntVar(&MaxPeer, "maxpeer", 30, "maximum desired peers") flag.IntVar(&RpcPort, "rpcport", 8080, "port to start json-rpc server on") flag.BoolVar(&StartRpc, "rpc", false, "start rpc server") flag.BoolVar(&StartWebSockets, "ws", false, "start websocket server") From 795b14330ad4399ef292835eac452d258dcd7464 Mon Sep 17 00:00:00 2001 From: obscuren Date: Sun, 21 Dec 2014 15:13:06 +0100 Subject: [PATCH 79/79] Fixed EVM environment. Closes #215 --- cmd/evm/main.go | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/cmd/evm/main.go b/cmd/evm/main.go index c6c986a04..2bdfdfa9f 100644 --- a/cmd/evm/main.go +++ b/cmd/evm/main.go @@ -141,9 +141,7 @@ func (self *VMEnv) Transfer(from, to vm.Account, amount *big.Int) error { } func (self *VMEnv) vm(addr, data []byte, gas, price, value *big.Int) *core.Execution { - evm := vm.New(self, vm.DebugVmTy) - - return core.NewExecution(evm, addr, data, gas, price, value) + return core.NewExecution(self, addr, data, gas, price, value) } func (self *VMEnv) Call(caller vm.ClosureRef, addr, data []byte, gas, price, value *big.Int) ([]byte, error) {