go-ethereum/core/state
CPerezz 78f785e4ff
core/state: fix (nil,nil) shadowing trie reader fallback in bintrieFlatReader
Addresses review finding C3.

Before this commit, bintrieFlatReader.Account returned (nil, nil) when
both the BasicData and CodeHash leaves were absent from the flat state.
multiStateReader.Account treats (nil, nil) as "confirmed absent" and
short-circuits — the trie reader never runs. This silently hid every
corruption mode the other A-commits are fixing (C1 mid-stem resume
loss, C2 disk-layer shape mismatch, in-transition stale data, etc.):
the flat state said "not present" and nobody checked.

Fix: introduce errBintrieFlatStateMiss as a local sentinel. When both
leaves are absent, the flat reader returns (nil, errBintrieFlatStateMiss)
instead of (nil, nil). The multiStateReader falls through on any
non-nil error, so the trie reader now runs and serves as the
authoritative gatekeeper. If the flat state genuinely has no data (and
the trie reader also returns nil), the end result is the same — but
any case where the flat state is wrong and the trie is right is now
caught by the fallthrough.

Same treatment for Storage: absent blob returns errBintrieFlatStateMiss.

Known limitation: BinaryTrie.GetAccount does not verify stem membership
(a characteristic of verkle-style tries where non-membership proofs are
handled externally). A truly non-existent account returns the closest
stem's data, not nil. The TestBintrieFlatReaderMissingAccountSentinel
test therefore verifies the flat reader's sentinel in isolation rather
than the end-to-end multiStateReader result.
2026-04-15 15:00:40 +02:00
..
pruner all: improve ETA calculation across all progress indicators (#32521) 2025-09-01 13:47:02 +08:00
snapshot crypto/keccak: vendor in golang.org/x/crypto/sha3 (#33323) 2026-02-03 14:55:27 -07:00
access_events.go trie, go.mod: remove all references to go-verkle and go-ipa (#33461) 2025-12-30 20:44:04 +08:00
access_events_test.go trie, go.mod: remove all references to go-verkle and go-ipa (#33461) 2025-12-30 20:44:04 +08:00
access_list.go core/state: improve accessList copy (#33024) 2025-10-26 16:13:59 +08:00
database.go core/state,triedb/pathdb: enable bintrie flat state reads end-to-end 2026-04-15 15:00:40 +02:00
database_code.go core, miner, tests: introduce codedb and simplify cachingDB (#33816) 2026-03-10 08:29:21 +01:00
database_hasher.go core/state: hook leaf production in binaryHasher 2026-04-15 15:00:40 +02:00
database_hasher_binary.go core/state: hook leaf production in binaryHasher 2026-04-15 15:00:40 +02:00
database_hasher_binary_test.go core/state,triedb/pathdb: fix bintrieFlatReader disk-layer shape via per-offset extraction 2026-04-15 15:00:40 +02:00
database_hasher_merkle.go core: fix memory leaking 2026-04-15 15:00:39 +02:00
database_hasher_merkle_test.go core: fix memory leaking 2026-04-15 15:00:39 +02:00
database_history.go core/state: build hasher skeleton 2026-04-15 15:00:38 +02:00
database_iterator.go core/state: introduce state iterator interface (#33102) 2026-04-03 10:35:32 +08:00
database_iterator_test.go core/state: introduce state iterator interface (#33102) 2026-04-03 10:35:32 +08:00
dump.go core/state: build hasher skeleton 2026-04-15 15:00:38 +02:00
iterator.go core, miner, tests: introduce codedb and simplify cachingDB (#33816) 2026-03-10 08:29:21 +01:00
iterator_test.go core/state: state reader abstraction (#29761) 2024-09-05 13:10:47 +03:00
journal.go core: miner: reduce allocations in block building (#33375) 2026-02-03 08:19:16 +01:00
metrics.go core/state: integrate witness collector 2026-04-15 15:00:39 +02:00
reader.go core/state: fix (nil,nil) shadowing trie reader fallback in bintrieFlatReader 2026-04-15 15:00:40 +02:00
reader_bintrie_test.go core/state: fix (nil,nil) shadowing trie reader fallback in bintrieFlatReader 2026-04-15 15:00:40 +02:00
reader_stater.go core, miner, tests: introduce codedb and simplify cachingDB (#33816) 2026-03-10 08:29:21 +01:00
state_mut.go core/state: integrate witness collector 2026-04-15 15:00:39 +02:00
state_object.go core/state: integrate witness collector 2026-04-15 15:00:39 +02:00
state_object_test.go core/state: using testing.B.Loop (#32658) 2025-09-19 16:57:43 -06:00
state_sizer.go core/state: implement merkle hasher 2026-04-15 15:00:38 +02:00
state_sizer_test.go core/state: fix incorrect contract code state metrics (#33376) 2025-12-10 11:33:59 +08:00
state_test.go core, consensus/beacon: defer trie resolution (#31725) 2025-06-25 09:42:11 +08:00
statedb.go core/state,triedb/pathdb: wire bintrie leaves through stateUpdate 2026-04-15 15:00:40 +02:00
statedb_fuzz_test.go core/state: improve binary hasher 2026-04-15 15:00:39 +02:00
statedb_hooked.go cmd/geth, core/state, tests: rework EIP7610 check (#34718) 2026-04-14 15:54:36 +02:00
statedb_hooked_test.go core: invoke selfdestruct tracer hooks during finalisation (#32919) 2026-01-16 15:10:08 -07:00
statedb_stats.go core/state: integrate witness collector 2026-04-15 15:00:39 +02:00
statedb_test.go core/state: plumb CodeSize through AccountMut for binaryHasher 2026-04-15 15:00:39 +02:00
stateupdate.go core/state,triedb/pathdb: wire bintrie leaves through stateUpdate 2026-04-15 15:00:40 +02:00
sync.go core,eth,internal: fix typo (#29024) 2024-02-20 19:42:48 +08:00
sync_test.go core, miner, tests: introduce codedb and simplify cachingDB (#33816) 2026-03-10 08:29:21 +01:00
transient_storage.go core/state: optimize transient storage (#33695) 2026-04-14 15:39:42 +02:00
trie_prefetcher.go core/state: integrate prefetching into merkle hasher 2026-04-15 15:00:38 +02:00
trie_prefetcher_test.go core/state: integrate prefetching into merkle hasher 2026-04-15 15:00:38 +02:00