@@ -295,6 +295,7 @@ func GenerateVerkleChain(config *params.ChainConfig, parent *types.Block, engine
295
295
genblock := func (i int , parent * types.Block , statedb * state.StateDB ) (* types.Block , types.Receipts ) {
296
296
b := & BlockGen {i : i , chain : blocks , parent : parent , statedb : statedb , config : config , engine : engine }
297
297
b .header = makeHeader (chainreader , parent , statedb , b .engine )
298
+ preState := statedb .Copy ()
298
299
299
300
// Mutate the state and block according to any hard-fork specs
300
301
if daoBlock := config .DAOForkBlock ; daoBlock != nil {
@@ -329,30 +330,25 @@ func GenerateVerkleChain(config *params.ChainConfig, parent *types.Block, engine
329
330
}
330
331
331
332
// Generate an associated verkle proof
332
- if tr := statedb .GetTrie (); tr .IsVerkle () {
333
- vtr := tr .(* trie.VerkleTrie )
334
- // Generate the proof if we are using a verkle tree
335
- // WORKAROUND: make sure all keys are resolved
336
- // before building the proof. Ultimately, node
337
- // resolution can be done with a prefetcher or
338
- // from GetCommitmentsAlongPath.
339
-
340
- keys := statedb .Witness ().Keys ()
341
- for _ , key := range keys {
342
- out , err := vtr .TryGet (key )
343
- if err != nil {
344
- panic (err )
345
- }
346
- if len (out ) == 0 {
347
- panic (fmt .Sprintf ("%x should be present in the tree" , key ))
348
- }
349
- }
350
- vtr .Hash ()
351
- p , k , err := vtr .ProveAndSerialize (keys , statedb .Witness ().KeyVals ())
352
- block .SetVerkleProof (p , k )
353
- if err != nil {
354
- panic (err )
355
- }
333
+ tr := preState .GetTrie ()
334
+ if ! tr .IsVerkle () {
335
+ panic ("tree should be verkle" )
336
+ }
337
+
338
+ vtr := tr .(* trie.VerkleTrie )
339
+ // Make sure all keys are resolved before
340
+ // building the proof. Ultimately, node
341
+ // resolution can be done with a prefetcher
342
+ // or from GetCommitmentsAlongPath.
343
+ keys := statedb .Witness ().Keys ()
344
+ for _ , key := range keys {
345
+ vtr .TryGet (key )
346
+ }
347
+ vtr .Hash ()
348
+ p , k , err := vtr .ProveAndSerialize (keys , statedb .Witness ().KeyVals ())
349
+ block .SetVerkleProof (p , k )
350
+ if err != nil {
351
+ panic (err )
356
352
}
357
353
return block , b .receipts
358
354
}
0 commit comments