Skip to content

Commit

Permalink
chore(trie): GetChangedNodeHashes returns both inserted and deleted…
Browse files Browse the repository at this point in the history
… node hashes (#2832)
  • Loading branch information
qdm12 authored Nov 9, 2022
1 parent 879d065 commit 463a9b7
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 32 deletions.
3 changes: 1 addition & 2 deletions dot/state/storage.go
Original file line number Diff line number Diff line change
Expand Up @@ -85,12 +85,11 @@ func (s *StorageState) StoreTrie(ts *rtstorage.TrieState, header *types.Header)
}

if header != nil {
insertedMerkleValues, err := ts.GetInsertedMerkleValues()
insertedMerkleValues, deletedMerkleValues, err := ts.GetChangedNodeHashes()
if err != nil {
return fmt.Errorf("failed to get state trie inserted keys: block %s %w", header.Hash(), err)
}

deletedMerkleValues := ts.GetDeletedMerkleValues()
err = s.pruner.StoreJournalRecord(deletedMerkleValues, insertedMerkleValues, header.Hash(), int64(header.Number))
if err != nil {
return err
Expand Down
16 changes: 4 additions & 12 deletions lib/runtime/storage/trie.go
Original file line number Diff line number Diff line change
Expand Up @@ -271,18 +271,10 @@ func (s *TrieState) LoadCodeHash() (common.Hash, error) {
return common.Blake2bHash(code)
}

// GetInsertedMerkleValues returns the set of all node Merkle value inserted
// into the state trie since the last block produced.
func (s *TrieState) GetInsertedMerkleValues() (merkleValues map[string]struct{}, err error) {
// GetChangedNodeHashes returns the two sets of hashes for all nodes
// inserted and deleted in the state trie since the last block produced (trie snapshot).
func (s *TrieState) GetChangedNodeHashes() (inserted, deleted map[string]struct{}, err error) {
s.lock.RLock()
defer s.lock.RUnlock()
return s.t.GetInsertedMerkleValues()
}

// GetDeletedMerkleValues returns the set of all node Merkle values deleted
// from the state trie since the last block produced.
func (s *TrieState) GetDeletedMerkleValues() (merkleValues map[string]struct{}) {
s.lock.RLock()
defer s.lock.RUnlock()
return s.t.GetDeletedMerkleValues()
return s.t.GetChangedNodeHashes()
}
32 changes: 14 additions & 18 deletions lib/trie/database.go
Original file line number Diff line number Diff line change
Expand Up @@ -363,15 +363,22 @@ func (t *Trie) writeDirtyNode(db chaindb.Batch, n *Node) (err error) {
return nil
}

// GetInsertedMerkleValues returns the set of node Merkle values
// for each node that was inserted in the state trie since the last snapshot.
func (t *Trie) GetInsertedMerkleValues() (merkleValues map[string]struct{}, err error) {
merkleValues = make(map[string]struct{})
err = t.getInsertedNodeHashesAtNode(t.root, merkleValues)
// GetChangedNodeHashes returns the two sets of hashes for all nodes
// inserted and deleted in the state trie since the last snapshot.
// Returned maps are safe for mutation.
func (t *Trie) GetChangedNodeHashes() (inserted, deleted map[string]struct{}, err error) {
inserted = make(map[string]struct{})
err = t.getInsertedNodeHashesAtNode(t.root, inserted)
if err != nil {
return nil, err
return nil, nil, err
}
return merkleValues, nil

deleted = make(map[string]struct{}, len(t.deletedMerkleValues))
for k := range t.deletedMerkleValues {
deleted[k] = struct{}{}
}

return inserted, deleted, nil
}

func (t *Trie) getInsertedNodeHashesAtNode(n *Node, merkleValues map[string]struct{}) (err error) {
Expand Down Expand Up @@ -411,14 +418,3 @@ func (t *Trie) getInsertedNodeHashesAtNode(n *Node, merkleValues map[string]stru

return nil
}

// GetDeletedMerkleValues returns a set of all the node Merkle values for each
// node that was deleted from the trie since the last snapshot was made.
// The returned set is a copy of the internal set to prevent data corruption.
func (t *Trie) GetDeletedMerkleValues() (merkleValues map[string]struct{}) {
merkleValues = make(map[string]struct{}, len(t.deletedMerkleValues))
for k := range t.deletedMerkleValues {
merkleValues[k] = struct{}{}
}
return merkleValues
}

0 comments on commit 463a9b7

Please sign in to comment.