diff --git a/eth/stagedsync/stage_headers.go b/eth/stagedsync/stage_headers.go index 03007d1c799..1202e3f89b9 100644 --- a/eth/stagedsync/stage_headers.go +++ b/eth/stagedsync/stage_headers.go @@ -218,7 +218,7 @@ func HeadersPOS( return nil } -func safeAndFinalizedBlocksAreCanonical( +func writeForkChoiceHashes( forkChoice *engineapi.ForkChoiceMessage, s *StageState, tx kv.RwTx, @@ -229,9 +229,7 @@ func safeAndFinalizedBlocksAreCanonical( if err != nil { return false, err } - if safeIsCanonical { - rawdb.WriteForkchoiceSafe(tx, forkChoice.SafeBlockHash) - } else { + if !safeIsCanonical { log.Warn(fmt.Sprintf("[%s] Non-canonical SafeBlockHash", s.LogPrefix()), "forkChoice", forkChoice) return false, nil } @@ -242,14 +240,20 @@ func safeAndFinalizedBlocksAreCanonical( if err != nil { return false, err } - if finalizedIsCanonical { - rawdb.WriteForkchoiceFinalized(tx, forkChoice.FinalizedBlockHash) - } else { + if !finalizedIsCanonical { log.Warn(fmt.Sprintf("[%s] Non-canonical FinalizedBlockHash", s.LogPrefix()), "forkChoice", forkChoice) return false, nil } } + rawdb.WriteForkchoiceHead(tx, forkChoice.HeadBlockHash) + if forkChoice.SafeBlockHash != (common.Hash{}) { + rawdb.WriteForkchoiceSafe(tx, forkChoice.SafeBlockHash) + } + if forkChoice.FinalizedBlockHash != (common.Hash{}) { + rawdb.WriteForkchoiceFinalized(tx, forkChoice.FinalizedBlockHash) + } + return true, nil } @@ -274,8 +278,7 @@ func startHandlingForkChoice( if currentHeadHash == headerHash { // no-op log.Debug(fmt.Sprintf("[%s] Fork choice no-op", s.LogPrefix())) cfg.hd.BeaconRequestList.Remove(requestId) - rawdb.WriteForkchoiceHead(tx, forkChoice.HeadBlockHash) - canonical, err := safeAndFinalizedBlocksAreCanonical(forkChoice, s, tx, cfg) + canonical, err := writeForkChoiceHashes(forkChoice, s, tx, cfg) if err != nil { log.Warn(fmt.Sprintf("[%s] Fork choice err", s.LogPrefix()), "err", err) return nil, err @@ -349,8 +352,7 @@ func startHandlingForkChoice( return nil, err } cfg.hd.BeaconRequestList.Remove(requestId) - rawdb.WriteForkchoiceHead(tx, forkChoice.HeadBlockHash) - canonical, err := safeAndFinalizedBlocksAreCanonical(forkChoice, s, tx, cfg) + canonical, err := writeForkChoiceHashes(forkChoice, s, tx, cfg) if err != nil { log.Warn(fmt.Sprintf("[%s] Fork choice err", s.LogPrefix()), "err", err) return nil, err @@ -416,9 +418,8 @@ func finishHandlingForkChoice( if err := rawdb.WriteHeadHeaderHash(tx, forkChoice.HeadBlockHash); err != nil { return err } - rawdb.WriteForkchoiceHead(tx, forkChoice.HeadBlockHash) - canonical, err := safeAndFinalizedBlocksAreCanonical(forkChoice, s, tx, cfg) + canonical, err := writeForkChoiceHashes(forkChoice, s, tx, cfg) if err != nil { return err }