mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-23 05:06:43 +00:00
eth/syncer: advance safe and finalized block
Signed-off-by: jsvisa <delweng@gmail.com>
This commit is contained in:
parent
33dbd64a23
commit
b266cc2482
1 changed files with 36 additions and 1 deletions
|
|
@ -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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue