go-ethereum/core/state
rjl493456442 8c1a36dad3
core/state/snapshot: handle legacy journal (#30802)
This workaround is meant to minimize the possibility for snapshot generation
once the geth node upgrades to new version (specifically #30752 )

In #30752, the journal format in state snapshot is modified by removing
the destruct set. Therefore, the existing old format (version = 0) will be
discarded and all in-memory layers will be lost. Unfortunately, the lost 
in-memory layers can't be recovered by some other approaches, and the 
entire state snapshot will be regenerated (it will last about 2.5 hours).

This pull request introduces a workaround to adopt the legacy journal if
the destruct set contained is empty. Since self-destruction has been
deprecated following the cancun fork, the destruct set is expected to be nil for
layers above the fork block. However, an exception occurs during contract 
deployment: pre-funded accounts may self-destruct, causing accounts with 
non-zero balances to be removed from the state. For example,
https://etherscan.io/tx/0xa087333d83f0cd63b96bdafb686462e1622ce25f40bd499e03efb1051f31fe49).


For nodes with a fully synced state, the legacy journal is likely compatible with
the updated definition, eliminating the need for regeneration. Unfortunately,
nodes performing a full sync of historical chain segments or encountering 
pre-funded account deletions may face incompatibilities, leading to automatic 
snapshot regeneration.
2024-11-28 11:21:31 +08:00
..
pruner all: clean up goerli flag and config (#30289) 2024-08-20 15:59:48 +02:00
snapshot core/state/snapshot: handle legacy journal (#30802) 2024-11-28 11:21:31 +08:00
access_events.go core, trie: verkle state processor tests (#30672) 2024-11-04 14:19:50 +01:00
access_events_test.go core/state, core/vm: Nyota contract create init simplification (#30409) 2024-09-13 15:37:30 +02:00
access_list.go core/state: rename all the AccessList receivers to 'al' (#29921) 2024-06-11 11:24:44 +03:00
database.go core/state, triedb/database: refactor state reader (#30712) 2024-11-09 08:08:06 +08:00
dump.go eth/tracers: live chain tracing with hooks (#29189) 2024-03-22 18:53:53 +01:00
iterator.go all: fix various typos (#29600) 2024-04-23 13:09:42 +03:00
iterator_test.go core/state: state reader abstraction (#29761) 2024-09-05 13:10:47 +03:00
journal.go core/state: get rid of field pointer in journal (#30361) 2024-09-06 15:42:59 +08:00
metrics.go core: add metrics for state access (#30353) 2024-08-26 20:02:10 +08:00
reader.go core/state, triedb/database: refactor state reader (#30712) 2024-11-09 08:08:06 +08:00
state_object.go core/state: move state log mechanism to a separate layer (#30569) 2024-10-23 08:03:36 +02:00
state_object_test.go build: use golangci-lint (#20295) 2019-11-18 10:49:17 +02:00
state_test.go core/state: move state log mechanism to a separate layer (#30569) 2024-10-23 08:03:36 +02:00
statedb.go core, triedb: remove destruct flag in state snapshot (#30752) 2024-11-22 16:55:43 +08:00
statedb_fuzz_test.go core, triedb: remove destruct flag in state snapshot (#30752) 2024-11-22 16:55:43 +08:00
statedb_hooked.go core/state: invoke OnCodeChange-hook on selfdestruct (#30686) 2024-11-08 15:25:30 +01:00
statedb_hooked_test.go core: fix typos (#30767) 2024-11-19 14:26:39 +08:00
statedb_test.go core, triedb: remove destruct flag in state snapshot (#30752) 2024-11-22 16:55:43 +08:00
stateupdate.go core, triedb: remove destruct flag in state snapshot (#30752) 2024-11-22 16:55:43 +08:00
sync.go core,eth,internal: fix typo (#29024) 2024-02-20 19:42:48 +08:00
sync_test.go core/state: move state log mechanism to a separate layer (#30569) 2024-10-23 08:03:36 +02:00
transient_storage.go core/state: better randomized testing (postcheck) on journalling (#29627) 2024-04-25 09:56:25 +02:00
trie_prefetcher.go core/state: fix runaway alloc caused by prefetcher heap escape (#30629) 2024-10-20 13:25:15 +03:00
trie_prefetcher_test.go core/state: fix runaway alloc caused by prefetcher heap escape (#30629) 2024-10-20 13:25:15 +03:00