github.com/linapex/ethereum-go-chinese@v0.0.0-20190316121929-f8b7a73c3fa1/core/state/sync.go (about) 1 2 //<developer> 3 // <name>linapex 曹一峰</name> 4 // <email>linapex@163.com</email> 5 // <wx>superexc</wx> 6 // <qqgroup>128148617</qqgroup> 7 // <url>https://jsq.ink</url> 8 // <role>pku engineer</role> 9 // <date>2019-03-16 19:16:35</date> 10 //</624450080518180864> 11 12 13 package state 14 15 import ( 16 "bytes" 17 18 "github.com/ethereum/go-ethereum/common" 19 "github.com/ethereum/go-ethereum/rlp" 20 "github.com/ethereum/go-ethereum/trie" 21 ) 22 23 //newstatesync创建新的状态trie下载计划程序。 24 func NewStateSync(root common.Hash, database trie.DatabaseReader) *trie.Sync { 25 var syncer *trie.Sync 26 callback := func(leaf []byte, parent common.Hash) error { 27 var obj Account 28 if err := rlp.Decode(bytes.NewReader(leaf), &obj); err != nil { 29 return err 30 } 31 syncer.AddSubTrie(obj.Root, 64, parent, nil) 32 syncer.AddRawEntry(common.BytesToHash(obj.CodeHash), 64, parent) 33 return nil 34 } 35 syncer = trie.NewSync(root, database, callback) 36 return syncer 37 } 38