go-ethereum/trie
weiihann bdb7b64173 trie/bintrie: mark promoted stem dirty during splitStemValuesInsert
When splitStemValuesInsert inserts a new stem that shares a prefix with
an existing stem, it increments the existing stem's depth and inserts a
new internal node above it. The existing stem's on-disk path is derived
from its depth via collectChildGroups + extendPathToGroupLeaf, so
promoting its depth means it should be flushed at a new path.

Previously, only the new stem (created in the divergence branch) was
marked dirty. The promoted existing stem retained whatever dirty value
it had — false if it was just deserialized from disk via a HashedNode
resolve. collectNodes would then skip flushing the existing stem at its
new path, while the new ancestor internal blob (also dirty) overwrites
the existing stem's old blob at the prior path. The stem's data is
left with no on-disk home, breaking subsequent reads with
"missing trie node".

The bug surfaces in the integration-test harness (state-actor builds a
DB with single-stem-per-slot at depth 8, geth then mutates by adding a
new stem that shares ≥8 prefix bits with the existing stem). After
mutation, geth's `getValuesAtStem` resolves a HashedNode whose blob
should be at the extended-depth path but isn't on disk.

Mark `existing.dirty = true` when promoting the depth so collectNodes
re-flushes the stem at its new path.

Verification: the 100MB integration-test harness (which previously
failed at block 9-10 with "missing trie node bdaf89... (path c96010)")
now runs cleanly through 200+ blocks of ERC20 deploys and bloat
transactions without any missing-trie-node errors.
2026-05-13 09:39:31 +08:00
..
bintrie trie/bintrie: mark promoted stem dirty during splitStemValuesInsert 2026-05-13 09:39:31 +08:00
transitiontrie cmd, core, trie, triedb: split CachingDB into merkle + binary dbs. (#34700) 2026-04-17 08:55:54 +08:00
trienode cmd, core, eth, triedb/pathdb: track node origins in the path database (#32418) 2025-09-05 10:37:05 +08:00
bytepool.go core/types, trie: reduce allocations in derivesha (#30747) 2025-10-01 10:05:49 +02:00
committer.go trie/bintrie: add eip7864 binary trees and run its tests (#32365) 2025-09-01 21:06:51 +08:00
database_test.go trie: no need to store preimage if not enabled (#32012) 2025-06-13 15:04:24 +08:00
encoding.go trie: reduce allocations in stacktrie (#30743) 2025-01-23 10:17:12 +01:00
encoding_test.go trie: reduce allocs in recHash (#27770) 2023-08-18 22:41:19 +02:00
errors.go all: fix various typos (#29600) 2024-04-23 13:09:42 +03:00
hasher.go trie: reduce the memory allocation in trie hashing (#31902) 2025-08-01 10:23:23 +08:00
inspect.go cmd/geth: add inspect trie tool to analysis trie storage (#28892) 2026-02-24 10:56:00 -07:00
inspect_test.go cmd/geth: add inspect trie tool to analysis trie storage (#28892) 2026-02-24 10:56:00 -07:00
iterator.go trie: add sub-trie iterator support (#32520) 2025-09-17 22:07:02 +08:00
iterator_test.go trie: align AllFFPrefix test assertion and message (#32719) 2025-09-24 10:36:56 +08:00
levelstats.go core, miner, trie: relocate witness stats (#34106) 2026-03-27 17:06:46 +01:00
levelstats_test.go cmd/geth: add inspect trie tool to analysis trie storage (#28892) 2026-02-24 10:56:00 -07:00
list_hasher.go core/types, trie: reduce allocations in derivesha (#30747) 2025-10-01 10:05:49 +02:00
node.go rlp: add back Iterator.Count, with fixes (#33841) 2026-02-13 23:53:42 +01:00
node_enc.go trie: reduce the memory allocation in trie hashing (#31902) 2025-08-01 10:23:23 +08:00
node_test.go trie: fix flaky test (#33711) 2026-01-29 17:22:15 +08:00
proof.go trie: error out for unexpected key-value pairs preceding the range (#33898) 2026-02-26 23:00:02 +08:00
proof_test.go trie: fix TestOneElementProof expected value message (#32738) 2025-09-24 18:57:01 -06:00
secure_trie.go cmd, core, trie, triedb: split CachingDB into merkle + binary dbs. (#34700) 2026-04-17 08:55:54 +08:00
secure_trie_test.go core/state, eth/protocols, trie, triedb/pathdb: remove unused error from trie Commit (#29869) 2024-06-12 12:23:16 +03:00
stacktrie.go core/types, trie: reduce allocations in derivesha (#30747) 2025-10-01 10:05:49 +02:00
stacktrie_fuzzer_test.go trie: do not expect ordering in stacktrie during fuzzing (#31170) 2025-02-18 10:48:42 +08:00
stacktrie_test.go trie: reduce allocations in stacktrie (#30743) 2025-01-23 10:17:12 +01:00
sync.go trie: cleaner array concatenation (#32756) 2025-10-02 17:32:20 +02:00
sync_test.go core, trie, triedb: minor changes from snapshot integration (#30599) 2024-10-18 17:06:31 +02:00
tracer.go trie/bintrie: add eip7864 binary trees and run its tests (#32365) 2025-09-01 21:06:51 +08:00
tracer_test.go trie, core/state: introduce trie Prefetch for optimizing preload (#32134) 2025-08-20 21:45:27 +08:00
trie.go core/types, trie: reduce allocations in derivesha (#30747) 2025-10-01 10:05:49 +02:00
trie_id.go all: update license comments and AUTHORS (#31133) 2025-02-05 23:01:17 +01:00
trie_reader.go trie/bintrie: add eip7864 binary trees and run its tests (#32365) 2025-09-01 21:06:51 +08:00
trie_test.go core, ethdb, triedb: add batch close (#33708) 2026-03-04 11:17:47 +01:00