core: unify code of state sync module initialization
This commit is contained in:
parent
3b7807e897
commit
a276a85b72
1 changed files with 18 additions and 23 deletions
|
@ -136,29 +136,35 @@ func (s *Module) Init(currChainHeight uint32) error {
|
||||||
zap.Uint32("point", p),
|
zap.Uint32("point", p),
|
||||||
zap.Uint32("evaluated chain's blockHeight", currChainHeight))
|
zap.Uint32("evaluated chain's blockHeight", currChainHeight))
|
||||||
|
|
||||||
// check headers sync state first
|
return s.defineSyncStage()
|
||||||
|
}
|
||||||
|
|
||||||
|
// defineSyncStage sequentially checks and sets sync state process stage after Module
|
||||||
|
// initialization. It also performs initialization of MPT Billet if necessary.
|
||||||
|
func (s *Module) defineSyncStage() error {
|
||||||
|
// check headers sync stage first
|
||||||
ltstHeaderHeight := s.bc.HeaderHeight()
|
ltstHeaderHeight := s.bc.HeaderHeight()
|
||||||
if ltstHeaderHeight > p {
|
if ltstHeaderHeight > s.syncPoint {
|
||||||
s.syncStage = headersSynced
|
s.syncStage = headersSynced
|
||||||
s.log.Info("headers are in sync",
|
s.log.Info("headers are in sync",
|
||||||
zap.Uint32("headerHeight", s.bc.HeaderHeight()))
|
zap.Uint32("headerHeight", s.bc.HeaderHeight()))
|
||||||
}
|
}
|
||||||
|
|
||||||
// check blocks sync state
|
// check blocks sync stage
|
||||||
s.blockHeight = s.getLatestSavedBlock(p)
|
s.blockHeight = s.getLatestSavedBlock(s.syncPoint)
|
||||||
if s.blockHeight >= p {
|
if s.blockHeight >= s.syncPoint {
|
||||||
s.syncStage |= blocksSynced
|
s.syncStage |= blocksSynced
|
||||||
s.log.Info("blocks are in sync",
|
s.log.Info("blocks are in sync",
|
||||||
zap.Uint32("blockHeight", s.blockHeight))
|
zap.Uint32("blockHeight", s.blockHeight))
|
||||||
}
|
}
|
||||||
|
|
||||||
// check MPT sync state
|
// check MPT sync stage
|
||||||
if s.blockHeight > p {
|
if s.blockHeight > s.syncPoint {
|
||||||
s.syncStage |= mptSynced
|
s.syncStage |= mptSynced
|
||||||
s.log.Info("MPT is in sync",
|
s.log.Info("MPT is in sync",
|
||||||
zap.Uint32("stateroot height", s.bc.GetStateModule().CurrentLocalHeight()))
|
zap.Uint32("stateroot height", s.bc.GetStateModule().CurrentLocalHeight()))
|
||||||
} else if s.syncStage&headersSynced != 0 {
|
} else if s.syncStage&headersSynced != 0 {
|
||||||
header, err := s.bc.GetHeader(s.bc.GetHeaderHash(int(p + 1)))
|
header, err := s.bc.GetHeader(s.bc.GetHeaderHash(int(s.syncPoint + 1)))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to get header to initialize MPT billet: %w", err)
|
return fmt.Errorf("failed to get header to initialize MPT billet: %w", err)
|
||||||
}
|
}
|
||||||
|
@ -186,13 +192,13 @@ func (s *Module) Init(currChainHeight uint32) error {
|
||||||
return false
|
return false
|
||||||
}, true)
|
}, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to traverse MPT while initialization: %w", err)
|
return fmt.Errorf("failed to traverse MPT during initialization: %w", err)
|
||||||
}
|
}
|
||||||
s.mptpool.Update(nil, pool.GetAll())
|
s.mptpool.Update(nil, pool.GetAll())
|
||||||
if s.mptpool.Count() == 0 {
|
if s.mptpool.Count() == 0 {
|
||||||
s.syncStage |= mptSynced
|
s.syncStage |= mptSynced
|
||||||
s.log.Info("MPT is in sync",
|
s.log.Info("MPT is in sync",
|
||||||
zap.Uint32("stateroot height", p))
|
zap.Uint32("stateroot height", s.syncPoint))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -234,21 +240,10 @@ func (s *Module) AddHeaders(hdrs ...*block.Header) error {
|
||||||
|
|
||||||
hdrsErr := s.bc.AddHeaders(hdrs...)
|
hdrsErr := s.bc.AddHeaders(hdrs...)
|
||||||
if s.bc.HeaderHeight() > s.syncPoint {
|
if s.bc.HeaderHeight() > s.syncPoint {
|
||||||
s.syncStage = headersSynced
|
err := s.defineSyncStage()
|
||||||
s.log.Info("headers for state sync are fetched",
|
|
||||||
zap.Uint32("header height", s.bc.HeaderHeight()))
|
|
||||||
|
|
||||||
header, err := s.bc.GetHeader(s.bc.GetHeaderHash(int(s.syncPoint) + 1))
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
s.log.Fatal("failed to get header to initialize MPT billet",
|
return fmt.Errorf("failed to define current sync stage: %w", err)
|
||||||
zap.Uint32("height", s.syncPoint+1),
|
|
||||||
zap.Error(err))
|
|
||||||
}
|
}
|
||||||
s.billet = mpt.NewBillet(header.PrevStateRoot, s.bc.GetConfig().KeepOnlyLatestState, s.dao.Store)
|
|
||||||
s.mptpool.Add(header.PrevStateRoot, []byte{})
|
|
||||||
s.log.Info("MPT billet initialized",
|
|
||||||
zap.Uint32("height", s.syncPoint),
|
|
||||||
zap.String("state root", header.PrevStateRoot.StringBE()))
|
|
||||||
}
|
}
|
||||||
return hdrsErr
|
return hdrsErr
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue