Skip to content

Commit 463a9b7

Browse files
authored
chore(trie): GetChangedNodeHashes returns both inserted and deleted node hashes (#2832)
1 parent 879d065 commit 463a9b7

File tree

3 files changed

+19
-32
lines changed

3 files changed

+19
-32
lines changed

dot/state/storage.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,12 +85,11 @@ func (s *StorageState) StoreTrie(ts *rtstorage.TrieState, header *types.Header)
8585
}
8686

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

93-
deletedMerkleValues := ts.GetDeletedMerkleValues()
9493
err = s.pruner.StoreJournalRecord(deletedMerkleValues, insertedMerkleValues, header.Hash(), int64(header.Number))
9594
if err != nil {
9695
return err

lib/runtime/storage/trie.go

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -271,18 +271,10 @@ func (s *TrieState) LoadCodeHash() (common.Hash, error) {
271271
return common.Blake2bHash(code)
272272
}
273273

274-
// GetInsertedMerkleValues returns the set of all node Merkle value inserted
275-
// into the state trie since the last block produced.
276-
func (s *TrieState) GetInsertedMerkleValues() (merkleValues map[string]struct{}, err error) {
274+
// GetChangedNodeHashes returns the two sets of hashes for all nodes
275+
// inserted and deleted in the state trie since the last block produced (trie snapshot).
276+
func (s *TrieState) GetChangedNodeHashes() (inserted, deleted map[string]struct{}, err error) {
277277
s.lock.RLock()
278278
defer s.lock.RUnlock()
279-
return s.t.GetInsertedMerkleValues()
280-
}
281-
282-
// GetDeletedMerkleValues returns the set of all node Merkle values deleted
283-
// from the state trie since the last block produced.
284-
func (s *TrieState) GetDeletedMerkleValues() (merkleValues map[string]struct{}) {
285-
s.lock.RLock()
286-
defer s.lock.RUnlock()
287-
return s.t.GetDeletedMerkleValues()
279+
return s.t.GetChangedNodeHashes()
288280
}

lib/trie/database.go

Lines changed: 14 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -363,15 +363,22 @@ func (t *Trie) writeDirtyNode(db chaindb.Batch, n *Node) (err error) {
363363
return nil
364364
}
365365

366-
// GetInsertedMerkleValues returns the set of node Merkle values
367-
// for each node that was inserted in the state trie since the last snapshot.
368-
func (t *Trie) GetInsertedMerkleValues() (merkleValues map[string]struct{}, err error) {
369-
merkleValues = make(map[string]struct{})
370-
err = t.getInsertedNodeHashesAtNode(t.root, merkleValues)
366+
// GetChangedNodeHashes returns the two sets of hashes for all nodes
367+
// inserted and deleted in the state trie since the last snapshot.
368+
// Returned maps are safe for mutation.
369+
func (t *Trie) GetChangedNodeHashes() (inserted, deleted map[string]struct{}, err error) {
370+
inserted = make(map[string]struct{})
371+
err = t.getInsertedNodeHashesAtNode(t.root, inserted)
371372
if err != nil {
372-
return nil, err
373+
return nil, nil, err
373374
}
374-
return merkleValues, nil
375+
376+
deleted = make(map[string]struct{}, len(t.deletedMerkleValues))
377+
for k := range t.deletedMerkleValues {
378+
deleted[k] = struct{}{}
379+
}
380+
381+
return inserted, deleted, nil
375382
}
376383

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

412419
return nil
413420
}
414-
415-
// GetDeletedMerkleValues returns a set of all the node Merkle values for each
416-
// node that was deleted from the trie since the last snapshot was made.
417-
// The returned set is a copy of the internal set to prevent data corruption.
418-
func (t *Trie) GetDeletedMerkleValues() (merkleValues map[string]struct{}) {
419-
merkleValues = make(map[string]struct{}, len(t.deletedMerkleValues))
420-
for k := range t.deletedMerkleValues {
421-
merkleValues[k] = struct{}{}
422-
}
423-
return merkleValues
424-
}

0 commit comments

Comments
 (0)