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 7655b97
Showing 1 changed file with 18 additions and 0 deletions.
18 changes: 18 additions & 0 deletions core/state/database.go
Original file line number Diff line number Diff line change
Expand Up @@ -238,6 +238,13 @@ 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
Expand All @@ -247,6 +254,17 @@ func (db *cachingDB) OpenTrie(root common.Hash) (Trie, error) {

// 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
Expand Down

0 comments on commit 7655b97

Please sign in to comment.