aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPéter Szilágyi <peterke@gmail.com>2016-01-12 00:20:31 +0800
committerPéter Szilágyi <peterke@gmail.com>2016-01-12 00:21:39 +0800
commit752c75fb21ad151204f2aadeee1fff597e013aa2 (patch)
treef2d3d19ba6c7e112c4764f1167b2ce91e8e45f88
parent1b8566a7b137d68c5c7c42d6300378d7ebf21c49 (diff)
downloaddexon-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.go7
-rw-r--r--core/vm/environment.go1
-rw-r--r--core/vm/jit_test.go17
-rw-r--r--core/vm/vm.go9
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})
}
}