go-ethereum/triedb/pathdb
rjl493456442 36bcc24fbe
triedb/pathdb: fix journal resolution in pathdb (#32097)
This pull request fixes a flaw in the PBSS state iterator, which
could return empty account or storage data.

In PBSS, multiple in-memory diff layers and a write buffer are
maintained. These layers are persisted to the database and reloaded after
node restarts. However, since the state data is encoded using RLP, the
distinction between nil and an empty byte slice is lost during the encode/decode
process. As a result, invalid state values such as `[]byte{}` can appear in PBSS
and ultimately be returned by the state iterator.


Checkout
https://github.com/ethereum/go-ethereum/blob/master/triedb/pathdb/iterator_fast.go#L270
for more iterator details.

It's a long-term existent issue and now be activated since the snapshot
integration.
The error `err="range contains deletion"` will occur when Geth tries to
serve other
peers with SNAP protocol request.

---------

Co-authored-by: Felix Lange <fjl@twurst.com>
2025-06-26 17:19:02 +02:00
..
buffer.go triedb/pathdb, eth: use double-buffer mechanism in pathdb (#30464) 2025-06-22 20:40:54 +08:00
context.go core, triedb/pathdb: final integration (snapshot integration pt 5) (#30661) 2025-05-16 18:29:38 +08:00
database.go core/rawdb, triedb/pathdb: implement history indexer (#31156) 2025-06-24 14:36:12 +02:00
database_test.go core/rawdb, triedb/pathdb: implement history indexer (#31156) 2025-06-24 14:36:12 +02:00
difflayer.go triedb/pathdb: introduce lookup structure to optimize state access (#30971) 2025-05-28 13:31:42 +02:00
difflayer_test.go all: implement state history v2 (#30107) 2025-01-17 02:59:02 +01:00
disklayer.go core/rawdb, triedb/pathdb: implement history indexer (#31156) 2025-06-24 14:36:12 +02:00
errors.go core, triedb/pathdb: final integration (snapshot integration pt 5) (#30661) 2025-05-16 18:29:38 +08:00
execute.go all: reuse the global hash buffer (#31839) 2025-06-18 15:29:14 +08:00
flush.go core, triedb/pathdb: final integration (snapshot integration pt 5) (#30661) 2025-05-16 18:29:38 +08:00
generate.go triedb/pathdb, eth: use double-buffer mechanism in pathdb (#30464) 2025-06-22 20:40:54 +08:00
generate_test.go triedb/pathdb, eth: use double-buffer mechanism in pathdb (#30464) 2025-06-22 20:40:54 +08:00
history.go core/rawdb, triedb/pathdb: implement history indexer (#31156) 2025-06-24 14:36:12 +02:00
history_index.go core/rawdb, triedb/pathdb: implement history indexer (#31156) 2025-06-24 14:36:12 +02:00
history_index_block.go core/rawdb, triedb/pathdb: implement history indexer (#31156) 2025-06-24 14:36:12 +02:00
history_index_block_test.go core/rawdb, triedb/pathdb: implement history indexer (#31156) 2025-06-24 14:36:12 +02:00
history_index_test.go core/rawdb, triedb/pathdb: implement history indexer (#31156) 2025-06-24 14:36:12 +02:00
history_indexer.go core, eth, triedb: serve historical states over RPC (#31161) 2025-06-25 16:50:54 +08:00
history_inspect.go all: update license comments and AUTHORS (#31133) 2025-02-05 23:01:17 +01:00
history_reader.go core/rawdb, triedb/pathdb: implement history indexer (#31156) 2025-06-24 14:36:12 +02:00
history_reader_test.go core/rawdb, triedb/pathdb: implement history indexer (#31156) 2025-06-24 14:36:12 +02:00
history_test.go all: update license comments and AUTHORS (#31133) 2025-02-05 23:01:17 +01:00
holdable_iterator.go trie/pathdb: state iterator (snapshot integration pt 4) (#30654) 2024-12-16 21:10:08 +08:00
holdable_iterator_test.go trie/pathdb: state iterator (snapshot integration pt 4) (#30654) 2024-12-16 21:10:08 +08:00
iterator.go core, triedb/pathdb: final integration (snapshot integration pt 5) (#30661) 2025-05-16 18:29:38 +08:00
iterator_binary.go triedb/pathdb, eth: use double-buffer mechanism in pathdb (#30464) 2025-06-22 20:40:54 +08:00
iterator_fast.go triedb/pathdb, eth: use double-buffer mechanism in pathdb (#30464) 2025-06-22 20:40:54 +08:00
iterator_test.go triedb/pathdb: fix journal resolution in pathdb (#32097) 2025-06-26 17:19:02 +02:00
journal.go triedb/pathdb, eth: use double-buffer mechanism in pathdb (#30464) 2025-06-22 20:40:54 +08:00
layertree.go triedb/pathdb: introduce lookup structure to optimize state access (#30971) 2025-05-28 13:31:42 +02:00
layertree_test.go triedb/pathdb, eth: use double-buffer mechanism in pathdb (#30464) 2025-06-22 20:40:54 +08:00
lookup.go triedb/pathdb: introduce lookup structure to optimize state access (#30971) 2025-05-28 13:31:42 +02:00
metrics.go core/rawdb, triedb/pathdb: implement history indexer (#31156) 2025-06-24 14:36:12 +02:00
nodes.go triedb/pathdb: improve perf by separating nodes map (#31306) 2025-04-02 15:06:54 +08:00
reader.go core/rawdb, triedb/pathdb: implement history indexer (#31156) 2025-06-24 14:36:12 +02:00
states.go triedb/pathdb: fix journal resolution in pathdb (#32097) 2025-06-26 17:19:02 +02:00
states_test.go all: update license comments and AUTHORS (#31133) 2025-02-05 23:01:17 +01:00
verifier.go cmd/geth, triedb: add pathdb state verification (#32086) 2025-06-24 21:06:20 +08:00