diff options
author | Péter Szilágyi <peterke@gmail.com> | 2016-01-12 00:20:31 +0800 |
---|---|---|
committer | Péter Szilágyi <peterke@gmail.com> | 2016-01-12 00:21:39 +0800 |
commit | 752c75fb21ad151204f2aadeee1fff597e013aa2 (patch) | |
tree | f2d3d19ba6c7e112c4764f1167b2ce91e8e45f88 | |
parent | 1b8566a7b137d68c5c7c42d6300378d7ebf21c49 (diff) | |
download | dexon-752c75fb21ad151204f2aadeee1fff597e013aa2.tar dexon-752c75fb21ad151204f2aadeee1fff597e013aa2.tar.gz dexon-752c75fb21ad151204f2aadeee1fff597e013aa2.tar.bz2 dexon-752c75fb21ad151204f2aadeee1fff597e013aa2.tar.lz dexon-752c75fb21ad151204f2aadeee1fff597e013aa2.tar.xz dexon-752c75fb21ad151204f2aadeee1fff597e013aa2.tar.zst dexon-752c75fb21ad151204f2aadeee1fff597e013aa2.zip |
core/vm: resolve circular dependency to debug vm storage
-rw-r--r-- | core/vm/contract.go | 7 | ||||
-rw-r--r-- | core/vm/environment.go | 1 | ||||
-rw-r--r-- | core/vm/jit_test.go | 17 | ||||
-rw-r--r-- | core/vm/vm.go | 9 |
4 files changed, 20 insertions, 14 deletions
diff --git a/core/vm/contract.go b/core/vm/contract.go index 95417e747..5981dcca0 100644 --- a/core/vm/contract.go +++ b/core/vm/contract.go @@ -27,6 +27,7 @@ type ContractRef interface { ReturnGas(*big.Int, *big.Int) Address() common.Address SetCode([]byte) + EachStorage(cb func(key, value []byte)) } // Contract represents an ethereum contract in the state database. It contains @@ -124,3 +125,9 @@ func (self *Contract) SetCallCode(addr *common.Address, code []byte) { self.Code = code self.CodeAddr = addr } + +// EachStorage iterates the contract's storage and calls a method for every key +// value pair. +func (self *Contract) EachStorage(cb func(key, value []byte)) { + self.caller.EachStorage(cb) +} diff --git a/core/vm/environment.go b/core/vm/environment.go index 299d12674..4fee583bf 100644 --- a/core/vm/environment.go +++ b/core/vm/environment.go @@ -121,4 +121,5 @@ type Account interface { Address() common.Address ReturnGas(*big.Int, *big.Int) SetCode([]byte) + EachStorage(cb func(key, value []byte)) } diff --git a/core/vm/jit_test.go b/core/vm/jit_test.go index aa97e5184..8c50ed0f5 100644 --- a/core/vm/jit_test.go +++ b/core/vm/jit_test.go @@ -125,14 +125,15 @@ type vmBench struct { type account struct{} -func (account) SubBalance(amount *big.Int) {} -func (account) AddBalance(amount *big.Int) {} -func (account) SetBalance(*big.Int) {} -func (account) SetNonce(uint64) {} -func (account) Balance() *big.Int { return nil } -func (account) Address() common.Address { return common.Address{} } -func (account) ReturnGas(*big.Int, *big.Int) {} -func (account) SetCode([]byte) {} +func (account) SubBalance(amount *big.Int) {} +func (account) AddBalance(amount *big.Int) {} +func (account) SetBalance(*big.Int) {} +func (account) SetNonce(uint64) {} +func (account) Balance() *big.Int { return nil } +func (account) Address() common.Address { return common.Address{} } +func (account) ReturnGas(*big.Int, *big.Int) {} +func (account) SetCode([]byte) {} +func (account) EachStorage(cb func(key, value []byte)) {} func runVmBench(test vmBench, b *testing.B) { var sender account diff --git a/core/vm/vm.go b/core/vm/vm.go index 4b03e55f0..8e07aaa89 100644 --- a/core/vm/vm.go +++ b/core/vm/vm.go @@ -376,12 +376,9 @@ func (self *Vm) log(pc uint64, op OpCode, gas, cost *big.Int, memory *Memory, st stck[i] = new(big.Int).Set(item) } storage := make(map[common.Hash][]byte) - /* - object := contract.self.(*state.StateObject) - object.EachStorage(func(k, v []byte) { - storage[common.BytesToHash(k)] = v - }) - */ + contract.self.EachStorage(func(k, v []byte) { + storage[common.BytesToHash(k)] = v + }) self.env.AddStructLog(StructLog{pc, op, new(big.Int).Set(gas), cost, mem, stck, storage, err}) } } |