diff --git a/state/state_object.go b/state/state_object.go index 487952a022..51ec95efad 100644 --- a/state/state_object.go +++ b/state/state_object.go @@ -290,7 +290,7 @@ func (c *StateObject) Init() Code { return c.initCode } -func (self *StateObject) Trie() *trie.Trie { +func (self *StateObject) Trie() *trie.SecureTrie { return self.State.trie } diff --git a/state/statedb.go b/state/statedb.go index 7e2b24b941..ee37c2e68e 100644 --- a/state/statedb.go +++ b/state/statedb.go @@ -18,7 +18,7 @@ var statelogger = logger.NewLogger("STATE") // * Accounts type StateDB struct { db ethutil.Database - trie *trie.Trie + trie *trie.SecureTrie stateObjects map[string]*StateObject @@ -29,7 +29,7 @@ type StateDB struct { // Create a new state from a given trie func New(root []byte, db ethutil.Database) *StateDB { - trie := trie.New(ethutil.CopyBytes(root), db) + trie := trie.NewSecure(ethutil.CopyBytes(root), db) return &StateDB{db: db, trie: trie, stateObjects: make(map[string]*StateObject), refund: make(map[string]*big.Int)} } diff --git a/trie/secure_trie.go b/trie/secure_trie.go index f49547ed89..b9fa376b81 100644 --- a/trie/secure_trie.go +++ b/trie/secure_trie.go @@ -30,3 +30,7 @@ func (self *SecureTrie) Delete(key []byte) Node { func (self *SecureTrie) DeleteString(key string) Node { return self.Delete([]byte(key)) } + +func (self *SecureTrie) Copy() *SecureTrie { + return &SecureTrie{self.Trie.Copy()} +}