github.com/arieschain/arieschain@v0.0.0-20191023063405-37c074544356/core/state/sync.go (about)

     1  package state
     2  
     3  import (
     4  	"bytes"
     5  
     6  	"github.com/quickchainproject/quickchain/common"
     7  	"github.com/quickchainproject/quickchain/rlp"
     8  	"github.com/quickchainproject/quickchain/trie"
     9  )
    10  
    11  // NewStateSync create a new state trie download scheduler.
    12  func NewStateSync(root common.Hash, database trie.DatabaseReader) *trie.TrieSync {
    13  	var syncer *trie.TrieSync
    14  	callback := func(leaf []byte, parent common.Hash) error {
    15  		var obj Account
    16  		if err := rlp.Decode(bytes.NewReader(leaf), &obj); err != nil {
    17  			return err
    18  		}
    19  		syncer.AddSubTrie(obj.Root, 64, parent, nil)
    20  		syncer.AddRawEntry(common.BytesToHash(obj.CodeHash), 64, parent)
    21  		return nil
    22  	}
    23  	syncer = trie.NewTrieSync(root, database, callback)
    24  	return syncer
    25  }