mirror of
https://github.com/kaspanet/kaspad.git
synced 2025-07-05 20:32:31 +00:00
[NOD-1515] Allow to process pruning point while in SyncStateMissingUTXOSet (#1005)
This commit is contained in:
parent
d0fc728c23
commit
215ab512cd
@ -13,11 +13,21 @@ func (bp *blockProcessor) validateAndInsertBlock(block *externalapi.DomainBlock)
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
hash := consensusserialization.HeaderHash(block.Header)
|
||||||
if mode.State == externalapi.SyncStateMissingUTXOSet {
|
if mode.State == externalapi.SyncStateMissingUTXOSet {
|
||||||
return errors.Errorf("cannot insert blocks while in %s mode", mode.State)
|
headerTipsPruningPoint, err := bp.consensusStateManager.HeaderTipsPruningPoint()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if *hash != *headerTipsPruningPoint {
|
||||||
|
return errors.Errorf("cannot insert blocks other than the header pruning point "+
|
||||||
|
"while in %s mode", mode.State)
|
||||||
|
}
|
||||||
|
|
||||||
|
mode.State = externalapi.SyncStateMissingBlockBodies
|
||||||
}
|
}
|
||||||
|
|
||||||
hash := consensusserialization.HeaderHash(block.Header)
|
|
||||||
if mode.State == externalapi.SyncStateHeadersFirst && len(block.Transactions) != 0 {
|
if mode.State == externalapi.SyncStateHeadersFirst && len(block.Transactions) != 0 {
|
||||||
mode.State = externalapi.SyncStateNormal
|
mode.State = externalapi.SyncStateNormal
|
||||||
log.Warnf("block %s contains transactions while validating in header only mode", hash)
|
log.Warnf("block %s contains transactions while validating in header only mode", hash)
|
||||||
|
@ -64,7 +64,10 @@ func (csm *consensusStateManager) setPruningPointUTXOSet(serializedUTXOSet []byt
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
csm.consensusStateStore.StageVirtualUTXOSet(protoUTXOSetToReadOnlyUTXOSetIterator(protoUTXOSet))
|
err = csm.consensusStateStore.StageVirtualUTXOSet(protoUTXOSetToReadOnlyUTXOSetIterator(protoUTXOSet))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
err = csm.ghostdagManager.GHOSTDAG(model.VirtualBlockHash)
|
err = csm.ghostdagManager.GHOSTDAG(model.VirtualBlockHash)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -111,7 +111,16 @@ func (sm *syncManager) missingBlockBodyHashes(highHash *externalapi.DomainHash)
|
|||||||
|
|
||||||
lowHash := headerTipsPruningPoint
|
lowHash := headerTipsPruningPoint
|
||||||
for selectedChildIterator.Next() {
|
for selectedChildIterator.Next() {
|
||||||
lowHash = selectedChildIterator.Get()
|
selectedChild := selectedChildIterator.Get()
|
||||||
|
selectedChildStatus, err := sm.blockStatusStore.Get(sm.databaseContext, selectedChild)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if selectedChildStatus != externalapi.StatusHeaderOnly {
|
||||||
|
lowHash = selectedChild
|
||||||
|
break
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
hashesBetween, err := sm.antiPastHashesBetween(lowHash, highHash)
|
hashesBetween, err := sm.antiPastHashesBetween(lowHash, highHash)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user