forked from cerc-io/plugeth
core/state: copy the snap when copying the state (#22340)
* core/state: copy the snap when copying the state * core/state: deep-copy snap stuff during state Copy
This commit is contained in:
parent
e01096f531
commit
52e5c38aa5
@ -728,6 +728,31 @@ func (s *StateDB) Copy() *StateDB {
|
|||||||
if s.prefetcher != nil {
|
if s.prefetcher != nil {
|
||||||
state.prefetcher = s.prefetcher.copy()
|
state.prefetcher = s.prefetcher.copy()
|
||||||
}
|
}
|
||||||
|
if s.snaps != nil {
|
||||||
|
// In order for the miner to be able to use and make additions
|
||||||
|
// to the snapshot tree, we need to copy that aswell.
|
||||||
|
// Otherwise, any block mined by ourselves will cause gaps in the tree,
|
||||||
|
// and force the miner to operate trie-backed only
|
||||||
|
state.snaps = s.snaps
|
||||||
|
state.snap = s.snap
|
||||||
|
// deep copy needed
|
||||||
|
state.snapDestructs = make(map[common.Hash]struct{})
|
||||||
|
for k, v := range s.snapDestructs {
|
||||||
|
state.snapDestructs[k] = v
|
||||||
|
}
|
||||||
|
state.snapAccounts = make(map[common.Hash][]byte)
|
||||||
|
for k, v := range s.snapAccounts {
|
||||||
|
state.snapAccounts[k] = v
|
||||||
|
}
|
||||||
|
state.snapStorage = make(map[common.Hash]map[common.Hash][]byte)
|
||||||
|
for k, v := range s.snapStorage {
|
||||||
|
temp := make(map[common.Hash][]byte)
|
||||||
|
for kk, vv := range v {
|
||||||
|
temp[kk] = vv
|
||||||
|
}
|
||||||
|
state.snapStorage[k] = temp
|
||||||
|
}
|
||||||
|
}
|
||||||
return state
|
return state
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user