diff options
-rw-r--r-- | .travis.yml | 4 | ||||
-rw-r--r-- | block_pool.go | 25 | ||||
-rw-r--r-- | chain/vm_env.go | 40 | ||||
-rw-r--r-- | cmd/ethereum/main.go | 5 | ||||
-rw-r--r-- | cmd/ethtest/main.go | 2 | ||||
-rw-r--r-- | cmd/evm/code.txt | 1 | ||||
-rw-r--r-- | cmd/evm/input.txt | 1 | ||||
-rw-r--r-- | cmd/evm/main.go | 97 | ||||
-rw-r--r-- | cmd/mist/assets/qml/views/miner.qml | 2 | ||||
-rw-r--r-- | cmd/mist/assets/qml/views/wallet.qml | 12 | ||||
-rw-r--r-- | cmd/mist/bindings.go | 8 | ||||
-rw-r--r-- | cmd/mist/debugger.go | 19 | ||||
-rw-r--r-- | cmd/mist/ext_app.go | 14 | ||||
-rw-r--r-- | cmd/mist/gui.go | 16 | ||||
-rw-r--r-- | cmd/mist/html_container.go | 3 | ||||
-rw-r--r-- | cmd/mist/main.go | 2 | ||||
-rw-r--r-- | cmd/mist/qml_container.go | 3 | ||||
-rw-r--r-- | cmd/mist/ui_lib.go | 13 | ||||
-rw-r--r-- | cmd/utils/cmd.go | 2 | ||||
-rw-r--r-- | cmd/utils/vm_env.go | 42 | ||||
-rw-r--r-- | core/.gitignore (renamed from chain/.gitignore) | 0 | ||||
-rw-r--r-- | core/asm.go (renamed from chain/asm.go) | 2 | ||||
-rw-r--r-- | core/block_manager.go (renamed from chain/block_manager.go) | 117 | ||||
-rw-r--r-- | core/chain_manager.go (renamed from chain/chain_manager.go) | 134 | ||||
-rw-r--r-- | core/chain_manager_test.go (renamed from chain/chain_manager_test.go) | 4 | ||||
-rw-r--r-- | core/dagger.go (renamed from chain/dagger.go) | 18 | ||||
-rw-r--r-- | core/dagger_test.go (renamed from chain/dagger_test.go) | 2 | ||||
-rw-r--r-- | core/error.go (renamed from chain/error.go) | 15 | ||||
-rw-r--r-- | core/events.go (renamed from chain/events.go) | 4 | ||||
-rw-r--r-- | core/execution.go | 80 | ||||
-rw-r--r-- | core/fees.go (renamed from chain/fees.go) | 2 | ||||
-rw-r--r-- | core/filter.go (renamed from chain/filter.go) | 8 | ||||
-rw-r--r-- | core/filter_test.go (renamed from chain/filter_test.go) | 2 | ||||
-rw-r--r-- | core/genesis.go (renamed from chain/genesis.go) | 4 | ||||
-rw-r--r-- | core/helper_test.go (renamed from chain/helper_test.go) | 4 | ||||
-rw-r--r-- | core/state_transition.go (renamed from chain/state_transition.go) | 144 | ||||
-rw-r--r-- | core/transaction_pool.go (renamed from chain/transaction_pool.go) | 78 | ||||
-rw-r--r-- | core/types/block.go (renamed from chain/types/block.go) | 42 | ||||
-rw-r--r-- | core/types/bloom9.go (renamed from chain/types/bloom9.go) | 8 | ||||
-rw-r--r-- | core/types/bloom9_test.go (renamed from chain/types/bloom9_test.go) | 0 | ||||
-rw-r--r-- | core/types/common.go (renamed from chain/types/common.go) | 3 | ||||
-rw-r--r-- | core/types/derive_sha.go (renamed from chain/types/derive_sha.go) | 0 | ||||
-rw-r--r-- | core/types/receipt.go (renamed from chain/types/receipt.go) | 0 | ||||
-rw-r--r-- | core/types/transaction.go (renamed from chain/types/transaction.go) | 21 | ||||
-rw-r--r-- | core/types/transaction_test.go (renamed from chain/types/transaction_test.go) | 0 | ||||
-rw-r--r-- | core/vm_env.go | 63 | ||||
-rw-r--r-- | ethereum.go | 32 | ||||
-rw-r--r-- | ethutil/big.go | 10 | ||||
-rwxr-xr-x | install.sh | 41 | ||||
-rw-r--r-- | javascript/javascript_runtime.go | 8 | ||||
-rw-r--r-- | miner/miner.go | 27 | ||||
-rw-r--r-- | peer.go | 11 | ||||
-rw-r--r-- | state/dump.go | 2 | ||||
-rw-r--r-- | state/log.go | 61 | ||||
-rw-r--r-- | state/state.go | 94 | ||||
-rw-r--r-- | state/state_object.go | 13 | ||||
-rw-r--r-- | tests/files/BasicTests/genesishashestest.json | 4 | ||||
-rw-r--r-- | tests/files/StateTests/stExample.json | 2 | ||||
-rw-r--r-- | tests/files/StateTests/stPreCompiledContracts.json | 377 | ||||
-rw-r--r-- | tests/files/StateTests/stRecursiveCreate.json | 6194 | ||||
-rw-r--r-- | tests/files/StateTests/stSpecialTest.json | 77 | ||||
-rw-r--r-- | tests/files/StateTests/stSystemOperationsTest.json | 80 | ||||
-rw-r--r-- | tests/files/TrieTests/trietest.json | 132 | ||||
-rw-r--r-- | tests/files/VMTests/vmArithmeticTest.json | 160 | ||||
-rw-r--r-- | tests/files/VMTests/vmBitwiseLogicOperationTest.json | 120 | ||||
-rw-r--r-- | tests/files/VMTests/vmBlockInfoTest.json | 12 | ||||
-rw-r--r-- | tests/files/VMTests/vmEnvironmentalInfoTest.json | 60 | ||||
-rw-r--r-- | tests/files/VMTests/vmIOandFlowOperationsTest.json | 142 | ||||
-rw-r--r-- | tests/files/VMTests/vmLogTest.json | 2062 | ||||
-rw-r--r-- | tests/files/VMTests/vmPushDupSwapTest.json | 204 | ||||
-rw-r--r-- | tests/files/VMTests/vmSha3Test.json | 58 | ||||
-rw-r--r-- | tests/files/VMTests/vmtests.json | 8 | ||||
-rw-r--r-- | tests/files/index.js | 5 | ||||
-rw-r--r-- | tests/helper/vm.go | 88 | ||||
-rw-r--r-- | tests/vm/gh_test.go | 337 | ||||
-rw-r--r-- | ui/filter.go | 12 | ||||
-rw-r--r-- | ui/qt/filter.go | 6 | ||||
-rw-r--r-- | vm/address.go | 8 | ||||
-rw-r--r-- | vm/analysis.go | 10 | ||||
-rw-r--r-- | vm/closure.go | 72 | ||||
-rw-r--r-- | vm/environment.go | 37 | ||||
-rw-r--r-- | vm/execution.go | 95 | ||||
-rw-r--r-- | vm/stack.go | 3 | ||||
-rw-r--r-- | vm/types.go | 13 | ||||
-rw-r--r-- | vm/virtual_machine.go | 4 | ||||
-rw-r--r-- | vm/vm.go | 690 | ||||
-rw-r--r-- | vm/vm_debug.go | 160 | ||||
-rw-r--r-- | xeth/hexface.go | 82 | ||||
-rw-r--r-- | xeth/js_types.go | 12 | ||||
-rw-r--r-- | xeth/pipe.go | 125 | ||||
-rw-r--r-- | xeth/vm_env.go | 38 | ||||
-rw-r--r-- | xeth/world.go | 2 |
92 files changed, 10658 insertions, 2198 deletions
diff --git a/.travis.yml b/.travis.yml index ebb631969..d09cbcdb0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -19,9 +19,7 @@ before_script: # - go vet ./... # - go test -race ./... script: - - ./gocoverage.sh -after_script: - - goveralls -coverprofile=profile.cov -service=travis-ci -repotoken $COVERALLS_TOKEN + - ./gocoverage.sh && goveralls -coverprofile=profile.cov -service=travis-ci -repotoken $COVERALLS_TOKEN env: - secure: "U2U1AmkU4NJBgKR/uUAebQY87cNL0+1JHjnLOmmXwxYYyj5ralWb1aSuSH3qSXiT93qLBmtaUkuv9fberHVqrbAeVlztVdUsKAq7JMQH+M99iFkC9UiRMqHmtjWJ0ok4COD1sRYixxi21wb/JrMe3M1iL4QJVS61iltjHhVdM64=" diff --git a/block_pool.go b/block_pool.go index 38302a4c7..95c766e53 100644 --- a/block_pool.go +++ b/block_pool.go @@ -9,11 +9,9 @@ import ( "sync" "time" - "github.com/ethereum/go-ethereum/chain" - "github.com/ethereum/go-ethereum/chain/types" + "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/wire" ) @@ -312,11 +310,10 @@ out: } if len(blocks) > 0 { - chainManager := self.eth.ChainManager() - // Test and import - bchain := chain.NewChain(blocks) - _, err := chainManager.TestChain(bchain) - if err != nil && !chain.IsTDError(err) { + chainman := self.eth.ChainManager() + + err := chainman.InsertChain(blocks) + if err != nil { poollogger.Debugln(err) self.Reset() @@ -330,16 +327,10 @@ out: self.peer.StopWithReason(DiscBadPeer) self.td = ethutil.Big0 self.peer = nil - } else { - if !chain.IsTDError(err) { - chainManager.InsertChain(bchain, func(block *types.Block, messages state.Messages) { - self.eth.EventMux().Post(chain.NewBlockEvent{block}) - self.eth.EventMux().Post(messages) - - self.Remove(block.Hash()) - }) + } - } + for _, block := range blocks { + self.Remove(block.Hash()) } } } diff --git a/chain/vm_env.go b/chain/vm_env.go deleted file mode 100644 index c1911ff51..000000000 --- a/chain/vm_env.go +++ /dev/null @@ -1,40 +0,0 @@ -package chain - -import ( - "math/big" - - "github.com/ethereum/go-ethereum/chain/types" - "github.com/ethereum/go-ethereum/state" - "github.com/ethereum/go-ethereum/vm" -) - -type VMEnv struct { - state *state.State - block *types.Block - tx *types.Transaction -} - -func NewEnv(state *state.State, tx *types.Transaction, block *types.Block) *VMEnv { - return &VMEnv{ - state: state, - block: block, - tx: tx, - } -} - -func (self *VMEnv) Origin() []byte { return self.tx.Sender() } -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) State() *state.State { return self.state } -func (self *VMEnv) GasLimit() *big.Int { return self.block.GasLimit } -func (self *VMEnv) AddLog(log *state.Log) { - self.state.AddLog(log) -} -func (self *VMEnv) Transfer(from, to vm.Account, amount *big.Int) error { - return vm.Transfer(from, to, amount) -} diff --git a/cmd/ethereum/main.go b/cmd/ethereum/main.go index aa933c4e7..c39f904fb 100644 --- a/cmd/ethereum/main.go +++ b/cmd/ethereum/main.go @@ -21,15 +21,16 @@ import ( "fmt" "os" "runtime" - "github.com/ethereum/go-ethereum/chain/types" + "github.com/ethereum/go-ethereum/cmd/utils" + "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/ethutil" "github.com/ethereum/go-ethereum/logger" ) const ( ClientIdentifier = "Ethereum(G)" - Version = "0.7.5" + Version = "0.7.7" ) var clilogger = logger.NewLogger("CLI") diff --git a/cmd/ethtest/main.go b/cmd/ethtest/main.go index 82e1c6d59..94ab779db 100644 --- a/cmd/ethtest/main.go +++ b/cmd/ethtest/main.go @@ -82,7 +82,7 @@ func RunVmTest(js string) (failed int) { state.SetStateObject(obj) } - ret, gas, err := helper.RunVm(state, test.Env, test.Exec) + ret, _, gas, err := helper.RunVm(state, test.Env, test.Exec) // When an error is returned it doesn't always mean the tests fails. // Have to come up with some conditional failing mechanism. if err != nil { diff --git a/cmd/evm/code.txt b/cmd/evm/code.txt new file mode 100644 index 000000000..a964ad9d2 --- /dev/null +++ b/cmd/evm/code.txt @@ -0,0 +1 @@ +60006102ff5360003560001a60008114156103395760013560405260216040516020025990590160009052606052604051602002816060513760405160200281019050506002604051121561005957604051602002606051f35b604051602002599059016000905260a052600060c052604051602002599059016000905260e0526000610100526001610120525b604051610120511215610109576060515161012051602002606051015112156100d8576101205160200260605101516101005160200260e051015260016101005101610100526100f9565b61012051602002606051015160c05160200260a0510152600160c0510160c0525b600161012051016101205261008d565b60216020599059016000905260c051808252806020028301925050602082015990590160009052600081538151600182015260218101825160200260a0518260005b8381101561016657808301518186015260208101905061014b565b50505050825160200281019050604059905901600090526102405281610240515283602061024051015261024051905090509050905060c05160200280599059016000905281816020850151855160003060195a03f1508090509050905060a05260216020599059016000905261010051808252806020028301925050602082015990590160009052600081538151600182015260218101825160200260e0518260005b8381101561022557808301518186015260208101905061020a565b50505050825160200281019050604059905901600090526102c052816102c051528360206102c05101526102c05190509050905090506101005160200280599059016000905281816020850151855160003060195a03f1508090509050905060e05260405160200259905901600090526102e0526000610120525b610100516101205112156102d7576101205160200260e0510151610120516020026102e051015260016101205101610120526102a0565b60605151610100516020026102e05101526000610120525b60c05161012051121561032d576101205160200260a05101516101205160016101005101016020026102e051015260016101205101610120526102ef565b6040516020026102e051f35b50 diff --git a/cmd/evm/input.txt b/cmd/evm/input.txt new file mode 100644 index 000000000..1b6857ab9 --- /dev/null +++ b/cmd/evm/input.txt @@ -0,0 +1 @@ +0000000000000000000000000000000000000000000000000000000000000000c80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000b000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000d000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000f0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001100000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000013000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000150000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001700000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000019000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001b000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000001d000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000001f0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002100000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000023000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000250000000000000000000000000000000000000000000000000000000000000026000000000000000000000000000000000000000000000000000000000000002700000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000029000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000002b000000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000002d000000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000002f0000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000003100000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000033000000000000000000000000000000000000000000000000000000000000003400000000000000000000000000000000000000000000000000000000000000350000000000000000000000000000000000000000000000000000000000000036000000000000000000000000000000000000000000000000000000000000003700000000000000000000000000000000000000000000000000000000000000380000000000000000000000000000000000000000000000000000000000000039000000000000000000000000000000000000000000000000000000000000003a000000000000000000000000000000000000000000000000000000000000003b000000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000003d000000000000000000000000000000000000000000000000000000000000003e000000000000000000000000000000000000000000000000000000000000003f0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000004100000000000000000000000000000000000000000000000000000000000000420000000000000000000000000000000000000000000000000000000000000043000000000000000000000000000000000000000000000000000000000000004400000000000000000000000000000000000000000000000000000000000000450000000000000000000000000000000000000000000000000000000000000046000000000000000000000000000000000000000000000000000000000000004700000000000000000000000000000000000000000000000000000000000000480000000000000000000000000000000000000000000000000000000000000049000000000000000000000000000000000000000000000000000000000000004a000000000000000000000000000000000000000000000000000000000000004b000000000000000000000000000000000000000000000000000000000000004c000000000000000000000000000000000000000000000000000000000000004d000000000000000000000000000000000000000000000000000000000000004e000000000000000000000000000000000000000000000000000000000000004f0000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000005100000000000000000000000000000000000000000000000000000000000000520000000000000000000000000000000000000000000000000000000000000053000000000000000000000000000000000000000000000000000000000000005400000000000000000000000000000000000000000000000000000000000000550000000000000000000000000000000000000000000000000000000000000056000000000000000000000000000000000000000000000000000000000000005700000000000000000000000000000000000000000000000000000000000000580000000000000000000000000000000000000000000000000000000000000059000000000000000000000000000000000000000000000000000000000000005a000000000000000000000000000000000000000000000000000000000000005b000000000000000000000000000000000000000000000000000000000000005c000000000000000000000000000000000000000000000000000000000000005d000000000000000000000000000000000000000000000000000000000000005e000000000000000000000000000000000000000000000000000000000000005f0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000006100000000000000000000000000000000000000000000000000000000000000620000000000000000000000000000000000000000000000000000000000000063000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000000000650000000000000000000000000000000000000000000000000000000000000066000000000000000000000000000000000000000000000000000000000000006700000000000000000000000000000000000000000000000000000000000000680000000000000000000000000000000000000000000000000000000000000069000000000000000000000000000000000000000000000000000000000000006a000000000000000000000000000000000000000000000000000000000000006b000000000000000000000000000000000000000000000000000000000000006c000000000000000000000000000000000000000000000000000000000000006d000000000000000000000000000000000000000000000000000000000000006e000000000000000000000000000000000000000000000000000000000000006f0000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000007100000000000000000000000000000000000000000000000000000000000000720000000000000000000000000000000000000000000000000000000000000073000000000000000000000000000000000000000000000000000000000000007400000000000000000000000000000000000000000000000000000000000000750000000000000000000000000000000000000000000000000000000000000076000000000000000000000000000000000000000000000000000000000000007700000000000000000000000000000000000000000000000000000000000000780000000000000000000000000000000000000000000000000000000000000079000000000000000000000000000000000000000000000000000000000000007a000000000000000000000000000000000000000000000000000000000000007b000000000000000000000000000000000000000000000000000000000000007c000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007e000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000008100000000000000000000000000000000000000000000000000000000000000820000000000000000000000000000000000000000000000000000000000000083000000000000000000000000000000000000000000000000000000000000008400000000000000000000000000000000000000000000000000000000000000850000000000000000000000000000000000000000000000000000000000000086000000000000000000000000000000000000000000000000000000000000008700000000000000000000000000000000000000000000000000000000000000880000000000000000000000000000000000000000000000000000000000000089000000000000000000000000000000000000000000000000000000000000008a000000000000000000000000000000000000000000000000000000000000008b000000000000000000000000000000000000000000000000000000000000008c000000000000000000000000000000000000000000000000000000000000008d000000000000000000000000000000000000000000000000000000000000008e000000000000000000000000000000000000000000000000000000000000008f0000000000000000000000000000000000000000000000000000000000000090000000000000000000000000000000000000000000000000000000000000009100000000000000000000000000000000000000000000000000000000000000920000000000000000000000000000000000000000000000000000000000000093000000000000000000000000000000000000000000000000000000000000009400000000000000000000000000000000000000000000000000000000000000950000000000000000000000000000000000000000000000000000000000000096000000000000000000000000000000000000000000000000000000000000009700000000000000000000000000000000000000000000000000000000000000980000000000000000000000000000000000000000000000000000000000000099000000000000000000000000000000000000000000000000000000000000009a000000000000000000000000000000000000000000000000000000000000009b000000000000000000000000000000000000000000000000000000000000009c000000000000000000000000000000000000000000000000000000000000009d000000000000000000000000000000000000000000000000000000000000009e000000000000000000000000000000000000000000000000000000000000009f00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a100000000000000000000000000000000000000000000000000000000000000a200000000000000000000000000000000000000000000000000000000000000a300000000000000000000000000000000000000000000000000000000000000a400000000000000000000000000000000000000000000000000000000000000a500000000000000000000000000000000000000000000000000000000000000a600000000000000000000000000000000000000000000000000000000000000a700000000000000000000000000000000000000000000000000000000000000a800000000000000000000000000000000000000000000000000000000000000a900000000000000000000000000000000000000000000000000000000000000aa00000000000000000000000000000000000000000000000000000000000000ab00000000000000000000000000000000000000000000000000000000000000ac00000000000000000000000000000000000000000000000000000000000000ad00000000000000000000000000000000000000000000000000000000000000ae00000000000000000000000000000000000000000000000000000000000000af00000000000000000000000000000000000000000000000000000000000000b000000000000000000000000000000000000000000000000000000000000000b100000000000000000000000000000000000000000000000000000000000000b200000000000000000000000000000000000000000000000000000000000000b300000000000000000000000000000000000000000000000000000000000000b400000000000000000000000000000000000000000000000000000000000000b500000000000000000000000000000000000000000000000000000000000000b600000000000000000000000000000000000000000000000000000000000000b700000000000000000000000000000000000000000000000000000000000000b800000000000000000000000000000000000000000000000000000000000000b900000000000000000000000000000000000000000000000000000000000000ba00000000000000000000000000000000000000000000000000000000000000bb00000000000000000000000000000000000000000000000000000000000000bc00000000000000000000000000000000000000000000000000000000000000bd00000000000000000000000000000000000000000000000000000000000000be00000000000000000000000000000000000000000000000000000000000000bf00000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000c100000000000000000000000000000000000000000000000000000000000000c200000000000000000000000000000000000000000000000000000000000000c300000000000000000000000000000000000000000000000000000000000000c400000000000000000000000000000000000000000000000000000000000000c500000000000000000000000000000000000000000000000000000000000000c600000000000000000000000000000000000000000000000000000000000000c7 diff --git a/cmd/evm/main.go b/cmd/evm/main.go index 2b4d47684..1e6c807b1 100644 --- a/cmd/evm/main.go +++ b/cmd/evm/main.go @@ -32,6 +32,8 @@ import ( "runtime" "time" + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/ethutil" "github.com/ethereum/go-ethereum/logger" @@ -43,8 +45,9 @@ import ( var ( code = flag.String("code", "", "evm code") loglevel = flag.Int("log", 4, "log level") - gas = flag.String("gas", "1000000", "gas amount") + gas = flag.String("gas", "1000000000", "gas amount") price = flag.String("price", "0", "gas price") + value = flag.String("value", "0", "tx value") dump = flag.Bool("dump", false, "dump state after run") data = flag.String("data", "", "data") ) @@ -59,15 +62,20 @@ func main() { logger.AddLogSystem(logger.NewStdLogSystem(os.Stdout, log.LstdFlags, logger.LogLevel(*loglevel))) - ethutil.ReadConfig("/tm/evmtest", "/tmp/evm", "") + ethutil.ReadConfig("/tmp/evmtest", "/tmp/evm", "") - stateObject := state.NewStateObject([]byte("evmuser")) - closure := vm.NewClosure(nil, stateObject, stateObject, ethutil.Hex2Bytes(*code), ethutil.Big(*gas), ethutil.Big(*price)) + db, _ := ethdb.NewMemDatabase() + statedb := state.New(trie.New(db, "")) + sender := statedb.NewStateObject([]byte("sender")) + receiver := statedb.NewStateObject([]byte("receiver")) + //receiver.SetCode([]byte(*code)) + receiver.SetCode(ethutil.Hex2Bytes(*code)) + + vmenv := NewEnv(statedb, []byte("evmuser"), ethutil.Big(*value)) tstart := time.Now() - env := NewVmEnv() - ret, _, e := closure.Call(vm.New(env, vm.DebugVmTy), ethutil.Hex2Bytes(*data)) + ret, e := vmenv.Call(sender, receiver.Address(), ethutil.Hex2Bytes(*data), ethutil.Big(*gas), ethutil.Big(*price), ethutil.Big(*value)) logger.Flush() if e != nil { @@ -75,7 +83,7 @@ func main() { } if *dump { - fmt.Println(string(env.state.Dump())) + fmt.Println(string(statedb.Dump())) } var mem runtime.MemStats @@ -92,26 +100,65 @@ num gc: %d fmt.Printf("%x\n", ret) } -type VmEnv struct { - state *state.State +type VMEnv struct { + state *state.StateDB + block *types.Block + + transactor []byte + value *big.Int + + depth int + Gas *big.Int + time int64 +} + +func NewEnv(state *state.StateDB, transactor []byte, value *big.Int) *VMEnv { + return &VMEnv{ + state: state, + transactor: transactor, + value: value, + time: time.Now().Unix(), + } } -func NewVmEnv() *VmEnv { - db, _ := ethdb.NewMemDatabase() - return &VmEnv{state.New(trie.New(db, ""))} +func (self *VMEnv) State() *state.StateDB { return self.state } +func (self *VMEnv) Origin() []byte { return self.transactor } +func (self *VMEnv) BlockNumber() *big.Int { return ethutil.Big0 } +func (self *VMEnv) PrevHash() []byte { return make([]byte, 32) } +func (self *VMEnv) Coinbase() []byte { return self.transactor } +func (self *VMEnv) Time() int64 { return self.time } +func (self *VMEnv) Difficulty() *big.Int { return ethutil.Big1 } +func (self *VMEnv) BlockHash() []byte { return make([]byte, 32) } +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) { + self.state.AddLog(log) +} +func (self *VMEnv) Transfer(from, to vm.Account, amount *big.Int) error { + return vm.Transfer(from, to, amount) +} + +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) +} + +func (self *VMEnv) Call(caller vm.ClosureRef, addr, data []byte, gas, price, value *big.Int) ([]byte, error) { + exe := self.vm(addr, data, gas, price, value) + ret, err := exe.Call(addr, caller) + self.Gas = exe.Gas + + return ret, err +} +func (self *VMEnv) CallCode(caller vm.ClosureRef, addr, data []byte, gas, price, value *big.Int) ([]byte, error) { + exe := self.vm(caller.Address(), data, gas, price, value) + return exe.Call(addr, caller) } -func (VmEnv) Origin() []byte { return nil } -func (VmEnv) BlockNumber() *big.Int { return nil } -func (VmEnv) BlockHash() []byte { return nil } -func (VmEnv) PrevHash() []byte { return nil } -func (VmEnv) Coinbase() []byte { return nil } -func (VmEnv) Time() int64 { return 0 } -func (VmEnv) GasLimit() *big.Int { return nil } -func (VmEnv) Difficulty() *big.Int { return nil } -func (VmEnv) Value() *big.Int { return nil } -func (self *VmEnv) State() *state.State { return self.state } -func (VmEnv) AddLog(*state.Log) {} -func (VmEnv) Transfer(from, to vm.Account, amount *big.Int) error { - return nil +func (self *VMEnv) Create(caller vm.ClosureRef, addr, data []byte, gas, price, value *big.Int) ([]byte, error, vm.ClosureRef) { + exe := self.vm(addr, data, gas, price, value) + return exe.Create(caller) } diff --git a/cmd/mist/assets/qml/views/miner.qml b/cmd/mist/assets/qml/views/miner.qml index 2d59bb3a4..e0182649f 100644 --- a/cmd/mist/assets/qml/views/miner.qml +++ b/cmd/mist/assets/qml/views/miner.qml @@ -119,12 +119,14 @@ Rectangle { } } Component.onCompleted: { + /* // XXX Temp. replace with above eventually var tmpItems = ["JEVCoin", "Some coin", "Other coin", "Etc coin"]; var address = "e6716f9544a56c530d868e4bfbacb172315bdead"; for (var i = 0; i < tmpItems.length; i++) { mergedMiningModel.append({checked: false, name: tmpItems[i], address: address, id: 0, itemId: i}); } + */ } } } diff --git a/cmd/mist/assets/qml/views/wallet.qml b/cmd/mist/assets/qml/views/wallet.qml index a57e7869a..9ffb1024d 100644 --- a/cmd/mist/assets/qml/views/wallet.qml +++ b/cmd/mist/assets/qml/views/wallet.qml @@ -16,7 +16,13 @@ Rectangle { anchors.fill: parent function onReady() { - menuItem.secondaryTitle = eth.numberToHuman(eth.balanceAt(eth.key().address)) + setBalance() + } + + function setBalance() { + balance.text = "<b>Balance</b>: " + eth.numberToHuman(eth.balanceAt(eth.key().address)) + if(menuItem) + menuItem.secondaryTitle = eth.numberToHuman(eth.balanceAt(eth.key().address)) } ListModel { @@ -39,7 +45,6 @@ Rectangle { Text { id: balance - text: "<b>Balance</b>: " + eth.numberToHuman(eth.balanceAt(eth.key().address)) font.pixelSize: 24 anchors { horizontalCenter: parent.horizontalCenter @@ -126,7 +131,6 @@ Rectangle { var value = txValue.text + denomModel.get(valueDenom.currentIndex).zeros; var gasPrice = "10000000000000" var res = eth.transact({from: eth.key().privateKey, to: txTo.text, value: value, gas: "500", gasPrice: gasPrice}) - console.log(res) } } } @@ -158,6 +162,8 @@ Rectangle { } function addTxs(messages) { + setBalance() + for(var i = 0; i < messages.length; i++) { var message = messages.get(i); var to = eth.lookupName(message.to); diff --git a/cmd/mist/bindings.go b/cmd/mist/bindings.go index eb78c3acc..6dbcc3f1d 100644 --- a/cmd/mist/bindings.go +++ b/cmd/mist/bindings.go @@ -21,11 +21,11 @@ import ( "encoding/json" "os" "strconv" - "github.com/ethereum/go-ethereum/chain/types" + "github.com/ethereum/go-ethereum/cmd/utils" + "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/ethutil" "github.com/ethereum/go-ethereum/logger" - "github.com/ethereum/go-ethereum/xeth" ) type plugin struct { @@ -45,12 +45,12 @@ func (gui *Gui) LogPrint(level logger.LogLevel, msg string) { } */ } -func (gui *Gui) Transact(recipient, value, gas, gasPrice, d string) (*xeth.JSReceipt, error) { +func (gui *Gui) Transact(recipient, value, gas, gasPrice, d string) (string, error) { var data string if len(recipient) == 0 { code, err := ethutil.Compile(d, false) if err != nil { - return nil, err + return "", err } data = ethutil.Bytes2Hex(code) } else { diff --git a/cmd/mist/debugger.go b/cmd/mist/debugger.go index a2aae6f0b..ca3ff5af2 100644 --- a/cmd/mist/debugger.go +++ b/cmd/mist/debugger.go @@ -24,8 +24,8 @@ import ( "strings" "unicode" - "github.com/ethereum/go-ethereum/chain" "github.com/ethereum/go-ethereum/cmd/utils" + "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/ethutil" "github.com/ethereum/go-ethereum/state" "github.com/ethereum/go-ethereum/vm" @@ -40,7 +40,7 @@ type DebuggerWindow struct { vm *vm.DebugVm Db *Debugger - state *state.State + state *state.StateDB } func NewDebuggerWindow(lib *UiLib) *DebuggerWindow { @@ -81,7 +81,7 @@ func (self *DebuggerWindow) SetData(data string) { func (self *DebuggerWindow) SetAsm(data []byte) { self.win.Root().Call("clearAsm") - dis := chain.Disassemble(data) + dis := core.Disassemble(data) for _, str := range dis { self.win.Root().Call("setAsm", str) } @@ -144,24 +144,21 @@ func (self *DebuggerWindow) Debug(valueStr, gasStr, gasPriceStr, scriptStr, data statedb := self.lib.eth.BlockManager().TransState() account := self.lib.eth.BlockManager().TransState().GetAccount(keyPair.Address()) contract := statedb.NewStateObject([]byte{0}) + contract.SetCode(script) contract.SetBalance(value) self.SetAsm(script) block := self.lib.eth.ChainManager().CurrentBlock - callerClosure := vm.NewClosure(&state.Message{}, account, contract, script, gas, gasPrice) env := utils.NewEnv(statedb, block, account.Address(), value) - evm := vm.NewDebugVm(env) - evm.Dbg = self.Db - self.vm = evm - self.Db.done = false self.Logf("callsize %d", len(script)) go func() { - ret, g, err := callerClosure.Call(evm, data) - tot := new(big.Int).Mul(g, gasPrice) - self.Logf("gas usage %v total price = %v (%v)", g, tot, ethutil.CurrencyToString(tot)) + ret, err := env.Call(account, contract.Address(), data, gas, gasPrice, ethutil.Big0) + //ret, g, err := callerClosure.Call(evm, data) + tot := new(big.Int).Mul(env.Gas, gasPrice) + self.Logf("gas usage %v total price = %v (%v)", env.Gas, tot, ethutil.CurrencyToString(tot)) if err != nil { self.Logln("exited with errors:", err) } else { diff --git a/cmd/mist/ext_app.go b/cmd/mist/ext_app.go index 22fa4bfaf..33c420a7a 100644 --- a/cmd/mist/ext_app.go +++ b/cmd/mist/ext_app.go @@ -20,8 +20,8 @@ package main import ( "encoding/json" - "github.com/ethereum/go-ethereum/chain" - "github.com/ethereum/go-ethereum/chain/types" + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/event" "github.com/ethereum/go-ethereum/javascript" "github.com/ethereum/go-ethereum/state" @@ -45,12 +45,12 @@ type AppContainer interface { type ExtApplication struct { *xeth.JSXEth - eth chain.EthManager + eth core.EthManager events event.Subscription watcherQuitChan chan bool - filters map[string]*chain.Filter + filters map[string]*core.Filter container AppContainer lib *UiLib @@ -61,7 +61,7 @@ func NewExtApplication(container AppContainer, lib *UiLib) *ExtApplication { JSXEth: xeth.NewJSXEth(lib.eth), eth: lib.eth, watcherQuitChan: make(chan bool), - filters: make(map[string]*chain.Filter), + filters: make(map[string]*core.Filter), container: container, lib: lib, } @@ -81,7 +81,7 @@ func (app *ExtApplication) run() { // Subscribe to events mux := app.lib.eth.EventMux() - app.events = mux.Subscribe(chain.NewBlockEvent{}, state.Messages(nil)) + app.events = mux.Subscribe(core.NewBlockEvent{}, state.Messages(nil)) // Call the main loop go app.mainLoop() @@ -107,7 +107,7 @@ func (app *ExtApplication) stop() { func (app *ExtApplication) mainLoop() { for ev := range app.events.Chan() { switch ev := ev.(type) { - case chain.NewBlockEvent: + case core.NewBlockEvent: app.container.NewBlock(ev.Block) case state.Messages: diff --git a/cmd/mist/gui.go b/cmd/mist/gui.go index 61b66cce3..e58e349d1 100644 --- a/cmd/mist/gui.go +++ b/cmd/mist/gui.go @@ -31,8 +31,8 @@ import ( "time" "github.com/ethereum/go-ethereum" - "github.com/ethereum/go-ethereum/chain" - "github.com/ethereum/go-ethereum/chain/types" + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/ethutil" "github.com/ethereum/go-ethereum/logger" @@ -413,9 +413,9 @@ func (gui *Gui) update() { events := gui.eth.EventMux().Subscribe( eth.ChainSyncEvent{}, eth.PeerListEvent{}, - chain.NewBlockEvent{}, - chain.TxPreEvent{}, - chain.TxPostEvent{}, + core.NewBlockEvent{}, + core.TxPreEvent{}, + core.TxPostEvent{}, ) // nameReg := gui.pipe.World().Config().Get("NameReg") @@ -430,13 +430,13 @@ func (gui *Gui) update() { return } switch ev := ev.(type) { - case chain.NewBlockEvent: + 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) } - case chain.TxPreEvent: + case core.TxPreEvent: tx := ev.Tx object := state.GetAccount(gui.address()) @@ -449,7 +449,7 @@ func (gui *Gui) update() { gui.setWalletValue(object.Balance(), unconfirmedFunds) gui.insertTransaction("pre", tx) - case chain.TxPostEvent: + case core.TxPostEvent: tx := ev.Tx object := state.GetAccount(gui.address()) diff --git a/cmd/mist/html_container.go b/cmd/mist/html_container.go index 4c6609a95..b3fc219fa 100644 --- a/cmd/mist/html_container.go +++ b/cmd/mist/html_container.go @@ -26,7 +26,8 @@ import ( "os" "path" "path/filepath" - "github.com/ethereum/go-ethereum/chain/types" + + "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/ethutil" "github.com/ethereum/go-ethereum/javascript" "github.com/ethereum/go-ethereum/state" diff --git a/cmd/mist/main.go b/cmd/mist/main.go index bc05d4f3d..8c46de6d9 100644 --- a/cmd/mist/main.go +++ b/cmd/mist/main.go @@ -31,7 +31,7 @@ import ( const ( ClientIdentifier = "Mist" - Version = "0.7.5" + Version = "0.7.7" ) var ethereum *eth.Ethereum diff --git a/cmd/mist/qml_container.go b/cmd/mist/qml_container.go index b5986c16e..a0a46f9b1 100644 --- a/cmd/mist/qml_container.go +++ b/cmd/mist/qml_container.go @@ -20,7 +20,8 @@ package main import ( "fmt" "runtime" - "github.com/ethereum/go-ethereum/chain/types" + + "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/ethutil" "github.com/ethereum/go-ethereum/state" "github.com/ethereum/go-ethereum/xeth" diff --git a/cmd/mist/ui_lib.go b/cmd/mist/ui_lib.go index 01352f192..2b5e56646 100644 --- a/cmd/mist/ui_lib.go +++ b/cmd/mist/ui_lib.go @@ -25,8 +25,8 @@ import ( "strings" "github.com/ethereum/go-ethereum" - "github.com/ethereum/go-ethereum/chain" - "github.com/ethereum/go-ethereum/chain/types" + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/ethutil" "github.com/ethereum/go-ethereum/javascript" @@ -128,7 +128,10 @@ func (self *UiLib) PastPeers() *ethutil.List { func (self *UiLib) ImportTx(rlpTx string) { tx := types.NewTransactionFromBytes(ethutil.Hex2Bytes(rlpTx)) - self.eth.TxPool().QueueTransaction(tx) + err := self.eth.TxPool().Add(tx) + if err != nil { + guilogger.Infoln("import tx failed ", err) + } } func (self *UiLib) EvalJavascriptFile(path string) { @@ -228,7 +231,7 @@ func (self *UiLib) NewFilter(object map[string]interface{}) (id int) { } func (self *UiLib) NewFilterString(typ string) (id int) { - filter := chain.NewFilter(self.eth) + filter := core.NewFilter(self.eth) filter.BlockCallback = func(block *types.Block) { if self.win != nil && self.win.Root() != nil { self.win.Root().Call("invokeFilterCallback", "{}", id) @@ -306,7 +309,7 @@ func mapToTxParams(object map[string]interface{}) map[string]string { return conv } -func (self *UiLib) Transact(params map[string]interface{}) (*xeth.JSReceipt, error) { +func (self *UiLib) Transact(params map[string]interface{}) (string, error) { object := mapToTxParams(params) return self.JSXEth.Transact( diff --git a/cmd/utils/cmd.go b/cmd/utils/cmd.go index 96590b20f..d9b26c701 100644 --- a/cmd/utils/cmd.go +++ b/cmd/utils/cmd.go @@ -317,7 +317,7 @@ func BlockDo(ethereum *eth.Ethereum, hash []byte) error { parent := ethereum.ChainManager().GetBlock(block.PrevHash) - _, err := ethereum.BlockManager().ApplyDiff(parent.State(), parent, block) + _, err := ethereum.BlockManager().TransitionState(parent.State(), parent, block) if err != nil { return err } diff --git a/cmd/utils/vm_env.go b/cmd/utils/vm_env.go index b2788efa1..eb52602c4 100644 --- a/cmd/utils/vm_env.go +++ b/cmd/utils/vm_env.go @@ -2,20 +2,25 @@ package utils import ( "math/big" - "github.com/ethereum/go-ethereum/chain/types" + + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/state" "github.com/ethereum/go-ethereum/vm" ) type VMEnv struct { - state *state.State + state *state.StateDB block *types.Block transactor []byte value *big.Int + + depth int + Gas *big.Int } -func NewEnv(state *state.State, block *types.Block, transactor []byte, value *big.Int) *VMEnv { +func NewEnv(state *state.StateDB, block *types.Block, transactor []byte, value *big.Int) *VMEnv { return &VMEnv{ state: state, block: block, @@ -32,9 +37,36 @@ 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.value } -func (self *VMEnv) State() *state.State { return self.state } +func (self *VMEnv) State() *state.StateDB { return self.state } func (self *VMEnv) GasLimit() *big.Int { return self.block.GasLimit } -func (self *VMEnv) AddLog(*state.Log) {} +func (self *VMEnv) Depth() int { return self.depth } +func (self *VMEnv) SetDepth(i int) { self.depth = i } +func (self *VMEnv) AddLog(log state.Log) { + self.state.AddLog(log) +} func (self *VMEnv) Transfer(from, to vm.Account, amount *big.Int) error { return vm.Transfer(from, to, amount) } + +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) +} + +func (self *VMEnv) Call(caller vm.ClosureRef, addr, data []byte, gas, price, value *big.Int) ([]byte, error) { + exe := self.vm(addr, data, gas, price, value) + ret, err := exe.Call(addr, caller) + self.Gas = exe.Gas + + return ret, err +} +func (self *VMEnv) CallCode(caller vm.ClosureRef, addr, data []byte, gas, price, value *big.Int) ([]byte, error) { + exe := self.vm(caller.Address(), data, gas, price, value) + return exe.Call(addr, caller) +} + +func (self *VMEnv) Create(caller vm.ClosureRef, addr, data []byte, gas, price, value *big.Int) ([]byte, error, vm.ClosureRef) { + exe := self.vm(addr, data, gas, price, value) + return exe.Create(caller) +} diff --git a/chain/.gitignore b/core/.gitignore index f725d58d1..f725d58d1 100644 --- a/chain/.gitignore +++ b/core/.gitignore diff --git a/chain/asm.go b/core/asm.go index 5a2e961ac..a8b3023f4 100644 --- a/chain/asm.go +++ b/core/asm.go @@ -1,4 +1,4 @@ -package chain +package core import ( "fmt" diff --git a/chain/block_manager.go b/core/block_manager.go index e652ad10e..c2ffc7ae0 100644 --- a/chain/block_manager.go +++ b/core/block_manager.go @@ -1,4 +1,4 @@ -package chain +package core import ( "bytes" @@ -9,7 +9,7 @@ import ( "sync" "time" - "github.com/ethereum/go-ethereum/chain/types" + "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/ethutil" "github.com/ethereum/go-ethereum/event" @@ -62,10 +62,10 @@ type BlockManager struct { // 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.State + transState *state.StateDB // Mining state. The mining state is used purely and solely by the mining // operation. - miningState *state.State + 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 @@ -96,19 +96,19 @@ func (self *BlockManager) Stop() { statelogger.Debugln("Stopping state manager") } -func (sm *BlockManager) CurrentState() *state.State { +func (sm *BlockManager) CurrentState() *state.StateDB { return sm.eth.ChainManager().CurrentBlock.State() } -func (sm *BlockManager) TransState() *state.State { +func (sm *BlockManager) TransState() *state.StateDB { return sm.transState } -func (sm *BlockManager) MiningState() *state.State { +func (sm *BlockManager) MiningState() *state.StateDB { return sm.miningState } -func (sm *BlockManager) NewMiningState() *state.State { +func (sm *BlockManager) NewMiningState() *state.StateDB { sm.miningState = sm.eth.ChainManager().CurrentBlock.State().Copy() return sm.miningState @@ -118,13 +118,27 @@ func (sm *BlockManager) ChainManager() *ChainManager { return sm.bc } -func (self *BlockManager) ProcessTransactions(coinbase *state.StateObject, state *state.State, block, parent *types.Block, txs types.Transactions) (types.Receipts, types.Transactions, types.Transactions, types.Transactions, error) { +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)) + + // Process the transactions on to current block + receipts, _, _, _, err = sm.ProcessTransactions(coinbase, statedb, block, parent, block.Transactions()) + if err != nil { + return nil, err + } + + 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) { var ( receipts types.Receipts handled, unhandled types.Transactions erroneous types.Transactions totalUsedGas = big.NewInt(0) err error + cumulativeSum = new(big.Int) ) done: @@ -138,7 +152,6 @@ done: st := NewStateTransition(cb, tx, state, block) err = st.TransitionState() if err != nil { - statelogger.Infoln(err) switch { case IsNonceErr(err): err = nil // ignore error @@ -155,10 +168,12 @@ done: } } + txGas.Sub(txGas, st.gas) + cumulativeSum.Add(cumulativeSum, new(big.Int).Mul(txGas, tx.GasPrice)) + // Update the state with pending changes - state.Update() + state.Update(txGas) - txGas.Sub(txGas, st.gas) cumulative := new(big.Int).Set(totalUsedGas.Add(totalUsedGas, txGas)) receipt := types.NewReceipt(state.Root(), cumulative) receipt.SetLogs(state.Logs()) @@ -175,6 +190,7 @@ done: } } + block.Reward = cumulativeSum block.GasUsed = totalUsedGas return receipts, handled, unhandled, erroneous, err @@ -186,7 +202,7 @@ func (sm *BlockManager) Process(block *types.Block) (td *big.Int, msgs state.Mes defer sm.mutex.Unlock() if sm.bc.HasBlock(block.Hash()) { - return nil, nil, nil + return nil, nil, &KnownBlockError{block.Number, block.Hash()} } if !sm.bc.HasBlock(block.PrevHash) { @@ -208,11 +224,12 @@ func (sm *BlockManager) ProcessWithParent(block, parent *types.Block) (td *big.I // before that. defer state.Reset() - if ethutil.Config.Diff && ethutil.Config.DiffType == "all" { - fmt.Printf("## %x %x ##\n", block.Hash(), block.Number) + // Block validation + if err = sm.ValidateBlock(block, parent); err != nil { + return } - receipts, err := sm.ApplyDiff(state, parent, block) + _, err = sm.TransitionState(state, parent, block) if err != nil { return } @@ -223,31 +240,28 @@ 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 - } - - // Block validation - if err = sm.ValidateBlock(block, parent); err != nil { - statelogger.Errorln("validating block:", err) - 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 { - statelogger.Errorln("accumulating reward", err) 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() + state.Update(ethutil.Big0) if !block.State().Cmp(state) { err = fmt.Errorf("invalid merkle root. received=%x got=%x", block.Root(), state.Root()) @@ -274,19 +288,6 @@ func (sm *BlockManager) ProcessWithParent(block, parent *types.Block) (td *big.I } } -func (sm *BlockManager) ApplyDiff(state *state.State, parent, block *types.Block) (receipts types.Receipts, err error) { - coinbase := state.GetOrNewStateObject(block.Coinbase) - coinbase.SetGasPool(block.CalcGasLimit(parent)) - - // Process the transactions on to current block - receipts, _, _, _, err = sm.ProcessTransactions(coinbase, state, block, parent, block.Transactions()) - if err != nil { - return nil, err - } - - return receipts, nil -} - func (sm *BlockManager) CalculateTD(block *types.Block) (*big.Int, bool) { uncleDiff := new(big.Int) for _, uncle := range block.Uncles { @@ -302,9 +303,6 @@ func (sm *BlockManager) CalculateTD(block *types.Block) (*big.Int, bool) { // is greater than the previous. if td.Cmp(sm.bc.TD) > 0 { return td, true - - // Set the new total difficulty back to the block chain - //sm.bc.SetTotalDifficulty(td) } return nil, false @@ -339,7 +337,7 @@ func (sm *BlockManager) ValidateBlock(block, parent *types.Block) error { return nil } -func (sm *BlockManager) AccumelateRewards(state *state.State, block, parent *types.Block) error { +func (sm *BlockManager) AccumelateRewards(statedb *state.StateDB, block, parent *types.Block) error { reward := new(big.Int).Set(BlockReward) knownUncles := ethutil.Set(parent.Uncles) @@ -368,17 +366,25 @@ func (sm *BlockManager) AccumelateRewards(state *state.State, block, parent *typ r := new(big.Int) r.Mul(BlockReward, big.NewInt(15)).Div(r, big.NewInt(16)) - uncleAccount := state.GetAccount(uncle.Coinbase) + uncleAccount := statedb.GetAccount(uncle.Coinbase) uncleAccount.AddAmount(r) reward.Add(reward, new(big.Int).Div(BlockReward, big.NewInt(32))) } // Get the account associated with the coinbase - account := state.GetAccount(block.Coinbase) + account := statedb.GetAccount(block.Coinbase) // Reward amount of ether to the coinbase address account.AddAmount(reward) + statedb.Manifest().AddMessage(&state.Message{ + To: block.Coinbase, From: block.Coinbase, + Input: nil, + Origin: nil, + Block: block.Hash(), Timestamp: block.Time, Coinbase: block.Coinbase, Number: block.Number, + Value: new(big.Int).Add(reward, block.Reward), + }) + return nil } @@ -396,8 +402,7 @@ func (sm *BlockManager) GetMessages(block *types.Block) (messages []*state.Messa defer state.Reset() - sm.ApplyDiff(state, parent, block) - + sm.TransitionState(state, parent, block) sm.AccumelateRewards(state, block, parent) return state.Manifest().Messages, nil diff --git a/chain/chain_manager.go b/core/chain_manager.go index 11e16fa7d..7acd171ec 100644 --- a/chain/chain_manager.go +++ b/core/chain_manager.go @@ -1,15 +1,13 @@ -package chain +package core import ( - "bytes" - "container/list" "fmt" "math/big" - "github.com/ethereum/go-ethereum/chain/types" + "github.com/ethereum/go-ethereum/core/types" "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") @@ -48,6 +46,7 @@ func CalcDifficulty(block, parent *types.Block) *big.Int { type ChainManager struct { //eth EthManager processor types.BlockProcessor + eventMux *event.TypeMux genesisBlock *types.Block // Last known total difficulty TD *big.Int @@ -56,14 +55,12 @@ type ChainManager struct { CurrentBlock *types.Block LastBlockHash []byte - - workingChain *BlockChain } -func NewChainManager() *ChainManager { +func NewChainManager(mux *event.TypeMux) *ChainManager { bc := &ChainManager{} bc.genesisBlock = types.NewBlockFromBytes(ethutil.Encode(Genesis)) - //bc.eth = ethereum + bc.eventMux = mux bc.setLastBlock() @@ -112,8 +109,6 @@ func (bc *ChainManager) NewBlock(coinbase []byte) *types.Block { nil, "") - block.MinGasPrice = big.NewInt(10000000000000) - parent := bc.CurrentBlock if parent != nil { block.Difficulty = CalcDifficulty(block, parent) @@ -188,15 +183,6 @@ func (self *ChainManager) GetChainHashesFromHash(hash []byte, max uint64) (chain func (self *ChainManager) GetBlock(hash []byte) *types.Block { data, _ := ethutil.Config.Db.Get(hash) if len(data) == 0 { - if self.workingChain != nil { - // Check the temp chain - for e := self.workingChain.Front(); e != nil; e = e.Next() { - if bytes.Compare(e.Value.(*link).Block.Hash(), hash) == 0 { - return e.Value.(*link).Block - } - } - } - return nil } @@ -266,103 +252,25 @@ func (bc *ChainManager) Stop() { } } -func (self *ChainManager) NewIterator(startHash []byte) *ChainIterator { - return &ChainIterator{self, self.GetBlock(startHash)} -} - -// This function assumes you've done your checking. No checking is done at this stage anymore -func (self *ChainManager) InsertChain(chain *BlockChain, call func(*types.Block, state.Messages)) { - for e := chain.Front(); e != nil; e = e.Next() { - link := e.Value.(*link) - - self.add(link.Block) - self.SetTotalDifficulty(link.Td) - - call(link.Block, link.Messages) - } - - b, e := chain.Front(), chain.Back() - if b != nil && e != nil { - front, back := b.Value.(*link).Block, e.Value.(*link).Block - chainlogger.Infof("Imported %d blocks. #%v (%x) / %#v (%x)", chain.Len(), front.Number, front.Hash()[0:4], back.Number, back.Hash()[0:4]) - } -} - -func (self *ChainManager) TestChain(chain *BlockChain) (td *big.Int, err error) { - self.workingChain = chain - defer func() { self.workingChain = nil }() - - for e := chain.Front(); e != nil; e = e.Next() { - var ( - l = e.Value.(*link) - block = l.Block - parent = self.GetBlock(block.PrevHash) - ) - - if parent == nil { - err = fmt.Errorf("incoming chain broken on hash %x\n", block.PrevHash[0:4]) - return - } - - var messages state.Messages - td, messages, err = self.processor.ProcessWithParent(block, parent) //self.eth.BlockManager().ProcessWithParent(block, parent) +func (self *ChainManager) InsertChain(chain types.Blocks) error { + for _, block := range chain { + td, messages, err := self.processor.Process(block) if err != nil { - chainlogger.Infoln(err) - chainlogger.Debugf("Block #%v failed (%x...)\n", block.Number, block.Hash()[0:4]) - chainlogger.Debugln(block) + if IsKnownBlockErr(err) { + continue + } - err = fmt.Errorf("incoming chain failed %v\n", err) - return + chainlogger.Infof("block #%v process failed (%x)\n", block.Number, block.Hash()[:4]) + chainlogger.Infoln(block) + chainlogger.Infoln(err) + return err } - l.Td = td - l.Messages = messages - } - if td.Cmp(self.TD) <= 0 { - err = &TDError{td, self.TD} - return + self.add(block) + self.SetTotalDifficulty(td) + self.eventMux.Post(NewBlockEvent{block}) + self.eventMux.Post(messages) } - self.workingChain = nil - - return -} - -type link struct { - Block *types.Block - Messages state.Messages - Td *big.Int -} - -type BlockChain struct { - *list.List -} - -func NewChain(blocks types.Blocks) *BlockChain { - chain := &BlockChain{list.New()} - - for _, block := range blocks { - chain.PushBack(&link{block, nil, nil}) - } - - return chain -} - -func (self *BlockChain) RlpEncode() []byte { - dat := make([]interface{}, 0) - for e := self.Front(); e != nil; e = e.Next() { - dat = append(dat, e.Value.(*link).Block.RlpData()) - } - - return ethutil.Encode(dat) -} - -type ChainIterator struct { - cm *ChainManager - block *types.Block // current block in the iterator -} - -func (self *ChainIterator) Prev() *types.Block { - self.block = self.cm.GetBlock(self.block.PrevHash) - return self.block + return nil } diff --git a/chain/chain_manager_test.go b/core/chain_manager_test.go index 0314914a9..ab43c511d 100644 --- a/chain/chain_manager_test.go +++ b/core/chain_manager_test.go @@ -1,4 +1,4 @@ -package chain +package core import ( "fmt" @@ -6,7 +6,7 @@ import ( "testing" "time" - "github.com/ethereum/go-ethereum/chain/types" + "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" diff --git a/chain/dagger.go b/core/dagger.go index f7e2229e9..8a042b34f 100644 --- a/chain/dagger.go +++ b/core/dagger.go @@ -1,4 +1,4 @@ -package chain +package core import ( "hash" @@ -6,7 +6,7 @@ import ( "math/rand" "time" - "github.com/ethereum/go-ethereum/chain/types" + "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" @@ -82,13 +82,17 @@ func (pow *EasyPow) Verify(hash []byte, diff *big.Int, nonce []byte) bool { d := append(hash, nonce...) sha.Write(d) - v := ethutil.BigPow(2, 256) - ret := new(big.Int).Div(v, diff) + verification := new(big.Int).Div(ethutil.BigPow(2, 256), diff) + res := ethutil.U256(ethutil.BigD(sha.Sum(nil))) - res := new(big.Int) - res.SetBytes(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(ret) == -1 + return res.Cmp(verification) <= 0 } func (pow *EasyPow) SetHash(hash *big.Int) { diff --git a/chain/dagger_test.go b/core/dagger_test.go index b40cd9742..e80064e6b 100644 --- a/chain/dagger_test.go +++ b/core/dagger_test.go @@ -1,4 +1,4 @@ -package chain +package core import ( "math/big" diff --git a/chain/error.go b/core/error.go index 540eda95a..11d8c1653 100644 --- a/chain/error.go +++ b/core/error.go @@ -1,4 +1,4 @@ -package chain +package core import ( "fmt" @@ -126,3 +126,16 @@ func IsTDError(e error) bool { _, ok := e.(*TDError) return ok } + +type KnownBlockError struct { + number *big.Int + hash []byte +} + +func (self *KnownBlockError) Error() string { + return fmt.Sprintf("block %v already known (%x)", self.number, self.hash[0:4]) +} +func IsKnownBlockErr(e error) bool { + _, ok := e.(*KnownBlockError) + return ok +} diff --git a/chain/events.go b/core/events.go index 06ab6be79..deeba3e98 100644 --- a/chain/events.go +++ b/core/events.go @@ -1,6 +1,6 @@ -package chain +package core -import "github.com/ethereum/go-ethereum/chain/types" +import "github.com/ethereum/go-ethereum/core/types" // TxPreEvent is posted when a transaction enters the transaction pool. type TxPreEvent struct{ Tx *types.Transaction } diff --git a/core/execution.go b/core/execution.go new file mode 100644 index 000000000..9f9d9a5d9 --- /dev/null +++ b/core/execution.go @@ -0,0 +1,80 @@ +package core + +import ( + "fmt" + "math/big" + + "github.com/ethereum/go-ethereum/ethutil" + "github.com/ethereum/go-ethereum/state" + "github.com/ethereum/go-ethereum/vm" +) + +type Execution struct { + vm vm.VirtualMachine + address, input []byte + Gas, price, value *big.Int + object *state.StateObject + 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 (self *Execution) Addr() []byte { + return self.address +} + +func (self *Execution) Call(codeAddr []byte, caller vm.ClosureRef) ([]byte, error) { + // Retrieve the executing code + code := self.vm.Env().State().GetCode(codeAddr) + + return self.exec(code, codeAddr, caller) +} + +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()) + snapshot := env.State().Copy() + defer func() { + if vm.IsDepthErr(err) || vm.IsOOGErr(err) { + env.State().Set(snapshot) + } + 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) + + 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(caddr).Uint64() + if p := vm.Precompiled[naddr]; p != nil { + if self.Gas.Cmp(p.Gas) >= 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 +} + +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) + + return +} diff --git a/chain/fees.go b/core/fees.go index 4df6d365d..bbce01b84 100644 --- a/chain/fees.go +++ b/core/fees.go @@ -1,4 +1,4 @@ -package chain +package core import ( "math/big" diff --git a/chain/filter.go b/core/filter.go index fd8adaa8f..fe3665bf3 100644 --- a/chain/filter.go +++ b/core/filter.go @@ -1,11 +1,11 @@ -package chain +package core import ( "bytes" "math" "math/big" - "github.com/ethereum/go-ethereum/chain/types" + "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/ethutil" "github.com/ethereum/go-ethereum/state" ) @@ -176,7 +176,7 @@ func (self *Filter) bloomFilter(block *types.Block) bool { var fromIncluded, toIncluded bool if len(self.from) > 0 { for _, from := range self.from { - if types.BloomLookup(block.LogsBloom, from) { + if types.BloomLookup(block.LogsBloom, from) || bytes.Equal(block.Coinbase, from) { fromIncluded = true break } @@ -187,7 +187,7 @@ func (self *Filter) bloomFilter(block *types.Block) bool { if len(self.to) > 0 { for _, to := range self.to { - if types.BloomLookup(block.LogsBloom, ethutil.U256(new(big.Int).Add(ethutil.Big1, ethutil.BigD(to))).Bytes()) { + if types.BloomLookup(block.LogsBloom, ethutil.U256(new(big.Int).Add(ethutil.Big1, ethutil.BigD(to))).Bytes()) || bytes.Equal(block.Coinbase, to) { toIncluded = true break } diff --git a/chain/filter_test.go b/core/filter_test.go index c63bb5a2d..d53b835b7 100644 --- a/chain/filter_test.go +++ b/core/filter_test.go @@ -1,4 +1,4 @@ -package chain +package core // import "testing" diff --git a/chain/genesis.go b/core/genesis.go index 14117a82c..707154759 100644 --- a/chain/genesis.go +++ b/core/genesis.go @@ -1,4 +1,4 @@ -package chain +package core import ( "math/big" @@ -37,8 +37,6 @@ var GenesisHeader = []interface{}{ big.NewInt(131072), // Number ethutil.Big0, - // Block minimum gas price - ethutil.Big0, // Block upper gas bound big.NewInt(1000000), // Block gas used diff --git a/chain/helper_test.go b/core/helper_test.go index 8c7532111..b340144fd 100644 --- a/chain/helper_test.go +++ b/core/helper_test.go @@ -1,10 +1,10 @@ -package chain +package core import ( "container/list" "fmt" - "github.com/ethereum/go-ethereum/chain/types" + "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/ethutil" diff --git a/chain/state_transition.go b/core/state_transition.go index 789698675..820ba66e6 100644 --- a/chain/state_transition.go +++ b/core/state_transition.go @@ -1,10 +1,10 @@ -package chain +package core import ( "fmt" "math/big" - "github.com/ethereum/go-ethereum/chain/types" + "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/state" "github.com/ethereum/go-ethereum/vm" ) @@ -31,13 +31,13 @@ type StateTransition struct { gas, gasPrice *big.Int value *big.Int data []byte - state *state.State + state *state.StateDB block *types.Block cb, rec, sen *state.StateObject } -func NewStateTransition(coinbase *state.StateObject, tx *types.Transaction, state *state.State, block *types.Block) *StateTransition { +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} } @@ -141,9 +141,8 @@ func (self *StateTransition) TransitionState() (err error) { } var ( - tx = self.tx - sender = self.Sender() - receiver *state.StateObject + tx = self.tx + sender = self.Sender() ) defer self.RefundGas() @@ -157,131 +156,38 @@ func (self *StateTransition) TransitionState() (err error) { } // Pay data gas - dataPrice := big.NewInt(int64(len(self.data))) - dataPrice.Mul(dataPrice, vm.GasData) - if err = self.UseGas(dataPrice); err != nil { - return + var dgas int64 + for _, byt := range self.data { + if byt != 0 { + dgas += vm.GasData.Int64() + } else { + dgas += 1 // This is 1/5. If GasData changes this fails + } } - - if sender.Balance().Cmp(self.value) < 0 { - return fmt.Errorf("Insufficient funds to transfer value. Req %v, has %v", self.value, sender.Balance) + if err = self.UseGas(big.NewInt(dgas)); err != nil { + return } - var snapshot *state.State - // If the receiver is nil it's a contract (\0*32). + var ret []byte + vmenv := NewEnv(self.state, self.tx, self.block) + var ref vm.ClosureRef if tx.CreatesContract() { - // Subtract the (irreversible) amount from the senders account - sender.SubAmount(self.value) + self.rec = MakeContract(tx, self.state) - snapshot = self.state.Copy() - - // Create a new state object for the contract - receiver = MakeContract(tx, self.state) - self.rec = receiver - if receiver == nil { - return fmt.Errorf("Unable to create contract") - } - - // Add the amount to receivers account which should conclude this transaction - receiver.AddAmount(self.value) + ret, err, ref = vmenv.Create(sender, self.rec.Address(), self.tx.Data, self.gas, self.gasPrice, self.value) + ref.SetCode(ret) } else { - receiver = self.Receiver() - - // Subtract the amount from the senders account - sender.SubAmount(self.value) - // Add the amount to receivers account which should conclude this transaction - receiver.AddAmount(self.value) - - snapshot = self.state.Copy() + ret, err = vmenv.Call(self.Sender(), self.Receiver().Address(), self.tx.Data, self.gas, self.gasPrice, self.value) } - - msg := self.state.Manifest().AddMessage(&state.Message{ - To: receiver.Address(), From: sender.Address(), - Input: self.tx.Data, - Origin: sender.Address(), - Block: self.block.Hash(), Timestamp: self.block.Time, Coinbase: self.block.Coinbase, Number: self.block.Number, - Value: self.value, - }) - - // Process the init code and create 'valid' contract - if types.IsContractAddr(self.receiver) { - // Evaluate the initialization script - // and use the return value as the - // script section for the state object. - self.data = nil - - code, evmerr := self.Eval(msg, receiver.Init(), receiver) - if evmerr != nil { - self.state.Set(snapshot) - - statelogger.Debugf("Error during init execution %v", evmerr) - } - - receiver.Code = code - msg.Output = code - } else { - if len(receiver.Code) > 0 { - ret, evmerr := self.Eval(msg, receiver.Code, receiver) - if evmerr != nil { - self.state.Set(snapshot) - - statelogger.Debugf("Error during code execution %v", evmerr) - } - - msg.Output = ret - } + if err != nil { + statelogger.Debugln(err) } - /* - * XXX The following _should_ replace the above transaction - * execution (also for regular calls. Will replace / test next - * phase - */ - /* - // Execute transaction - if tx.CreatesContract() { - self.rec = MakeContract(tx, self.state) - } - - address := self.Receiver().Address() - evm := vm.New(NewEnv(state, self.tx, self.block), vm.DebugVmTy) - exe := NewExecution(evm, address, self.tx.Data, self.gas, self.gas.Price, self.tx.Value) - ret, err := msg.Exec(address, self.Sender()) - if err != nil { - statelogger.Debugln(err) - } else { - if tx.CreatesContract() { - self.Receiver().Code = ret - } - msg.Output = ret - } - */ - - // Add default LOG. Default = big(sender.addr) + 1 - //addr := ethutil.BigD(receiver.Address()) - //self.state.AddLog(&state.Log{ethutil.U256(addr.Add(addr, ethutil.Big1)).Bytes(), [][]byte{sender.Address()}, nil}) - - return -} - -func (self *StateTransition) Eval(msg *state.Message, script []byte, context *state.StateObject) (ret []byte, err error) { - var ( - transactor = self.Sender() - state = self.state - env = NewEnv(state, self.tx, self.block) - callerClosure = vm.NewClosure(msg, transactor, context, script, self.gas, self.gasPrice) - ) - - evm := vm.New(env, vm.DebugVmTy) - // TMP this will change in the refactor - callerClosure.SetExecution(vm.NewExecution(evm, nil, nil, nil, nil, self.tx.Value)) - ret, _, err = callerClosure.Call(evm, self.tx.Data) - return } // Converts an transaction in to a state object -func MakeContract(tx *types.Transaction, state *state.State) *state.StateObject { +func MakeContract(tx *types.Transaction, state *state.StateDB) *state.StateObject { addr := tx.CreationAddress(state) contract := state.GetOrNewStateObject(addr) diff --git a/chain/transaction_pool.go b/core/transaction_pool.go index 119712ba8..abacb14f1 100644 --- a/chain/transaction_pool.go +++ b/core/transaction_pool.go @@ -1,4 +1,4 @@ -package chain +package core import ( "bytes" @@ -7,7 +7,7 @@ import ( "math/big" "sync" - "github.com/ethereum/go-ethereum/chain/types" + "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/logger" "github.com/ethereum/go-ethereum/state" "github.com/ethereum/go-ethereum/wire" @@ -103,11 +103,16 @@ func (pool *TxPool) ValidateTransaction(tx *types.Transaction) error { block := pool.Ethereum.ChainManager().CurrentBlock // Something has gone horribly wrong if this happens if block == nil { - return fmt.Errorf("[TXPL] No last block on the block chain") + return fmt.Errorf("No last block on the block chain") } if len(tx.Recipient) != 0 && len(tx.Recipient) != 20 { - return fmt.Errorf("[TXPL] Invalid recipient. len = %d", len(tx.Recipient)) + return fmt.Errorf("Invalid recipient. len = %d", len(tx.Recipient)) + } + + v, _, _ := tx.Curve() + if v > 28 || v < 27 { + return fmt.Errorf("tx.v != (28 || 27)") } if tx.GasPrice.Cmp(MinGasPrice) < 0 { @@ -115,19 +120,18 @@ func (pool *TxPool) ValidateTransaction(tx *types.Transaction) error { } // Get the sender - //sender := pool.Ethereum.BlockManager().procState.GetAccount(tx.Sender()) sender := pool.Ethereum.BlockManager().CurrentState().GetAccount(tx.Sender()) 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("[TXPL] Insufficient amount in sender's (%x) account", tx.Sender()) + return fmt.Errorf("Insufficient amount in sender's (%x) account", tx.Sender()) } if tx.IsContract() { if tx.GasPrice.Cmp(big.NewInt(minGasPrice)) < 0 { - return fmt.Errorf("[TXPL] Gasprice too low, %s given should be at least %d.", tx.GasPrice, minGasPrice) + return fmt.Errorf("Gasprice too low, %s given should be at least %d.", tx.GasPrice, minGasPrice) } } @@ -137,44 +141,32 @@ func (pool *TxPool) ValidateTransaction(tx *types.Transaction) error { return nil } -func (pool *TxPool) queueHandler() { -out: - for { - select { - case tx := <-pool.queueChan: - hash := tx.Hash() - foundTx := FindTx(pool.pool, func(tx *types.Transaction, e *list.Element) bool { - return bytes.Compare(tx.Hash(), hash) == 0 - }) - - if foundTx != nil { - break - } +func (self *TxPool) Add(tx *types.Transaction) error { + hash := tx.Hash() + foundTx := FindTx(self.pool, func(tx *types.Transaction, e *list.Element) bool { + return bytes.Compare(tx.Hash(), hash) == 0 + }) - // Validate the transaction - err := pool.ValidateTransaction(tx) - if err != nil { - txplogger.Debugln("Validating Tx failed", err) - } else { - // Call blocking version. - pool.addTransaction(tx) + if foundTx != nil { + return fmt.Errorf("Known transaction (%x)", hash[0:4]) + } - tmp := make([]byte, 4) - copy(tmp, tx.Recipient) + err := self.ValidateTransaction(tx) + if err != nil { + return err + } - txplogger.Debugf("(t) %x => %x (%v) %x\n", tx.Sender()[:4], tmp, tx.Value, tx.Hash()) + self.addTransaction(tx) - // Notify the subscribers - pool.Ethereum.EventMux().Post(TxPreEvent{tx}) - } - case <-pool.quit: - break out - } - } -} + tmp := make([]byte, 4) + copy(tmp, tx.Recipient) + + txplogger.Debugf("(t) %x => %x (%v) %x\n", tx.Sender()[:4], tmp, tx.Value, tx.Hash()) -func (pool *TxPool) QueueTransaction(tx *types.Transaction) { - pool.queueChan <- tx + // Notify the subscribers + self.Ethereum.EventMux().Post(TxPreEvent{tx}) + + return nil } func (pool *TxPool) CurrentTransactions() []*types.Transaction { @@ -194,7 +186,7 @@ func (pool *TxPool) CurrentTransactions() []*types.Transaction { return txList } -func (pool *TxPool) RemoveInvalid(state *state.State) { +func (pool *TxPool) RemoveInvalid(state *state.StateDB) { pool.mutex.Lock() defer pool.mutex.Unlock() @@ -234,12 +226,10 @@ func (pool *TxPool) Flush() []*types.Transaction { } func (pool *TxPool) Start() { - go pool.queueHandler() + //go pool.queueHandler() } func (pool *TxPool) Stop() { - close(pool.quit) - pool.Flush() txplogger.Infoln("Stopped") diff --git a/chain/types/block.go b/core/types/block.go index b311433e3..55ce1fb9b 100644 --- a/chain/types/block.go +++ b/core/types/block.go @@ -77,15 +77,13 @@ type Block struct { Coinbase []byte // Block Trie state //state *ethutil.Trie - state *state.State + state *state.StateDB // Difficulty for the current block Difficulty *big.Int // Creation time Time int64 // The block number Number *big.Int - // Minimum Gas Price - MinGasPrice *big.Int // Gas limit GasLimit *big.Int // Gas used @@ -99,6 +97,8 @@ type Block struct { receipts Receipts TxSha, ReceiptSha []byte LogsBloom []byte + + Reward *big.Int } func NewBlockFromBytes(raw []byte) *Block { @@ -124,16 +124,15 @@ func CreateBlock(root interface{}, extra string) *Block { block := &Block{ - PrevHash: prevHash, - Coinbase: base, - Difficulty: Difficulty, - Nonce: Nonce, - Time: time.Now().Unix(), - Extra: extra, - UncleSha: nil, - GasUsed: new(big.Int), - MinGasPrice: new(big.Int), - GasLimit: new(big.Int), + PrevHash: prevHash, + Coinbase: base, + Difficulty: Difficulty, + Nonce: Nonce, + Time: time.Now().Unix(), + Extra: extra, + UncleSha: nil, + GasUsed: new(big.Int), + GasLimit: new(big.Int), } block.SetUncles([]*Block{}) @@ -152,7 +151,7 @@ func (block *Block) HashNoNonce() []byte { return crypto.Sha3(ethutil.Encode(block.miningHeader())) } -func (block *Block) State() *state.State { +func (block *Block) State() *state.StateDB { return block.state } @@ -300,12 +299,11 @@ func (self *Block) setHeader(header *ethutil.Value) { self.LogsBloom = header.Get(6).Bytes() self.Difficulty = header.Get(7).BigInt() self.Number = header.Get(8).BigInt() - self.MinGasPrice = header.Get(9).BigInt() - self.GasLimit = header.Get(10).BigInt() - self.GasUsed = header.Get(11).BigInt() - self.Time = int64(header.Get(12).BigInt().Uint64()) - self.Extra = header.Get(13).Str() - self.Nonce = header.Get(14).Bytes() + self.GasLimit = header.Get(9).BigInt() + self.GasUsed = header.Get(10).BigInt() + self.Time = int64(header.Get(11).BigInt().Uint64()) + self.Extra = header.Get(12).Str() + self.Nonce = header.Get(13).Bytes() } func NewUncleBlockFromValue(header *ethutil.Value) *Block { @@ -351,8 +349,6 @@ func (block *Block) miningHeader() []interface{} { block.Difficulty, // The block number block.Number, - // Block minimum gas price - block.MinGasPrice, // Block upper gas bound block.GasLimit, // Block gas used @@ -380,7 +376,6 @@ func (block *Block) String() string { Bloom: %x Difficulty: %v Number: %v - MinGas: %v MaxLimit: %v GasUsed: %v Time: %v @@ -399,7 +394,6 @@ func (block *Block) String() string { block.LogsBloom, block.Difficulty, block.Number, - block.MinGasPrice, block.GasLimit, block.GasUsed, block.Time, diff --git a/chain/types/bloom9.go b/core/types/bloom9.go index 626711cca..d04656b0d 100644 --- a/chain/types/bloom9.go +++ b/core/types/bloom9.go @@ -11,17 +11,17 @@ import ( func CreateBloom(receipts Receipts) []byte { bin := new(big.Int) for _, receipt := range receipts { - bin.Or(bin, logsBloom(receipt.logs)) + bin.Or(bin, LogsBloom(receipt.logs)) } return ethutil.LeftPadBytes(bin.Bytes(), 64) } -func logsBloom(logs state.Logs) *big.Int { +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 := [][]byte{log.Address()} + for _, topic := range log.Topics() { data = append(data, topic) } diff --git a/chain/types/bloom9_test.go b/core/types/bloom9_test.go index 74e00cac6..74e00cac6 100644 --- a/chain/types/bloom9_test.go +++ b/core/types/bloom9_test.go diff --git a/chain/types/common.go b/core/types/common.go index ae0e7c3fa..ba88b77e1 100644 --- a/chain/types/common.go +++ b/core/types/common.go @@ -2,9 +2,10 @@ package types import ( "math/big" + "github.com/ethereum/go-ethereum/state" ) type BlockProcessor interface { - ProcessWithParent(*Block, *Block) (*big.Int, state.Messages, error) + Process(*Block) (*big.Int, state.Messages, error) } diff --git a/chain/types/derive_sha.go b/core/types/derive_sha.go index 1897ff198..1897ff198 100644 --- a/chain/types/derive_sha.go +++ b/core/types/derive_sha.go diff --git a/chain/types/receipt.go b/core/types/receipt.go index 25fa8fb07..25fa8fb07 100644 --- a/chain/types/receipt.go +++ b/core/types/receipt.go diff --git a/chain/types/transaction.go b/core/types/transaction.go index 626a7e5ce..63edef756 100644 --- a/chain/types/transaction.go +++ b/core/types/transaction.go @@ -77,14 +77,17 @@ func (tx *Transaction) IsContract() bool { return tx.CreatesContract() } -func (tx *Transaction) CreationAddress(state *state.State) []byte { +func (tx *Transaction) CreationAddress(state *state.StateDB) []byte { // Generate a new address - addr := crypto.Sha3(ethutil.NewValue([]interface{}{tx.Sender(), tx.Nonce}).Encode())[12:] - //for i := uint64(0); state.GetStateObject(addr) != nil; i++ { - // addr = crypto.Sha3(ethutil.NewValue([]interface{}{tx.Sender(), tx.Nonce + i}).Encode())[12:] - //} + 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) + s = ethutil.LeftPadBytes(tx.s, 32) - return addr + return } func (tx *Transaction) Signature(key []byte) []byte { @@ -98,12 +101,10 @@ func (tx *Transaction) Signature(key []byte) []byte { func (tx *Transaction) PublicKey() []byte { hash := tx.Hash() - // TODO - r := ethutil.LeftPadBytes(tx.r, 32) - s := ethutil.LeftPadBytes(tx.s, 32) + v, r, s := tx.Curve() sig := append(r, s...) - sig = append(sig, tx.v-27) + sig = append(sig, v-27) pubkey := crypto.Ecrecover(append(hash, sig...)) //pubkey, _ := secp256k1.RecoverPubkey(hash, sig) diff --git a/chain/types/transaction_test.go b/core/types/transaction_test.go index ab1254f4c..ab1254f4c 100644 --- a/chain/types/transaction_test.go +++ b/core/types/transaction_test.go diff --git a/core/vm_env.go b/core/vm_env.go new file mode 100644 index 000000000..9e1815188 --- /dev/null +++ b/core/vm_env.go @@ -0,0 +1,63 @@ +package core + +import ( + "math/big" + + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/state" + "github.com/ethereum/go-ethereum/vm" +) + +type VMEnv struct { + state *state.StateDB + block *types.Block + tx *types.Transaction + depth int +} + +func NewEnv(state *state.StateDB, tx *types.Transaction, block *types.Block) *VMEnv { + return &VMEnv{ + state: state, + block: block, + tx: tx, + } +} + +func (self *VMEnv) Origin() []byte { return self.tx.Sender() } +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) State() *state.StateDB { return self.state } +func (self *VMEnv) GasLimit() *big.Int { return self.block.GasLimit } +func (self *VMEnv) Depth() int { return self.depth } +func (self *VMEnv) SetDepth(i int) { self.depth = i } +func (self *VMEnv) AddLog(log state.Log) { + self.state.AddLog(log) +} +func (self *VMEnv) Transfer(from, to vm.Account, amount *big.Int) error { + return vm.Transfer(from, to, amount) +} + +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) +} + +func (self *VMEnv) Call(me vm.ClosureRef, addr, data []byte, gas, price, value *big.Int) ([]byte, error) { + exe := self.vm(addr, data, gas, price, value) + return exe.Call(addr, me) +} +func (self *VMEnv) CallCode(me vm.ClosureRef, addr, data []byte, gas, price, value *big.Int) ([]byte, error) { + exe := self.vm(me.Address(), data, gas, price, value) + return exe.Call(addr, me) +} + +func (self *VMEnv) Create(me vm.ClosureRef, addr, data []byte, gas, price, value *big.Int) ([]byte, error, vm.ClosureRef) { + exe := self.vm(addr, data, gas, price, value) + return exe.Create(me) +} diff --git a/ethereum.go b/ethereum.go index 879a14bd5..94e46b556 100644 --- a/ethereum.go +++ b/ethereum.go @@ -14,7 +14,7 @@ import ( "sync/atomic" "time" - "github.com/ethereum/go-ethereum/chain" + "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/ethutil" "github.com/ethereum/go-ethereum/event" @@ -50,12 +50,12 @@ type Ethereum struct { // DB interface db ethutil.Database // State manager for processing new blocks and managing the over all states - blockManager *chain.BlockManager + blockManager *core.BlockManager // The transaction pool. Transaction can be pushed on this pool // for later including in the blocks - txPool *chain.TxPool + txPool *core.TxPool // The canonical chain - blockChain *chain.ChainManager + blockChain *core.ChainManager // The block pool blockPool *BlockPool // Eventer @@ -94,7 +94,7 @@ type Ethereum struct { filterMu sync.RWMutex filterId int - filters map[int]*chain.Filter + filters map[int]*core.Filter } func New(db ethutil.Database, clientIdentity wire.ClientIdentity, keyManager *crypto.KeyManager, caps Caps, usePnp bool) (*Ethereum, error) { @@ -124,13 +124,13 @@ func New(db ethutil.Database, clientIdentity wire.ClientIdentity, keyManager *cr keyManager: keyManager, clientIdentity: clientIdentity, isUpToDate: true, - filters: make(map[int]*chain.Filter), + filters: make(map[int]*core.Filter), } ethereum.blockPool = NewBlockPool(ethereum) - ethereum.txPool = chain.NewTxPool(ethereum) - ethereum.blockChain = chain.NewChainManager() - ethereum.blockManager = chain.NewBlockManager(ethereum) + ethereum.txPool = core.NewTxPool(ethereum) + ethereum.blockChain = core.NewChainManager(ethereum.EventMux()) + ethereum.blockManager = core.NewBlockManager(ethereum) ethereum.blockChain.SetProcessor(ethereum.blockManager) // Start the tx pool @@ -147,15 +147,15 @@ func (s *Ethereum) ClientIdentity() wire.ClientIdentity { return s.clientIdentity } -func (s *Ethereum) ChainManager() *chain.ChainManager { +func (s *Ethereum) ChainManager() *core.ChainManager { return s.blockChain } -func (s *Ethereum) BlockManager() *chain.BlockManager { +func (s *Ethereum) BlockManager() *core.BlockManager { return s.blockManager } -func (s *Ethereum) TxPool() *chain.TxPool { +func (s *Ethereum) TxPool() *core.TxPool { return s.txPool } func (s *Ethereum) BlockPool() *BlockPool { @@ -591,7 +591,7 @@ out: // InstallFilter adds filter for blockchain events. // The filter's callbacks will run for matching blocks and messages. // The filter should not be modified after it has been installed. -func (self *Ethereum) InstallFilter(filter *chain.Filter) (id int) { +func (self *Ethereum) InstallFilter(filter *core.Filter) (id int) { self.filterMu.Lock() id = self.filterId self.filters[id] = filter @@ -608,7 +608,7 @@ func (self *Ethereum) UninstallFilter(id int) { // GetFilter retrieves a filter installed using InstallFilter. // The filter may not be modified. -func (self *Ethereum) GetFilter(id int) *chain.Filter { +func (self *Ethereum) GetFilter(id int) *core.Filter { self.filterMu.RLock() defer self.filterMu.RUnlock() return self.filters[id] @@ -616,10 +616,10 @@ func (self *Ethereum) GetFilter(id int) *chain.Filter { func (self *Ethereum) filterLoop() { // Subscribe to events - events := self.eventMux.Subscribe(chain.NewBlockEvent{}, state.Messages(nil)) + events := self.eventMux.Subscribe(core.NewBlockEvent{}, state.Messages(nil)) for event := range events.Chan() { switch event := event.(type) { - case chain.NewBlockEvent: + case core.NewBlockEvent: self.filterMu.RLock() for _, filter := range self.filters { if filter.BlockCallback != nil { diff --git a/ethutil/big.go b/ethutil/big.go index 07d1386e1..2ff1c72d8 100644 --- a/ethutil/big.go +++ b/ethutil/big.go @@ -62,6 +62,16 @@ func S256(x *big.Int) *big.Int { } } +func FirstBitSet(v *big.Int) int { + for i := 0; i < v.BitLen(); i++ { + if v.Bit(i) > 0 { + return i + } + } + + return v.BitLen() +} + // Big to bytes // // Returns the bytes of a big integer with the size specified by **base** diff --git a/install.sh b/install.sh index f6232af83..30a3802e4 100755 --- a/install.sh +++ b/install.sh @@ -1,15 +1,20 @@ #!/bin/sh if [ "$1" == "" ]; then - echo "Usage $0 executable branch ethereum develop" - echo "executable ethereum or mist" - echo "branch develop or master" + echo "Usage $0 executable branch" + echo "executable ethereum | mist" + echo "branch develop | master" exit fi exe=$1 +path=$exe branch=$2 +if [ "$branch" == "develop" ]; then + path="cmd/$exe" +fi + # Test if go is installed command -v go >/dev/null 2>&1 || { echo >&2 "Unable to find 'go'. This script requires go."; exit 1; } @@ -19,20 +24,23 @@ if [ "$GOPATH" == "" ]; then exit fi -echo "go get -u -d github.com/ethereum/go-ethereum/$exe" -go get -v -u -d github.com/ethereum/go-ethereum/$exe -if [ $? != 0 ]; then - echo "go get failed" - exit -fi - -echo "eth-go" +echo "changing branch to $branch" cd $GOPATH/src/github.com/ethereum/go-ethereum git checkout $branch -echo "go-ethereum" -cd $GOPATH/src/github.com/ethereum/go-ethereum/$exe -git checkout $branch +# installing package dependencies doesn't work for develop +# branch as go get always pulls from master head +# so build will continue to fail, but this installs locally +# for people who git clone since go install will manage deps + +#echo "go get -u -d github.com/ethereum/go-ethereum/$path" +#go get -v -u -d github.com/ethereum/go-ethereum/$path +#if [ $? != 0 ]; then +# echo "go get failed" +# exit +#fi + +cd $GOPATH/src/github.com/ethereum/go-ethereum/$path if [ "$exe" == "mist" ]; then echo "Building Mist GUI. Assuming Qt is installed. If this step" @@ -42,9 +50,4 @@ else fi go install -if [ $? == 0 ]; then - echo "go install failed" - exit -fi - echo "done. Please run $exe :-)" diff --git a/javascript/javascript_runtime.go b/javascript/javascript_runtime.go index e8b785f50..a5b929a34 100644 --- a/javascript/javascript_runtime.go +++ b/javascript/javascript_runtime.go @@ -8,9 +8,9 @@ import ( "path/filepath" "github.com/ethereum/go-ethereum" - "github.com/ethereum/go-ethereum/chain" - "github.com/ethereum/go-ethereum/chain/types" "github.com/ethereum/go-ethereum/cmd/utils" + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/ethutil" "github.com/ethereum/go-ethereum/event" "github.com/ethereum/go-ethereum/logger" @@ -63,7 +63,7 @@ func NewJSRE(ethereum *eth.Ethereum) *JSRE { // Subscribe to events mux := ethereum.EventMux() - re.events = mux.Subscribe(chain.NewBlockEvent{}) + re.events = mux.Subscribe(core.NewBlockEvent{}) // We have to make sure that, whoever calls this, calls "Stop" go re.mainLoop() @@ -128,7 +128,7 @@ func (self *JSRE) initStdFuncs() { */ func (self *JSRE) dump(call otto.FunctionCall) otto.Value { - var state *state.State + var state *state.StateDB if len(call.ArgumentList) > 0 { var block *types.Block diff --git a/miner/miner.go b/miner/miner.go index 795385424..589144c0c 100644 --- a/miner/miner.go +++ b/miner/miner.go @@ -29,10 +29,9 @@ import ( "github.com/ethereum/go-ethereum" "github.com/ethereum/go-ethereum/ethutil" - "github.com/ethereum/go-ethereum/state" - "github.com/ethereum/go-ethereum/chain" - "github.com/ethereum/go-ethereum/chain/types" + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/event" "github.com/ethereum/go-ethereum/logger" "github.com/ethereum/go-ethereum/wire" @@ -60,7 +59,7 @@ type Miner struct { localTxs map[int]*LocalTx localTxId int - pow chain.PoW + pow core.PoW quitCh chan struct{} powQuitCh chan struct{} @@ -75,7 +74,7 @@ func New(coinbase []byte, eth *eth.Ethereum) *Miner { return &Miner{ eth: eth, powQuitCh: make(chan struct{}), - pow: &chain.EasyPow{}, + pow: &core.EasyPow{}, mining: false, localTxs: make(map[int]*LocalTx), MinAcceptedGasPrice: big.NewInt(10000000000000), @@ -83,7 +82,7 @@ func New(coinbase []byte, eth *eth.Ethereum) *Miner { } } -func (self *Miner) GetPow() chain.PoW { +func (self *Miner) GetPow() core.PoW { return self.pow } @@ -117,7 +116,7 @@ func (self *Miner) Start() { self.powQuitCh = make(chan struct{}) mux := self.eth.EventMux() - self.events = mux.Subscribe(chain.NewBlockEvent{}, chain.TxPreEvent{}, &LocalTx{}) + self.events = mux.Subscribe(core.NewBlockEvent{}, core.TxPreEvent{}, &LocalTx{}) go self.update() go self.mine() @@ -148,7 +147,7 @@ out: select { case event := <-self.events.Chan(): switch event := event.(type) { - case chain.NewBlockEvent: + case core.NewBlockEvent: block := event.Block if self.eth.ChainManager().HasBlock(block.Hash()) { self.reset() @@ -157,7 +156,7 @@ out: } else if true { // do uncle stuff } - case chain.TxPreEvent, *LocalTx: + case core.TxPreEvent, *LocalTx: self.reset() go self.mine() } @@ -179,7 +178,6 @@ func (self *Miner) mine() { chainMan = self.eth.ChainManager() block = chainMan.NewBlock(self.Coinbase) ) - block.MinGasPrice = self.MinAcceptedGasPrice // Apply uncles if len(self.uncles) > 0 { @@ -206,7 +204,7 @@ func (self *Miner) mine() { // Accumulate the rewards included for this block blockManager.AccumelateRewards(block.State(), block, parent) - block.State().Update() + block.State().Update(ethutil.Big0) minerlogger.Infof("Mining on block. Includes %v transactions", len(transactions)) @@ -214,15 +212,10 @@ func (self *Miner) mine() { nonce := self.pow.Search(block, self.powQuitCh) if nonce != nil { block.Nonce = nonce - lchain := chain.NewChain(types.Blocks{block}) - _, err := chainMan.TestChain(lchain) + err := chainMan.InsertChain(types.Blocks{block}) if err != nil { minerlogger.Infoln(err) } else { - chainMan.InsertChain(lchain, func(block *types.Block, _ state.Messages) { - self.eth.EventMux().Post(chain.NewBlockEvent{block}) - }) - self.eth.Broadcast(wire.MsgBlockTy, []interface{}{block.Value().Val}) minerlogger.Infof("🔨 Mined block %x\n", block.Hash()) @@ -12,7 +12,7 @@ import ( "sync/atomic" "time" - "github.com/ethereum/go-ethereum/chain/types" + "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/ethutil" "github.com/ethereum/go-ethereum/logger" "github.com/ethereum/go-ethereum/wire" @@ -24,7 +24,7 @@ const ( // The size of the output buffer for writing messages outputBufferSize = 50 // Current protocol version - ProtocolVersion = 43 + ProtocolVersion = 47 // Current P2P version P2PVersion = 2 // Ethereum network version @@ -430,7 +430,12 @@ func (p *Peer) HandleInbound() { // processing when a new block is found for i := 0; i < msg.Data.Len(); i++ { tx := types.NewTransactionFromValue(msg.Data.Get(i)) - p.ethereum.TxPool().QueueTransaction(tx) + err := p.ethereum.TxPool().Add(tx) + if err != nil { + peerlogger.Infoln(err) + } else { + peerlogger.Infof("tx OK (%x)\n", tx.Hash()[0:4]) + } } case wire.MsgGetPeersTy: // Peer asked for list of connected peers diff --git a/state/dump.go b/state/dump.go index 186c6dd73..c1f5ecf3a 100644 --- a/state/dump.go +++ b/state/dump.go @@ -20,7 +20,7 @@ type World struct { Accounts map[string]Account `json:"accounts"` } -func (self *State) Dump() []byte { +func (self *StateDB) Dump() []byte { world := World{ Root: ethutil.Bytes2Hex(self.Trie.GetRoot()), Accounts: make(map[string]Account), diff --git a/state/log.go b/state/log.go index 49da30535..46360f4aa 100644 --- a/state/log.go +++ b/state/log.go @@ -2,40 +2,63 @@ package state import ( "fmt" - "strings" "github.com/ethereum/go-ethereum/ethutil" ) -type Log struct { - Address []byte - Topics [][]byte - Data []byte +type Log interface { + ethutil.RlpEncodable + + Address() []byte + Topics() [][]byte + Data() []byte +} + +type StateLog struct { + address []byte + topics [][]byte + data []byte +} + +func NewLog(address []byte, topics [][]byte, data []byte) *StateLog { + return &StateLog{address, topics, data} +} + +func (self *StateLog) Address() []byte { + return self.address +} + +func (self *StateLog) Topics() [][]byte { + return self.topics } -func NewLogFromValue(decoder *ethutil.Value) *Log { - log := &Log{ - Address: decoder.Get(0).Bytes(), - Data: decoder.Get(2).Bytes(), +func (self *StateLog) Data() []byte { + return self.data +} + +func NewLogFromValue(decoder *ethutil.Value) *StateLog { + log := &StateLog{ + address: decoder.Get(0).Bytes(), + data: decoder.Get(2).Bytes(), } it := decoder.Get(1).NewIterator() for it.Next() { - log.Topics = append(log.Topics, it.Value().Bytes()) + log.topics = append(log.topics, it.Value().Bytes()) } return log } -func (self *Log) RlpData() interface{} { - return []interface{}{self.Address, ethutil.ByteSliceToInterface(self.Topics), self.Data} +func (self *StateLog) RlpData() interface{} { + return []interface{}{self.address, ethutil.ByteSliceToInterface(self.topics), self.data} } -func (self *Log) String() string { - return fmt.Sprintf(`log: %x %x %x`, self.Address, self.Topics, self.Data) +func (self *StateLog) String() string { + return fmt.Sprintf(`log: %x %x %x`, self.address, self.topics, self.data) } -type Logs []*Log +type Logs []Log func (self Logs) RlpData() interface{} { data := make([]interface{}, len(self)) @@ -46,10 +69,10 @@ func (self Logs) RlpData() interface{} { return data } -func (self Logs) String() string { - var logs []string +func (self Logs) String() (ret string) { for _, log := range self { - logs = append(logs, log.String()) + ret += fmt.Sprintf("%v", log) } - return "[ " + strings.Join(logs, ", ") + " ]" + + return "[" + ret + "]" } diff --git a/state/state.go b/state/state.go index 3abf1545b..ca3f2af9c 100644 --- a/state/state.go +++ b/state/state.go @@ -10,12 +10,12 @@ import ( var statelogger = logger.NewLogger("STATE") -// States within the ethereum protocol are used to store anything -// within the merkle trie. States take care of caching and storing +// StateDBs within the ethereum protocol are used to store anything +// within the merkle trie. StateDBs take care of caching and storing // nested states. It's the general query interface to retrieve: // * Contracts // * Accounts -type State struct { +type StateDB struct { // The trie for this structure Trie *trie.Trie @@ -23,30 +23,30 @@ type State struct { manifest *Manifest - refund map[string]*big.Int + refund map[string][]refund logs Logs } // Create a new state from a given trie -func New(trie *trie.Trie) *State { - return &State{Trie: trie, stateObjects: make(map[string]*StateObject), manifest: NewManifest(), refund: make(map[string]*big.Int)} +func New(trie *trie.Trie) *StateDB { + return &StateDB{Trie: trie, stateObjects: make(map[string]*StateObject), manifest: NewManifest(), refund: make(map[string][]refund)} } -func (self *State) EmptyLogs() { +func (self *StateDB) EmptyLogs() { self.logs = nil } -func (self *State) AddLog(log *Log) { +func (self *StateDB) AddLog(log Log) { self.logs = append(self.logs, log) } -func (self *State) Logs() Logs { +func (self *StateDB) Logs() Logs { return self.logs } // Retrieve the balance from the given address or 0 if object not found -func (self *State) GetBalance(addr []byte) *big.Int { +func (self *StateDB) GetBalance(addr []byte) *big.Int { stateObject := self.GetStateObject(addr) if stateObject != nil { return stateObject.balance @@ -55,24 +55,22 @@ func (self *State) GetBalance(addr []byte) *big.Int { return ethutil.Big0 } -func (self *State) Refund(addr []byte, gas, price *big.Int) { - amount := new(big.Int).Mul(gas, price) - - if self.refund[string(addr)] == nil { - self.refund[string(addr)] = new(big.Int) - } +type refund struct { + gas, price *big.Int +} - self.refund[string(addr)].Add(self.refund[string(addr)], amount) +func (self *StateDB) Refund(addr []byte, gas, price *big.Int) { + self.refund[string(addr)] = append(self.refund[string(addr)], refund{gas, price}) } -func (self *State) AddBalance(addr []byte, amount *big.Int) { +func (self *StateDB) AddBalance(addr []byte, amount *big.Int) { stateObject := self.GetStateObject(addr) if stateObject != nil { stateObject.AddBalance(amount) } } -func (self *State) GetNonce(addr []byte) uint64 { +func (self *StateDB) GetNonce(addr []byte) uint64 { stateObject := self.GetStateObject(addr) if stateObject != nil { return stateObject.Nonce @@ -81,14 +79,14 @@ func (self *State) GetNonce(addr []byte) uint64 { return 0 } -func (self *State) SetNonce(addr []byte, nonce uint64) { +func (self *StateDB) SetNonce(addr []byte, nonce uint64) { stateObject := self.GetStateObject(addr) if stateObject != nil { stateObject.Nonce = nonce } } -func (self *State) GetCode(addr []byte) []byte { +func (self *StateDB) GetCode(addr []byte) []byte { stateObject := self.GetStateObject(addr) if stateObject != nil { return stateObject.Code @@ -97,7 +95,7 @@ func (self *State) GetCode(addr []byte) []byte { return nil } -func (self *State) GetState(a, b []byte) []byte { +func (self *StateDB) GetState(a, b []byte) []byte { stateObject := self.GetStateObject(a) if stateObject != nil { return stateObject.GetState(b).Bytes() @@ -106,14 +104,14 @@ func (self *State) GetState(a, b []byte) []byte { return nil } -func (self *State) SetState(addr, key []byte, value interface{}) { +func (self *StateDB) SetState(addr, key []byte, value interface{}) { stateObject := self.GetStateObject(addr) if stateObject != nil { stateObject.SetState(key, ethutil.NewValue(value)) } } -func (self *State) Delete(addr []byte) bool { +func (self *StateDB) Delete(addr []byte) bool { stateObject := self.GetStateObject(addr) if stateObject != nil { stateObject.MarkForDeletion() @@ -129,7 +127,7 @@ func (self *State) Delete(addr []byte) bool { // // Update the given state object and apply it to state trie -func (self *State) UpdateStateObject(stateObject *StateObject) { +func (self *StateDB) UpdateStateObject(stateObject *StateObject) { addr := stateObject.Address() if len(stateObject.CodeHash()) > 0 { @@ -140,14 +138,14 @@ func (self *State) UpdateStateObject(stateObject *StateObject) { } // Delete the given state object and delete it from the state trie -func (self *State) DeleteStateObject(stateObject *StateObject) { +func (self *StateDB) DeleteStateObject(stateObject *StateObject) { self.Trie.Delete(string(stateObject.Address())) delete(self.stateObjects, string(stateObject.Address())) } // Retrieve a state object given my the address. Nil if not found -func (self *State) GetStateObject(addr []byte) *StateObject { +func (self *StateDB) GetStateObject(addr []byte) *StateObject { addr = ethutil.Address(addr) stateObject := self.stateObjects[string(addr)] @@ -166,12 +164,12 @@ func (self *State) GetStateObject(addr []byte) *StateObject { return stateObject } -func (self *State) SetStateObject(object *StateObject) { +func (self *StateDB) SetStateObject(object *StateObject) { self.stateObjects[string(object.address)] = object } // Retrieve a state object or create a new state object if nil -func (self *State) GetOrNewStateObject(addr []byte) *StateObject { +func (self *StateDB) GetOrNewStateObject(addr []byte) *StateObject { stateObject := self.GetStateObject(addr) if stateObject == nil { stateObject = self.NewStateObject(addr) @@ -181,7 +179,7 @@ func (self *State) GetOrNewStateObject(addr []byte) *StateObject { } // Create a state object whether it exist in the trie or not -func (self *State) NewStateObject(addr []byte) *StateObject { +func (self *StateDB) NewStateObject(addr []byte) *StateObject { addr = ethutil.Address(addr) statelogger.Debugf("(+) %x\n", addr) @@ -193,7 +191,7 @@ func (self *State) NewStateObject(addr []byte) *StateObject { } // Deprecated -func (self *State) GetAccount(addr []byte) *StateObject { +func (self *StateDB) GetAccount(addr []byte) *StateObject { return self.GetOrNewStateObject(addr) } @@ -201,11 +199,11 @@ func (self *State) GetAccount(addr []byte) *StateObject { // Setting, copying of the state methods // -func (s *State) Cmp(other *State) bool { +func (s *StateDB) Cmp(other *StateDB) bool { return s.Trie.Cmp(other.Trie) } -func (self *State) Copy() *State { +func (self *StateDB) Copy() *StateDB { if self.Trie != nil { state := New(self.Trie.Copy()) for k, stateObject := range self.stateObjects { @@ -226,7 +224,7 @@ func (self *State) Copy() *State { return nil } -func (self *State) Set(state *State) { +func (self *StateDB) Set(state *StateDB) { if state == nil { panic("Tried setting 'state' to nil through 'Set'") } @@ -237,12 +235,12 @@ func (self *State) Set(state *State) { self.logs = state.logs } -func (s *State) Root() []byte { +func (s *StateDB) Root() []byte { return s.Trie.GetRoot() } // Resets the trie and all siblings -func (s *State) Reset() { +func (s *StateDB) Reset() { s.Trie.Undo() // Reset all nested states @@ -251,7 +249,6 @@ func (s *State) Reset() { continue } - //stateObject.state.Reset() stateObject.Reset() } @@ -259,7 +256,7 @@ func (s *State) Reset() { } // Syncs the trie and all siblings -func (s *State) Sync() { +func (s *StateDB) Sync() { // Sync all nested states for _, stateObject := range s.stateObjects { if stateObject.State == nil { @@ -274,18 +271,25 @@ func (s *State) Sync() { s.Empty() } -func (self *State) Empty() { +func (self *StateDB) Empty() { self.stateObjects = make(map[string]*StateObject) - self.refund = make(map[string]*big.Int) + self.refund = make(map[string][]refund) } -func (self *State) Update() { +func (self *StateDB) Update(gasUsed *big.Int) { var deleted bool // Refund any gas that's left - for addr, amount := range self.refund { - self.GetStateObject([]byte(addr)).AddBalance(amount) + // 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) for _, stateObject := range self.stateObjects { if stateObject.remove { @@ -309,12 +313,12 @@ func (self *State) Update() { } } -func (self *State) Manifest() *Manifest { +func (self *StateDB) Manifest() *Manifest { return self.manifest } // Debug stuff -func (self *State) CreateOutputForDiff() { +func (self *StateDB) CreateOutputForDiff() { for _, stateObject := range self.stateObjects { stateObject.CreateOutputForDiff() } diff --git a/state/state_object.go b/state/state_object.go index f02d1b5ab..b8af4e702 100644 --- a/state/state_object.go +++ b/state/state_object.go @@ -35,7 +35,7 @@ type StateObject struct { codeHash []byte Nonce uint64 // Contract related attributes - State *State + State *StateDB Code Code InitCode Code @@ -212,7 +212,7 @@ func (c *StateObject) ConvertGas(gas, price *big.Int) error { func (self *StateObject) SetGasPool(gasLimit *big.Int) { self.gasPool = new(big.Int).Set(gasLimit) - statelogger.DebugDetailf("%x: fuel (+ %v)", self.Address(), self.gasPool) + statelogger.Debugf("%x: gas (+ %v)", self.Address(), self.gasPool) } func (self *StateObject) BuyGas(gas, price *big.Int) error { @@ -276,15 +276,14 @@ func (c *StateObject) Init() Code { return c.InitCode } -// To satisfy ClosureRef -func (self *StateObject) Object() *StateObject { - return self -} - func (self *StateObject) Root() []byte { return self.State.Trie.GetRoot() } +func (self *StateObject) SetCode(code []byte) { + self.Code = code +} + // // Encoding // diff --git a/tests/files/BasicTests/genesishashestest.json b/tests/files/BasicTests/genesishashestest.json index 0ff3c3ed7..ba733e36e 100644 --- a/tests/files/BasicTests/genesishashestest.json +++ b/tests/files/BasicTests/genesishashestest.json @@ -1,5 +1,5 @@ { - "genesis_rlp_hex": "f9012ff9012aa00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0c67c70f5d7d3049337d1dcc0503a249881120019a8e7322774dbfe57b463718ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b84000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008080830f4240808080a004994f67dc55b09e814ab7ffc8df3686b4afb2bb53e60eae97ef043fe03fb829c0c0", + "genesis_rlp_hex": "f9012ef90129a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a0c67c70f5d7d3049337d1dcc0503a249881120019a8e7322774dbfe57b463718ca056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b840000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000080830f4240808080a004994f67dc55b09e814ab7ffc8df3686b4afb2bb53e60eae97ef043fe03fb829c0c0", "genesis_state_root": "c67c70f5d7d3049337d1dcc0503a249881120019a8e7322774dbfe57b463718c", "initial_alloc": { "51ba59315b3a95761d0863b05ccc7a7f54703d99": "1606938044258990275541962092341162602522202993782792835301376", @@ -11,5 +11,5 @@ "e6716f9544a56c530d868e4bfbacb172315bdead": "1606938044258990275541962092341162602522202993782792835301376", "1a26338f0d905e295fccb71fa9ea849ffa12aaf4": "1606938044258990275541962092341162602522202993782792835301376" }, - "genesis_hash": "955f36d073ccb026b78ab3424c15cf966a7563aa270413859f78702b9e8e22cb" + "genesis_hash": "779b1b620b03c0fb24963e183d5e88e3dbe4484e3f6e2aa05942e3be7b48e179" } diff --git a/tests/files/StateTests/stExample.json b/tests/files/StateTests/stExample.json index 875cf379c..bab82e395 100644 --- a/tests/files/StateTests/stExample.json +++ b/tests/files/StateTests/stExample.json @@ -8,6 +8,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, + "logs" : { + }, "out" : "0x", "post" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { diff --git a/tests/files/StateTests/stPreCompiledContracts.json b/tests/files/StateTests/stPreCompiledContracts.json index df4b07ca7..22d66529a 100644 --- a/tests/files/StateTests/stPreCompiledContracts.json +++ b/tests/files/StateTests/stPreCompiledContracts.json @@ -8,6 +8,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, + "logs" : { + }, "out" : "0x", "post" : { "0000000000000000000000000000000000000001" : { @@ -19,22 +21,23 @@ }, "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "20100000", - "code" : "0x7f18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c600052601c6020527f73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f6040527feeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c45496060526020608060806000600060016103e8f15060a060020a608051066000556000543214600155", + "code" : "0x7f18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c600052601c6020527f73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f6040527feeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c45496060526020608060806000600060016103e8f160025560a060020a608051066000556000543214600155", "nonce" : "0", "storage" : { "0x" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", - "0x01" : "0x01" + "0x01" : "0x01", + "0x02" : "0x01" } }, "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { - "balance" : "1676", + "balance" : "1977", "code" : "0x", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "999999999999898324", + "balance" : "999999999999898023", "code" : "0x", "nonce" : "1", "storage" : { @@ -44,7 +47,7 @@ "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "20000000", - "code" : "0x7f18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c600052601c6020527f73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f6040527feeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c45496060526020608060806000600060016103e8f15060a060020a608051066000556000543214600155", + "code" : "0x7f18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c600052601c6020527f73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f6040527feeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c45496060526020608060806000600060016103e8f160025560a060020a608051066000556000543214600155", "nonce" : "0", "storage" : { } @@ -76,6 +79,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, + "logs" : { + }, "out" : "0x", "post" : { "0000000000000000000000000000000000000001" : { @@ -87,20 +92,21 @@ }, "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "20100000", - "code" : "0x6020608060806000600060016103e8f15060a060020a60805106600055", + "code" : "0x6020608060806000600060016103e8f160025560a060020a60805106600055", "nonce" : "0", "storage" : { + "0x02" : "0x01" } }, "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { - "balance" : "1140", + "balance" : "1441", "code" : "0x", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "999999999999898860", + "balance" : "999999999999898559", "code" : "0x", "nonce" : "1", "storage" : { @@ -110,7 +116,7 @@ "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "20000000", - "code" : "0x6020608060806000600060016103e8f15060a060020a60805106600055", + "code" : "0x6020608060806000600060016103e8f160025560a060020a60805106600055", "nonce" : "0", "storage" : { } @@ -142,6 +148,76 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, + "logs" : { + }, + "out" : "0x", + "post" : { + "0000000000000000000000000000000000000001" : { + "balance" : "0", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "20100000", + "code" : "0x7f18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c600052601c6020527f73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f6040527feeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c45496060526020608060806000600060016101f3f160025560a060020a608051066000556000543214600155", + "nonce" : "0", + "storage" : { + } + }, + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "1376", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "999999999999898624", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + } + }, + "pre" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "20000000", + "code" : "0x7f18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c600052601c6020527f73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f6040527feeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c45496060526020608060806000600060016101f3f160025560a060020a608051066000556000543214600155", + "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" + } + }, + "CallEcrecover0_completeReturnValue" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "10000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : { + }, "out" : "0x", "post" : { "0000000000000000000000000000000000000001" : { @@ -153,20 +229,22 @@ }, "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "20100000", - "code" : "0x7f18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c600052601c6020527f73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f6040527feeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c45496060526020608060806000600060016101f3f15060a060020a608051066000556000543214600155", + "code" : "0x7f18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c600052601c6020527f73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f6040527feeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c45496060526020608060806000600060016103e8f1600255608051600055", "nonce" : "0", "storage" : { + "0x" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "0x02" : "0x01" } }, "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { - "balance" : "776", + "balance" : "1648", "code" : "0x", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "999999999999899224", + "balance" : "999999999999898352", "code" : "0x", "nonce" : "1", "storage" : { @@ -176,7 +254,7 @@ "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "20000000", - "code" : "0x7f18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c600052601c6020527f73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f6040527feeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c45496060526020608060806000600060016101f3f15060a060020a608051066000556000543214600155", + "code" : "0x7f18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c600052601c6020527f73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f6040527feeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c45496060526020608060806000600060016103e8f1600255608051600055", "nonce" : "0", "storage" : { } @@ -208,6 +286,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, + "logs" : { + }, "out" : "0x", "post" : { "0000000000000000000000000000000000000001" : { @@ -219,22 +299,23 @@ }, "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "20100000", - "code" : "0x7f18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c600052601c6020527f73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f6040527feeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c45496060526020608060806000600060016101f4f15060a060020a608051066000556000543214600155", + "code" : "0x7f18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c600052601c6020527f73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f6040527feeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c45496060526020608060806000600060016101f4f160025560a060020a608051066000556000543214600155", "nonce" : "0", "storage" : { "0x" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", - "0x01" : "0x01" + "0x01" : "0x01", + "0x02" : "0x01" } }, "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { - "balance" : "1676", + "balance" : "1977", "code" : "0x", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "999999999999898324", + "balance" : "999999999999898023", "code" : "0x", "nonce" : "1", "storage" : { @@ -244,7 +325,7 @@ "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "20000000", - "code" : "0x7f18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c600052601c6020527f73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f6040527feeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c45496060526020608060806000600060016101f4f15060a060020a608051066000556000543214600155", + "code" : "0x7f18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c600052601c6020527f73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f6040527feeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c45496060526020608060806000600060016101f4f160025560a060020a608051066000556000543214600155", "nonce" : "0", "storage" : { } @@ -276,6 +357,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, + "logs" : { + }, "out" : "0x", "post" : { "0000000000000000000000000000000000000001" : { @@ -287,20 +370,21 @@ }, "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "20100000", - "code" : "0x7f18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c60005260016020527f73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f6040527feeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c45496060526020608060806000600060016103e8f15060a060020a608051066000556000543214600155", + "code" : "0x7f18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c60005260016020527f73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f6040527feeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c45496060526020608060806000600060016103e8f160025560a060020a608051066000556000543214600155", "nonce" : "0", "storage" : { + "0x02" : "0x01" } }, "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { - "balance" : "1276", + "balance" : "1577", "code" : "0x", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "999999999999898724", + "balance" : "999999999999898423", "code" : "0x", "nonce" : "1", "storage" : { @@ -310,7 +394,7 @@ "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "20000000", - "code" : "0x7f18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c60005260016020527f73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f6040527feeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c45496060526020608060806000600060016103e8f15060a060020a608051066000556000543214600155", + "code" : "0x7f18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c60005260016020527f73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f6040527feeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c45496060526020608060806000600060016103e8f160025560a060020a608051066000556000543214600155", "nonce" : "0", "storage" : { } @@ -342,6 +426,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, + "logs" : { + }, "out" : "0x", "post" : { "0000000000000000000000000000000000000001" : { @@ -353,21 +439,21 @@ }, "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "20100000", - "code" : "0x7f18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c600052601c6020527f73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f6021527feeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c45496041526020606160616000600060016103e8f15060a060020a606151066000556000543214600155", + "code" : "0x7f18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c600052601c6020527f73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f6021527feeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c45496041526020606160616000600060016103e8f160025560a060020a606151066000556000543214600155", "nonce" : "0", "storage" : { - "0x" : "0xe5266519f86dbf1bac6021c6ba9711b43ac8561c" + "0x02" : "0x01" } }, "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { - "balance" : "1476", + "balance" : "1577", "code" : "0x", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "999999999999898524", + "balance" : "999999999999898423", "code" : "0x", "nonce" : "1", "storage" : { @@ -377,7 +463,7 @@ "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "20000000", - "code" : "0x7f18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c600052601c6020527f73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f6021527feeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c45496041526020606160616000600060016103e8f15060a060020a606151066000556000543214600155", + "code" : "0x7f18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c600052601c6020527f73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f6021527feeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c45496041526020606160616000600060016103e8f160025560a060020a606151066000556000543214600155", "nonce" : "0", "storage" : { } @@ -409,6 +495,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, + "logs" : { + }, "out" : "0x", "post" : { "0000000000000000000000000000000000000001" : { @@ -420,21 +508,22 @@ }, "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "20100000", - "code" : "0x7f2f380a2dea7e778d81affc2443403b8fe4644db442ae4862ff5bb3732829cdb9600052601b6020527f6b65ccb0558806e9b097f27a396d08f964e37b8b7af6ceeb516ff86739fbea0a6040527f37cbc8d883e129a4b1ef9d5f1df53c4f21a3ef147cf2a50a4ede0eb06ce092d46060526020608060806000600060016103e8f15060a060020a608051066000556000543214600155", + "code" : "0x7f2f380a2dea7e778d81affc2443403b8fe4644db442ae4862ff5bb3732829cdb9600052601b6020527f6b65ccb0558806e9b097f27a396d08f964e37b8b7af6ceeb516ff86739fbea0a6040527f37cbc8d883e129a4b1ef9d5f1df53c4f21a3ef147cf2a50a4ede0eb06ce092d46060526020608060806000600060016103e8f160025560a060020a608051066000556000543214600155", "nonce" : "0", "storage" : { - "0x" : "0xe4319f4b631c6d0fcfc84045dbcb676865fe5e13" + "0x" : "0xe4319f4b631c6d0fcfc84045dbcb676865fe5e13", + "0x02" : "0x01" } }, "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { - "balance" : "1476", + "balance" : "1777", "code" : "0x", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "999999999999898524", + "balance" : "999999999999898223", "code" : "0x", "nonce" : "1", "storage" : { @@ -444,7 +533,7 @@ "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "20000000", - "code" : "0x7f2f380a2dea7e778d81affc2443403b8fe4644db442ae4862ff5bb3732829cdb9600052601b6020527f6b65ccb0558806e9b097f27a396d08f964e37b8b7af6ceeb516ff86739fbea0a6040527f37cbc8d883e129a4b1ef9d5f1df53c4f21a3ef147cf2a50a4ede0eb06ce092d46060526020608060806000600060016103e8f15060a060020a608051066000556000543214600155", + "code" : "0x7f2f380a2dea7e778d81affc2443403b8fe4644db442ae4862ff5bb3732829cdb9600052601b6020527f6b65ccb0558806e9b097f27a396d08f964e37b8b7af6ceeb516ff86739fbea0a6040527f37cbc8d883e129a4b1ef9d5f1df53c4f21a3ef147cf2a50a4ede0eb06ce092d46060526020608060806000600060016103e8f160025560a060020a608051066000556000543214600155", "nonce" : "0", "storage" : { } @@ -476,6 +565,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, + "logs" : { + }, "out" : "0x", "post" : { "0000000000000000000000000000000000000003" : { @@ -543,6 +634,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, + "logs" : { + }, "out" : "0x", "post" : { "0000000000000000000000000000000000000003" : { @@ -554,21 +647,22 @@ }, "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "20100000", - "code" : "0x6020600060006000600060036101f4f150600051600055", + "code" : "0x6020600060006000600060036101f4f1600255600051600055", "nonce" : "0", "storage" : { - "0x" : "0x9c1185a5c5e9fc54612808977ee8f548b2258d31" + "0x" : "0x9c1185a5c5e9fc54612808977ee8f548b2258d31", + "0x02" : "0x01" } }, "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { - "balance" : "932", + "balance" : "1232", "code" : "0x", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "999999999999899068", + "balance" : "999999999999898768", "code" : "0x", "nonce" : "1", "storage" : { @@ -578,7 +672,7 @@ "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "20000000", - "code" : "0x6020600060006000600060036101f4f150600051600055", + "code" : "0x6020600060006000600060036101f4f1600255600051600055", "nonce" : "0", "storage" : { } @@ -610,6 +704,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, + "logs" : { + }, "out" : "0x", "post" : { "0000000000000000000000000000000000000003" : { @@ -621,21 +717,22 @@ }, "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "20100000", - "code" : "0x64f34578907f6005526020600060256000600060036101f4f150600051600055", + "code" : "0x64f34578907f6005526020600060256000600060036101f4f1600255600051600055", "nonce" : "0", "storage" : { - "0x" : "0xdbc100f916bfbc53535573d98cf0cbb3a5b36124" + "0x" : "0xdbc100f916bfbc53535573d98cf0cbb3a5b36124", + "0x02" : "0x01" } }, "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { - "balance" : "936", + "balance" : "1236", "code" : "0x", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "999999999999899064", + "balance" : "999999999999898764", "code" : "0x", "nonce" : "1", "storage" : { @@ -645,7 +742,7 @@ "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "20000000", - "code" : "0x64f34578907f6005526020600060256000600060036101f4f150600051600055", + "code" : "0x64f34578907f6005526020600060256000600060036101f4f1600255600051600055", "nonce" : "0", "storage" : { } @@ -677,6 +774,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, + "logs" : { + }, "out" : "0x", "post" : { "0000000000000000000000000000000000000003" : { @@ -688,21 +787,22 @@ }, "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "20100000", - "code" : "0x64f34578907f6000526020600060256000600060036101f4f150600051600055", + "code" : "0x64f34578907f6000526020600060256000600060036101f4f1600255600051600055", "nonce" : "0", "storage" : { - "0x" : "0x316750573f9be26bc17727b47cacedbd0ab3e6ca" + "0x" : "0x316750573f9be26bc17727b47cacedbd0ab3e6ca", + "0x02" : "0x01" } }, "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { - "balance" : "936", + "balance" : "1236", "code" : "0x", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "999999999999899064", + "balance" : "999999999999898764", "code" : "0x", "nonce" : "1", "storage" : { @@ -712,7 +812,7 @@ "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "20000000", - "code" : "0x64f34578907f6000526020600060256000600060036101f4f150600051600055", + "code" : "0x64f34578907f6000526020600060256000600060036101f4f1600255600051600055", "nonce" : "0", "storage" : { } @@ -744,6 +844,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, + "logs" : { + }, "out" : "0x", "post" : { "0000000000000000000000000000000000000003" : { @@ -755,21 +857,22 @@ }, "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "20100000", - "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000526020600060206000600060036064f150600051600055", + "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000526020600060206000600060036064f1600255600051600055", "nonce" : "0", "storage" : { - "0x" : "0x1cf4e77f5966e13e109703cd8a0df7ceda7f3dc3" + "0x" : "0x1cf4e77f5966e13e109703cd8a0df7ceda7f3dc3", + "0x02" : "0x01" } }, "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { - "balance" : "935", + "balance" : "1235", "code" : "0x", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "999999999999899065", + "balance" : "999999999999898765", "code" : "0x", "nonce" : "1", "storage" : { @@ -779,7 +882,7 @@ "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "20000000", - "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000526020600060206000600060036064f150600051600055", + "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000526020600060206000600060036064f1600255600051600055", "nonce" : "0", "storage" : { } @@ -811,6 +914,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, + "logs" : { + }, "out" : "0x", "post" : { "0000000000000000000000000000000000000003" : { @@ -822,21 +927,21 @@ }, "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "20100000", - "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000526020600060206000600060036063f150600051600055", + "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000526020600060206000600060036063f1600255600051600055", "nonce" : "0", "storage" : { "0x" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } }, "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { - "balance" : "835", + "balance" : "1034", "code" : "0x", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "999999999999899165", + "balance" : "999999999999898966", "code" : "0x", "nonce" : "1", "storage" : { @@ -846,7 +951,7 @@ "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "20000000", - "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000526020600060206000600060036063f150600051600055", + "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000526020600060206000600060036063f1600255600051600055", "nonce" : "0", "storage" : { } @@ -878,6 +983,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, + "logs" : { + }, "out" : "0x", "post" : { "0000000000000000000000000000000000000003" : { @@ -889,21 +996,22 @@ }, "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "20100000", - "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60005260206000620f42406000600060036101f4f150600051600055", + "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60005260206000620f42406000600060036101f4f1600255600051600055", "nonce" : "0", "storage" : { - "0x" : "0x953450193f7389363135b31dc0f371f22f3947db" + "0x" : "0x953450193f7389363135b31dc0f371f22f3947db", + "0x02" : "0x01" } }, "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { - "balance" : "32184", + "balance" : "32484", "code" : "0x", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "999999999999867816", + "balance" : "999999999999867516", "code" : "0x", "nonce" : "1", "storage" : { @@ -913,7 +1021,7 @@ "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "20000000", - "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60005260206000620f42406000600060036101f4f150600051600055", + "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60005260206000620f42406000600060036101f4f1600255600051600055", "nonce" : "0", "storage" : { } @@ -945,6 +1053,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, + "logs" : { + }, "out" : "0x", "post" : { "0000000000000000000000000000000000000002" : { @@ -1012,6 +1122,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, + "logs" : { + }, "out" : "0x", "post" : { "0000000000000000000000000000000000000002" : { @@ -1023,21 +1135,92 @@ }, "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "20100000", - "code" : "0x6020600060006000600060026101f4f150600051600055", + "code" : "0x6020600060006000600060026101f4f1600255600051600055", + "nonce" : "0", + "storage" : { + "0x" : "0xe3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "0x02" : "0x01" + } + }, + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "1232", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "999999999999898768", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + } + }, + "pre" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "20000000", + "code" : "0x6020600060006000600060026101f4f1600255600051600055", + "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" + } + }, + "CallSha256_1_nonzeroValue" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "10000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : { + }, + "out" : "0x", + "post" : { + "0000000000000000000000000000000000000002" : { + "balance" : "19", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "20099981", + "code" : "0x6020600060006000601360026101f4f1600255600051600055", "nonce" : "0", "storage" : { - "0x" : "0xe3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + "0x" : "0xe3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "0x02" : "0x01" } }, "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { - "balance" : "932", + "balance" : "1232", "code" : "0x", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "999999999999899068", + "balance" : "999999999999898768", "code" : "0x", "nonce" : "1", "storage" : { @@ -1047,7 +1230,7 @@ "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "20000000", - "code" : "0x6020600060006000600060026101f4f150600051600055", + "code" : "0x6020600060006000601360026101f4f1600255600051600055", "nonce" : "0", "storage" : { } @@ -1079,6 +1262,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, + "logs" : { + }, "out" : "0x", "post" : { "0000000000000000000000000000000000000002" : { @@ -1090,21 +1275,22 @@ }, "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "20100000", - "code" : "0x64f34578907f6005526020600060256000600060026101f4f150600051600055", + "code" : "0x64f34578907f6005526020600060256000600060026101f4f1600255600051600055", "nonce" : "0", "storage" : { - "0x" : "0xcb39b3bde22925b2f931111130c774761d8895e0e08437c9b396c1e97d10f34d" + "0x" : "0xcb39b3bde22925b2f931111130c774761d8895e0e08437c9b396c1e97d10f34d", + "0x02" : "0x01" } }, "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { - "balance" : "936", + "balance" : "1236", "code" : "0x", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "999999999999899064", + "balance" : "999999999999898764", "code" : "0x", "nonce" : "1", "storage" : { @@ -1114,7 +1300,7 @@ "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "20000000", - "code" : "0x64f34578907f6005526020600060256000600060026101f4f150600051600055", + "code" : "0x64f34578907f6005526020600060256000600060026101f4f1600255600051600055", "nonce" : "0", "storage" : { } @@ -1146,6 +1332,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, + "logs" : { + }, "out" : "0x", "post" : { "0000000000000000000000000000000000000002" : { @@ -1157,21 +1345,22 @@ }, "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "20100000", - "code" : "0x64f34578907f6000526020600060256000600060026101f4f150600051600055", + "code" : "0x64f34578907f6000526020600060256000600060026101f4f1600255600051600055", "nonce" : "0", "storage" : { - "0x" : "0x7392925565d67be8e9620aacbcfaecd8cb6ec58d709d25da9eccf1d08a41ce35" + "0x" : "0x7392925565d67be8e9620aacbcfaecd8cb6ec58d709d25da9eccf1d08a41ce35", + "0x02" : "0x01" } }, "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { - "balance" : "936", + "balance" : "1236", "code" : "0x", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "999999999999899064", + "balance" : "999999999999898764", "code" : "0x", "nonce" : "1", "storage" : { @@ -1181,7 +1370,7 @@ "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "20000000", - "code" : "0x64f34578907f6000526020600060256000600060026101f4f150600051600055", + "code" : "0x64f34578907f6000526020600060256000600060026101f4f1600255600051600055", "nonce" : "0", "storage" : { } @@ -1213,6 +1402,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, + "logs" : { + }, "out" : "0x", "post" : { "0000000000000000000000000000000000000002" : { @@ -1224,21 +1415,22 @@ }, "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "20100000", - "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000526020600060206000600060026064f150600051600055", + "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000526020600060206000600060026064f1600255600051600055", "nonce" : "0", "storage" : { - "0x" : "0xaf9613760f72635fbdb44a5a0a63c39f12af30f950a6ee5c971be188e89c4051" + "0x" : "0xaf9613760f72635fbdb44a5a0a63c39f12af30f950a6ee5c971be188e89c4051", + "0x02" : "0x01" } }, "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { - "balance" : "935", + "balance" : "1235", "code" : "0x", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "999999999999899065", + "balance" : "999999999999898765", "code" : "0x", "nonce" : "1", "storage" : { @@ -1248,7 +1440,7 @@ "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "20000000", - "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000526020600060206000600060026064f150600051600055", + "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000526020600060206000600060026064f1600255600051600055", "nonce" : "0", "storage" : { } @@ -1280,6 +1472,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, + "logs" : { + }, "out" : "0x", "post" : { "0000000000000000000000000000000000000002" : { @@ -1291,21 +1485,21 @@ }, "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "20100000", - "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000526020600060206000600060026063f150600051600055", + "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000526020600060206000600060026063f1600255600051600055", "nonce" : "0", "storage" : { "0x" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } }, "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { - "balance" : "835", + "balance" : "1034", "code" : "0x", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "999999999999899165", + "balance" : "999999999999898966", "code" : "0x", "nonce" : "1", "storage" : { @@ -1315,7 +1509,7 @@ "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "20000000", - "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000526020600060206000600060026063f150600051600055", + "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000526020600060206000600060026063f1600255600051600055", "nonce" : "0", "storage" : { } @@ -1347,6 +1541,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, + "logs" : { + }, "out" : "0x", "post" : { "0000000000000000000000000000000000000002" : { @@ -1358,21 +1554,22 @@ }, "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "20100000", - "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60005260206000620f42406000600060026101f4f150600051600055", + "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60005260206000620f42406000600060026101f4f1600255600051600055", "nonce" : "0", "storage" : { - "0x" : "0x739d5000bbe364e92a2fe28d62c17a6dfd4f32105420c30b97ec0180300a2dae" + "0x" : "0x739d5000bbe364e92a2fe28d62c17a6dfd4f32105420c30b97ec0180300a2dae", + "0x02" : "0x01" } }, "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { - "balance" : "32184", + "balance" : "32484", "code" : "0x", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "999999999999867816", + "balance" : "999999999999867516", "code" : "0x", "nonce" : "1", "storage" : { @@ -1382,7 +1579,7 @@ "pre" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { "balance" : "20000000", - "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60005260206000620f42406000600060026101f4f150600051600055", + "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60005260206000620f42406000600060026101f4f1600255600051600055", "nonce" : "0", "storage" : { } diff --git a/tests/files/StateTests/stRecursiveCreate.json b/tests/files/StateTests/stRecursiveCreate.json new file mode 100644 index 000000000..a9daf2abd --- /dev/null +++ b/tests/files/StateTests/stRecursiveCreate.json @@ -0,0 +1,6194 @@ +{ + "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" + } + } +} diff --git a/tests/files/StateTests/stSpecialTest.json b/tests/files/StateTests/stSpecialTest.json new file mode 100644 index 000000000..5009c701a --- /dev/null +++ b/tests/files/StateTests/stSpecialTest.json @@ -0,0 +1,77 @@ +{ + "makeMoney" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : 1, + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "logs" : { + }, + "out" : "0x", + "post" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000000010", + "code" : "0x7b601080600c6000396000f200600035541560095700602035600035556000526000600060006000601773aaaaaaaaace5edbc8e2a8697c15331677e6ebf0b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffecf1", + "nonce" : "0", + "storage" : { + } + }, + "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { + "balance" : "850", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "140", + "code" : "0x", + "nonce" : "1", + "storage" : { + } + }, + "aaaaaaaaace5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "1000000000000000000", + "code" : "0x600160015532600255", + "nonce" : "0", + "storage" : { + } + } + }, + "pre" : { + "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { + "balance" : "1000000000000000000", + "code" : "0x7b601080600c6000396000f200600035541560095700602035600035556000526000600060006000601773aaaaaaaaace5edbc8e2a8697c15331677e6ebf0b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffecf1", + "nonce" : "0", + "storage" : { + } + }, + "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "1000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + }, + "aaaaaaaaace5edbc8e2a8697c15331677e6ebf0b" : { + "balance" : "1000000000000000000", + "code" : "0x600160015532600255", + "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 a4aff1c0f..8c0e8dde4 100644 --- a/tests/files/StateTests/stSystemOperationsTest.json +++ b/tests/files/StateTests/stSystemOperationsTest.json @@ -8,6 +8,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, + "logs" : { + }, "out" : "0x", "post" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { @@ -83,6 +85,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, + "logs" : { + }, "out" : "0x", "post" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { @@ -158,6 +162,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, + "logs" : { + }, "out" : "0x", "post" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { @@ -233,6 +239,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, + "logs" : { + }, "out" : "0x", "post" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { @@ -308,6 +316,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, + "logs" : { + }, "out" : "0x", "post" : { "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { @@ -375,6 +385,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, + "logs" : { + }, "out" : "0x", "post" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { @@ -449,6 +461,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, + "logs" : { + }, "out" : "0x", "post" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { @@ -524,6 +538,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, + "logs" : { + }, "out" : "0x", "post" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { @@ -585,6 +601,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, + "logs" : { + }, "out" : "0x", "post" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { @@ -592,19 +610,19 @@ "code" : "0x600160005401600055600060006000600060003060e05a03f1600155", "nonce" : "0", "storage" : { - "0x" : "0x0400", + "0x" : "0x03ff", "0x01" : "0x01" } }, "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { - "balance" : "260976", + "balance" : "261078", "code" : "0x", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "999999999999639024", + "balance" : "999999999999638922", "code" : "0x", "nonce" : "1", "storage" : { @@ -646,6 +664,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, + "logs" : { + }, "out" : "0x", "post" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { @@ -707,6 +727,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, + "logs" : { + }, "out" : "0x", "post" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { @@ -782,6 +804,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, + "logs" : { + }, "out" : "0x", "post" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { @@ -857,6 +881,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, + "logs" : { + }, "out" : "0x", "post" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { @@ -931,6 +957,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, + "logs" : { + }, "out" : "0x", "post" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { @@ -1004,6 +1032,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, + "logs" : { + }, "out" : "0x", "post" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { @@ -1077,6 +1107,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, + "logs" : { + }, "out" : "0x", "post" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { @@ -1150,6 +1182,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, + "logs" : { + }, "out" : "0x", "post" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { @@ -1223,6 +1257,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, + "logs" : { + }, "out" : "0x", "post" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { @@ -1298,6 +1334,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, + "logs" : { + }, "out" : "0x", "post" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { @@ -1371,6 +1409,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, + "logs" : { + }, "out" : "0x", "post" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { @@ -1431,6 +1471,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, + "logs" : { + }, "out" : "0x", "post" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { @@ -1506,6 +1548,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, + "logs" : { + }, "out" : "0x", "post" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { @@ -1581,6 +1625,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, + "logs" : { + }, "out" : "0x", "post" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { @@ -1655,6 +1701,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, + "logs" : { + }, "out" : "0x", "post" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { @@ -1666,14 +1714,14 @@ } }, "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { - "balance" : "916", + "balance" : "917", "code" : "0x", "nonce" : "0", "storage" : { } }, "a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { - "balance" : "999999999999899084", + "balance" : "999999999999899083", "code" : "0x", "nonce" : "1", "storage" : { @@ -1722,6 +1770,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, + "logs" : { + }, "out" : "0x", "post" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { @@ -1781,6 +1831,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, + "logs" : { + }, "out" : "0x", "post" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { @@ -1840,6 +1892,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, + "logs" : { + }, "out" : "0x", "post" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { @@ -1892,6 +1946,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, + "logs" : { + }, "out" : "0x37", "post" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { @@ -1951,6 +2007,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, + "logs" : { + }, "out" : "0x3700", "post" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { @@ -2010,6 +2068,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, + "logs" : { + }, "out" : "0x370000000000000000000000000000000000000000000000000000000000000000", "post" : { "095e7baea6a6c7c4c2dfeb977efac326af552d87" : { @@ -2069,6 +2129,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, + "logs" : { + }, "out" : "0x", "post" : { "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { @@ -2121,6 +2183,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, + "logs" : { + }, "out" : "0x", "post" : { "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { @@ -2173,6 +2237,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, + "logs" : { + }, "out" : "0x", "post" : { "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { @@ -2232,6 +2298,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, + "logs" : { + }, "out" : "0x", "post" : { "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { @@ -2284,6 +2352,8 @@ "currentTimestamp" : 1, "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" }, + "logs" : { + }, "out" : "0x", "post" : { "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : { diff --git a/tests/files/TrieTests/trietest.json b/tests/files/TrieTests/trietest.json index 317429649..8d8c35f3b 100644 --- a/tests/files/TrieTests/trietest.json +++ b/tests/files/TrieTests/trietest.json @@ -1,84 +1,84 @@ { "singleItem": { - "in": { - "A": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" - }, - "root": "d23786fb4a010da3ce639d66d5e904a11dbc02746d1ce25029e53290cabf28ab" + "in": [ + ["A", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"] + ], + "root": "0xd23786fb4a010da3ce639d66d5e904a11dbc02746d1ce25029e53290cabf28ab" }, "dogs": { - "in": { - "doe": "reindeer", - "dog": "puppy", - "dogglesworth": "cat" - }, - "root": "8aad789dff2f538bca5d8ea56e8abe10f4c7ba3a5dea95fea4cd6e7c3a1168d3" + "in": [ + ["doe", "reindeer"], + ["dog", "puppy"], + ["dogglesworth", "cat"] + ], + "root": "0x8aad789dff2f538bca5d8ea56e8abe10f4c7ba3a5dea95fea4cd6e7c3a1168d3" }, "puppy": { - "in": { - "do": "verb", - "horse": "stallion", - "doge": "coin", - "dog": "puppy" - }, - "root": "5991bb8c6514148a29db676a14ac506cd2cd5775ace63c30a4fe457715e9ac84" + "in": [ + ["do", "verb"], + ["horse", "stallion"], + ["doge", "coin"], + ["dog", "puppy"] + ], + "root": "0x5991bb8c6514148a29db676a14ac506cd2cd5775ace63c30a4fe457715e9ac84" }, "emptyValues": { - "in": { - "do": "verb", - "ether": "wookiedoo", - "horse": "stallion", - "shaman": "horse", - "doge": "coin", - "ether": "", - "dog": "puppy", - "shaman": "" - }, - "root": "4505cb6d817068bcd68fb225ab4d5ab70860461d3b35738bf6bcf7b44d702d0d" + "in": [ + ["do", "verb"], + ["ether", "wookiedoo"], + ["horse", "stallion"], + ["shaman", "horse"], + ["doge", "coin"], + ["ether", ""], + ["dog", "puppy"], + ["shaman", ""] + ], + "root": "0x5991bb8c6514148a29db676a14ac506cd2cd5775ace63c30a4fe457715e9ac84" }, "foo": { - "in": { - "foo": "bar", - "food": "bat", - "food": "bass" - }, - "root": "17beaa1648bafa633cda809c90c04af50fc8aed3cb40d16efbddee6fdf63c4c3" + "in": [ + ["foo", "bar"], + ["food", "bat"], + ["food", "bass"] + ], + "root": "0x17beaa1648bafa633cda809c90c04af50fc8aed3cb40d16efbddee6fdf63c4c3" }, "smallValues": { - "in": { - "be": "e", - "dog": "puppy", - "bed": "d" - }, - "root": "3f67c7a47520f79faa29255d2d3c084a7a6df0453116ed7232ff10277a8be68b" + "in": [ + ["be", "e"], + ["dog", "puppy"], + ["bed", "d"] + ], + "root": "0x3f67c7a47520f79faa29255d2d3c084a7a6df0453116ed7232ff10277a8be68b" }, "testy": { - "in": { - "test": "test", - "te": "testy" - }, - "root": "8452568af70d8d140f58d941338542f645fcca50094b20f3c3d8c3df49337928" + "in": [ + ["test", "test"], + ["te", "testy"] + ], + "root": "0x8452568af70d8d140f58d941338542f645fcca50094b20f3c3d8c3df49337928" }, "hex": { - "in": { - "0x0045": "0x0123456789", - "0x4500": "0x9876543210" - }, - "root": "285505fcabe84badc8aa310e2aae17eddc7d120aabec8a476902c8184b3a3503" - }, + "in": [ + ["0x0045", "0x0123456789"], + ["0x4500", "0x9876543210"] + ], + "root": "0x285505fcabe84badc8aa310e2aae17eddc7d120aabec8a476902c8184b3a3503" + }, "jeff": { - "in": { - "0x0000000000000000000000000000000000000000000000000000000000000045": "0x22b224a1420a802ab51d326e29fa98e34c4f24ea", - "0x0000000000000000000000000000000000000000000000000000000000000046": "0x67706c2076330000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000001234567890": "0x697c7b8c961b56f675d570498424ac8de1a918f6", - "0x000000000000000000000000697c7b8c961b56f675d570498424ac8de1a918f6": "0x1234567890", - "0x0000000000000000000000007ef9e639e2733cb34e4dfc576d4b23f72db776b2": "0x4655474156000000000000000000000000000000000000000000000000000000", - "0x000000000000000000000000ec4f34c97e43fbb2816cfd95e388353c7181dab1": "0x4e616d6552656700000000000000000000000000000000000000000000000000", - "0x4655474156000000000000000000000000000000000000000000000000000000": "0x7ef9e639e2733cb34e4dfc576d4b23f72db776b2", - "0x4e616d6552656700000000000000000000000000000000000000000000000000": "0xec4f34c97e43fbb2816cfd95e388353c7181dab1", - "0x0000000000000000000000000000000000000000000000000000001234567890": "", - "0x000000000000000000000000697c7b8c961b56f675d570498424ac8de1a918f6": "0x6f6f6f6820736f2067726561742c207265616c6c6c793f000000000000000000", - "0x6f6f6f6820736f2067726561742c207265616c6c6c793f000000000000000000": "0x697c7b8c961b56f675d570498424ac8de1a918f6" - }, - "root": "088c8e162c91c75ca9efa63f21530bbc6964cff7453a5d6af8404d090292a3e7" - } + "in": [ + ["0x0000000000000000000000000000000000000000000000000000000000000045", "0x22b224a1420a802ab51d326e29fa98e34c4f24ea"], + ["0x0000000000000000000000000000000000000000000000000000000000000046", "0x67706c2076330000000000000000000000000000000000000000000000000000"], + ["0x0000000000000000000000000000000000000000000000000000001234567890", "0x697c7b8c961b56f675d570498424ac8de1a918f6"], + ["0x000000000000000000000000697c7b8c961b56f675d570498424ac8de1a918f6", "0x1234567890"], + ["0x0000000000000000000000007ef9e639e2733cb34e4dfc576d4b23f72db776b2", "0x4655474156000000000000000000000000000000000000000000000000000000"], + ["0x000000000000000000000000ec4f34c97e43fbb2816cfd95e388353c7181dab1", "0x4e616d6552656700000000000000000000000000000000000000000000000000"], + ["0x4655474156000000000000000000000000000000000000000000000000000000", "0x7ef9e639e2733cb34e4dfc576d4b23f72db776b2"], + ["0x4e616d6552656700000000000000000000000000000000000000000000000000", "0xec4f34c97e43fbb2816cfd95e388353c7181dab1"], + ["0x0000000000000000000000000000000000000000000000000000001234567890", ""], + ["0x000000000000000000000000697c7b8c961b56f675d570498424ac8de1a918f6", "0x6f6f6f6820736f2067726561742c207265616c6c6c793f000000000000000000"], + ["0x6f6f6f6820736f2067726561742c207265616c6c6c793f000000000000000000", "0x697c7b8c961b56f675d570498424ac8de1a918f6"] + ], + "root": "0x9f6221ebb8efe7cff60a716ecb886e67dd042014be444669f0159d8e68b42100" + } } diff --git a/tests/files/VMTests/vmArithmeticTest.json b/tests/files/VMTests/vmArithmeticTest.json index ad3846cf9..2ba56f4bc 100644 --- a/tests/files/VMTests/vmArithmeticTest.json +++ b/tests/files/VMTests/vmArithmeticTest.json @@ -21,6 +21,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -64,6 +66,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -107,6 +111,8 @@ "value" : "1000000000000000000" }, "gas" : "10000", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -149,6 +155,8 @@ "value" : "1000000000000000000" }, "gas" : "9896", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -191,6 +199,8 @@ "value" : "1000000000000000000" }, "gas" : "9896", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -233,6 +243,8 @@ "value" : "1000000000000000000" }, "gas" : "9695", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -276,6 +288,8 @@ "value" : "1000000000000000000" }, "gas" : "9691", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -319,6 +333,8 @@ "value" : "1000000000000000000" }, "gas" : "9693", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -362,6 +378,8 @@ "value" : "1000000000000000000" }, "gas" : "9887", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -404,6 +422,8 @@ "value" : "1000000000000000000" }, "gas" : "9687", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -447,6 +467,8 @@ "value" : "1000000000000000000" }, "gas" : "9693", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -490,6 +512,8 @@ "value" : "1000000000000000000" }, "gas" : "9891", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -532,6 +556,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -575,6 +601,8 @@ "value" : "1000000000000000000" }, "gas" : "9896", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -617,6 +645,8 @@ "value" : "1000000000000000000" }, "gas" : "9896", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -659,6 +689,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -702,6 +734,8 @@ "value" : "1000000000000000000" }, "gas" : "9896", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -743,7 +777,9 @@ "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, - "gas" : "9696", + "gas" : "9695", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -786,7 +822,9 @@ "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, - "gas" : "9696", + "gas" : "9664", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -829,7 +867,9 @@ "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, - "gas" : "9696", + "gas" : "9692", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -872,7 +912,9 @@ "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, - "gas" : "9896", + "gas" : "9892", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -915,6 +957,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -957,7 +1001,9 @@ "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, - "gas" : "9696", + "gas" : "9695", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1000,7 +1046,9 @@ "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, - "gas" : "9696", + "gas" : "9694", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1043,7 +1091,9 @@ "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, - "gas" : "9896", + "gas" : "9894", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1086,6 +1136,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1129,6 +1181,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1172,6 +1226,8 @@ "value" : "1000000000000000000" }, "gas" : "9896", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1214,6 +1270,8 @@ "value" : "1000000000000000000" }, "gas" : "9896", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1256,6 +1314,8 @@ "value" : "1000000000000000000" }, "gas" : "9694", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1299,6 +1359,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1342,6 +1404,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1385,6 +1449,8 @@ "value" : "1000000000000000000" }, "gas" : "9896", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1427,6 +1493,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1470,6 +1538,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1513,6 +1583,8 @@ "value" : "1000000000000000000" }, "gas" : "9896", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1555,6 +1627,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1598,6 +1672,8 @@ "value" : "1000000000000000000" }, "gas" : "9895", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1640,6 +1716,8 @@ "value" : "1000000000000000000" }, "gas" : "9891", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1682,6 +1760,8 @@ "value" : "1000000000000000000" }, "gas" : "9693", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1725,6 +1805,8 @@ "value" : "1000000000000000000" }, "gas" : "9887", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1767,6 +1849,8 @@ "value" : "1000000000000000000" }, "gas" : "9687", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1810,6 +1894,8 @@ "value" : "1000000000000000000" }, "gas" : "9693", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1853,6 +1939,8 @@ "value" : "1000000000000000000" }, "gas" : "9891", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1895,6 +1983,8 @@ "value" : "1000000000000000000" }, "gas" : "9694", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1938,6 +2028,8 @@ "value" : "1000000000000000000" }, "gas" : "9694", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1981,6 +2073,8 @@ "value" : "1000000000000000000" }, "gas" : "9892", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2023,6 +2117,8 @@ "value" : "1000000000000000000" }, "gas" : "9694", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2066,6 +2162,8 @@ "value" : "1000000000000000000" }, "gas" : "9892", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2108,6 +2206,8 @@ "value" : "1000000000000000000" }, "gas" : "9894", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2150,6 +2250,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2193,6 +2295,8 @@ "value" : "1000000000000000000" }, "gas" : "9896", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2235,6 +2339,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2278,6 +2384,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2321,6 +2429,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2364,6 +2474,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2407,6 +2519,8 @@ "value" : "1000000000000000000" }, "gas" : "9896", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2449,6 +2563,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2492,6 +2608,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2535,6 +2653,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2578,6 +2698,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2621,6 +2743,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2664,6 +2788,8 @@ "value" : "1000000000000000000" }, "gas" : "9692", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2707,6 +2833,8 @@ "value" : "1000000000000000000" }, "gas" : "9694", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2750,6 +2878,8 @@ "value" : "1000000000000000000" }, "gas" : "9694", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2793,6 +2923,8 @@ "value" : "1000000000000000000" }, "gas" : "9894", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2835,6 +2967,8 @@ "value" : "1000000000000000000" }, "gas" : "9894", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2877,6 +3011,8 @@ "value" : "1000000000000000000" }, "gas" : "10000", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2919,6 +3055,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2962,6 +3100,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -3005,6 +3145,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -3048,6 +3190,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -3091,6 +3235,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { diff --git a/tests/files/VMTests/vmBitwiseLogicOperationTest.json b/tests/files/VMTests/vmBitwiseLogicOperationTest.json index 3de20ba6b..2dd7fec2c 100644 --- a/tests/files/VMTests/vmBitwiseLogicOperationTest.json +++ b/tests/files/VMTests/vmBitwiseLogicOperationTest.json @@ -21,6 +21,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -64,6 +66,8 @@ "value" : "1000000000000000000" }, "gas" : "9896", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -106,6 +110,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -149,6 +155,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -192,6 +200,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -235,6 +245,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -278,6 +290,8 @@ "value" : "1000000000000000000" }, "gas" : "9694", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -321,6 +335,8 @@ "value" : "1000000000000000000" }, "gas" : "9694", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -364,6 +380,8 @@ "value" : "1000000000000000000" }, "gas" : "9896", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -406,6 +424,8 @@ "value" : "1000000000000000000" }, "gas" : "9896", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -448,6 +468,8 @@ "value" : "1000000000000000000" }, "gas" : "9694", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -491,6 +513,8 @@ "value" : "1000000000000000000" }, "gas" : "9694", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -534,6 +558,8 @@ "value" : "1000000000000000000" }, "gas" : "9694", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -577,6 +603,8 @@ "value" : "1000000000000000000" }, "gas" : "9694", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -620,6 +648,8 @@ "value" : "1000000000000000000" }, "gas" : "9694", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -663,6 +693,8 @@ "value" : "1000000000000000000" }, "gas" : "9694", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -706,6 +738,8 @@ "value" : "1000000000000000000" }, "gas" : "9894", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -748,6 +782,8 @@ "value" : "1000000000000000000" }, "gas" : "9894", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -790,6 +826,8 @@ "value" : "1000000000000000000" }, "gas" : "9892", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -832,6 +870,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -875,6 +915,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -918,6 +960,8 @@ "value" : "1000000000000000000" }, "gas" : "9694", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -961,6 +1005,8 @@ "value" : "1000000000000000000" }, "gas" : "9894", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1003,6 +1049,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1046,6 +1094,8 @@ "value" : "1000000000000000000" }, "gas" : "9896", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1088,6 +1138,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1131,6 +1183,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1174,6 +1228,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1217,6 +1273,8 @@ "value" : "1000000000000000000" }, "gas" : "9894", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1259,6 +1317,8 @@ "value" : "1000000000000000000" }, "gas" : "9694", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1302,6 +1362,8 @@ "value" : "1000000000000000000" }, "gas" : "9896", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1344,6 +1406,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1387,6 +1451,8 @@ "value" : "1000000000000000000" }, "gas" : "9697", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1430,6 +1496,8 @@ "value" : "1000000000000000000" }, "gas" : "9897", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1472,6 +1540,8 @@ "value" : "1000000000000000000" }, "gas" : "9897", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1514,6 +1584,8 @@ "value" : "1000000000000000000" }, "gas" : "9895", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1556,6 +1628,8 @@ "value" : "1000000000000000000" }, "gas" : "9895", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1598,6 +1672,8 @@ "value" : "1000000000000000000" }, "gas" : "9695", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1641,6 +1717,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1684,6 +1762,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1727,6 +1807,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1770,6 +1852,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1813,6 +1897,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1856,6 +1942,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1899,6 +1987,8 @@ "value" : "1000000000000000000" }, "gas" : "9894", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1941,6 +2031,8 @@ "value" : "1000000000000000000" }, "gas" : "9694", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1984,6 +2076,8 @@ "value" : "1000000000000000000" }, "gas" : "9896", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2026,6 +2120,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2069,6 +2165,8 @@ "value" : "1000000000000000000" }, "gas" : "9892", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2111,6 +2209,8 @@ "value" : "1000000000000000000" }, "gas" : "9694", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2154,6 +2254,8 @@ "value" : "1000000000000000000" }, "gas" : "9894", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2196,6 +2298,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2239,6 +2343,8 @@ "value" : "1000000000000000000" }, "gas" : "9896", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2281,6 +2387,8 @@ "value" : "1000000000000000000" }, "gas" : "9692", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2324,6 +2432,8 @@ "value" : "1000000000000000000" }, "gas" : "9896", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2366,6 +2476,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2409,6 +2521,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2452,6 +2566,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2495,6 +2611,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2538,6 +2656,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { diff --git a/tests/files/VMTests/vmBlockInfoTest.json b/tests/files/VMTests/vmBlockInfoTest.json index 0bdaffe73..127c00abb 100644 --- a/tests/files/VMTests/vmBlockInfoTest.json +++ b/tests/files/VMTests/vmBlockInfoTest.json @@ -21,6 +21,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -64,6 +66,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -107,6 +111,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -150,6 +156,8 @@ "value" : "1000000000000000000" }, "gas" : "9898", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -192,6 +200,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -235,6 +245,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { diff --git a/tests/files/VMTests/vmEnvironmentalInfoTest.json b/tests/files/VMTests/vmEnvironmentalInfoTest.json index 6928155db..b7d6ca7bb 100644 --- a/tests/files/VMTests/vmEnvironmentalInfoTest.json +++ b/tests/files/VMTests/vmEnvironmentalInfoTest.json @@ -21,6 +21,8 @@ "value" : "1000000000000000000" }, "gas" : "99999999698", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -64,6 +66,8 @@ "value" : "1000000000000000000" }, "gas" : "99999999698", + "logs" : { + }, "out" : "0x", "post" : { "cd1722f3947def4cf144679da39c4c32bdc35681" : { @@ -107,6 +111,8 @@ "value" : "1000000000000000000" }, "gas" : "99999999878", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -156,6 +162,8 @@ "value" : "1000000000000000000" }, "gas" : "99999999678", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -199,6 +207,8 @@ "value" : "1000000000000000000" }, "gas" : "99999999656", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -242,6 +252,8 @@ "value" : "1000000000000000000" }, "gas" : "99999999656", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -291,7 +303,9 @@ "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, - "gas" : "99999999692", + "gas" : "99999999691", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -334,7 +348,9 @@ "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, - "gas" : "99999999692", + "gas" : "99999999691", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -378,6 +394,8 @@ "value" : "1000000000000000000" }, "gas" : "99999999892", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -420,6 +438,8 @@ "value" : "1000000000000000000" }, "gas" : "99999999697", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -463,6 +483,8 @@ "value" : "1000000000000000000" }, "gas" : "99999999697", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -506,6 +528,8 @@ "value" : "1000000000000000000" }, "gas" : "99999999697", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -549,6 +573,8 @@ "value" : "1000000000000000000" }, "gas" : "99999999698", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -592,6 +618,8 @@ "value" : "1000000000000000000" }, "gas" : "99999999698", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -635,6 +663,8 @@ "value" : "1000000000000000000" }, "gas" : "99999999698", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -678,6 +708,8 @@ "value" : "1000000000000000000" }, "gas" : "99999999698", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -721,6 +753,8 @@ "value" : "1000000000000000000" }, "gas" : "99999999698", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -763,7 +797,9 @@ "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, - "gas" : "99999999692", + "gas" : "99999999691", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -806,7 +842,9 @@ "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, - "gas" : "99999999692", + "gas" : "99999999691", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -850,6 +888,8 @@ "value" : "1000000000000000000" }, "gas" : "99999999698", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -892,7 +932,9 @@ "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, - "gas" : "99999999690", + "gas" : "99999999689", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -950,6 +992,8 @@ "value" : "1000000000000000000" }, "gas" : "99999999695", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1007,6 +1051,8 @@ "value" : "1000000000000000000" }, "gas" : "99999999697", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1064,6 +1110,8 @@ "value" : "1000000000000000000" }, "gas" : "99999999698", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1107,6 +1155,8 @@ "value" : "1000000000000000000" }, "gas" : "99999999698", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { diff --git a/tests/files/VMTests/vmIOandFlowOperationsTest.json b/tests/files/VMTests/vmIOandFlowOperationsTest.json index 027328d0d..8542a7dba 100644 --- a/tests/files/VMTests/vmIOandFlowOperationsTest.json +++ b/tests/files/VMTests/vmIOandFlowOperationsTest.json @@ -1,5 +1,5 @@ { - "dupAt51doesNotExistAnymore" : { + "dupAt51becameMload" : { "callcreates" : [ ], "env" : { @@ -21,6 +21,8 @@ "value" : "1000000000000000000" }, "gas" : "9695", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -64,6 +66,8 @@ "value" : "1000000000000000000" }, "gas" : "9688", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -107,6 +111,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -150,6 +156,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -172,8 +180,6 @@ } }, "jump0_foreverOutOfGas" : { - "callcreates" : [ - ], "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "256", @@ -192,17 +198,6 @@ "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, - "gas" : "0", - "out" : "0x", - "post" : { - "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { - "balance" : "1000000000000000000", - "code" : "0x600056", - "nonce" : "0", - "storage" : { - } - } - }, "pre" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "1000000000000000000", @@ -235,6 +230,8 @@ "value" : "1000000000000000000" }, "gas" : "9695", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -278,6 +275,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -321,6 +320,8 @@ "value" : "1000000000000000000" }, "gas" : "9693", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -343,8 +344,6 @@ } }, "jump0_jumpdest3" : { - "callcreates" : [ - ], "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "256", @@ -363,17 +362,6 @@ "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, - "gas" : "0", - "out" : "0x", - "post" : { - "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { - "balance" : "1000000000000000000", - "code" : "0x6023600b6008505660015b600255", - "nonce" : "0", - "storage" : { - } - } - }, "pre" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "1000000000000000000", @@ -385,8 +373,6 @@ } }, "jump1" : { - "callcreates" : [ - ], "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "256", @@ -405,17 +391,6 @@ "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, - "gas" : "0", - "out" : "0x", - "post" : { - "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { - "balance" : "1000000000000000000", - "code" : "0x620fffff620fffff0156", - "nonce" : "0", - "storage" : { - } - } - }, "pre" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "1000000000000000000", @@ -448,6 +423,8 @@ "value" : "1000000000000000000" }, "gas" : "9695", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -491,6 +468,8 @@ "value" : "1000000000000000000" }, "gas" : "9694", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -534,6 +513,8 @@ "value" : "1000000000000000000" }, "gas" : "9695", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -577,6 +558,8 @@ "value" : "1000000000000000000" }, "gas" : "9997", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -619,6 +602,8 @@ "value" : "1000000000000000000" }, "gas" : "9896", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -661,6 +646,8 @@ "value" : "1000000000000000000" }, "gas" : "9892", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -682,8 +669,6 @@ } }, "mloadOutOfGasError2" : { - "callcreates" : [ - ], "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "256", @@ -702,17 +687,6 @@ "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, - "gas" : "0", - "out" : "0x", - "post" : { - "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { - "balance" : "1000000000000000000", - "code" : "0x6272482551600155", - "nonce" : "0", - "storage" : { - } - } - }, "pre" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "1000000000000000000", @@ -745,6 +719,8 @@ "value" : "1000000000000000000" }, "gas" : "9694", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -788,6 +764,8 @@ "value" : "1000000000000000000" }, "gas" : "9694", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -831,6 +809,8 @@ "value" : "1000000000000000000" }, "gas" : "9690", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -874,6 +854,8 @@ "value" : "1000000000000000000" }, "gas" : "9688", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -917,6 +899,8 @@ "value" : "1000000000000000000" }, "gas" : "9692", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -960,6 +944,8 @@ "value" : "1000000000000000000" }, "gas" : "9690", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1003,6 +989,8 @@ "value" : "1000000000000000000" }, "gas" : "10000", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1045,6 +1033,8 @@ "value" : "1000000000000000000" }, "gas" : "9692", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1088,6 +1078,8 @@ "value" : "1000000000000000000" }, "gas" : "9690", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1131,6 +1123,8 @@ "value" : "1000000000000000000" }, "gas" : "10000", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1173,6 +1167,8 @@ "value" : "1000000000000000000" }, "gas" : "9693", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1216,6 +1212,8 @@ "value" : "1000000000000000000" }, "gas" : "9898", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1258,6 +1256,8 @@ "value" : "1000000000000000000" }, "gas" : "9596", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1301,6 +1301,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1323,8 +1325,6 @@ } }, "pop1" : { - "callcreates" : [ - ], "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "256", @@ -1343,17 +1343,6 @@ "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, - "gas" : "0", - "out" : "0x", - "post" : { - "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { - "balance" : "1000000000000000000", - "code" : "0x5060026003600455", - "nonce" : "0", - "storage" : { - } - } - }, "pre" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "1000000000000000000", @@ -1386,6 +1375,8 @@ "value" : "1000000000000000000" }, "gas" : "9074", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1431,6 +1422,8 @@ "value" : "1000000000000000000" }, "gas" : "9274", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1475,6 +1468,8 @@ "value" : "1000000000000000000" }, "gas" : "8450", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1500,9 +1495,7 @@ } } }, - "swapAt52doesNotExistAnymore" : { - "callcreates" : [ - ], + "swapAt52becameMstore" : { "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "256", @@ -1521,17 +1514,6 @@ "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, - "gas" : "0", - "out" : "0x", - "post" : { - "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { - "balance" : "1000000000000000000", - "code" : "0x600260035255", - "nonce" : "0", - "storage" : { - } - } - }, "pre" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "1000000000000000000", diff --git a/tests/files/VMTests/vmLogTest.json b/tests/files/VMTests/vmLogTest.json new file mode 100644 index 000000000..8a1b6e703 --- /dev/null +++ b/tests/files/VMTests/vmLogTest.json @@ -0,0 +1,2062 @@ +{ + "log0_emptyMem" : { + "callcreates" : [ + ], + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : "1", + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "exec" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "code" : "0x60006000a0", + "data" : "0x", + "gas" : "10000", + "gasPrice" : "100000000000000", + "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "value" : "1000000000000000000" + }, + "gas" : "9966", + "logs" : { + "00000000000000000000800000000000000000000000000000000880000000000000000000000000000000000000000000000000000000000000000000000000" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "data" : "0x", + "topics" : [ + ] + } + }, + "out" : "0x", + "post" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x60006000a0", + "nonce" : "0", + "storage" : { + } + } + }, + "pre" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x60006000a0", + "nonce" : "0", + "storage" : { + } + } + } + }, + "log0_logMemStartTooHigh" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : "1", + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "exec" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0", + "data" : "0x", + "gas" : "10000", + "gasPrice" : "100000000000000", + "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "value" : "1000000000000000000" + }, + "pre" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0", + "nonce" : "0", + "storage" : { + } + } + } + }, + "log0_logMemsizeTooHigh" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : "1", + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "exec" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001a0", + "data" : "0x", + "gas" : "10000", + "gasPrice" : "100000000000000", + "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "value" : "1000000000000000000" + }, + "pre" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001a0", + "nonce" : "0", + "storage" : { + } + } + } + }, + "log0_logMemsizeZero" : { + "callcreates" : [ + ], + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : "1", + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "exec" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006001a0", + "data" : "0x", + "gas" : "10000", + "gasPrice" : "100000000000000", + "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "value" : "1000000000000000000" + }, + "gas" : "9962", + "logs" : { + "00000000000000000000800000000000000000000000000000000880000000000000000000000000000000000000000000000000000000000000000000000000" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "data" : "0x", + "topics" : [ + ] + } + }, + "out" : "0x", + "post" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006001a0", + "nonce" : "0", + "storage" : { + } + } + }, + "pre" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006001a0", + "nonce" : "0", + "storage" : { + } + } + } + }, + "log0_nonEmptyMem" : { + "callcreates" : [ + ], + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : "1", + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "exec" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60005260206000a0", + "data" : "0x", + "gas" : "10000", + "gasPrice" : "100000000000000", + "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "value" : "1000000000000000000" + }, + "gas" : "9930", + "logs" : { + "00000000000000000000800000000000000000000000000000000880000000000000000000000000000000000000000000000000000000000000000000000000" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + ] + } + }, + "out" : "0x", + "post" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60005260206000a0", + "nonce" : "0", + "storage" : { + } + } + }, + "pre" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60005260206000a0", + "nonce" : "0", + "storage" : { + } + } + } + }, + "log0_nonEmptyMem_logMemSize1" : { + "callcreates" : [ + ], + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : "1", + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "exec" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260016000a0", + "data" : "0x", + "gas" : "10000", + "gasPrice" : "100000000000000", + "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "value" : "1000000000000000000" + }, + "gas" : "9961", + "logs" : { + "00000000000000000000800000000000000000000000000000000880000000000000000000000000000000000000000000000000000000000000000000000000" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "data" : "0xaa", + "topics" : [ + ] + } + }, + "out" : "0x", + "post" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260016000a0", + "nonce" : "0", + "storage" : { + } + } + }, + "pre" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260016000a0", + "nonce" : "0", + "storage" : { + } + } + } + }, + "log0_nonEmptyMem_logMemSize1_logMemStart31" : { + "callcreates" : [ + ], + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : "1", + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "exec" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000526001601fa0", + "data" : "0x", + "gas" : "10000", + "gasPrice" : "100000000000000", + "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "value" : "1000000000000000000" + }, + "gas" : "9961", + "logs" : { + "00000000000000000000800000000000000000000000000000000880000000000000000000000000000000000000000000000000000000000000000000000000" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "data" : "0xdd", + "topics" : [ + ] + } + }, + "out" : "0x", + "post" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000526001601fa0", + "nonce" : "0", + "storage" : { + } + } + }, + "pre" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000526001601fa0", + "nonce" : "0", + "storage" : { + } + } + } + }, + "log1_Caller" : { + "callcreates" : [ + ], + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : "1", + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "exec" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "code" : "0x60ff6000533360206000a1", + "data" : "0x", + "gas" : "10000", + "gasPrice" : "100000000000000", + "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "value" : "1000000000000000000" + }, + "gas" : "9897", + "logs" : { + "00000000000008000000808100000000000000000000000000000880000000000000000000000000000000000000000000000000000000000000000000000000" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "data" : "0xff00000000000000000000000000000000000000000000000000000000000000", + "topics" : [ + "000000000000000000000000cd1722f3947def4cf144679da39c4c32bdc35681" + ] + } + }, + "out" : "0x", + "post" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x60ff6000533360206000a1", + "nonce" : "0", + "storage" : { + } + } + }, + "pre" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x60ff6000533360206000a1", + "nonce" : "0", + "storage" : { + } + } + } + }, + "log1_MaxTopic" : { + "callcreates" : [ + ], + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : "1", + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "exec" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60206000a1", + "data" : "0x", + "gas" : "10000", + "gasPrice" : "100000000000000", + "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "value" : "1000000000000000000" + }, + "gas" : "9897", + "logs" : { + "00000000000000200000800000000000000000000000000000000880000000000000000000000000000000000000000000000010000000000000000000000020" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "data" : "0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd", + "topics" : [ + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + ] + } + }, + "out" : "0x", + "post" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60206000a1", + "nonce" : "0", + "storage" : { + } + } + }, + "pre" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60206000a1", + "nonce" : "0", + "storage" : { + } + } + } + }, + "log1_emptyMem" : { + "callcreates" : [ + ], + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : "1", + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "exec" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "code" : "0x600060006000a1", + "data" : "0x", + "gas" : "10000", + "gasPrice" : "100000000000000", + "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "value" : "1000000000000000000" + }, + "gas" : "9933", + "logs" : { + "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "data" : "0x", + "topics" : [ + "0000000000000000000000000000000000000000000000000000000000000000" + ] + } + }, + "out" : "0x", + "post" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x600060006000a1", + "nonce" : "0", + "storage" : { + } + } + }, + "pre" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x600060006000a1", + "nonce" : "0", + "storage" : { + } + } + } + }, + "log1_logMemStartTooHigh" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : "1", + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "exec" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1", + "data" : "0x", + "gas" : "10000", + "gasPrice" : "100000000000000", + "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "value" : "1000000000000000000" + }, + "pre" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1", + "nonce" : "0", + "storage" : { + } + } + } + }, + "log1_logMemsizeTooHigh" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : "1", + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "exec" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001a1", + "data" : "0x", + "gas" : "10000", + "gasPrice" : "100000000000000", + "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "value" : "1000000000000000000" + }, + "pre" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001a1", + "nonce" : "0", + "storage" : { + } + } + } + }, + "log1_logMemsizeZero" : { + "callcreates" : [ + ], + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : "1", + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "exec" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060006001a1", + "data" : "0x", + "gas" : "10000", + "gasPrice" : "100000000000000", + "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "value" : "1000000000000000000" + }, + "gas" : "9929", + "logs" : { + "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "data" : "0x", + "topics" : [ + "0000000000000000000000000000000000000000000000000000000000000000" + ] + } + }, + "out" : "0x", + "post" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060006001a1", + "nonce" : "0", + "storage" : { + } + } + }, + "pre" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060006001a1", + "nonce" : "0", + "storage" : { + } + } + } + }, + "log1_nonEmptyMem" : { + "callcreates" : [ + ], + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : "1", + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "exec" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600052600060206000a1", + "data" : "0x", + "gas" : "10000", + "gasPrice" : "100000000000000", + "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "value" : "1000000000000000000" + }, + "gas" : "9897", + "logs" : { + "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + "0000000000000000000000000000000000000000000000000000000000000000" + ] + } + }, + "out" : "0x", + "post" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600052600060206000a1", + "nonce" : "0", + "storage" : { + } + } + }, + "pre" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600052600060206000a1", + "nonce" : "0", + "storage" : { + } + } + } + }, + "log1_nonEmptyMem_logMemSize1" : { + "callcreates" : [ + ], + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : "1", + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "exec" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060016000a1", + "data" : "0x", + "gas" : "10000", + "gasPrice" : "100000000000000", + "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "value" : "1000000000000000000" + }, + "gas" : "9928", + "logs" : { + "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "data" : "0xaa", + "topics" : [ + "0000000000000000000000000000000000000000000000000000000000000000" + ] + } + }, + "out" : "0x", + "post" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060016000a1", + "nonce" : "0", + "storage" : { + } + } + }, + "pre" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060016000a1", + "nonce" : "0", + "storage" : { + } + } + } + }, + "log1_nonEmptyMem_logMemSize1_logMemStart31" : { + "callcreates" : [ + ], + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : "1", + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "exec" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006001601fa1", + "data" : "0x", + "gas" : "10000", + "gasPrice" : "100000000000000", + "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "value" : "1000000000000000000" + }, + "gas" : "9928", + "logs" : { + "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "data" : "0xdd", + "topics" : [ + "0000000000000000000000000000000000000000000000000000000000000000" + ] + } + }, + "out" : "0x", + "post" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006001601fa1", + "nonce" : "0", + "storage" : { + } + } + }, + "pre" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006001601fa1", + "nonce" : "0", + "storage" : { + } + } + } + }, + "log2_Caller" : { + "callcreates" : [ + ], + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : "1", + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "exec" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "code" : "0x60ff60005333600060206000a2", + "data" : "0x", + "gas" : "10000", + "gasPrice" : "100000000000000", + "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "value" : "1000000000000000000" + }, + "gas" : "9864", + "logs" : { + "00000000000008000000808100000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "data" : "0xff00000000000000000000000000000000000000000000000000000000000000", + "topics" : [ + "0000000000000000000000000000000000000000000000000000000000000000", + "000000000000000000000000cd1722f3947def4cf144679da39c4c32bdc35681" + ] + } + }, + "out" : "0x", + "post" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x60ff60005333600060206000a2", + "nonce" : "0", + "storage" : { + } + } + }, + "pre" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x60ff60005333600060206000a2", + "nonce" : "0", + "storage" : { + } + } + } + }, + "log2_MaxTopic" : { + "callcreates" : [ + ], + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : "1", + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "exec" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60206000a2", + "data" : "0x", + "gas" : "10000", + "gasPrice" : "100000000000000", + "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "value" : "1000000000000000000" + }, + "gas" : "9864", + "logs" : { + "00000000000000200000800000000000000000000000000000000880000000000000000000000000000000000000000000000010000000000000000000000020" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "data" : "0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd", + "topics" : [ + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + ] + } + }, + "out" : "0x", + "post" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60206000a2", + "nonce" : "0", + "storage" : { + } + } + }, + "pre" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60206000a2", + "nonce" : "0", + "storage" : { + } + } + } + }, + "log2_emptyMem" : { + "callcreates" : [ + ], + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : "1", + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "exec" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "code" : "0x6000600060006000a2", + "data" : "0x", + "gas" : "10000", + "gasPrice" : "100000000000000", + "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "value" : "1000000000000000000" + }, + "gas" : "9900", + "logs" : { + "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "data" : "0x", + "topics" : [ + "0000000000000000000000000000000000000000000000000000000000000000" + ] + } + }, + "out" : "0x", + "post" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x6000600060006000a2", + "nonce" : "0", + "storage" : { + } + } + }, + "pre" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x6000600060006000a2", + "nonce" : "0", + "storage" : { + } + } + } + }, + "log2_logMemStartTooHigh" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : "1", + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "exec" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000526000600060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa2", + "data" : "0x", + "gas" : "10000", + "gasPrice" : "100000000000000", + "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "value" : "1000000000000000000" + }, + "pre" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000526000600060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa2", + "nonce" : "0", + "storage" : { + } + } + } + }, + "log2_logMemsizeTooHigh" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : "1", + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "exec" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001a2", + "data" : "0x", + "gas" : "10000", + "gasPrice" : "100000000000000", + "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "value" : "1000000000000000000" + }, + "pre" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001a2", + "nonce" : "0", + "storage" : { + } + } + } + }, + "log2_logMemsizeZero" : { + "callcreates" : [ + ], + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : "1", + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "exec" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000526000600060006001a2", + "data" : "0x", + "gas" : "10000", + "gasPrice" : "100000000000000", + "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "value" : "1000000000000000000" + }, + "gas" : "9896", + "logs" : { + "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "data" : "0x", + "topics" : [ + "0000000000000000000000000000000000000000000000000000000000000000" + ] + } + }, + "out" : "0x", + "post" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000526000600060006001a2", + "nonce" : "0", + "storage" : { + } + } + }, + "pre" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000526000600060006001a2", + "nonce" : "0", + "storage" : { + } + } + } + }, + "log2_nonEmptyMem" : { + "callcreates" : [ + ], + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : "1", + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "exec" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000526000600060206000a2", + "data" : "0x", + "gas" : "10000", + "gasPrice" : "100000000000000", + "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "value" : "1000000000000000000" + }, + "gas" : "9864", + "logs" : { + "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + "0000000000000000000000000000000000000000000000000000000000000000" + ] + } + }, + "out" : "0x", + "post" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000526000600060206000a2", + "nonce" : "0", + "storage" : { + } + } + }, + "pre" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000526000600060206000a2", + "nonce" : "0", + "storage" : { + } + } + } + }, + "log2_nonEmptyMem_logMemSize1" : { + "callcreates" : [ + ], + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : "1", + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "exec" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000526000600060016000a2", + "data" : "0x", + "gas" : "10000", + "gasPrice" : "100000000000000", + "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "value" : "1000000000000000000" + }, + "gas" : "9895", + "logs" : { + "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "data" : "0xaa", + "topics" : [ + "0000000000000000000000000000000000000000000000000000000000000000" + ] + } + }, + "out" : "0x", + "post" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000526000600060016000a2", + "nonce" : "0", + "storage" : { + } + } + }, + "pre" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000526000600060016000a2", + "nonce" : "0", + "storage" : { + } + } + } + }, + "log2_nonEmptyMem_logMemSize1_logMemStart31" : { + "callcreates" : [ + ], + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : "1", + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "exec" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060006001601fa2", + "data" : "0x", + "gas" : "10000", + "gasPrice" : "100000000000000", + "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "value" : "1000000000000000000" + }, + "gas" : "9895", + "logs" : { + "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "data" : "0xdd", + "topics" : [ + "0000000000000000000000000000000000000000000000000000000000000000" + ] + } + }, + "out" : "0x", + "post" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060006001601fa2", + "nonce" : "0", + "storage" : { + } + } + }, + "pre" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060006001601fa2", + "nonce" : "0", + "storage" : { + } + } + } + }, + "log3_Caller" : { + "callcreates" : [ + ], + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : "1", + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "exec" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "code" : "0x60ff600053336000600060206000a3", + "data" : "0x", + "gas" : "10000", + "gasPrice" : "100000000000000", + "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "value" : "1000000000000000000" + }, + "gas" : "9831", + "logs" : { + "00000000000008000000808100000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "data" : "0xff00000000000000000000000000000000000000000000000000000000000000", + "topics" : [ + "0000000000000000000000000000000000000000000000000000000000000000", + "000000000000000000000000cd1722f3947def4cf144679da39c4c32bdc35681" + ] + } + }, + "out" : "0x", + "post" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x60ff600053336000600060206000a3", + "nonce" : "0", + "storage" : { + } + } + }, + "pre" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x60ff600053336000600060206000a3", + "nonce" : "0", + "storage" : { + } + } + } + }, + "log3_MaxTopic" : { + "callcreates" : [ + ], + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : "1", + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "exec" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60206000a3", + "data" : "0x", + "gas" : "10000", + "gasPrice" : "100000000000000", + "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "value" : "1000000000000000000" + }, + "gas" : "9831", + "logs" : { + "00000000000000200000800000000000000000000000000000000880000000000000000000000000000000000000000000000010000000000000000000000020" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "data" : "0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd", + "topics" : [ + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + ] + } + }, + "out" : "0x", + "post" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60206000a3", + "nonce" : "0", + "storage" : { + } + } + }, + "pre" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60206000a3", + "nonce" : "0", + "storage" : { + } + } + } + }, + "log3_PC" : { + "callcreates" : [ + ], + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : "1", + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "exec" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "code" : "0x60ff60005358585860206000a3", + "data" : "0x", + "gas" : "10000", + "gasPrice" : "100000000000000", + "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "value" : "1000000000000000000" + }, + "gas" : "9831", + "logs" : { + "00003004000000000000800000000010000008000000000000000980000000000000000000000000000000000000000000001000000400000000000800000000" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "data" : "0xff00000000000000000000000000000000000000000000000000000000000000", + "topics" : [ + "0000000000000000000000000000000000000000000000000000000000000005", + "0000000000000000000000000000000000000000000000000000000000000006", + "0000000000000000000000000000000000000000000000000000000000000007" + ] + } + }, + "out" : "0x", + "post" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x60ff60005358585860206000a3", + "nonce" : "0", + "storage" : { + } + } + }, + "pre" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x60ff60005358585860206000a3", + "nonce" : "0", + "storage" : { + } + } + } + }, + "log3_emptyMem" : { + "callcreates" : [ + ], + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : "1", + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "exec" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "code" : "0x60006000600060006000a3", + "data" : "0x", + "gas" : "10000", + "gasPrice" : "100000000000000", + "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "value" : "1000000000000000000" + }, + "gas" : "9867", + "logs" : { + "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "data" : "0x", + "topics" : [ + "0000000000000000000000000000000000000000000000000000000000000000" + ] + } + }, + "out" : "0x", + "post" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x60006000600060006000a3", + "nonce" : "0", + "storage" : { + } + } + }, + "pre" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x60006000600060006000a3", + "nonce" : "0", + "storage" : { + } + } + } + }, + "log3_logMemStartTooHigh" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : "1", + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "exec" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006000600060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa3", + "data" : "0x", + "gas" : "10000", + "gasPrice" : "100000000000000", + "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "value" : "1000000000000000000" + }, + "pre" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006000600060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa3", + "nonce" : "0", + "storage" : { + } + } + } + }, + "log3_logMemsizeTooHigh" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : "1", + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "exec" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000526000600060007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001a3", + "data" : "0x", + "gas" : "10000", + "gasPrice" : "100000000000000", + "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "value" : "1000000000000000000" + }, + "pre" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000526000600060007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001a3", + "nonce" : "0", + "storage" : { + } + } + } + }, + "log3_logMemsizeZero" : { + "callcreates" : [ + ], + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : "1", + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "exec" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006000600060006001a3", + "data" : "0x", + "gas" : "10000", + "gasPrice" : "100000000000000", + "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "value" : "1000000000000000000" + }, + "gas" : "9863", + "logs" : { + "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "data" : "0x", + "topics" : [ + "0000000000000000000000000000000000000000000000000000000000000000" + ] + } + }, + "out" : "0x", + "post" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006000600060006001a3", + "nonce" : "0", + "storage" : { + } + } + }, + "pre" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006000600060006001a3", + "nonce" : "0", + "storage" : { + } + } + } + }, + "log3_nonEmptyMem" : { + "callcreates" : [ + ], + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : "1", + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "exec" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60005260006000600060206000a3", + "data" : "0x", + "gas" : "10000", + "gasPrice" : "100000000000000", + "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "value" : "1000000000000000000" + }, + "gas" : "9831", + "logs" : { + "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + "0000000000000000000000000000000000000000000000000000000000000000" + ] + } + }, + "out" : "0x", + "post" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60005260006000600060206000a3", + "nonce" : "0", + "storage" : { + } + } + }, + "pre" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60005260006000600060206000a3", + "nonce" : "0", + "storage" : { + } + } + } + }, + "log3_nonEmptyMem_logMemSize1" : { + "callcreates" : [ + ], + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : "1", + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "exec" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006000600060016000a3", + "data" : "0x", + "gas" : "10000", + "gasPrice" : "100000000000000", + "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "value" : "1000000000000000000" + }, + "gas" : "9862", + "logs" : { + "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "data" : "0xaa", + "topics" : [ + "0000000000000000000000000000000000000000000000000000000000000000" + ] + } + }, + "out" : "0x", + "post" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006000600060016000a3", + "nonce" : "0", + "storage" : { + } + } + }, + "pre" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006000600060016000a3", + "nonce" : "0", + "storage" : { + } + } + } + }, + "log3_nonEmptyMem_logMemSize1_logMemStart31" : { + "callcreates" : [ + ], + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : "1", + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "exec" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000526000600060006001601fa3", + "data" : "0x", + "gas" : "10000", + "gasPrice" : "100000000000000", + "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "value" : "1000000000000000000" + }, + "gas" : "9862", + "logs" : { + "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "data" : "0xdd", + "topics" : [ + "0000000000000000000000000000000000000000000000000000000000000000" + ] + } + }, + "out" : "0x", + "post" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000526000600060006001601fa3", + "nonce" : "0", + "storage" : { + } + } + }, + "pre" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000526000600060006001601fa3", + "nonce" : "0", + "storage" : { + } + } + } + }, + "log4_Caller" : { + "callcreates" : [ + ], + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : "1", + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "exec" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "code" : "0x", + "data" : "0x", + "gas" : "10000", + "gasPrice" : "100000000000000", + "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "value" : "1000000000000000000" + }, + "gas" : "10000", + "logs" : { + }, + "out" : "0x", + "post" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "pre" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + } + }, + "log4_MaxTopic" : { + "callcreates" : [ + ], + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : "1", + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "exec" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60206000a4", + "data" : "0x", + "gas" : "10000", + "gasPrice" : "100000000000000", + "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "value" : "1000000000000000000" + }, + "gas" : "9798", + "logs" : { + "00000000000000200000800000000000000000000000000000000880000000000000000000000000000000000000000000000010000000000000000000000020" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "data" : "0xaabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd", + "topics" : [ + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + ] + } + }, + "out" : "0x", + "post" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60206000a4", + "nonce" : "0", + "storage" : { + } + } + }, + "pre" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd6000527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60206000a4", + "nonce" : "0", + "storage" : { + } + } + } + }, + "log4_PC" : { + "callcreates" : [ + ], + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : "1", + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "exec" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "code" : "0x", + "data" : "0x", + "gas" : "10000", + "gasPrice" : "100000000000000", + "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "value" : "1000000000000000000" + }, + "gas" : "10000", + "logs" : { + }, + "out" : "0x", + "post" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + }, + "pre" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x", + "nonce" : "0", + "storage" : { + } + } + } + }, + "log4_emptyMem" : { + "callcreates" : [ + ], + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : "1", + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "exec" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "code" : "0x600060006000600060006000a4", + "data" : "0x", + "gas" : "10000", + "gasPrice" : "100000000000000", + "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "value" : "1000000000000000000" + }, + "gas" : "9834", + "logs" : { + "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "data" : "0x", + "topics" : [ + "0000000000000000000000000000000000000000000000000000000000000000" + ] + } + }, + "out" : "0x", + "post" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x600060006000600060006000a4", + "nonce" : "0", + "storage" : { + } + } + }, + "pre" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x600060006000600060006000a4", + "nonce" : "0", + "storage" : { + } + } + } + }, + "log4_logMemStartTooHigh" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : "1", + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "exec" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060006000600060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa4", + "data" : "0x", + "gas" : "10000", + "gasPrice" : "100000000000000", + "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "value" : "1000000000000000000" + }, + "pre" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060006000600060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa4", + "nonce" : "0", + "storage" : { + } + } + } + }, + "log4_logMemsizeTooHigh" : { + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : "1", + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "exec" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006000600060007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001a4", + "data" : "0x", + "gas" : "10000", + "gasPrice" : "100000000000000", + "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "value" : "1000000000000000000" + }, + "pre" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006000600060007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001a4", + "nonce" : "0", + "storage" : { + } + } + } + }, + "log4_logMemsizeZero" : { + "callcreates" : [ + ], + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : "1", + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "exec" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060006000600060006001a4", + "data" : "0x", + "gas" : "10000", + "gasPrice" : "100000000000000", + "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "value" : "1000000000000000000" + }, + "gas" : "9830", + "logs" : { + "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "data" : "0x", + "topics" : [ + "0000000000000000000000000000000000000000000000000000000000000000" + ] + } + }, + "out" : "0x", + "post" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060006000600060006001a4", + "nonce" : "0", + "storage" : { + } + } + }, + "pre" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060006000600060006001a4", + "nonce" : "0", + "storage" : { + } + } + } + }, + "log4_nonEmptyMem" : { + "callcreates" : [ + ], + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : "1", + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "exec" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600052600060006000600060206000a4", + "data" : "0x", + "gas" : "10000", + "gasPrice" : "100000000000000", + "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "value" : "1000000000000000000" + }, + "gas" : "9798", + "logs" : { + "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "data" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "topics" : [ + "0000000000000000000000000000000000000000000000000000000000000000" + ] + } + }, + "out" : "0x", + "post" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600052600060006000600060206000a4", + "nonce" : "0", + "storage" : { + } + } + }, + "pre" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600052600060006000600060206000a4", + "nonce" : "0", + "storage" : { + } + } + } + }, + "log4_nonEmptyMem_logMemSize1" : { + "callcreates" : [ + ], + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : "1", + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "exec" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060006000600060016000a4", + "data" : "0x", + "gas" : "10000", + "gasPrice" : "100000000000000", + "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "value" : "1000000000000000000" + }, + "gas" : "9829", + "logs" : { + "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "data" : "0xaa", + "topics" : [ + "0000000000000000000000000000000000000000000000000000000000000000" + ] + } + }, + "out" : "0x", + "post" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060006000600060016000a4", + "nonce" : "0", + "storage" : { + } + } + }, + "pre" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd600052600060006000600060016000a4", + "nonce" : "0", + "storage" : { + } + } + } + }, + "log4_nonEmptyMem_logMemSize1_logMemStart31" : { + "callcreates" : [ + ], + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : "1", + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "exec" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006000600060006001601fa4", + "data" : "0x", + "gas" : "10000", + "gasPrice" : "100000000000000", + "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "value" : "1000000000000000000" + }, + "gas" : "9829", + "logs" : { + "00000000000000000000800000000000000000000000000000000880000020000000000002000000000000000000080000000000000000000000000000000000" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "data" : "0xdd", + "topics" : [ + "0000000000000000000000000000000000000000000000000000000000000000" + ] + } + }, + "out" : "0x", + "post" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006000600060006001601fa4", + "nonce" : "0", + "storage" : { + } + } + }, + "pre" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7faabbffffffffffffffffffffffffffffffffffffffffffffffffffffffffccdd60005260006000600060006001601fa4", + "nonce" : "0", + "storage" : { + } + } + } + } +}
\ No newline at end of file diff --git a/tests/files/VMTests/vmPushDupSwapTest.json b/tests/files/VMTests/vmPushDupSwapTest.json index 873f95061..e9f89e230 100644 --- a/tests/files/VMTests/vmPushDupSwapTest.json +++ b/tests/files/VMTests/vmPushDupSwapTest.json @@ -21,6 +21,8 @@ "value" : "1000000000000000000" }, "gas" : "9697", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -64,6 +66,8 @@ "value" : "1000000000000000000" }, "gas" : "9688", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -107,6 +111,8 @@ "value" : "1000000000000000000" }, "gas" : "9687", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -150,6 +156,8 @@ "value" : "1000000000000000000" }, "gas" : "9686", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -193,6 +201,8 @@ "value" : "1000000000000000000" }, "gas" : "9685", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -236,6 +246,8 @@ "value" : "1000000000000000000" }, "gas" : "9684", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -279,6 +291,8 @@ "value" : "1000000000000000000" }, "gas" : "9683", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -322,6 +336,8 @@ "value" : "1000000000000000000" }, "gas" : "9682", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -365,6 +381,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -387,8 +405,6 @@ } }, "dup2error" : { - "callcreates" : [ - ], "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "256", @@ -407,17 +423,6 @@ "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, - "gas" : "0", - "out" : "0x", - "post" : { - "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { - "balance" : "1000000000000000000", - "code" : "0x7f10112233445566778899aabbccddeeff00112233445566778899aabbccddeeff81600355", - "nonce" : "0", - "storage" : { - } - } - }, "pre" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "1000000000000000000", @@ -450,6 +455,8 @@ "value" : "1000000000000000000" }, "gas" : "9695", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -493,6 +500,8 @@ "value" : "1000000000000000000" }, "gas" : "9694", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -536,6 +545,8 @@ "value" : "1000000000000000000" }, "gas" : "9693", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -579,6 +590,8 @@ "value" : "1000000000000000000" }, "gas" : "9692", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -622,6 +635,8 @@ "value" : "1000000000000000000" }, "gas" : "9691", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -665,6 +680,8 @@ "value" : "1000000000000000000" }, "gas" : "9690", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -708,6 +725,8 @@ "value" : "1000000000000000000" }, "gas" : "9689", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -751,6 +770,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -794,6 +815,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -837,6 +860,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -880,6 +905,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -923,6 +950,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -966,6 +995,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1009,6 +1040,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1052,6 +1085,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1095,6 +1130,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1138,6 +1175,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1181,6 +1220,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1224,6 +1265,8 @@ "value" : "1000000000000000000" }, "gas" : "9999", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1266,6 +1309,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1309,6 +1354,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1352,6 +1399,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1395,6 +1444,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1438,6 +1489,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1481,6 +1534,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1524,6 +1579,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1567,6 +1624,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1610,6 +1669,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1653,6 +1714,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1696,6 +1759,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1739,6 +1804,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1782,6 +1849,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1825,6 +1894,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1868,6 +1939,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1889,7 +1962,7 @@ } } }, - "push32error" : { + "push32AndSuicide" : { "callcreates" : [ ], "env" : { @@ -1911,6 +1984,8 @@ "value" : "1000000000000000000" }, "gas" : "9999", + "logs" : { + }, "out" : "0x", "post" : { "bbccddeeff00112233445566778899aabbccddee" : { @@ -1931,6 +2006,50 @@ } } }, + "push32FillUpInputWithZerosAtTheEnd" : { + "callcreates" : [ + ], + "env" : { + "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", + "currentDifficulty" : "256", + "currentGasLimit" : "1000000", + "currentNumber" : "0", + "currentTimestamp" : "1", + "previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6" + }, + "exec" : { + "address" : "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6", + "caller" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "code" : "0x7fff10112233445566778899aabbccddeeff00112233445566778899aabbccdd", + "data" : "0x", + "gas" : "10000", + "gasPrice" : "100000000000000", + "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", + "value" : "1000000000000000000" + }, + "gas" : "9999", + "logs" : { + }, + "out" : "0x", + "post" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7fff10112233445566778899aabbccddeeff00112233445566778899aabbccdd", + "nonce" : "0", + "storage" : { + } + } + }, + "pre" : { + "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { + "balance" : "1000000000000000000", + "code" : "0x7fff10112233445566778899aabbccddeeff00112233445566778899aabbccdd", + "nonce" : "0", + "storage" : { + } + } + } + }, "push4" : { "callcreates" : [ ], @@ -1953,6 +2072,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -1996,6 +2117,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2039,6 +2162,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2082,6 +2207,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2125,6 +2252,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2168,6 +2297,8 @@ "value" : "1000000000000000000" }, "gas" : "9698", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2211,6 +2342,8 @@ "value" : "1000000000000000000" }, "gas" : "9697", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2254,6 +2387,8 @@ "value" : "1000000000000000000" }, "gas" : "9688", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2297,6 +2432,8 @@ "value" : "1000000000000000000" }, "gas" : "9687", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2340,6 +2477,8 @@ "value" : "1000000000000000000" }, "gas" : "9686", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2383,6 +2522,8 @@ "value" : "1000000000000000000" }, "gas" : "9685", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2426,6 +2567,8 @@ "value" : "1000000000000000000" }, "gas" : "9684", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2469,6 +2612,8 @@ "value" : "1000000000000000000" }, "gas" : "9683", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2512,6 +2657,8 @@ "value" : "1000000000000000000" }, "gas" : "9682", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2555,6 +2702,8 @@ "value" : "1000000000000000000" }, "gas" : "9696", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2577,8 +2726,6 @@ } }, "swap2error" : { - "callcreates" : [ - ], "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "256", @@ -2597,17 +2744,6 @@ "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, - "gas" : "0", - "out" : "0x", - "post" : { - "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { - "balance" : "1000000000000000000", - "code" : "0x7f10112233445566778899aabbccddeeff00112233445566778899aabbccddeeff60039155", - "nonce" : "0", - "storage" : { - } - } - }, "pre" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "1000000000000000000", @@ -2640,6 +2776,8 @@ "value" : "1000000000000000000" }, "gas" : "9695", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2683,6 +2821,8 @@ "value" : "1000000000000000000" }, "gas" : "9694", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2726,6 +2866,8 @@ "value" : "1000000000000000000" }, "gas" : "9693", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2769,6 +2911,8 @@ "value" : "1000000000000000000" }, "gas" : "9692", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2812,6 +2956,8 @@ "value" : "1000000000000000000" }, "gas" : "9691", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2855,6 +3001,8 @@ "value" : "1000000000000000000" }, "gas" : "9690", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -2898,6 +3046,8 @@ "value" : "1000000000000000000" }, "gas" : "9689", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { diff --git a/tests/files/VMTests/vmSha3Test.json b/tests/files/VMTests/vmSha3Test.json index 7723cde5d..55aeb3b84 100644 --- a/tests/files/VMTests/vmSha3Test.json +++ b/tests/files/VMTests/vmSha3Test.json @@ -21,6 +21,8 @@ "value" : "1000000000000000000" }, "gas" : "99999999677", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -64,6 +66,8 @@ "value" : "1000000000000000000" }, "gas" : "9676", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -107,6 +111,8 @@ "value" : "1000000000000000000" }, "gas" : "9676", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -129,8 +135,6 @@ } }, "sha3_3" : { - "callcreates" : [ - ], "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "256", @@ -149,17 +153,6 @@ "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, - "gas" : "0", - "out" : "0x", - "post" : { - "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { - "balance" : "1000000000000000000", - "code" : "0x620fffff6103e820600055", - "nonce" : "0", - "storage" : { - } - } - }, "pre" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "1000000000000000000", @@ -171,8 +164,6 @@ } }, "sha3_4" : { - "callcreates" : [ - ], "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "256", @@ -191,17 +182,6 @@ "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, - "gas" : "0", - "out" : "0x", - "post" : { - "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { - "balance" : "1000000000000000000", - "code" : "0x6064640fffffffff20600055", - "nonce" : "0", - "storage" : { - } - } - }, "pre" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "1000000000000000000", @@ -213,8 +193,6 @@ } }, "sha3_5" : { - "callcreates" : [ - ], "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "256", @@ -233,17 +211,6 @@ "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, - "gas" : "0", - "out" : "0x", - "post" : { - "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { - "balance" : "1000000000000000000", - "code" : "0x640fffffffff61271020600055", - "nonce" : "0", - "storage" : { - } - } - }, "pre" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "1000000000000000000", @@ -255,8 +222,6 @@ } }, "sha3_6" : { - "callcreates" : [ - ], "env" : { "currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba", "currentDifficulty" : "256", @@ -275,17 +240,6 @@ "origin" : "cd1722f3947def4cf144679da39c4c32bdc35681", "value" : "1000000000000000000" }, - "gas" : "0", - "out" : "0x", - "post" : { - "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { - "balance" : "1000000000000000000", - "code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff20600055", - "nonce" : "0", - "storage" : { - } - } - }, "pre" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { "balance" : "1000000000000000000", diff --git a/tests/files/VMTests/vmtests.json b/tests/files/VMTests/vmtests.json index bdaee2bd2..bd2fa6fa2 100644 --- a/tests/files/VMTests/vmtests.json +++ b/tests/files/VMTests/vmtests.json @@ -27,6 +27,8 @@ "value" : "1000000000000000000" }, "gas" : "9949", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -93,6 +95,8 @@ "value" : "1000000000000000000" }, "gas" : "9824", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -141,6 +145,8 @@ "value" : "1000000000000000000" }, "gas" : "9971", + "logs" : { + }, "out" : "0x", "post" : { "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : { @@ -183,6 +189,8 @@ "value" : "1000000000000000000" }, "gas" : "9999", + "logs" : { + }, "out" : "0x", "post" : { "cd1722f3947def4cf144679da39c4c32bdc35681" : { diff --git a/tests/files/index.js b/tests/files/index.js index a19fc2978..730107a27 100644 --- a/tests/files/index.js +++ b/tests/files/index.js @@ -9,6 +9,8 @@ module.exports = { txtest: require('./BasicTests/txtest'), StateTests: { stPreCompiledContracts: require('./StateTests/stPreCompiledContracts'), + stRecursiveCreate: require('./StateTests/stRecursiveCreate'), + stSpecial: require('./StateTests/stSpecialTest'), stSystemOperationsTest: require('./StateTests/stSystemOperationsTest'), }, VMTests: { @@ -17,8 +19,9 @@ module.exports = { vmBlockInfoTest: require('./VMTests/vmBlockInfoTest'), vmEnvironmentalInfoTest: require('./VMTests/vmEnvironmentalInfoTest'), vmIOandFlowOperationsTest: require('./VMTests/vmIOandFlowOperationsTest'), + vmLogTest: require('./VMTests/vmLogTest'), vmPushDupSwapTest: require('./VMTests/vmPushDupSwapTest'), vmSha3Test: require('./VMTests/vmSha3Test'), - vmtestst: require('./VMTests/vmtests'), + vmtests: require('./VMTests/vmtests'), } }; diff --git a/tests/helper/vm.go b/tests/helper/vm.go index 270fe5470..0c77e87fb 100644 --- a/tests/helper/vm.go +++ b/tests/helper/vm.go @@ -3,13 +3,18 @@ package helper import ( "math/big" + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/ethutil" "github.com/ethereum/go-ethereum/state" "github.com/ethereum/go-ethereum/vm" ) type Env struct { - state *state.State + depth int + state *state.StateDB + skipTransfer bool + Gas *big.Int origin []byte parent []byte @@ -19,15 +24,17 @@ type Env struct { time int64 difficulty *big.Int gasLimit *big.Int + + logs state.Logs } -func NewEnv(state *state.State) *Env { +func NewEnv(state *state.StateDB) *Env { return &Env{ state: state, } } -func NewEnvFromMap(state *state.State, envValues map[string]string, exeValues map[string]string) *Env { +func NewEnvFromMap(state *state.StateDB, envValues map[string]string, exeValues map[string]string) *Env { env := NewEnv(state) env.origin = ethutil.Hex2Bytes(exeValues["caller"]) @@ -48,21 +55,76 @@ func (self *Env) Coinbase() []byte { return self.coinbase } func (self *Env) Time() int64 { return self.time } func (self *Env) Difficulty() *big.Int { return self.difficulty } func (self *Env) BlockHash() []byte { return nil } -func (self *Env) State() *state.State { return self.state } +func (self *Env) State() *state.StateDB { return self.state } func (self *Env) GasLimit() *big.Int { return self.gasLimit } -func (self *Env) AddLog(*state.Log) {} +func (self *Env) AddLog(log state.Log) { + self.logs = append(self.logs, log) +} +func (self *Env) Depth() int { return self.depth } +func (self *Env) SetDepth(i int) { self.depth = i } func (self *Env) Transfer(from, to vm.Account, amount *big.Int) error { return vm.Transfer(from, to, amount) } -func RunVm(state *state.State, env, exec map[string]string) ([]byte, *big.Int, error) { - address := FromHex(exec["address"]) - caller := state.GetOrNewStateObject(FromHex(exec["caller"])) +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.SkipTransfer = self.skipTransfer + + return exec +} + +func (self *Env) Call(caller vm.ClosureRef, addr, data []byte, gas, price, value *big.Int) ([]byte, error) { + exe := self.vm(addr, data, gas, price, value) + ret, err := exe.Call(addr, caller) + self.Gas = exe.Gas + + return ret, err +} +func (self *Env) CallCode(caller vm.ClosureRef, addr, data []byte, gas, price, value *big.Int) ([]byte, error) { + exe := self.vm(caller.Address(), data, gas, price, value) + return exe.Call(addr, caller) +} + +func (self *Env) Create(caller vm.ClosureRef, addr, data []byte, gas, price, value *big.Int) ([]byte, error, vm.ClosureRef) { + exe := self.vm(addr, data, gas, price, value) + return exe.Create(caller) +} + +func RunVm(state *state.StateDB, env, exec map[string]string) ([]byte, state.Logs, *big.Int, error) { + var ( + to = FromHex(exec["address"]) + from = FromHex(exec["caller"]) + data = FromHex(exec["data"]) + gas = ethutil.Big(exec["gas"]) + price = ethutil.Big(exec["gasPrice"]) + value = ethutil.Big(exec["value"]) + ) + + caller := state.GetOrNewStateObject(from) + + vmenv := NewEnvFromMap(state, env, exec) + vmenv.skipTransfer = true + ret, err := vmenv.Call(caller, to, data, gas, price, value) + + return ret, vmenv.logs, vmenv.Gas, err +} + +func RunState(state *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"]) + data = FromHex(tx["data"]) + gas = ethutil.Big(tx["gasLimit"]) + price = ethutil.Big(tx["gasPrice"]) + value = ethutil.Big(tx["value"]) + ) + + caller := state.GetOrNewStateObject(keyPair.Address()) - evm := vm.New(NewEnvFromMap(state, env, exec), vm.DebugVmTy) - execution := vm.NewExecution(evm, address, FromHex(exec["data"]), ethutil.Big(exec["gas"]), ethutil.Big(exec["gasPrice"]), ethutil.Big(exec["value"])) - execution.SkipTransfer = true - ret, err := execution.Exec(address, caller) + vmenv := NewEnvFromMap(state, env, tx) + vmenv.origin = caller.Address() + ret, err := vmenv.Call(caller, to, data, gas, price, value) - return ret, execution.Gas, err + return ret, vmenv.logs, vmenv.Gas, err } diff --git a/tests/vm/gh_test.go b/tests/vm/gh_test.go index e25ccb550..3da37cd3a 100644 --- a/tests/vm/gh_test.go +++ b/tests/vm/gh_test.go @@ -1,135 +1,206 @@ package vm -// import ( -// "bytes" -// "testing" - -// "github.com/ethereum/go-ethereum/ethutil" -// "github.com/ethereum/go-ethereum/state" -// "github.com/ethereum/go-ethereum/tests/helper" -// ) - -// type Account struct { -// Balance string -// Code string -// Nonce string -// Storage map[string]string -// } - -// func StateObjectFromAccount(addr string, account Account) *state.StateObject { -// obj := state.NewStateObject(ethutil.Hex2Bytes(addr)) -// obj.SetBalance(ethutil.Big(account.Balance)) - -// if ethutil.IsHex(account.Code) { -// account.Code = account.Code[2:] -// } -// obj.Code = ethutil.Hex2Bytes(account.Code) -// obj.Nonce = ethutil.Big(account.Nonce).Uint64() - -// return obj -// } - -// type VmTest struct { -// Callcreates interface{} -// Env map[string]string -// Exec map[string]string -// Gas string -// Out string -// Post map[string]Account -// Pre map[string]Account -// } - -// func RunVmTest(p string, t *testing.T) { -// tests := make(map[string]VmTest) -// helper.CreateFileTests(t, p, &tests) - -// for name, test := range tests { -// state := state.New(helper.NewTrie()) -// for addr, account := range test.Pre { -// obj := StateObjectFromAccount(addr, account) -// state.SetStateObject(obj) -// } - -// ret, gas, err := helper.RunVm(state, test.Env, test.Exec) -// // When an error is returned it doesn't always mean the tests fails. -// // Have to come up with some conditional failing mechanism. -// if err != nil { -// t.Errorf("%s", err) -// helper.Log.Infoln(err) -// } - -// rexp := helper.FromHex(test.Out) -// if bytes.Compare(rexp, ret) != 0 { -// t.Errorf("%s's return failed. Expected %x, got %x\n", name, rexp, ret) -// } - -// gexp := ethutil.Big(test.Gas) -// if gexp.Cmp(gas) != 0 { -// t.Errorf("%s's gas failed. Expected %v, got %v\n", name, gexp, gas) -// } - -// for addr, account := range test.Post { -// obj := state.GetStateObject(helper.FromHex(addr)) -// for addr, value := range account.Storage { -// v := obj.GetState(helper.FromHex(addr)).Bytes() -// vexp := helper.FromHex(value) - -// if bytes.Compare(v, vexp) != 0 { -// t.Errorf("%s's : (%x: %s) storage failed. Expected %x, got %x (%v %v)\n", name, obj.Address()[0:4], addr, vexp, v, ethutil.BigD(vexp), ethutil.BigD(v)) -// } -// } -// } -// } -// } - -// // I've created a new function for each tests so it's easier to identify where the problem lies if any of them fail. -// func TestVMArithmetic(t *testing.T) { -// //helper.Logger.SetLogLevel(5) -// const fn = "../files/vmtests/vmArithmeticTest.json" -// RunVmTest(fn, t) -// } - -// /* -// deleted? -// func TestVMSystemOperation(t *testing.T) { -// helper.Logger.SetLogLevel(5) -// const fn = "../files/vmtests/vmSystemOperationsTest.json" -// RunVmTest(fn, t) -// } -// */ - -// func TestBitwiseLogicOperation(t *testing.T) { -// const fn = "../files/vmtests/vmBitwiseLogicOperationTest.json" -// RunVmTest(fn, t) -// } - -// func TestBlockInfo(t *testing.T) { -// const fn = "../files/vmtests/vmBlockInfoTest.json" -// RunVmTest(fn, t) -// } - -// func TestEnvironmentalInfo(t *testing.T) { -// const fn = "../files/vmtests/vmEnvironmentalInfoTest.json" -// RunVmTest(fn, t) -// } - -// func TestFlowOperation(t *testing.T) { -// helper.Logger.SetLogLevel(5) -// const fn = "../files/vmtests/vmIOandFlowOperationsTest.json" -// RunVmTest(fn, t) -// } - -// func TestPushDupSwap(t *testing.T) { -// const fn = "../files/vmtests/vmPushDupSwapTest.json" -// RunVmTest(fn, t) -// } - -// func TestVMSha3(t *testing.T) { -// const fn = "../files/vmtests/vmSha3Test.json" -// RunVmTest(fn, t) -// } - -// func TestVm(t *testing.T) { -// const fn = "../files/vmtests/vmtests.json" -// RunVmTest(fn, t) -// } +import ( + "bytes" + "math/big" + "strconv" + "testing" + + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/ethutil" + "github.com/ethereum/go-ethereum/state" + "github.com/ethereum/go-ethereum/tests/helper" +) + +type Account struct { + Balance string + Code string + Nonce string + Storage map[string]string +} + +type Log struct { + Address string + Data string + Topics []string +} + +func StateObjectFromAccount(addr string, account Account) *state.StateObject { + obj := state.NewStateObject(ethutil.Hex2Bytes(addr)) + obj.SetBalance(ethutil.Big(account.Balance)) + + if ethutil.IsHex(account.Code) { + account.Code = account.Code[2:] + } + obj.Code = ethutil.Hex2Bytes(account.Code) + obj.Nonce = ethutil.Big(account.Nonce).Uint64() + + return obj +} + +type Env struct { + CurrentCoinbase string + CurrentDifficulty string + CurrentGasLimit string + CurrentNumber string + CurrentTimestamp interface{} + PreviousHash string +} + +type VmTest struct { + Callcreates interface{} + //Env map[string]string + Env Env + Exec map[string]string + Transaction map[string]string + Logs map[string]Log + Gas string + Out string + Post map[string]Account + Pre map[string]Account +} + +func RunVmTest(p string, t *testing.T) { + tests := make(map[string]VmTest) + helper.CreateFileTests(t, p, &tests) + + for name, test := range tests { + statedb := state.New(helper.NewTrie()) + for addr, account := range test.Pre { + obj := StateObjectFromAccount(addr, account) + statedb.SetStateObject(obj) + } + + // XXX Yeah, yeah... + env := make(map[string]string) + env["currentCoinbase"] = test.Env.CurrentCoinbase + env["currentDifficulty"] = test.Env.CurrentDifficulty + env["currentGasLimit"] = test.Env.CurrentGasLimit + env["currentNumber"] = test.Env.CurrentNumber + env["previousHash"] = test.Env.PreviousHash + if n, ok := test.Env.CurrentTimestamp.(float64); ok { + env["currentTimestamp"] = strconv.Itoa(int(n)) + } else { + env["currentTimestamp"] = test.Env.CurrentTimestamp.(string) + } + + var ( + ret []byte + gas *big.Int + err error + logs state.Logs + ) + + if len(test.Exec) > 0 { + ret, logs, gas, err = helper.RunVm(statedb, env, test.Exec) + } else { + ret, logs, gas, err = helper.RunState(statedb, env, test.Transaction) + } + + // When an error is returned it doesn't always mean the tests fails. + // Have to come up with some conditional failing mechanism. + if err != nil { + helper.Log.Infoln(err) + } + + rexp := helper.FromHex(test.Out) + if bytes.Compare(rexp, ret) != 0 { + t.Errorf("%s's return failed. Expected %x, got %x\n", name, rexp, ret) + } + + if len(test.Gas) > 0 { + gexp := ethutil.Big(test.Gas) + if gexp.Cmp(gas) != 0 { + t.Errorf("%s's gas failed. Expected %v, got %v\n", name, gexp, gas) + } + } + + for addr, account := range test.Post { + obj := statedb.GetStateObject(helper.FromHex(addr)) + for addr, value := range account.Storage { + v := obj.GetState(helper.FromHex(addr)).Bytes() + vexp := helper.FromHex(value) + + if bytes.Compare(v, vexp) != 0 { + t.Errorf("%s's : (%x: %s) storage failed. Expected %x, got %x (%v %v)\n", name, obj.Address()[0:4], addr, vexp, v, ethutil.BigD(vexp), ethutil.BigD(v)) + } + } + } + + 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)) { + t.Errorf("bloom mismatch") + } + } + } + } +} + +// I've created a new function for each tests so it's easier to identify where the problem lies if any of them fail. +func TestVMArithmetic(t *testing.T) { + const fn = "../files/vmtests/vmArithmeticTest.json" + RunVmTest(fn, t) +} + +func TestBitwiseLogicOperation(t *testing.T) { + const fn = "../files/vmtests/vmBitwiseLogicOperationTest.json" + RunVmTest(fn, t) +} + +func TestBlockInfo(t *testing.T) { + const fn = "../files/vmtests/vmBlockInfoTest.json" + RunVmTest(fn, t) +} + +func TestEnvironmentalInfo(t *testing.T) { + const fn = "../files/vmtests/vmEnvironmentalInfoTest.json" + RunVmTest(fn, t) +} + +func TestFlowOperation(t *testing.T) { + const fn = "../files/vmtests/vmIOandFlowOperationsTest.json" + RunVmTest(fn, t) +} + +func TestPushDupSwap(t *testing.T) { + const fn = "../files/vmtests/vmPushDupSwapTest.json" + RunVmTest(fn, t) +} + +func TestVMSha3(t *testing.T) { + const fn = "../files/vmtests/vmSha3Test.json" + RunVmTest(fn, t) +} + +func TestVm(t *testing.T) { + const fn = "../files/vmtests/vmtests.json" + RunVmTest(fn, t) +} + +func TestVmLog(t *testing.T) { + const fn = "../files/vmtests/vmLogTest.json" + RunVmTest(fn, t) +} + +func TestStateSystemOperations(t *testing.T) { + const fn = "../files/StateTests/stSystemOperationsTest.json" + RunVmTest(fn, t) +} + +func TestStatePreCompiledContracts(t *testing.T) { + const fn = "../files/StateTests/stPreCompiledContracts.json" + RunVmTest(fn, t) +} + +func TestStateRecursiveCreate(t *testing.T) { + const fn = "../files/StateTests/stRecursiveCreate.json" + RunVmTest(fn, t) +} + +func TestStateSpecialTest(t *testing.T) { + const fn = "../files/StateTests/stSpecialTest.json" + RunVmTest(fn, t) +} diff --git a/ui/filter.go b/ui/filter.go index 84209861e..88faad5ca 100644 --- a/ui/filter.go +++ b/ui/filter.go @@ -1,12 +1,12 @@ package ui import ( - "github.com/ethereum/go-ethereum/chain" + "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/ethutil" ) -func NewFilterFromMap(object map[string]interface{}, eth chain.EthManager) *chain.Filter { - filter := chain.NewFilter(eth) +func NewFilterFromMap(object map[string]interface{}, eth core.EthManager) *core.Filter { + filter := core.NewFilter(eth) if object["earliest"] != nil { val := ethutil.NewValue(object["earliest"]) @@ -46,7 +46,7 @@ func NewFilterFromMap(object map[string]interface{}, eth chain.EthManager) *chai } // Conversion methodn -func mapToAccountChange(m map[string]interface{}) (d chain.AccountChange) { +func mapToAccountChange(m map[string]interface{}) (d core.AccountChange) { if str, ok := m["id"].(string); ok { d.Address = ethutil.Hex2Bytes(str) } @@ -60,9 +60,9 @@ func mapToAccountChange(m map[string]interface{}) (d chain.AccountChange) { // data can come in in the following formats: // ["aabbccdd", {id: "ccddee", at: "11223344"}], "aabbcc", {id: "ccddee", at: "1122"} -func makeAltered(v interface{}) (d []chain.AccountChange) { +func makeAltered(v interface{}) (d []core.AccountChange) { if str, ok := v.(string); ok { - d = append(d, chain.AccountChange{ethutil.Hex2Bytes(str), nil}) + d = append(d, core.AccountChange{ethutil.Hex2Bytes(str), nil}) } else if obj, ok := v.(map[string]interface{}); ok { d = append(d, mapToAccountChange(obj)) } else if slice, ok := v.([]interface{}); ok { diff --git a/ui/qt/filter.go b/ui/qt/filter.go index 96c3ab3a3..c68936401 100644 --- a/ui/qt/filter.go +++ b/ui/qt/filter.go @@ -3,12 +3,12 @@ package qt import ( "fmt" - "github.com/ethereum/go-ethereum/chain" + "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/ui" "gopkg.in/qml.v1" ) -func NewFilterFromMap(object map[string]interface{}, eth chain.EthManager) *chain.Filter { +func NewFilterFromMap(object map[string]interface{}, eth core.EthManager) *core.Filter { filter := ui.NewFilterFromMap(object, eth) if object["altered"] != nil { @@ -18,7 +18,7 @@ func NewFilterFromMap(object map[string]interface{}, eth chain.EthManager) *chai return filter } -func makeAltered(v interface{}) (d []chain.AccountChange) { +func makeAltered(v interface{}) (d []core.AccountChange) { if qList, ok := v.(*qml.List); ok { var s []interface{} qList.Convert(&s) diff --git a/vm/address.go b/vm/address.go index 235143b34..06bd35f6b 100644 --- a/vm/address.go +++ b/vm/address.go @@ -31,12 +31,16 @@ func sha256Func(in []byte) []byte { } func ripemd160Func(in []byte) []byte { - return ethutil.RightPadBytes(crypto.Ripemd160(in), 32) + return ethutil.LeftPadBytes(crypto.Ripemd160(in), 32) } func ecrecoverFunc(in []byte) []byte { // In case of an invalid sig. Defaults to return nil defer func() { recover() }() - return crypto.Ecrecover(in) + hash := in[:32] + v := ethutil.BigD(in[32:64]).Bytes()[0] - 27 + sig := append(in[64:], v) + + return ethutil.LeftPadBytes(crypto.Sha3(crypto.Ecrecover(append(hash, sig...))[1:])[12:], 32) } diff --git a/vm/analysis.go b/vm/analysis.go index 52c7143e0..fef448b7b 100644 --- a/vm/analysis.go +++ b/vm/analysis.go @@ -6,17 +6,17 @@ import ( "github.com/ethereum/go-ethereum/ethutil" ) -func analyseJumpDests(code []byte) (dests map[int64]*big.Int) { - dests = make(map[int64]*big.Int) +func analyseJumpDests(code []byte) (dests map[uint64]*big.Int) { + dests = make(map[uint64]*big.Int) lp := false var lpv *big.Int - for pc := int64(0); pc < int64(len(code)); pc++ { + for pc := uint64(0); pc < uint64(len(code)); pc++ { var op OpCode = OpCode(code[pc]) switch op { case PUSH1, PUSH2, PUSH3, PUSH4, PUSH5, PUSH6, PUSH7, PUSH8, PUSH9, PUSH10, PUSH11, PUSH12, PUSH13, PUSH14, PUSH15, PUSH16, PUSH17, PUSH18, PUSH19, PUSH20, PUSH21, PUSH22, PUSH23, PUSH24, PUSH25, PUSH26, PUSH27, PUSH28, PUSH29, PUSH30, PUSH31, PUSH32: - a := int64(op) - int64(PUSH1) + 1 - if int64(len(code)) > pc+1+a { + a := uint64(op) - uint64(PUSH1) + 1 + if uint64(len(code)) > pc+1+a { lpv = ethutil.BigD(code[pc+1 : pc+1+a]) } diff --git a/vm/closure.go b/vm/closure.go index ef9bbca93..bd5268f96 100644 --- a/vm/closure.go +++ b/vm/closure.go @@ -1,7 +1,5 @@ package vm -// TODO Re write VM to use values instead of big integers? - import ( "math/big" @@ -12,18 +10,16 @@ import ( type ClosureRef interface { ReturnGas(*big.Int, *big.Int) Address() []byte - Object() *state.StateObject + SetCode([]byte) GetStorage(*big.Int) *ethutil.Value SetStorage(*big.Int, *ethutil.Value) } -// Basic inline closure object which implement the 'closure' interface type Closure struct { caller ClosureRef - object *state.StateObject + object ClosureRef Code []byte message *state.Message - exe *Execution Gas, UsedGas, Price *big.Int @@ -31,7 +27,7 @@ type Closure struct { } // Create a new closure for the given data items -func NewClosure(msg *state.Message, caller ClosureRef, object *state.StateObject, code []byte, gas, price *big.Int) *Closure { +func NewClosure(msg *state.Message, caller ClosureRef, object ClosureRef, code []byte, gas, price *big.Int) *Closure { c := &Closure{message: msg, caller: caller, object: object, Code: code, Args: nil} // Gas should be a pointer so it can safely be reduced through the run @@ -45,26 +41,16 @@ func NewClosure(msg *state.Message, caller ClosureRef, object *state.StateObject return c } -// Retuns the x element in data slice -func (c *Closure) GetStorage(x *big.Int) *ethutil.Value { - m := c.object.GetStorage(x) - if m == nil { - return ethutil.EmptyValue() - } - - return m -} - -func (c *Closure) Get(x *big.Int) *ethutil.Value { - return c.Gets(x, big.NewInt(1)) +func (c *Closure) GetValue(x uint64) *ethutil.Value { + return c.GetRangeValue(x, 1) } -func (c *Closure) GetOp(x int) OpCode { +func (c *Closure) GetOp(x uint64) OpCode { return OpCode(c.GetByte(x)) } -func (c *Closure) GetByte(x int) byte { - if x < len(c.Code) { +func (c *Closure) GetByte(x uint64) byte { + if x < uint64(len(c.Code)) { return c.Code[x] } @@ -79,30 +65,30 @@ func (c *Closure) GetBytes(x, y int) []byte { return c.Code[x : x+y] } -func (c *Closure) Gets(x, y *big.Int) *ethutil.Value { - if x.Int64() >= int64(len(c.Code)) || y.Int64() >= int64(len(c.Code)) { +func (c *Closure) GetRangeValue(x, y uint64) *ethutil.Value { + if x >= uint64(len(c.Code)) || y >= uint64(len(c.Code)) { return ethutil.NewValue(0) } - partial := c.Code[x.Int64() : x.Int64()+y.Int64()] + 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) Address() []byte { - return c.object.Address() -} - -func (c *Closure) Call(vm VirtualMachine, args []byte) ([]byte, *big.Int, error) { - c.Args = args - - ret, err := vm.RunClosure(c) +func (c *Closure) GetStorage(x *big.Int) *ethutil.Value { + m := c.object.GetStorage(x) + if m == nil { + return ethutil.EmptyValue() + } - return ret, c.UsedGas, err + return m } func (c *Closure) Return(ret []byte) []byte { @@ -112,6 +98,9 @@ func (c *Closure) Return(ret []byte) []byte { return ret } +/* + * Gas functions + */ func (c *Closure) UseGas(gas *big.Int) bool { if c.Gas.Cmp(gas) < 0 { return false @@ -131,14 +120,17 @@ func (c *Closure) ReturnGas(gas, price *big.Int) { c.UsedGas.Sub(c.UsedGas, gas) } -func (c *Closure) Object() *state.StateObject { - return c.object -} - +/* + * Set / Get + */ func (c *Closure) Caller() ClosureRef { return c.caller } -func (self *Closure) SetExecution(exe *Execution) { - self.exe = exe +func (c *Closure) Address() []byte { + return c.object.Address() +} + +func (self *Closure) SetCode(code []byte) { + self.Code = code } diff --git a/vm/environment.go b/vm/environment.go index 5604989e1..d77fb1419 100644 --- a/vm/environment.go +++ b/vm/environment.go @@ -9,7 +9,7 @@ import ( ) type Environment interface { - State() *state.State + State() *state.StateDB Origin() []byte BlockNumber() *big.Int @@ -20,7 +20,14 @@ type Environment interface { BlockHash() []byte GasLimit() *big.Int Transfer(from, to Account, amount *big.Int) error - AddLog(*state.Log) + AddLog(state.Log) + + Depth() int + SetDepth(i int) + + Call(me ClosureRef, addr, data []byte, gas, price, value *big.Int) ([]byte, error) + CallCode(me ClosureRef, addr, data []byte, gas, price, value *big.Int) ([]byte, error) + Create(me ClosureRef, addr, data []byte, gas, price, value *big.Int) ([]byte, error, ClosureRef) } type Object interface { @@ -43,9 +50,27 @@ func Transfer(from, to Account, amount *big.Int) error { from.SubBalance(amount) to.AddBalance(amount) - // Add default LOG. Default = big(sender.addr) + 1 - //addr := ethutil.BigD(receiver.Address()) - //tx.addLog(vm.Log{sender.Address(), [][]byte{ethutil.U256(addr.Add(addr, ethutil.Big1)).Bytes()}, nil}) - return nil } + +type Log struct { + address []byte + topics [][]byte + data []byte +} + +func (self *Log) Address() []byte { + return self.address +} + +func (self *Log) Topics() [][]byte { + return self.topics +} + +func (self *Log) Data() []byte { + return self.data +} + +func (self *Log) RlpData() interface{} { + return []interface{}{self.address, ethutil.ByteSliceToInterface(self.topics), self.data} +} diff --git a/vm/execution.go b/vm/execution.go deleted file mode 100644 index c23164f82..000000000 --- a/vm/execution.go +++ /dev/null @@ -1,95 +0,0 @@ -package vm - -import ( - "fmt" - "math/big" - - "github.com/ethereum/go-ethereum/ethutil" - "github.com/ethereum/go-ethereum/state" -) - -type Execution struct { - vm VirtualMachine - address, input []byte - Gas, price, value *big.Int - object *state.StateObject - SkipTransfer bool -} - -func NewExecution(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 (self *Execution) Addr() []byte { - return self.address -} - -func (self *Execution) Exec(codeAddr []byte, caller ClosureRef) ([]byte, error) { - // Retrieve the executing code - code := self.vm.Env().State().GetCode(codeAddr) - - return self.exec(code, codeAddr, caller) -} - -func (self *Execution) exec(code, caddr []byte, caller ClosureRef) (ret []byte, err error) { - env := self.vm.Env() - - vmlogger.Debugf("pre state %x\n", env.State().Root()) - snapshot := env.State().Copy() - defer func() { - if IsDepthErr(err) || IsOOGErr(err) { - env.State().Set(snapshot) - } - vmlogger.Debugf("post state %x\n", env.State().Root()) - }() - - msg := env.State().Manifest().AddMessage(&state.Message{ - To: self.address, From: caller.Address(), - Input: self.input, - Origin: env.Origin(), - Block: env.BlockHash(), Timestamp: env.Time(), Coinbase: env.Coinbase(), Number: env.BlockNumber(), - Value: self.value, - }) - - from, to := caller.Object(), 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) - - 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(caddr).Uint64() - if p := Precompiled[naddr]; p != nil { - if self.Gas.Cmp(p.Gas) >= 0 { - ret = p.Call(self.input) - self.vm.Printf("NATIVE_FUNC(%x) => %x", naddr, ret) - } - } else { - // Create a new callable closure - c := NewClosure(msg, caller, to, code, self.Gas, self.price) - c.exe = self - - if self.vm.Depth() == MaxCallDepth { - c.UseGas(self.Gas) - - return c.Return(nil), DepthError{} - } - - // Executer the closure and get the return value (if any) - ret, _, err = c.Call(self.vm, self.input) - msg.Output = ret - } - } - - return -} - -func (self *Execution) Create(caller ClosureRef) (ret []byte, err error) { - return self.exec(self.input, nil, caller) -} diff --git a/vm/stack.go b/vm/stack.go index 2eca60ad1..98795cc03 100644 --- a/vm/stack.go +++ b/vm/stack.go @@ -147,9 +147,8 @@ func (m *Memory) Get(offset, size int64) []byte { func (self *Memory) Geti(offset, size int64) (cpy []byte) { if len(self.store) > int(offset) { - s := int64(math.Min(float64(len(self.store)), float64(offset+size))) cpy = make([]byte, size) - copy(cpy, self.store[offset:offset+s]) + copy(cpy, self.store[offset:offset+size]) return } diff --git a/vm/types.go b/vm/types.go index 0b20fb655..ec9c7e74e 100644 --- a/vm/types.go +++ b/vm/types.go @@ -163,8 +163,8 @@ const ( // 0xf0 range - closures CREATE OpCode = 0xf0 + iota CALL - RETURN CALLCODE + RETURN // 0x70 range - other SUICIDE = 0xff @@ -308,12 +308,11 @@ var opCodeToString = map[OpCode]string{ SWAP14: "SWAP14", SWAP15: "SWAP15", SWAP16: "SWAP16", - - LOG0: "LOG0", - LOG1: "LOG1", - LOG2: "LOG2", - LOG3: "LOG3", - LOG4: "LOG4", + LOG0: "LOG0", + LOG1: "LOG1", + LOG2: "LOG2", + LOG3: "LOG3", + LOG4: "LOG4", // 0xf0 range CREATE: "CREATE", diff --git a/vm/virtual_machine.go b/vm/virtual_machine.go index cc8cd39a9..5738075fb 100644 --- a/vm/virtual_machine.go +++ b/vm/virtual_machine.go @@ -1,8 +1,10 @@ package vm +import "math/big" + type VirtualMachine interface { Env() Environment - RunClosure(*Closure) ([]byte, error) + Run(me, caller ClosureRef, code []byte, value, gas, price *big.Int, data []byte) ([]byte, error) Depth() int Printf(string, ...interface{}) VirtualMachine Endl() VirtualMachine @@ -1,12 +1,6 @@ package vm -import ( - "fmt" - "math/big" - - "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/ethutil" -) +import "math/big" // BIG FAT WARNING. THIS VM IS NOT YET IS USE! // I want to get all VM tests pass first before updating this VM @@ -26,686 +20,8 @@ func New(env Environment, typ Type) VirtualMachine { } } -func (self *Vm) RunClosure(closure *Closure) (ret []byte, err error) { - self.depth++ - - // Recover from any require exception - defer func() { - if r := recover(); r != nil { - ret = closure.Return(nil) - err = fmt.Errorf("%v", r) - } - }() - - // Don't bother with the execution if there's no code. - if len(closure.Code) == 0 { - return closure.Return(nil), nil - } - - var ( - op OpCode - - mem = &Memory{} - stack = NewStack() - pc = 0 - step = 0 - require = func(m int) { - if stack.Len() < m { - panic(fmt.Sprintf("%04v (%v) stack err size = %d, required = %d", pc, op, stack.Len(), m)) - } - } - ) - - for { - // The base for all big integer arithmetic - base := new(big.Int) - - step++ - // Get the memory location of pc - op := closure.GetOp(pc) - - gas := new(big.Int) - addStepGasUsage := func(amount *big.Int) { - gas.Add(gas, amount) - } - - addStepGasUsage(GasStep) - - var newMemSize *big.Int = ethutil.Big0 - switch op { - case STOP: - gas.Set(ethutil.Big0) - case SUICIDE: - gas.Set(ethutil.Big0) - case SLOAD: - gas.Set(GasSLoad) - case SSTORE: - var mult *big.Int - y, x := stack.Peekn() - val := closure.GetStorage(x) - if val.BigInt().Cmp(ethutil.Big0) == 0 && len(y.Bytes()) > 0 { - mult = ethutil.Big2 - } else if val.BigInt().Cmp(ethutil.Big0) != 0 && len(y.Bytes()) == 0 { - mult = ethutil.Big0 - } else { - mult = ethutil.Big1 - } - gas = new(big.Int).Mul(mult, GasSStore) - case BALANCE: - gas.Set(GasBalance) - case MSTORE: - require(2) - newMemSize = calcMemSize(stack.Peek(), u256(32)) - case MLOAD: - require(1) - - newMemSize = calcMemSize(stack.Peek(), u256(32)) - case MSTORE8: - require(2) - newMemSize = calcMemSize(stack.Peek(), u256(1)) - case RETURN: - require(2) - - 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]) - case CALLDATACOPY: - require(2) - - newMemSize = calcMemSize(stack.Peek(), stack.data[stack.Len()-3]) - case CODECOPY: - require(3) - - newMemSize = calcMemSize(stack.Peek(), stack.data[stack.Len()-3]) - case EXTCODECOPY: - require(4) - - newMemSize = calcMemSize(stack.data[stack.Len()-2], stack.data[stack.Len()-4]) - case CALL, CALLCODE: - require(7) - gas.Set(GasCall) - addStepGasUsage(stack.data[stack.Len()-1]) - - x := calcMemSize(stack.data[stack.Len()-6], stack.data[stack.Len()-7]) - y := calcMemSize(stack.data[stack.Len()-4], stack.data[stack.Len()-5]) - - newMemSize = ethutil.BigMax(x, y) - case CREATE: - require(3) - gas.Set(GasCreate) - - newMemSize = calcMemSize(stack.data[stack.Len()-2], stack.data[stack.Len()-3]) - } - - if newMemSize.Cmp(ethutil.Big0) > 0 { - newMemSize.Add(newMemSize, u256(31)) - newMemSize.Div(newMemSize, u256(32)) - newMemSize.Mul(newMemSize, u256(32)) - - if newMemSize.Cmp(u256(int64(mem.Len()))) > 0 { - memGasUsage := new(big.Int).Sub(newMemSize, u256(int64(mem.Len()))) - memGasUsage.Mul(GasMemory, memGasUsage) - memGasUsage.Div(memGasUsage, u256(32)) - - addStepGasUsage(memGasUsage) - } - } - - if !closure.UseGas(gas) { - err := fmt.Errorf("Insufficient gas for %v. req %v has %v", op, gas, closure.Gas) - - closure.UseGas(closure.Gas) - - return closure.Return(nil), err - } - - mem.Resize(newMemSize.Uint64()) - - switch op { - // 0x20 range - case ADD: - require(2) - x, y := stack.Popn() - - base.Add(y, x) - - U256(base) - - // Pop result back on the stack - stack.Push(base) - case SUB: - require(2) - x, y := stack.Popn() - - base.Sub(y, x) - - U256(base) - - // Pop result back on the stack - stack.Push(base) - case MUL: - require(2) - x, y := stack.Popn() - - base.Mul(y, x) - - U256(base) - - // Pop result back on the stack - stack.Push(base) - case DIV: - require(2) - x, y := stack.Popn() - - if x.Cmp(ethutil.Big0) != 0 { - base.Div(y, x) - } - - U256(base) - - // Pop result back on the stack - stack.Push(base) - case SDIV: - require(2) - y, x := S256(stack.Pop()), S256(stack.Pop()) - - if x.Cmp(ethutil.Big0) == 0 { - base.Set(ethutil.Big0) - } else { - n := new(big.Int) - if new(big.Int).Mul(y, x).Cmp(ethutil.Big0) < 0 { - n.SetInt64(-1) - } else { - n.SetInt64(1) - } - - base.Div(y.Abs(y), x.Mul(x.Abs(x), n)) - - U256(base) - } - - stack.Push(base) - case MOD: - require(2) - x, y := stack.Popn() - - base.Mod(y, x) - - U256(base) - - stack.Push(base) - case SMOD: - require(2) - y, x := S256(stack.Pop()), S256(stack.Pop()) - - if x.Cmp(ethutil.Big0) == 0 { - base.Set(ethutil.Big0) - } else { - n := new(big.Int) - if y.Cmp(ethutil.Big0) < 0 { - n.SetInt64(-1) - } else { - n.SetInt64(1) - } - - base.Mod(y.Abs(y), x.Mul(x.Abs(x), n)) - - U256(base) - } - - stack.Push(base) - - case EXP: - require(2) - x, y := stack.Popn() - - base.Exp(y, x, Pow256) - - U256(base) - - stack.Push(base) - case NOT: - require(1) - base.Sub(Pow256, stack.Pop()) - - base = U256(base) - - stack.Push(base) - case LT: - require(2) - x, y := stack.Popn() - // x < y - if y.Cmp(x) < 0 { - stack.Push(ethutil.BigTrue) - } else { - stack.Push(ethutil.BigFalse) - } - case GT: - require(2) - x, y := stack.Popn() - - // x > y - if y.Cmp(x) > 0 { - stack.Push(ethutil.BigTrue) - } else { - stack.Push(ethutil.BigFalse) - } - - case SLT: - require(2) - y, x := S256(stack.Pop()), S256(stack.Pop()) - // x < y - if y.Cmp(S256(x)) < 0 { - stack.Push(ethutil.BigTrue) - } else { - stack.Push(ethutil.BigFalse) - } - case SGT: - require(2) - y, x := S256(stack.Pop()), S256(stack.Pop()) - - // x > y - if y.Cmp(x) > 0 { - stack.Push(ethutil.BigTrue) - } else { - stack.Push(ethutil.BigFalse) - } - - case EQ: - require(2) - x, y := stack.Popn() - - // x == y - if x.Cmp(y) == 0 { - stack.Push(ethutil.BigTrue) - } else { - stack.Push(ethutil.BigFalse) - } - case ISZERO: - require(1) - x := stack.Pop() - if x.Cmp(ethutil.BigFalse) > 0 { - stack.Push(ethutil.BigFalse) - } else { - stack.Push(ethutil.BigTrue) - } - - // 0x10 range - case AND: - require(2) - x, y := stack.Popn() - - stack.Push(base.And(y, x)) - case OR: - require(2) - x, y := stack.Popn() - - stack.Push(base.Or(y, x)) - case XOR: - require(2) - x, y := stack.Popn() - - stack.Push(base.Xor(y, x)) - case BYTE: - require(2) - val, th := stack.Popn() - if th.Cmp(big.NewInt(32)) < 0 && th.Cmp(big.NewInt(int64(len(val.Bytes())))) < 0 { - byt := big.NewInt(int64(ethutil.LeftPadBytes(val.Bytes(), 32)[th.Int64()])) - stack.Push(byt) - - } else { - stack.Push(ethutil.BigFalse) - } - case ADDMOD: - require(3) - - x := stack.Pop() - y := stack.Pop() - z := stack.Pop() - - base.Add(x, y) - base.Mod(base, z) - - U256(base) - - stack.Push(base) - case MULMOD: - require(3) - - x := stack.Pop() - y := stack.Pop() - z := stack.Pop() - - base.Mul(x, y) - base.Mod(base, z) - - U256(base) - - stack.Push(base) - - // 0x20 range - case SHA3: - require(2) - size, offset := stack.Popn() - data := crypto.Sha3(mem.Get(offset.Int64(), size.Int64())) - - stack.Push(ethutil.BigD(data)) - - // 0x30 range - case ADDRESS: - stack.Push(ethutil.BigD(closure.Address())) - - case BALANCE: - require(1) - - addr := stack.Pop().Bytes() - balance := self.env.State().GetBalance(addr) - - stack.Push(balance) - - case ORIGIN: - origin := self.env.Origin() - - stack.Push(ethutil.BigD(origin)) - - case CALLER: - caller := closure.caller.Address() - stack.Push(ethutil.BigD(caller)) - - case CALLVALUE: - value := closure.exe.value - - stack.Push(value) - - case CALLDATALOAD: - require(1) - var ( - offset = stack.Pop() - data = make([]byte, 32) - lenData = big.NewInt(int64(len(closure.Args))) - ) - - if lenData.Cmp(offset) >= 0 { - length := new(big.Int).Add(offset, ethutil.Big32) - length = ethutil.BigMin(length, lenData) - - copy(data, closure.Args[offset.Int64():length.Int64()]) - } - - stack.Push(ethutil.BigD(data)) - case CALLDATASIZE: - l := int64(len(closure.Args)) - stack.Push(big.NewInt(l)) - - case CALLDATACOPY: - var ( - size = int64(len(closure.Args)) - mOff = stack.Pop().Int64() - cOff = stack.Pop().Int64() - l = stack.Pop().Int64() - ) - - if cOff > size { - cOff = 0 - l = 0 - } else if cOff+l > size { - l = 0 - } - - code := closure.Args[cOff : cOff+l] - - mem.Set(mOff, l, code) - case CODESIZE, EXTCODESIZE: - var code []byte - if op == EXTCODECOPY { - addr := stack.Pop().Bytes() - - code = self.env.State().GetCode(addr) - } else { - code = closure.Code - } - - l := big.NewInt(int64(len(code))) - stack.Push(l) - - case CODECOPY, EXTCODECOPY: - var code []byte - if op == EXTCODECOPY { - addr := stack.Pop().Bytes() - - code = self.env.State().GetCode(addr) - } else { - code = closure.Code - } - - var ( - size = int64(len(code)) - mOff = stack.Pop().Int64() - cOff = stack.Pop().Int64() - l = stack.Pop().Int64() - ) - - if cOff > size { - cOff = 0 - l = 0 - } else if cOff+l > size { - l = 0 - } - - codeCopy := code[cOff : cOff+l] - - mem.Set(mOff, l, codeCopy) - case GASPRICE: - stack.Push(closure.Price) - - // 0x40 range - case PREVHASH: - prevHash := self.env.PrevHash() - - stack.Push(ethutil.BigD(prevHash)) - - case COINBASE: - coinbase := self.env.Coinbase() - - stack.Push(ethutil.BigD(coinbase)) - - case TIMESTAMP: - time := self.env.Time() - - stack.Push(big.NewInt(time)) - - case NUMBER: - number := self.env.BlockNumber() - - stack.Push(number) - - case DIFFICULTY: - difficulty := self.env.Difficulty() - - stack.Push(difficulty) - - case GASLIMIT: - // TODO - stack.Push(big.NewInt(0)) - - // 0x50 range - case PUSH1, PUSH2, PUSH3, PUSH4, PUSH5, PUSH6, PUSH7, PUSH8, PUSH9, PUSH10, PUSH11, PUSH12, PUSH13, PUSH14, PUSH15, PUSH16, PUSH17, PUSH18, PUSH19, PUSH20, PUSH21, PUSH22, PUSH23, PUSH24, PUSH25, PUSH26, PUSH27, PUSH28, PUSH29, PUSH30, PUSH31, PUSH32: - a := int(op - PUSH1 + 1) - val := ethutil.BigD(closure.GetBytes(int(pc+1), a)) - // Push value to stack - stack.Push(val) - - pc += a - - step += int(op) - int(PUSH1) + 1 - case POP: - require(1) - stack.Pop() - case DUP1, DUP2, DUP3, DUP4, DUP5, DUP6, DUP7, DUP8, DUP9, DUP10, DUP11, DUP12, DUP13, DUP14, DUP15, DUP16: - n := int(op - DUP1 + 1) - stack.Dupn(n) - case SWAP1, SWAP2, SWAP3, SWAP4, SWAP5, SWAP6, SWAP7, SWAP8, SWAP9, SWAP10, SWAP11, SWAP12, SWAP13, SWAP14, SWAP15, SWAP16: - n := int(op - SWAP1 + 2) - stack.Swapn(n) - - case MLOAD: - require(1) - offset := stack.Pop() - val := ethutil.BigD(mem.Get(offset.Int64(), 32)) - stack.Push(val) - - case MSTORE: // Store the value at stack top-1 in to memory at location stack top - require(2) - // Pop value of the stack - val, mStart := stack.Popn() - mem.Set(mStart.Int64(), 32, ethutil.BigToBytes(val, 256)) - - case MSTORE8: - require(2) - off := stack.Pop() - val := stack.Pop() - - mem.store[off.Int64()] = byte(val.Int64() & 0xff) - - case SLOAD: - require(1) - loc := stack.Pop() - val := closure.GetStorage(loc) - - stack.Push(val.BigInt()) - - case SSTORE: - require(2) - val, loc := stack.Popn() - closure.SetStorage(loc, ethutil.NewValue(val)) - - closure.message.AddStorageChange(loc.Bytes()) - - case JUMP: - require(1) - pc = int(stack.Pop().Int64()) - // Reduce pc by one because of the increment that's at the end of this for loop - - continue - case JUMPI: - require(2) - cond, pos := stack.Popn() - if cond.Cmp(ethutil.BigTrue) >= 0 { - pc = int(pos.Int64()) - - if closure.GetOp(int(pc)) != JUMPDEST { - return closure.Return(nil), fmt.Errorf("JUMP missed JUMPDEST %v", pc) - } - - continue - } - case JUMPDEST: - case PC: - stack.Push(u256(int64(pc))) - case MSIZE: - stack.Push(big.NewInt(int64(mem.Len()))) - case GAS: - stack.Push(closure.Gas) - // 0x60 range - case CREATE: - require(3) - - var ( - err error - value = stack.Pop() - size, offset = stack.Popn() - input = mem.Get(offset.Int64(), size.Int64()) - gas = new(big.Int).Set(closure.Gas) - - // Snapshot the current stack so we are able to - // revert back to it later. - //snapshot = self.env.State().Copy() - ) - - // Generate a new address - addr := crypto.CreateAddress(closure.Address(), closure.object.Nonce) - closure.object.Nonce++ - - closure.UseGas(closure.Gas) - - msg := NewExecution(self, addr, input, gas, closure.Price, value) - ret, err := msg.Exec(addr, closure) - if err != nil { - stack.Push(ethutil.BigFalse) - - // Revert the state as it was before. - //self.env.State().Set(snapshot) - - } else { - msg.object.Code = ret - - stack.Push(ethutil.BigD(addr)) - } - - case CALL, CALLCODE: - require(7) - - gas := stack.Pop() - // Pop gas and value of the stack. - value, addr := stack.Popn() - // Pop input size and offset - inSize, inOffset := stack.Popn() - // Pop return size and offset - retSize, retOffset := stack.Popn() - - // Get the arguments from the memory - args := mem.Get(inOffset.Int64(), inSize.Int64()) - - var executeAddr []byte - if op == CALLCODE { - executeAddr = closure.Address() - } else { - executeAddr = addr.Bytes() - } - - msg := NewExecution(self, executeAddr, args, gas, closure.Price, value) - ret, err := msg.Exec(addr.Bytes(), closure) - if err != nil { - stack.Push(ethutil.BigFalse) - } else { - stack.Push(ethutil.BigTrue) - - mem.Set(retOffset.Int64(), retSize.Int64(), ret) - } - - case RETURN: - require(2) - size, offset := stack.Popn() - ret := mem.Get(offset.Int64(), size.Int64()) - - return closure.Return(ret), nil - case SUICIDE: - require(1) - - receiver := self.env.State().GetOrNewStateObject(stack.Pop().Bytes()) - - receiver.AddAmount(closure.object.Balance()) - - closure.object.MarkForDeletion() - - fallthrough - case STOP: // Stop the closure - - return closure.Return(nil), nil - default: - vmlogger.Debugf("(pc) %-3v Invalid opcode %x\n", pc, op) - - //panic(fmt.Sprintf("Invalid opcode %x", op)) - - return closure.Return(nil), fmt.Errorf("Invalid opcode %x", op) - } - - pc++ - } +func (self *Vm) Run(me, caller ClosureRef, code []byte, value, gas, price *big.Int, data []byte) (ret []byte, err error) { + return nil, nil } func (self *Vm) Env() Environment { diff --git a/vm/vm_debug.go b/vm/vm_debug.go index 544e04a5f..0a541a769 100644 --- a/vm/vm_debug.go +++ b/vm/vm_debug.go @@ -38,8 +38,23 @@ func NewDebugVm(env Environment) *DebugVm { return &DebugVm{env: env, logTy: lt, Recoverable: true} } -func (self *DebugVm) RunClosure(closure *Closure) (ret []byte, err error) { - self.depth++ +func (self *DebugVm) Run(me, caller ClosureRef, code []byte, value, gas, price *big.Int, callData []byte) (ret []byte, err error) { + self.env.SetDepth(self.env.Depth() + 1) + + msg := self.env.State().Manifest().AddMessage(&state.Message{ + To: me.Address(), From: caller.Address(), + Input: callData, + Origin: self.env.Origin(), + Block: self.env.BlockHash(), Timestamp: self.env.Time(), Coinbase: self.env.Coinbase(), Number: self.env.BlockNumber(), + Value: value, + }) + closure := NewClosure(msg, caller, me, code, gas, price) + + if self.env.Depth() == MaxCallDepth { + closure.UseGas(gas) + + return closure.Return(nil), DepthError{} + } if self.Recoverable { // Recover from any require exception @@ -60,35 +75,35 @@ func (self *DebugVm) RunClosure(closure *Closure) (ret []byte, err error) { var ( op OpCode - destinations = analyseJumpDests(closure.Code) - mem = NewMemory() - stack = NewStack() - pc = big.NewInt(0) - step = 0 - prevStep = 0 - statedb = self.env.State() - require = func(m int) { + destinations = analyseJumpDests(closure.Code) + mem = NewMemory() + stack = NewStack() + pc uint64 = 0 + step = 0 + prevStep = 0 + statedb = self.env.State() + require = func(m int) { if stack.Len() < m { panic(fmt.Sprintf("%04v (%v) stack err size = %d, required = %d", pc, op, stack.Len(), m)) } } - jump = func(from, to *big.Int) { - p := int(to.Int64()) + jump = func(from uint64, to *big.Int) { + p := to.Uint64() self.Printf(" ~> %v", to) // Return to start if p == 0 { - pc = big.NewInt(0) + pc = 0 } else { nop := OpCode(closure.GetOp(p)) - if !(nop == JUMPDEST || destinations[from.Int64()] != nil) { + if !(nop == JUMPDEST || destinations[from] != nil) { panic(fmt.Sprintf("JUMP missed JUMPDEST (%v) %v", nop, p)) } else if nop == JUMP || nop == JUMPI { panic(fmt.Sprintf("not allowed to JUMP(I) in to JUMP")) } - pc = to + pc = to.Uint64() } @@ -96,17 +111,12 @@ func (self *DebugVm) RunClosure(closure *Closure) (ret []byte, err error) { } ) - // Debug hook - if self.Dbg != nil { - self.Dbg.SetCode(closure.Code) - } - // Don't bother with the execution if there's no code. - if len(closure.Code) == 0 { + if len(code) == 0 { return closure.Return(nil), nil } - vmlogger.Debugf("(%d) %x gas: %v (d) %x\n", self.depth, closure.Address(), closure.Gas, closure.Args) + vmlogger.Debugf("(%d) %x gas: %v (d) %x\n", self.depth, closure.Address(), closure.Gas, callData) for { prevStep = step @@ -115,26 +125,7 @@ func (self *DebugVm) RunClosure(closure *Closure) (ret []byte, err error) { step++ // Get the memory location of pc - op = closure.GetOp(int(pc.Uint64())) - - // XXX Leave this Println intact. Don't change this to the log system. - // Used for creating diffs between implementations - if self.logTy == LogTyDiff { - switch op { - case STOP, RETURN, SUICIDE: - statedb.GetStateObject(closure.Address()).EachStorage(func(key string, value *ethutil.Value) { - value.Decode() - fmt.Printf("%x %x\n", new(big.Int).SetBytes([]byte(key)).Bytes(), value.Bytes()) - }) - } - - b := pc.Bytes() - if len(b) == 0 { - b = []byte{0} - } - - fmt.Printf("%x %x %x %x\n", closure.Address(), b, []byte{byte(op)}, closure.Gas.Bytes()) - } + op = closure.GetOp(pc) gas := new(big.Int) addStepGasUsage := func(amount *big.Int) { @@ -151,7 +142,7 @@ func (self *DebugVm) RunClosure(closure *Closure) (ret []byte, err error) { // Stack checks only case ISZERO, CALLDATALOAD, POP, JUMP, NOT: // 1 require(1) - case ADD, SUB, DIV, SDIV, MOD, SMOD, EXP, LT, GT, SLT, SGT, EQ, AND, OR, XOR, BYTE: // 2 + case ADD, SUB, DIV, SDIV, MOD, SMOD, LT, GT, SLT, SGT, EQ, AND, OR, XOR, BYTE: // 2 require(2) case ADDMOD, MULMOD: // 3 require(3) @@ -165,10 +156,23 @@ func (self *DebugVm) RunClosure(closure *Closure) (ret []byte, err error) { n := int(op - LOG0) require(n + 2) - mSize, mStart := stack.Peekn() gas.Set(GasLog) addStepGasUsage(new(big.Int).Mul(big.NewInt(int64(n)), GasLog)) - addStepGasUsage(new(big.Int).Add(mSize, mStart)) + + mSize, mStart := stack.Peekn() + addStepGasUsage(mSize) + + newMemSize = calcMemSize(mStart, mSize) + 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 only case STOP: gas.Set(ethutil.Big0) @@ -255,6 +259,12 @@ func (self *DebugVm) RunClosure(closure *Closure) (ret []byte, err error) { newMemSize.Div(newMemSize, u256(32)) newMemSize.Mul(newMemSize, u256(32)) + switch op { + // Additional gas usage on *CODPY + case CALLDATACOPY, CODECOPY, EXTCODECOPY: + addStepGasUsage(new(big.Int).Div(newMemSize, u256(32))) + } + if newMemSize.Cmp(u256(int64(mem.Len()))) > 0 { memGasUsage := new(big.Int).Sub(newMemSize, u256(int64(mem.Len()))) memGasUsage.Mul(GasMemory, memGasUsage) @@ -262,7 +272,6 @@ func (self *DebugVm) RunClosure(closure *Closure) (ret []byte, err error) { addStepGasUsage(memGasUsage) - mem.Resize(newMemSize.Uint64()) } } @@ -280,6 +289,8 @@ func (self *DebugVm) RunClosure(closure *Closure) (ret []byte, err error) { return closure.Return(nil), OOG(gas, tmp) } + mem.Resize(newMemSize.Uint64()) + switch op { // 0x20 range case ADD: @@ -576,8 +587,6 @@ func (self *DebugVm) RunClosure(closure *Closure) (ret []byte, err error) { self.Printf(" => %x", caller) case CALLVALUE: - value := closure.exe.value - stack.Push(value) self.Printf(" => %v", value) @@ -585,27 +594,27 @@ func (self *DebugVm) RunClosure(closure *Closure) (ret []byte, err error) { var ( offset = stack.Pop() data = make([]byte, 32) - lenData = big.NewInt(int64(len(closure.Args))) + lenData = big.NewInt(int64(len(callData))) ) if lenData.Cmp(offset) >= 0 { length := new(big.Int).Add(offset, ethutil.Big32) length = ethutil.BigMin(length, lenData) - copy(data, closure.Args[offset.Int64():length.Int64()]) + copy(data, callData[offset.Int64():length.Int64()]) } self.Printf(" => 0x%x", data) stack.Push(ethutil.BigD(data)) case CALLDATASIZE: - l := int64(len(closure.Args)) + l := int64(len(callData)) stack.Push(big.NewInt(l)) self.Printf(" => %d", l) case CALLDATACOPY: var ( - size = int64(len(closure.Args)) + size = int64(len(callData)) mOff = stack.Pop().Int64() cOff = stack.Pop().Int64() l = stack.Pop().Int64() @@ -618,11 +627,11 @@ func (self *DebugVm) RunClosure(closure *Closure) (ret []byte, err error) { l = 0 } - code := closure.Args[cOff : cOff+l] + code := callData[cOff : cOff+l] mem.Set(mOff, l, code) - self.Printf(" => [%v, %v, %v] %x", mOff, cOff, l, code[cOff:cOff+l]) + self.Printf(" => [%v, %v, %v] %x", mOff, cOff, l, callData[cOff:cOff+l]) case CODESIZE, EXTCODESIZE: var code []byte if op == EXTCODESIZE { @@ -707,13 +716,15 @@ func (self *DebugVm) RunClosure(closure *Closure) (ret []byte, err error) { // 0x50 range case PUSH1, PUSH2, PUSH3, PUSH4, PUSH5, PUSH6, PUSH7, PUSH8, PUSH9, PUSH10, PUSH11, PUSH12, PUSH13, PUSH14, PUSH15, PUSH16, PUSH17, PUSH18, PUSH19, PUSH20, PUSH21, PUSH22, PUSH23, PUSH24, PUSH25, PUSH26, PUSH27, PUSH28, PUSH29, PUSH30, PUSH31, PUSH32: - a := big.NewInt(int64(op) - int64(PUSH1) + 1) - pc.Add(pc, ethutil.Big1) - data := closure.Gets(pc, a) + //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()) // Push value to stack stack.Push(val) - pc.Add(pc, a.Sub(a, big.NewInt(1))) + pc += a + //pc.Add(pc, a.Sub(a, big.NewInt(1))) step += int(op) - int(PUSH1) + 1 @@ -722,13 +733,9 @@ func (self *DebugVm) RunClosure(closure *Closure) (ret []byte, err error) { stack.Pop() case DUP1, DUP2, DUP3, DUP4, DUP5, DUP6, DUP7, DUP8, DUP9, DUP10, DUP11, DUP12, DUP13, DUP14, DUP15, DUP16: n := int(op - DUP1 + 1) - v := stack.Dupn(n) + stack.Dupn(n) self.Printf(" => [%d] 0x%x", n, stack.Peek().Bytes()) - - if OpCode(closure.Get(new(big.Int).Add(pc, ethutil.Big1)).Uint()) == POP && OpCode(closure.Get(new(big.Int).Add(pc, big.NewInt(2))).Uint()) == POP { - fmt.Println(toValue(v)) - } case SWAP1, SWAP2, SWAP3, SWAP4, SWAP5, SWAP6, SWAP7, SWAP8, SWAP9, SWAP10, SWAP11, SWAP12, SWAP13, SWAP14, SWAP15, SWAP16: n := int(op - SWAP1 + 2) x, y := stack.Swapn(n) @@ -737,13 +744,13 @@ func (self *DebugVm) RunClosure(closure *Closure) (ret []byte, err error) { case LOG0, LOG1, LOG2, LOG3, LOG4: n := int(op - LOG0) topics := make([][]byte, n) - mStart, mSize := stack.Pop().Int64(), stack.Pop().Int64() + mSize, mStart := stack.Pop().Int64(), stack.Pop().Int64() data := mem.Geti(mStart, mSize) for i := 0; i < n; i++ { - topics[i] = stack.Pop().Bytes() + topics[i] = ethutil.LeftPadBytes(stack.Pop().Bytes(), 32) } - log := &state.Log{closure.Address(), topics, data} + log := &Log{closure.Address(), topics, data} self.env.AddLog(log) self.Printf(" => %v", log) @@ -783,7 +790,6 @@ func (self *DebugVm) RunClosure(closure *Closure) (ret []byte, err error) { self.Printf(" {0x%x : 0x%x}", loc.Bytes(), val.Bytes()) case JUMP: - jump(pc, stack.Pop()) continue @@ -798,13 +804,14 @@ func (self *DebugVm) RunClosure(closure *Closure) (ret []byte, err error) { case JUMPDEST: case PC: - stack.Push(pc) + stack.Push(big.NewInt(int64(pc))) case MSIZE: stack.Push(big.NewInt(int64(mem.Len()))) case GAS: stack.Push(closure.Gas) // 0x60 range case CREATE: + var ( err error value = stack.Pop() @@ -826,17 +833,14 @@ func (self *DebugVm) RunClosure(closure *Closure) (ret []byte, err error) { closure.UseGas(closure.Gas) - msg := NewExecution(self, addr, input, gas, closure.Price, value) - ret, err := msg.Create(closure) + ret, err, ref := self.env.Create(closure, addr, input, gas, price, value) if err != nil { stack.Push(ethutil.BigFalse) - // Revert the state as it was before. - //self.env.State().Set(snapshot) - self.Printf("CREATE err %v", err) } else { - msg.object.Code = ret + ref.SetCode(ret) + msg.Output = ret stack.Push(ethutil.BigD(addr)) } @@ -868,14 +872,14 @@ func (self *DebugVm) RunClosure(closure *Closure) (ret []byte, err error) { executeAddr = addr.Bytes() } - msg := NewExecution(self, executeAddr, args, gas, closure.Price, value) - ret, err := msg.Exec(addr.Bytes(), closure) + ret, err := self.env.Call(closure, executeAddr, args, gas, price, value) if err != nil { stack.Push(ethutil.BigFalse) vmlogger.Debugln(err) } else { stack.Push(ethutil.BigTrue) + msg.Output = ret mem.Set(retOffset.Int64(), retSize.Int64(), ret) } @@ -914,13 +918,13 @@ func (self *DebugVm) RunClosure(closure *Closure) (ret []byte, err error) { return closure.Return(nil), fmt.Errorf("Invalid opcode %x", op) } - pc.Add(pc, ethutil.Big1) + pc++ self.Endl() if self.Dbg != nil { for _, instrNo := range self.Dbg.BreakPoints() { - if pc.Cmp(big.NewInt(instrNo)) == 0 { + if pc == uint64(instrNo) { self.Stepping = true if !self.Dbg.BreakHook(prevStep, op, mem, stack, statedb.GetStateObject(closure.Address())) { diff --git a/xeth/hexface.go b/xeth/hexface.go index 5bf9845d4..c1f49453d 100644 --- a/xeth/hexface.go +++ b/xeth/hexface.go @@ -5,8 +5,8 @@ import ( "encoding/json" "sync/atomic" - "github.com/ethereum/go-ethereum/chain" - "github.com/ethereum/go-ethereum/chain/types" + "github.com/ethereum/go-ethereum/core" + "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" @@ -16,7 +16,7 @@ type JSXEth struct { *XEth } -func NewJSXEth(eth chain.EthManager) *JSXEth { +func NewJSXEth(eth core.EthManager) *JSXEth { return &JSXEth{New(eth)} } @@ -64,7 +64,7 @@ func (self *JSXEth) PeerCount() int { func (self *JSXEth) Peers() []JSPeer { var peers []JSPeer for peer := self.obj.Peers().Front(); peer != nil; peer = peer.Next() { - p := peer.Value.(chain.Peer) + p := peer.Value.(core.Peer) // we only want connected peers if atomic.LoadInt32(p.Connected()) != 0 { peers = append(peers, *NewJSPeer(p)) @@ -178,39 +178,13 @@ func (self *JSXEth) FromNumber(str string) string { return ethutil.BigD(ethutil.Hex2Bytes(str)).String() } -func (self *JSXEth) Transact(key, toStr, valueStr, gasStr, gasPriceStr, codeStr string) (*JSReceipt, error) { - var hash []byte - var contractCreation bool - if len(toStr) == 0 { - contractCreation = true - } else { - // Check if an address is stored by this address - addr := self.World().Config().Get("NameReg").StorageString(toStr).Bytes() - if len(addr) > 0 { - hash = addr - } else { - hash = ethutil.Hex2Bytes(toStr) - } - } - - var keyPair *crypto.KeyPair - var err error - if ethutil.IsHex(key) { - keyPair, err = crypto.NewKeyPairFromSec([]byte(ethutil.Hex2Bytes(key[2:]))) - } else { - keyPair, err = crypto.NewKeyPairFromSec([]byte(ethutil.Hex2Bytes(key))) - } - - if err != nil { - return nil, err - } - +func (self *JSXEth) Transact(key, toStr, valueStr, gasStr, gasPriceStr, codeStr string) (string, error) { var ( - value = ethutil.Big(valueStr) - gas = ethutil.Big(gasStr) - gasPrice = ethutil.Big(gasPriceStr) + to []byte + value = ethutil.NewValue(valueStr) + gas = ethutil.NewValue(gasStr) + gasPrice = ethutil.NewValue(gasPriceStr) data []byte - tx *types.Transaction ) if ethutil.IsHex(codeStr) { @@ -219,30 +193,42 @@ func (self *JSXEth) Transact(key, toStr, valueStr, gasStr, gasPriceStr, codeStr data = ethutil.Hex2Bytes(codeStr) } - if contractCreation { - tx = types.NewContractCreationTx(value, gas, gasPrice, data) + if ethutil.IsHex(toStr) { + to = ethutil.Hex2Bytes(toStr[2:]) } else { - tx = types.NewTransactionMessage(hash, value, gas, gasPrice, data) + to = ethutil.Hex2Bytes(toStr) } - acc := self.obj.BlockManager().TransState().GetOrNewStateObject(keyPair.Address()) - tx.Nonce = acc.Nonce - acc.Nonce += 1 - self.obj.BlockManager().TransState().UpdateStateObject(acc) + var keyPair *crypto.KeyPair + var err error + if ethutil.IsHex(key) { + keyPair, err = crypto.NewKeyPairFromSec([]byte(ethutil.Hex2Bytes(key[2:]))) + } else { + keyPair, err = crypto.NewKeyPairFromSec([]byte(ethutil.Hex2Bytes(key))) + } - tx.Sign(keyPair.PrivateKey) - self.obj.TxPool().QueueTransaction(tx) + if err != nil { + return "", err + } - if contractCreation { - pipelogger.Infof("Contract addr %x", tx.CreationAddress(self.World().State())) + tx, err := self.XEth.Transact(keyPair, to, value, gas, gasPrice, data) + if err != nil { + return "", err + } + if types.IsContractAddr(to) { + return ethutil.Bytes2Hex(tx.CreationAddress(nil)), nil } - return NewJSReciept(contractCreation, tx.CreationAddress(self.World().State()), tx.Hash(), keyPair.Address()), nil + return ethutil.Bytes2Hex(tx.Hash()), nil } func (self *JSXEth) PushTx(txStr string) (*JSReceipt, error) { tx := types.NewTransactionFromBytes(ethutil.Hex2Bytes(txStr)) - self.obj.TxPool().QueueTransaction(tx) + err := self.obj.TxPool().Add(tx) + if err != nil { + return nil, err + } + return NewJSReciept(tx.CreatesContract(), tx.CreationAddress(self.World().State()), tx.Hash(), tx.Sender()), nil } diff --git a/xeth/js_types.go b/xeth/js_types.go index cba674416..da26439cf 100644 --- a/xeth/js_types.go +++ b/xeth/js_types.go @@ -5,8 +5,8 @@ import ( "strconv" "strings" - "github.com/ethereum/go-ethereum/chain" - "github.com/ethereum/go-ethereum/chain/types" + "github.com/ethereum/go-ethereum/core" + "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" @@ -95,7 +95,7 @@ type JSTransaction struct { Confirmations int `json:"confirmations"` } -func NewJSTx(tx *types.Transaction, state *state.State) *JSTransaction { +func NewJSTx(tx *types.Transaction, state *state.StateDB) *JSTransaction { hash := ethutil.Bytes2Hex(tx.Hash()) receiver := ethutil.Bytes2Hex(tx.Recipient) if receiver == "0000000000000000000000000000000000000000" { @@ -106,7 +106,7 @@ func NewJSTx(tx *types.Transaction, state *state.State) *JSTransaction { var data string if tx.CreatesContract() { - data = strings.Join(chain.Disassemble(tx.Data), "\n") + data = strings.Join(core.Disassemble(tx.Data), "\n") } else { data = ethutil.Bytes2Hex(tx.Data) } @@ -155,7 +155,7 @@ func NewPReciept(contractCreation bool, creationAddress, hash, address []byte) * // Peer interface exposed to QML type JSPeer struct { - ref *chain.Peer + ref *core.Peer Inbound bool `json:"isInbound"` LastSend int64 `json:"lastSend"` LastPong int64 `json:"lastPong"` @@ -167,7 +167,7 @@ type JSPeer struct { Caps string `json:"caps"` } -func NewJSPeer(peer chain.Peer) *JSPeer { +func NewJSPeer(peer core.Peer) *JSPeer { if peer == nil { return nil } diff --git a/xeth/pipe.go b/xeth/pipe.go index 8130ab72e..6da92cd23 100644 --- a/xeth/pipe.go +++ b/xeth/pipe.go @@ -5,34 +5,30 @@ package xeth */ import ( - "fmt" - "strings" - - "github.com/ethereum/go-ethereum/chain" - "github.com/ethereum/go-ethereum/chain/types" + "github.com/ethereum/go-ethereum/core" + "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/ethereum/go-ethereum/state" - "github.com/ethereum/go-ethereum/vm" ) var pipelogger = logger.NewLogger("XETH") type VmVars struct { - State *state.State + State *state.StateDB } type XEth struct { - obj chain.EthManager - blockManager *chain.BlockManager - blockChain *chain.ChainManager + obj core.EthManager + blockManager *core.BlockManager + blockChain *core.ChainManager world *World Vm VmVars } -func New(obj chain.EthManager) *XEth { +func New(obj core.EthManager) *XEth { pipe := &XEth{ obj: obj, blockManager: obj.BlockManager(), @@ -43,6 +39,9 @@ func New(obj chain.EthManager) *XEth { return pipe } +/* + * State / Account accessors + */ func (self *XEth) Balance(addr []byte) *ethutil.Value { return ethutil.NewValue(self.World().safeGet(addr).Balance) } @@ -51,28 +50,6 @@ func (self *XEth) Nonce(addr []byte) uint64 { return self.World().safeGet(addr).Nonce } -func (self *XEth) Execute(addr []byte, data []byte, value, gas, price *ethutil.Value) ([]byte, error) { - return self.ExecuteObject(&Object{self.World().safeGet(addr)}, data, value, gas, price) -} - -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 - ) - - self.Vm.State = self.World().State().Copy() - - evm := vm.New(NewEnv(self.Vm.State, block, value.BigInt(), initiator.Address()), vm.Type(ethutil.Config.VmType)) - - msg := vm.NewExecution(evm, object.Address(), data, gas.BigInt(), price.BigInt(), value.BigInt()) - ret, err := msg.Exec(object.Address(), initiator) - - fmt.Println("returned from call", ret, err) - - return ret, err -} - func (self *XEth) Block(hash []byte) *types.Block { return self.blockChain.GetBlock(hash) } @@ -81,6 +58,11 @@ func (self *XEth) Storage(addr, storageAddr []byte) *ethutil.Value { return self.World().safeGet(addr).GetStorage(ethutil.BigD(storageAddr)) } +func (self *XEth) Exists(addr []byte) bool { + return self.World().Get(addr) != nil +} + +// Converts the given private key to an address func (self *XEth) ToAddress(priv []byte) []byte { pair, err := crypto.NewKeyPairFromSec(priv) if err != nil { @@ -90,11 +72,29 @@ func (self *XEth) ToAddress(priv []byte) []byte { return pair.Address() } -func (self *XEth) Exists(addr []byte) bool { - return self.World().Get(addr) != nil +/* + * Execution helpers + */ +func (self *XEth) Execute(addr []byte, data []byte, value, gas, price *ethutil.Value) ([]byte, error) { + return self.ExecuteObject(&Object{self.World().safeGet(addr)}, data, value, gas, price) } -func (self *XEth) TransactString(key *crypto.KeyPair, rec string, value, gas, price *ethutil.Value, data []byte) ([]byte, error) { +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 + ) + + self.Vm.State = self.World().State().Copy() + + vmenv := NewEnv(self.Vm.State, block, value.BigInt(), initiator.Address()) + return vmenv.Call(initiator, object.Address(), data, gas.BigInt(), price.BigInt(), value.BigInt()) +} + +/* + * Transactional methods + */ +func (self *XEth) TransactString(key *crypto.KeyPair, rec string, value, gas, price *ethutil.Value, data []byte) (*types.Transaction, error) { // Check if an address is stored by this address var hash []byte addr := self.World().Config().Get("NameReg").StorageString(rec).Bytes() @@ -109,55 +109,54 @@ func (self *XEth) TransactString(key *crypto.KeyPair, rec string, value, gas, pr return self.Transact(key, hash, value, gas, price, data) } -func (self *XEth) Transact(key *crypto.KeyPair, rec []byte, value, gas, price *ethutil.Value, data []byte) ([]byte, error) { +func (self *XEth) Transact(key *crypto.KeyPair, to []byte, value, gas, price *ethutil.Value, data []byte) (*types.Transaction, error) { var hash []byte var contractCreation bool - if rec == nil { + if types.IsContractAddr(to) { contractCreation = true + } else { + // Check if an address is stored by this address + addr := self.World().Config().Get("NameReg").Storage(to).Bytes() + if len(addr) > 0 { + hash = addr + } else { + hash = to + } } var tx *types.Transaction - // Compile and assemble the given data if contractCreation { - script, err := ethutil.Compile(string(data), false) - if err != nil { - return nil, err - } - - tx = types.NewContractCreationTx(value.BigInt(), gas.BigInt(), price.BigInt(), script) + tx = types.NewContractCreationTx(value.BigInt(), gas.BigInt(), price.BigInt(), data) } else { - data := ethutil.StringToByteFunc(string(data), func(s string) (ret []byte) { - slice := strings.Split(s, "\n") - for _, dataItem := range slice { - d := ethutil.FormatData(dataItem) - ret = append(ret, d...) - } - return - }) - tx = types.NewTransactionMessage(hash, value.BigInt(), gas.BigInt(), price.BigInt(), data) } - acc := self.blockManager.TransState().GetOrNewStateObject(key.Address()) - tx.Nonce = acc.Nonce - acc.Nonce += 1 - self.blockManager.TransState().UpdateStateObject(acc) + state := self.blockManager.TransState() + nonce := state.GetNonce(key.Address()) + tx.Nonce = nonce tx.Sign(key.PrivateKey) - self.obj.TxPool().QueueTransaction(tx) + err := self.obj.TxPool().Add(tx) + if err != nil { + return nil, err + } + + state.SetNonce(key.Address(), nonce+1) if contractCreation { addr := tx.CreationAddress(self.World().State()) pipelogger.Infof("Contract addr %x\n", addr) - - return addr, nil } - return tx.Hash(), nil + return tx, nil } func (self *XEth) PushTx(tx *types.Transaction) ([]byte, error) { - self.obj.TxPool().QueueTransaction(tx) + err := self.obj.TxPool().Add(tx) + if err != nil { + return nil, err + } + if tx.Recipient == nil { addr := tx.CreationAddress(self.World().State()) pipelogger.Infof("Contract addr %x\n", addr) diff --git a/xeth/vm_env.go b/xeth/vm_env.go index 10575ad79..ce53e9a30 100644 --- a/xeth/vm_env.go +++ b/xeth/vm_env.go @@ -2,19 +2,23 @@ package xeth import ( "math/big" - "github.com/ethereum/go-ethereum/chain/types" + + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/state" "github.com/ethereum/go-ethereum/vm" ) type VMEnv struct { - state *state.State + state *state.StateDB block *types.Block value *big.Int sender []byte + + depth int } -func NewEnv(state *state.State, block *types.Block, value *big.Int, sender []byte) *VMEnv { +func NewEnv(state *state.StateDB, block *types.Block, value *big.Int, sender []byte) *VMEnv { return &VMEnv{ state: state, block: block, @@ -31,9 +35,33 @@ 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.value } -func (self *VMEnv) State() *state.State { return self.state } +func (self *VMEnv) State() *state.StateDB { return self.state } func (self *VMEnv) GasLimit() *big.Int { return self.block.GasLimit } -func (self *VMEnv) AddLog(*state.Log) {} +func (self *VMEnv) Depth() int { return self.depth } +func (self *VMEnv) SetDepth(i int) { self.depth = i } +func (self *VMEnv) AddLog(log state.Log) { + self.state.AddLog(log) +} func (self *VMEnv) Transfer(from, to vm.Account, amount *big.Int) error { return vm.Transfer(from, to, amount) } + +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) +} + +func (self *VMEnv) Call(me vm.ClosureRef, addr, data []byte, gas, price, value *big.Int) ([]byte, error) { + exe := self.vm(addr, data, gas, price, value) + return exe.Call(addr, me) +} +func (self *VMEnv) CallCode(me vm.ClosureRef, addr, data []byte, gas, price, value *big.Int) ([]byte, error) { + exe := self.vm(me.Address(), data, gas, price, value) + return exe.Call(addr, me) +} + +func (self *VMEnv) Create(me vm.ClosureRef, addr, data []byte, gas, price, value *big.Int) ([]byte, error, vm.ClosureRef) { + exe := self.vm(addr, data, gas, price, value) + return exe.Create(me) +} diff --git a/xeth/world.go b/xeth/world.go index 6fb757d67..c5c20c224 100644 --- a/xeth/world.go +++ b/xeth/world.go @@ -22,7 +22,7 @@ func (self *XEth) World() *World { return self.world } -func (self *World) State() *state.State { +func (self *World) State() *state.StateDB { return self.pipe.blockManager.CurrentState() } |