eth/syncer: advance safe and finalized block

Signed-off-by: jsvisa <delweng@gmail.com>
This commit is contained in:
jsvisa 2025-10-28 08:30:05 +00:00
parent 33dbd64a23
commit b266cc2482

View file

@ -22,6 +22,7 @@ import (
"sync" "sync"
"time" "time"
beaconparams "github.com/ethereum/go-ethereum/beacon/params"
"github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/eth" "github.com/ethereum/go-ethereum/eth"
@ -129,7 +130,11 @@ func (s *Syncer) run() {
break break
} }
if resync { if resync {
req.errc <- s.backend.Downloader().BeaconDevSync(ethconfig.FullSync, target) err := s.backend.Downloader().BeaconDevSync(ethconfig.FullSync, target)
if err == nil {
s.advanceDevFinality()
}
req.errc <- err
} }
case <-ticker.C: case <-ticker.C:
@ -196,3 +201,33 @@ func NewAPI(s *Syncer) *API {
func (api *API) Sync(target common.Hash) error { func (api *API) Sync(target common.Hash) error {
return api.s.Sync(target) return api.s.Sync(target)
} }
// advanceDevFinality synthesizes safe/finalized heads for the dev beacon-sync
func (s *Syncer) advanceDevFinality() {
bc := s.backend.BlockChain()
head := bc.CurrentBlock()
if head == nil {
return
}
safeNumber := head.Number.Uint64() - beaconparams.EpochLength
safeHeader := bc.GetHeaderByNumber(safeNumber)
if safeHeader == nil {
log.Warn("Dev sync could not resolve safe header", "number", safeNumber)
return
}
if safe := bc.CurrentSafeBlock(); safe == nil || safe.Hash() != safeHeader.Hash() {
bc.SetSafe(safeHeader)
}
finalNumber := safeNumber - beaconparams.EpochLength
finalHeader := bc.GetHeaderByNumber(finalNumber)
if finalHeader == nil {
log.Warn("Dev sync could not resolve finalized header", "number", finalNumber)
return
}
if finalized := bc.CurrentFinalBlock(); finalized == nil || finalized.Hash() != finalHeader.Hash() {
bc.SetFinalized(finalHeader)
}
}