Commit 5f7684bd authored by han0110's avatar han0110

fix: remove redundant storage fetch and fetch absense proof of account to handle same issue

parent 6842f478
...@@ -354,11 +354,10 @@ func (s *stateObject) updateTrie(db Database) Trie { ...@@ -354,11 +354,10 @@ func (s *stateObject) updateTrie(db Database) Trie {
s.originStorage[key] = value s.originStorage[key] = value
var v []byte var v []byte
oracle.PrefetchStorage(db.BlockNumber, s.address, key)
// Get absense proof of current key in case the deletion make the extension node to short node.
oracle.PrefetchStorage(big.NewInt(db.BlockNumber.Int64()+1), s.address, key)
if (value == common.Hash{}) { if (value == common.Hash{}) {
//fmt.Println("delete", s.address, key) //fmt.Println("delete", s.address, key)
// Get absense proof of key in case the deletion needs the sister node.
oracle.PrefetchStorage(big.NewInt(db.BlockNumber.Int64()+1), s.address, key)
s.setError(tr.TryDelete(key[:])) s.setError(tr.TryDelete(key[:]))
} else { } else {
//fmt.Println("update", s.address, key, value) //fmt.Println("update", s.address, key, value)
......
...@@ -456,6 +456,8 @@ func (s *StateDB) deleteStateObject(obj *stateObject) { ...@@ -456,6 +456,8 @@ func (s *StateDB) deleteStateObject(obj *stateObject) {
} }
// Delete the account from the trie // Delete the account from the trie
addr := obj.Address() addr := obj.Address()
// Get absense proof of account in case the deletion needs the sister node.
oracle.PrefetchAccount(big.NewInt(s.db.BlockNumber.Int64()+1), addr)
if err := s.trie.TryDelete(addr[:]); err != nil { if err := s.trie.TryDelete(addr[:]); err != nil {
s.setError(fmt.Errorf("deleteStateObject (%x) error: %v", addr[:], err)) s.setError(fmt.Errorf("deleteStateObject (%x) error: %v", addr[:], err))
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment