Skip to content

Commit

Permalink
fix: use cache first when get StorageTrie/Trie
Browse files Browse the repository at this point in the history
  • Loading branch information
krish-nr committed Oct 19, 2023
1 parent 0b3e557 commit d3e61fb
Showing 1 changed file with 20 additions and 0 deletions.
20 changes: 20 additions & 0 deletions core/state/database.go
Original file line number Diff line number Diff line change
Expand Up @@ -238,19 +238,39 @@ func (db *cachingDB) purgeLoop() {

// OpenTrie opens the main account trie at a specific root hash.
func (db *cachingDB) OpenTrie(root common.Hash) (Trie, error) {
//try cache first
if db.accountTrieCache != nil {
if tr, ok := db.accountTrieCache.Get(root); ok {
return tr.(*trie.SecureTrie), nil
}
}

tr, err := trie.NewStateTrie(trie.StateTrieID(root), db.triedb)
if err != nil {
return nil, err
}

return tr, nil
}

// OpenStorageTrie opens the storage trie of an account.
func (db *cachingDB) OpenStorageTrie(stateRoot common.Hash, addrHash, root common.Hash) (Trie, error) {
// try cache first
if db.storageTrieCache != nil {
if tries, exist := db.storageTrieCache.Get(addrHash); exist {
for _, triePair := range tries {
if triePair != nil && triePair.root == root {
return triePair.trie.(*trie.SecureTrie).Copy(), nil
}
}
}
}

tr, err := trie.NewStateTrie(trie.StorageTrieID(stateRoot, addrHash, root), db.triedb)
if err != nil {
return nil, err
}

return tr, nil
}

Expand Down

0 comments on commit d3e61fb

Please sign in to comment.