aboutsummaryrefslogtreecommitdiffstats
path: root/core/state
diff options
context:
space:
mode:
authorMartin Holst Swende <martin@swende.se>2018-08-12 20:47:03 +0800
committerPéter Szilágyi <peterke@gmail.com>2018-09-18 18:08:32 +0800
commitcaa2c23a38141911a570ba098a940b4fdbf0aa88 (patch)
treedf85df9790ac43a17d16b08538eb6c629efb7af7 /core/state
parent58374e28d95c03d8b0e6d9035c0fb92fad3e865e (diff)
downloadgo-tangerine-caa2c23a38141911a570ba098a940b4fdbf0aa88.tar
go-tangerine-caa2c23a38141911a570ba098a940b4fdbf0aa88.tar.gz
go-tangerine-caa2c23a38141911a570ba098a940b4fdbf0aa88.tar.bz2
go-tangerine-caa2c23a38141911a570ba098a940b4fdbf0aa88.tar.lz
go-tangerine-caa2c23a38141911a570ba098a940b4fdbf0aa88.tar.xz
go-tangerine-caa2c23a38141911a570ba098a940b4fdbf0aa88.tar.zst
go-tangerine-caa2c23a38141911a570ba098a940b4fdbf0aa88.zip
core,state: finish implementing Eip 1283
Diffstat (limited to 'core/state')
-rw-r--r--core/state/state_object.go10
-rw-r--r--core/state/statedb.go8
2 files changed, 18 insertions, 0 deletions
diff --git a/core/state/state_object.go b/core/state/state_object.go
index 0b72d0114..b05afec93 100644
--- a/core/state/state_object.go
+++ b/core/state/state_object.go
@@ -183,6 +183,16 @@ func (self *stateObject) GetState(db Database, key common.Hash) common.Hash {
return value
}
+// GetOriginalStateValue returns the state value that is currently in the Trie, that is, ignoring any
+// changes that have been made but not yet written to trie.
+func (self *stateObject) GetOriginalStateValue(db Database, key common.Hash) common.Hash{
+ if original, exist:= self.originalValue[key]; exist {
+ // original value has been set, return it
+ return original
+ }
+ return self.GetState(db, key)
+}
+
// SetState updates a value in account storage.
func (self *stateObject) SetState(db Database, key, value common.Hash) {
prev := self.GetState(db, key)
diff --git a/core/state/statedb.go b/core/state/statedb.go
index d9300012d..515ff57bf 100644
--- a/core/state/statedb.go
+++ b/core/state/statedb.go
@@ -255,6 +255,14 @@ func (self *StateDB) GetState(addr common.Address, bhash common.Hash) common.Has
return common.Hash{}
}
+func (self *StateDB) GetStateOriginal(addr common.Address, bhash common.Hash) common.Hash {
+ stateObject := self.getStateObject(addr)
+ if stateObject != nil {
+ return stateObject.GetOriginalStateValue(self.db, bhash)
+ }
+ return common.Hash{}
+}
+
// Database retrieves the low level database supporting the lower level trie ops.
func (self *StateDB) Database() Database {
return self.db