eth/protocol/snap: add comments

This commit is contained in:
Gary Rong 2023-10-18 11:43:42 +08:00
parent 03e5cfad11
commit 3be59e32cd
2 changed files with 22 additions and 4 deletions

View file

@ -756,6 +756,9 @@ func (s *Syncer) loadSyncStatus() {
rawdb.WriteTrieNode(task.genBatch, common.Hash{}, path, hash, blob, s.scheme) rawdb.WriteTrieNode(task.genBatch, common.Hash{}, path, hash, blob, s.scheme)
}) })
if s.scheme == rawdb.PathScheme { if s.scheme == rawdb.PathScheme {
// Configure the dangling node cleaner and also filter out boundary nodes
// only in the context of the path scheme. Deletion is forbidden in the
// hash scheme, as it can disrupt state completeness.
options = options.WithCleaner(func(path []byte) { options = options.WithCleaner(func(path []byte) {
s.cleanPath(task.genBatch, common.Hash{}, path) s.cleanPath(task.genBatch, common.Hash{}, path)
}) })
@ -780,6 +783,9 @@ func (s *Syncer) loadSyncStatus() {
rawdb.WriteTrieNode(subtask.genBatch, owner, path, hash, blob, s.scheme) rawdb.WriteTrieNode(subtask.genBatch, owner, path, hash, blob, s.scheme)
}) })
if s.scheme == rawdb.PathScheme { if s.scheme == rawdb.PathScheme {
// Configure the dangling node cleaner and also filter out boundary nodes
// only in the context of the path scheme. Deletion is forbidden in the
// hash scheme, as it can disrupt state completeness.
options = options.WithCleaner(func(path []byte) { options = options.WithCleaner(func(path []byte) {
s.cleanPath(subtask.genBatch, owner, path) s.cleanPath(subtask.genBatch, owner, path)
}) })
@ -844,6 +850,9 @@ func (s *Syncer) loadSyncStatus() {
rawdb.WriteTrieNode(batch, common.Hash{}, path, hash, blob, s.scheme) rawdb.WriteTrieNode(batch, common.Hash{}, path, hash, blob, s.scheme)
}) })
if s.scheme == rawdb.PathScheme { if s.scheme == rawdb.PathScheme {
// Configure the dangling node cleaner and also filter out boundary nodes
// only in the context of the path scheme. Deletion is forbidden in the
// hash scheme, as it can disrupt state completeness.
options = options.WithCleaner(func(path []byte) { options = options.WithCleaner(func(path []byte) {
s.cleanPath(batch, common.Hash{}, path) s.cleanPath(batch, common.Hash{}, path)
}) })
@ -2080,6 +2089,9 @@ func (s *Syncer) processStorageResponse(res *storageResponse) {
rawdb.WriteTrieNode(batch, owner, path, hash, blob, s.scheme) rawdb.WriteTrieNode(batch, owner, path, hash, blob, s.scheme)
}) })
if s.scheme == rawdb.PathScheme { if s.scheme == rawdb.PathScheme {
// Configure the dangling node cleaner and also filter out boundary nodes
// only in the context of the path scheme. Deletion is forbidden in the
// hash scheme, as it can disrupt state completeness.
options = options.WithCleaner(func(path []byte) { options = options.WithCleaner(func(path []byte) {
s.cleanPath(batch, owner, path) s.cleanPath(batch, owner, path)
}) })
@ -2143,6 +2155,12 @@ func (s *Syncer) processStorageResponse(res *storageResponse) {
rawdb.WriteTrieNode(batch, account, path, hash, blob, s.scheme) rawdb.WriteTrieNode(batch, account, path, hash, blob, s.scheme)
}) })
if s.scheme == rawdb.PathScheme { if s.scheme == rawdb.PathScheme {
// Configure the dangling node cleaner only in the context of the
// path scheme. Deletion is forbidden in the hash scheme, as it can
// disrupt state completeness.
//
// Notably, boundary nodes can be also kept because the whole storage
// trie is complete.
options = options.WithCleaner(func(path []byte) { options = options.WithCleaner(func(path []byte) {
s.cleanPath(batch, account, path) s.cleanPath(batch, account, path)
}) })

View file

@ -49,7 +49,7 @@ func (o *StackTrieOptions) WithWriter(writer func(path []byte, hash common.Hash,
return o return o
} }
// WithCleaner configures path cleaner within the options. // WithCleaner configures the cleaner in the option for removing dangling nodes.
func (o *StackTrieOptions) WithCleaner(cleaner func(path []byte)) *StackTrieOptions { func (o *StackTrieOptions) WithCleaner(cleaner func(path []byte)) *StackTrieOptions {
o.Cleaner = cleaner o.Cleaner = cleaner
return o return o
@ -74,7 +74,7 @@ type StackTrie struct {
h *hasher h *hasher
first []byte // The key of first inserted entry, tracked as left boundary. first []byte // The key of first inserted entry, tracked as left boundary.
last []byte // The key of last inserted entry, tracked as left boundary. last []byte // The key of last inserted entry, tracked as right boundary.
} }
// NewStackTrie allocates and initializes an empty trie. // NewStackTrie allocates and initializes an empty trie.
@ -102,9 +102,9 @@ func (t *StackTrie) Update(key, value []byte) error {
t.first = append([]byte{}, k...) t.first = append([]byte{}, k...)
} }
if t.last == nil { if t.last == nil {
t.last = append([]byte{}, k...) t.last = append([]byte{}, k...) // allocate key slice
} else { } else {
t.last = append(t.last[:0], k...) t.last = append(t.last[:0], k...) // reuse key slice
} }
t.insert(t.root, k, value, nil) t.insert(t.root, k, value, nil)
return nil return nil