@@ -166,7 +166,7 @@ func (result *proofResult) forEach(callback func(key []byte, val []byte) error)
166166// 
167167// The proof result will be returned if the range proving is finished, otherwise 
168168// the error will be returned to abort the entire procedure. 
169- func  (dl  * diskLayer ) proveRange (ctx  * generatorContext , owner  common. Hash ,  root  common. Hash , prefix  []byte , kind  string , origin  []byte , max  int , valueConvertFn  func ([]byte ) ([]byte , error )) (* proofResult , error ) {
169+ func  (dl  * diskLayer ) proveRange (ctx  * generatorContext , trieId   * trie. ID , prefix  []byte , kind  string , origin  []byte , max  int , valueConvertFn  func ([]byte ) ([]byte , error )) (* proofResult , error ) {
170170	var  (
171171		keys      [][]byte 
172172		vals      [][]byte 
@@ -233,8 +233,9 @@ func (dl *diskLayer) proveRange(ctx *generatorContext, owner common.Hash, root c
233233	}(time .Now ())
234234
235235	// The snap state is exhausted, pass the entire key/val set for verification 
236+ 	root  :=  trieId .Root 
236237	if  origin  ==  nil  &&  ! diskMore  {
237- 		stackTr  :=  trie .NewStackTrieWithOwner (nil ,  owner )
238+ 		stackTr  :=  trie .NewStackTrie (nil )
238239		for  i , key  :=  range  keys  {
239240			stackTr .TryUpdate (key , vals [i ])
240241		}
@@ -248,7 +249,7 @@ func (dl *diskLayer) proveRange(ctx *generatorContext, owner common.Hash, root c
248249		return  & proofResult {keys : keys , vals : vals }, nil 
249250	}
250251	// Snap state is chunked, generate edge proofs for verification. 
251- 	tr , err  :=  trie .New (owner ,  root , dl .triedb )
252+ 	tr , err  :=  trie .New (trieId , dl .triedb )
252253	if  err  !=  nil  {
253254		ctx .stats .Log ("Trie missing, state snapshotting paused" , dl .root , dl .genMarker )
254255		return  nil , errMissingTrie 
@@ -313,9 +314,9 @@ type onStateCallback func(key []byte, val []byte, write bool, delete bool) error
313314// generateRange generates the state segment with particular prefix. Generation can 
314315// either verify the correctness of existing state through range-proof and skip 
315316// generation, or iterate trie to regenerate state on demand. 
316- func  (dl  * diskLayer ) generateRange (ctx  * generatorContext , owner  common. Hash ,  root  common. Hash , prefix  []byte , kind  string , origin  []byte , max  int , onState  onStateCallback , valueConvertFn  func ([]byte ) ([]byte , error )) (bool , []byte , error ) {
317+ func  (dl  * diskLayer ) generateRange (ctx  * generatorContext , trieId   * trie. ID , prefix  []byte , kind  string , origin  []byte , max  int , onState  onStateCallback , valueConvertFn  func ([]byte ) ([]byte , error )) (bool , []byte , error ) {
317318	// Use range prover to check the validity of the flat state in the range 
318- 	result , err  :=  dl .proveRange (ctx , owner ,  root , prefix , kind , origin , max , valueConvertFn )
319+ 	result , err  :=  dl .proveRange (ctx , trieId , prefix , kind , origin , max , valueConvertFn )
319320	if  err  !=  nil  {
320321		return  false , nil , err 
321322	}
@@ -363,7 +364,7 @@ func (dl *diskLayer) generateRange(ctx *generatorContext, owner common.Hash, roo
363364	if  len (result .keys ) >  0  {
364365		snapNodeCache  =  memorydb .New ()
365366		snapTrieDb  :=  trie .NewDatabase (snapNodeCache )
366- 		snapTrie ,  _   :=  trie .New ( owner , common. Hash {},  snapTrieDb )
367+ 		snapTrie   :=  trie .NewEmpty ( snapTrieDb )
367368		for  i , key  :=  range  result .keys  {
368369			snapTrie .Update (key , result .vals [i ])
369370		}
@@ -377,7 +378,7 @@ func (dl *diskLayer) generateRange(ctx *generatorContext, owner common.Hash, roo
377378	// if it's already opened with some nodes resolved. 
378379	tr  :=  result .tr 
379380	if  tr  ==  nil  {
380- 		tr , err  =  trie .New (owner ,  root , dl .triedb )
381+ 		tr , err  =  trie .New (trieId , dl .triedb )
381382		if  err  !=  nil  {
382383			ctx .stats .Log ("Trie missing, state snapshotting paused" , dl .root , dl .genMarker )
383384			return  false , nil , errMissingTrie 
@@ -460,7 +461,7 @@ func (dl *diskLayer) generateRange(ctx *generatorContext, owner common.Hash, roo
460461	} else  {
461462		snapAccountTrieReadCounter .Inc ((time .Since (start ) -  internal ).Nanoseconds ())
462463	}
463- 	logger .Debug ("Regenerated state range" , "root" , root , "last" , hexutil .Encode (last ),
464+ 	logger .Debug ("Regenerated state range" , "root" , trieId . Root , "last" , hexutil .Encode (last ),
464465		"count" , count , "created" , created , "updated" , updated , "untouched" , untouched , "deleted" , deleted )
465466
466467	// If there are either more trie items, or there are more snap items 
@@ -511,7 +512,7 @@ func (dl *diskLayer) checkAndFlush(ctx *generatorContext, current []byte) error
511512
512513// generateStorages generates the missing storage slots of the specific contract. 
513514// It's supposed to restart the generation from the given origin position. 
514- func  generateStorages (ctx  * generatorContext , dl  * diskLayer , account  common.Hash , storageRoot  common.Hash , storeMarker  []byte ) error  {
515+ func  generateStorages (ctx  * generatorContext , dl  * diskLayer , stateRoot  common. Hash ,  account  common.Hash , storageRoot  common.Hash , storeMarker  []byte ) error  {
515516	onStorage  :=  func (key  []byte , val  []byte , write  bool , delete  bool ) error  {
516517		defer  func (start  time.Time ) {
517518			snapStorageWriteCounter .Inc (time .Since (start ).Nanoseconds ())
@@ -540,7 +541,8 @@ func generateStorages(ctx *generatorContext, dl *diskLayer, account common.Hash,
540541	// Loop for re-generating the missing storage slots. 
541542	var  origin  =  common .CopyBytes (storeMarker )
542543	for  {
543- 		exhausted , last , err  :=  dl .generateRange (ctx , account , storageRoot , append (rawdb .SnapshotStoragePrefix , account .Bytes ()... ), snapStorage , origin , storageCheckRange , onStorage , nil )
544+ 		id  :=  trie .StorageTrieID (stateRoot , account , storageRoot )
545+ 		exhausted , last , err  :=  dl .generateRange (ctx , id , append (rawdb .SnapshotStoragePrefix , account .Bytes ()... ), snapStorage , origin , storageCheckRange , onStorage , nil )
544546		if  err  !=  nil  {
545547			return  err  // The procedure it aborted, either by external signal or internal error. 
546548		}
@@ -624,7 +626,7 @@ func generateAccounts(ctx *generatorContext, dl *diskLayer, accMarker []byte) er
624626			if  accMarker  !=  nil  &&  bytes .Equal (account [:], accMarker ) &&  len (dl .genMarker ) >  common .HashLength  {
625627				storeMarker  =  dl .genMarker [common .HashLength :]
626628			}
627- 			if  err  :=  generateStorages (ctx , dl , account , acc .Root , storeMarker ); err  !=  nil  {
629+ 			if  err  :=  generateStorages (ctx , dl , dl . root ,  account , acc .Root , storeMarker ); err  !=  nil  {
628630				return  err 
629631			}
630632		}
@@ -640,7 +642,8 @@ func generateAccounts(ctx *generatorContext, dl *diskLayer, accMarker []byte) er
640642	}
641643	origin  :=  common .CopyBytes (accMarker )
642644	for  {
643- 		exhausted , last , err  :=  dl .generateRange (ctx , common.Hash {}, dl .root , rawdb .SnapshotAccountPrefix , snapAccount , origin , accountRange , onAccount , FullAccountRLP )
645+ 		id  :=  trie .StateTrieID (dl .root )
646+ 		exhausted , last , err  :=  dl .generateRange (ctx , id , rawdb .SnapshotAccountPrefix , snapAccount , origin , accountRange , onAccount , FullAccountRLP )
644647		if  err  !=  nil  {
645648			return  err  // The procedure it aborted, either by external signal or internal error. 
646649		}
0 commit comments