beacon/light: shift sync committees over correctly

This commit is contained in:
lightclient 2024-01-05 19:43:46 -07:00
parent 2d2b7f4bec
commit c63e8c58bc
No known key found for this signature in database
GPG key ID: 75C916AFEE20183E
2 changed files with 8 additions and 3 deletions

View file

@ -54,6 +54,9 @@ func Bootstrap(server string, headers []string, root common.Hash) (*LightClient,
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to get bootstrap data: %w", err) return nil, fmt.Errorf("failed to get bootstrap data: %w", err)
} }
if bs.Header.Hash() != root {
return nil, fmt.Errorf("bootstrap root did not match requested: want %s, got %s", root, bs.Header.Hash())
}
if err := bs.Valid(); err != nil { if err := bs.Valid(); err != nil {
return nil, fmt.Errorf("failed to validate bootstrap data: %w", err) return nil, fmt.Errorf("failed to validate bootstrap data: %w", err)
} }
@ -95,20 +98,22 @@ func (c *LightClient) Finalized() *types.Header {
func (c *LightClient) Start() error { func (c *LightClient) Start() error {
var ( var (
ticker = time.NewTicker(params.SlotLength * time.Second) ticker = time.NewTicker(params.SlotLength * time.Second)
lastFinality = time.Now() lastFinality = time.Time{}
) )
for { for {
select { select {
case <-c.quitCh: case <-c.quitCh:
return nil return nil
case <-ticker.C: case <-ticker.C:
log.Trace("Blsync status", "period", c.store.finalizedPeriod(), "active", c.store.currActive, "prevActive", c.store.prevActive, "currCommittee", c.store.current != nil, "nextCommittee", c.store.next != nil)
if c.store.next == nil { if c.store.next == nil {
log.Debug("Fetching committee update", "period", c.store.finalizedPeriod()) log.Debug("Fetching committee update", "period", c.store.finalizedPeriod()+1)
updates, err := c.beacon.GetRangeUpdate(c.store.finalizedPeriod(), 1) updates, err := c.beacon.GetRangeUpdate(c.store.finalizedPeriod(), 1)
if err != nil { if err != nil {
log.Error("Failed to fetch next committee", "err", err) log.Error("Failed to fetch next committee", "err", err)
} else { } else {
for _, update := range updates { for _, update := range updates {
log.Trace("New beacon range update", "slot", update.AttestedHeader.Slot, "root", update.AttestedHeader.Hash(), "sigslot", update.SignatureSlot, "period", update.AttestedHeader.SyncPeriod())
if err := c.store.Insert(update); err != nil { if err := c.store.Insert(update); err != nil {
log.Error("Failed to insert committee update", "err", err) log.Error("Failed to insert committee update", "err", err)
break break

View file

@ -166,7 +166,6 @@ func (s *store) Insert(update *types.LightClientUpdate) error {
// Process finalized header update. // Process finalized header update.
if update.FinalizedHeader != nil { if update.FinalizedHeader != nil {
if update.FinalizedHeader.Header.Slot > s.finalized.Slot { if update.FinalizedHeader.Header.Slot > s.finalized.Slot {
s.finalized = &update.FinalizedHeader.Header
var ( var (
storedPeriod = types.SyncPeriod(s.finalized.Slot) storedPeriod = types.SyncPeriod(s.finalized.Slot)
updatePeriod = types.SyncPeriod(update.FinalizedHeader.Slot) updatePeriod = types.SyncPeriod(update.FinalizedHeader.Slot)
@ -179,6 +178,7 @@ func (s *store) Insert(update *types.LightClientUpdate) error {
s.prevActive = s.currActive s.prevActive = s.currActive
s.currActive = 0 s.currActive = 0
} }
s.finalized = &update.FinalizedHeader.Header
} }
} }